From 8c5231bb3d26a6a99465551a4b91d8d8e869afdf Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sun, 13 Oct 2024 14:08:25 +0300 Subject: [PATCH] Fix read chapters deletion --- .../local/domain/DeleteReadChaptersUseCase.kt | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/local/domain/DeleteReadChaptersUseCase.kt b/app/src/main/kotlin/org/koitharu/kotatsu/local/domain/DeleteReadChaptersUseCase.kt index 877395a40..d19b724ba 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/local/domain/DeleteReadChaptersUseCase.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/local/domain/DeleteReadChaptersUseCase.kt @@ -10,18 +10,22 @@ import kotlinx.coroutines.launch import org.koitharu.kotatsu.core.model.findById import org.koitharu.kotatsu.core.model.ids import org.koitharu.kotatsu.core.model.isLocal +import org.koitharu.kotatsu.core.parser.MangaRepository import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug import org.koitharu.kotatsu.history.data.HistoryRepository import org.koitharu.kotatsu.local.data.LocalMangaRepository import org.koitharu.kotatsu.local.data.LocalStorageChanges import org.koitharu.kotatsu.local.domain.model.LocalManga import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.util.recoverCatchingCancellable import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import javax.inject.Inject class DeleteReadChaptersUseCase @Inject constructor( private val localMangaRepository: LocalMangaRepository, private val historyRepository: HistoryRepository, + private val mangaRepositoryFactory: MangaRepository.Factory, @LocalStorageChanges private val localStorageChanges: MutableSharedFlow, ) { @@ -68,8 +72,8 @@ class DeleteReadChaptersUseCase @Inject constructor( private suspend fun getDeletionTask(manga: LocalManga): DeletionTask? { val history = historyRepository.getOne(manga.manga) ?: return null - val chapters = manga.manga.chapters ?: localMangaRepository.getDetails(manga.manga).chapters - if (chapters.isNullOrEmpty()) { + val chapters = getAllChapters(manga) + if (chapters.isEmpty()) { return null } val branch = (chapters.findById(history.chapterId) ?: return null).branch @@ -89,6 +93,21 @@ class DeleteReadChaptersUseCase @Inject constructor( localStorageChanges.emit(subject.copy(manga = updated)) } + private suspend fun getAllChapters(manga: LocalManga): List = runCatchingCancellable { + val remoteManga = checkNotNull(localMangaRepository.getRemoteManga(manga.manga)) + checkNotNull(mangaRepositoryFactory.create(remoteManga.source).getDetails(remoteManga).chapters) + }.recoverCatchingCancellable { + checkNotNull( + manga.manga.chapters.let { + if (it.isNullOrEmpty()) { + localMangaRepository.getDetails(manga.manga).chapters + } else { + it + } + }, + ) + }.getOrDefault(manga.manga.chapters.orEmpty()) + private class DeletionTask( val manga: LocalManga, val chaptersIds: Set,