mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 16:18:55 +01:00 
			
		
		
		
	Move more models to domain module
This commit is contained in:
		@@ -1,9 +1,9 @@
 | 
			
		||||
package eu.kanade.domain.chapter.interactor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.chapter.model.Chapter
 | 
			
		||||
import eu.kanade.domain.chapter.repository.ChapterRepository
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.logcat
 | 
			
		||||
import logcat.LogPriority
 | 
			
		||||
import tachiyomi.domain.chapter.model.Chapter
 | 
			
		||||
 | 
			
		||||
class GetChapter(
 | 
			
		||||
    private val chapterRepository: ChapterRepository,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
package eu.kanade.domain.chapter.interactor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.chapter.model.Chapter
 | 
			
		||||
import eu.kanade.domain.chapter.repository.ChapterRepository
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.logcat
 | 
			
		||||
import logcat.LogPriority
 | 
			
		||||
import tachiyomi.domain.chapter.model.Chapter
 | 
			
		||||
 | 
			
		||||
class GetChapterByMangaId(
 | 
			
		||||
    private val chapterRepository: ChapterRepository,
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,8 @@ package eu.kanade.domain.chapter.interactor
 | 
			
		||||
import eu.kanade.domain.library.service.LibraryPreferences
 | 
			
		||||
import eu.kanade.domain.manga.interactor.GetFavorites
 | 
			
		||||
import eu.kanade.domain.manga.interactor.SetMangaChapterFlags
 | 
			
		||||
import eu.kanade.domain.manga.model.Manga
 | 
			
		||||
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
 | 
			
		||||
class SetMangaDefaultChapterFlags(
 | 
			
		||||
    private val libraryPreferences: LibraryPreferences,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,15 @@
 | 
			
		||||
package eu.kanade.domain.chapter.interactor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.chapter.model.Chapter
 | 
			
		||||
import eu.kanade.domain.chapter.model.ChapterUpdate
 | 
			
		||||
import eu.kanade.domain.chapter.repository.ChapterRepository
 | 
			
		||||
import eu.kanade.domain.download.interactor.DeleteDownload
 | 
			
		||||
import eu.kanade.domain.download.service.DownloadPreferences
 | 
			
		||||
import eu.kanade.domain.manga.model.Manga
 | 
			
		||||
import eu.kanade.domain.manga.repository.MangaRepository
 | 
			
		||||
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.logcat
 | 
			
		||||
import logcat.LogPriority
 | 
			
		||||
import tachiyomi.domain.chapter.model.Chapter
 | 
			
		||||
import tachiyomi.domain.chapter.model.ChapterUpdate
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
 | 
			
		||||
class SetReadStatus(
 | 
			
		||||
    private val downloadPreferences: DownloadPreferences,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
package eu.kanade.domain.chapter.interactor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.chapter.model.Chapter
 | 
			
		||||
import tachiyomi.domain.chapter.model.Chapter
 | 
			
		||||
 | 
			
		||||
class ShouldUpdateDbChapter {
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,11 +2,11 @@ package eu.kanade.domain.chapter.interactor
 | 
			
		||||
 | 
			
		||||
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.copyFromSChapter
 | 
			
		||||
import eu.kanade.domain.chapter.model.toSChapter
 | 
			
		||||
import eu.kanade.domain.chapter.repository.ChapterRepository
 | 
			
		||||
import eu.kanade.domain.manga.interactor.UpdateManga
 | 
			
		||||
import eu.kanade.domain.manga.model.Manga
 | 
			
		||||
import eu.kanade.domain.manga.model.toSManga
 | 
			
		||||
import eu.kanade.tachiyomi.data.download.DownloadManager
 | 
			
		||||
import eu.kanade.tachiyomi.data.download.DownloadProvider
 | 
			
		||||
import eu.kanade.tachiyomi.source.Source
 | 
			
		||||
@@ -14,6 +14,9 @@ import eu.kanade.tachiyomi.source.isLocal
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.SChapter
 | 
			
		||||
import eu.kanade.tachiyomi.source.online.HttpSource
 | 
			
		||||
import eu.kanade.tachiyomi.util.chapter.ChapterRecognition
 | 
			
		||||
import tachiyomi.domain.chapter.model.Chapter
 | 
			
		||||
import tachiyomi.domain.chapter.model.toChapterUpdate
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
import uy.kohesive.injekt.Injekt
 | 
			
		||||
import uy.kohesive.injekt.api.get
 | 
			
		||||
import java.lang.Long.max
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,13 @@
 | 
			
		||||
package eu.kanade.domain.chapter.interactor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.chapter.model.Chapter
 | 
			
		||||
import eu.kanade.domain.chapter.model.toChapterUpdate
 | 
			
		||||
import eu.kanade.domain.track.interactor.InsertTrack
 | 
			
		||||
import eu.kanade.domain.track.model.Track
 | 
			
		||||
import eu.kanade.domain.track.model.toDbTrack
 | 
			
		||||
import eu.kanade.tachiyomi.data.track.TrackService
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.logcat
 | 
			
		||||
import logcat.LogPriority
 | 
			
		||||
import tachiyomi.domain.chapter.model.Chapter
 | 
			
		||||
import tachiyomi.domain.chapter.model.toChapterUpdate
 | 
			
		||||
import uy.kohesive.injekt.Injekt
 | 
			
		||||
import uy.kohesive.injekt.api.get
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
package eu.kanade.domain.chapter.interactor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.chapter.model.ChapterUpdate
 | 
			
		||||
import eu.kanade.domain.chapter.repository.ChapterRepository
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.logcat
 | 
			
		||||
import logcat.LogPriority
 | 
			
		||||
import tachiyomi.domain.chapter.model.ChapterUpdate
 | 
			
		||||
 | 
			
		||||
class UpdateChapter(
 | 
			
		||||
    private val chapterRepository: ChapterRepository,
 | 
			
		||||
 
 | 
			
		||||
@@ -2,64 +2,30 @@ package eu.kanade.domain.chapter.model
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.models.ChapterImpl
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.SChapter
 | 
			
		||||
import tachiyomi.domain.chapter.model.Chapter
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.models.Chapter as DbChapter
 | 
			
		||||
 | 
			
		||||
data class Chapter(
 | 
			
		||||
    val id: Long,
 | 
			
		||||
    val mangaId: Long,
 | 
			
		||||
    val read: Boolean,
 | 
			
		||||
    val bookmark: Boolean,
 | 
			
		||||
    val lastPageRead: Long,
 | 
			
		||||
    val dateFetch: Long,
 | 
			
		||||
    val sourceOrder: Long,
 | 
			
		||||
    val url: String,
 | 
			
		||||
    val name: String,
 | 
			
		||||
    val dateUpload: Long,
 | 
			
		||||
    val chapterNumber: Float,
 | 
			
		||||
    val scanlator: String?,
 | 
			
		||||
) {
 | 
			
		||||
    val isRecognizedNumber: Boolean
 | 
			
		||||
        get() = chapterNumber >= 0f
 | 
			
		||||
 | 
			
		||||
    fun toSChapter(): SChapter {
 | 
			
		||||
        return SChapter.create().also {
 | 
			
		||||
            it.url = url
 | 
			
		||||
            it.name = name
 | 
			
		||||
            it.date_upload = dateUpload
 | 
			
		||||
            it.chapter_number = chapterNumber
 | 
			
		||||
            it.scanlator = scanlator
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun copyFromSChapter(sChapter: SChapter): Chapter {
 | 
			
		||||
        return this.copy(
 | 
			
		||||
            name = sChapter.name,
 | 
			
		||||
            url = sChapter.url,
 | 
			
		||||
            dateUpload = sChapter.date_upload,
 | 
			
		||||
            chapterNumber = sChapter.chapter_number,
 | 
			
		||||
            scanlator = sChapter.scanlator?.ifBlank { null },
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    companion object {
 | 
			
		||||
        fun create() = Chapter(
 | 
			
		||||
            id = -1,
 | 
			
		||||
            mangaId = -1,
 | 
			
		||||
            read = false,
 | 
			
		||||
            bookmark = false,
 | 
			
		||||
            lastPageRead = 0,
 | 
			
		||||
            dateFetch = 0,
 | 
			
		||||
            sourceOrder = 0,
 | 
			
		||||
            url = "",
 | 
			
		||||
            name = "",
 | 
			
		||||
            dateUpload = -1,
 | 
			
		||||
            chapterNumber = -1f,
 | 
			
		||||
            scanlator = null,
 | 
			
		||||
        )
 | 
			
		||||
// TODO: Remove when all deps are migrated
 | 
			
		||||
fun Chapter.toSChapter(): SChapter {
 | 
			
		||||
    return SChapter.create().also {
 | 
			
		||||
        it.url = url
 | 
			
		||||
        it.name = name
 | 
			
		||||
        it.date_upload = dateUpload
 | 
			
		||||
        it.chapter_number = chapterNumber
 | 
			
		||||
        it.scanlator = scanlator
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TODO: Remove when all deps are migrated
 | 
			
		||||
fun Chapter.copyFromSChapter(sChapter: SChapter): Chapter {
 | 
			
		||||
    return this.copy(
 | 
			
		||||
        name = sChapter.name,
 | 
			
		||||
        url = sChapter.url,
 | 
			
		||||
        dateUpload = sChapter.date_upload,
 | 
			
		||||
        chapterNumber = sChapter.chapter_number,
 | 
			
		||||
        scanlator = sChapter.scanlator?.ifBlank { null },
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fun Chapter.toDbChapter(): DbChapter = ChapterImpl().also {
 | 
			
		||||
    it.id = id
 | 
			
		||||
    it.manga_id = mangaId
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,14 @@
 | 
			
		||||
package eu.kanade.domain.chapter.model
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.manga.model.Manga
 | 
			
		||||
import eu.kanade.domain.manga.model.TriStateFilter
 | 
			
		||||
import eu.kanade.domain.manga.model.downloadedFilter
 | 
			
		||||
import eu.kanade.domain.manga.model.isLocal
 | 
			
		||||
import eu.kanade.tachiyomi.data.download.DownloadManager
 | 
			
		||||
import eu.kanade.tachiyomi.data.download.model.Download
 | 
			
		||||
import eu.kanade.tachiyomi.ui.manga.ChapterItem
 | 
			
		||||
import eu.kanade.tachiyomi.util.chapter.getChapterSort
 | 
			
		||||
import tachiyomi.domain.chapter.model.Chapter
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
import tachiyomi.domain.manga.model.TriStateFilter
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Applies the view filters to the list of chapters obtained from the database.
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
package eu.kanade.domain.chapter.model
 | 
			
		||||
 | 
			
		||||
data class ChapterUpdate(
 | 
			
		||||
    val id: Long,
 | 
			
		||||
    val mangaId: Long? = null,
 | 
			
		||||
    val read: Boolean? = null,
 | 
			
		||||
    val bookmark: Boolean? = null,
 | 
			
		||||
    val lastPageRead: Long? = null,
 | 
			
		||||
    val dateFetch: Long? = null,
 | 
			
		||||
    val sourceOrder: Long? = null,
 | 
			
		||||
    val url: String? = null,
 | 
			
		||||
    val name: String? = null,
 | 
			
		||||
    val dateUpload: Long? = null,
 | 
			
		||||
    val chapterNumber: Float? = null,
 | 
			
		||||
    val scanlator: String? = null,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
fun Chapter.toChapterUpdate(): ChapterUpdate {
 | 
			
		||||
    return ChapterUpdate(id, mangaId, read, bookmark, lastPageRead, dateFetch, sourceOrder, url, name, dateUpload, chapterNumber, scanlator)
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
package eu.kanade.domain.chapter.repository
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.chapter.model.Chapter
 | 
			
		||||
import eu.kanade.domain.chapter.model.ChapterUpdate
 | 
			
		||||
import kotlinx.coroutines.flow.Flow
 | 
			
		||||
import tachiyomi.domain.chapter.model.Chapter
 | 
			
		||||
import tachiyomi.domain.chapter.model.ChapterUpdate
 | 
			
		||||
 | 
			
		||||
interface ChapterRepository {
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
package eu.kanade.domain.download.interactor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.chapter.model.Chapter
 | 
			
		||||
import eu.kanade.domain.manga.model.Manga
 | 
			
		||||
import eu.kanade.tachiyomi.data.download.DownloadManager
 | 
			
		||||
import eu.kanade.tachiyomi.source.SourceManager
 | 
			
		||||
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
 | 
			
		||||
import tachiyomi.domain.chapter.model.Chapter
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
 | 
			
		||||
class DeleteDownload(
 | 
			
		||||
    private val sourceManager: SourceManager,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
package eu.kanade.domain.history.interactor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.chapter.interactor.GetChapterByMangaId
 | 
			
		||||
import eu.kanade.domain.chapter.model.Chapter
 | 
			
		||||
import eu.kanade.domain.history.repository.HistoryRepository
 | 
			
		||||
import eu.kanade.domain.manga.interactor.GetManga
 | 
			
		||||
import eu.kanade.tachiyomi.util.chapter.getChapterSort
 | 
			
		||||
import tachiyomi.domain.chapter.model.Chapter
 | 
			
		||||
import kotlin.math.max
 | 
			
		||||
 | 
			
		||||
class GetNextChapters(
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
package eu.kanade.domain.library.model
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.manga.model.Manga
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
 | 
			
		||||
data class LibraryManga(
 | 
			
		||||
    val manga: Manga,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
package eu.kanade.domain.library.service
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.manga.model.Manga
 | 
			
		||||
import eu.kanade.tachiyomi.core.preference.PreferenceStore
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.DEVICE_ONLY_ON_WIFI
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.MANGA_HAS_UNREAD
 | 
			
		||||
@@ -9,6 +8,7 @@ import eu.kanade.tachiyomi.data.preference.MANGA_NON_READ
 | 
			
		||||
import eu.kanade.tachiyomi.widget.ExtendedNavigationView
 | 
			
		||||
import tachiyomi.domain.library.model.LibraryDisplayMode
 | 
			
		||||
import tachiyomi.domain.library.model.LibrarySort
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
 | 
			
		||||
class LibraryPreferences(
 | 
			
		||||
    private val preferenceStore: PreferenceStore,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
package eu.kanade.domain.manga.interactor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.manga.model.Manga
 | 
			
		||||
import eu.kanade.domain.manga.repository.MangaRepository
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
 | 
			
		||||
class GetDuplicateLibraryManga(
 | 
			
		||||
    private val mangaRepository: MangaRepository,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
package eu.kanade.domain.manga.interactor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.manga.model.Manga
 | 
			
		||||
import eu.kanade.domain.manga.repository.MangaRepository
 | 
			
		||||
import kotlinx.coroutines.flow.Flow
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
 | 
			
		||||
class GetFavorites(
 | 
			
		||||
    private val mangaRepository: MangaRepository,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
package eu.kanade.domain.manga.interactor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.manga.model.Manga
 | 
			
		||||
import eu.kanade.domain.manga.repository.MangaRepository
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.logcat
 | 
			
		||||
import kotlinx.coroutines.flow.Flow
 | 
			
		||||
import logcat.LogPriority
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
 | 
			
		||||
class GetManga(
 | 
			
		||||
    private val mangaRepository: MangaRepository,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
package eu.kanade.domain.manga.interactor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.chapter.model.Chapter
 | 
			
		||||
import eu.kanade.domain.chapter.repository.ChapterRepository
 | 
			
		||||
import eu.kanade.domain.manga.model.Manga
 | 
			
		||||
import eu.kanade.domain.manga.repository.MangaRepository
 | 
			
		||||
import kotlinx.coroutines.flow.Flow
 | 
			
		||||
import kotlinx.coroutines.flow.combine
 | 
			
		||||
import tachiyomi.domain.chapter.model.Chapter
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
 | 
			
		||||
class GetMangaWithChapters(
 | 
			
		||||
    private val mangaRepository: MangaRepository,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
package eu.kanade.domain.manga.interactor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.manga.model.Manga
 | 
			
		||||
import eu.kanade.domain.manga.repository.MangaRepository
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
 | 
			
		||||
class NetworkToLocalManga(
 | 
			
		||||
    private val mangaRepository: MangaRepository,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
package eu.kanade.domain.manga.interactor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.manga.model.Manga
 | 
			
		||||
import eu.kanade.domain.manga.repository.MangaRepository
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
import tachiyomi.domain.manga.model.MangaUpdate
 | 
			
		||||
 | 
			
		||||
class SetMangaChapterFlags(
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
package eu.kanade.domain.manga.interactor
 | 
			
		||||
 | 
			
		||||
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.repository.MangaRepository
 | 
			
		||||
import eu.kanade.tachiyomi.data.cache.CoverCache
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.SManga
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
import tachiyomi.domain.manga.model.MangaUpdate
 | 
			
		||||
import uy.kohesive.injekt.Injekt
 | 
			
		||||
import uy.kohesive.injekt.api.get
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,12 @@
 | 
			
		||||
package eu.kanade.domain.manga.model
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.chapter.model.Chapter
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.SManga
 | 
			
		||||
import kotlinx.serialization.Serializable
 | 
			
		||||
import nl.adaptivity.xmlutil.serialization.XmlElement
 | 
			
		||||
import nl.adaptivity.xmlutil.serialization.XmlSerialName
 | 
			
		||||
import nl.adaptivity.xmlutil.serialization.XmlValue
 | 
			
		||||
import tachiyomi.domain.chapter.model.Chapter
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
 | 
			
		||||
const val COMIC_INFO_FILE = "ComicInfo.xml"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,215 +4,69 @@ import eu.kanade.domain.base.BasePreferences
 | 
			
		||||
import eu.kanade.tachiyomi.data.cache.CoverCache
 | 
			
		||||
import eu.kanade.tachiyomi.source.LocalSource
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.SManga
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.UpdateStrategy
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
 | 
			
		||||
import eu.kanade.tachiyomi.widget.ExtendedNavigationView
 | 
			
		||||
import tachiyomi.domain.manga.model.MangaUpdate
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
import tachiyomi.domain.manga.model.TriStateFilter
 | 
			
		||||
import uy.kohesive.injekt.Injekt
 | 
			
		||||
import uy.kohesive.injekt.api.get
 | 
			
		||||
import java.io.Serializable
 | 
			
		||||
 | 
			
		||||
data class Manga(
 | 
			
		||||
    val id: Long,
 | 
			
		||||
    val source: Long,
 | 
			
		||||
    val favorite: Boolean,
 | 
			
		||||
    val lastUpdate: Long,
 | 
			
		||||
    val dateAdded: Long,
 | 
			
		||||
    val viewerFlags: Long,
 | 
			
		||||
    val chapterFlags: Long,
 | 
			
		||||
    val coverLastModified: Long,
 | 
			
		||||
    val url: String,
 | 
			
		||||
    val title: String,
 | 
			
		||||
    val artist: String?,
 | 
			
		||||
    val author: String?,
 | 
			
		||||
    val description: String?,
 | 
			
		||||
    val genre: List<String>?,
 | 
			
		||||
    val status: Long,
 | 
			
		||||
    val thumbnailUrl: String?,
 | 
			
		||||
    val updateStrategy: UpdateStrategy,
 | 
			
		||||
    val initialized: Boolean,
 | 
			
		||||
) : Serializable {
 | 
			
		||||
// TODO: move these into the domain model
 | 
			
		||||
val Manga.readingModeType: Long
 | 
			
		||||
    get() = viewerFlags and ReadingModeType.MASK.toLong()
 | 
			
		||||
 | 
			
		||||
    val sorting: Long
 | 
			
		||||
        get() = chapterFlags and CHAPTER_SORTING_MASK
 | 
			
		||||
val Manga.orientationType: Long
 | 
			
		||||
    get() = viewerFlags and OrientationType.MASK.toLong()
 | 
			
		||||
 | 
			
		||||
    val displayMode: Long
 | 
			
		||||
        get() = chapterFlags and CHAPTER_DISPLAY_MASK
 | 
			
		||||
 | 
			
		||||
    val unreadFilterRaw: Long
 | 
			
		||||
        get() = chapterFlags and CHAPTER_UNREAD_MASK
 | 
			
		||||
 | 
			
		||||
    val downloadedFilterRaw: Long
 | 
			
		||||
        get() = chapterFlags and CHAPTER_DOWNLOADED_MASK
 | 
			
		||||
 | 
			
		||||
    val bookmarkedFilterRaw: Long
 | 
			
		||||
        get() = chapterFlags and CHAPTER_BOOKMARKED_MASK
 | 
			
		||||
 | 
			
		||||
    val readingModeType: Long
 | 
			
		||||
        get() = viewerFlags and ReadingModeType.MASK.toLong()
 | 
			
		||||
 | 
			
		||||
    val orientationType: Long
 | 
			
		||||
        get() = viewerFlags and OrientationType.MASK.toLong()
 | 
			
		||||
 | 
			
		||||
    val unreadFilter: TriStateFilter
 | 
			
		||||
        get() = when (unreadFilterRaw) {
 | 
			
		||||
            CHAPTER_SHOW_UNREAD -> TriStateFilter.ENABLED_IS
 | 
			
		||||
            CHAPTER_SHOW_READ -> TriStateFilter.ENABLED_NOT
 | 
			
		||||
val Manga.downloadedFilter: TriStateFilter
 | 
			
		||||
    get() {
 | 
			
		||||
        if (forceDownloaded()) return TriStateFilter.ENABLED_IS
 | 
			
		||||
        return when (downloadedFilterRaw) {
 | 
			
		||||
            Manga.CHAPTER_SHOW_DOWNLOADED -> TriStateFilter.ENABLED_IS
 | 
			
		||||
            Manga.CHAPTER_SHOW_NOT_DOWNLOADED -> TriStateFilter.ENABLED_NOT
 | 
			
		||||
            else -> TriStateFilter.DISABLED
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    val downloadedFilter: TriStateFilter
 | 
			
		||||
        get() {
 | 
			
		||||
            if (forceDownloaded()) return TriStateFilter.ENABLED_IS
 | 
			
		||||
            return when (downloadedFilterRaw) {
 | 
			
		||||
                CHAPTER_SHOW_DOWNLOADED -> TriStateFilter.ENABLED_IS
 | 
			
		||||
                CHAPTER_SHOW_NOT_DOWNLOADED -> TriStateFilter.ENABLED_NOT
 | 
			
		||||
                else -> TriStateFilter.DISABLED
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    val bookmarkedFilter: TriStateFilter
 | 
			
		||||
        get() = when (bookmarkedFilterRaw) {
 | 
			
		||||
            CHAPTER_SHOW_BOOKMARKED -> TriStateFilter.ENABLED_IS
 | 
			
		||||
            CHAPTER_SHOW_NOT_BOOKMARKED -> TriStateFilter.ENABLED_NOT
 | 
			
		||||
            else -> TriStateFilter.DISABLED
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    fun chaptersFiltered(): Boolean {
 | 
			
		||||
        return unreadFilter != TriStateFilter.DISABLED ||
 | 
			
		||||
            downloadedFilter != TriStateFilter.DISABLED ||
 | 
			
		||||
            bookmarkedFilter != TriStateFilter.DISABLED
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun forceDownloaded(): Boolean {
 | 
			
		||||
        return favorite && Injekt.get<BasePreferences>().downloadedOnly().get()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun sortDescending(): Boolean {
 | 
			
		||||
        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
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun copyFrom(other: SManga): Manga {
 | 
			
		||||
        val author = other.author ?: author
 | 
			
		||||
        val artist = other.artist ?: artist
 | 
			
		||||
        val description = other.description ?: description
 | 
			
		||||
        val genres = if (other.genre != null) {
 | 
			
		||||
            other.getGenres()
 | 
			
		||||
        } else {
 | 
			
		||||
            genre
 | 
			
		||||
        }
 | 
			
		||||
        val thumbnailUrl = other.thumbnail_url ?: thumbnailUrl
 | 
			
		||||
        return this.copy(
 | 
			
		||||
            author = author,
 | 
			
		||||
            artist = artist,
 | 
			
		||||
            description = description,
 | 
			
		||||
            genre = genres,
 | 
			
		||||
            thumbnailUrl = thumbnailUrl,
 | 
			
		||||
            status = other.status.toLong(),
 | 
			
		||||
            updateStrategy = other.update_strategy,
 | 
			
		||||
            initialized = other.initialized && initialized,
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    companion object {
 | 
			
		||||
        // Generic filter that does not filter anything
 | 
			
		||||
        const val SHOW_ALL = 0x00000000L
 | 
			
		||||
 | 
			
		||||
        const val CHAPTER_SORT_DESC = 0x00000000L
 | 
			
		||||
        const val CHAPTER_SORT_ASC = 0x00000001L
 | 
			
		||||
        const val CHAPTER_SORT_DIR_MASK = 0x00000001L
 | 
			
		||||
 | 
			
		||||
        const val CHAPTER_SHOW_UNREAD = 0x00000002L
 | 
			
		||||
        const val CHAPTER_SHOW_READ = 0x00000004L
 | 
			
		||||
        const val CHAPTER_UNREAD_MASK = 0x00000006L
 | 
			
		||||
 | 
			
		||||
        const val CHAPTER_SHOW_DOWNLOADED = 0x00000008L
 | 
			
		||||
        const val CHAPTER_SHOW_NOT_DOWNLOADED = 0x00000010L
 | 
			
		||||
        const val CHAPTER_DOWNLOADED_MASK = 0x00000018L
 | 
			
		||||
 | 
			
		||||
        const val CHAPTER_SHOW_BOOKMARKED = 0x00000020L
 | 
			
		||||
        const val CHAPTER_SHOW_NOT_BOOKMARKED = 0x00000040L
 | 
			
		||||
        const val CHAPTER_BOOKMARKED_MASK = 0x00000060L
 | 
			
		||||
 | 
			
		||||
        const val CHAPTER_SORTING_SOURCE = 0x00000000L
 | 
			
		||||
        const val CHAPTER_SORTING_NUMBER = 0x00000100L
 | 
			
		||||
        const val CHAPTER_SORTING_UPLOAD_DATE = 0x00000200L
 | 
			
		||||
        const val CHAPTER_SORTING_MASK = 0x00000300L
 | 
			
		||||
 | 
			
		||||
        const val CHAPTER_DISPLAY_NAME = 0x00000000L
 | 
			
		||||
        const val CHAPTER_DISPLAY_NUMBER = 0x00100000L
 | 
			
		||||
        const val CHAPTER_DISPLAY_MASK = 0x00100000L
 | 
			
		||||
 | 
			
		||||
        fun create() = Manga(
 | 
			
		||||
            id = -1L,
 | 
			
		||||
            url = "",
 | 
			
		||||
            title = "",
 | 
			
		||||
            source = -1L,
 | 
			
		||||
            favorite = false,
 | 
			
		||||
            lastUpdate = 0L,
 | 
			
		||||
            dateAdded = 0L,
 | 
			
		||||
            viewerFlags = 0L,
 | 
			
		||||
            chapterFlags = 0L,
 | 
			
		||||
            coverLastModified = 0L,
 | 
			
		||||
            artist = null,
 | 
			
		||||
            author = null,
 | 
			
		||||
            description = null,
 | 
			
		||||
            genre = null,
 | 
			
		||||
            status = 0L,
 | 
			
		||||
            thumbnailUrl = null,
 | 
			
		||||
            updateStrategy = UpdateStrategy.ALWAYS_UPDATE,
 | 
			
		||||
            initialized = false,
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
fun Manga.chaptersFiltered(): Boolean {
 | 
			
		||||
    return unreadFilter != TriStateFilter.DISABLED ||
 | 
			
		||||
        downloadedFilter != TriStateFilter.DISABLED ||
 | 
			
		||||
        bookmarkedFilter != TriStateFilter.DISABLED
 | 
			
		||||
}
 | 
			
		||||
fun Manga.forceDownloaded(): Boolean {
 | 
			
		||||
    return favorite && Injekt.get<BasePreferences>().downloadedOnly().get()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
enum class TriStateFilter {
 | 
			
		||||
    DISABLED, // Disable filter
 | 
			
		||||
    ENABLED_IS, // Enabled with "is" filter
 | 
			
		||||
    ENABLED_NOT, // Enabled with "not" filter
 | 
			
		||||
fun Manga.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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fun TriStateFilter.toTriStateGroupState(): ExtendedNavigationView.Item.TriStateGroup.State {
 | 
			
		||||
    return when (this) {
 | 
			
		||||
        TriStateFilter.DISABLED -> ExtendedNavigationView.Item.TriStateGroup.State.IGNORE
 | 
			
		||||
        TriStateFilter.ENABLED_IS -> ExtendedNavigationView.Item.TriStateGroup.State.INCLUDE
 | 
			
		||||
        TriStateFilter.ENABLED_NOT -> ExtendedNavigationView.Item.TriStateGroup.State.EXCLUDE
 | 
			
		||||
fun Manga.copyFrom(other: SManga): Manga {
 | 
			
		||||
    val author = other.author ?: author
 | 
			
		||||
    val artist = other.artist ?: artist
 | 
			
		||||
    val description = other.description ?: description
 | 
			
		||||
    val genres = if (other.genre != null) {
 | 
			
		||||
        other.getGenres()
 | 
			
		||||
    } else {
 | 
			
		||||
        genre
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fun Manga.toMangaUpdate(): MangaUpdate {
 | 
			
		||||
    return MangaUpdate(
 | 
			
		||||
        id = id,
 | 
			
		||||
        source = source,
 | 
			
		||||
        favorite = favorite,
 | 
			
		||||
        lastUpdate = lastUpdate,
 | 
			
		||||
        dateAdded = dateAdded,
 | 
			
		||||
        viewerFlags = viewerFlags,
 | 
			
		||||
        chapterFlags = chapterFlags,
 | 
			
		||||
        coverLastModified = coverLastModified,
 | 
			
		||||
        url = url,
 | 
			
		||||
        title = title,
 | 
			
		||||
        artist = artist,
 | 
			
		||||
    val thumbnailUrl = other.thumbnail_url ?: thumbnailUrl
 | 
			
		||||
    return this.copy(
 | 
			
		||||
        author = author,
 | 
			
		||||
        artist = artist,
 | 
			
		||||
        description = description,
 | 
			
		||||
        genre = genre,
 | 
			
		||||
        status = status,
 | 
			
		||||
        genre = genres,
 | 
			
		||||
        thumbnailUrl = thumbnailUrl,
 | 
			
		||||
        updateStrategy = updateStrategy,
 | 
			
		||||
        initialized = initialized,
 | 
			
		||||
        status = other.status.toLong(),
 | 
			
		||||
        updateStrategy = other.update_strategy,
 | 
			
		||||
        initialized = other.initialized && initialized,
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
package eu.kanade.domain.manga.model
 | 
			
		||||
 | 
			
		||||
import tachiyomi.domain.manga.model.MangaCover
 | 
			
		||||
 | 
			
		||||
fun Manga.asMangaCover(): MangaCover {
 | 
			
		||||
    return MangaCover(
 | 
			
		||||
        mangaId = id,
 | 
			
		||||
        sourceId = source,
 | 
			
		||||
        isMangaFavorite = favorite,
 | 
			
		||||
        url = thumbnailUrl,
 | 
			
		||||
        lastModified = coverLastModified,
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
package eu.kanade.domain.manga.repository
 | 
			
		||||
 | 
			
		||||
import eu.kanade.domain.library.model.LibraryManga
 | 
			
		||||
import eu.kanade.domain.manga.model.Manga
 | 
			
		||||
import kotlinx.coroutines.flow.Flow
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
import tachiyomi.domain.manga.model.MangaUpdate
 | 
			
		||||
 | 
			
		||||
interface MangaRepository {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user