More domain model usage

(cherry picked from commit a3378e6080418e6ba9bab4d027d7f06373556217)

# Conflicts:
#	app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithSource.kt
#	app/src/main/java/eu/kanade/domain/manga/model/Manga.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadPendingDeleter.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt
This commit is contained in:
arkon 2022-07-03 16:51:11 -04:00 committed by Jobobby04
parent f1a31e4560
commit 485e6719c3
20 changed files with 114 additions and 95 deletions

View File

@ -7,7 +7,6 @@ import eu.kanade.domain.chapter.model.toDbChapter
import eu.kanade.domain.chapter.repository.ChapterRepository import eu.kanade.domain.chapter.repository.ChapterRepository
import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.manga.interactor.UpdateManga
import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.toDbManga
import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.LocalSource
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
@ -98,7 +97,7 @@ class SyncChaptersWithSource(
} else { } else {
if (shouldUpdateDbChapter.await(dbChapter, chapter)) { if (shouldUpdateDbChapter.await(dbChapter, chapter)) {
if (dbChapter.name != chapter.name && downloadManager.isChapterDownloaded(dbChapter.name, dbChapter.scanlator, /* SY --> */ manga.ogTitle /* SY <-- */, manga.source)) { if (dbChapter.name != chapter.name && downloadManager.isChapterDownloaded(dbChapter.name, dbChapter.scanlator, /* SY --> */ manga.ogTitle /* SY <-- */, manga.source)) {
downloadManager.renameChapter(source, manga.toDbManga(), dbChapter.toDbChapter(), chapter.toDbChapter()) downloadManager.renameChapter(source, manga, dbChapter.toDbChapter(), chapter.toDbChapter())
} }
var toChangeChapter = dbChapter.copy( var toChangeChapter = dbChapter.copy(
name = chapter.name, name = chapter.name,

View File

@ -42,8 +42,7 @@ data class Chapter(
} }
companion object { companion object {
fun create(): Chapter { fun create() = Chapter(
return Chapter(
id = -1, id = -1,
mangaId = -1, mangaId = -1,
read = false, read = false,
@ -58,7 +57,6 @@ data class Chapter(
scanlator = null, scanlator = null,
) )
} }
}
} }
// TODO: Remove when all deps are migrated // TODO: Remove when all deps are migrated

View File

@ -64,20 +64,6 @@ data class Manga(
get() = customMangaInfo?.statusLong ?: ogStatus get() = customMangaInfo?.statusLong ?: ogStatus
// SY <-- // SY <--
fun toSManga(): SManga {
return SManga.create().also {
it.url = url
it.title = title
it.artist = artist
it.author = author
it.description = description
it.genre = genre.orEmpty().joinToString()
it.status = status.toInt()
it.thumbnail_url = thumbnailUrl
it.initialized = initialized
}
}
val sorting: Long val sorting: Long
get() = chapterFlags and CHAPTER_SORTING_MASK get() = chapterFlags and CHAPTER_SORTING_MASK
@ -131,6 +117,18 @@ data class Manga(
return chapterFlags and CHAPTER_SORT_DIR_MASK == CHAPTER_SORT_DESC return chapterFlags and CHAPTER_SORT_DIR_MASK == CHAPTER_SORT_DESC
} }
fun toSManga(): SManga = SManga.create().also {
it.url = url
it.title = title
it.artist = artist
it.author = author
it.description = description
it.genre = genre.orEmpty().joinToString()
it.status = status.toInt()
it.thumbnail_url = thumbnailUrl
it.initialized = initialized
}
companion object { companion object {
// Generic filter that does not filter anything // Generic filter that does not filter anything
const val SHOW_ALL = 0x00000000L const val SHOW_ALL = 0x00000000L
@ -160,6 +158,33 @@ data class Manga(
const val CHAPTER_DISPLAY_NUMBER = 0x00100000L const val CHAPTER_DISPLAY_NUMBER = 0x00100000L
const val CHAPTER_DISPLAY_MASK = 0x00100000L const val CHAPTER_DISPLAY_MASK = 0x00100000L
fun create() = Manga(
id = -1L,
url = "",
// Sy -->
ogTitle = "",
// SY <--
source = -1L,
favorite = false,
lastUpdate = -1L,
dateAdded = -1L,
viewerFlags = -1L,
chapterFlags = -1L,
coverLastModified = -1L,
// SY -->
ogArtist = null,
ogAuthor = null,
ogDescription = null,
ogGenre = null,
ogStatus = 0L,
// SY <--
thumbnailUrl = null,
initialized = false,
// SY -->
filteredScanlators = null,
// SY <--
)
// SY --> // SY -->
private val customMangaManager: CustomMangaManager by injectLazy() private val customMangaManager: CustomMangaManager by injectLazy()
// SY <-- // SY <--

View File

@ -3,8 +3,8 @@ package eu.kanade.tachiyomi.data.download
import android.content.Context import android.content.Context
import androidx.core.net.toUri import androidx.core.net.toUri
import com.hippo.unifile.UniFile import com.hippo.unifile.UniFile
import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
@ -105,7 +105,7 @@ class DownloadCache(
val sourceDir = rootDir.files[manga.source] val sourceDir = rootDir.files[manga.source]
if (sourceDir != null) { if (sourceDir != null) {
val mangaDir = sourceDir.files[provider.getMangaDirName(/* SY --> */ manga.originalTitle /* SY <-- */)] val mangaDir = sourceDir.files[provider.getMangaDirName(/* SY --> */ manga.ogTitle /* SY <-- */)]
if (mangaDir != null) { if (mangaDir != null) {
return mangaDir.files return mangaDir.files
.filter { !it.endsWith(Downloader.TMP_DIR_SUFFIX) } .filter { !it.endsWith(Downloader.TMP_DIR_SUFFIX) }
@ -184,7 +184,7 @@ class DownloadCache(
} }
// Retrieve the cached manga directory or cache a new one // Retrieve the cached manga directory or cache a new one
val mangaDirName = provider.getMangaDirName(/* SY --> */ manga.originalTitle /* SY <-- */) val mangaDirName = provider.getMangaDirName(/* SY --> */ manga.ogTitle /* SY <-- */)
var mangaDir = sourceDir.files[mangaDirName] var mangaDir = sourceDir.files[mangaDirName]
if (mangaDir == null) { if (mangaDir == null) {
mangaDir = MangaDirectory(mangaUniFile) mangaDir = MangaDirectory(mangaUniFile)
@ -204,7 +204,7 @@ class DownloadCache(
@Synchronized @Synchronized
fun removeChapter(chapter: Chapter, manga: Manga) { fun removeChapter(chapter: Chapter, manga: Manga) {
val sourceDir = rootDir.files[manga.source] ?: return val sourceDir = rootDir.files[manga.source] ?: return
val mangaDir = sourceDir.files[provider.getMangaDirName(/* SY --> */ manga.originalTitle /* SY <-- */)] ?: return val mangaDir = sourceDir.files[provider.getMangaDirName(/* SY --> */ manga.ogTitle /* SY <-- */)] ?: return
provider.getValidChapterDirNames(chapter.name, chapter.scanlator).forEach { provider.getValidChapterDirNames(chapter.name, chapter.scanlator).forEach {
if (it in mangaDir.files) { if (it in mangaDir.files) {
mangaDir.files -= it mangaDir.files -= it
@ -215,7 +215,7 @@ class DownloadCache(
// SY --> // SY -->
fun removeFolders(folders: List<String>, manga: Manga) { fun removeFolders(folders: List<String>, manga: Manga) {
val sourceDir = rootDir.files[manga.source] ?: return val sourceDir = rootDir.files[manga.source] ?: return
val mangaDir = sourceDir.files[provider.getMangaDirName(manga.originalTitle)] ?: return val mangaDir = sourceDir.files[provider.getMangaDirName(manga.ogTitle)] ?: return
folders.forEach { chapter -> folders.forEach { chapter ->
if (chapter in mangaDir.files) { if (chapter in mangaDir.files) {
mangaDir.files -= chapter mangaDir.files -= chapter
@ -234,7 +234,7 @@ class DownloadCache(
@Synchronized @Synchronized
fun removeChapters(chapters: List<Chapter>, manga: Manga) { fun removeChapters(chapters: List<Chapter>, manga: Manga) {
val sourceDir = rootDir.files[manga.source] ?: return val sourceDir = rootDir.files[manga.source] ?: return
val mangaDir = sourceDir.files[provider.getMangaDirName(/* SY --> */ manga.originalTitle /* SY <-- */)] ?: return val mangaDir = sourceDir.files[provider.getMangaDirName(/* SY --> */ manga.ogTitle /* SY <-- */)] ?: return
chapters.forEach { chapter -> chapters.forEach { chapter ->
provider.getValidChapterDirNames(chapter.name, chapter.scanlator).forEach { provider.getValidChapterDirNames(chapter.name, chapter.scanlator).forEach {
if (it in mangaDir.files) { if (it in mangaDir.files) {
@ -252,7 +252,7 @@ class DownloadCache(
@Synchronized @Synchronized
fun removeManga(manga: Manga) { fun removeManga(manga: Manga) {
val sourceDir = rootDir.files[manga.source] ?: return val sourceDir = rootDir.files[manga.source] ?: return
val mangaDirName = provider.getMangaDirName(/* SY --> */ manga.originalTitle /* SY <-- */) val mangaDirName = provider.getMangaDirName(/* SY --> */ manga.ogTitle /* SY <-- */)
if (mangaDirName in sourceDir.files) { if (mangaDirName in sourceDir.files) {
sourceDir.files -= mangaDirName sourceDir.files -= mangaDirName
} }

View File

@ -4,9 +4,9 @@ import android.content.Context
import com.hippo.unifile.UniFile import com.hippo.unifile.UniFile
import com.jakewharton.rxrelay.BehaviorRelay import com.jakewharton.rxrelay.BehaviorRelay
import eu.kanade.domain.category.interactor.GetCategories import eu.kanade.domain.category.interactor.GetCategories
import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.download.model.Download
import eu.kanade.tachiyomi.data.download.model.DownloadQueue import eu.kanade.tachiyomi.data.download.model.DownloadQueue
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
@ -168,7 +168,7 @@ class DownloadManager(
* @return an observable containing the list of pages from the chapter. * @return an observable containing the list of pages from the chapter.
*/ */
fun buildPageList(source: Source, manga: Manga, chapter: Chapter): Observable<List<Page>> { fun buildPageList(source: Source, manga: Manga, chapter: Chapter): Observable<List<Page>> {
return buildPageList(provider.findChapterDir(chapter.name, chapter.scanlator, /* SY --> */ manga.originalTitle /* SY <-- */, source)) return buildPageList(provider.findChapterDir(chapter.name, chapter.scanlator, /* SY --> */ manga.ogTitle /* SY <-- */, source))
} }
/** /**
@ -315,7 +315,7 @@ class DownloadManager(
var cleaned = 0 var cleaned = 0
if (removeNonFavorite && !manga.favorite) { if (removeNonFavorite && !manga.favorite) {
val mangaFolder = provider.getMangaDir(manga.originalTitle, source) val mangaFolder = provider.getMangaDir(/* SY --> */ manga.ogTitle /* SY <-- */, source)
cleaned += 1 + mangaFolder.listFiles().orEmpty().size cleaned += 1 + mangaFolder.listFiles().orEmpty().size
mangaFolder.delete() mangaFolder.delete()
cache.removeManga(manga) cache.removeManga(manga)
@ -336,12 +336,12 @@ class DownloadManager(
} }
if (cache.getDownloadCount(manga) == 0) { if (cache.getDownloadCount(manga) == 0) {
val mangaFolder = provider.getMangaDir(manga.originalTitle, source) val mangaFolder = provider.getMangaDir(/* SY --> */ manga.ogTitle /* SY <-- */, source)
if (!mangaFolder.listFiles().isNullOrEmpty()) { if (!mangaFolder.listFiles().isNullOrEmpty()) {
mangaFolder.delete() mangaFolder.delete()
cache.removeManga(manga) cache.removeManga(manga)
} else { } else {
xLogE("Cache and download folder doesn't match for " + manga.originalTitle) xLogE("Cache and download folder doesn't match for " + /* SY --> */ manga.ogTitle /* SY <-- */)
} }
} }
return cleaned return cleaned
@ -357,7 +357,7 @@ class DownloadManager(
fun deleteManga(manga: Manga, source: Source) { fun deleteManga(manga: Manga, source: Source) {
launchIO { launchIO {
downloader.queue.remove(manga) downloader.queue.remove(manga)
provider.findMangaDir(/* SY --> */ manga.originalTitle /* SY <-- */, source)?.delete() provider.findMangaDir(/* SY --> */ manga.ogTitle /* SY <-- */, source)?.delete()
cache.removeManga(manga) cache.removeManga(manga)
} }
} }
@ -393,7 +393,7 @@ class DownloadManager(
*/ */
fun renameChapter(source: Source, manga: Manga, oldChapter: Chapter, newChapter: Chapter) { fun renameChapter(source: Source, manga: Manga, oldChapter: Chapter, newChapter: Chapter) {
val oldNames = provider.getValidChapterDirNames(oldChapter.name, oldChapter.scanlator) val oldNames = provider.getValidChapterDirNames(oldChapter.name, oldChapter.scanlator)
val mangaDir = provider.getMangaDir(/* SY --> */ manga.originalTitle /* SY <-- */, source) val mangaDir = provider.getMangaDir(/* SY --> */ manga.ogTitle /* SY <-- */, source)
// Assume there's only 1 version of the chapter name formats present // Assume there's only 1 version of the chapter name formats present
val oldDownload = oldNames.asSequence() val oldDownload = oldNames.asSequence()

View File

@ -2,8 +2,8 @@ package eu.kanade.tachiyomi.data.download
import android.content.Context import android.content.Context
import androidx.core.content.edit import androidx.core.content.edit
import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString import kotlinx.serialization.encodeToString
@ -155,7 +155,7 @@ class DownloadPendingDeleter(context: Context) {
* Returns a manga entry from a manga model. * Returns a manga entry from a manga model.
*/ */
private fun Manga.toEntry(): MangaEntry { private fun Manga.toEntry(): MangaEntry {
return MangaEntry(id!!, url, originalTitle, source) return MangaEntry(id!!, url, /* SY --> */ ogTitle /* SY <-- */, source)
} }
/** /**
@ -169,9 +169,14 @@ class DownloadPendingDeleter(context: Context) {
* Returns a manga model from a manga entry. * Returns a manga model from a manga entry.
*/ */
private fun MangaEntry.toModel(): Manga { private fun MangaEntry.toModel(): Manga {
return Manga.create(url, title, source).also { return Manga.create().copy(
it.id = id url = url,
} // SY -->
ogTitle = title,
// SY <--
source = source,
id = id,
)
} }
/** /**

View File

@ -3,9 +3,9 @@ package eu.kanade.tachiyomi.data.download
import android.content.Context import android.content.Context
import androidx.core.net.toUri import androidx.core.net.toUri
import com.hippo.unifile.UniFile import com.hippo.unifile.UniFile
import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.storage.DiskUtil
@ -103,7 +103,7 @@ class DownloadProvider(private val context: Context) {
* @param source the source of the chapter. * @param source the source of the chapter.
*/ */
fun findChapterDirs(chapters: List<Chapter>, manga: Manga, source: Source): List<UniFile> { fun findChapterDirs(chapters: List<Chapter>, manga: Manga, source: Source): List<UniFile> {
val mangaDir = findMangaDir(/* SY --> */ manga.originalTitle /* SY <-- */, source) ?: return emptyList() val mangaDir = findMangaDir(/* SY --> */ manga.ogTitle /* SY <-- */, source) ?: return emptyList()
return chapters.mapNotNull { chapter -> return chapters.mapNotNull { chapter ->
getValidChapterDirNames(chapter.name, chapter.scanlator).asSequence() getValidChapterDirNames(chapter.name, chapter.scanlator).asSequence()
.mapNotNull { mangaDir.findFile(it) } .mapNotNull { mangaDir.findFile(it) }
@ -124,7 +124,7 @@ class DownloadProvider(private val context: Context) {
manga: Manga, manga: Manga,
source: Source, source: Source,
): List<UniFile> { ): List<UniFile> {
val mangaDir = findMangaDir(manga.originalTitle, source) ?: return emptyList() val mangaDir = findMangaDir(/* SY --> */ manga.ogTitle /* SY <-- */, source) ?: return emptyList()
return mangaDir.listFiles().orEmpty().asList().filter { return mangaDir.listFiles().orEmpty().asList().filter {
chapters.find { chp -> chapters.find { chp ->
getValidChapterDirNames(chp.name, chp.scanlator).any { dir -> getValidChapterDirNames(chp.name, chp.scanlator).any { dir ->

View File

@ -5,8 +5,7 @@ import androidx.core.content.edit
import eu.kanade.domain.chapter.interactor.GetChapter import eu.kanade.domain.chapter.interactor.GetChapter
import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.chapter.model.toDbChapter
import eu.kanade.domain.manga.interactor.GetManga import eu.kanade.domain.manga.interactor.GetManga
import eu.kanade.domain.manga.model.toDbManga import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.download.model.Download
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.online.HttpSource
@ -96,7 +95,7 @@ class DownloadStore(
val cachedManga = mutableMapOf<Long, Manga?>() val cachedManga = mutableMapOf<Long, Manga?>()
for ((mangaId, chapterId) in objs) { for ((mangaId, chapterId) in objs) {
val manga = cachedManga.getOrPut(mangaId) { val manga = cachedManga.getOrPut(mangaId) {
runBlocking { getManga.await(mangaId)?.toDbManga() } runBlocking { getManga.await(mangaId) }
} ?: continue } ?: continue
val source = sourceManager.get(manga.source) as? HttpSource ?: continue val source = sourceManager.get(manga.source) as? HttpSource ?: continue
val chapter = runBlocking { getChapter.await(chapterId) }?.toDbChapter() ?: continue val chapter = runBlocking { getChapter.await(chapterId) }?.toDbChapter() ?: continue

View File

@ -5,10 +5,10 @@ import android.webkit.MimeTypeMap
import com.hippo.unifile.UniFile import com.hippo.unifile.UniFile
import com.jakewharton.rxrelay.BehaviorRelay import com.jakewharton.rxrelay.BehaviorRelay
import com.jakewharton.rxrelay.PublishRelay import com.jakewharton.rxrelay.PublishRelay
import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.ChapterCache import eu.kanade.tachiyomi.data.cache.ChapterCache
import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.download.model.Download
import eu.kanade.tachiyomi.data.download.model.DownloadQueue import eu.kanade.tachiyomi.data.download.model.DownloadQueue
import eu.kanade.tachiyomi.data.library.LibraryUpdateNotifier import eu.kanade.tachiyomi.data.library.LibraryUpdateNotifier
@ -254,7 +254,7 @@ class Downloader(
val chaptersWithoutDir = async { val chaptersWithoutDir = async {
chapters chapters
// Filter out those already downloaded. // Filter out those already downloaded.
.filter { provider.findChapterDir(it.name, it.scanlator, /* SY --> */ manga.originalTitle /* SY <-- */, source) == null } .filter { provider.findChapterDir(it.name, it.scanlator, /* SY --> */ manga.ogTitle /* SY <-- */, source) == null }
// Add chapters to queue from the start. // Add chapters to queue from the start.
.sortedByDescending { it.source_order } .sortedByDescending { it.source_order }
} }
@ -305,7 +305,7 @@ class Downloader(
* @param download the chapter to be downloaded. * @param download the chapter to be downloaded.
*/ */
private fun downloadChapter(download: Download): Observable<Download> = Observable.defer { private fun downloadChapter(download: Download): Observable<Download> = Observable.defer {
val mangaDir = provider.getMangaDir(/* SY --> */ download.manga.originalTitle /* SY <-- */, download.source) val mangaDir = provider.getMangaDir(/* SY --> */ download.manga.ogTitle /* SY <-- */, download.source)
val availSpace = DiskUtil.getAvailableStorageSpace(mangaDir) val availSpace = DiskUtil.getAvailableStorageSpace(mangaDir)
if (availSpace != -1L && availSpace < MIN_DISK_SPACE) { if (availSpace != -1L && availSpace < MIN_DISK_SPACE) {

View File

@ -3,9 +3,8 @@ package eu.kanade.tachiyomi.data.download.model
import eu.kanade.domain.chapter.interactor.GetChapter import eu.kanade.domain.chapter.interactor.GetChapter
import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.chapter.model.toDbChapter
import eu.kanade.domain.manga.interactor.GetManga import eu.kanade.domain.manga.interactor.GetManga
import eu.kanade.domain.manga.model.toDbManga import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.online.HttpSource
@ -76,7 +75,7 @@ data class Download(
val manga = getManga.await(chapter.mangaId) ?: return null val manga = getManga.await(chapter.mangaId) ?: return null
val source = sourceManager.get(manga.source) as? HttpSource ?: return null val source = sourceManager.get(manga.source) as? HttpSource ?: return null
return Download(source, manga.toDbManga(), chapter.toDbChapter()) return Download(source, manga, chapter.toDbChapter())
} }
} }
} }

View File

@ -1,8 +1,8 @@
package eu.kanade.tachiyomi.data.download.model package eu.kanade.tachiyomi.data.download.model
import com.jakewharton.rxrelay.PublishRelay import com.jakewharton.rxrelay.PublishRelay
import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.download.DownloadStore import eu.kanade.tachiyomi.data.download.DownloadStore
import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.Page
import rx.Observable import rx.Observable

View File

@ -513,7 +513,7 @@ class LibraryUpdateService(
chapters.groupBy { it.manga_id } chapters.groupBy { it.manga_id }
.forEach { .forEach {
downloadManager.downloadChapters( downloadManager.downloadChapters(
downloadingManga[it.key]?.toDbManga() ?: return@forEach, downloadingManga[it.key] ?: return@forEach,
chapters, chapters,
false, false,
) )
@ -522,7 +522,7 @@ class LibraryUpdateService(
return return
} }
// SY <-- // SY <--
downloadManager.downloadChapters(manga, chapters, false) downloadManager.downloadChapters(manga.toDomainManga()!!, chapters, false)
} }
/** /**

View File

@ -14,7 +14,6 @@ import eu.kanade.domain.chapter.model.toChapterUpdate
import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.chapter.model.toDbChapter
import eu.kanade.domain.manga.interactor.GetManga import eu.kanade.domain.manga.interactor.GetManga
import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.toDbManga
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.backup.BackupRestoreService import eu.kanade.tachiyomi.data.backup.BackupRestoreService
import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadManager
@ -252,7 +251,7 @@ class NotificationReceiver : BroadcastReceiver() {
if (manga != null) { if (manga != null) {
val source = sourceManager.get(manga.source) val source = sourceManager.get(manga.source)
if (source != null) { if (source != null) {
downloadManager.deleteChapters(listOf(it.toDbChapter()), manga.toDbManga(), source) downloadManager.deleteChapters(listOf(it.toDbChapter()), manga, source)
} }
} }
} }
@ -270,7 +269,7 @@ class NotificationReceiver : BroadcastReceiver() {
*/ */
private fun downloadChapters(chapterUrls: Array<String>, mangaId: Long) { private fun downloadChapters(chapterUrls: Array<String>, mangaId: Long) {
launchIO { launchIO {
val manga = getManga.await(mangaId)?.toDbManga() val manga = getManga.await(mangaId)
val chapters = chapterUrls.mapNotNull { getChapter.await(it, mangaId)?.toDbChapter() } val chapters = chapterUrls.mapNotNull { getChapter.await(it, mangaId)?.toDbChapter() }
if (manga != null && chapters.isNotEmpty()) { if (manga != null && chapters.isNotEmpty()) {
downloadManager.downloadChapters(manga, chapters) downloadManager.downloadChapters(manga, chapters)

View File

@ -7,7 +7,6 @@ import eu.kanade.domain.chapter.model.toDbChapter
import eu.kanade.domain.manga.interactor.GetManga import eu.kanade.domain.manga.interactor.GetManga
import eu.kanade.domain.manga.interactor.GetMergedReferencesById import eu.kanade.domain.manga.interactor.GetMergedReferencesById
import eu.kanade.domain.manga.interactor.InsertManga import eu.kanade.domain.manga.interactor.InsertManga
import eu.kanade.domain.manga.model.toDbManga
import eu.kanade.domain.manga.model.toMangaInfo import eu.kanade.domain.manga.model.toMangaInfo
import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.MangaImpl import eu.kanade.tachiyomi.data.database.models.MangaImpl
@ -199,7 +198,7 @@ class MergedSource : HttpSource() {
syncChaptersWithSource.await(chapterList, loadedManga, source) syncChaptersWithSource.await(chapterList, loadedManga, source)
if (ifDownloadNewChapters && reference.downloadChapters) { if (ifDownloadNewChapters && reference.downloadChapters) {
downloadManager.downloadChapters( downloadManager.downloadChapters(
loadedManga.toDbManga(), loadedManga,
results.first.map(DomainChapter::toDbChapter), results.first.map(DomainChapter::toDbChapter),
) )
} }

View File

@ -19,7 +19,6 @@ import eu.kanade.domain.manga.interactor.UpdateManga
import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaUpdate import eu.kanade.domain.manga.model.MangaUpdate
import eu.kanade.domain.manga.model.isLocal import eu.kanade.domain.manga.model.isLocal
import eu.kanade.domain.manga.model.toDbManga
import eu.kanade.domain.track.interactor.GetTracks import eu.kanade.domain.track.interactor.GetTracks
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.cache.CoverCache
@ -205,7 +204,7 @@ class LibraryPresenter(
val isDownloaded = when { val isDownloaded = when {
item.manga.toDomainManga()!!.isLocal() -> true item.manga.toDomainManga()!!.isLocal() -> true
item.downloadCount != -1 -> item.downloadCount > 0 item.downloadCount != -1 -> item.downloadCount > 0
else -> downloadManager.getDownloadCount(item.manga) > 0 else -> downloadManager.getDownloadCount(item.manga.toDomainManga()!!) > 0
} }
return@downloaded if (downloadedOnly || filterDownloaded == State.INCLUDE.value) isDownloaded return@downloaded if (downloadedOnly || filterDownloaded == State.INCLUDE.value) isDownloaded
@ -322,9 +321,9 @@ class LibraryPresenter(
item.manga.id?.let { mergeMangaId -> item.manga.id?.let { mergeMangaId ->
runBlocking { runBlocking {
getMergedMangaById.await(mergeMangaId) getMergedMangaById.await(mergeMangaId)
}.sumOf { downloadManager.getDownloadCount(it.toDbManga()) } }.sumOf { downloadManager.getDownloadCount(it) }
} ?: 0 } ?: 0
} else /* SY <-- */ downloadManager.getDownloadCount(item.manga) } else /* SY <-- */ downloadManager.getDownloadCount(item.manga.toDomainManga()!!)
} else { } else {
// Unset download count if not enabled // Unset download count if not enabled
-1 -1
@ -693,7 +692,7 @@ class LibraryPresenter(
.groupBy { it.manga_id!! } .groupBy { it.manga_id!! }
.forEach ab@{ (mangaId, chapters) -> .forEach ab@{ (mangaId, chapters) ->
val mergedManga = mergedMangas.firstOrNull { it.id == mangaId } ?: return@ab val mergedManga = mergedMangas.firstOrNull { it.id == mangaId } ?: return@ab
downloadManager.downloadChapters(mergedManga.toDbManga(), chapters) downloadManager.downloadChapters(mergedManga, chapters)
} }
} else { } else {
/* SY --> */ /* SY --> */
@ -704,7 +703,7 @@ class LibraryPresenter(
} else /* SY <-- */ getChapterByMangaId.await(manga.id) } else /* SY <-- */ getChapterByMangaId.await(manga.id)
.filter { !it.read } .filter { !it.read }
downloadManager.downloadChapters(manga.toDbManga(), chapters.map { it.toDbChapter() }) downloadManager.downloadChapters(manga, chapters.map { it.toDbChapter() })
} }
} }
} }
@ -782,9 +781,9 @@ class LibraryPresenter(
chapters.groupBy { it.mangaId }.forEach { (mangaId, chapters) -> chapters.groupBy { it.mangaId }.forEach { (mangaId, chapters) ->
val mergedManga = mergedMangas.firstOrNull { it.id == mangaId } ?: return@forEach val mergedManga = mergedMangas.firstOrNull { it.id == mangaId } ?: return@forEach
val mergedMangaSource = sources.firstOrNull { it.id == mergedManga.source } ?: return@forEach val mergedMangaSource = sources.firstOrNull { it.id == mergedManga.source } ?: return@forEach
downloadManager.deleteChapters(chapters.map { it.toDbChapter() }, mergedManga.toDbManga(), mergedMangaSource) downloadManager.deleteChapters(chapters.map { it.toDbChapter() }, mergedManga, mergedMangaSource)
} }
} else /* SY <-- */ downloadManager.deleteChapters(chapters.map { it.toDbChapter() }, manga.toDbManga(), source) } else /* SY <-- */ downloadManager.deleteChapters(chapters.map { it.toDbChapter() }, manga, source)
} }
} }
@ -819,9 +818,9 @@ class LibraryPresenter(
val sources = mergedMangas.distinctBy { it.source }.map { sourceManager.getOrStub(it.source) } val sources = mergedMangas.distinctBy { it.source }.map { sourceManager.getOrStub(it.source) }
mergedMangas.forEach merge@{ mergedManga -> mergedMangas.forEach merge@{ mergedManga ->
val mergedSource = sources.firstOrNull { mergedManga.source == it.id } as? HttpSource ?: return@merge val mergedSource = sources.firstOrNull { mergedManga.source == it.id } as? HttpSource ?: return@merge
downloadManager.deleteManga(mergedManga.toDbManga(), mergedSource) downloadManager.deleteManga(mergedManga, mergedSource)
} }
} else downloadManager.deleteManga(manga, source) } else downloadManager.deleteManga(manga.toDomainManga()!!, source)
} }
} }
} }

View File

@ -679,7 +679,7 @@ class MangaPresenter(
*/ */
fun hasDownloads(): Boolean { fun hasDownloads(): Boolean {
val manga = successState?.manga ?: return false val manga = successState?.manga ?: return false
return downloadManager.getDownloadCount(manga.toDbManga()) > 0 return downloadManager.getDownloadCount(manga) > 0
} }
/** /**
@ -691,9 +691,9 @@ class MangaPresenter(
if (state.source is MergedSource) { if (state.source is MergedSource) {
val mergedManga = state.mergedData?.manga?.map { it.value to sourceManager.getOrStub(it.value.source) } val mergedManga = state.mergedData?.manga?.map { it.value to sourceManager.getOrStub(it.value.source) }
mergedManga?.forEach { (manga, source) -> mergedManga?.forEach { (manga, source) ->
downloadManager.deleteManga(manga.toDbManga(), source) downloadManager.deleteManga(manga, source)
} }
} else /* SY <-- */ downloadManager.deleteManga(state.manga.toDbManga(), state.source) } else /* SY <-- */ downloadManager.deleteManga(state.manga, state.source)
} }
/** /**
@ -956,11 +956,11 @@ class MangaPresenter(
if (state.source is MergedSource) { if (state.source is MergedSource) {
chapters.groupBy { it.mangaId }.forEach { map -> chapters.groupBy { it.mangaId }.forEach { map ->
val manga = state.mergedData?.manga?.get(map.key) ?: return@forEach val manga = state.mergedData?.manga?.get(map.key) ?: return@forEach
downloadManager.downloadChapters(manga.toDbManga(), map.value.map { it.toMergedDownloadedChapter().toDbChapter() }) downloadManager.downloadChapters(manga, map.value.map { it.toMergedDownloadedChapter().toDbChapter() })
} }
} else { /* SY <-- */ } else { /* SY <-- */
val manga = state.manga val manga = state.manga
downloadManager.downloadChapters(manga.toDbManga(), chapters.map { it.toDbChapter() }) downloadManager.downloadChapters(manga, chapters.map { it.toDbChapter() })
} }
} }
@ -987,7 +987,7 @@ class MangaPresenter(
try { try {
updateSuccessState { successState -> updateSuccessState { successState ->
val deletedIds = downloadManager val deletedIds = downloadManager
.deleteChapters(chapters2, successState.manga.toDbManga(), successState.source) .deleteChapters(chapters2, successState.manga, successState.source)
.map { it.id } .map { it.id }
val deletedChapters = successState.chapters.filter { deletedIds.contains(it.chapter.id) } val deletedChapters = successState.chapters.filter { deletedIds.contains(it.chapter.id) }
if (deletedChapters.isEmpty()) return@updateSuccessState successState if (deletedChapters.isEmpty()) return@updateSuccessState successState

View File

@ -1029,7 +1029,7 @@ class ReaderPresenter(
// SY <-- // SY <--
launchIO { launchIO {
downloadManager.enqueueDeleteChapters(listOf(chapter.chapter), manga) downloadManager.enqueueDeleteChapters(listOf(chapter.chapter), manga.toDomainManga()!!)
} }
} }

View File

@ -4,7 +4,6 @@ import android.app.Application
import android.net.Uri import android.net.Uri
import com.hippo.unifile.UniFile import com.hippo.unifile.UniFile
import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.toDbManga
import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.Page
@ -46,7 +45,7 @@ class DownloadPageLoader(
} }
private fun getPagesFromDirectory(): Observable<List<ReaderPage>> { private fun getPagesFromDirectory(): Observable<List<ReaderPage>> {
return downloadManager.buildPageList(source, manga.toDbManga(), chapter.chapter) return downloadManager.buildPageList(source, manga, chapter.chapter)
.map { pages -> .map { pages ->
pages.map { page -> pages.map { page ->
ReaderPage(page.index, page.url, page.imageUrl) { ReaderPage(page.index, page.url, page.imageUrl) {

View File

@ -8,7 +8,6 @@ import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.chapter.model.ChapterUpdate import eu.kanade.domain.chapter.model.ChapterUpdate
import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.chapter.model.toDbChapter
import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.toDbManga
import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.download.model.Download
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
@ -219,7 +218,7 @@ class UpdatesPresenter : BasePresenter<UpdatesController>() {
* @param items list of recent chapters seleted. * @param items list of recent chapters seleted.
*/ */
fun downloadChapters(items: List<UpdatesItem>) { fun downloadChapters(items: List<UpdatesItem>) {
items.forEach { downloadManager.downloadChapters(it.manga.toDbManga(), listOf(it.chapter.toDbChapter())) } items.forEach { downloadManager.downloadChapters(it.manga, listOf(it.chapter.toDbChapter())) }
} }
/** /**
@ -230,7 +229,7 @@ class UpdatesPresenter : BasePresenter<UpdatesController>() {
private fun deleteChaptersInternal(chapterItems: List<UpdatesItem>) { private fun deleteChaptersInternal(chapterItems: List<UpdatesItem>) {
val itemsByManga = chapterItems.groupBy { it.manga.id } val itemsByManga = chapterItems.groupBy { it.manga.id }
for ((_, items) in itemsByManga) { for ((_, items) in itemsByManga) {
val manga = items.first().manga.toDbManga() val manga = items.first().manga
val source = sourceManager.get(manga.source) ?: continue val source = sourceManager.get(manga.source) ?: continue
val chapters = items.map { it.chapter.toDbChapter() } val chapters = items.map { it.chapter.toDbChapter() }

View File

@ -17,7 +17,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
import eu.kanade.domain.chapter.interactor.GetChapterByMangaId import eu.kanade.domain.chapter.interactor.GetChapterByMangaId
import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.chapter.model.toDbChapter
import eu.kanade.domain.manga.interactor.GetAllManga import eu.kanade.domain.manga.interactor.GetAllManga
import eu.kanade.domain.manga.model.toDbManga
import eu.kanade.domain.manga.repository.MangaRepository import eu.kanade.domain.manga.repository.MangaRepository
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.ChapterCache import eu.kanade.tachiyomi.data.cache.ChapterCache
@ -498,7 +497,7 @@ class SettingsAdvancedController(
mangaFolder.delete() mangaFolder.delete()
} else { } else {
val chapterList = getChapterByMangaId.await(manga.id) val chapterList = getChapterByMangaId.await(manga.id)
foldersCleared += downloadManager.cleanupChapters(chapterList.map { it.toDbChapter() }, manga.toDbManga(), source, removeRead, removeNonFavorite) foldersCleared += downloadManager.cleanupChapters(chapterList.map { it.toDbChapter() }, manga, source, removeRead, removeNonFavorite)
} }
} }
} }