refactor: Cleanup for ext repo changes

This commit is contained in:
Jays2Kings 2024-01-19 11:47:24 -08:00 committed by ziro
parent b698f289dc
commit 6a8223a1ef
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
6 changed files with 20 additions and 53 deletions

View file

@ -26,9 +26,12 @@ internal class ExtensionApi {
suspend fun findExtensions(): List<Extension.Available> { suspend fun findExtensions(): List<Extension.Available> {
return withIOContext { return withIOContext {
val extensions = sourcePreferences.extensionRepos().get().flatMap { getExtensions(it) } val repos = sourcePreferences.extensionRepos().get()
if (repos.isEmpty()) {
return@withIOContext emptyList()
}
val extensions = repos.flatMap { getExtensions(it) }
// Sanity check - empty probably means something broke
if (extensions.isEmpty()) { if (extensions.isEmpty()) {
throw Exception() throw Exception()
} }

View file

@ -50,7 +50,6 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At
ExtensionAdapter.OnButtonClickListener, ExtensionAdapter.OnButtonClickListener,
FlexibleAdapter.OnItemClickListener, FlexibleAdapter.OnItemClickListener,
FlexibleAdapter.OnItemLongClickListener, FlexibleAdapter.OnItemLongClickListener,
ExtensionTrustDialog.Listener,
SourceAdapter.OnAllClickListener, SourceAdapter.OnAllClickListener,
BaseMigrationInterface { BaseMigrationInterface {
@ -323,8 +322,16 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At
} }
private fun openTrustDialog(extension: Extension.Untrusted) { private fun openTrustDialog(extension: Extension.Untrusted) {
ExtensionTrustDialog(this, extension.signatureHash, extension.pkgName, extension.versionCode) val activity = controller.activity ?: return
.showDialog(controller.router) activity.materialAlertDialog()
.setTitle(R.string.untrusted_extension)
.setMessage(R.string.untrusted_extension_message)
.setPositiveButton(R.string.trust) { _, _ ->
trustExtension(extension.pkgName, extension.versionCode, extension.signatureHash)
}
.setNegativeButton(R.string.uninstall) { _, _ ->
uninstallExtension(extension.pkgName)
}.show()
} }
fun setExtensions(extensions: List<ExtensionItem>, updateController: Boolean = true) { fun setExtensions(extensions: List<ExtensionItem>, updateController: Boolean = true) {
@ -407,11 +414,11 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At
extAdapter?.updateItem(updateHeader) extAdapter?.updateItem(updateHeader)
} }
override fun trustExtension(pkgName: String, versionCode: Long, signatureHash: String) { private fun trustExtension(pkgName: String, versionCode: Long, signatureHash: String) {
presenter.trustExtension(pkgName, versionCode, signatureHash) presenter.trustExtension(pkgName, versionCode, signatureHash)
} }
override fun uninstallExtension(pkgName: String) { private fun uninstallExtension(pkgName: String) {
presenter.uninstallExtension(pkgName) presenter.uninstallExtension(pkgName)
} }

View file

@ -116,6 +116,7 @@ class ExtensionHolder(view: View, val adapter: ExtensionAdapter) :
val repoText = when { val repoText = when {
extension is Extension.Untrusted -> itemView.context.getString(R.string.untrusted) extension is Extension.Untrusted -> itemView.context.getString(R.string.untrusted)
extension is Extension.Installed && extension.isObsolete -> itemView.context.getString(R.string.obsolete) extension is Extension.Installed && extension.isObsolete -> itemView.context.getString(R.string.obsolete)
extension is Extension.Installed -> extension.repoUrl.orEmpty()
else -> "" else -> ""
} }

View file

@ -1,45 +0,0 @@
package eu.kanade.tachiyomi.ui.extension
import android.app.Dialog
import android.os.Bundle
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.base.controller.DialogController
import eu.kanade.tachiyomi.util.system.materialAlertDialog
class ExtensionTrustDialog<T>(bundle: Bundle? = null) : DialogController(bundle)
where T : ExtensionTrustDialog.Listener {
lateinit var listener: Listener
constructor(target: T, signatureHash: String, pkgName: String, versionCode: Long) : this(
Bundle().apply {
putString(SIGNATURE_KEY, signatureHash)
putString(PKGNAME_KEY, pkgName)
putLong(VERSION_CODE, versionCode)
},
) {
listener = target
}
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
return activity!!.materialAlertDialog()
.setTitle(R.string.untrusted_extension)
.setMessage(R.string.untrusted_extension_message)
.setPositiveButton(R.string.trust) { _, _ ->
listener.trustExtension(args.getString(PKGNAME_KEY)!!, args.getLong(VERSION_CODE), args.getString(SIGNATURE_KEY)!!)
}
.setNegativeButton(R.string.uninstall) { _, _ ->
listener.uninstallExtension(args.getString(PKGNAME_KEY)!!)
}.create()
}
private companion object {
const val SIGNATURE_KEY = "signature_key"
const val PKGNAME_KEY = "pkgname_key"
const val VERSION_CODE = "version_code"
}
interface Listener {
fun trustExtension(pkgName: String, versionCode: Long, signatureHash: String)
fun uninstallExtension(pkgName: String)
}
}

View file

@ -43,6 +43,7 @@ import eu.kanade.tachiyomi.ui.main.RootSearchInterface
import eu.kanade.tachiyomi.ui.setting.SettingsBrowseController import eu.kanade.tachiyomi.ui.setting.SettingsBrowseController
import eu.kanade.tachiyomi.ui.setting.SettingsSourcesController import eu.kanade.tachiyomi.ui.setting.SettingsSourcesController
import eu.kanade.tachiyomi.ui.source.browse.BrowseSourceController import eu.kanade.tachiyomi.ui.source.browse.BrowseSourceController
import eu.kanade.tachiyomi.ui.source.browse.repos.RepoController
import eu.kanade.tachiyomi.ui.source.globalsearch.GlobalSearchController import eu.kanade.tachiyomi.ui.source.globalsearch.GlobalSearchController
import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.system.dpToPx
import eu.kanade.tachiyomi.util.system.getBottomGestureInsets import eu.kanade.tachiyomi.util.system.getBottomGestureInsets

View file

@ -19,4 +19,4 @@
android:title="@string/filter_languages" android:title="@string/filter_languages"
android:icon="@drawable/ic_language_24dp" android:icon="@drawable/ic_language_24dp"
app:showAsAction="always"/> app:showAsAction="always"/>
</menu> </menu>