From f6776df15142f5fc55e6f4a40db4e3fa8b622743 Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Wed, 8 Jan 2025 17:02:43 +0700 Subject: [PATCH 1/4] Remove custom extension readme/changelog URLs This reverts commit 6d255f25ad1e95ca333af2b8ca4d5515055b685f. --- .../browse/ExtensionDetailsScreen.kt | 27 ++--------- .../presentation/browse/ExtensionsScreen.kt | 6 --- .../tachiyomi/extension/api/ExtensionApi.kt | 4 -- .../tachiyomi/extension/model/Extension.kt | 8 ---- .../extension/util/ExtensionLoader.kt | 7 --- .../details/ExtensionDetailsScreen.kt | 8 ---- .../details/ExtensionDetailsScreenModel.kt | 46 ------------------- 7 files changed, 3 insertions(+), 103 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt index 87c744aee..2935964ba 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt @@ -15,8 +15,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.outlined.HelpOutline -import androidx.compose.material.icons.outlined.History +import androidx.compose.material.icons.automirrored.outlined.Launch import androidx.compose.material.icons.outlined.Settings import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button @@ -57,7 +56,6 @@ import eu.kanade.tachiyomi.util.system.copyToClipboard import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR -import tachiyomi.i18n.kmk.KMR import tachiyomi.i18n.sy.SYMR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.Scaffold @@ -70,10 +68,6 @@ fun ExtensionDetailsScreen( navigateUp: () -> Unit, state: ExtensionDetailsScreenModel.State, onClickSourcePreferences: (sourceId: Long) -> Unit, - // KMK --> - onClickWhatsNew: () -> Unit, - onClickReadme: () -> Unit, - // KMK <-- onClickEnableAll: () -> Unit, onClickDisableAll: () -> Unit, onClickClearCookies: () -> Unit, @@ -100,26 +94,11 @@ fun ExtensionDetailsScreen( AppBarActions( actions = persistentListOf().builder() .apply { - // KMK --> - add( - AppBar.Action( - title = stringResource(MR.strings.whats_new), - icon = Icons.Outlined.History, - onClick = onClickWhatsNew, - ), - ) - add( - AppBar.Action( - title = stringResource(KMR.strings.action_faq_and_guides), - icon = Icons.AutoMirrored.Outlined.HelpOutline, - onClick = onClickReadme, - ), - ) - // KMK <-- if (url != null) { add( - AppBar.OverflowAction( + AppBar.Action( title = stringResource(MR.strings.action_open_repo), + icon = Icons.AutoMirrored.Outlined.Launch, onClick = { uriHandler.openUri(url) }, diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt index b9ec2a26e..947fa2c35 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt @@ -591,8 +591,6 @@ private fun ExtensionItemContentPreview() { versionCode = 1, libVersion = 1.0, isNsfw = true, - hasReadme = true, - hasChangelog = true, signatureHash = "900000", repoName = "Repository", sources = emptyList(), @@ -608,8 +606,6 @@ private fun ExtensionItemContentPreview() { versionCode = 1, libVersion = 1.0, isNsfw = true, - hasReadme = true, - hasChangelog = true, signatureHash = "900000", repoName = "Repository", sources = emptyList(), @@ -629,8 +625,6 @@ private fun ExtensionItemContentPreview() { versionCode = 1, libVersion = 1.0, isNsfw = true, - hasReadme = true, - hasChangelog = true, signatureHash = "900000", repoName = "Repository", ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionApi.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionApi.kt index 470c1a2a1..913f1046a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionApi.kt @@ -156,8 +156,6 @@ internal class ExtensionApi { libVersion = it.extractLibVersion(), lang = it.lang, isNsfw = it.nsfw == 1, - hasReadme = it.hasReadme == 1, - hasChangelog = it.hasChangelog == 1, sources = it.sources?.map(extensionSourceMapper).orEmpty(), apkName = it.apk, iconUrl = "$repoUrl/icon/${it.pkg}.png", @@ -196,8 +194,6 @@ private data class ExtensionJsonObject( val code: Long, val version: String, val nsfw: Int, - val hasReadme: Int = 0, - val hasChangelog: Int = 0, val sources: List?, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/model/Extension.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/model/Extension.kt index 2a05036af..3f63534ee 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/model/Extension.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/model/Extension.kt @@ -13,8 +13,6 @@ sealed class Extension { abstract val libVersion: Double abstract val lang: String? abstract val isNsfw: Boolean - abstract val hasReadme: Boolean - abstract val hasChangelog: Boolean // KMK --> abstract val signatureHash: String @@ -29,8 +27,6 @@ sealed class Extension { override val libVersion: Double, override val lang: String, override val isNsfw: Boolean, - override val hasReadme: Boolean, - override val hasChangelog: Boolean, // KMK --> override val signatureHash: String, /** Guessing repo name from built-in signatures preset */ @@ -56,8 +52,6 @@ sealed class Extension { override val libVersion: Double, override val lang: String, override val isNsfw: Boolean, - override val hasReadme: Boolean, - override val hasChangelog: Boolean, // KMK --> override val signatureHash: String, override val repoName: String, @@ -97,7 +91,5 @@ sealed class Extension { // KMK <-- override val lang: String? = null, override val isNsfw: Boolean = false, - override val hasReadme: Boolean = false, - override val hasChangelog: Boolean = false, ) : Extension() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt index 276d4cbc8..068b4d176 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt @@ -59,8 +59,6 @@ internal object ExtensionLoader { private const val METADATA_SOURCE_CLASS = "tachiyomi.extension.class" private const val METADATA_SOURCE_FACTORY = "tachiyomi.extension.factory" private const val METADATA_NSFW = "tachiyomi.extension.nsfw" - private const val METADATA_HAS_README = "tachiyomi.extension.hasReadme" - private const val METADATA_HAS_CHANGELOG = "tachiyomi.extension.hasChangelog" const val LIB_VERSION_MIN = 1.4 const val LIB_VERSION_MAX = 1.5 @@ -311,9 +309,6 @@ internal object ExtensionLoader { return LoadResult.Error } - val hasReadme = appInfo.metaData.getInt(METADATA_HAS_README, 0) == 1 - val hasChangelog = appInfo.metaData.getInt(METADATA_HAS_CHANGELOG, 0) == 1 - val classLoader = try { ChildFirstPathClassLoader(appInfo.sourceDir, null, context.classLoader) } catch (e: Exception) { @@ -361,8 +356,6 @@ internal object ExtensionLoader { libVersion = libVersion, lang = lang, isNsfw = isNsfw, - hasReadme = hasReadme, - hasChangelog = hasChangelog, sources = sources, pkgFactory = appInfo.metaData.getString(METADATA_SOURCE_FACTORY), icon = appInfo.loadIcon(pkgManager), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreen.kt index 258f54a5a..4a4a78cde 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreen.kt @@ -5,7 +5,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalUriHandler import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow @@ -30,18 +29,11 @@ data class ExtensionDetailsScreen( } val navigator = LocalNavigator.currentOrThrow - // KMK --> - val uriHandler = LocalUriHandler.current - // KMK <-- ExtensionDetailsScreen( navigateUp = navigator::pop, state = state, onClickSourcePreferences = { navigator.push(SourcePreferencesScreen(it)) }, - // KMK --> - onClickWhatsNew = { uriHandler.openUri(screenModel.getChangelogUrl()) }, - onClickReadme = { uriHandler.openUri(screenModel.getReadmeUrl()) }, - // KMK <-- onClickEnableAll = { screenModel.toggleSources(true) }, onClickDisableAll = { screenModel.toggleSources(false) }, onClickClearCookies = screenModel::clearCookies, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreenModel.kt index 7f9145b28..4266c4730 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreenModel.kt @@ -29,11 +29,6 @@ import tachiyomi.core.common.util.system.logcat import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get -private const val URL_EXTENSION_COMMITS = - "https://github.com/komikku-app/komikku-extensions/commits/master" -private const val URL_EXTENSION_BLOB = - "https://github.com/komikku-app/komikku-extensions/blob/master" - class ExtensionDetailsScreenModel( pkgName: String, context: Context, @@ -88,31 +83,6 @@ class ExtensionDetailsScreenModel( } } - fun getChangelogUrl(): String { - val extension = state.value.extension ?: return "" - - val pkgName = extension.pkgName.substringAfter("eu.kanade.tachiyomi.extension.") - val pkgFactory = extension.pkgFactory - if (extension.hasChangelog) { - return createUrl(URL_EXTENSION_BLOB, pkgName, pkgFactory, "/CHANGELOG.md") - } - - // Falling back on GitHub commit history because there is no explicit changelog in extension - return createUrl(URL_EXTENSION_COMMITS, pkgName, pkgFactory) - } - - fun getReadmeUrl(): String { - val extension = state.value.extension ?: return "" - - if (!extension.hasReadme) { - return "https://tachiyomi.org/docs/faq/browse/extensions" - } - - val pkgName = extension.pkgName.substringAfter("eu.kanade.tachiyomi.extension.") - val pkgFactory = extension.pkgFactory - return createUrl(URL_EXTENSION_BLOB, pkgName, pkgFactory, "/README.md") - } - fun clearCookies() { val extension = state.value.extension ?: return @@ -148,22 +118,6 @@ class ExtensionDetailsScreenModel( ?.let { toggleSource.await(it, enable) } } - private fun createUrl( - url: String, - pkgName: String, - pkgFactory: String?, - path: String = "", - ): String { - return if (!pkgFactory.isNullOrEmpty()) { - when (path.isEmpty()) { - true -> "$url/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/$pkgFactory" - else -> "$url/multisrc/overrides/$pkgFactory/" + (pkgName.split(".").lastOrNull() ?: "") + path - } - } else { - url + "/src/" + pkgName.replace(".", "/") + path - } - } - @Immutable data class State( val extension: Extension.Installed? = null, From ea3e53e6aea8ebae56500d2c6433ee392017f75b Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Sat, 1 Feb 2025 03:23:17 +0700 Subject: [PATCH 2/4] Add manual install button to App installing notification --- .../kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt | 6 ++---- .../eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt | 8 +++++++- i18n-kmk/src/commonMain/moko-resources/base/strings.xml | 1 + 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt index 168cc0ad4..1414537da 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt @@ -206,9 +206,7 @@ class AppUpdateDownloadJob(private val context: Context, workerParams: WorkerPar val installParams = PackageInstaller.SessionParams( PackageInstaller.SessionParams.MODE_FULL_INSTALL, ) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - installParams.setRequireUserAction(PackageInstaller.SessionParams.USER_ACTION_NOT_REQUIRED) - } + installParams.setRequireUserAction(PackageInstaller.SessionParams.USER_ACTION_NOT_REQUIRED) val sessionId = packageInstaller.createSession(installParams) val session = packageInstaller.openSession(sessionId) session.openWrite("package", 0, -1).use { packageInSession -> @@ -228,7 +226,7 @@ class AppUpdateDownloadJob(private val context: Context, workerParams: WorkerPar ) val statusReceiver = pendingIntent.intentSender session.commit(statusReceiver) - notifier.onInstalling() + notifier.onInstalling(file.getUriCompat(context)) withContext(Dispatchers.IO) { data.close() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt index c57014119..3b102c893 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt @@ -216,13 +216,19 @@ internal class AppUpdateNotifier(private val context: Context) { } // KMK --> - fun onInstalling() { + fun onInstalling(uri: Uri) { + val installIntent = NotificationHandler.installApkPendingActivity(context, uri) with(notificationBuilder) { setContentText(context.stringResource(MR.strings.ext_installing)) setSmallIcon(android.R.drawable.stat_sys_download) setProgress(0, 0, true) setOnlyAlertOnce(true) clearActions() + addAction( + R.drawable.ic_system_update_alt_white_24dp, + context.stringResource(KMR.strings.action_manual_install), + installIntent, + ) show(Notifications.ID_APP_INSTALL) } } diff --git a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml index f05ba4495..90dc53a8f 100644 --- a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml +++ b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml @@ -138,6 +138,7 @@ Change Logs + Manual install Manual download From 9d2a030bf588937b8f2a056d05998b4ceff5a587 Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Sat, 1 Feb 2025 03:35:58 +0700 Subject: [PATCH 3/4] Remove extensions repo --- .github/ISSUE_TEMPLATE/config.yml | 10 +--- .github/ISSUE_TEMPLATE/report_issue.yml | 2 - .github/ISSUE_TEMPLATE/request_feature.yml | 2 - .../extension/interactor/TrustExtension.kt | 2 +- .../components/ExtensionReposContent.kt | 14 +++-- .../components/ExtensionReposDialogs.kt | 57 ++++--------------- .../browse/components/ExtensionReposScreen.kt | 10 ++-- .../extension/util/ExtensionLoader.kt | 8 +-- .../core/migration/migrations/Migrations.kt | 1 - .../OfficialExtensionRepositoryMigration.kt | 32 ----------- .../interactor/CreateExtensionRepo.kt | 7 +-- 11 files changed, 36 insertions(+), 109 deletions(-) delete mode 100644 app/src/main/java/mihon/core/migration/migrations/OfficialExtensionRepositoryMigration.kt diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 8dfd2f07b..ec828c361 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,11 +1,5 @@ blank_issues_enabled: false contact_links: - - name: ⚠️ Extension/source issue - url: https://github.com/komikku-app/extensions/issues/new/choose - about: Issues and requests for official extensions and sources should be opened in the extensions repository instead - - name: 📦 Extensions - url: https://komikku-app.github.io/komikku-extensions/ - about: List of all available extensions with download links - - name: 🖥️ Mihon website - url: https://mihon.app/ + - name: 🖥️ Komikku website + url: https://komikku-app.github.io/ about: Guides, troubleshooting, and answers to common questions diff --git a/.github/ISSUE_TEMPLATE/report_issue.yml b/.github/ISSUE_TEMPLATE/report_issue.yml index 6c18b3f49..e9ac9da16 100644 --- a/.github/ISSUE_TEMPLATE/report_issue.yml +++ b/.github/ISSUE_TEMPLATE/report_issue.yml @@ -94,8 +94,6 @@ body: required: true - label: I have written a short but informative title. required: true - - label: If this is an issue with an official extension, I should be opening an issue in the [extensions repository](https://github.com/komikku-app/extensions/issues/new/choose). - required: true - label: I have gone through the [FAQ](https://mihon.app/docs/faq/general) and [troubleshooting guide](https://mihon.app/docs/guides/troubleshooting/). required: true - label: I have updated the app to version **[1.12.1](https://github.com/komikku-app/komikku/releases/latest)**. diff --git a/.github/ISSUE_TEMPLATE/request_feature.yml b/.github/ISSUE_TEMPLATE/request_feature.yml index 274bfd271..d55ab2091 100644 --- a/.github/ISSUE_TEMPLATE/request_feature.yml +++ b/.github/ISSUE_TEMPLATE/request_feature.yml @@ -31,8 +31,6 @@ body: required: true - label: I have written a short but informative title. required: true - - label: If this is an issue with an official extension, I should be opening an issue in the [extensions repository](https://github.com/komikku-app/extensions/issues/new/choose). - required: true - label: I have updated the app to version **[1.12.1](https://github.com/komikku-app/komikku/releases/latest)**. required: true - label: I will fill out all of the requested information in this form. diff --git a/app/src/main/java/eu/kanade/domain/extension/interactor/TrustExtension.kt b/app/src/main/java/eu/kanade/domain/extension/interactor/TrustExtension.kt index 01287cb15..61250c63c 100644 --- a/app/src/main/java/eu/kanade/domain/extension/interactor/TrustExtension.kt +++ b/app/src/main/java/eu/kanade/domain/extension/interactor/TrustExtension.kt @@ -14,7 +14,7 @@ class TrustExtension( suspend fun isTrusted(pkgInfo: PackageInfo, fingerprints: List): Boolean { // KMK --> - if (fingerprints.contains(CreateExtensionRepo.OFFICIAL_REPO_SIGNATURE)) return true + if (fingerprints.contains(CreateExtensionRepo.KOMIKKU_SIGNATURE)) return true // KMK <-- val trustedFingerprints = extensionRepoRepository.getAll().map { it.signingKeyFingerprint }.toHashSet() val key = "${pkgInfo.packageName}:${PackageInfoCompat.getLongVersionCode(pkgInfo)}:${fingerprints.last()}" diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposContent.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposContent.kt index f47042076..213c536ae 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposContent.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposContent.kt @@ -36,6 +36,8 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.util.system.copyToClipboard import kotlinx.collections.immutable.ImmutableSet import kotlinx.collections.immutable.persistentSetOf +import mihon.domain.extensionrepo.interactor.CreateExtensionRepo.Companion.KEIYOUSHI_SIGNATURE +import mihon.domain.extensionrepo.interactor.CreateExtensionRepo.Companion.KOMIKKU_SIGNATURE import mihon.domain.extensionrepo.model.ExtensionRepo import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding @@ -101,7 +103,7 @@ private fun ExtensionRepoListItem( modifier = Modifier .padding(start = MaterialTheme.padding.medium), ) { - val resId = repoResId(repo.baseUrl) + val resId = repoResId(repo.signingKeyFingerprint) Image( bitmap = ImageBitmap.imageResource(id = resId), contentDescription = null, @@ -179,9 +181,9 @@ private fun ExtensionRepoListItem( } // KMK --> -fun repoResId(baseUrl: String) = when (baseUrl) { - "https://raw.githubusercontent.com/komikku-app/extensions/repo" -> R.mipmap.komikku - "https://raw.githubusercontent.com/keiyoushi/extensions/repo" -> R.mipmap.keiyoushi +fun repoResId(signKey: String) = when (signKey) { + KOMIKKU_SIGNATURE -> R.mipmap.komikku + KEIYOUSHI_SIGNATURE -> R.mipmap.keiyoushi else -> R.mipmap.extension } @@ -189,8 +191,8 @@ fun repoResId(baseUrl: String) = when (baseUrl) { @Composable fun ExtensionReposContentPreview() { val repos = persistentSetOf( - ExtensionRepo("https://raw.githubusercontent.com/komikku-app/extensions/repo", "Komikku", "", "", "key1"), - ExtensionRepo("https://raw.githubusercontent.com/keiyoushi/extensions/repo", "Keiyoushi", "", "", "key2"), + ExtensionRepo("https://repo", "Komikku", "", "", KOMIKKU_SIGNATURE), + ExtensionRepo("https://repo", "Keiyoushi", "", "", KEIYOUSHI_SIGNATURE), ExtensionRepo("https://repo", "Other", "", "", "key2"), ) ExtensionReposContent( diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposDialogs.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposDialogs.kt index 317ee2b14..80cada76b 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposDialogs.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposDialogs.kt @@ -1,9 +1,6 @@ package eu.kanade.presentation.more.settings.screen.browse.components -import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.AlertDialog import androidx.compose.material3.OutlinedTextField @@ -15,16 +12,12 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.text.input.KeyboardType -import androidx.compose.ui.tooling.preview.Preview import kotlinx.collections.immutable.ImmutableSet -import kotlinx.collections.immutable.persistentSetOf import kotlinx.coroutines.delay -import mihon.domain.extensionrepo.interactor.CreateExtensionRepo.Companion.OFFICIAL_REPO_BASE_URL import mihon.domain.extensionrepo.model.ExtensionRepo import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource @@ -44,37 +37,19 @@ fun ExtensionRepoCreateDialog( AlertDialog( onDismissRequest = onDismissRequest, confirmButton = { - // KMK --> - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.SpaceBetween, // Distribute space between items - verticalAlignment = Alignment.CenterVertically, // Align items vertically + TextButton( + enabled = name.isNotEmpty() && !nameAlreadyExists, + onClick = { + onCreate(name) + onDismissRequest() + }, ) { - TextButton( - onClick = { - name = "$OFFICIAL_REPO_BASE_URL/index.min.json" - }, - ) { - Text(text = stringResource(MR.strings.label_default)) - } - Row( - // Group the right-aligned elements - verticalAlignment = Alignment.CenterVertically, - ) { - TextButton(onClick = onDismissRequest) { - Text(text = stringResource(MR.strings.action_cancel)) - } - // KMK <-- - TextButton( - enabled = name.isNotEmpty() && !nameAlreadyExists, - onClick = { - onCreate(name) - onDismissRequest() - }, - ) { - Text(text = stringResource(MR.strings.action_add)) - } - } + Text(text = stringResource(MR.strings.action_add)) + } + }, + dismissButton = { + TextButton(onClick = onDismissRequest) { + Text(text = stringResource(MR.strings.action_cancel)) } }, title = { @@ -115,14 +90,6 @@ fun ExtensionRepoCreateDialog( } } -// KMK --> -@Preview(showBackground = true) -@Composable -fun ExtensionRepoCreateDialogPreview() { - ExtensionRepoCreateDialog({ }, { }, persistentSetOf()) -} -// KMK <-- - @Composable fun ExtensionRepoDeleteDialog( onDismissRequest: () -> Unit, diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposScreen.kt index 68dfe1371..10614f3d0 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposScreen.kt @@ -24,7 +24,9 @@ import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.more.settings.screen.browse.RepoScreenState import eu.kanade.tachiyomi.util.system.openInBrowser import kotlinx.collections.immutable.persistentSetOf -import mihon.domain.extensionrepo.interactor.CreateExtensionRepo.Companion.OFFICIAL_REPO_WEBSITE +import mihon.domain.extensionrepo.interactor.CreateExtensionRepo.Companion.KEIYOUSHI_SIGNATURE +import mihon.domain.extensionrepo.interactor.CreateExtensionRepo.Companion.KOMIKKU_SIGNATURE +import mihon.domain.extensionrepo.interactor.CreateExtensionRepo.Companion.REPO_HELP import mihon.domain.extensionrepo.model.ExtensionRepo import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold @@ -79,7 +81,7 @@ fun ExtensionReposScreen( // KMK --> help = { TextButton( - onClick = { context.openInBrowser(OFFICIAL_REPO_WEBSITE) }, + onClick = { context.openInBrowser(REPO_HELP) }, modifier = Modifier.padding(top = MaterialTheme.padding.small), ) { Icon(imageVector = Icons.AutoMirrored.Outlined.Help, contentDescription = null) @@ -114,8 +116,8 @@ fun ExtensionReposScreen( private fun ExtensionReposScreenPreview() { val state = RepoScreenState.Success( repos = persistentSetOf( - ExtensionRepo("https://raw.githubusercontent.com/komikku-app/extensions/repo", "Komikku", "", "", "key1"), - ExtensionRepo("https://raw.githubusercontent.com/keiyoushi/extensions/repo", "Keiyoushi", "", "", "key2"), + ExtensionRepo("https://repo", "Komikku", "", "", KOMIKKU_SIGNATURE), + ExtensionRepo("https://repo", "Keiyoushi", "", "", KEIYOUSHI_SIGNATURE), ExtensionRepo("https://repo", "Other", "", "", "key2"), ), disabledRepos = setOf("https://repo"), diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt index 068b4d176..b204141d3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt @@ -20,8 +20,8 @@ import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.runBlocking import logcat.LogPriority -import mihon.domain.extensionrepo.interactor.CreateExtensionRepo.Companion.KEIYOUSHI_REPO_SIGNATURE -import mihon.domain.extensionrepo.interactor.CreateExtensionRepo.Companion.OFFICIAL_REPO_SIGNATURE +import mihon.domain.extensionrepo.interactor.CreateExtensionRepo.Companion.KEIYOUSHI_SIGNATURE +import mihon.domain.extensionrepo.interactor.CreateExtensionRepo.Companion.KOMIKKU_SIGNATURE import mihon.domain.extensionrepo.interactor.GetExtensionRepo import mihon.domain.extensionrepo.model.ExtensionRepo import tachiyomi.core.common.util.system.logcat @@ -428,11 +428,11 @@ internal object ExtensionLoader { } private fun isOfficiallySigned(signatures: List): Boolean { - return signatures.all { it == OFFICIAL_REPO_SIGNATURE } + return signatures.all { it == KOMIKKU_SIGNATURE } } private fun isKeiyoushiSigned(signatures: List): Boolean { - return signatures.all { it == KEIYOUSHI_REPO_SIGNATURE } + return signatures.all { it == KEIYOUSHI_SIGNATURE } } /** diff --git a/app/src/main/java/mihon/core/migration/migrations/Migrations.kt b/app/src/main/java/mihon/core/migration/migrations/Migrations.kt index 5fbb36465..2a212f43d 100644 --- a/app/src/main/java/mihon/core/migration/migrations/Migrations.kt +++ b/app/src/main/java/mihon/core/migration/migrations/Migrations.kt @@ -46,7 +46,6 @@ val migrations: List MoveEncryptionSettingsToAppStateMigration(), TrustExtensionRepositoryMigration(), // KMK --> - OfficialExtensionRepositoryMigration(), IntegratedHentaiMigration(), SetupAppUpdateMigration(), // KMK <-- diff --git a/app/src/main/java/mihon/core/migration/migrations/OfficialExtensionRepositoryMigration.kt b/app/src/main/java/mihon/core/migration/migrations/OfficialExtensionRepositoryMigration.kt deleted file mode 100644 index 754d7efbf..000000000 --- a/app/src/main/java/mihon/core/migration/migrations/OfficialExtensionRepositoryMigration.kt +++ /dev/null @@ -1,32 +0,0 @@ -package mihon.core.migration.migrations - -import logcat.LogPriority -import mihon.core.migration.Migration -import mihon.core.migration.MigrationContext -import mihon.domain.extensionrepo.exception.SaveExtensionRepoException -import mihon.domain.extensionrepo.interactor.CreateExtensionRepo -import mihon.domain.extensionrepo.repository.ExtensionRepoRepository -import tachiyomi.core.common.util.lang.withIOContext -import tachiyomi.core.common.util.system.logcat - -class OfficialExtensionRepositoryMigration : Migration { - override val version: Float = 70f - - override suspend fun invoke(migrationContext: MigrationContext): Boolean = withIOContext { - val extensionRepositoryRepository = - migrationContext.get() ?: return@withIOContext false - try { - extensionRepositoryRepository.upsertRepo( - baseUrl = CreateExtensionRepo.OFFICIAL_REPO_BASE_URL, - name = "Komikku Official", - shortName = "Komikku", - website = "https://komikku-app.github.io", - signingKeyFingerprint = CreateExtensionRepo.OFFICIAL_REPO_SIGNATURE, - ) - } catch (e: SaveExtensionRepoException) { - logcat(LogPriority.ERROR, e) { "Error inserting Official Extension Repo" } - return@withIOContext false - } - return@withIOContext true - } -} diff --git a/domain/src/main/java/mihon/domain/extensionrepo/interactor/CreateExtensionRepo.kt b/domain/src/main/java/mihon/domain/extensionrepo/interactor/CreateExtensionRepo.kt index cc9261d35..30ae5df3b 100644 --- a/domain/src/main/java/mihon/domain/extensionrepo/interactor/CreateExtensionRepo.kt +++ b/domain/src/main/java/mihon/domain/extensionrepo/interactor/CreateExtensionRepo.kt @@ -71,11 +71,10 @@ class CreateExtensionRepo( } companion object { - const val OFFICIAL_REPO_WEBSITE = "https://komikku-app.github.io" - const val OFFICIAL_REPO_BASE_URL = "https://raw.githubusercontent.com/komikku-app/extensions/repo" + const val REPO_HELP = "https://komikku-app.github.io/docs/guides/getting-started#adding-sources" // cuong-tran's key - const val OFFICIAL_REPO_SIGNATURE = "cbec121aa82ebb02aaa73806992e0368a97d47b5451ed6524816d03084c45905" - const val KEIYOUSHI_REPO_SIGNATURE = "9add655a78e96c4ec7a53ef89dccb557cb5d767489fac5e785d671a5a75d4da2" + const val KOMIKKU_SIGNATURE = "cbec121aa82ebb02aaa73806992e0368a97d47b5451ed6524816d03084c45905" + const val KEIYOUSHI_SIGNATURE = "9add655a78e96c4ec7a53ef89dccb557cb5d767489fac5e785d671a5a75d4da2" } } From eb1df3ddd56e701cd58d048ed476071c0c403570 Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Sat, 1 Feb 2025 03:40:01 +0700 Subject: [PATCH 4/4] update changelog 1.12.4 --- app/build.gradle.kts | 2 +- app/src/main/res/raw/changelog_release.xml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 494eed585..17e5529b8 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -31,7 +31,7 @@ android { applicationId = "app.komikku" versionCode = 71 - versionName = "1.12.3" + versionName = "1.12.4" buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"") buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"") diff --git a/app/src/main/res/raw/changelog_release.xml b/app/src/main/res/raw/changelog_release.xml index ffd9fea90..b8db5887e 100644 --- a/app/src/main/res/raw/changelog_release.xml +++ b/app/src/main/res/raw/changelog_release.xml @@ -1,5 +1,9 @@ + + [b]New:[/b] Remove extensions repo + [b]Improve:[/b] Allow manual install app update + [b]New:[/b] Group update entries together [b]New:[/b] Drag & Drop to reorder category quickly in Settings/Category screen