diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt index fdfb8eea0..abc43da56 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt @@ -180,8 +180,8 @@ class FullBackupManager(context: Context) : AbstractBackupManager(context) { } } - val source = sourceManager.get(manga.source)?.getMainSource() - if (source is MetadataSource<*, *>) { + val source = sourceManager.get(manga.source)?.getMainSource>() + if (source != null) { manga.id?.let { mangaId -> databaseHelper.getFlatMetadataForManga(mangaId).executeAsBlocking()?.let { flatMetadata -> mangaObject.flatMetadata = BackupFlatMetadata.copyFrom(flatMetadata) 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 1877dc646..403450e47 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 @@ -57,6 +57,7 @@ import eu.kanade.tachiyomi.widget.EmptyView import eu.kanade.tachiyomi.widget.materialdialogs.setTextInput import exh.log.xLogW import exh.savedsearches.EXHSavedSearch +import exh.source.anyIs import exh.source.getMainSource import exh.source.isEhBasedSource import exh.widget.preference.MangadexLoginDialog @@ -169,8 +170,8 @@ open class BrowseSourceController(bundle: Bundle) : binding.progress.isVisible = true // SY --> - val mainSource = presenter.source.getMainSource() - if (mainSource is LoginSource && mainSource.requiresLogin && !mainSource.isLogged()) { + val mainSource = presenter.source.getMainSource() + if (mainSource != null && mainSource.requiresLogin && !mainSource.isLogged()) { val dialog = MangadexLoginDialog(mainSource) dialog.showDialog(router) } @@ -438,7 +439,7 @@ open class BrowseSourceController(bundle: Bundle) : menu.findItem(R.id.action_local_source_help)?.isVisible = isLocalSource // SY --> - menu.findItem(R.id.action_settings)?.isVisible = presenter.source is ConfigurableSource + menu.findItem(R.id.action_settings)?.isVisible = presenter.source.anyIs() // SY <-- } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceFilterSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceFilterSheet.kt index bd9d988dd..24df42a47 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceFilterSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceFilterSheet.kt @@ -118,8 +118,8 @@ class SourceFilterSheet( init { // SY --> - val mainSource = source?.getMainSource() - if (mainSource is BrowseSourceFilterHeader && controller != null) { + val mainSource = source?.getMainSource() + if (mainSource != null && controller != null) { adapters += mainSource.getFilterHeader(controller) { dismissSheet?.invoke() } } adapters += savedSearchesAdapter 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 a4d5024a5..a6f910414 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 @@ -302,8 +302,8 @@ class MangaController : chaptersHeaderAdapter = MangaChaptersHeaderAdapter(this) chaptersAdapter = ChaptersAdapter(this, view.context) // SY --> - val mainSource = presenter.source.getMainSource() - if (mainSource is MetadataSource<*, *>) { + val mainSource = presenter.source.getMainSource>() + if (mainSource != null) { mangaMetaInfoAdapter = mainSource.getDescriptionAdapter(this) } if (!preferences.recommendsInOverflow().get() || smartSearchConfig != null) { @@ -556,8 +556,8 @@ class MangaController : // SY --> fun onNextMetaInfo(flatMetadata: FlatMetadata) { - val mainSource = presenter.source.getMainSource() - if (mainSource is MetadataSource<*, *>) { + val mainSource = presenter.source.getMainSource>() + if (mainSource != null) { presenter.meta = flatMetadata.raise(mainSource.metaClass) mangaMetaInfoAdapter?.notifyDataSetChanged() updateFilterIconState() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt index 58167860f..8b86ba976 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt @@ -247,8 +247,8 @@ class ReaderPresenter( .observeOn(AndroidSchedulers.mainThread()) // SY --> .flatMap { manga -> - val source = sourceManager.get(manga.source)?.getMainSource() - if (manga.initialized && source is MetadataSource<*, *>) { + val source = sourceManager.get(manga.source)?.getMainSource>() + if (manga.initialized && source != null) { db.getFlatMetadataForManga(mangaId).asRxSingle().map { manga to it?.raise(source.metaClass) }.toObservable() diff --git a/app/src/main/java/exh/GalleryAdder.kt b/app/src/main/java/exh/GalleryAdder.kt index a7ecf3d37..bdc1237ac 100755 --- a/app/src/main/java/exh/GalleryAdder.kt +++ b/app/src/main/java/exh/GalleryAdder.kt @@ -37,8 +37,7 @@ class GalleryAdder { fun pickSource(url: String): List { val uri = url.toUri() return sourceManager.getVisibleCatalogueSources() - .map { it.getMainSource() } - .filterIsInstance() + .mapNotNull { it.getMainSource() } .filter { it.lang in filters.first && it.id !in filters.second && try { it.matchesUri(uri) @@ -71,8 +70,7 @@ class GalleryAdder { } } else { sourceManager.getVisibleCatalogueSources() - .map { it.getMainSource() } - .filterIsInstance() + .mapNotNull { it.getMainSource() } .find { it.lang in filters.first && it.id !in filters.second && try { it.matchesUri(uri) diff --git a/app/src/main/java/exh/md/utils/MdUtil.kt b/app/src/main/java/exh/md/utils/MdUtil.kt index bede4f687..f3eb64a06 100644 --- a/app/src/main/java/exh/md/utils/MdUtil.kt +++ b/app/src/main/java/exh/md/utils/MdUtil.kt @@ -318,8 +318,7 @@ class MdUtil { return sourceManager.getVisibleOnlineSources() .asSequence() - .map { it.getMainSource() } - .filterIsInstance() + .mapNotNull { it.getMainSource() } .filter { it.lang in languages } .filterNot { it.id.toString() in disabledSourceIds } .toList() diff --git a/app/src/main/java/exh/source/SourceHelper.kt b/app/src/main/java/exh/source/SourceHelper.kt index 965299e5f..100837371 100644 --- a/app/src/main/java/exh/source/SourceHelper.kt +++ b/app/src/main/java/exh/source/SourceHelper.kt @@ -107,6 +107,13 @@ fun Source.getMainSource(): Source = if (this is EnhancedHttpSource) { this } +@JvmName("getMainSourceInline") +inline fun Source.getMainSource(): T? = if (this is EnhancedHttpSource) { + this.source() as? T +} else { + this as? T +} + fun Source.getOriginalSource(): Source = if (this is EnhancedHttpSource) { this.originalSource } else { @@ -118,3 +125,11 @@ fun Source.getEnhancedSource(): Source = if (this is EnhancedHttpSource) { } else { this } + +inline fun Source.anyIs(): Boolean { + return if (this is EnhancedHttpSource) { + originalSource is T || enhancedSource is T + } else { + this is T + } +} diff --git a/app/src/main/java/exh/ui/metadata/MetadataViewPresenter.kt b/app/src/main/java/exh/ui/metadata/MetadataViewPresenter.kt index f98bfff8d..55ac24b11 100644 --- a/app/src/main/java/exh/ui/metadata/MetadataViewPresenter.kt +++ b/app/src/main/java/exh/ui/metadata/MetadataViewPresenter.kt @@ -30,8 +30,8 @@ class MetadataViewPresenter( launchIO { val flatMetadata = db.getFlatMetadataForManga(manga.id!!).executeOnIO() ?: return@launchIO - val mainSource = source.getMainSource() - if (mainSource is MetadataSource<*, *>) { + val mainSource = source.getMainSource>() + if (mainSource != null) { meta.value = flatMetadata.raise(mainSource.metaClass) } }