More domain model usage
(cherry picked from commit 68697e59d71d9875d8a8b8aaaf65e77a084e0b8a) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/data/backup/AbstractBackupManager.kt # app/src/main/java/eu/kanade/tachiyomi/data/cache/ChapterCache.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/HttpPageLoader.kt # app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterSourceSync.kt
This commit is contained in:
parent
268911a7c9
commit
eb0964d0b6
@ -3,7 +3,7 @@ package eu.kanade.tachiyomi.data.cache
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.text.format.Formatter
|
import android.text.format.Formatter
|
||||||
import com.jakewharton.disklrucache.DiskLruCache
|
import com.jakewharton.disklrucache.DiskLruCache
|
||||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
import eu.kanade.domain.chapter.model.Chapter
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.source.model.Page
|
import eu.kanade.tachiyomi.source.model.Page
|
||||||
import eu.kanade.tachiyomi.util.storage.DiskUtil
|
import eu.kanade.tachiyomi.util.storage.DiskUtil
|
||||||
@ -235,6 +235,6 @@ class ChapterCache(private val context: Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getKey(chapter: Chapter): String {
|
private fun getKey(chapter: Chapter): String {
|
||||||
return "${chapter.manga_id}${chapter.url}"
|
return "${chapter.mangaId}${chapter.url}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -359,7 +359,7 @@ open class BrowseSourcePresenter(
|
|||||||
if (!manga.favorite) {
|
if (!manga.favorite) {
|
||||||
manga.removeCovers(coverCache)
|
manga.removeCovers(coverCache)
|
||||||
} else {
|
} else {
|
||||||
ChapterSettingsHelper.applySettingDefaults(manga)
|
ChapterSettingsHelper.applySettingDefaults(manga.toDomainManga()!!)
|
||||||
|
|
||||||
autoAddTrack(manga)
|
autoAddTrack(manga)
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ import androidx.core.view.isVisible
|
|||||||
import com.bluelinelabs.conductor.Router
|
import com.bluelinelabs.conductor.Router
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import eu.kanade.domain.manga.model.Manga
|
import eu.kanade.domain.manga.model.Manga
|
||||||
import eu.kanade.domain.manga.model.toDbManga
|
|
||||||
import eu.kanade.domain.manga.model.toTriStateGroupState
|
import eu.kanade.domain.manga.model.toTriStateGroupState
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.ui.manga.MangaPresenter
|
import eu.kanade.tachiyomi.ui.manga.MangaPresenter
|
||||||
@ -80,7 +79,7 @@ class ChaptersSettingsSheet(
|
|||||||
onMenuItemClick = {
|
onMenuItemClick = {
|
||||||
when (itemId) {
|
when (itemId) {
|
||||||
R.id.set_as_default -> {
|
R.id.set_as_default -> {
|
||||||
SetChapterSettingsDialog(presenter.manga!!.toDbManga()).showDialog(router)
|
SetChapterSettingsDialog(presenter.manga!!).showDialog(router)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -4,8 +4,8 @@ import android.app.Dialog
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.core.os.bundleOf
|
import androidx.core.os.bundleOf
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
|
import eu.kanade.domain.manga.model.Manga
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||||
import eu.kanade.tachiyomi.util.chapter.ChapterSettingsHelper
|
import eu.kanade.tachiyomi.util.chapter.ChapterSettingsHelper
|
||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
|
@ -117,7 +117,7 @@ class ReaderPresenter(
|
|||||||
// SY -->
|
// SY -->
|
||||||
var meta: RaisedSearchMetadata? = null
|
var meta: RaisedSearchMetadata? = null
|
||||||
private set
|
private set
|
||||||
var mergedManga: Map<Long, Manga>? = null
|
var mergedManga: Map<Long, DomainManga>? = null
|
||||||
private set
|
private set
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
@ -322,8 +322,8 @@ class ReaderPresenter(
|
|||||||
val context = Injekt.get<Application>()
|
val context = Injekt.get<Application>()
|
||||||
val source = sourceManager.getOrStub(manga.source)
|
val source = sourceManager.getOrStub(manga.source)
|
||||||
val mergedReferences = if (source is MergedSource) runBlocking { getMergedReferencesById.await(manga.id!!) } else emptyList()
|
val mergedReferences = if (source is MergedSource) runBlocking { getMergedReferencesById.await(manga.id!!) } else emptyList()
|
||||||
mergedManga = if (source is MergedSource) runBlocking { getMergedManga.await() }.map { it.toDbManga() }.associateBy { it.id!! } else emptyMap()
|
mergedManga = if (source is MergedSource) runBlocking { getMergedManga.await() }.associateBy { it.id } else emptyMap()
|
||||||
loader = ChapterLoader(context, downloadManager, manga, source, sourceManager, mergedReferences, mergedManga ?: emptyMap())
|
loader = ChapterLoader(context, downloadManager, manga.toDomainManga()!!, source, sourceManager, mergedReferences, mergedManga ?: emptyMap())
|
||||||
|
|
||||||
Observable.just(manga).subscribeLatestCache(ReaderActivity::setManga)
|
Observable.just(manga).subscribeLatestCache(ReaderActivity::setManga)
|
||||||
viewerChaptersRelay.subscribeLatestCache(ReaderActivity::setChapters)
|
viewerChaptersRelay.subscribeLatestCache(ReaderActivity::setChapters)
|
||||||
@ -1024,7 +1024,7 @@ class ReaderPresenter(
|
|||||||
val manga = if (mergedManga.isNullOrEmpty()) {
|
val manga = if (mergedManga.isNullOrEmpty()) {
|
||||||
manga
|
manga
|
||||||
} else {
|
} else {
|
||||||
mergedManga.orEmpty()[chapter.chapter.manga_id]
|
mergedManga.orEmpty()[chapter.chapter.manga_id]?.toDbManga()
|
||||||
} ?: return
|
} ?: return
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package eu.kanade.tachiyomi.ui.reader.loader
|
package eu.kanade.tachiyomi.ui.reader.loader
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import eu.kanade.domain.manga.model.Manga
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
|
||||||
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
|
||||||
@ -88,14 +88,14 @@ class ChapterLoader(
|
|||||||
*/
|
*/
|
||||||
private fun getPageLoader(chapter: ReaderChapter): PageLoader {
|
private fun getPageLoader(chapter: ReaderChapter): PageLoader {
|
||||||
val dbChapter = chapter.chapter
|
val dbChapter = chapter.chapter
|
||||||
val isDownloaded = downloadManager.isChapterDownloaded(dbChapter.name, dbChapter.scanlator, /* SY --> */ manga.originalTitle /* SY <-- */, manga.source, skipCache = true)
|
val isDownloaded = downloadManager.isChapterDownloaded(dbChapter.name, dbChapter.scanlator, /* SY --> */ manga.ogTitle /* SY <-- */, manga.source, skipCache = true)
|
||||||
return when {
|
return when {
|
||||||
// SY -->
|
// SY -->
|
||||||
source is MergedSource -> {
|
source is MergedSource -> {
|
||||||
val mangaReference = mergedReferences.firstOrNull { it.mangaId == chapter.chapter.manga_id } ?: error("Merge reference null")
|
val mangaReference = mergedReferences.firstOrNull { it.mangaId == chapter.chapter.manga_id } ?: error("Merge reference null")
|
||||||
val source = sourceManager.get(mangaReference.mangaSourceId) ?: error("Source ${mangaReference.mangaSourceId} was null")
|
val source = sourceManager.get(mangaReference.mangaSourceId) ?: error("Source ${mangaReference.mangaSourceId} was null")
|
||||||
val manga = mergedManga[chapter.chapter.manga_id] ?: error("Manga for merged chapter was null")
|
val manga = mergedManga[chapter.chapter.manga_id] ?: error("Manga for merged chapter was null")
|
||||||
val isMergedMangaDownloaded = downloadManager.isChapterDownloaded(chapter.chapter.name, chapter.chapter.scanlator, manga.originalTitle, manga.source, true)
|
val isMergedMangaDownloaded = downloadManager.isChapterDownloaded(chapter.chapter.name, chapter.chapter.scanlator, manga.ogTitle, manga.source, true)
|
||||||
when {
|
when {
|
||||||
isMergedMangaDownloaded -> DownloadPageLoader(chapter, manga, source, downloadManager)
|
isMergedMangaDownloaded -> DownloadPageLoader(chapter, manga, source, downloadManager)
|
||||||
source is HttpSource -> HttpPageLoader(chapter, source)
|
source is HttpSource -> HttpPageLoader(chapter, source)
|
||||||
|
@ -3,7 +3,8 @@ package eu.kanade.tachiyomi.ui.reader.loader
|
|||||||
import android.app.Application
|
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.tachiyomi.data.database.models.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
|
||||||
@ -31,7 +32,7 @@ class DownloadPageLoader(
|
|||||||
*/
|
*/
|
||||||
override fun getPages(): Observable<List<ReaderPage>> {
|
override fun getPages(): Observable<List<ReaderPage>> {
|
||||||
val dbChapter = chapter.chapter
|
val dbChapter = chapter.chapter
|
||||||
val chapterPath = downloadManager.provider.findChapterDir(dbChapter.name, dbChapter.scanlator, /* SY --> */ manga.originalTitle /* SY <-- */, source)
|
val chapterPath = downloadManager.provider.findChapterDir(dbChapter.name, dbChapter.scanlator, /* SY --> */ manga.ogTitle /* SY <-- */, source)
|
||||||
return if (chapterPath?.isFile == true) {
|
return if (chapterPath?.isFile == true) {
|
||||||
getPagesFromArchive(chapterPath)
|
getPagesFromArchive(chapterPath)
|
||||||
} else {
|
} else {
|
||||||
@ -45,7 +46,7 @@ class DownloadPageLoader(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getPagesFromDirectory(): Observable<List<ReaderPage>> {
|
private fun getPagesFromDirectory(): Observable<List<ReaderPage>> {
|
||||||
return downloadManager.buildPageList(source, manga, chapter.chapter)
|
return downloadManager.buildPageList(source, manga.toDbManga(), 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) {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package eu.kanade.tachiyomi.ui.reader.loader
|
package eu.kanade.tachiyomi.ui.reader.loader
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
||||||
|
import eu.kanade.tachiyomi.data.database.models.toDomainChapter
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
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
|
||||||
@ -90,7 +91,7 @@ class HttpPageLoader(
|
|||||||
.fromAction {
|
.fromAction {
|
||||||
// Convert to pages without reader information
|
// Convert to pages without reader information
|
||||||
val pagesToSave = pages.map { Page(it.index, it.url, it.imageUrl) }
|
val pagesToSave = pages.map { Page(it.index, it.url, it.imageUrl) }
|
||||||
chapterCache.putPageListToCache(chapter.chapter, pagesToSave)
|
chapterCache.putPageListToCache(chapter.chapter.toDomainChapter()!!, pagesToSave)
|
||||||
}
|
}
|
||||||
.onErrorComplete()
|
.onErrorComplete()
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
@ -103,7 +104,7 @@ class HttpPageLoader(
|
|||||||
* the local cache, otherwise fallbacks to network.
|
* the local cache, otherwise fallbacks to network.
|
||||||
*/
|
*/
|
||||||
override fun getPages(): Observable<List<ReaderPage>> {
|
override fun getPages(): Observable<List<ReaderPage>> {
|
||||||
return Observable.fromCallable { chapterCache.getPageListFromCache(chapter.chapter) }
|
return Observable.fromCallable { chapterCache.getPageListFromCache(chapter.chapter.toDomainChapter()!!) }
|
||||||
.onErrorResumeNext { source.fetchPageList(chapter.chapter) }
|
.onErrorResumeNext { source.fetchPageList(chapter.chapter) }
|
||||||
.map { pages ->
|
.map { pages ->
|
||||||
// SY -->
|
// SY -->
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package eu.kanade.tachiyomi.ui.reader.viewer
|
package eu.kanade.tachiyomi.ui.reader.viewer
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
import eu.kanade.domain.chapter.model.Chapter
|
||||||
|
import eu.kanade.tachiyomi.data.database.models.toDomainChapter
|
||||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
|
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
|
||||||
import kotlin.math.floor
|
import kotlin.math.floor
|
||||||
|
|
||||||
@ -8,7 +9,7 @@ private val pattern = Regex("""\d+""")
|
|||||||
|
|
||||||
fun hasMissingChapters(higherReaderChapter: ReaderChapter?, lowerReaderChapter: ReaderChapter?): Boolean {
|
fun hasMissingChapters(higherReaderChapter: ReaderChapter?, lowerReaderChapter: ReaderChapter?): Boolean {
|
||||||
if (higherReaderChapter == null || lowerReaderChapter == null) return false
|
if (higherReaderChapter == null || lowerReaderChapter == null) return false
|
||||||
return hasMissingChapters(higherReaderChapter.chapter, lowerReaderChapter.chapter)
|
return hasMissingChapters(higherReaderChapter.chapter.toDomainChapter(), lowerReaderChapter.chapter.toDomainChapter())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun hasMissingChapters(higherChapter: Chapter?, lowerChapter: Chapter?): Boolean {
|
fun hasMissingChapters(higherChapter: Chapter?, lowerChapter: Chapter?): Boolean {
|
||||||
@ -17,7 +18,7 @@ fun hasMissingChapters(higherChapter: Chapter?, lowerChapter: Chapter?): Boolean
|
|||||||
if (!pattern.containsMatchIn(higherChapter.name) || !pattern.containsMatchIn(lowerChapter.name)) return false
|
if (!pattern.containsMatchIn(higherChapter.name) || !pattern.containsMatchIn(lowerChapter.name)) return false
|
||||||
// Check if potential chapter number was recognized as chapter number
|
// Check if potential chapter number was recognized as chapter number
|
||||||
if (!higherChapter.isRecognizedNumber || !lowerChapter.isRecognizedNumber) return false
|
if (!higherChapter.isRecognizedNumber || !lowerChapter.isRecognizedNumber) return false
|
||||||
return hasMissingChapters(higherChapter.chapter_number, lowerChapter.chapter_number)
|
return hasMissingChapters(higherChapter.chapterNumber, lowerChapter.chapterNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun hasMissingChapters(higherChapterNumber: Float, lowerChapterNumber: Float): Boolean {
|
fun hasMissingChapters(higherChapterNumber: Float, lowerChapterNumber: Float): Boolean {
|
||||||
@ -27,7 +28,7 @@ fun hasMissingChapters(higherChapterNumber: Float, lowerChapterNumber: Float): B
|
|||||||
|
|
||||||
fun calculateChapterDifference(higherReaderChapter: ReaderChapter?, lowerReaderChapter: ReaderChapter?): Float {
|
fun calculateChapterDifference(higherReaderChapter: ReaderChapter?, lowerReaderChapter: ReaderChapter?): Float {
|
||||||
if (higherReaderChapter == null || lowerReaderChapter == null) return 0f
|
if (higherReaderChapter == null || lowerReaderChapter == null) return 0f
|
||||||
return calculateChapterDifference(higherReaderChapter.chapter, lowerReaderChapter.chapter)
|
return calculateChapterDifference(higherReaderChapter.chapter.toDomainChapter(), lowerReaderChapter.chapter.toDomainChapter())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun calculateChapterDifference(higherChapter: Chapter?, lowerChapter: Chapter?): Float {
|
fun calculateChapterDifference(higherChapter: Chapter?, lowerChapter: Chapter?): Float {
|
||||||
@ -36,7 +37,7 @@ fun calculateChapterDifference(higherChapter: Chapter?, lowerChapter: Chapter?):
|
|||||||
if (!pattern.containsMatchIn(higherChapter.name) || !pattern.containsMatchIn(lowerChapter.name)) return 0f
|
if (!pattern.containsMatchIn(higherChapter.name) || !pattern.containsMatchIn(lowerChapter.name)) return 0f
|
||||||
// Check if potential chapter number was recognized as chapter number
|
// Check if potential chapter number was recognized as chapter number
|
||||||
if (!higherChapter.isRecognizedNumber || !lowerChapter.isRecognizedNumber) return 0f
|
if (!higherChapter.isRecognizedNumber || !lowerChapter.isRecognizedNumber) return 0f
|
||||||
return calculateChapterDifference(higherChapter.chapter_number, lowerChapter.chapter_number)
|
return calculateChapterDifference(higherChapter.chapterNumber, lowerChapter.chapterNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun calculateChapterDifference(higherChapterNumber: Float, lowerChapterNumber: Float): Float {
|
fun calculateChapterDifference(higherChapterNumber: Float, lowerChapterNumber: Float): Float {
|
||||||
|
@ -2,7 +2,8 @@ package eu.kanade.tachiyomi.util.chapter
|
|||||||
|
|
||||||
import eu.kanade.domain.manga.interactor.GetFavorites
|
import eu.kanade.domain.manga.interactor.GetFavorites
|
||||||
import eu.kanade.domain.manga.interactor.SetMangaChapterFlags
|
import eu.kanade.domain.manga.interactor.SetMangaChapterFlags
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.domain.manga.model.Manga
|
||||||
|
import eu.kanade.domain.manga.model.toDbManga
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.util.lang.launchIO
|
import eu.kanade.tachiyomi.util.lang.launchIO
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
@ -17,7 +18,7 @@ object ChapterSettingsHelper {
|
|||||||
* Updates the global Chapter Settings in Preferences.
|
* Updates the global Chapter Settings in Preferences.
|
||||||
*/
|
*/
|
||||||
fun setGlobalSettings(manga: Manga) {
|
fun setGlobalSettings(manga: Manga) {
|
||||||
prefs.setChapterSettingsDefault(manga)
|
prefs.setChapterSettingsDefault(manga.toDbManga())
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -26,7 +27,7 @@ object ChapterSettingsHelper {
|
|||||||
fun applySettingDefaults(manga: Manga) {
|
fun applySettingDefaults(manga: Manga) {
|
||||||
launchIO {
|
launchIO {
|
||||||
setMangaChapterFlags.awaitSetAllFlags(
|
setMangaChapterFlags.awaitSetAllFlags(
|
||||||
mangaId = manga.id!!,
|
mangaId = manga.id,
|
||||||
unreadFilter = prefs.filterChapterByRead().toLong(),
|
unreadFilter = prefs.filterChapterByRead().toLong(),
|
||||||
downloadedFilter = prefs.filterChapterByDownloaded().toLong(),
|
downloadedFilter = prefs.filterChapterByDownloaded().toLong(),
|
||||||
bookmarkedFilter = prefs.filterChapterByBookmarked().toLong(),
|
bookmarkedFilter = prefs.filterChapterByBookmarked().toLong(),
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.util.chapter
|
|
||||||
|
|
||||||
import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource
|
|
||||||
import eu.kanade.domain.chapter.model.toDbChapter
|
|
||||||
import eu.kanade.tachiyomi.data.database.models.toDomainManga
|
|
||||||
import eu.kanade.tachiyomi.source.Source
|
|
||||||
import eu.kanade.tachiyomi.source.model.SChapter
|
|
||||||
import kotlinx.coroutines.runBlocking
|
|
||||||
import uy.kohesive.injekt.Injekt
|
|
||||||
import uy.kohesive.injekt.api.get
|
|
||||||
import eu.kanade.tachiyomi.data.database.models.Chapter as DbChapter
|
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga as DbManga
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper method for syncing the list of chapters from the source with the ones from the database.
|
|
||||||
*
|
|
||||||
* @param rawSourceChapters a list of chapters from the source.
|
|
||||||
* @param manga the manga of the chapters.
|
|
||||||
* @param source the source of the chapters.
|
|
||||||
* @return a pair of new insertions and deletions.
|
|
||||||
*/
|
|
||||||
fun syncChaptersWithSource(
|
|
||||||
rawSourceChapters: List<SChapter>,
|
|
||||||
manga: DbManga,
|
|
||||||
source: Source,
|
|
||||||
syncChaptersWithSource: SyncChaptersWithSource = Injekt.get(),
|
|
||||||
): Pair<List<DbChapter>, List<DbChapter>> {
|
|
||||||
val domainManga = manga.toDomainManga() ?: return Pair(emptyList(), emptyList())
|
|
||||||
val (added, deleted) = runBlocking {
|
|
||||||
syncChaptersWithSource.await(rawSourceChapters, domainManga, source)
|
|
||||||
}
|
|
||||||
|
|
||||||
val addedDbChapters = added.map { it.toDbChapter() }
|
|
||||||
val deletedDbChapters = deleted.map { it.toDbChapter() }
|
|
||||||
|
|
||||||
return Pair(addedDbChapters, deletedDbChapters)
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user