Show all installed extensions but label extensions that were hidden before as redundant
This commit is contained in:
parent
a03e668c8f
commit
77dd5bfadd
@ -108,6 +108,8 @@ class ExtensionManager(
|
|||||||
updatedInstalledExtensionsStatuses(value)
|
updatedInstalledExtensionsStatuses(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var unalteredAvailableExtensions = emptyList<Extension.Available>()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Relay used to notify the untrusted extensions.
|
* Relay used to notify the untrusted extensions.
|
||||||
*/
|
*/
|
||||||
@ -145,7 +147,6 @@ class ExtensionManager(
|
|||||||
installedExtensions = extensions
|
installedExtensions = extensions
|
||||||
.filterIsInstance<LoadResult.Success>()
|
.filterIsInstance<LoadResult.Success>()
|
||||||
.map { it.extension }
|
.map { it.extension }
|
||||||
.filterNotBlacklisted()
|
|
||||||
installedExtensions
|
installedExtensions
|
||||||
.flatMap { it.sources }
|
.flatMap { it.sources }
|
||||||
// overwrite is needed until the bundled sources are removed
|
// overwrite is needed until the bundled sources are removed
|
||||||
@ -209,6 +210,7 @@ class ExtensionManager(
|
|||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unalteredAvailableExtensions = extensions
|
||||||
availableExtensions = extensions.filterNotBlacklisted()
|
availableExtensions = extensions.filterNotBlacklisted()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -229,11 +231,14 @@ class ExtensionManager(
|
|||||||
|
|
||||||
for ((index, installedExt) in mutInstalledExtensions.withIndex()) {
|
for ((index, installedExt) in mutInstalledExtensions.withIndex()) {
|
||||||
val pkgName = installedExt.pkgName
|
val pkgName = installedExt.pkgName
|
||||||
val availableExt = availableExtensions.find { it.pkgName == pkgName }
|
val availableExt = unalteredAvailableExtensions.find { it.pkgName == pkgName }
|
||||||
|
|
||||||
if (availableExt == null && !installedExt.isObsolete) {
|
if (availableExt == null && !installedExt.isObsolete) {
|
||||||
mutInstalledExtensions[index] = installedExt.copy(isObsolete = true)
|
mutInstalledExtensions[index] = installedExt.copy(isObsolete = true)
|
||||||
changed = true
|
changed = true
|
||||||
|
} else if (installedExt.isBlacklisted() && !installedExt.isRedundant) {
|
||||||
|
mutInstalledExtensions[index] = installedExt.copy(isRedundant = true)
|
||||||
|
changed = true
|
||||||
} else if (availableExt != null) {
|
} else if (availableExt != null) {
|
||||||
val hasUpdate = availableExt.versionCode > installedExt.versionCode
|
val hasUpdate = availableExt.versionCode > installedExt.versionCode
|
||||||
if (installedExt.hasUpdate != hasUpdate) {
|
if (installedExt.hasUpdate != hasUpdate) {
|
||||||
@ -243,7 +248,7 @@ class ExtensionManager(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (changed) {
|
if (changed) {
|
||||||
installedExtensions = mutInstalledExtensions.filterNotBlacklisted()
|
installedExtensions = mutInstalledExtensions
|
||||||
}
|
}
|
||||||
updatePendingUpdatesCount()
|
updatePendingUpdatesCount()
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@ import eu.kanade.tachiyomi.extension.util.ExtensionLoader
|
|||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.NetworkHelper
|
import eu.kanade.tachiyomi.network.NetworkHelper
|
||||||
import eu.kanade.tachiyomi.network.await
|
import eu.kanade.tachiyomi.network.await
|
||||||
|
import exh.source.BlacklistedSources
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
@ -46,9 +47,12 @@ internal class ExtensionGithubApi {
|
|||||||
|
|
||||||
preferences.lastExtCheck().set(Date().time)
|
preferences.lastExtCheck().set(Date().time)
|
||||||
|
|
||||||
|
val blacklistEnabled = preferences.eh_enableSourceBlacklist().get()
|
||||||
|
|
||||||
val installedExtensions = ExtensionLoader.loadExtensions(context)
|
val installedExtensions = ExtensionLoader.loadExtensions(context)
|
||||||
.filterIsInstance<LoadResult.Success>()
|
.filterIsInstance<LoadResult.Success>()
|
||||||
.map { it.extension }
|
.map { it.extension }
|
||||||
|
.filter { it.pkgName in BlacklistedSources.BLACKLISTED_EXTENSIONS && blacklistEnabled }
|
||||||
|
|
||||||
val extensionsWithUpdate = mutableListOf<Extension.Installed>()
|
val extensionsWithUpdate = mutableListOf<Extension.Installed>()
|
||||||
for (installedExt in installedExtensions) {
|
for (installedExt in installedExtensions) {
|
||||||
|
@ -19,7 +19,8 @@ sealed class Extension {
|
|||||||
override val lang: String,
|
override val lang: String,
|
||||||
val hasUpdate: Boolean = false,
|
val hasUpdate: Boolean = false,
|
||||||
val isObsolete: Boolean = false,
|
val isObsolete: Boolean = false,
|
||||||
val isUnofficial: Boolean = false
|
val isUnofficial: Boolean = false,
|
||||||
|
val isRedundant: Boolean = false
|
||||||
) : Extension()
|
) : Extension()
|
||||||
|
|
||||||
data class Available(
|
data class Available(
|
||||||
|
@ -64,6 +64,11 @@ class ExtensionDetailsController(bundle: Bundle? = null) :
|
|||||||
binding.extensionWarningBanner.setText(R.string.unofficial_extension_message)
|
binding.extensionWarningBanner.setText(R.string.unofficial_extension_message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (extension.isRedundant) {
|
||||||
|
binding.extensionWarningBanner.visible()
|
||||||
|
binding.extensionWarningBanner.setText(R.string.redundant_extension_message)
|
||||||
|
}
|
||||||
|
|
||||||
if (presenter.extension?.sources?.find { it is ConfigurableSource } != null) {
|
if (presenter.extension?.sources?.find { it is ConfigurableSource } != null) {
|
||||||
binding.extensionPrefs.visible()
|
binding.extensionPrefs.visible()
|
||||||
binding.extensionPrefs.clicks()
|
binding.extensionPrefs.clicks()
|
||||||
|
@ -95,6 +95,10 @@ class ExtensionHolder(view: View, override val adapter: ExtensionAdapter) :
|
|||||||
setTextColor(context.getResourceColor(R.attr.colorError))
|
setTextColor(context.getResourceColor(R.attr.colorError))
|
||||||
setText(R.string.ext_unofficial)
|
setText(R.string.ext_unofficial)
|
||||||
}
|
}
|
||||||
|
extension.isRedundant -> {
|
||||||
|
setTextColor(context.getResourceColor(R.attr.colorError))
|
||||||
|
setText(R.string.ext_redundant)
|
||||||
|
}
|
||||||
else -> {
|
else -> {
|
||||||
setText(R.string.ext_details)
|
setText(R.string.ext_details)
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ open class ExtensionPresenter(
|
|||||||
val items = mutableListOf<ExtensionItem>()
|
val items = mutableListOf<ExtensionItem>()
|
||||||
|
|
||||||
val updatesSorted = installed.filter { it.hasUpdate }.sortedBy { it.pkgName }
|
val updatesSorted = installed.filter { it.hasUpdate }.sortedBy { it.pkgName }
|
||||||
val installedSorted = installed.filter { !it.hasUpdate }.sortedWith(compareBy({ !it.isObsolete }, { it.pkgName }))
|
val installedSorted = installed.filter { !it.hasUpdate }.sortedWith(compareBy({ !it.isObsolete && !it.isRedundant }, { it.pkgName }))
|
||||||
val untrustedSorted = untrusted.sortedBy { it.pkgName }
|
val untrustedSorted = untrusted.sortedBy { it.pkgName }
|
||||||
val availableSorted = available
|
val availableSorted = available
|
||||||
// Filter out already installed extensions and disabled languages
|
// Filter out already installed extensions and disabled languages
|
||||||
|
@ -30,6 +30,10 @@
|
|||||||
<string name="pref_skip_pre_migration_summary">Use last saved pre-migration preferences
|
<string name="pref_skip_pre_migration_summary">Use last saved pre-migration preferences
|
||||||
and sources to mass migrate</string>
|
and sources to mass migrate</string>
|
||||||
|
|
||||||
|
<!-- Extension section -->
|
||||||
|
<string name="ext_redundant">Redundant</string>
|
||||||
|
<string name="redundant_extension_message">This extension is redundant and will not be used inside this version of Tachiyomi.</string>
|
||||||
|
|
||||||
<!-- Library update service notifications -->
|
<!-- Library update service notifications -->
|
||||||
<string name="notification_new_chapters_text_old">For %1$d titles</string>
|
<string name="notification_new_chapters_text_old">For %1$d titles</string>
|
||||||
|
|
||||||
@ -112,6 +116,7 @@
|
|||||||
<string name="eh_batch_add_finish">Finish</string>
|
<string name="eh_batch_add_finish">Finish</string>
|
||||||
<string name="eh_auto_webtoon_mode">Auto Webtoon Mode Detection</string>
|
<string name="eh_auto_webtoon_mode">Auto Webtoon Mode Detection</string>
|
||||||
<string name="eh_auto_webtoon_snack">Reading webtoon style</string>
|
<string name="eh_auto_webtoon_snack">Reading webtoon style</string>
|
||||||
|
<string name="loading_gallery">Loading gallery…</string>
|
||||||
|
|
||||||
<!-- AZ -->
|
<!-- AZ -->
|
||||||
<string name="az_recommends">See Recommendations</string>
|
<string name="az_recommends">See Recommendations</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user