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 4ea66c81f..30bebb1c6 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/Source.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/Source.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.source import android.graphics.drawable.Drawable import eu.kanade.domain.source.model.SourceData +import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter @@ -12,6 +13,7 @@ import eu.kanade.tachiyomi.source.model.toPageUrl import eu.kanade.tachiyomi.source.model.toSChapter import eu.kanade.tachiyomi.source.model.toSManga import eu.kanade.tachiyomi.util.lang.awaitSingle +import exh.source.MERGED_SOURCE_ID import rx.Observable import tachiyomi.source.model.ChapterInfo import tachiyomi.source.model.MangaInfo @@ -105,3 +107,46 @@ fun Source.icon(): Drawable? = Injekt.get().getAppIconForSourc fun Source.getPreferenceKey(): String = "source_$id" fun Source.toSourceData(): SourceData = SourceData(id = id, lang = lang, name = name) + +fun Source.getNameForMangaInfo(source: Source, getMergedSourcesString: (List, Boolean) -> String): String { + val preferences = Injekt.get() + val enabledLanguages = preferences.enabledLanguages().get() + .filterNot { it in listOf("all", "other") } + // SY --> + val isMergedSource = source.id == MERGED_SOURCE_ID + // SY <-- + val hasOneActiveLanguages = enabledLanguages.size == 1 + val isInEnabledLanguages = source.lang in enabledLanguages + return when { + // SY --> + isMergedSource && hasOneActiveLanguages -> getMergedSourcesString( + enabledLanguages, + true, + ) + isMergedSource -> getMergedSourcesString( + enabledLanguages, + false, + ) + // SY <-- + // For edge cases where user disables a source they got manga of in their library. + hasOneActiveLanguages && !isInEnabledLanguages -> toString() + // Hide the language tag when only one language is used. + hasOneActiveLanguages && isInEnabledLanguages -> name + else -> toString() + } +} + +fun Source.getNameForMangaInfo(): String { + val preferences = Injekt.get() + val enabledLanguages = preferences.enabledLanguages().get() + .filterNot { it in listOf("all", "other") } + val hasOneActiveLanguages = enabledLanguages.size == 1 + val isInEnabledLanguages = lang in enabledLanguages + return when { + // For edge cases where user disables a source they got manga of in their library. + hasOneActiveLanguages && !isInEnabledLanguages -> toString() + // Hide the language tag when only one language is used. + hasOneActiveLanguages && isInEnabledLanguages -> name + else -> toString() + } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedController.kt index dd781ee53..a89159cdb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedController.kt @@ -115,7 +115,7 @@ open class FeedController : */ override fun onMangaClick(manga: Manga) { // Open MangaController. - parentController?.router?.pushController(MangaController(manga, true)) + parentController?.router?.pushController(MangaController(manga.id!!, true)) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListController.kt index ab6af9137..e5bf2e689 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListController.kt @@ -420,7 +420,7 @@ class MigrationListController(bundle: Bundle? = null) : it.controller !is MangaController && it.controller !is MigrationListController && it.controller !is PreMigrationController - } + MangaController(manga).withFadeTransaction() + } + MangaController(manga.id!!).withFadeTransaction() router.setBackstack(newStack, OneWayFadeChangeHandler()) return@launchUI } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationProcessHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationProcessHolder.kt index 02e1d3903..2c672af09 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationProcessHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationProcessHolder.kt @@ -67,7 +67,7 @@ class MigrationProcessHolder( .onEach { adapter.controller.router.pushController( MangaController( - manga, + manga.id!!, true, ), ) @@ -103,7 +103,7 @@ class MigrationProcessHolder( .onEach { adapter.controller.router.pushController( MangaController( - searchResult, + searchResult.id!!, true, ), ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt index 4ea5e154f..71ec69e4d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt @@ -760,7 +760,7 @@ open class BrowseSourceController(bundle: Bundle) : val item = adapter?.getItem(position) as? SourceItem ?: return false router.pushController( MangaController( - item.manga, + item.manga.id!!, true, args.getParcelable(MangaController.SMART_SEARCH_CONFIG_EXTRA), ), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedController.kt index 973c2c4c4..de57f2341 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedController.kt @@ -100,7 +100,7 @@ open class SourceFeedController : */ override fun onMangaClick(manga: Manga) { // Open MangaController. - router.pushController(MangaController(manga, true).withFadeTransaction()) + router.pushController(MangaController(manga.id!!, true).withFadeTransaction()) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchController.kt index e2558fbb6..a3ceff9e8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchController.kt @@ -71,7 +71,7 @@ open class GlobalSearchController( * @param manga clicked item containing manga information. */ override fun onMangaClick(manga: Manga) { - router.pushController(MangaController(manga, true)) + router.pushController(MangaController(manga.id!!, true)) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt index 398723ba5..fe528a51c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt @@ -585,7 +585,7 @@ class LibraryController( // Notify the presenter a manga is being opened. presenter.onOpenManga() - router.pushController(MangaController(manga)) + router.pushController(MangaController(manga.id!!)) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/AddDuplicateMangaDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/AddDuplicateMangaDialog.kt index 58fbe282c..32f84cb92 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/AddDuplicateMangaDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/AddDuplicateMangaDialog.kt @@ -40,7 +40,7 @@ class AddDuplicateMangaDialog(bundle: Bundle? = null) : DialogController(bundle) .setNegativeButton(android.R.string.cancel, null) .setNeutralButton(activity?.getString(R.string.action_show_manga)) { _, _ -> dismissDialog() - router.pushController(MangaController(libraryManga)) + router.pushController(MangaController(libraryManga.id!!)) } .setCancelable(true) .create() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt index 10924fc83..15a603cd1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt @@ -142,9 +142,9 @@ class MangaController : constructor(history: HistoryWithRelations) : this(history.mangaId) - constructor(manga: Manga?, fromSource: Boolean = false, smartSearchConfig: SourcesController.SmartSearchConfig? = null, update: Boolean = false) : super( + constructor(mangaId: Long, fromSource: Boolean = false, smartSearchConfig: SourcesController.SmartSearchConfig? = null, update: Boolean = false) : super( bundleOf( - MANGA_EXTRA to (manga?.id ?: 0), + MANGA_EXTRA to mangaId, FROM_SOURCE_EXTRA to fromSource, // SY --> SMART_SEARCH_CONFIG_EXTRA to smartSearchConfig, @@ -152,16 +152,12 @@ class MangaController : // SY <-- ), ) { - this.manga = manga - if (manga != null) { - source = Injekt.get().getOrStub(manga.source) + this.manga = Injekt.get().getManga(mangaId).executeAsBlocking() + if (this.manga != null) { + source = Injekt.get().getOrStub(this.manga!!.source) } } - constructor(mangaId: Long) : this( - Injekt.get().getManga(mangaId).executeAsBlocking(), - ) - @Suppress("unused") constructor(bundle: Bundle) : this(bundle.getLong(MANGA_EXTRA)) @@ -382,7 +378,7 @@ class MangaController : settingsSheet = ChaptersSettingsSheet(router, presenter) - trackSheet = TrackSheet(this, manga!!, (activity as MainActivity).supportFragmentManager) + trackSheet = TrackSheet(this, (activity as MainActivity).supportFragmentManager) presenter.redirectFlow .onEach { redirect -> @@ -766,7 +762,7 @@ class MangaController : router?.popCurrentController() router?.replaceTopController( MangaController( - mergedManga, + mergedManga.id!!, true, update = true, ).withFadeTransaction(), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoHeaderAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoHeaderAdapter.kt index 2eb7e0701..35d935fcf 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoHeaderAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoHeaderAdapter.kt @@ -15,6 +15,7 @@ import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.databinding.MangaInfoHeaderBinding import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceManager +import eu.kanade.tachiyomi.source.getNameForMangaInfo import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.online.MetadataSource @@ -306,33 +307,8 @@ class MangaInfoHeaderAdapter( // If manga source is known update source TextView. binding.mangaMissingSourceIcon.isVisible = source is SourceManager.StubSource - val mangaSource = source.toString() with(binding.mangaSource) { - val enabledLanguages = preferences.enabledLanguages().get() - .filterNot { it in listOf("all", "other") } - - // SY --> - val isMergedSource = source.id == MERGED_SOURCE_ID - // SY <-- - val hasOneActiveLanguages = enabledLanguages.size == 1 - val isInEnabledLanguages = source.lang in enabledLanguages - text = when { - // SY --> - isMergedSource && hasOneActiveLanguages -> getMergedSourcesString( - enabledLanguages, - true, - ) - isMergedSource -> getMergedSourcesString( - enabledLanguages, - false, - ) - // SY <-- - // For edge cases where user disables a source they got manga of in their library. - hasOneActiveLanguages && !isInEnabledLanguages -> mangaSource - // Hide the language tag when only one language is used. - hasOneActiveLanguages && isInEnabledLanguages -> source.name - else -> mangaSource - } + text = source.getNameForMangaInfo(source, ::getMergedSourcesString) setOnClickListener { controller.performSearch(sourceManager.getOrStub(source.id).name) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSheet.kt index cf7a2a230..43783e4dd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSheet.kt @@ -11,10 +11,8 @@ import com.google.android.material.datepicker.DateValidatorPointBackward import com.google.android.material.datepicker.DateValidatorPointForward import com.google.android.material.datepicker.MaterialDatePicker import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.track.EnhancedTrackService import eu.kanade.tachiyomi.databinding.TrackControllerBinding -import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.ui.base.controller.openInBrowser import eu.kanade.tachiyomi.ui.manga.MangaController import eu.kanade.tachiyomi.util.lang.launchIO @@ -24,14 +22,10 @@ import eu.kanade.tachiyomi.util.lang.withUIContext import eu.kanade.tachiyomi.util.system.copyToClipboard import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.widget.sheet.BaseBottomSheetDialog -import uy.kohesive.injekt.Injekt -import uy.kohesive.injekt.api.get class TrackSheet( val controller: MangaController, - val manga: Manga, val fragmentManager: FragmentManager, - private val sourceManager: SourceManager = Injekt.get(), ) : BaseBottomSheetDialog(controller.activity!!), TrackAdapter.OnClickListener, SetTrackStatusDialog.Listener, @@ -80,6 +74,8 @@ class TrackSheet( override fun onSetClick(position: Int) { val item = adapter.getItem(position) ?: return + val manga = controller.presenter.manga + val source = controller.presenter.source if (item.service is EnhancedTrackService) { if (item.track != null) { @@ -87,7 +83,7 @@ class TrackSheet( return } - if (!item.service.accept(sourceManager.getOrStub(manga.source))) { + if (!item.service.accept(source)) { controller.presenter.view?.applicationContext?.toast(R.string.source_unsupported) return } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesController.kt index a024023fe..33e143300 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesController.kt @@ -282,7 +282,7 @@ class UpdatesController : } private fun openManga(chapter: UpdatesItem) { - router.pushController(MangaController(chapter.manga)) + router.pushController(MangaController(chapter.manga.id!!)) } /** diff --git a/app/src/main/java/exh/ui/smartsearch/SmartSearchController.kt b/app/src/main/java/exh/ui/smartsearch/SmartSearchController.kt index 67fe66533..94d99be58 100644 --- a/app/src/main/java/exh/ui/smartsearch/SmartSearchController.kt +++ b/app/src/main/java/exh/ui/smartsearch/SmartSearchController.kt @@ -15,7 +15,6 @@ import eu.kanade.tachiyomi.ui.manga.MangaController import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.plus import uy.kohesive.injekt.injectLazy class SmartSearchController(bundle: Bundle? = null) : NucleusController() { @@ -44,7 +43,7 @@ class SmartSearchController(bundle: Bundle? = null) : NucleusController if (results is SmartSearchPresenter.SearchResults.Found) { - val transaction = MangaController(results.manga, true, smartSearchConfig).withFadeTransaction() + val transaction = MangaController(results.manga.id!!, true, smartSearchConfig).withFadeTransaction() router.replaceTopController(transaction) } else { if (results is SmartSearchPresenter.SearchResults.NotFound) {