Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions app/src/main/java/app/gamenative/PrefManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,14 @@ object PrefManager {
setPref(STEAM_OFFLINE_MODE, value)
}

private val EPIC_OFFLINE_MODE = booleanPreferencesKey("epic_offline_mode")
var epicOfflineMode: Boolean
get() = getPref(EPIC_OFFLINE_MODE, false)
set(value) {
setPref(EPIC_OFFLINE_MODE, value)
}


private val USE_LEGACY_DRM = booleanPreferencesKey("use_legacy_drm")
var useLegacyDRM: Boolean
get() = getPref(USE_LEGACY_DRM, false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,10 @@ object EpicGameLauncher {
return try {
val params = mutableListOf<String>()

// Do offline play if offline.
// Offline launch if offline (either via the container settings or the device)
if (offline) {
if (game.canRunOffline) {
Timber.tag("EPIC").i("Launching ${game.appName} in offline mode (no authentication)")
return Result.success(params)
} else {
Timber.tag("EPIC").w("${game.appName} cannot run offline, will attempt online launch")
}
}

Timber.tag("EPIC").d("Launching ${game.appName} online, getting game launch token...")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -330,13 +330,7 @@ fun GeneralTabContent(
state = config.forceDlc,
onCheckedChange = { state.config.value = config.copy(forceDlc = it) },
)
// SettingsSwitch(
// colors = settingsTileColorsAlt(),
// title = { Text(text = stringResource(R.string.local_saves_only)) },
// subtitle = { Text(text = stringResource(R.string.local_saves_only_description)) },
// state = config.localSavesOnly,
// onCheckedChange = { state.config.value = config.copy(localSavesOnly = it) },
// )

SettingsSwitch(
colors = settingsTileColorsAlt(),
title = { Text(text = stringResource(R.string.use_legacy_drm)) },
Expand All @@ -359,6 +353,13 @@ fun GeneralTabContent(
state = config.steamOfflineMode,
onCheckedChange = { state.config.value = config.copy(steamOfflineMode = it) },
)
SettingsSwitch(
colors = settingsTileColorsAlt(),
title = { Text(text = stringResource(R.string.epic_offline_mode)) },
subtitle = { Text(text = stringResource(R.string.epic_offline_mode_description)) },
state = config.epicOfflineMode,
onCheckedChange = { state.config.value = config.copy(epicOfflineMode = it) },
)
SettingsSwitch(
colors = settingsTileColorsAlt(),
title = { Text(text = stringResource(R.string.launch_steam_client_beta)) },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1977,7 +1977,7 @@ fun XServerScreen(
xServerView!!.getxServer(),
containerVariantChanged,
onGameLaunchError,
navigateBack,
isOffline
)
if (!PluviaApp.isActivityInForeground && !neverSuspend) {
PluviaApp.xEnvironment?.onPause()
Expand Down Expand Up @@ -2992,16 +2992,13 @@ private fun setupXEnvironment(
bootToContainer: Boolean,
testGraphics: Boolean,
xServerState: MutableState<XServerState>,
// xServerViewModel: XServerViewModel,
envVars: EnvVars,
// generateWinePrefix: Boolean,
container: Container?,
appLaunchInfo: LaunchInfo?,
// shortcut: Shortcut?,
xServer: XServer,
containerVariantChanged: Boolean,
onGameLaunchError: ((String) -> Unit)? = null,
navigateBack: () -> Unit,
offline: Boolean = false
Comment on lines 1980 to +3001
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed some old params, and removed navigateBack as it wasn't used.

Added in "offline" from the XServerScreen constructor to do a similar check as Steam.

): XEnvironment {
ProcessHelper.hardKillStaleWineProcesses()

Expand Down Expand Up @@ -3121,7 +3118,7 @@ private fun setupXEnvironment(
}
}
gameExecutable = "wine explorer /desktop=shell," + xServer.screenInfo + " " +
getWineStartCommand(context, appId, container, bootToContainer, testGraphics, appLaunchInfo, envVars, guestProgramLauncherComponent, gameSource) +
getWineStartCommand(context, appId, container, bootToContainer, testGraphics, appLaunchInfo, envVars, guestProgramLauncherComponent, gameSource, offline) +
(if (container.execArgs.isNotEmpty()) " " + container.execArgs else "")
preInstallCommands = PreInstallSteps.getPreInstallCommands(
container,
Expand Down Expand Up @@ -3414,6 +3411,7 @@ private fun getWineStartCommand(
envVars: EnvVars,
guestProgramLauncherComponent: GuestProgramLauncherComponent,
gameSource: GameSource,
offline: Boolean
): String {
val tempDir = File(container.getRootDir(), ".wine/drive_c/windows/temp")
FileUtils.clear(tempDir)
Expand Down Expand Up @@ -3512,7 +3510,8 @@ private fun getWineStartCommand(
// Get Epic launch parameters
Timber.tag("XServerScreen").d("Building Epic launch parameters for ${game.appName}...")
val runArguments: List<String> = runBlocking {
val result = EpicService.buildLaunchParameters(context, container, game, false)
val offlineLaunch = offline || container.isEpicOfflineMode;
val result = EpicService.buildLaunchParameters(context, container, game, offlineLaunch)
if (result.isFailure) {
Timber.tag("XServerScreen").e(result.exceptionOrNull(), "Failed to build Epic launch parameters")
}
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/java/app/gamenative/utils/ContainerUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ object ContainerUtils {
forceDlc = PrefManager.forceDlc,
localSavesOnly = PrefManager.localSavesOnly,
steamOfflineMode = PrefManager.steamOfflineMode,
epicOfflineMode = PrefManager.epicOfflineMode,
useLegacyDRM = PrefManager.useLegacyDRM,
unpackFiles = PrefManager.unpackFiles,
suspendPolicy = PrefManager.suspendPolicy,
Expand Down Expand Up @@ -202,6 +203,7 @@ object ContainerUtils {
PrefManager.forceDlc = containerData.forceDlc
PrefManager.localSavesOnly = containerData.localSavesOnly
PrefManager.steamOfflineMode = containerData.steamOfflineMode
PrefManager.epicOfflineMode = containerData.epicOfflineMode
PrefManager.useLegacyDRM = containerData.useLegacyDRM
PrefManager.unpackFiles = containerData.unpackFiles
PrefManager.suspendPolicy = containerData.suspendPolicy
Expand Down Expand Up @@ -300,6 +302,7 @@ object ContainerUtils {
forceDlc = container.isForceDlc,
localSavesOnly = container.isLocalSavesOnly,
steamOfflineMode = container.isSteamOfflineMode(),
epicOfflineMode = container.isEpicOfflineMode(),
useLegacyDRM = container.isUseLegacyDRM(),
unpackFiles = container.isUnpackFiles(),
suspendPolicy = container.suspendPolicy,
Expand Down Expand Up @@ -388,6 +391,7 @@ object ContainerUtils {
?: updatedData
"useLegacyDRM" -> value?.let { updatedData.copy(useLegacyDRM = it as? Boolean ?: updatedData.useLegacyDRM) } ?: updatedData
"steamOfflineMode" -> value?.let { updatedData.copy(steamOfflineMode = it as? Boolean ?: updatedData.steamOfflineMode) } ?: updatedData
"epicOfflineMode" -> value?.let { updatedData.copy(epicOfflineMode = it as? Boolean ?: updatedData.epicOfflineMode) } ?: updatedData
"unpackFiles" -> value?.let { updatedData.copy(unpackFiles = it as? Boolean ?: updatedData.unpackFiles) } ?: updatedData
"suspendPolicy" -> value?.let { updatedData.copy(suspendPolicy = it as? String ?: updatedData.suspendPolicy) } ?: updatedData
"envVars" -> value?.let { updatedData.copy(envVars = it as? String ?: updatedData.envVars) } ?: updatedData
Expand Down Expand Up @@ -416,6 +420,7 @@ object ContainerUtils {
}
val previousForceDlc: Boolean = container.isForceDlc
val previousSteamOfflineMode: Boolean = container.isSteamOfflineMode()

val previousUnpackFiles: Boolean = container.isUnpackFiles
val userRegFile = File(container.rootDir, ".wine/user.reg")
WineRegistryEditor(userRegFile).use { registryEditor ->
Expand Down Expand Up @@ -482,6 +487,7 @@ object ContainerUtils {
container.setForceDlc(containerData.forceDlc)
container.setLocalSavesOnly(containerData.localSavesOnly)
container.setSteamOfflineMode(containerData.steamOfflineMode)
container.setEpicOfflineMode(containerData.epicOfflineMode)
container.setUseLegacyDRM(containerData.useLegacyDRM)
container.setUnpackFiles(containerData.unpackFiles)
container.setSuspendPolicy(containerData.suspendPolicy)
Expand Down Expand Up @@ -858,6 +864,7 @@ object ContainerUtils {
disableMouseInput = PrefManager.disableMouseInput,
forceDlc = PrefManager.forceDlc,
steamOfflineMode = PrefManager.steamOfflineMode,
epicOfflineMode = PrefManager.epicOfflineMode,
useLegacyDRM = PrefManager.useLegacyDRM,
unpackFiles = PrefManager.unpackFiles,
suspendPolicy = PrefManager.suspendPolicy,
Expand Down
16 changes: 16 additions & 0 deletions app/src/main/java/com/winlator/container/Container.java
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,8 @@ public enum XrControllerMapping {

private boolean steamOfflineMode = false;

private boolean epicOfflineMode = false;

private boolean useLegacyDRM = false;

private boolean unpackFiles = false;
Expand Down Expand Up @@ -713,6 +715,9 @@ public void saveData() {
// Steam offline mode setting
data.put("steamOfflineMode", steamOfflineMode);

// Steam offline mode setting
data.put("epicOfflineMode", epicOfflineMode);

// Use Legacy DRM setting
data.put("useLegacyDRM", useLegacyDRM);

Expand Down Expand Up @@ -912,6 +917,9 @@ public void loadData(JSONObject data) throws JSONException {
case "steamOfflineMode":
this.steamOfflineMode = data.getBoolean(key);
break;
case "epicOfflineMode":
this.epicOfflineMode = data.getBoolean(key);
break;
case "useLegacyDRM":
this.useLegacyDRM = data.getBoolean(key);
break;
Expand Down Expand Up @@ -1000,10 +1008,18 @@ public boolean isSteamOfflineMode() {
return steamOfflineMode;
}

public boolean isEpicOfflineMode() {
return epicOfflineMode;
}

public void setSteamOfflineMode(boolean steamOfflineMode) {
this.steamOfflineMode = steamOfflineMode;
}

public void setEpicOfflineMode(boolean epicOfflineMode) {
this.epicOfflineMode = epicOfflineMode;
}

public boolean isUseLegacyDRM() {
return useLegacyDRM;
}
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/java/com/winlator/container/ContainerData.kt
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ data class ContainerData(
val forceDlc: Boolean = false,
val localSavesOnly: Boolean = false,
val steamOfflineMode: Boolean = false,
val epicOfflineMode: Boolean = false,
val useLegacyDRM: Boolean = false,
val unpackFiles: Boolean = false,
val suspendPolicy: String = Container.SUSPEND_POLICY_MANUAL,
Expand Down Expand Up @@ -155,6 +156,7 @@ data class ContainerData(
"forceDlc" to state.forceDlc,
"localSavesOnly" to state.localSavesOnly,
"steamOfflineMode" to state.steamOfflineMode,
"epicOfflineMode" to state.epicOfflineMode,
"useLegacyDRM" to state.useLegacyDRM,
"unpackFiles" to state.unpackFiles,
"suspendPolicy" to state.suspendPolicy,
Expand Down Expand Up @@ -219,6 +221,7 @@ data class ContainerData(
forceDlc = (savedMap["forceDlc"] as? Boolean) ?: false,
localSavesOnly = (savedMap["localSavesOnly"] as? Boolean) ?: false,
steamOfflineMode = (savedMap["steamOfflineMode"] as? Boolean) ?: false,
epicOfflineMode = (savedMap["epicOfflineMode"] as? Boolean) ?: false,
useLegacyDRM = (savedMap["useLegacyDRM"] as? Boolean) ?: false,
unpackFiles = (savedMap["unpackFiles"] as? Boolean) ?: false,
suspendPolicy = (savedMap["suspendPolicy"] as? String) ?: Container.SUSPEND_POLICY_MANUAL,
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-da/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,8 @@
<string name="launch_steam_client_beta">Start Steam-klient (Beta)</string>
<string name="steam_offline_mode">Steam Offline-tilstand</string>
<string name="steam_offline_mode_description">Start Steam-spil i offline-tilstand</string>
<string name="epic_offline_mode">Epic Offline-tilstand</string>
<string name="epic_offline_mode_description">Start Epic-spil i offline-tilstand</string>
<string name="achievement_unlocked">Præstation låst op</string>
<string name="settings_achievement_notification_position">Placering af præstationsnotifikation</string>
<string name="achievement_position_top_left">Øverst til venstre</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -632,6 +632,8 @@
<string name="launch_steam_client_beta">Steam-Client starten (Beta)</string>
<string name="steam_offline_mode">Steam Offline-Modus</string>
<string name="steam_offline_mode_description">Steam-Spiele im Offlinemodus starten</string>
<string name="epic_offline_mode">Epic Offline-Modus</string>
<string name="epic_offline_mode_description">Epic-Spiele im Offlinemodus starten</string>
<string name="achievement_unlocked">Erfolg freigeschaltet</string>
<string name="settings_achievement_notification_position">Position der Erfolgsbenachrichtigung</string>
<string name="achievement_position_top_left">Oben links</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -705,6 +705,8 @@
<string name="launch_steam_client_description">Reduce el rendimiento y ralentiza el inicio.\nPermite el juego en línea y soluciona problemas de DRM y de mando.\nNo todos los juegos funcionan.</string>
<string name="steam_offline_mode">Modo sin conexión de Steam</string>
<string name="steam_offline_mode_description">Inicia juegos de Steam en modo sin conexión.</string>
<string name="epic_offline_mode">Modo sin conexión de Epic</string>
<string name="epic_offline_mode_description">Inicia juegos de Epic en modo sin conexión.</string>
<string name="achievement_unlocked">Logro desbloqueado</string>
<string name="settings_achievement_notification_position">Posición de notificación de logro</string>
<string name="achievement_position_top_left">Arriba izquierda</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -655,6 +655,8 @@
<string name="launch_steam_client_beta">Lancer le client Steam (Bêta)</string>
<string name="steam_offline_mode">Mode Hors Ligne Steam</string>
<string name="steam_offline_mode_description">Lancer les jeux Steam en mode hors ligne</string>
<string name="epic_offline_mode">Mode Hors Ligne Epic</string>
<string name="epic_offline_mode_description">Lancer les jeux Epic en mode hors ligne</string>
<string name="achievement_unlocked">Succès débloqué</string>
<string name="settings_achievement_notification_position">Position de la notification de succès</string>
<string name="achievement_position_top_left">En haut à gauche</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-it/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -659,6 +659,8 @@
<string name="launch_steam_client_beta">Avvia Client Steam (Beta)</string>
<string name="steam_offline_mode">Modalità Offline Steam</string>
<string name="steam_offline_mode_description">Avvia i giochi Steam in modalità offline</string>
<string name="epic_offline_mode">Modalità Offline Epic</string>
<string name="epic_offline_mode_description">Avvia i giochi Epic in modalità offline</string>
<string name="achievement_unlocked">Obiettivo sbloccato</string>
<string name="settings_achievement_notification_position">Posizione notifica obiettivo</string>
<string name="achievement_position_top_left">In alto a sinistra</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-ko/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -669,6 +669,8 @@
<string name="launch_steam_client_beta">Steam 클라이언트 실행(베타)</string>
<string name="steam_offline_mode">Steam 오프라인 모드</string>
<string name="steam_offline_mode_description">Steam 게임을 오프라인 모드로 실행</string>
<string name="epic_offline_mode">Epic 오프라인 모드</string>
<string name="epic_offline_mode_description">Epic 게임을 오프라인 모드로 실행</string>
<string name="achievement_unlocked">업적 달성</string>
<string name="settings_achievement_notification_position">업적 알림 위치</string>
<string name="achievement_position_top_left">좌측 상단</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-pl/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -668,6 +668,8 @@
<string name="launch_steam_client_beta">Uruchom Klienta Steam (Beta)</string>
<string name="steam_offline_mode">Tryb Offline Steam</string>
<string name="steam_offline_mode_description">Uruchamiaj gry Steam w trybie offline</string>
<string name="epic_offline_mode">Tryb Offline Epic</string>
<string name="epic_offline_mode_description">Uruchamiaj gry Epic w trybie offline</string>
<string name="achievement_unlocked">Osiągnięcie odblokowane</string>
<string name="settings_achievement_notification_position">Pozycja powiadomienia o osiągnięciu</string>
<string name="achievement_position_top_left">Lewy górny</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-pt-rBR/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,8 @@
<string name="launch_steam_client_beta">Iniciar o cliente Steam (Beta)</string>
<string name="steam_offline_mode">Modo Offline do Steam</string>
<string name="steam_offline_mode_description">Iniciar jogos Steam no modo offline</string>
<string name="epic_offline_mode">Modo Offline da Epic</string>
<string name="epic_offline_mode_description">Iniciar jogos Epic no modo offline</string>
<string name="achievement_unlocked">Conquista desbloqueada</string>
<string name="settings_achievement_notification_position">Posição da notificação de conquista</string>
<string name="achievement_position_top_left">Superior esquerdo</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-ro/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -660,6 +660,8 @@
<string name="launch_steam_client_beta">Pornește Steam Client (Beta)</string>
<string name="steam_offline_mode">Mod Offline Steam</string>
<string name="steam_offline_mode_description">Pornește jocurile Steam în mod offline</string>
<string name="epic_offline_mode">Mod Offline Epic</string>
<string name="epic_offline_mode_description">Pornește jocurile Epic în mod offline</string>
<string name="achievement_unlocked">Realizare deblocată</string>
<string name="settings_achievement_notification_position">Poziția notificării realizării</string>
<string name="achievement_position_top_left">Stânga sus</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1119,6 +1119,8 @@ https://gamenative.app
<string name="steam_not_logged_in">Вы должны войти в Steam, чтобы использовать эту функцию</string>
<string name="steam_offline_mode">Автономный режим Steam</string>
<string name="steam_offline_mode_description">Запускать игры Steam в автономном режиме</string>
<string name="epic_offline_mode">Автономный режим Epic</string>
<string name="epic_offline_mode_description">Запускать игры Epic в автономном режиме</string>
<string name="steam_reset_container_message">Это восстановит ваш контейнер к конфигурации по умолчанию.</string>
<string name="steam_reset_container_title">Сбросить контейнер</string>
<string name="steam_sign_in">Войти в Steam</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-uk/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -654,6 +654,8 @@
<string name="launch_steam_client_beta">Запустити клієнт Steam (Бета)</string>
<string name="steam_offline_mode">Режим Офлайн Steam</string>
<string name="steam_offline_mode_description">Запускати ігри Steam в офлайн режимі</string>
<string name="epic_offline_mode">Режим Офлайн Epic</string>
<string name="epic_offline_mode_description">Запускати ігри Epic в офлайн режимі</string>
<string name="achievement_unlocked">Досягнення розблоковано</string>
<string name="settings_achievement_notification_position">Позиція сповіщення про досягнення</string>
<string name="achievement_position_top_left">Лівий верхній</string>
Expand Down
Loading
Loading