fix(merged-entries): Fix manga folder opening and source click (#1115)

* Fix open manga folder

* Fix source click

* fix null

* warning
This commit is contained in:
Cuong-Tran 2025-08-29 17:46:36 +07:00
parent b067690678
commit 8cfab79227
No known key found for this signature in database
GPG key ID: 733AA7624B9315C2
2 changed files with 60 additions and 27 deletions

View file

@ -117,6 +117,7 @@ import tachiyomi.domain.source.interactor.GetRemoteManga
import tachiyomi.domain.source.model.StubSource
import tachiyomi.domain.source.service.SourceManager
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.screens.LoadingScreen
import uy.kohesive.injekt.Injekt
@ -421,8 +422,20 @@ class MangaScreen(
}
}.takeIf { isConfigurableSource },
onClearManga = { screenModel.showClearMangaDialog(successState.source is MergedSource) },
onOpenMangaFolder = { screenModel.openMangaFolder() }
.takeIf { successState.source !is StubSource && successState.source !is MergedSource },
onOpenMangaFolder = {
if (successState.mergedData == null) {
screenModel.openMangaFolder(screenModel.source, screenModel.manga)
} else {
mergedMangaAction(
context,
navigator,
successState.mergedData,
action = { _, nav, manga, source -> screenModel.openMangaFolder(source, manga) },
titleRes = KMR.strings.action_open_folder,
)
}
}
.takeIf { successState.source !is StubSource },
onRelatedMangasScreenClick = {
if (successState.isRelatedMangasFetched == null) {
scope.launchIO { screenModel.fetchRelatedMangasFromSource(onDemand = true) }
@ -433,28 +446,21 @@ class MangaScreen(
onRelatedMangaLongClick = { bulkFavoriteScreenModel.addRemoveManga(it, haptic) },
onSourceClick = {
if (successState.source !is StubSource) {
val screen = when {
// Clicked on source of an entry being merged with previous entry or
// source of an recommending entry (to search again)
smartSearchConfig != null -> SmartSearchScreen(successState.source.id, smartSearchConfig)
screenModel.useNewSourceNavigation -> SourceFeedScreen(successState.source.id)
else -> BrowseSourceScreen(successState.source.id, GetRemoteManga.QUERY_POPULAR)
}
when (screen) {
// When doing a migrate/recommend => replace previous screen to perform search again.
is SmartSearchScreen -> {
navigator.popUntil { it is SmartSearchScreen }
if (navigator.size > 1) navigator.replace(screen) else navigator.push(screen)
}
is SourceFeedScreen -> {
navigator.popUntil { it is SourceFeedScreen }
if (navigator.size > 1) navigator.replace(screen) else navigator.push(screen)
}
else -> {
navigator.popUntil { it is BrowseSourceScreen }
if (navigator.size > 1) navigator.replace(screen) else navigator.push(screen)
}
// KMK -->
if (successState.mergedData == null) {
screenModel.source?.let { browseSource(navigator, it, screenModel.useNewSourceNavigation) }
} else {
mergedMangaAction(
context,
navigator,
successState.mergedData,
action = { _, nav, _, source ->
source?.let { browseSource(nav, it, screenModel.useNewSourceNavigation) }
},
titleRes = MR.strings.browse,
)
}
// KMK <--
} else {
navigator.push(ExtensionsScreen(searchSource = successState.source.name))
}
@ -673,7 +679,7 @@ class MangaScreen(
return try {
source.getMangaUrl(manga.toSManga())
} catch (e: Exception) {
} catch (_: Exception) {
null
}
}
@ -855,6 +861,35 @@ class MangaScreen(
.show()
}
// KMK -->
private fun browseSource(navigator: Navigator, source: Source, useNewSourceNavigation: Boolean) {
val screen = when {
// Clicked on source of an entry being merged with previous entry or
// source of an recommending entry (to search again)
smartSearchConfig != null -> SmartSearchScreen(source.id, smartSearchConfig)
useNewSourceNavigation -> SourceFeedScreen(source.id)
else -> BrowseSourceScreen(source.id, GetRemoteManga.QUERY_POPULAR)
}
when (screen) {
// When doing a migrate/recommend => replace previous screen to perform search again.
is SmartSearchScreen -> {
navigator.popUntil { it is SmartSearchScreen }
if (navigator.size > 1) navigator.replace(screen) else navigator.push(screen)
}
is SourceFeedScreen -> {
navigator.popUntil { it is SourceFeedScreen }
if (navigator.size > 1) navigator.replace(screen) else navigator.push(screen)
}
else -> {
navigator.popUntil { it is BrowseSourceScreen }
if (navigator.size > 1) navigator.replace(screen) else navigator.push(screen)
}
}
}
// KMK <--
private fun openMorePagePreviews(navigator: Navigator, manga: Manga) {
navigator.push(PagePreviewScreen(manga.id))
}

View file

@ -933,10 +933,8 @@ class MangaScreenModel(
/**
* Opens manga folder with the system's file manager.
*/
fun openMangaFolder() {
fun openMangaFolder(currentSource: Source?, currentManga: Manga?) {
try {
val currentManga = manga
val currentSource = source
if (currentManga == null || currentSource == null || currentSource is StubSource) return
val mangaDir = downloadProvider.findMangaDir(/* SY --> */ currentManga.ogTitle /* SY <-- */, currentSource) ?: return