From 47140c923f14bcec193118719c8d021ad0230674 Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Sun, 3 Nov 2024 01:55:16 +0700 Subject: [PATCH] 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