Add option to prevent deleting bookmarked chapters (closes #2082)

This commit is contained in:
arkon 2020-08-09 12:18:05 -04:00
parent b6a1e89535
commit dbaac69fad
6 changed files with 30 additions and 8 deletions

View File

@ -8,6 +8,7 @@ import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.download.model.Download
import eu.kanade.tachiyomi.data.download.model.DownloadQueue import eu.kanade.tachiyomi.data.download.model.DownloadQueue
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.Page
@ -24,10 +25,8 @@ import uy.kohesive.injekt.injectLazy
*/ */
class DownloadManager(private val context: Context) { class DownloadManager(private val context: Context) {
/** private val sourceManager: SourceManager by injectLazy()
* The sources manager. private val preferences: PreferencesHelper by injectLazy()
*/
private val sourceManager by injectLazy<SourceManager>()
/** /**
* Downloads provider, used to retrieve the folders where the chapters are or should be stored. * Downloads provider, used to retrieve the folders where the chapters are or should be stored.
@ -201,9 +200,16 @@ class DownloadManager(private val context: Context) {
*/ */
fun deleteChapters(chapters: List<Chapter>, manga: Manga, source: Source) { fun deleteChapters(chapters: List<Chapter>, manga: Manga, source: Source) {
queue.remove(chapters) queue.remove(chapters)
val chapterDirs = provider.findChapterDirs(chapters, manga, source)
val filteredChapters = if (!preferences.removeBookmarkedChapters()) {
chapters.filterNot { it.bookmark }
} else {
chapters
}
val chapterDirs = provider.findChapterDirs(filteredChapters, manga, source)
chapterDirs.forEach { it.delete() } chapterDirs.forEach { it.delete() }
cache.removeChapters(chapters, manga) cache.removeChapters(filteredChapters, manga)
if (cache.getDownloadCount(manga) == 0) { // Delete manga directory if empty if (cache.getDownloadCount(manga) == 0) { // Delete manga directory if empty
chapterDirs.firstOrNull()?.parentFile?.delete() chapterDirs.firstOrNull()?.parentFile?.delete()
} }

View File

@ -97,6 +97,8 @@ object PreferenceKeys {
const val removeAfterMarkedAsRead = "pref_remove_after_marked_as_read_key" const val removeAfterMarkedAsRead = "pref_remove_after_marked_as_read_key"
const val removeBookmarkedChapters = "pref_remove_bookmarked"
const val libraryUpdateInterval = "pref_library_update_interval_key" const val libraryUpdateInterval = "pref_library_update_interval_key"
const val libraryUpdateRestriction = "library_update_restriction" const val libraryUpdateRestriction = "library_update_restriction"

View File

@ -188,6 +188,8 @@ class PreferencesHelper(val context: Context) {
fun removeAfterMarkedAsRead() = prefs.getBoolean(Keys.removeAfterMarkedAsRead, false) fun removeAfterMarkedAsRead() = prefs.getBoolean(Keys.removeAfterMarkedAsRead, false)
fun removeBookmarkedChapters() = prefs.getBoolean(Keys.removeBookmarkedChapters, false)
fun libraryUpdateInterval() = flowPrefs.getInt(Keys.libraryUpdateInterval, 24) fun libraryUpdateInterval() = flowPrefs.getInt(Keys.libraryUpdateInterval, 24)
fun libraryUpdateRestriction() = prefs.getStringSet(Keys.libraryUpdateRestriction, setOf("wifi")) fun libraryUpdateRestriction() = prefs.getStringSet(Keys.libraryUpdateRestriction, setOf("wifi"))

View File

@ -494,8 +494,14 @@ class MangaPresenter(
* @param chapters the chapters to delete. * @param chapters the chapters to delete.
*/ */
private fun deleteChaptersInternal(chapters: List<ChapterItem>) { private fun deleteChaptersInternal(chapters: List<ChapterItem>) {
downloadManager.deleteChapters(chapters, manga, source) val filteredChapters = if (!preferences.removeBookmarkedChapters()) {
chapters.forEach { chapters.filterNot { it.bookmark }
} else {
chapters
}
downloadManager.deleteChapters(filteredChapters, manga, source)
filteredChapters.forEach {
it.status = Download.NOT_DOWNLOADED it.status = Download.NOT_DOWNLOADED
it.download = null it.download = null
} }

View File

@ -84,6 +84,11 @@ class SettingsDownloadController : SettingsController() {
defaultValue = "-1" defaultValue = "-1"
summary = "%s" summary = "%s"
} }
switchPreference {
key = Keys.removeBookmarkedChapters
titleRes = R.string.pref_remove_bookmarked_chapters
defaultValue = false
}
} }
val dbCategories = db.getCategories().executeAsBlocking() val dbCategories = db.getCategories().executeAsBlocking()

View File

@ -314,6 +314,7 @@
<string name="pref_category_delete_chapters">Delete chapters</string> <string name="pref_category_delete_chapters">Delete chapters</string>
<string name="pref_remove_after_marked_as_read">After manually marked as read</string> <string name="pref_remove_after_marked_as_read">After manually marked as read</string>
<string name="pref_remove_after_read">After reading</string> <string name="pref_remove_after_read">After reading</string>
<string name="pref_remove_bookmarked_chapters">Delete bookmarked chapters</string>
<string name="custom_dir">Custom location</string> <string name="custom_dir">Custom location</string>
<string name="disabled">Disabled</string> <string name="disabled">Disabled</string>
<string name="last_read_chapter">Last read chapter</string> <string name="last_read_chapter">Last read chapter</string>