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 ce85e00955..b7a4fa67c9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -198,7 +198,7 @@ class ExtensionManager( val pkgName = installedExt.pkgName val availableExt = availableExtensions.find { it.pkgName == pkgName } - if (!installedExt.isUnofficial && availableExt == null != installedExt.isObsolete) { + if (availableExt == null != installedExt.isObsolete) { mutInstalledExtensions[index] = installedExt.copy(isObsolete = true) changed = true } @@ -422,7 +422,7 @@ class ExtensionManager( private fun Extension.Installed.updateExists(availableExtension: Extension.Available? = null): Boolean { val availableExt = availableExtension ?: availableExtensionsFlow.value.find { it.pkgName == pkgName } - if (isUnofficial || availableExt == null) return false + if (availableExt == null) return false return (availableExt.versionCode > versionCode || availableExt.libVersion > libVersion) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt index aaf67e02d9..59ae42b4f4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt @@ -79,7 +79,7 @@ internal class ExtensionGithubApi { val availableExt = extensions.find { it.pkgName == pkgName } ?: continue val hasUpdatedVer = availableExt.versionCode > installedExt.versionCode val hasUpdatedLib = availableExt.libVersion > installedExt.libVersion - val hasUpdate = installedExt.isUnofficial.not() && (hasUpdatedVer || hasUpdatedLib) + val hasUpdate = hasUpdatedVer || hasUpdatedLib if (hasUpdate) { extensionsWithUpdate.add(availableExt) } @@ -130,8 +130,8 @@ internal class ExtensionGithubApi { } } -private const val REPO_URL_PREFIX = "https://raw.githubusercontent.com/keiyoushi/extensions/repo/" -private const val FALLBACK_REPO_URL_PREFIX = "https://gcore.jsdelivr.net/gh/keiyoushi/extensions@repo/" +const val REPO_URL_PREFIX = "https://raw.githubusercontent.com/keiyoushi/extensions/repo/" +const val FALLBACK_REPO_URL_PREFIX = "https://gcore.jsdelivr.net/gh/keiyoushi/extensions@repo/" @Serializable private data class ExtensionJsonObject( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionHolder.kt index 88d9ca381d..0bbf1c305b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionHolder.kt @@ -94,7 +94,6 @@ class ExtensionHolder(view: View, val adapter: ExtensionAdapter) : binding.lang.text = LocaleHelper.getDisplayName(extension.lang) binding.warning.text = when { extension is Extension.Untrusted -> itemView.context.getString(R.string.untrusted) - extension is Extension.Installed && extension.isUnofficial -> itemView.context.getString(R.string.unofficial) extension is Extension.Installed && extension.isObsolete -> itemView.context.getString(R.string.obsolete) extension.isNsfw -> itemView.context.getString(R.string.nsfw_short) else -> "" diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/details/ExtensionDetailsController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/details/ExtensionDetailsController.kt index 7e68109c25..27dd50f13f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/details/ExtensionDetailsController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/details/ExtensionDetailsController.kt @@ -27,6 +27,7 @@ import eu.kanade.tachiyomi.data.preference.SharedPreferencesDataStore import eu.kanade.tachiyomi.core.preference.minusAssign import eu.kanade.tachiyomi.core.preference.plusAssign import eu.kanade.tachiyomi.databinding.ExtensionDetailControllerBinding +import eu.kanade.tachiyomi.extension.api.REPO_URL_PREFIX import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.source.ConfigurableSource @@ -153,64 +154,29 @@ class ExtensionDetailsController(bundle: Bundle? = null) : override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.extension_details, menu) - - presenter.extension?.let { extension -> - menu.findItem(R.id.action_history).isVisible = !extension.isUnofficial - menu.findItem(R.id.action_readme).isVisible = !extension.isUnofficial - if (extension.hasReadme) { - menu.findItem(R.id.action_readme).icon = view?.context?.contextCompatDrawable(R.drawable.ic_help_24dp) - } - } } override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { - R.id.action_history -> openChangelog() - R.id.action_readme -> openReadme() + R.id.action_open_repo -> openRepo() R.id.action_clear_cookies -> clearCookies() } return super.onOptionsItemSelected(item) } - private fun openChangelog() { - val extension = presenter.extension!! - val pkgName = extension.pkgName.substringAfter("eu.kanade.tachiyomi.extension.") - val pkgFactory = extension.pkgFactory - if (extension.hasChangelog) { - val url = createUrl(URL_EXTENSION_BLOB, pkgName, pkgFactory, "/CHANGELOG.md") - openInBrowser(url) - return - } - - // Falling back on GitHub commit history because there is no explicit changelog in extension - val url = createUrl(URL_EXTENSION_COMMITS, pkgName, pkgFactory) + private fun openRepo() { + // TODO + // val url = getUrl(extension.repoUrl) + val url = getUrl() openInBrowser(url) } - 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 - } - } - - private fun openReadme() { - val extension = presenter.extension!! - - if (!extension.hasReadme) { - openInBrowser("https://tachiyomi.org/docs/faq/browse/extensions") - return - } - - val pkgName = extension.pkgName.substringAfter("eu.kanade.tachiyomi.extension.") - val pkgFactory = extension.pkgFactory - val url = createUrl(URL_EXTENSION_BLOB, pkgName, pkgFactory, "/README.md") - openInBrowser(url) - return + private fun getUrl(repoUrl: String? = REPO_URL_PREFIX): String? { + val regex = """https://raw.githubusercontent.com/(.+?)/(.+?)/.+""".toRegex() + return regex.find(repoUrl.orEmpty())?.let { + val (user, repo) = it.destructured + "https://github.com/$user/$repo" + } ?: repoUrl } private fun clearCookies() { @@ -396,9 +362,5 @@ class ExtensionDetailsController(bundle: Bundle? = null) : private companion object { const val PKGNAME_KEY = "pkg_name" const val LASTOPENPREFERENCE_KEY = "last_open_preference" - private const val URL_EXTENSION_BLOB = - "https://github.com/tachiyomiorg/tachiyomi-extensions/blob/master" - private const val URL_EXTENSION_COMMITS = - "https://github.com/tachiyomiorg/tachiyomi-extensions/commits/master" } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/details/ExtensionDetailsHeaderAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/details/ExtensionDetailsHeaderAdapter.kt index 569fc1dceb..387680b8b8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/details/ExtensionDetailsHeaderAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/details/ExtensionDetailsHeaderAdapter.kt @@ -75,10 +75,7 @@ class ExtensionDetailsHeaderAdapter(private val presenter: ExtensionDetailsPrese binding.extensionUninstallButton.text = context.getString(R.string.remove) } - if (extension.isUnofficial) { - binding.extensionWarningBanner.isVisible = true - binding.extensionWarningBanner.setText(R.string.unofficial_extension_message) - } else if (extension.isObsolete) { + if (extension.isObsolete) { binding.extensionWarningBanner.isVisible = true binding.extensionWarningBanner.setText(R.string.obsolete_extension_message) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutLinksPreference.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutLinksPreference.kt index 664ca096ef..cfe13e7035 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutLinksPreference.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutLinksPreference.kt @@ -2,14 +2,10 @@ package eu.kanade.tachiyomi.ui.more import android.content.Context import android.util.AttributeSet -import android.view.ViewGroup -import android.widget.LinearLayout import androidx.preference.Preference import androidx.preference.PreferenceViewHolder import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.system.openInBrowser -import eu.kanade.tachiyomi.util.view.checkHeightThen import eu.kanade.tachiyomi.util.view.compatToolTipText class AboutLinksPreference @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt b/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt index cecfd371b4..af4ddae567 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt @@ -59,13 +59,12 @@ class CrashLogUtil(private val context: Context) { val availableExtension = availableExtensions.find { it.pkgName == installedExtension.pkgName } val hasUpdate = (availableExtension?.versionCode ?: 0) > installedExtension.versionCode - if (hasUpdate || installedExtension.isObsolete || installedExtension.isUnofficial) { + if (hasUpdate || installedExtension.isObsolete) { val extensionInfo = "Extension Name: ${installedExtension.name}\n" + "Installed Version: ${installedExtension.versionName}\n" + "Available Version: ${availableExtension?.versionName ?: "N/A"}\n" + - "Obsolete: ${installedExtension.isObsolete}\n" + - "Unofficial: ${installedExtension.isUnofficial}\n" + "Obsolete: ${installedExtension.isObsolete}\n" extensionInfoList.add(extensionInfo) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/view/ControllerExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/view/ControllerExtensions.kt index 0d63ae638d..7ec41b1c31 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/view/ControllerExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/view/ControllerExtensions.kt @@ -847,7 +847,12 @@ fun Controller.withFadeInTransaction(): RouterTransaction { .popChangeHandler(OneWayFadeChangeHandler()) } -fun Controller.openInBrowser(url: String) { +fun Controller.openInBrowser(url: String?) { + if (url == null) { + activity?.toast(R.string.open_in_browser_fail) + return + } + try { val intent = Intent(Intent.ACTION_VIEW, url.toUri()) startActivity(intent) diff --git a/app/src/main/res/menu/extension_details.xml b/app/src/main/res/menu/extension_details.xml index c41bcadccf..ffbc344196 100644 --- a/app/src/main/res/menu/extension_details.xml +++ b/app/src/main/res/menu/extension_details.xml @@ -2,15 +2,9 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> - - - + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 96b882a43e..b43a64fa61 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -918,6 +918,8 @@ Helpful translation links Website Open source licenses + Open source repo + Unable to open url Log in to %1$s