diff --git a/app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithSource.kt b/app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithSource.kt index c95e5c27f..de68e985c 100644 --- a/app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithSource.kt +++ b/app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithSource.kt @@ -4,7 +4,6 @@ import eu.kanade.data.chapter.CleanupChapterName import eu.kanade.data.chapter.NoChaptersException import eu.kanade.domain.chapter.model.Chapter import eu.kanade.domain.chapter.model.toChapterUpdate -import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.chapter.repository.ChapterRepository import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.manga.model.Manga @@ -112,7 +111,7 @@ class SyncChaptersWithSource( downloadManager.isChapterDownloaded(dbChapter.name, dbChapter.scanlator, /* SY --> */ manga.ogTitle /* SY <-- */, manga.source) if (shouldRenameChapter) { - downloadManager.renameChapter(source, manga, dbChapter.toDbChapter(), chapter.toDbChapter()) + downloadManager.renameChapter(source, manga, dbChapter, chapter) } var toChangeChapter = dbChapter.copy( name = chapter.name, diff --git a/app/src/main/java/eu/kanade/domain/download/interactor/DeleteDownload.kt b/app/src/main/java/eu/kanade/domain/download/interactor/DeleteDownload.kt index c16a83be4..80af9deef 100644 --- a/app/src/main/java/eu/kanade/domain/download/interactor/DeleteDownload.kt +++ b/app/src/main/java/eu/kanade/domain/download/interactor/DeleteDownload.kt @@ -1,7 +1,6 @@ package eu.kanade.domain.download.interactor import eu.kanade.domain.chapter.model.Chapter -import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.manga.model.Manga import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.source.SourceManager @@ -14,7 +13,7 @@ class DeleteDownload( suspend fun awaitAll(manga: Manga, vararg chapters: Chapter) = withNonCancellableContext { sourceManager.get(manga.source)?.let { source -> - downloadManager.deleteChapters(chapters.map { it.toDbChapter() }, manga, source) + downloadManager.deleteChapters(chapters.toList(), manga, source) } } } diff --git a/app/src/main/java/eu/kanade/domain/manga/interactor/UpdateManga.kt b/app/src/main/java/eu/kanade/domain/manga/interactor/UpdateManga.kt index b1b4f32f4..0e042fdf4 100644 --- a/app/src/main/java/eu/kanade/domain/manga/interactor/UpdateManga.kt +++ b/app/src/main/java/eu/kanade/domain/manga/interactor/UpdateManga.kt @@ -4,7 +4,6 @@ import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.MangaUpdate import eu.kanade.domain.manga.model.hasCustomCover import eu.kanade.domain.manga.model.isLocal -import eu.kanade.domain.manga.model.toDbManga import eu.kanade.domain.manga.repository.MangaRepository import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.download.DownloadManager @@ -56,11 +55,11 @@ class UpdateManga( !manualFetch && localManga.thumbnailUrl == remoteManga.thumbnail_url -> null localManga.isLocal() -> Date().time localManga.hasCustomCover(coverCache) -> { - coverCache.deleteFromCache(localManga.toDbManga(), false) + coverCache.deleteFromCache(localManga, false) null } else -> { - coverCache.deleteFromCache(localManga.toDbManga(), false) + coverCache.deleteFromCache(localManga, false) Date().time } } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt index 4238ae4e4..dfe637ab8 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt @@ -41,7 +41,6 @@ import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.domain.UnsortedPreferences import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.chapter.interactor.GetChapterByMangaId -import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.library.service.LibraryPreferences import eu.kanade.domain.manga.interactor.GetAllManga import eu.kanade.domain.manga.repository.MangaRepository @@ -561,7 +560,7 @@ class SettingsAdvancedScreen : SearchableSettings { } else { val chapterList = Injekt.get().await(manga.id) foldersCleared += downloadManager.cleanupChapters( - chapterList.map { it.toDbChapter() }, + chapterList, manga, source, removeRead, diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/cache/CoverCache.kt b/app/src/main/java/eu/kanade/tachiyomi/data/cache/CoverCache.kt index 3ce2983d6..1195b7531 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/cache/CoverCache.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/cache/CoverCache.kt @@ -1,12 +1,11 @@ package eu.kanade.tachiyomi.data.cache import android.content.Context -import eu.kanade.tachiyomi.data.database.models.Manga +import eu.kanade.domain.manga.model.Manga import eu.kanade.tachiyomi.util.storage.DiskUtil import java.io.File import java.io.IOException import java.io.InputStream -import eu.kanade.domain.manga.model.Manga as DomainManga /** * Class used to create cover cache. @@ -76,7 +75,7 @@ class CoverCache(private val context: Context) { fun deleteFromCache(manga: Manga, deleteCustomCover: Boolean = false): Int { var deleted = 0 - getCoverFile(manga.thumbnail_url)?.let { + getCoverFile(manga.thumbnailUrl)?.let { if (it.exists() && it.delete()) ++deleted } @@ -87,20 +86,6 @@ class CoverCache(private val context: Context) { return deleted } - fun deleteFromCache(manga: DomainManga, deleteCustomCover: Boolean = false): Int { - var amountDeleted = 0 - - getCoverFile(manga.thumbnailUrl)?.let { - if (it.exists() && it.delete()) amountDeleted++ - } - - if (deleteCustomCover && deleteCustomCover(manga.id)) { - amountDeleted++ - } - - return amountDeleted - } - /** * Delete custom cover of the manga from the cache * diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt index e406fe02c..e0065c177 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt @@ -4,9 +4,9 @@ import android.content.Context import androidx.core.net.toUri import com.hippo.unifile.UniFile import eu.kanade.core.util.mapNotNullKeys +import eu.kanade.domain.chapter.model.Chapter import eu.kanade.domain.download.service.DownloadPreferences import eu.kanade.domain.manga.model.Manga -import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceManager diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt index 7754fc26e..778a7cc3a 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt @@ -4,10 +4,11 @@ import android.content.Context import com.hippo.unifile.UniFile import com.jakewharton.rxrelay.BehaviorRelay import eu.kanade.domain.category.interactor.GetCategories +import eu.kanade.domain.chapter.model.Chapter import eu.kanade.domain.download.service.DownloadPreferences import eu.kanade.domain.manga.model.Manga import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.data.database.models.Chapter +import eu.kanade.tachiyomi.data.database.models.toDomainChapter import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.download.model.DownloadQueue import eu.kanade.tachiyomi.source.Source @@ -220,7 +221,7 @@ class DownloadManager( */ fun getChapterDownloadOrNull(chapter: Chapter): Download? { return downloader.queue - .firstOrNull { it.chapter.id == chapter.id && it.chapter.manga_id == chapter.manga_id } + .firstOrNull { it.chapter.id == chapter.id && it.chapter.manga_id == chapter.mangaId } } /** @@ -238,7 +239,7 @@ class DownloadManager( * @param download the download to cancel. */ fun deletePendingDownload(download: Download) { - deleteChapters(listOf(download.chapter), download.manga, download.source, true) + deleteChapters(listOf(download.chapter.toDomainChapter()!!), download.manga, download.source, true) } fun deletePendingDownloads(vararg downloads: Download) { @@ -246,7 +247,7 @@ class DownloadManager( downloadsByManga.map { entry -> val manga = entry.value.first().manga val source = entry.value.first().source - deleteChapters(entry.value.map { it.chapter }, manga, source, true) + deleteChapters(entry.value.map { it.chapter.toDomainChapter()!! }, manga, source, true) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadPendingDeleter.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadPendingDeleter.kt index bb07e90e9..95383ddee 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadPendingDeleter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadPendingDeleter.kt @@ -2,8 +2,8 @@ package eu.kanade.tachiyomi.data.download import android.content.Context import androidx.core.content.edit +import eu.kanade.domain.chapter.model.Chapter import eu.kanade.domain.manga.model.Manga -import eu.kanade.tachiyomi.data.database.models.Chapter import kotlinx.serialization.Serializable import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString @@ -183,11 +183,11 @@ class DownloadPendingDeleter(context: Context) { * Returns a chapter model from a chapter entry. */ private fun ChapterEntry.toModel(): Chapter { - return Chapter.create().also { - it.id = id - it.url = url - it.name = name - it.scanlator = scanlator - } + return Chapter.create().copy( + id = id, + url = url, + name = name, + scanlator = scanlator, + ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt index c66603644..95de7969c 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt @@ -3,10 +3,10 @@ package eu.kanade.tachiyomi.data.download import android.content.Context import androidx.core.net.toUri import com.hippo.unifile.UniFile +import eu.kanade.domain.chapter.model.Chapter import eu.kanade.domain.download.service.DownloadPreferences import eu.kanade.domain.manga.model.Manga import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.system.logcat @@ -16,7 +16,6 @@ import kotlinx.coroutines.flow.onEach import logcat.LogPriority import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get -import eu.kanade.domain.chapter.model.Chapter as DomainChapter /** * This class is used to provide the directories where the downloads should be saved. @@ -171,7 +170,7 @@ class DownloadProvider( ) } - fun isChapterDirNameChanged(oldChapter: DomainChapter, newChapter: DomainChapter): Boolean { + fun isChapterDirNameChanged(oldChapter: Chapter, newChapter: Chapter): Boolean { return oldChapter.name != newChapter.name || oldChapter.scanlator?.takeIf { it.isNotBlank() } != newChapter.scanlator?.takeIf { it.isNotBlank() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt index 16349b9f7..a24259cb5 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt @@ -4,12 +4,13 @@ import android.content.Context import com.hippo.unifile.UniFile import com.jakewharton.rxrelay.BehaviorRelay import com.jakewharton.rxrelay.PublishRelay +import eu.kanade.domain.chapter.model.Chapter +import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.download.service.DownloadPreferences import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.cache.ChapterCache -import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.download.model.DownloadQueue import eu.kanade.tachiyomi.data.library.LibraryUpdateNotifier @@ -262,7 +263,7 @@ class Downloader( // Filter out those already downloaded. .filter { provider.findChapterDir(it.name, it.scanlator, /* SY --> */ manga.ogTitle /* SY <-- */, source) == null } // Add chapters to queue from the start. - .sortedByDescending { it.source_order } + .sortedByDescending { it.sourceOrder } } // Runs in main thread (synchronization needed). @@ -270,7 +271,7 @@ class Downloader( // Filter out those already enqueued. .filter { chapter -> queue.none { it.chapter.id == chapter.id } } // Create a download for each one. - .map { Download(source, manga, it) } + .map { Download(source, manga, it.toDbChapter()) } if (chaptersToQueue.isNotEmpty()) { queue.addAll(chaptersToQueue) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/model/DownloadQueue.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/model/DownloadQueue.kt index 760111e9c..9e83baace 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/model/DownloadQueue.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/model/DownloadQueue.kt @@ -2,8 +2,8 @@ package eu.kanade.tachiyomi.data.download.model import com.jakewharton.rxrelay.PublishRelay import eu.kanade.core.util.asFlow +import eu.kanade.domain.chapter.model.Chapter import eu.kanade.domain.manga.model.Manga -import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.download.DownloadStore import eu.kanade.tachiyomi.source.model.Page import kotlinx.coroutines.flow.Flow diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt index 648e3c451..5a97798ef 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt @@ -14,7 +14,6 @@ import eu.kanade.domain.chapter.interactor.GetChapterByMangaId import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay import eu.kanade.domain.chapter.model.Chapter -import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.download.service.DownloadPreferences import eu.kanade.domain.library.model.GroupLibraryMode import eu.kanade.domain.library.model.LibraryGroup @@ -506,12 +505,11 @@ class LibraryUpdateService( private fun downloadChapters(manga: Manga, chapters: List) { // We don't want to start downloading while the library is updating, because websites // may don't like it and they could ban the user. - val dbChapters = chapters.map { it.toDbChapter() } // SY --> if (manga.source == MERGED_SOURCE_ID) { val downloadingManga = runBlocking { getMergedMangaForDownloading.await(manga.id) } .associateBy { it.id } - dbChapters.groupBy { it.manga_id } + chapters.groupBy { it.mangaId } .forEach { downloadManager.downloadChapters( downloadingManga[it.key] ?: return@forEach, @@ -523,7 +521,7 @@ class LibraryUpdateService( return } // SY <-- - downloadManager.downloadChapters(manga, dbChapters, false) + downloadManager.downloadChapters(manga, chapters, false) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt b/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt index f538d5360..913c71c16 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt @@ -12,7 +12,6 @@ import eu.kanade.domain.chapter.interactor.GetChapter import eu.kanade.domain.chapter.interactor.UpdateChapter import eu.kanade.domain.chapter.model.Chapter import eu.kanade.domain.chapter.model.toChapterUpdate -import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.download.service.DownloadPreferences import eu.kanade.domain.manga.interactor.GetManga import eu.kanade.domain.manga.model.Manga @@ -253,7 +252,7 @@ class NotificationReceiver : BroadcastReceiver() { if (manga != null) { val source = sourceManager.get(manga.source) if (source != null) { - downloadManager.deleteChapters(listOf(it.toDbChapter()), manga, source) + downloadManager.deleteChapters(listOf(it), manga, source) } } } @@ -272,7 +271,7 @@ class NotificationReceiver : BroadcastReceiver() { private fun downloadChapters(chapterUrls: Array, mangaId: Long) { launchIO { val manga = getManga.await(mangaId) ?: return@launchIO - val chapters = chapterUrls.mapNotNull { getChapter.await(it, mangaId)?.toDbChapter() } + val chapters = chapterUrls.mapNotNull { getChapter.await(it, mangaId) } downloadManager.downloadChapters(manga, chapters) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt index 7453540ca..a54a9e8db 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.source.online.all import eu.kanade.domain.category.interactor.GetCategories import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource import eu.kanade.domain.chapter.model.Chapter -import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.download.service.DownloadPreferences import eu.kanade.domain.manga.interactor.GetManga import eu.kanade.domain.manga.interactor.GetMergedReferencesById @@ -122,7 +121,7 @@ class MergedSource : HttpSource() { if (ifDownloadNewChapters && reference.downloadChapters) { downloadManager.downloadChapters( loadedManga, - results.map(Chapter::toDbChapter), + results, ) } results diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListPresenter.kt index aca6c46d6..5f0ae8760 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListPresenter.kt @@ -20,7 +20,6 @@ import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.MangaUpdate import eu.kanade.domain.manga.model.hasCustomCover -import eu.kanade.domain.manga.model.toDbManga import eu.kanade.domain.track.interactor.DeleteTrack import eu.kanade.domain.track.interactor.GetTracks import eu.kanade.domain.track.interactor.InsertTrack @@ -352,7 +351,7 @@ class MigrationListPresenter( } // Update custom cover if (MigrationFlags.hasCustomCover(flags) && prevManga.hasCustomCover(coverCache)) { - coverCache.setCustomCoverToCache(manga.toDbManga(), coverCache.getCustomCoverFile(prevManga.id).inputStream()) + coverCache.setCustomCoverToCache(manga, coverCache.getCustomCoverFile(prevManga.id).inputStream()) } var mangaUpdate = MangaUpdate(manga.id, favorite = true, dateAdded = System.currentTimeMillis()) 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 8433a4c46..837b0cedc 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 @@ -23,6 +23,7 @@ import eu.kanade.domain.UnsortedPreferences import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.category.interactor.GetCategories import eu.kanade.domain.category.interactor.SetMangaCategories +import eu.kanade.domain.category.model.Category import eu.kanade.domain.chapter.interactor.GetChapterByMangaId import eu.kanade.domain.chapter.interactor.SetMangaDefaultChapterFlags import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay @@ -32,6 +33,7 @@ import eu.kanade.domain.manga.interactor.GetFlatMetadataById import eu.kanade.domain.manga.interactor.GetManga import eu.kanade.domain.manga.interactor.NetworkToLocalManga import eu.kanade.domain.manga.interactor.UpdateManga +import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.toDbManga import eu.kanade.domain.manga.model.toDomainManga import eu.kanade.domain.manga.model.toMangaUpdate @@ -99,8 +101,6 @@ import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import xyz.nulldev.ts.api.http.serializer.FilterSerializer import java.util.Date -import eu.kanade.domain.category.model.Category as DomainCategory -import eu.kanade.domain.manga.model.Manga as DomainManga open class BrowseSourcePresenter( private val sourceId: Long, @@ -160,7 +160,7 @@ open class BrowseSourcePresenter( } @Composable - fun getMangaList(): Flow */Pair/* SY <-- */>> { + fun getMangaList(): Flow */Pair/* SY <-- */>> { return remember(currentFilter) { Pager( PagingConfig(pageSize = 25), @@ -181,7 +181,7 @@ open class BrowseSourcePresenter( } @Composable - fun getManga(initialManga: DomainManga): State { + fun getManga(initialManga: Manga): State { return produceState(initialValue = initialManga) { getManga.subscribe(initialManga.url, initialManga.source) .collectLatest { manga -> @@ -196,7 +196,7 @@ open class BrowseSourcePresenter( // SY --> @Composable - open fun getRaisedSearchMetadata(manga: DomainManga, initialMetadata: RaisedSearchMetadata?): State { + open fun getRaisedSearchMetadata(manga: Manga, initialMetadata: RaisedSearchMetadata?): State { return produceState(initialValue = initialMetadata, manga.id) { val source = source?.getMainSource>() ?: return@produceState getFlatMetadataById.subscribe(manga.id) @@ -275,7 +275,7 @@ open class BrowseSourcePresenter( * * @param manga to initialize. */ - private suspend fun initializeManga(manga: DomainManga) { + private suspend fun initializeManga(manga: Manga) { if (manga.thumbnailUrl != null || manga.initialized) return withNonCancellableContext { try { @@ -295,7 +295,7 @@ open class BrowseSourcePresenter( * * @param manga the manga to update. */ - fun changeMangaFavorite(manga: DomainManga) { + fun changeMangaFavorite(manga: Manga) { presenterScope.launch { var new = manga.copy( favorite = !manga.favorite, @@ -317,11 +317,11 @@ open class BrowseSourcePresenter( } } - fun getSourceOrStub(manga: DomainManga): Source { + fun getSourceOrStub(manga: Manga): Source { return sourceManager.getOrStub(manga.source) } - fun addFavorite(manga: DomainManga) { + fun addFavorite(manga: Manga) { presenterScope.launch { val categories = getCategories() val defaultCategoryId = libraryPreferences.defaultCategory().get() @@ -351,7 +351,7 @@ open class BrowseSourcePresenter( } } - private suspend fun autoAddTrack(manga: DomainManga) { + private suspend fun autoAddTrack(manga: Manga) { loggedServices .filterIsInstance() .filter { it.accept(source!!) } @@ -382,22 +382,22 @@ open class BrowseSourcePresenter( * * @return List of categories, not including the default category */ - suspend fun getCategories(): List { + suspend fun getCategories(): List { return getCategories.subscribe() .firstOrNull() ?.filterNot { it.isSystemCategory } ?: emptyList() } - suspend fun getDuplicateLibraryManga(manga: DomainManga): DomainManga? { + suspend fun getDuplicateLibraryManga(manga: Manga): Manga? { return getDuplicateLibraryManga.await(manga.title, manga.source) } - fun moveMangaToCategories(manga: DomainManga, vararg categories: DomainCategory) { + fun moveMangaToCategories(manga: Manga, vararg categories: Category) { moveMangaToCategories(manga, categories.filter { it.id != 0L }.map { it.id }) } - fun moveMangaToCategories(manga: DomainManga, categoryIds: List) { + fun moveMangaToCategories(manga: Manga, categoryIds: List) { presenterScope.launchIO { setMangaCategories.await( mangaId = manga.id, @@ -423,11 +423,11 @@ open class BrowseSourcePresenter( } sealed class Dialog { - data class RemoveManga(val manga: DomainManga) : Dialog() - data class AddDuplicateManga(val manga: DomainManga, val duplicate: DomainManga) : Dialog() + data class RemoveManga(val manga: Manga) : Dialog() + data class AddDuplicateManga(val manga: Manga, val duplicate: Manga) : Dialog() data class ChangeMangaCategory( - val manga: DomainManga, - val initialSelection: List>, + val manga: Manga, + val initialSelection: List>, ) : Dialog() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt index 9d336bc40..f47427c79 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt @@ -18,7 +18,6 @@ import eu.kanade.domain.library.model.LibraryGroup import eu.kanade.domain.library.model.LibraryManga import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.isLocal -import eu.kanade.domain.manga.model.toDbManga import eu.kanade.presentation.components.ChangeCategoryDialog import eu.kanade.presentation.components.DeleteLibraryMangaDialog import eu.kanade.presentation.library.LibraryScreen @@ -181,7 +180,7 @@ class LibraryController( containsLocalManga = dialog.manga.any(Manga::isLocal), onDismissRequest = onDismissRequest, onConfirm = { deleteManga, deleteChapter -> - presenter.removeMangas(dialog.manga.map { it.toDbManga() }, deleteManga, deleteChapter) + presenter.removeMangas(dialog.manga, deleteManga, deleteChapter) presenter.clearSelection() }, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt index 245223920..3613b01ee 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -24,7 +24,6 @@ import eu.kanade.domain.chapter.interactor.GetChapterByMangaId import eu.kanade.domain.chapter.interactor.GetMergedChapterByMangaId import eu.kanade.domain.chapter.interactor.SetReadStatus import eu.kanade.domain.chapter.model.Chapter -import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.history.interactor.GetNextChapters import eu.kanade.domain.library.model.LibraryDisplayMode import eu.kanade.domain.library.model.LibraryGroup @@ -52,7 +51,6 @@ import eu.kanade.presentation.library.LibraryStateImpl import eu.kanade.presentation.library.components.LibraryToolbarTitle import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.cache.CoverCache -import eu.kanade.tachiyomi.data.database.models.toDomainManga import eu.kanade.tachiyomi.data.download.DownloadCache import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.library.CustomMangaManager @@ -105,7 +103,6 @@ import uy.kohesive.injekt.api.get import java.text.Collator import java.util.Collections import java.util.Locale -import eu.kanade.tachiyomi.data.database.models.Manga as DbManga /** * Class containing library information. @@ -626,7 +623,7 @@ class LibraryPresenter( ) } - downloadManager.downloadChapters(mergedManga, downloadChapters.map(Chapter::toDbChapter)) + downloadManager.downloadChapters(mergedManga, downloadChapters) } return@forEach @@ -648,7 +645,7 @@ class LibraryPresenter( } .let { if (amount != null) it.take(amount) else it } - downloadManager.downloadChapters(manga, chapters.map { it.toDbChapter() }) + downloadManager.downloadChapters(manga, chapters) } } } @@ -712,7 +709,7 @@ class LibraryPresenter( * @param deleteFromLibrary whether to delete manga from library. * @param deleteChapters whether to delete downloaded chapters. */ - fun removeMangas(mangaList: List, deleteFromLibrary: Boolean, deleteChapters: Boolean) { + fun removeMangas(mangaList: List, deleteFromLibrary: Boolean, deleteChapters: Boolean) { presenterScope.launchNonCancellable { val mangaToDelete = mangaList.distinctBy { it.id } @@ -721,7 +718,7 @@ class LibraryPresenter( it.removeCovers(coverCache) MangaUpdate( favorite = false, - id = it.id!!, + id = it.id, ) } updateManga.awaitAll(toDelete) @@ -732,14 +729,14 @@ class LibraryPresenter( val source = sourceManager.get(manga.source) as? HttpSource if (source != null) { if (source is MergedSource) { - val mergedMangas = getMergedMangaById.await(manga.id!!) + val mergedMangas = getMergedMangaById.await(manga.id) val sources = mergedMangas.distinctBy { it.source }.map { sourceManager.getOrStub(it.source) } mergedMangas.forEach merge@{ mergedManga -> val mergedSource = sources.firstOrNull { mergedManga.source == it.id } as? HttpSource ?: return@merge downloadManager.deleteManga(mergedManga, mergedSource) } } else { - downloadManager.deleteManga(manga.toDomainManga()!!, source) + downloadManager.deleteManga(manga, source) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt index 64304aacd..f7106a4f1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt @@ -20,7 +20,6 @@ import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource import eu.kanade.domain.chapter.interactor.UpdateChapter import eu.kanade.domain.chapter.model.Chapter import eu.kanade.domain.chapter.model.ChapterUpdate -import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.download.service.DownloadPreferences import eu.kanade.domain.library.service.LibraryPreferences import eu.kanade.domain.manga.interactor.DeleteByMergeId @@ -711,7 +710,7 @@ class MangaInfoScreenModel( // Remove from library if (updateManga.awaitUpdateFavorite(manga.id, false)) { // Remove covers and update last modified in db - if (manga.toDbManga().removeCovers() > 0) { + if (manga.removeCovers() != manga) { updateManga.awaitUpdateCoverLastModified(manga.id) } withUIContext { onRemoved() } @@ -1169,16 +1168,16 @@ class MangaInfoScreenModel( * Downloads the given list of chapters with the manager. * @param chapters the list of chapters to download. */ - fun downloadChapters(chapters: List) { + private fun downloadChapters(chapters: List) { val state = successState ?: return if (state.source is MergedSource) { chapters.groupBy { it.mangaId }.forEach { map -> val manga = state.mergedData?.manga?.get(map.key) ?: return@forEach - downloadManager.downloadChapters(manga, map.value.map { it.toMergedDownloadedChapter().toDbChapter() }) + downloadManager.downloadChapters(manga, map.value.map { it.toMergedDownloadedChapter() }) } } else { /* SY <-- */ val manga = state.manga - downloadManager.downloadChapters(manga, chapters.map { it.toDbChapter() }) + downloadManager.downloadChapters(manga, chapters) } toggleAllSelection(false) } @@ -1207,7 +1206,7 @@ class MangaInfoScreenModel( try { successState?.let { state -> downloadManager.deleteChapters( - chapters.map { it.toDbChapter() }, + chapters, state.manga, state.source, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt index b8d954a60..a7db8d9a6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt @@ -589,7 +589,7 @@ class ReaderPresenter( .take(amount) downloadManager.downloadChapters( manga.toDomainManga()!!, - chaptersToDownload.map { it.toDbChapter() }, + chaptersToDownload, ) } } @@ -599,7 +599,7 @@ class ReaderPresenter( * if setting is enabled and [currentChapter] is queued for download */ private fun deleteChapterFromDownloadQueue(currentChapter: ReaderChapter): Download? { - return downloadManager.getChapterDownloadOrNull(currentChapter.chapter)?.apply { + return downloadManager.getChapterDownloadOrNull(currentChapter.chapter.toDomainChapter()!!)?.apply { downloadManager.deletePendingDownload(this) } } @@ -1110,7 +1110,7 @@ class ReaderPresenter( // SY <-- presenterScope.launchNonCancellable { - downloadManager.enqueueDeleteChapters(listOf(chapter.chapter), manga.toDomainManga()!!) + downloadManager.enqueueDeleteChapters(listOf(chapter.chapter.toDomainChapter()!!), manga.toDomainManga()!!) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DownloadPageLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DownloadPageLoader.kt index 123124fe3..86891e73f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DownloadPageLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DownloadPageLoader.kt @@ -4,6 +4,7 @@ import android.app.Application import android.net.Uri import com.hippo.unifile.UniFile import eu.kanade.domain.manga.model.Manga +import eu.kanade.tachiyomi.data.database.models.toDomainChapter import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadProvider import eu.kanade.tachiyomi.source.Source @@ -47,7 +48,7 @@ class DownloadPageLoader( } private fun getPagesFromDirectory(): Observable> { - return downloadManager.buildPageList(source, manga, chapter.chapter) + return downloadManager.buildPageList(source, manga, chapter.chapter.toDomainChapter()!!) .map { pages -> pages.map { page -> ReaderPage(page.index, page.url, page.imageUrl) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesPresenter.kt index 5a1911c08..5c0a14fc3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesPresenter.kt @@ -9,7 +9,6 @@ import eu.kanade.domain.chapter.interactor.GetChapter import eu.kanade.domain.chapter.interactor.SetReadStatus import eu.kanade.domain.chapter.interactor.UpdateChapter import eu.kanade.domain.chapter.model.ChapterUpdate -import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.library.service.LibraryPreferences import eu.kanade.domain.manga.interactor.GetManga import eu.kanade.domain.ui.UiPreferences @@ -244,7 +243,7 @@ class UpdatesPresenter( val manga = getManga.await(mangaId) ?: continue // Don't download if source isn't available sourceManager.get(manga.source) ?: continue - val chapters = updates.mapNotNull { getChapter.await(it.update.chapterId)?.toDbChapter() } + val chapters = updates.mapNotNull { getChapter.await(it.update.chapterId) } downloadManager.downloadChapters(manga, chapters) } } @@ -263,7 +262,7 @@ class UpdatesPresenter( .forEach { (mangaId, updates) -> val manga = getManga.await(mangaId) ?: return@forEach val source = sourceManager.get(manga.source) ?: return@forEach - val chapters = updates.mapNotNull { getChapter.await(it.update.chapterId)?.toDbChapter() } + val chapters = updates.mapNotNull { getChapter.await(it.update.chapterId) } downloadManager.deleteChapters(chapters, manga, source) } } 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 6c196e72a..f8b0b6e9a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt @@ -3,24 +3,21 @@ package eu.kanade.tachiyomi.util import android.content.Context import eu.kanade.domain.download.service.DownloadPreferences import eu.kanade.domain.manga.interactor.UpdateManga +import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.hasCustomCover import eu.kanade.domain.manga.model.isLocal -import eu.kanade.domain.manga.model.toDbManga import eu.kanade.tachiyomi.data.cache.CoverCache -import eu.kanade.tachiyomi.data.database.models.Manga -import eu.kanade.tachiyomi.data.database.models.toDomainManga import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.model.SManga import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.InputStream import java.util.Date -import eu.kanade.domain.manga.model.Manga as DomainManga /** * Call before updating [Manga.thumbnail_url] to ensure old cover can be cleared from cache */ -fun DomainManga.prepUpdateCover(coverCache: CoverCache, remoteManga: SManga, refreshSameUrl: Boolean): DomainManga { +fun Manga.prepUpdateCover(coverCache: CoverCache, remoteManga: SManga, refreshSameUrl: Boolean): Manga { // Never refresh covers if the new url is null, as the current url has possibly become invalid val newUrl = remoteManga.thumbnail_url ?: return this @@ -44,20 +41,16 @@ fun DomainManga.prepUpdateCover(coverCache: CoverCache, remoteManga: SManga, ref } } -fun Manga.removeCovers(coverCache: CoverCache = Injekt.get()): Int { - if (toDomainManga()!!.isLocal()) return 0 - - cover_last_modified = Date().time - return coverCache.deleteFromCache(this, true) -} - -fun DomainManga.removeCovers(coverCache: CoverCache = Injekt.get()): DomainManga { +fun Manga.removeCovers(coverCache: CoverCache = Injekt.get()): Manga { if (isLocal()) return this - coverCache.deleteFromCache(this, true) - return copy(coverLastModified = Date().time) + return if (coverCache.deleteFromCache(this, true) > 0) { + return copy(coverLastModified = Date().time) + } else { + this + } } -fun DomainManga.shouldDownloadNewChapters(dbCategories: List, preferences: DownloadPreferences): Boolean { +fun Manga.shouldDownloadNewChapters(dbCategories: List, preferences: DownloadPreferences): Boolean { if (!favorite) return false val categories = dbCategories.ifEmpty { listOf(0L) } @@ -82,7 +75,7 @@ fun DomainManga.shouldDownloadNewChapters(dbCategories: List, preferences: return categories.any { it in includedCategories } } -suspend fun DomainManga.editCover( +suspend fun Manga.editCover( context: Context, stream: InputStream, updateManga: UpdateManga = Injekt.get(), @@ -92,7 +85,7 @@ suspend fun DomainManga.editCover( LocalSource.updateCover(context, toSManga(), stream) updateManga.awaitUpdateCoverLastModified(id) } else if (favorite) { - coverCache.setCustomCoverToCache(toDbManga(), stream) + coverCache.setCustomCoverToCache(this, stream) updateManga.awaitUpdateCoverLastModified(id) } }