mirror of
https://github.com/mihonapp/mihon.git
synced 2025-11-17 22:47:29 +01:00
Migrate to more domain model usages
This commit is contained in:
@@ -12,7 +12,6 @@ import eu.kanade.domain.manga.interactor.UpdateManga
|
||||
import eu.kanade.domain.manga.model.Manga
|
||||
import eu.kanade.domain.manga.model.MangaUpdate
|
||||
import eu.kanade.domain.manga.model.hasCustomCover
|
||||
import eu.kanade.domain.manga.model.toDbManga
|
||||
import eu.kanade.domain.track.interactor.GetTracks
|
||||
import eu.kanade.domain.track.interactor.InsertTrack
|
||||
import eu.kanade.tachiyomi.core.preference.Preference
|
||||
@@ -189,7 +188,7 @@ class SearchPresenter(
|
||||
// Update custom cover (recheck if custom cover exists)
|
||||
if (migrateCustomCover && prevManga.hasCustomCover()) {
|
||||
@Suppress("BlockingMethodInNonBlockingContext")
|
||||
coverCache.setCustomCoverToCache(manga.toDbManga(), coverCache.getCustomCoverFile(prevManga.id).inputStream())
|
||||
coverCache.setCustomCoverToCache(manga, coverCache.getCustomCoverFile(prevManga.id).inputStream())
|
||||
}
|
||||
|
||||
updateManga.await(
|
||||
|
||||
@@ -22,6 +22,7 @@ import eu.kanade.core.prefs.mapAsCheckboxState
|
||||
import eu.kanade.domain.base.BasePreferences
|
||||
import eu.kanade.domain.category.interactor.GetCategories
|
||||
import eu.kanade.domain.category.interactor.SetMangaCategories
|
||||
import eu.kanade.domain.category.model.Category
|
||||
import eu.kanade.domain.chapter.interactor.GetChapterByMangaId
|
||||
import eu.kanade.domain.chapter.interactor.SetMangaDefaultChapterFlags
|
||||
import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay
|
||||
@@ -30,6 +31,7 @@ import eu.kanade.domain.manga.interactor.GetDuplicateLibraryManga
|
||||
import eu.kanade.domain.manga.interactor.GetManga
|
||||
import eu.kanade.domain.manga.interactor.NetworkToLocalManga
|
||||
import eu.kanade.domain.manga.interactor.UpdateManga
|
||||
import eu.kanade.domain.manga.model.Manga
|
||||
import eu.kanade.domain.manga.model.toDbManga
|
||||
import eu.kanade.domain.manga.model.toDomainManga
|
||||
import eu.kanade.domain.manga.model.toMangaUpdate
|
||||
@@ -76,8 +78,6 @@ import logcat.LogPriority
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import java.util.Date
|
||||
import eu.kanade.domain.category.model.Category as DomainCategory
|
||||
import eu.kanade.domain.manga.model.Manga as DomainManga
|
||||
|
||||
open class BrowseSourcePresenter(
|
||||
private val sourceId: Long,
|
||||
@@ -121,7 +121,7 @@ open class BrowseSourcePresenter(
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun getMangaList(): Flow<PagingData<DomainManga>> {
|
||||
fun getMangaList(): Flow<PagingData<Manga>> {
|
||||
return remember(currentFilter) {
|
||||
Pager(
|
||||
PagingConfig(pageSize = 25),
|
||||
@@ -140,7 +140,7 @@ open class BrowseSourcePresenter(
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun getManga(initialManga: DomainManga): State<DomainManga> {
|
||||
fun getManga(initialManga: Manga): State<Manga> {
|
||||
return produceState(initialValue = initialManga) {
|
||||
getManga.subscribe(initialManga.url, initialManga.source)
|
||||
.collectLatest { manga ->
|
||||
@@ -186,7 +186,7 @@ open class BrowseSourcePresenter(
|
||||
*
|
||||
* @param manga to initialize.
|
||||
*/
|
||||
private suspend fun initializeManga(manga: DomainManga) {
|
||||
private suspend fun initializeManga(manga: Manga) {
|
||||
if (manga.thumbnailUrl != null || manga.initialized) return
|
||||
withNonCancellableContext {
|
||||
try {
|
||||
@@ -206,7 +206,7 @@ open class BrowseSourcePresenter(
|
||||
*
|
||||
* @param manga the manga to update.
|
||||
*/
|
||||
fun changeMangaFavorite(manga: DomainManga) {
|
||||
fun changeMangaFavorite(manga: Manga) {
|
||||
presenterScope.launch {
|
||||
var new = manga.copy(
|
||||
favorite = !manga.favorite,
|
||||
@@ -228,11 +228,11 @@ open class BrowseSourcePresenter(
|
||||
}
|
||||
}
|
||||
|
||||
fun getSourceOrStub(manga: DomainManga): Source {
|
||||
fun getSourceOrStub(manga: Manga): Source {
|
||||
return sourceManager.getOrStub(manga.source)
|
||||
}
|
||||
|
||||
fun addFavorite(manga: DomainManga) {
|
||||
fun addFavorite(manga: Manga) {
|
||||
presenterScope.launch {
|
||||
val categories = getCategories()
|
||||
val defaultCategoryId = libraryPreferences.defaultCategory().get()
|
||||
@@ -262,7 +262,7 @@ open class BrowseSourcePresenter(
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun autoAddTrack(manga: DomainManga) {
|
||||
private suspend fun autoAddTrack(manga: Manga) {
|
||||
loggedServices
|
||||
.filterIsInstance<EnhancedTrackService>()
|
||||
.filter { it.accept(source!!) }
|
||||
@@ -287,22 +287,22 @@ open class BrowseSourcePresenter(
|
||||
*
|
||||
* @return List of categories, not including the default category
|
||||
*/
|
||||
suspend fun getCategories(): List<DomainCategory> {
|
||||
suspend fun getCategories(): List<Category> {
|
||||
return getCategories.subscribe()
|
||||
.firstOrNull()
|
||||
?.filterNot { it.isSystemCategory }
|
||||
?: emptyList()
|
||||
}
|
||||
|
||||
suspend fun getDuplicateLibraryManga(manga: DomainManga): DomainManga? {
|
||||
suspend fun getDuplicateLibraryManga(manga: Manga): Manga? {
|
||||
return getDuplicateLibraryManga.await(manga.title, manga.source)
|
||||
}
|
||||
|
||||
fun moveMangaToCategories(manga: DomainManga, vararg categories: DomainCategory) {
|
||||
fun moveMangaToCategories(manga: Manga, vararg categories: Category) {
|
||||
moveMangaToCategories(manga, categories.filter { it.id != 0L }.map { it.id })
|
||||
}
|
||||
|
||||
fun moveMangaToCategories(manga: DomainManga, categoryIds: List<Long>) {
|
||||
fun moveMangaToCategories(manga: Manga, categoryIds: List<Long>) {
|
||||
presenterScope.launchIO {
|
||||
setMangaCategories.await(
|
||||
mangaId = manga.id,
|
||||
@@ -328,11 +328,11 @@ open class BrowseSourcePresenter(
|
||||
}
|
||||
|
||||
sealed class Dialog {
|
||||
data class RemoveManga(val manga: DomainManga) : Dialog()
|
||||
data class AddDuplicateManga(val manga: DomainManga, val duplicate: DomainManga) : Dialog()
|
||||
data class RemoveManga(val manga: Manga) : Dialog()
|
||||
data class AddDuplicateManga(val manga: Manga, val duplicate: Manga) : Dialog()
|
||||
data class ChangeMangaCategory(
|
||||
val manga: DomainManga,
|
||||
val initialSelection: List<CheckboxState.State<DomainCategory>>,
|
||||
val manga: Manga,
|
||||
val initialSelection: List<CheckboxState.State<Category>>,
|
||||
) : Dialog()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ import eu.kanade.domain.chapter.model.Chapter
|
||||
import eu.kanade.domain.library.model.LibraryManga
|
||||
import eu.kanade.domain.manga.model.Manga
|
||||
import eu.kanade.domain.manga.model.isLocal
|
||||
import eu.kanade.domain.manga.model.toDbManga
|
||||
import eu.kanade.presentation.components.ChangeCategoryDialog
|
||||
import eu.kanade.presentation.components.DeleteLibraryMangaDialog
|
||||
import eu.kanade.presentation.library.LibraryScreen
|
||||
@@ -102,7 +101,7 @@ class LibraryController(
|
||||
containsLocalManga = dialog.manga.any(Manga::isLocal),
|
||||
onDismissRequest = onDismissRequest,
|
||||
onConfirm = { deleteManga, deleteChapter ->
|
||||
presenter.removeMangas(dialog.manga.map { it.toDbManga() }, deleteManga, deleteChapter)
|
||||
presenter.removeMangas(dialog.manga, deleteManga, deleteChapter)
|
||||
presenter.clearSelection()
|
||||
},
|
||||
)
|
||||
|
||||
@@ -20,7 +20,6 @@ import eu.kanade.domain.category.model.Category
|
||||
import eu.kanade.domain.chapter.interactor.GetChapterByMangaId
|
||||
import eu.kanade.domain.chapter.interactor.SetReadStatus
|
||||
import eu.kanade.domain.chapter.model.Chapter
|
||||
import eu.kanade.domain.chapter.model.toDbChapter
|
||||
import eu.kanade.domain.history.interactor.GetNextChapters
|
||||
import eu.kanade.domain.library.model.LibraryManga
|
||||
import eu.kanade.domain.library.model.LibrarySort
|
||||
@@ -38,7 +37,6 @@ import eu.kanade.presentation.library.LibraryStateImpl
|
||||
import eu.kanade.presentation.library.components.LibraryToolbarTitle
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.cache.CoverCache
|
||||
import eu.kanade.tachiyomi.data.database.models.toDomainManga
|
||||
import eu.kanade.tachiyomi.data.download.DownloadCache
|
||||
import eu.kanade.tachiyomi.data.download.DownloadManager
|
||||
import eu.kanade.tachiyomi.data.track.TrackManager
|
||||
@@ -64,7 +62,6 @@ import uy.kohesive.injekt.api.get
|
||||
import java.text.Collator
|
||||
import java.util.Collections
|
||||
import java.util.Locale
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga as DbManga
|
||||
|
||||
/**
|
||||
* Class containing library information.
|
||||
@@ -432,7 +429,7 @@ class LibraryPresenter(
|
||||
}
|
||||
.let { if (amount != null) it.take(amount) else it }
|
||||
|
||||
downloadManager.downloadChapters(manga, chapters.map { it.toDbChapter() })
|
||||
downloadManager.downloadChapters(manga, chapters)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -460,7 +457,7 @@ class LibraryPresenter(
|
||||
* @param deleteFromLibrary whether to delete manga from library.
|
||||
* @param deleteChapters whether to delete downloaded chapters.
|
||||
*/
|
||||
fun removeMangas(mangaList: List<DbManga>, deleteFromLibrary: Boolean, deleteChapters: Boolean) {
|
||||
fun removeMangas(mangaList: List<Manga>, deleteFromLibrary: Boolean, deleteChapters: Boolean) {
|
||||
presenterScope.launchNonCancellable {
|
||||
val mangaToDelete = mangaList.distinctBy { it.id }
|
||||
|
||||
@@ -469,7 +466,7 @@ class LibraryPresenter(
|
||||
it.removeCovers(coverCache)
|
||||
MangaUpdate(
|
||||
favorite = false,
|
||||
id = it.id!!,
|
||||
id = it.id,
|
||||
)
|
||||
}
|
||||
updateManga.awaitAll(toDelete)
|
||||
@@ -479,7 +476,7 @@ class LibraryPresenter(
|
||||
mangaToDelete.forEach { manga ->
|
||||
val source = sourceManager.get(manga.source) as? HttpSource
|
||||
if (source != null) {
|
||||
downloadManager.deleteManga(manga.toDomainManga()!!, source)
|
||||
downloadManager.deleteManga(manga, source)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource
|
||||
import eu.kanade.domain.chapter.interactor.UpdateChapter
|
||||
import eu.kanade.domain.chapter.model.Chapter
|
||||
import eu.kanade.domain.chapter.model.ChapterUpdate
|
||||
import eu.kanade.domain.chapter.model.toDbChapter
|
||||
import eu.kanade.domain.download.service.DownloadPreferences
|
||||
import eu.kanade.domain.library.service.LibraryPreferences
|
||||
import eu.kanade.domain.manga.interactor.GetDuplicateLibraryManga
|
||||
@@ -289,7 +288,7 @@ class MangaInfoScreenModel(
|
||||
// Remove from library
|
||||
if (updateManga.awaitUpdateFavorite(manga.id, false)) {
|
||||
// Remove covers and update last modified in db
|
||||
if (manga.toDbManga().removeCovers() > 0) {
|
||||
if (manga.removeCovers() != manga) {
|
||||
updateManga.awaitUpdateCoverLastModified(manga.id)
|
||||
}
|
||||
withUIContext { onRemoved() }
|
||||
@@ -689,7 +688,7 @@ class MangaInfoScreenModel(
|
||||
*/
|
||||
private fun downloadChapters(chapters: List<Chapter>) {
|
||||
val manga = successState?.manga ?: return
|
||||
downloadManager.downloadChapters(manga, chapters.map { it.toDbChapter() })
|
||||
downloadManager.downloadChapters(manga, chapters)
|
||||
toggleAllSelection(false)
|
||||
}
|
||||
|
||||
@@ -717,7 +716,7 @@ class MangaInfoScreenModel(
|
||||
try {
|
||||
successState?.let { state ->
|
||||
downloadManager.deleteChapters(
|
||||
chapters.map { it.toDbChapter() },
|
||||
chapters,
|
||||
state.manga,
|
||||
state.source,
|
||||
)
|
||||
|
||||
@@ -23,6 +23,7 @@ import eu.kanade.domain.track.interactor.InsertTrack
|
||||
import eu.kanade.domain.track.model.toDbTrack
|
||||
import eu.kanade.domain.track.service.TrackPreferences
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.data.database.models.toDomainChapter
|
||||
import eu.kanade.tachiyomi.data.database.models.toDomainManga
|
||||
import eu.kanade.tachiyomi.data.download.DownloadManager
|
||||
import eu.kanade.tachiyomi.data.download.DownloadProvider
|
||||
@@ -479,7 +480,7 @@ class ReaderPresenter(
|
||||
.take(amount)
|
||||
downloadManager.downloadChapters(
|
||||
manga.toDomainManga()!!,
|
||||
chaptersToDownload.map { it.toDbChapter() },
|
||||
chaptersToDownload,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -489,7 +490,7 @@ class ReaderPresenter(
|
||||
* if setting is enabled and [currentChapter] is queued for download
|
||||
*/
|
||||
private fun deleteChapterFromDownloadQueue(currentChapter: ReaderChapter): Download? {
|
||||
return downloadManager.getChapterDownloadOrNull(currentChapter.chapter)?.apply {
|
||||
return downloadManager.getChapterDownloadOrNull(currentChapter.chapter.toDomainChapter()!!)?.apply {
|
||||
downloadManager.deletePendingDownload(this)
|
||||
}
|
||||
}
|
||||
@@ -874,7 +875,7 @@ class ReaderPresenter(
|
||||
val manga = manga ?: return
|
||||
|
||||
presenterScope.launchNonCancellable {
|
||||
downloadManager.enqueueDeleteChapters(listOf(chapter.chapter), manga.toDomainManga()!!)
|
||||
downloadManager.enqueueDeleteChapters(listOf(chapter.chapter.toDomainChapter()!!), manga.toDomainManga()!!)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.app.Application
|
||||
import android.net.Uri
|
||||
import com.hippo.unifile.UniFile
|
||||
import eu.kanade.domain.manga.model.Manga
|
||||
import eu.kanade.tachiyomi.data.database.models.toDomainChapter
|
||||
import eu.kanade.tachiyomi.data.download.DownloadManager
|
||||
import eu.kanade.tachiyomi.data.download.DownloadProvider
|
||||
import eu.kanade.tachiyomi.source.Source
|
||||
@@ -47,7 +48,7 @@ class DownloadPageLoader(
|
||||
}
|
||||
|
||||
private fun getPagesFromDirectory(): Observable<List<ReaderPage>> {
|
||||
return downloadManager.buildPageList(source, manga, chapter.chapter)
|
||||
return downloadManager.buildPageList(source, manga, chapter.chapter.toDomainChapter()!!)
|
||||
.map { pages ->
|
||||
pages.map { page ->
|
||||
ReaderPage(page.index, page.url, page.imageUrl) {
|
||||
|
||||
@@ -9,7 +9,6 @@ import eu.kanade.domain.chapter.interactor.GetChapter
|
||||
import eu.kanade.domain.chapter.interactor.SetReadStatus
|
||||
import eu.kanade.domain.chapter.interactor.UpdateChapter
|
||||
import eu.kanade.domain.chapter.model.ChapterUpdate
|
||||
import eu.kanade.domain.chapter.model.toDbChapter
|
||||
import eu.kanade.domain.library.service.LibraryPreferences
|
||||
import eu.kanade.domain.manga.interactor.GetManga
|
||||
import eu.kanade.domain.ui.UiPreferences
|
||||
@@ -242,7 +241,7 @@ class UpdatesPresenter(
|
||||
val manga = getManga.await(mangaId) ?: continue
|
||||
// Don't download if source isn't available
|
||||
sourceManager.get(manga.source) ?: continue
|
||||
val chapters = updates.mapNotNull { getChapter.await(it.update.chapterId)?.toDbChapter() }
|
||||
val chapters = updates.mapNotNull { getChapter.await(it.update.chapterId) }
|
||||
downloadManager.downloadChapters(manga, chapters)
|
||||
}
|
||||
}
|
||||
@@ -261,7 +260,7 @@ class UpdatesPresenter(
|
||||
.forEach { (mangaId, updates) ->
|
||||
val manga = getManga.await(mangaId) ?: return@forEach
|
||||
val source = sourceManager.get(manga.source) ?: return@forEach
|
||||
val chapters = updates.mapNotNull { getChapter.await(it.update.chapterId)?.toDbChapter() }
|
||||
val chapters = updates.mapNotNull { getChapter.await(it.update.chapterId) }
|
||||
downloadManager.deleteChapters(chapters, manga, source)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user