From 57b7c99b9ae378fd9c19a1a41da22839dffaced9 Mon Sep 17 00:00:00 2001 From: FX1922 <120828496+FX192@users.noreply.github.com> Date: Mon, 2 Nov 2026 06:05:39 +0300 Subject: [PATCH] fix: keep games being updated in the installed list for every store (#1989) --- .../com/droiddeck/launcher/stores/StoreInstallRoot.kt | 2 +- .../java/com/droiddeck/launcher/stores/StoresState.kt | 2 +- .../droiddeck/launcher/stores/StoreInstallRootTest.kt | 9 +++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/droiddeck/launcher/stores/StoreInstallRoot.kt b/app/src/main/java/com/droiddeck/launcher/stores/StoreInstallRoot.kt index c26bcd17d..6814ad4e9 100644 --- a/app/src/main/java/com/droiddeck/launcher/stores/StoreInstallRoot.kt +++ b/app/src/main/java/com/droiddeck/launcher/stores/StoreInstallRoot.kt @@ -246,7 +246,7 @@ object StoreInstallRoot { val sidecar = StoreGameSidecar.read(folder) when { sidecar == null -> Unfinished(store, null, folder) - store == Store.GOG && sidecar.state == StoreGameSidecar.STATE_UPDATING -> null + sidecar.state == StoreGameSidecar.STATE_UPDATING -> null !sidecar.isInstalled -> Unfinished(store, sidecar.id, folder) else -> null } diff --git a/app/src/main/java/com/droiddeck/launcher/stores/StoresState.kt b/app/src/main/java/com/droiddeck/launcher/stores/StoresState.kt index cf774f47b..2902cd366 100644 --- a/app/src/main/java/com/droiddeck/launcher/stores/StoresState.kt +++ b/app/src/main/java/com/droiddeck/launcher/stores/StoresState.kt @@ -81,7 +81,7 @@ object StoresState { runCatching { com.droiddeck.launcher.stores.battlenet.BattleNetClient.syncAccount(app) } val found = Store.entries.mapNotNull { store -> StoreAccounts.displayName(app, store)?.let { store to it } } val onDisk = StoreInstallRoot.gameFolders(app).mapNotNull { folder -> - StoreGameSidecar.read(folder)?.takeIf { it.isInstalled || it.store == Store.GOG && it.state == StoreGameSidecar.STATE_UPDATING }?.let { InstalledStoreGame(it, folder) } + StoreGameSidecar.read(folder)?.takeIf { it.isInstalled || it.state == StoreGameSidecar.STATE_UPDATING }?.let { InstalledStoreGame(it, folder) } } + runCatching { com.droiddeck.launcher.stores.battlenet.BattleNetBackend.installedGames(app) }.getOrDefault(emptyList()) val partial = StoreInstallRoot.unfinished(app) val version = if (StoresNative.available) StoresNative.version ?: "" else "" diff --git a/app/src/test/java/com/droiddeck/launcher/stores/StoreInstallRootTest.kt b/app/src/test/java/com/droiddeck/launcher/stores/StoreInstallRootTest.kt index 78508a525..09cf7fc26 100644 --- a/app/src/test/java/com/droiddeck/launcher/stores/StoreInstallRootTest.kt +++ b/app/src/test/java/com/droiddeck/launcher/stores/StoreInstallRootTest.kt @@ -201,6 +201,15 @@ class StoreInstallRootTest { assertTrue(StoreInstallRoot.unfinished(app).none { it.folder.absolutePath == half.absolutePath }) } + @Test fun aGameBeingUpdatedIsNotAnUnfinishedInstallForAnyStore() { + SessionPrefs.setGameStorage(app, SessionPrefs.GAME_STORAGE_OFF, "") + for (store in listOf(Store.EPIC, Store.ITCH, Store.XBOX, Store.AMAZON)) { + val folder = File(StoreInstallRoot.storeDir(StoreInstallRoot.internalRoot(app), store), StoreInstallRoot.folderName("Updating", "u1")).apply { mkdirs() } + StoreGameSidecar(store, "u1", "Updating", "Updating.exe", state = StoreGameSidecar.STATE_UPDATING).write(folder) + assertTrue(StoreInstallRoot.unfinished(app).none { it.folder.absolutePath == folder.absolutePath }) + } + } + @Test fun theScratchCacheIsPrivateAndNamedSafely() { val dir = StoreInstallRoot.scratchDir(app, Store.EPIC, "a/b:c") assertTrue(dir.absolutePath.startsWith(app.cacheDir.absolutePath))