Fix bookmarked chapters being deleted after manually marked as read
Fixes #9520
This commit is contained in:
parent
46efd4c134
commit
8735f3566f
@ -214,19 +214,21 @@ class DownloadManager(
|
|||||||
* @param source the source of the chapters.
|
* @param source the source of the chapters.
|
||||||
*/
|
*/
|
||||||
fun deleteChapters(chapters: List<Chapter>, manga: Manga, source: Source) {
|
fun deleteChapters(chapters: List<Chapter>, manga: Manga, source: Source) {
|
||||||
val filteredChapters = getChaptersToDelete(chapters, manga)
|
launchIO {
|
||||||
if (filteredChapters.isNotEmpty()) {
|
val filteredChapters = getChaptersToDelete(chapters, manga)
|
||||||
launchIO {
|
if (filteredChapters.isEmpty()) {
|
||||||
removeFromDownloadQueue(filteredChapters)
|
return@launchIO
|
||||||
|
}
|
||||||
|
|
||||||
val (mangaDir, chapterDirs) = provider.findChapterDirs(filteredChapters, manga, source)
|
removeFromDownloadQueue(filteredChapters)
|
||||||
chapterDirs.forEach { it.delete() }
|
|
||||||
cache.removeChapters(filteredChapters, manga)
|
|
||||||
|
|
||||||
// Delete manga directory if empty
|
val (mangaDir, chapterDirs) = provider.findChapterDirs(filteredChapters, manga, source)
|
||||||
if (mangaDir?.listFiles()?.isEmpty() == true) {
|
chapterDirs.forEach { it.delete() }
|
||||||
deleteManga(manga, source, removeQueued = false)
|
cache.removeChapters(filteredChapters, manga)
|
||||||
}
|
|
||||||
|
// Delete manga directory if empty
|
||||||
|
if (mangaDir?.listFiles()?.isEmpty() == true) {
|
||||||
|
deleteManga(manga, source, removeQueued = false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -278,7 +280,7 @@ class DownloadManager(
|
|||||||
* @param chapters the list of chapters to delete.
|
* @param chapters the list of chapters to delete.
|
||||||
* @param manga the manga of the chapters.
|
* @param manga the manga of the chapters.
|
||||||
*/
|
*/
|
||||||
fun enqueueChaptersToDelete(chapters: List<Chapter>, manga: Manga) {
|
suspend fun enqueueChaptersToDelete(chapters: List<Chapter>, manga: Manga) {
|
||||||
pendingDeleter.addChapters(getChaptersToDelete(chapters, manga), manga)
|
pendingDeleter.addChapters(getChaptersToDelete(chapters, manga), manga)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -351,22 +353,24 @@ class DownloadManager(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getChaptersToDelete(chapters: List<Chapter>, manga: Manga): List<Chapter> {
|
private suspend fun getChaptersToDelete(chapters: List<Chapter>, manga: Manga): List<Chapter> {
|
||||||
// Retrieve the categories that are set to exclude from being deleted on read
|
// Retrieve the categories that are set to exclude from being deleted on read
|
||||||
val categoriesToExclude = downloadPreferences.removeExcludeCategories().get().map(String::toLong)
|
val categoriesToExclude = downloadPreferences.removeExcludeCategories().get().map(String::toLong)
|
||||||
|
|
||||||
val categoriesForManga = runBlocking { getCategories.await(manga.id) }
|
val categoriesForManga = getCategories.await(manga.id)
|
||||||
.map { it.id }
|
.map { it.id }
|
||||||
.takeUnless { it.isEmpty() }
|
.ifEmpty { listOf(0) }
|
||||||
?: listOf(0)
|
val filteredCategoryManga = if (categoriesForManga.intersect(categoriesToExclude).isNotEmpty()) {
|
||||||
|
|
||||||
return if (categoriesForManga.intersect(categoriesToExclude).isNotEmpty()) {
|
|
||||||
chapters.filterNot { it.read }
|
chapters.filterNot { it.read }
|
||||||
} else if (!downloadPreferences.removeBookmarkedChapters().get()) {
|
|
||||||
chapters.filterNot { it.bookmark }
|
|
||||||
} else {
|
} else {
|
||||||
chapters
|
chapters
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return if (!downloadPreferences.removeBookmarkedChapters().get()) {
|
||||||
|
filteredCategoryManga.filterNot { it.bookmark }
|
||||||
|
} else {
|
||||||
|
filteredCategoryManga
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun statusFlow(): Flow<Download> = queueState
|
fun statusFlow(): Flow<Download> = queueState
|
||||||
|
Loading…
Reference in New Issue
Block a user