From fe859f07c4f8da4363df8d3601f77b4b6f1ed89c Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Fri, 7 Jun 2024 14:05:09 +0700 Subject: [PATCH] feat: Refresh repo actually refresh trust status --- .../domain/extension/interactor/TrustExtension.kt | 8 ++++++-- .../extension/repo/ExtensionRepoViewModel.kt | 4 ++++ .../kanade/tachiyomi/extension/ExtensionManager.kt | 12 ++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/dev/yokai/domain/extension/interactor/TrustExtension.kt b/app/src/main/java/dev/yokai/domain/extension/interactor/TrustExtension.kt index 80dc7d1917..bfedc29ef6 100644 --- a/app/src/main/java/dev/yokai/domain/extension/interactor/TrustExtension.kt +++ b/app/src/main/java/dev/yokai/domain/extension/interactor/TrustExtension.kt @@ -12,10 +12,14 @@ class TrustExtension( private val extensionRepoRepository: ExtensionRepoRepository, private val sourcePreferences: SourcePreferences, ) { - suspend fun isTrusted(pkgInfo: PackageInfo, fingerprints: List): Boolean { + suspend fun isTrustedByRepo(fingerprints: List): Boolean { val trustedFingerprints = extensionRepoRepository.getAll().map { it.signingKeyFingerprint }.toHashSet() + return trustedFingerprints.any { fingerprints.contains(it) } + } + + suspend fun isTrusted(pkgInfo: PackageInfo, fingerprints: List): Boolean { val key = "${pkgInfo.packageName}:${PackageInfoCompat.getLongVersionCode(pkgInfo)}:${fingerprints.last()}" - return trustedFingerprints.any { fingerprints.contains(it) } || key in sourcePreferences.trustedExtensions().get() + return isTrustedByRepo(fingerprints) || key in sourcePreferences.trustedExtensions().get() } fun trust(pkgName: String, versionCode: Long, signatureHash: String) { diff --git a/app/src/main/java/dev/yokai/presentation/extension/repo/ExtensionRepoViewModel.kt b/app/src/main/java/dev/yokai/presentation/extension/repo/ExtensionRepoViewModel.kt index 3a624706c8..352d676230 100644 --- a/app/src/main/java/dev/yokai/presentation/extension/repo/ExtensionRepoViewModel.kt +++ b/app/src/main/java/dev/yokai/presentation/extension/repo/ExtensionRepoViewModel.kt @@ -13,6 +13,7 @@ import dev.yokai.domain.extension.repo.interactor.ReplaceExtensionRepo import dev.yokai.domain.extension.repo.interactor.UpdateExtensionRepo import dev.yokai.domain.extension.repo.model.ExtensionRepo import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.util.system.launchIO import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -25,6 +26,8 @@ import uy.kohesive.injekt.injectLazy class ExtensionRepoViewModel : ViewModel() { + private val extensionManager: ExtensionManager by injectLazy() + private val getExtensionRepo: GetExtensionRepo by injectLazy() private val createExtensionRepo: CreateExtensionRepo by injectLazy() private val deleteExtensionRepo: DeleteExtensionRepo by injectLazy() @@ -41,6 +44,7 @@ class ExtensionRepoViewModel : viewModelScope.launchIO { getExtensionRepo.subscribeAll().collectLatest { repos -> mutableRepoState.update { ExtensionRepoState.Success(repos = repos.toImmutableList()) } + extensionManager.refreshTrust() } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt index c4e8265ae3..15ca046a90 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -308,6 +308,14 @@ class ExtensionManager( installer.uninstallApk(pkgName) } + suspend fun refreshTrust() { + val nowTrustedExtensions = untrustedExtensionsFlow.value + .filter { trustExtension.isTrustedByRepo(listOf(it.signatureHash)) } + _untrustedExtensionsFlow.value -= nowTrustedExtensions + + registerNewTrusted(nowTrustedExtensions) + } + /** * Adds the given extension to the list of trusted extensions. It also loads in background the * now trusted extensions. @@ -326,6 +334,10 @@ class ExtensionManager( .filter { it.pkgName == pkgName && it.versionCode == versionCode } _untrustedExtensionsFlow.value -= nowTrustedExtensions + registerNewTrusted(nowTrustedExtensions) + } + + private suspend fun registerNewTrusted(nowTrustedExtensions: List) { launchNow { nowTrustedExtensions .map { extension ->