From 1fb94b711fdbbbca7d9baaa90c53faf208fc4d0d Mon Sep 17 00:00:00 2001 From: Ax333l Date: Fri, 4 Jul 2025 18:58:11 +0200 Subject: [PATCH] fix: display version from manifest (#2634) --- .../manager/data/room/bundles/PatchBundleDao.kt | 4 ++-- .../manager/data/room/bundles/PatchBundleEntity.kt | 4 ++-- .../manager/domain/bundles/LocalPatchBundle.kt | 2 +- .../manager/domain/bundles/PatchBundleSource.kt | 9 ++++++--- .../manager/domain/bundles/RemotePatchBundle.kt | 4 ++-- .../repository/PatchBundlePersistenceRepository.kt | 11 +++++++---- .../ui/component/bundle/BundleInformationDialog.kt | 9 ++++----- .../manager/ui/component/bundle/BundleItem.kt | 7 +++---- .../manager/ui/component/bundle/BundleSelector.kt | 4 +--- .../java/app/revanced/manager/ui/model/BundleInfo.kt | 2 +- 10 files changed, 29 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/app/revanced/manager/data/room/bundles/PatchBundleDao.kt b/app/src/main/java/app/revanced/manager/data/room/bundles/PatchBundleDao.kt index d9955a70..bf8b6224 100644 --- a/app/src/main/java/app/revanced/manager/data/room/bundles/PatchBundleDao.kt +++ b/app/src/main/java/app/revanced/manager/data/room/bundles/PatchBundleDao.kt @@ -12,7 +12,7 @@ interface PatchBundleDao { fun getPropsById(uid: Int): Flow @Query("UPDATE patch_bundles SET version = :patches WHERE uid = :uid") - suspend fun updateVersion(uid: Int, patches: String?) + suspend fun updateVersionHash(uid: Int, patches: String?) @Query("UPDATE patch_bundles SET auto_update = :value WHERE uid = :uid") suspend fun setAutoUpdate(uid: Int, value: Boolean) @@ -26,7 +26,7 @@ interface PatchBundleDao { @Transaction suspend fun reset() { purgeCustomBundles() - updateVersion(0, null) // Reset the main source + updateVersionHash(0, null) // Reset the main source } @Query("DELETE FROM patch_bundles WHERE uid = :uid") diff --git a/app/src/main/java/app/revanced/manager/data/room/bundles/PatchBundleEntity.kt b/app/src/main/java/app/revanced/manager/data/room/bundles/PatchBundleEntity.kt index 8ba5f64a..8fa6e8a7 100644 --- a/app/src/main/java/app/revanced/manager/data/room/bundles/PatchBundleEntity.kt +++ b/app/src/main/java/app/revanced/manager/data/room/bundles/PatchBundleEntity.kt @@ -33,12 +33,12 @@ sealed class Source { data class PatchBundleEntity( @PrimaryKey val uid: Int, @ColumnInfo(name = "name") val name: String, - @ColumnInfo(name = "version") val version: String? = null, + @ColumnInfo(name = "version") val versionHash: String? = null, @ColumnInfo(name = "source") val source: Source, @ColumnInfo(name = "auto_update") val autoUpdate: Boolean ) data class BundleProperties( - @ColumnInfo(name = "version") val version: String? = null, + @ColumnInfo(name = "version") val versionHash: String? = null, @ColumnInfo(name = "auto_update") val autoUpdate: Boolean ) \ No newline at end of file diff --git a/app/src/main/java/app/revanced/manager/domain/bundles/LocalPatchBundle.kt b/app/src/main/java/app/revanced/manager/domain/bundles/LocalPatchBundle.kt index bcbc59cf..2fcac8d3 100644 --- a/app/src/main/java/app/revanced/manager/domain/bundles/LocalPatchBundle.kt +++ b/app/src/main/java/app/revanced/manager/domain/bundles/LocalPatchBundle.kt @@ -15,7 +15,7 @@ class LocalPatchBundle(name: String, id: Int, directory: File) : } reload()?.also { - saveVersion(it.readManifestAttribute("Version")) + saveVersionHash(it.readManifestAttribute("Version")) } } } diff --git a/app/src/main/java/app/revanced/manager/domain/bundles/PatchBundleSource.kt b/app/src/main/java/app/revanced/manager/domain/bundles/PatchBundleSource.kt index 308e2a56..ee46cc71 100644 --- a/app/src/main/java/app/revanced/manager/domain/bundles/PatchBundleSource.kt +++ b/app/src/main/java/app/revanced/manager/domain/bundles/PatchBundleSource.kt @@ -38,6 +38,9 @@ sealed class PatchBundleSource(initialName: String, val uid: Int, directory: Fil suspend fun getName() = nameFlow.first() + val versionFlow = state.map { it.patchBundleOrNull()?.readManifestAttribute("Version") } + val patchCountFlow = state.map { it.patchBundleOrNull()?.patches?.size ?: 0 } + /** * Returns true if the bundle has been downloaded to local storage. */ @@ -84,9 +87,9 @@ sealed class PatchBundleSource(initialName: String, val uid: Int, directory: Fil fun propsFlow() = configRepository.getProps(uid).flowOn(Dispatchers.Default) suspend fun getProps() = propsFlow().first()!! - suspend fun currentVersion() = getProps().version - protected suspend fun saveVersion(version: String?) = - configRepository.updateVersion(uid, version) + suspend fun currentVersionHash() = getProps().versionHash + protected suspend fun saveVersionHash(version: String?) = + configRepository.updateVersionHash(uid, version) suspend fun setName(name: String) { configRepository.setName(uid, name) diff --git a/app/src/main/java/app/revanced/manager/domain/bundles/RemotePatchBundle.kt b/app/src/main/java/app/revanced/manager/domain/bundles/RemotePatchBundle.kt index 9deb7bbe..81289855 100644 --- a/app/src/main/java/app/revanced/manager/domain/bundles/RemotePatchBundle.kt +++ b/app/src/main/java/app/revanced/manager/domain/bundles/RemotePatchBundle.kt @@ -25,7 +25,7 @@ sealed class RemotePatchBundle(name: String, id: Int, directory: File, val endpo } } - saveVersion(info.version) + saveVersionHash(info.version) reload() } @@ -35,7 +35,7 @@ sealed class RemotePatchBundle(name: String, id: Int, directory: File, val endpo suspend fun update(): Boolean = withContext(Dispatchers.IO) { val info = getLatestInfo() - if (hasInstalled() && info.version == currentVersion()) + if (hasInstalled() && info.version == currentVersionHash()) return@withContext false download(info) diff --git a/app/src/main/java/app/revanced/manager/domain/repository/PatchBundlePersistenceRepository.kt b/app/src/main/java/app/revanced/manager/domain/repository/PatchBundlePersistenceRepository.kt index 5711d997..16fb5976 100644 --- a/app/src/main/java/app/revanced/manager/domain/repository/PatchBundlePersistenceRepository.kt +++ b/app/src/main/java/app/revanced/manager/domain/repository/PatchBundlePersistenceRepository.kt @@ -25,7 +25,7 @@ class PatchBundlePersistenceRepository(db: AppDatabase) { PatchBundleEntity( uid = generateUid(), name = name, - version = null, + versionHash = null, source = source, autoUpdate = autoUpdate ).also { @@ -34,8 +34,11 @@ class PatchBundlePersistenceRepository(db: AppDatabase) { suspend fun delete(uid: Int) = dao.remove(uid) - suspend fun updateVersion(uid: Int, version: String?) = - dao.updateVersion(uid, version) + /** + * Sets the version hash used for updates. + */ + suspend fun updateVersionHash(uid: Int, versionHash: String?) = + dao.updateVersionHash(uid, versionHash) suspend fun setAutoUpdate(uid: Int, value: Boolean) = dao.setAutoUpdate(uid, value) @@ -47,7 +50,7 @@ class PatchBundlePersistenceRepository(db: AppDatabase) { val defaultSource = PatchBundleEntity( uid = 0, name = "", - version = null, + versionHash = null, source = Source.API, autoUpdate = false ) diff --git a/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleInformationDialog.kt b/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleInformationDialog.kt index 400bdd40..15f5eae1 100644 --- a/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleInformationDialog.kt +++ b/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleInformationDialog.kt @@ -42,9 +42,8 @@ fun BundleInformationDialog( val props by remember(bundle) { bundle.propsFlow() }.collectAsStateWithLifecycle(null) - val patchCount = remember(state) { - state.patchBundleOrNull()?.patches?.size ?: 0 - } + val patchCount by bundle.patchCountFlow.collectAsStateWithLifecycle(0) + val version by bundle.versionFlow.collectAsStateWithLifecycle(null) if (viewCurrentBundlePatches) { BundlePatchesDialog( @@ -98,8 +97,8 @@ fun BundleInformationDialog( name = bundleName, remoteUrl = bundle.asRemoteOrNull?.endpoint, patchCount = patchCount, - version = props?.version, - autoUpdate = props?.autoUpdate ?: false, + version = version, + autoUpdate = props?.autoUpdate == true, onAutoUpdateChange = { composableScope.launch { bundle.asRemoteOrNull?.setAutoUpdate(it) diff --git a/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleItem.kt b/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleItem.kt index d1644df4..d50d6af2 100644 --- a/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleItem.kt +++ b/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleItem.kt @@ -47,9 +47,8 @@ fun BundleItem( var showDeleteConfirmationDialog by rememberSaveable { mutableStateOf(false) } val state by bundle.state.collectAsStateWithLifecycle() - val version by remember(bundle) { - bundle.propsFlow().map { props -> props?.version } - }.collectAsStateWithLifecycle(null) + val version by bundle.versionFlow.collectAsStateWithLifecycle(null) + val patchCount by bundle.patchCountFlow.collectAsStateWithLifecycle(0) val name by bundle.nameState if (viewBundleDialogPage) { @@ -93,7 +92,7 @@ fun BundleItem( headlineContent = { Text(name) }, supportingContent = { - state.patchBundleOrNull()?.patches?.size?.let { patchCount -> + if (state is PatchBundleSource.State.Loaded) { Text(pluralStringResource(R.plurals.patch_count, patchCount, patchCount)) } }, diff --git a/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleSelector.kt b/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleSelector.kt index b4dbbd17..c7cd7565 100644 --- a/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleSelector.kt +++ b/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleSelector.kt @@ -57,9 +57,7 @@ fun BundleSelector(bundles: List, onFinish: (PatchBundleSourc } bundles.forEach { val name by it.nameState - val version by remember(it) { - it.propsFlow().map { props -> props?.version } - }.collectAsStateWithLifecycle(null) + val version by it.versionFlow.collectAsStateWithLifecycle(null) Row( verticalAlignment = Alignment.CenterVertically, diff --git a/app/src/main/java/app/revanced/manager/ui/model/BundleInfo.kt b/app/src/main/java/app/revanced/manager/ui/model/BundleInfo.kt index 0cd3b739..cfef366f 100644 --- a/app/src/main/java/app/revanced/manager/ui/model/BundleInfo.kt +++ b/app/src/main/java/app/revanced/manager/ui/model/BundleInfo.kt @@ -79,7 +79,7 @@ data class BundleInfo( targetList.add(it) } - BundleInfo(source.getName(), source.currentVersion(), source.uid, compatible, incompatible, universal) + BundleInfo(source.getName(), bundle.readManifestAttribute("Version"), source.uid, compatible, incompatible, universal) } }