refactor(network-to-local): simplify networkToLocalManga (#910)

This commit is contained in:
Cuong-Tran 2025-05-14 15:14:25 +07:00 committed by GitHub
parent a18cc3e6a9
commit d33efced68
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 43 additions and 61 deletions

View file

@ -64,7 +64,7 @@ fun GlobalSearchScreen(
.flatMap { it.result } .flatMap { it.result }
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it) bulkFavoriteScreenModel.networkToLocalManga(it)
.forEach { bulkFavoriteScreenModel.select(it) } .forEach { bulkFavoriteScreenModel.select(it) }
} }
} }
@ -76,7 +76,7 @@ fun GlobalSearchScreen(
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.reverseSelection( bulkFavoriteScreenModel.reverseSelection(
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it), bulkFavoriteScreenModel.networkToLocalManga(it),
) )
} }
} }

View file

@ -54,7 +54,7 @@ fun MigrateSearchScreen(
.flatMap { it.result } .flatMap { it.result }
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it) bulkFavoriteScreenModel.networkToLocalManga(it)
.forEach { bulkFavoriteScreenModel.select(it) } .forEach { bulkFavoriteScreenModel.select(it) }
} }
} }
@ -66,7 +66,7 @@ fun MigrateSearchScreen(
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.reverseSelection( bulkFavoriteScreenModel.reverseSelection(
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it), bulkFavoriteScreenModel.networkToLocalManga(it),
) )
} }
} }

View file

@ -132,7 +132,7 @@ fun SourceFeedScreen(
.flatten() .flatten()
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it) bulkFavoriteScreenModel.networkToLocalManga(it)
.forEach { bulkFavoriteScreenModel.select(it) } .forEach { bulkFavoriteScreenModel.select(it) }
} }
} }
@ -143,7 +143,7 @@ fun SourceFeedScreen(
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.reverseSelection( bulkFavoriteScreenModel.reverseSelection(
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it), bulkFavoriteScreenModel.networkToLocalManga(it),
) )
} }
} }

View file

@ -71,7 +71,7 @@ fun TabbedScreen(
.flatten() .flatten()
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it) bulkFavoriteScreenModel.networkToLocalManga(it)
.forEach { bulkFavoriteScreenModel.select(it) } .forEach { bulkFavoriteScreenModel.select(it) }
} }
} }
@ -84,7 +84,7 @@ fun TabbedScreen(
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.reverseSelection( bulkFavoriteScreenModel.reverseSelection(
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it), bulkFavoriteScreenModel.networkToLocalManga(it),
) )
} }
} }

View file

@ -171,7 +171,7 @@ fun Screen.feedTab(
onClickManga = { onClickManga = {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (bulkFavoriteState.selectionMode) { if (bulkFavoriteState.selectionMode) {
bulkFavoriteScreenModel.toggleSelection(manga) bulkFavoriteScreenModel.toggleSelection(manga)
} else { } else {
@ -183,7 +183,7 @@ fun Screen.feedTab(
// KMK --> // KMK -->
onLongClickManga = { onLongClickManga = {
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (!bulkFavoriteState.selectionMode) { if (!bulkFavoriteState.selectionMode) {
bulkFavoriteScreenModel.addRemoveManga(manga, haptic) bulkFavoriteScreenModel.addRemoveManga(manga, haptic)
} else { } else {

View file

@ -58,7 +58,7 @@ class MigrateSearchScreen(private val mangaId: Long, private val validSources: L
onClickItem = { onClickItem = {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (bulkFavoriteState.selectionMode) { if (bulkFavoriteState.selectionMode) {
bulkFavoriteScreenModel.toggleSelection(manga) bulkFavoriteScreenModel.toggleSelection(manga)
} else } else
@ -77,7 +77,7 @@ class MigrateSearchScreen(private val mangaId: Long, private val validSources: L
onLongClickItem = { onLongClickItem = {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
// KMK <-- // KMK <--
navigator.push(MangaScreen(manga.id, true)) navigator.push(MangaScreen(manga.id, true))
} }

View file

@ -94,7 +94,7 @@ data class SourceSearchScreen(
.map { it.value.first } .map { it.value.first }
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it) bulkFavoriteScreenModel.networkToLocalManga(it)
.forEach { bulkFavoriteScreenModel.select(it) } .forEach { bulkFavoriteScreenModel.select(it) }
} }
} }
@ -105,7 +105,7 @@ data class SourceSearchScreen(
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.reverseSelection( bulkFavoriteScreenModel.reverseSelection(
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it), bulkFavoriteScreenModel.networkToLocalManga(it),
) )
} }
} }
@ -178,7 +178,7 @@ data class SourceSearchScreen(
onMangaClick = { onMangaClick = {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (bulkFavoriteState.selectionMode) { if (bulkFavoriteState.selectionMode) {
bulkFavoriteScreenModel.toggleSelection(manga) bulkFavoriteScreenModel.toggleSelection(manga)
} else { } else {
@ -190,7 +190,7 @@ data class SourceSearchScreen(
onMangaLongClick = { onMangaLongClick = {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
// KMK <-- // KMK <--
navigator.push(MangaScreen(manga.id, true)) navigator.push(MangaScreen(manga.id, true))
} }

View file

@ -204,7 +204,7 @@ data class BrowseSourceScreen(
.map { it.value.first } .map { it.value.first }
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it) bulkFavoriteScreenModel.networkToLocalManga(it)
.forEach { bulkFavoriteScreenModel.select(it) } .forEach { bulkFavoriteScreenModel.select(it) }
} }
} }
@ -215,7 +215,7 @@ data class BrowseSourceScreen(
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.reverseSelection( bulkFavoriteScreenModel.reverseSelection(
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it), bulkFavoriteScreenModel.networkToLocalManga(it),
) )
} }
} }
@ -370,7 +370,7 @@ data class BrowseSourceScreen(
onMangaClick = { onMangaClick = {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (bulkFavoriteState.selectionMode) { if (bulkFavoriteState.selectionMode) {
bulkFavoriteScreenModel.toggleSelection(manga) bulkFavoriteScreenModel.toggleSelection(manga)
} else { } else {
@ -392,7 +392,7 @@ data class BrowseSourceScreen(
onMangaLongClick = { onMangaLongClick = {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (bulkFavoriteState.selectionMode) { if (bulkFavoriteState.selectionMode) {
navigator.push(MangaScreen(manga.id, true)) navigator.push(MangaScreen(manga.id, true))
} else { } else {

View file

@ -129,7 +129,7 @@ class SourceFeedScreen(val sourceId: Long) : Screen() {
onClickManga = { onClickManga = {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (bulkFavoriteState.selectionMode) { if (bulkFavoriteState.selectionMode) {
bulkFavoriteScreenModel.toggleSelection(manga) bulkFavoriteScreenModel.toggleSelection(manga)
} else { } else {
@ -172,7 +172,7 @@ class SourceFeedScreen(val sourceId: Long) : Screen() {
}, },
onLongClickManga = { onLongClickManga = {
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (!bulkFavoriteState.selectionMode) { if (!bulkFavoriteState.selectionMode) {
bulkFavoriteScreenModel.addRemoveManga(manga, haptic) bulkFavoriteScreenModel.addRemoveManga(manga, haptic)
} else { } else {

View file

@ -71,7 +71,7 @@ class GlobalSearchScreen(
if (manga != null) { if (manga != null) {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val localManga = screenModel.networkToLocalManga.getLocal(manga) val localManga = screenModel.networkToLocalManga(manga)
// KMK <-- // KMK <--
navigator.replace(MangaScreen(localManga.id, true)) navigator.replace(MangaScreen(localManga.id, true))
} }
@ -98,7 +98,7 @@ class GlobalSearchScreen(
onClickItem = { onClickItem = {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (bulkFavoriteState.selectionMode) { if (bulkFavoriteState.selectionMode) {
bulkFavoriteScreenModel.toggleSelection(manga) bulkFavoriteScreenModel.toggleSelection(manga)
} else { } else {
@ -110,7 +110,7 @@ class GlobalSearchScreen(
onLongClickItem = { onLongClickItem = {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (!bulkFavoriteState.selectionMode) { if (!bulkFavoriteState.selectionMode) {
bulkFavoriteScreenModel.addRemoveManga(manga, haptic) bulkFavoriteScreenModel.addRemoveManga(manga, haptic)
} else { } else {

View file

@ -391,13 +391,13 @@ class MangaScreen(
}, },
onRelatedMangaClick = { onRelatedMangaClick = {
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
navigator.push(MangaScreen(manga.id, true)) navigator.push(MangaScreen(manga.id, true))
} }
}, },
onRelatedMangaLongClick = { onRelatedMangaLongClick = {
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
bulkFavoriteScreenModel.addRemoveManga(manga, haptic) bulkFavoriteScreenModel.addRemoveManga(manga, haptic)
} }
}, },

View file

@ -60,7 +60,7 @@ fun RelatedMangasScreen(
.flatMap { it.mangaList } .flatMap { it.mangaList }
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it) bulkFavoriteScreenModel.networkToLocalManga(it)
.forEach { bulkFavoriteScreenModel.select(it) } .forEach { bulkFavoriteScreenModel.select(it) }
} }
} }
@ -73,7 +73,7 @@ fun RelatedMangasScreen(
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.reverseSelection( bulkFavoriteScreenModel.reverseSelection(
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it), bulkFavoriteScreenModel.networkToLocalManga(it),
) )
} }
} }
@ -102,7 +102,7 @@ fun RelatedMangasScreen(
contentPadding = paddingValues, contentPadding = paddingValues,
onMangaClick = { onMangaClick = {
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (bulkFavoriteState.selectionMode) { if (bulkFavoriteState.selectionMode) {
bulkFavoriteScreenModel.toggleSelection(manga) bulkFavoriteScreenModel.toggleSelection(manga)
} else { } else {
@ -112,7 +112,7 @@ fun RelatedMangasScreen(
}, },
onMangaLongClick = { onMangaLongClick = {
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (!bulkFavoriteState.selectionMode) { if (!bulkFavoriteState.selectionMode) {
bulkFavoriteScreenModel.addRemoveManga(manga, haptic) bulkFavoriteScreenModel.addRemoveManga(manga, haptic)
} else { } else {

View file

@ -79,7 +79,7 @@ class MangaDexFollowsScreen(private val sourceId: Long) : Screen() {
.map { it.value.first } .map { it.value.first }
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it) bulkFavoriteScreenModel.networkToLocalManga(it)
.forEach { bulkFavoriteScreenModel.select(it) } .forEach { bulkFavoriteScreenModel.select(it) }
} }
} }
@ -90,7 +90,7 @@ class MangaDexFollowsScreen(private val sourceId: Long) : Screen() {
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.reverseSelection( bulkFavoriteScreenModel.reverseSelection(
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it), bulkFavoriteScreenModel.networkToLocalManga(it),
) )
} }
} }
@ -131,7 +131,7 @@ class MangaDexFollowsScreen(private val sourceId: Long) : Screen() {
onMangaClick = { onMangaClick = {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (bulkFavoriteState.selectionMode) { if (bulkFavoriteState.selectionMode) {
bulkFavoriteScreenModel.toggleSelection(manga) bulkFavoriteScreenModel.toggleSelection(manga)
} else { } else {
@ -143,7 +143,7 @@ class MangaDexFollowsScreen(private val sourceId: Long) : Screen() {
onMangaLongClick = { onMangaLongClick = {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (bulkFavoriteState.selectionMode) { if (bulkFavoriteState.selectionMode) {
navigator.push(MangaScreen(manga.id, true)) navigator.push(MangaScreen(manga.id, true))
} else { } else {

View file

@ -99,7 +99,7 @@ class BrowseRecommendsScreen(
.map { it.value.first } .map { it.value.first }
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it) bulkFavoriteScreenModel.networkToLocalManga(it)
.forEach { bulkFavoriteScreenModel.select(it) } .forEach { bulkFavoriteScreenModel.select(it) }
} }
} }
@ -110,7 +110,7 @@ class BrowseRecommendsScreen(
.let { .let {
scope.launchIO { scope.launchIO {
bulkFavoriteScreenModel.reverseSelection( bulkFavoriteScreenModel.reverseSelection(
bulkFavoriteScreenModel.networkToLocalManga.getLocal(it), bulkFavoriteScreenModel.networkToLocalManga(it),
) )
} }
} }
@ -159,7 +159,7 @@ class BrowseRecommendsScreen(
onClickItem(it) onClickItem(it)
} else { } else {
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (bulkFavoriteState.selectionMode) { if (bulkFavoriteState.selectionMode) {
bulkFavoriteScreenModel.toggleSelection(manga) bulkFavoriteScreenModel.toggleSelection(manga)
} else { } else {
@ -175,7 +175,7 @@ class BrowseRecommendsScreen(
onLongClickItem(it) onLongClickItem(it)
} else { } else {
scope.launchIO { scope.launchIO {
val manga = screenModel.networkToLocalManga.getLocal(it) val manga = screenModel.networkToLocalManga(it)
if (!bulkFavoriteState.selectionMode) { if (!bulkFavoriteState.selectionMode) {
bulkFavoriteScreenModel.addRemoveManga(manga, haptic) bulkFavoriteScreenModel.addRemoveManga(manga, haptic)
} else { } else {

View file

@ -59,7 +59,7 @@ class RecommendsScreen(val mangaId: Long, val sourceId: Long) : Screen() {
else -> { else -> {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val localManga = screenModel.networkToLocalManga.getLocal(manga) val localManga = screenModel.networkToLocalManga(manga)
navigator.push( navigator.push(
// KMK <-- // KMK <--
MangaScreen(localManga.id, true), MangaScreen(localManga.id, true),
@ -75,7 +75,7 @@ class RecommendsScreen(val mangaId: Long, val sourceId: Long) : Screen() {
else -> { else -> {
// KMK --> // KMK -->
scope.launchIO { scope.launchIO {
val localManga = screenModel.networkToLocalManga.getLocal(manga) val localManga = screenModel.networkToLocalManga(manga)
bulkFavoriteScreenModel.addRemoveManga( bulkFavoriteScreenModel.addRemoveManga(
localManga, localManga,
haptic, haptic,

View file

@ -83,8 +83,8 @@ open class RecommendsScreenModel(
// If the recommendation is associated with a source, resolve it // If the recommendation is associated with a source, resolve it
// Otherwise, skip this step. The user will be prompted to choose a source via SmartSearch // Otherwise, skip this step. The user will be prompted to choose a source via SmartSearch
it.toDomainManga(recSourceId ?: RECOMMENDS_SOURCE) it.toDomainManga(recSourceId ?: RECOMMENDS_SOURCE)
/* KMK --> .let { networkToLocalManga(it) } KMK <-- */
} }
/* KMK --> .let { networkToLocalManga(it) } KMK <-- */
// KMK <-- // KMK <--
.distinctBy { it.url } .distinctBy { it.url }

View file

@ -8,28 +8,10 @@ class NetworkToLocalManga(
) { ) {
suspend operator fun invoke(manga: Manga): Manga { suspend operator fun invoke(manga: Manga): Manga {
return invoke(listOf(manga)).single() return if (manga.id <= 0) invoke(listOf(manga)).single() else manga
} }
suspend operator fun invoke(manga: List<Manga>): List<Manga> { suspend operator fun invoke(manga: List<Manga>): List<Manga> {
return mangaRepository.insertNetworkManga(manga) return mangaRepository.insertNetworkManga(manga)
} }
// KMK -->
suspend fun getLocal(manga: Manga): Manga = if (manga.id <= 0) {
invoke(manga)
} else {
manga
}
suspend fun getLocal(mangas: List<Manga>): List<Manga> {
return mangas.map { manga ->
if (manga.id <= 0) {
invoke(manga)
} else {
manga
}
}
}
// KMK <--
} }