From 80031faafe6b60b4ba4e955d72da2bf5a7d71b68 Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Sat, 2 Nov 2024 23:58:35 +0700 Subject: [PATCH 1/7] Cleanup usage of `NetworkToLocalManga` --- CHANGELOG.md | 3 +++ .../ui/browse/source/browse/BrowseSourceScreenModel.kt | 4 +++- .../ui/browse/source/globalsearch/SearchScreenModel.kt | 4 +++- .../kanade/tachiyomi/ui/deeplink/DeepLinkScreenModel.kt | 5 +++-- .../domain/manga/interactor/NetworkToLocalManga.kt | 5 ----- .../src/main/java/tachiyomi/domain/manga/model/Manga.kt | 9 +++++++++ 6 files changed, 21 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e3e653d9a..d91facbc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,9 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co - Bangumi search now shows the score and summary of a search result ([@MajorTanya](https://github.com/MajorTanya)) ([#1396](https://github.com/mihonapp/mihon/pull/1396)) - Extension repo URLs are now auto-formatted ([@AntsyLich](https://github.com/AntsyLich), [@MajorTanya](https://github.com/MajorTanya)) +### Other +- Cleanup usage of `NetworkToLocalManga` ([@cuong-tran](https://github.com/cuong-tran)) ([#](https://github.com/mihonapp/mihon/pull/)) + ## [v0.17.0] - 2024-10-26 ### Added - Option to disable reader zoom out ([@Splintorien](https://github.com/Splintorien)) ([#302](https://github.com/mihonapp/mihon/pull/302)) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt index dff062503..afd212022 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt @@ -113,9 +113,11 @@ class BrowseSourceScreenModel( getRemoteManga.subscribe(sourceId, listing.query ?: "", listing.filters) }.flow.map { pagingData -> pagingData.map { - networkToLocalManga.await(it.toDomainManga(sourceId)) + val networkManga = it.toDomainManga(sourceId) + networkToLocalManga.await(networkManga) .let { localManga -> getManga.subscribe(localManga.url, localManga.source) } .filterNotNull() + .map { manga -> manga.shouldUseNetworkMangaInfo(networkManga) } .stateIn(ioCoroutineScope) } .filter { !hideInLibraryItems || !it.value.favorite } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt index 1cb9ba3ff..3f1a0839e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt @@ -166,7 +166,9 @@ abstract class SearchScreenModel( } val titles = page.mangas.map { - networkToLocalManga.await(it.toDomainManga(source.id)) + val networkManga = it.toDomainManga(source.id) + networkToLocalManga.await(networkManga) + .shouldUseNetworkMangaInfo(networkManga) } if (isActive) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreenModel.kt index 5bef14675..031b3c7be 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreenModel.kt @@ -74,8 +74,9 @@ class DeepLinkScreenModel( } private suspend fun getMangaFromSManga(sManga: SManga, sourceId: Long): Manga { - return getMangaByUrlAndSourceId.await(sManga.url, sourceId) - ?: networkToLocalManga.await(sManga.toDomainManga(sourceId)) + val networkManga = sManga.toDomainManga(sourceId) + return networkToLocalManga.await(networkManga) + .shouldUseNetworkMangaInfo(networkManga) } sealed interface State { diff --git a/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt b/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt index 5ca3fb647..d7ced803f 100644 --- a/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt +++ b/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt @@ -14,11 +14,6 @@ class NetworkToLocalManga( val id = insertManga(manga) manga.copy(id = id!!) } - !localManga.favorite -> { - // if the manga isn't a favorite, set its display title from source - // if it later becomes a favorite, updated title will go to db - localManga.copy(title = manga.title) - } else -> { localManga } diff --git a/domain/src/main/java/tachiyomi/domain/manga/model/Manga.kt b/domain/src/main/java/tachiyomi/domain/manga/model/Manga.kt index fb634c1cd..29c470a4c 100644 --- a/domain/src/main/java/tachiyomi/domain/manga/model/Manga.kt +++ b/domain/src/main/java/tachiyomi/domain/manga/model/Manga.kt @@ -72,6 +72,15 @@ data class Manga( return chapterFlags and CHAPTER_SORT_DIR_MASK == CHAPTER_SORT_DESC } + fun shouldUseNetworkMangaInfo(networkManga: Manga): Manga = + if (!favorite) { + // if the manga isn't a favorite, set its display title from source + // if it later becomes a favorite, updated title will go to db + copy(title = networkManga.title) + } else { + this + } + companion object { // Generic filter that does not filter anything const val SHOW_ALL = 0x00000000L From 71d0d2d723c17e19cb3525b8ad39cc5c45d62c5f Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Sun, 3 Nov 2024 00:06:11 +0700 Subject: [PATCH 2/7] update CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d91facbc0..6572e1bf5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,7 +24,7 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co - Extension repo URLs are now auto-formatted ([@AntsyLich](https://github.com/AntsyLich), [@MajorTanya](https://github.com/MajorTanya)) ### Other -- Cleanup usage of `NetworkToLocalManga` ([@cuong-tran](https://github.com/cuong-tran)) ([#](https://github.com/mihonapp/mihon/pull/)) +- Cleanup usage of `NetworkToLocalManga` ([@cuong-tran](https://github.com/cuong-tran)) ([#1435](https://github.com/mihonapp/mihon/pull/1435)) ## [v0.17.0] - 2024-10-26 ### Added From 47140c923f14bcec193118719c8d021ad0230674 Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Sun, 3 Nov 2024 01:55:16 +0700 Subject: [PATCH 3/7] Always update fresh data from source if manga isn't favorited --- CHANGELOG.md | 4 +--- .../source/browse/BrowseSourceScreenModel.kt | 4 +--- .../source/globalsearch/SearchScreenModel.kt | 4 +--- .../tachiyomi/ui/deeplink/DeepLinkScreenModel.kt | 6 +----- .../manga/interactor/NetworkToLocalManga.kt | 16 ++++++++++++++++ .../java/tachiyomi/domain/manga/model/Manga.kt | 9 --------- 6 files changed, 20 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6572e1bf5..339ca8879 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,9 +22,7 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co ### Improved - Bangumi search now shows the score and summary of a search result ([@MajorTanya](https://github.com/MajorTanya)) ([#1396](https://github.com/mihonapp/mihon/pull/1396)) - Extension repo URLs are now auto-formatted ([@AntsyLich](https://github.com/AntsyLich), [@MajorTanya](https://github.com/MajorTanya)) - -### Other -- Cleanup usage of `NetworkToLocalManga` ([@cuong-tran](https://github.com/cuong-tran)) ([#1435](https://github.com/mihonapp/mihon/pull/1435)) +- Always update fresh data from source if manga isn't favorited ([@cuong-tran](https://github.com/cuong-tran)) ([#1435](https://github.com/mihonapp/mihon/pull/1435)) ## [v0.17.0] - 2024-10-26 ### Added diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt index afd212022..dff062503 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt @@ -113,11 +113,9 @@ class BrowseSourceScreenModel( getRemoteManga.subscribe(sourceId, listing.query ?: "", listing.filters) }.flow.map { pagingData -> pagingData.map { - val networkManga = it.toDomainManga(sourceId) - networkToLocalManga.await(networkManga) + networkToLocalManga.await(it.toDomainManga(sourceId)) .let { localManga -> getManga.subscribe(localManga.url, localManga.source) } .filterNotNull() - .map { manga -> manga.shouldUseNetworkMangaInfo(networkManga) } .stateIn(ioCoroutineScope) } .filter { !hideInLibraryItems || !it.value.favorite } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt index 3f1a0839e..1cb9ba3ff 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt @@ -166,9 +166,7 @@ abstract class SearchScreenModel( } val titles = page.mangas.map { - val networkManga = it.toDomainManga(source.id) - networkToLocalManga.await(networkManga) - .shouldUseNetworkMangaInfo(networkManga) + networkToLocalManga.await(it.toDomainManga(source.id)) } if (isActive) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreenModel.kt index 031b3c7be..892d4c0f2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreenModel.kt @@ -15,7 +15,6 @@ import kotlinx.coroutines.flow.update import tachiyomi.core.common.util.lang.launchIO import tachiyomi.domain.chapter.interactor.GetChapterByUrlAndMangaId import tachiyomi.domain.chapter.model.Chapter -import tachiyomi.domain.manga.interactor.GetMangaByUrlAndSourceId import tachiyomi.domain.manga.interactor.NetworkToLocalManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager @@ -27,7 +26,6 @@ class DeepLinkScreenModel( private val sourceManager: SourceManager = Injekt.get(), private val networkToLocalManga: NetworkToLocalManga = Injekt.get(), private val getChapterByUrlAndMangaId: GetChapterByUrlAndMangaId = Injekt.get(), - private val getMangaByUrlAndSourceId: GetMangaByUrlAndSourceId = Injekt.get(), private val syncChaptersWithSource: SyncChaptersWithSource = Injekt.get(), ) : StateScreenModel(State.Loading) { @@ -74,9 +72,7 @@ class DeepLinkScreenModel( } private suspend fun getMangaFromSManga(sManga: SManga, sourceId: Long): Manga { - val networkManga = sManga.toDomainManga(sourceId) - return networkToLocalManga.await(networkManga) - .shouldUseNetworkMangaInfo(networkManga) + return networkToLocalManga.await(sManga.toDomainManga(sourceId)) } sealed interface State { diff --git a/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt b/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt index d7ced803f..50c505c9a 100644 --- a/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt +++ b/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt @@ -1,6 +1,7 @@ package tachiyomi.domain.manga.interactor import tachiyomi.domain.manga.model.Manga +import tachiyomi.domain.manga.model.toMangaUpdate import tachiyomi.domain.manga.repository.MangaRepository class NetworkToLocalManga( @@ -14,6 +15,11 @@ class NetworkToLocalManga( val id = insertManga(manga) manga.copy(id = id!!) } + !localManga.favorite -> { + // if the manga isn't a favorite, update new info from source to db + manga.updateManga(localManga.id) + manga.copy(id = localManga.id) + } else -> { localManga } @@ -27,4 +33,14 @@ class NetworkToLocalManga( private suspend fun insertManga(manga: Manga): Long? { return mangaRepository.insert(manga) } + + private suspend fun Manga.updateManga(id: Long) { + mangaRepository.update( + toMangaUpdate() + .copy( + id = id, + thumbnailUrl = thumbnailUrl?.takeIf { it.isNotBlank() }, + ), + ) + } } diff --git a/domain/src/main/java/tachiyomi/domain/manga/model/Manga.kt b/domain/src/main/java/tachiyomi/domain/manga/model/Manga.kt index 29c470a4c..fb634c1cd 100644 --- a/domain/src/main/java/tachiyomi/domain/manga/model/Manga.kt +++ b/domain/src/main/java/tachiyomi/domain/manga/model/Manga.kt @@ -72,15 +72,6 @@ data class Manga( return chapterFlags and CHAPTER_SORT_DIR_MASK == CHAPTER_SORT_DESC } - fun shouldUseNetworkMangaInfo(networkManga: Manga): Manga = - if (!favorite) { - // if the manga isn't a favorite, set its display title from source - // if it later becomes a favorite, updated title will go to db - copy(title = networkManga.title) - } else { - this - } - companion object { // Generic filter that does not filter anything const val SHOW_ALL = 0x00000000L From fd742d51e3f2e117435797bff813ec113df15557 Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Thu, 7 Nov 2024 23:29:20 +0700 Subject: [PATCH 4/7] remove changelog update --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 339ca8879..e3e653d9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,6 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co ### Improved - Bangumi search now shows the score and summary of a search result ([@MajorTanya](https://github.com/MajorTanya)) ([#1396](https://github.com/mihonapp/mihon/pull/1396)) - Extension repo URLs are now auto-formatted ([@AntsyLich](https://github.com/AntsyLich), [@MajorTanya](https://github.com/MajorTanya)) -- Always update fresh data from source if manga isn't favorited ([@cuong-tran](https://github.com/cuong-tran)) ([#1435](https://github.com/mihonapp/mihon/pull/1435)) ## [v0.17.0] - 2024-10-26 ### Added From b8997ecbc8d42a149dd74453fef5099de5e4ce21 Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Thu, 21 Nov 2024 01:09:11 +0700 Subject: [PATCH 5/7] inline manga update --- .../manga/interactor/NetworkToLocalManga.kt | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt b/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt index 50c505c9a..509155e2d 100644 --- a/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt +++ b/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt @@ -17,7 +17,13 @@ class NetworkToLocalManga( } !localManga.favorite -> { // if the manga isn't a favorite, update new info from source to db - manga.updateManga(localManga.id) + mangaRepository.update( + manga.toMangaUpdate() + .copy( + id = localManga.id, + thumbnailUrl = manga.thumbnailUrl?.takeIf { it.isNotBlank() }, + ), + ) manga.copy(id = localManga.id) } else -> { @@ -33,14 +39,4 @@ class NetworkToLocalManga( private suspend fun insertManga(manga: Manga): Long? { return mangaRepository.insert(manga) } - - private suspend fun Manga.updateManga(id: Long) { - mangaRepository.update( - toMangaUpdate() - .copy( - id = id, - thumbnailUrl = thumbnailUrl?.takeIf { it.isNotBlank() }, - ), - ) - } } From cb5025dd1834f4cab5c1c90b3b6b2190cf234461 Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Date: Thu, 21 Nov 2024 19:39:45 +0600 Subject: [PATCH 6/7] Update domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt --- .../domain/manga/interactor/NetworkToLocalManga.kt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt b/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt index 509155e2d..e94dbaf82 100644 --- a/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt +++ b/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt @@ -17,13 +17,11 @@ class NetworkToLocalManga( } !localManga.favorite -> { // if the manga isn't a favorite, update new info from source to db - mangaRepository.update( - manga.toMangaUpdate() - .copy( - id = localManga.id, - thumbnailUrl = manga.thumbnailUrl?.takeIf { it.isNotBlank() }, - ), + val mangaUpdate = manga.toMangaUpdate().copy( + id = localManga.id, + thumbnailUrl = manga.thumbnailUrl?.takeUnless { it.isBlank() }, ) + mangaRepository.update(mangaUpdate) manga.copy(id = localManga.id) } else -> { From 1c202920be03b909a1a9b523a563d4146562bbb0 Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Sat, 23 Nov 2024 21:36:40 +0700 Subject: [PATCH 7/7] If the browse manga is initialized update everything otherwise only update the title and thumbnail --- .../manga/interactor/NetworkToLocalManga.kt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt b/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt index e94dbaf82..f5d8f396a 100644 --- a/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt +++ b/domain/src/main/java/tachiyomi/domain/manga/interactor/NetworkToLocalManga.kt @@ -17,10 +17,18 @@ class NetworkToLocalManga( } !localManga.favorite -> { // if the manga isn't a favorite, update new info from source to db - val mangaUpdate = manga.toMangaUpdate().copy( - id = localManga.id, - thumbnailUrl = manga.thumbnailUrl?.takeUnless { it.isBlank() }, - ) + val newThumbnail = manga.thumbnailUrl?.takeUnless { it.isBlank() } + val mangaUpdate = if (manga.initialized) { + manga.toMangaUpdate().copy( + id = localManga.id, + thumbnailUrl = newThumbnail, + ) + } else { + localManga.toMangaUpdate().copy( + title = manga.title, + thumbnailUrl = newThumbnail, + ) + } mangaRepository.update(mangaUpdate) manga.copy(id = localManga.id) }