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