feat: unify recommendation screens and add more sources (#1376)

* feat(recommendations): add mangaupdates.com support

* feat(recommendations): display all tracker recommendation sources

* refactor(recommendations): apply spotless

* refactor: split RecommendationPagingSources

* feat(recommendations): unify MangaDex & community recommendations

* refactor: remove old screen

* fix: update comment

* style: fix formatting

* refactor: move onClick handlers

* fix: handle external recommendation links correctly

* fix: apply spotless

* feat: add comick recommendation source

* fix: mark recs from comick as not initialized to force fetching missing metadata

* Update app/src/main/java/exh/recs/BrowseRecommendsScreen.kt

---------

Co-authored-by: jobobby04 <jobobby04@users.noreply.github.com>
This commit is contained in:
Tim Schneeberger
2025-01-21 20:29:32 +01:00
committed by GitHub
parent a7a3e5a2db
commit d80ad3f145
14 changed files with 786 additions and 258 deletions
@@ -40,7 +40,6 @@ import eu.kanade.presentation.manga.components.SetIntervalDialog
import eu.kanade.presentation.util.AssistContentScreen
import eu.kanade.presentation.util.Screen
import eu.kanade.presentation.util.isTabletUi
import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.isLocalOrStub
import eu.kanade.tachiyomi.source.online.HttpSource
@@ -59,13 +58,10 @@ import eu.kanade.tachiyomi.ui.webview.WebViewScreen
import eu.kanade.tachiyomi.util.system.copyToClipboard
import eu.kanade.tachiyomi.util.system.toShareIntent
import eu.kanade.tachiyomi.util.system.toast
import exh.md.similar.MangaDexSimilarScreen
import exh.pagepreview.PagePreviewScreen
import exh.pref.DelegateSourcePreferences
import exh.recs.RecommendsScreen
import exh.source.MERGED_SOURCE_ID
import exh.source.getMainSource
import exh.source.isMdBasedSource
import exh.ui.ifSourcesLoaded
import exh.ui.metadata.MetadataViewScreen
import kotlinx.coroutines.CancellationException
@@ -214,7 +210,7 @@ class MangaScreen(
onMetadataViewerClicked = { openMetadataViewer(navigator, successState.manga) },
onEditInfoClicked = screenModel::showEditMangaInfoDialog,
onRecommendClicked = {
openRecommends(context, navigator, screenModel.source?.getMainSource(), successState.manga)
openRecommends(navigator, screenModel.source?.getMainSource(), successState.manga)
},
onMergedSettingsClicked = screenModel::showEditMergedSettingsDialog,
onMergeClicked = { openSmartSearch(navigator, successState.manga) },
@@ -550,28 +546,9 @@ class MangaScreen(
// EXH <--
// AZ -->
private fun openRecommends(context: Context, navigator: Navigator, source: Source?, manga: Manga) {
private fun openRecommends(navigator: Navigator, source: Source?, manga: Manga) {
source ?: return
if (source.isMdBasedSource() && Injekt.get<DelegateSourcePreferences>().delegateSources().get()) {
MaterialAlertDialogBuilder(context)
.setTitle(SYMR.strings.az_recommends.getString(context))
.setSingleChoiceItems(
arrayOf(
context.stringResource(SYMR.strings.mangadex_similar),
context.stringResource(SYMR.strings.community_recommendations),
),
-1,
) { dialog, index ->
dialog.dismiss()
when (index) {
0 -> navigator.push(MangaDexSimilarScreen(manga.id, source.id))
1 -> navigator.push(RecommendsScreen(manga.id, source.id))
}
}
.show()
} else if (source is CatalogueSource) {
navigator.push(RecommendsScreen(manga.id, source.id))
}
navigator.push(RecommendsScreen(manga.id, source.id))
}
// AZ <--
}