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 e3ebd674bb..bfb9c362a2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -84,7 +84,7 @@ class ExtensionManager( return getAppIconForSource(source.id) } - fun getAppIconForSource(sourceId: Long): Drawable? { + private fun getAppIconForSource(sourceId: Long): Drawable? { val pkgName = installedExtensions.find { ext -> ext.sources.any { it.id == sourceId } }?.pkgName return if (pkgName != null) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/Source.kt b/app/src/main/java/eu/kanade/tachiyomi/source/Source.kt index d8a4cba1a1..6b78e2fc6c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/Source.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/Source.kt @@ -5,6 +5,7 @@ import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.util.system.awaitSingle import rx.Observable import uy.kohesive.injekt.Injekt @@ -86,6 +87,18 @@ interface Source { suspend fun getPageList(chapter: SChapter): List { return fetchPageList(chapter).awaitSingle() } + + fun includeLangInName(isMultiLingual: Boolean, extensionManager: ExtensionManager? = null): Boolean { + val httpSource = this as? HttpSource ?: return true + val extManager = extensionManager ?: Injekt.get() + val allExt = httpSource.getExtension(extManager)?.lang == "all" + val onlyAll = httpSource.extOnlyHasAllLanguage(extManager) + return (isMultiLingual && allExt) || (lang == "all" && !onlyAll) + } + + fun nameBasedOnEnabledLanguages(isMultiLingual: Boolean, extensionManager: ExtensionManager? = null): String { + return if (includeLangInName(isMultiLingual, extensionManager)) toString() else name + } } fun Source.icon(): Drawable? = Injekt.get().getAppIconForSource(this) diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSource.kt index 7e9f334bf4..8692b308e0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSource.kt @@ -95,9 +95,11 @@ abstract class HttpSource : CatalogueSource { } } - fun getExtension(): Extension.Installed? { - return Injekt.get().installedExtensions.find { it.sources.contains(this) } - } + fun getExtension(extensionManager: ExtensionManager? = null): Extension.Installed? = + (extensionManager ?: Injekt.get()).installedExtensions.find { it.sources.contains(this) } + + fun extOnlyHasAllLanguage(extensionManager: ExtensionManager? = null) = + getExtension(extensionManager)?.sources?.all { it.lang == "all" } ?: true /** * Returns the request for the popular manga given the page. diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaHeaderHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaHeaderHolder.kt index 076e28232a..ad31b43b41 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaHeaderHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaHeaderHolder.kt @@ -438,13 +438,7 @@ class MangaHeaderHolder( .filterNot { it == "all" } text = buildSpannedString { - append( - if (enabledLanguages.size > 1 && presenter.extension?.lang == "all") { - presenter.source.toString() - } else { - presenter.source.name - }, - ) + append(presenter.source.nameBasedOnEnabledLanguages(enabledLanguages.size > 1)) if (presenter.source is SourceManager.StubSource && presenter.source.name != presenter.source.id.toString() ) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceAdapter.kt index ee1a4ff6b1..1945621d53 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceAdapter.kt @@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.ui.migration.manga.design import android.os.Bundle import eu.davidea.flexibleadapter.FlexibleAdapter import eu.kanade.tachiyomi.data.preference.PreferencesHelper +import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.source.SourceManager import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -17,7 +18,8 @@ class MigrationSourceAdapter( true, ) { - val isMultiLanguage = + val extensionManager: ExtensionManager = Injekt.get() + val isMultiLingual = Injekt.get().enabledLanguages().get().filterNot { it == "all" }.size > 1 override fun onSaveInstanceState(outState: Bundle) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceHolder.kt index 24db1c50c1..c47d28c6db 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceHolder.kt @@ -6,7 +6,6 @@ import eu.kanade.tachiyomi.databinding.MigrationSourceItemBinding import eu.kanade.tachiyomi.source.icon import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder -import java.util.Locale class MigrationSourceHolder(view: View, val adapter: MigrationSourceAdapter) : BaseFlexibleViewHolder(view, adapter) { @@ -17,13 +16,7 @@ class MigrationSourceHolder(view: View, val adapter: MigrationSourceAdapter) : } fun bind(source: HttpSource, sourceEnabled: Boolean) { - // Set capitalized title. - val sourceName = if (adapter.isMultiLanguage) { - source.toString() - } else { - source.name.replaceFirstChar { it.titlecase(Locale.getDefault()) } - } - binding.title.text = sourceName + binding.title.text = source.nameBasedOnEnabledLanguages(adapter.isMultiLingual, adapter.extensionManager) // Update circle letter image. itemView.post { val icon = source.icon() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/stats/details/StatsDetailsPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/stats/details/StatsDetailsPresenter.kt index 171e35347e..37ebe5363a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/more/stats/details/StatsDetailsPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/stats/details/StatsDetailsPresenter.kt @@ -13,6 +13,7 @@ import eu.kanade.tachiyomi.data.database.models.MangaChapterHistory import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.track.TrackManager +import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceManager @@ -28,6 +29,7 @@ import eu.kanade.tachiyomi.util.system.roundToTwoDecimal import eu.kanade.tachiyomi.util.system.withUIContext import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy import java.util.Calendar import java.util.Locale import java.util.concurrent.TimeUnit @@ -35,7 +37,7 @@ import kotlin.math.roundToInt class StatsDetailsPresenter( private val db: DatabaseHelper = Injekt.get(), - prefs: PreferencesHelper = Injekt.get(), + private val prefs: PreferencesHelper = Injekt.get(), val trackManager: TrackManager = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(), ) : BaseCoroutinePresenter() { @@ -48,6 +50,7 @@ class StatsDetailsPresenter( } private var mangasDistinct = libraryMangas.distinct() val sources = getEnabledSources() + val extensionManager by injectLazy() var selectedStat: Stats? = null var selectedSeriesType = mutableSetOf() @@ -272,10 +275,10 @@ class StatsDetailsPresenter( private fun setupSources() { currentStats = ArrayList() val libraryFormat = mangasDistinct.filterByChip().groupBy { it.source } + val isMultiLingual = prefs.enabledLanguages().get().filterNot { it == "all" }.size > 1 libraryFormat.forEach { (sourceId, mangaList) -> - val source = sources.find { it.id == sourceId } - val sourceName = source?.toString() ?: sourceId.toString() + val source = sourceManager.getOrStub(sourceId) currentStats?.add( StatsData( color = pieColorList[1], @@ -283,8 +286,8 @@ class StatsDetailsPresenter( meanScore = mangaList.getMeanScoreRounded(), chaptersRead = mangaList.sumOf { it.read }, totalChapters = mangaList.sumOf { it.totalChapters }, - label = sourceName.uppercase(), - icon = source?.icon(), + label = source.nameBasedOnEnabledLanguages(isMultiLingual, extensionManager).uppercase(), + icon = source.icon(), readDuration = mangaList.getReadDuration(), casedLabel = source?.name, id = sourceId, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourceAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourceAdapter.kt index 0551a08069..6810fb8de6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourceAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourceAdapter.kt @@ -20,9 +20,11 @@ class SourceAdapter(val controller: BrowseController) : val sourceListener: SourceListener = controller - val isMultiLanguage = + val isMultiLingual = Injekt.get().enabledLanguages().get().filterNot { it == "all" }.size > 1 + val extensionManager = controller.presenter.extensionManager + override fun onItemSwiped(position: Int, direction: Int) { super.onItemSwiped(position, direction) controller.hideCatalogue(position) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourceHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourceHolder.kt index 45e8a5bbf4..acf149365f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourceHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourceHolder.kt @@ -32,9 +32,8 @@ class SourceHolder(view: View, val adapter: SourceAdapter) : val underPinnedSection = item.header?.code?.equals(SourcePresenter.PINNED_KEY) ?: false val underLastUsedSection = item.header?.code?.equals(SourcePresenter.LAST_USED_KEY) ?: false val isPinned = item.isPinned ?: underPinnedSection - // Set source name - val sourceName = - if (adapter.isMultiLanguage && (underPinnedSection || underLastUsedSection)) source.toString() else source.name + val showLanguage = source.includeLangInName(adapter.isMultiLingual, adapter.extensionManager) + val sourceName = if (showLanguage && (underPinnedSection || underLastUsedSection)) source.toString() else source.name binding.title.text = sourceName binding.sourcePin.apply { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourcePresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourcePresenter.kt index 95e1c0c500..07ff83d89f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourcePresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourcePresenter.kt @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.ui.source import eu.kanade.tachiyomi.data.preference.PreferencesHelper +import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.SourceManager @@ -26,6 +27,7 @@ import java.util.TreeMap class SourcePresenter( val controller: BrowseController, val sourceManager: SourceManager = Injekt.get(), + val extensionManager: ExtensionManager = Injekt.get(), private val preferences: PreferencesHelper = Injekt.get(), ) {