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:
parent
b067690678
commit
8cfab79227
2 changed files with 60 additions and 27 deletions
|
|
@ -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))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue