chore: Disable "unofficial" state

This commit is contained in:
ziro 2024-01-11 15:01:43 +07:00
parent 33cb4532e4
commit 23db98d356
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
10 changed files with 32 additions and 78 deletions

View file

@ -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)
}

View file

@ -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(

View file

@ -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 -> ""

View file

@ -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"
}
}

View file

@ -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)
}

View file

@ -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) :

View file

@ -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)
}
}

View file

@ -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)

View file

@ -2,15 +2,9 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_history"
android:icon="@drawable/ic_history_24dp"
android:title="@string/whats_new"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_readme"
android:icon="@drawable/ic_help_outline_24dp"
android:title="@string/faq_and_guides"
android:id="@+id/action_open_repo"
android:icon="@drawable/ic_open_in_webview_24dp"
android:title="@string/action_open_repo"
app:showAsAction="ifRoom" />
<item
@ -19,4 +13,4 @@
android:title="@string/clear_cookies"
app:showAsAction="never" />
</menu>
</menu>

View file

@ -918,6 +918,8 @@
<string name="helpful_translation_links">Helpful translation links</string>
<string name="website">Website</string>
<string name="open_source_licenses">Open source licenses</string>
<string name="action_open_repo">Open source repo</string>
<string name="open_in_browser_fail">Unable to open url</string>
<!-- Login/Logout dialog -->
<string name="log_in_to_">Log in to %1$s</string>