diff --git a/app/src/main/java/eu/kanade/domain/source/interactor/CreateSourceRepo.kt b/app/src/main/java/eu/kanade/domain/source/interactor/CreateSourceRepo.kt index e22d8980f..f55532e12 100644 --- a/app/src/main/java/eu/kanade/domain/source/interactor/CreateSourceRepo.kt +++ b/app/src/main/java/eu/kanade/domain/source/interactor/CreateSourceRepo.kt @@ -11,7 +11,7 @@ class CreateSourceRepo(private val preferences: SourcePreferences) { return Result.InvalidUrl } - preferences.extensionRepos() += name.substringBeforeLast("/index.min.json") + preferences.extensionRepos() += name.removeSuffix("/index.min.json") return Result.Success } 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 a719ea649..fc2fab254 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt @@ -53,6 +53,7 @@ import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreenModel import eu.kanade.tachiyomi.util.system.LocaleHelper +import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.i18n.sy.SYMR @@ -139,7 +140,7 @@ fun ExtensionDetailsScreen( private fun ExtensionDetails( contentPadding: PaddingValues, extension: Extension.Installed, - sources: List, + sources: ImmutableList, onClickSourcePreferences: (sourceId: Long) -> Unit, onClickUninstall: () -> Unit, onClickSource: (sourceId: Long) -> Unit, @@ -157,21 +158,24 @@ private fun ExtensionDetails( WarningBanner(SYMR.strings.redundant_extension_message) } // SY <-- - extension.isRepoSource -> + extension.isFromExternalRepo -> item { val uriHandler = LocalUriHandler.current + val url = remember(extension) { + val regex = """https://raw.githubusercontent.com/(.+?)/(.+?)/.+""".toRegex() + regex.find(extension.repoUrl.orEmpty()) + ?.let { + val (user, repo) = it.destructured + "https://github.com/$user/$repo" + } + ?: extension.repoUrl + } + WarningBanner( MR.strings.repo_extension_message, modifier = Modifier.clickable { - extension.repoUrl ?: return@clickable - uriHandler.openUri( - extension.repoUrl - .replace("https://raw.githubusercontent.com", "https://github.com") - .removeSuffix("/repo/") - // SY --> - .removeSuffix("/repo"), - // SY <-- - ) + url ?: return@clickable + uriHandler.openUri(url) }, ) } 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 8768134b9..54975d1b3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -234,17 +234,22 @@ class ExtensionManager( changed = true // SY <-- } else if (availableExt != null) { - // SY --> val hasUpdate = installedExt.updateExists(availableExt) if (installedExt.hasUpdate != hasUpdate) { - mutInstalledExtensions[index] = installedExt.copy(hasUpdate = hasUpdate, isRepoSource = availableExt.isRepoSource, repoUrl = availableExt.repoUrl) + mutInstalledExtensions[index] = installedExt.copy( + hasUpdate = hasUpdate, + isFromExternalRepo = availableExt.isFromExternalRepo, + repoUrl = availableExt.repoUrl, + ) changed = true - } else if (availableExt.isRepoSource) { - mutInstalledExtensions[index] = installedExt.copy(isRepoSource = true, repoUrl = availableExt.repoUrl) + } else if (availableExt.isFromExternalRepo) { + mutInstalledExtensions[index] = installedExt.copy( + isFromExternalRepo = true, + repoUrl = availableExt.repoUrl, + ) changed = true } - // SY <-- } } if (changed) { 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 1c1899730..a2e42c3ff 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 @@ -141,7 +141,7 @@ internal class ExtensionApi { apkName = it.apk, iconUrl = "$repoUrl/icon/${it.pkg}.png", repoUrl = repoUrl, - isRepoSource = isRepoSource, + isFromExternalRepo = isRepoSource, ) } } 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 624ec8237..853708979 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 @@ -30,7 +30,7 @@ sealed class Extension { val isUnofficial: Boolean = false, val isShared: Boolean, val repoUrl: String? = null, - val isRepoSource: Boolean = false, + val isFromExternalRepo: Boolean = false, // SY --> val isRedundant: Boolean = false, // SY <-- @@ -48,7 +48,7 @@ sealed class Extension { val apkName: String, val iconUrl: String, val repoUrl: String, - val isRepoSource: Boolean, + val isFromExternalRepo: Boolean, ) : Extension() { data class Source( diff --git a/i18n/src/commonMain/resources/MR/base/strings.xml b/i18n/src/commonMain/resources/MR/base/strings.xml index b055205d8..950dc8005 100755 --- a/i18n/src/commonMain/resources/MR/base/strings.xml +++ b/i18n/src/commonMain/resources/MR/base/strings.xml @@ -318,8 +318,8 @@ Untrusted extension This extension was signed by any unknown author and wasn\'t loaded.\n\nMalicious extensions can read any stored login credentials or execute arbitrary code.\n\nBy trusting this extension\'s certificate, you accept these risks. This extension is no longer available. It may not function properly and can cause issues with the app. Uninstalling it is recommended. - This extension is not from the official list. - Failed to get extensions list + This extension is not from the official repo. + Failed to fetch available extensions Version Language Age rating