fix(merged-entries): Fix deletion of chapters and data folders in merged entries (#1114)
* fix(merged-entries): Fix delete chapters or data folders * spotless * comment * safely using state.source
This commit is contained in:
parent
0c4fd329e0
commit
b067690678
3 changed files with 66 additions and 34 deletions
|
|
@ -443,15 +443,11 @@ class MangaScreenModel(
|
|||
.map { sourceManager.getOrStub(it) },
|
||||
)
|
||||
}
|
||||
val chapters = (
|
||||
if (manga.source ==
|
||||
MERGED_SOURCE_ID
|
||||
) {
|
||||
getMergedChaptersByMangaId.await(mangaId, applyFilter = true)
|
||||
} else {
|
||||
getMangaAndChapters.awaitChapters(mangaId, applyFilter = true)
|
||||
}
|
||||
)
|
||||
val chapters = if (manga.source == MERGED_SOURCE_ID) {
|
||||
getMergedChaptersByMangaId.await(mangaId, applyFilter = true)
|
||||
} else {
|
||||
getMangaAndChapters.awaitChapters(mangaId, applyFilter = true)
|
||||
}
|
||||
.toChapterListItems(manga, mergedData)
|
||||
val meta = getFlatMetadata.await(mangaId)
|
||||
// SY <--
|
||||
|
|
@ -1518,20 +1514,39 @@ class MangaScreenModel(
|
|||
screenModelScope.launchNonCancellable {
|
||||
try {
|
||||
successState?.let { state ->
|
||||
downloadManager.deleteChapters(
|
||||
chapters,
|
||||
state.manga,
|
||||
state.source,
|
||||
// KMK -->
|
||||
ignoreCategoryExclusion = true,
|
||||
// KMK --?
|
||||
if (state.source.id == MERGED_SOURCE_ID) {
|
||||
chapters.groupBy { it.mangaId }.forEach { map ->
|
||||
val manga = state.mergedData?.manga?.get(map.key) ?: return@forEach
|
||||
val source = state.mergedData.sources.find { manga.source == it.id } ?: return@forEach
|
||||
downloadManager.deleteChapters(
|
||||
map.value,
|
||||
manga,
|
||||
source,
|
||||
ignoreCategoryExclusion = true,
|
||||
)
|
||||
if (source.isLocal()) {
|
||||
// Refresh chapters state for Local source
|
||||
fetchChaptersFromSource()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// KMK <--
|
||||
downloadManager.deleteChapters(
|
||||
chapters,
|
||||
state.manga,
|
||||
state.source,
|
||||
// KMK -->
|
||||
ignoreCategoryExclusion = true,
|
||||
// KMK <--
|
||||
)
|
||||
// KMK -->
|
||||
if (state.source.isLocal()) {
|
||||
// Refresh chapters state for Local source
|
||||
fetchChaptersFromSource()
|
||||
}
|
||||
// KMK <--
|
||||
)
|
||||
// KMK -->
|
||||
if (source?.isLocal() == true) {
|
||||
// Refresh chapters state for Local source
|
||||
fetchChaptersFromSource()
|
||||
}
|
||||
// KMK <--
|
||||
}
|
||||
} catch (e: Throwable) {
|
||||
logcat(LogPriority.ERROR, e)
|
||||
|
|
@ -1556,14 +1571,32 @@ class MangaScreenModel(
|
|||
screenModelScope.launchNonCancellable {
|
||||
try {
|
||||
successState?.let { state ->
|
||||
downloadManager.deleteManga(
|
||||
manga = state.manga,
|
||||
source = state.source,
|
||||
removeQueued = true,
|
||||
)
|
||||
if (source?.isLocal() == true) {
|
||||
// Refresh chapters state for Local source
|
||||
fetchChaptersFromSource()
|
||||
if (state.source.id == MERGED_SOURCE_ID) {
|
||||
state.mergedData?.manga
|
||||
?.filterNot { it.key == MERGED_SOURCE_ID }
|
||||
?.forEach { (_, manga) ->
|
||||
val source = state.mergedData.sources.find { manga.source == it.id } ?: return@forEach
|
||||
|
||||
downloadManager.deleteManga(
|
||||
manga = manga,
|
||||
source = source,
|
||||
removeQueued = true,
|
||||
)
|
||||
if (source.isLocal()) {
|
||||
// Refresh chapters state for Local source
|
||||
fetchChaptersFromSource()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
downloadManager.deleteManga(
|
||||
manga = state.manga,
|
||||
source = state.source,
|
||||
removeQueued = true,
|
||||
)
|
||||
if (state.source.isLocal()) {
|
||||
// Refresh chapters state for Local source
|
||||
fetchChaptersFromSource()
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e: Throwable) {
|
||||
|
|
|
|||
|
|
@ -196,8 +196,7 @@ class ReaderViewModel @JvmOverloads constructor(
|
|||
val (chapters, mangaMap) = runBlocking {
|
||||
if (manga.source == MERGED_SOURCE_ID) {
|
||||
getMergedChaptersByMangaId.await(manga.id, applyFilter = true) to
|
||||
getMergedMangaById.await(manga.id)
|
||||
.associateBy { it.id }
|
||||
state.value.mergedManga
|
||||
} else {
|
||||
getChaptersByMangaId.await(manga.id, applyFilter = true) to null
|
||||
}
|
||||
|
|
@ -367,7 +366,7 @@ class ReaderViewModel @JvmOverloads constructor(
|
|||
getMergedMangaById.await(manga.id)
|
||||
}.associateBy { it.id }
|
||||
} else {
|
||||
emptyMap()
|
||||
null
|
||||
}
|
||||
val relativeTime = uiPreferences.relativeTime().get()
|
||||
val autoScrollFreq = readerPreferences.autoscrollInterval().get()
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ class ChapterLoader(
|
|||
private val sourceManager: SourceManager,
|
||||
private val readerPrefs: ReaderPreferences,
|
||||
private val mergedReferences: List<MergedMangaReference>,
|
||||
private val mergedManga: Map<Long, Manga>,
|
||||
private val mergedManga: Map<Long, Manga>?,
|
||||
// SY <--
|
||||
) {
|
||||
|
||||
|
|
@ -109,7 +109,7 @@ class ChapterLoader(
|
|||
} ?: error("Merge reference 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?.get(chapter.chapter.manga_id) ?: error("Manga for merged chapter was null")
|
||||
val isMergedMangaDownloaded = downloadManager.isChapterDownloaded(
|
||||
chapterName = chapter.chapter.name,
|
||||
chapterScanlator = chapter.chapter.scanlator,
|
||||
|
|
|
|||
Loading…
Reference in a new issue