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) },
|
.map { sourceManager.getOrStub(it) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
val chapters = (
|
val chapters = if (manga.source == MERGED_SOURCE_ID) {
|
||||||
if (manga.source ==
|
getMergedChaptersByMangaId.await(mangaId, applyFilter = true)
|
||||||
MERGED_SOURCE_ID
|
} else {
|
||||||
) {
|
getMangaAndChapters.awaitChapters(mangaId, applyFilter = true)
|
||||||
getMergedChaptersByMangaId.await(mangaId, applyFilter = true)
|
}
|
||||||
} else {
|
|
||||||
getMangaAndChapters.awaitChapters(mangaId, applyFilter = true)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.toChapterListItems(manga, mergedData)
|
.toChapterListItems(manga, mergedData)
|
||||||
val meta = getFlatMetadata.await(mangaId)
|
val meta = getFlatMetadata.await(mangaId)
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
@ -1518,20 +1514,39 @@ class MangaScreenModel(
|
||||||
screenModelScope.launchNonCancellable {
|
screenModelScope.launchNonCancellable {
|
||||||
try {
|
try {
|
||||||
successState?.let { state ->
|
successState?.let { state ->
|
||||||
downloadManager.deleteChapters(
|
// KMK --?
|
||||||
chapters,
|
if (state.source.id == MERGED_SOURCE_ID) {
|
||||||
state.manga,
|
chapters.groupBy { it.mangaId }.forEach { map ->
|
||||||
state.source,
|
val manga = state.mergedData?.manga?.get(map.key) ?: return@forEach
|
||||||
// KMK -->
|
val source = state.mergedData.sources.find { manga.source == it.id } ?: return@forEach
|
||||||
ignoreCategoryExclusion = true,
|
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 <--
|
||||||
)
|
|
||||||
// KMK -->
|
|
||||||
if (source?.isLocal() == true) {
|
|
||||||
// Refresh chapters state for Local source
|
|
||||||
fetchChaptersFromSource()
|
|
||||||
}
|
}
|
||||||
// KMK <--
|
|
||||||
}
|
}
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
logcat(LogPriority.ERROR, e)
|
logcat(LogPriority.ERROR, e)
|
||||||
|
|
@ -1556,14 +1571,32 @@ class MangaScreenModel(
|
||||||
screenModelScope.launchNonCancellable {
|
screenModelScope.launchNonCancellable {
|
||||||
try {
|
try {
|
||||||
successState?.let { state ->
|
successState?.let { state ->
|
||||||
downloadManager.deleteManga(
|
if (state.source.id == MERGED_SOURCE_ID) {
|
||||||
manga = state.manga,
|
state.mergedData?.manga
|
||||||
source = state.source,
|
?.filterNot { it.key == MERGED_SOURCE_ID }
|
||||||
removeQueued = true,
|
?.forEach { (_, manga) ->
|
||||||
)
|
val source = state.mergedData.sources.find { manga.source == it.id } ?: return@forEach
|
||||||
if (source?.isLocal() == true) {
|
|
||||||
// Refresh chapters state for Local source
|
downloadManager.deleteManga(
|
||||||
fetchChaptersFromSource()
|
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) {
|
} catch (e: Throwable) {
|
||||||
|
|
|
||||||
|
|
@ -196,8 +196,7 @@ class ReaderViewModel @JvmOverloads constructor(
|
||||||
val (chapters, mangaMap) = runBlocking {
|
val (chapters, mangaMap) = runBlocking {
|
||||||
if (manga.source == MERGED_SOURCE_ID) {
|
if (manga.source == MERGED_SOURCE_ID) {
|
||||||
getMergedChaptersByMangaId.await(manga.id, applyFilter = true) to
|
getMergedChaptersByMangaId.await(manga.id, applyFilter = true) to
|
||||||
getMergedMangaById.await(manga.id)
|
state.value.mergedManga
|
||||||
.associateBy { it.id }
|
|
||||||
} else {
|
} else {
|
||||||
getChaptersByMangaId.await(manga.id, applyFilter = true) to null
|
getChaptersByMangaId.await(manga.id, applyFilter = true) to null
|
||||||
}
|
}
|
||||||
|
|
@ -367,7 +366,7 @@ class ReaderViewModel @JvmOverloads constructor(
|
||||||
getMergedMangaById.await(manga.id)
|
getMergedMangaById.await(manga.id)
|
||||||
}.associateBy { it.id }
|
}.associateBy { it.id }
|
||||||
} else {
|
} else {
|
||||||
emptyMap()
|
null
|
||||||
}
|
}
|
||||||
val relativeTime = uiPreferences.relativeTime().get()
|
val relativeTime = uiPreferences.relativeTime().get()
|
||||||
val autoScrollFreq = readerPreferences.autoscrollInterval().get()
|
val autoScrollFreq = readerPreferences.autoscrollInterval().get()
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ class ChapterLoader(
|
||||||
private val sourceManager: SourceManager,
|
private val sourceManager: SourceManager,
|
||||||
private val readerPrefs: ReaderPreferences,
|
private val readerPrefs: ReaderPreferences,
|
||||||
private val mergedReferences: List<MergedMangaReference>,
|
private val mergedReferences: List<MergedMangaReference>,
|
||||||
private val mergedManga: Map<Long, Manga>,
|
private val mergedManga: Map<Long, Manga>?,
|
||||||
// SY <--
|
// SY <--
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
|
@ -109,7 +109,7 @@ class ChapterLoader(
|
||||||
} ?: error("Merge reference null")
|
} ?: error("Merge reference null")
|
||||||
val source = sourceManager.get(mangaReference.mangaSourceId)
|
val source = sourceManager.get(mangaReference.mangaSourceId)
|
||||||
?: error("Source ${mangaReference.mangaSourceId} was null")
|
?: 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(
|
val isMergedMangaDownloaded = downloadManager.isChapterDownloaded(
|
||||||
chapterName = chapter.chapter.name,
|
chapterName = chapter.chapter.name,
|
||||||
chapterScanlator = chapter.chapter.scanlator,
|
chapterScanlator = chapter.chapter.scanlator,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue