From 37fd74f141f99b1b44a3c9a563746af4bab163af Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Date: Sat, 1 Oct 2022 21:01:25 +0600 Subject: [PATCH] Reduce some usages of `toDbManga` (#8116) Co-Authored-By: stevenyomi <95685115+stevenyomi@users.noreply.github.com> Co-authored-by: stevenyomi <95685115+stevenyomi@users.noreply.github.com> (cherry picked from commit b04d1e5f50b1a3622e8bfde3ddced7e5a7cd8e2e) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt --- .../eu/kanade/domain/manga/model/Manga.kt | 28 +++++++++++++++++++ .../tachiyomi/ui/browse/feed/FeedPresenter.kt | 19 +++++-------- .../source/browse/BrowseSourcePresenter.kt | 19 +++++-------- .../browse/source/feed/SourceFeedPresenter.kt | 19 +++++-------- .../kanade/tachiyomi/util/MangaExtensions.kt | 2 +- 5 files changed, 50 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt b/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt index c6b372b6d..7dcfc4413 100644 --- a/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt +++ b/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt @@ -135,6 +135,34 @@ data class Manga( it.initialized = initialized } + fun copyFrom(other: SManga): Manga { + // SY --> + val author = other.author ?: ogAuthor + val artist = other.artist ?: ogArtist + val description = other.description ?: ogDescription + val genres = if (other.genre != null) { + other.getGenres() + } else { + ogGenre + } + // SY <-- + val thumbnailUrl = other.thumbnail_url ?: thumbnailUrl + return this.copy( + // SY --> + ogAuthor = author, + ogArtist = artist, + ogDescription = description, + ogGenre = genres, + // SY <-- + thumbnailUrl = thumbnailUrl, + // SY --> + ogStatus = other.status.toLong(), + // SY <-- + updateStrategy = other.update_strategy, + initialized = other.initialized && initialized, + ) + } + companion object { // Generic filter that does not filter anything const val SHOW_ALL = 0x00000000L diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedPresenter.kt index 70af6bbba..a7745db5e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedPresenter.kt @@ -28,18 +28,17 @@ import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.launchNonCancellable import eu.kanade.tachiyomi.util.lang.withIOContext +import eu.kanade.tachiyomi.util.lang.withNonCancellableContext import eu.kanade.tachiyomi.util.system.LocaleHelper import eu.kanade.tachiyomi.util.system.logcat import exh.savedsearches.models.FeedSavedSearch import exh.savedsearches.models.SavedSearch import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.withContext import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import logcat.LogPriority @@ -286,17 +285,13 @@ open class FeedPresenter( */ private suspend fun initializeManga(source: CatalogueSource?, manga: DomainManga) { if (source == null || manga.thumbnailUrl != null || manga.initialized) return - withContext(NonCancellable) { - val db = manga.toDbManga() + withNonCancellableContext { try { - val networkManga = source.getMangaDetails(db.copy()) - db.copyFrom(networkManga) - db.initialized = true - updateManga.await( - db - .toDomainManga() - ?.toMangaUpdate()!!, - ) + val networkManga = source.getMangaDetails(manga.toSManga()) + val updatedManga = manga.copyFrom(networkManga) + .copy(initialized = true) + + updateManga.await(updatedManga.toMangaUpdate()) } catch (e: Exception) { logcat(LogPriority.ERROR, e) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt index 3845d0f68..a3291d193 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt @@ -76,6 +76,7 @@ import eu.kanade.tachiyomi.ui.browse.source.filter.TriStateSectionItem import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.launchNonCancellable import eu.kanade.tachiyomi.util.lang.withIOContext +import eu.kanade.tachiyomi.util.lang.withNonCancellableContext import eu.kanade.tachiyomi.util.lang.withUIContext import eu.kanade.tachiyomi.util.removeCovers import eu.kanade.tachiyomi.util.system.logcat @@ -83,7 +84,6 @@ import exh.metadata.metadata.base.RaisedSearchMetadata import exh.savedsearches.models.SavedSearch import exh.source.getMainSource import exh.util.nullIfBlank -import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.firstOrNull @@ -92,7 +92,6 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.withContext import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json @@ -300,17 +299,13 @@ open class BrowseSourcePresenter( */ private suspend fun initializeManga(manga: DomainManga) { if (manga.thumbnailUrl != null || manga.initialized) return - withContext(NonCancellable) { - val db = manga.toDbManga() + withNonCancellableContext { try { - val networkManga = source!!.getMangaDetails(db.copy()) - db.copyFrom(networkManga) - db.initialized = true - updateManga.await( - db - .toDomainManga() - ?.toMangaUpdate()!!, - ) + val networkManga = source!!.getMangaDetails(manga.toSManga()) + val updatedManga = manga.copyFrom(networkManga) + .copy(initialized = true) + + updateManga.await(updatedManga.toMangaUpdate()) } catch (e: Exception) { logcat(LogPriority.ERROR, e) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedPresenter.kt index 22a2902e8..c3fb51d17 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedPresenter.kt @@ -29,15 +29,14 @@ import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter import eu.kanade.tachiyomi.util.lang.launchNonCancellable import eu.kanade.tachiyomi.util.lang.withIOContext +import eu.kanade.tachiyomi.util.lang.withNonCancellableContext import eu.kanade.tachiyomi.util.system.logcat import exh.savedsearches.models.FeedSavedSearch import exh.savedsearches.models.SavedSearch -import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.withContext import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import logcat.LogPriority @@ -245,17 +244,13 @@ open class SourceFeedPresenter( */ private suspend fun initializeManga(manga: DomainManga) { if (manga.thumbnailUrl != null || manga.initialized) return - withContext(NonCancellable) { - val db = manga.toDbManga() + withNonCancellableContext { try { - val networkManga = source.getMangaDetails(db.copy()) - db.copyFrom(networkManga) - db.initialized = true - updateManga.await( - db - .toDomainManga() - ?.toMangaUpdate()!!, - ) + val networkManga = source.getMangaDetails(manga.toSManga()) + val updatedManga = manga.copyFrom(networkManga) + .copy(initialized = true) + + updateManga.await(updatedManga.toMangaUpdate()) } catch (e: Exception) { logcat(LogPriority.ERROR, e) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt index 4c60ab0ca..c0e5f93e6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt @@ -89,7 +89,7 @@ suspend fun DomainManga.editCover( coverCache: CoverCache = Injekt.get(), ) { if (isLocal()) { - LocalSource.updateCover(context, toDbManga(), stream) + LocalSource.updateCover(context, toSManga(), stream) updateManga.awaitUpdateCoverLastModified(id) } else if (favorite) { coverCache.setCustomCoverToCache(toDbManga(), stream)