Add option to only delete downloads from library

closes #1403
This commit is contained in:
Jays2Kings 2022-09-02 15:00:36 -04:00
parent 454294e247
commit 7416aa40b1
3 changed files with 35 additions and 7 deletions

View file

@ -24,6 +24,7 @@ import android.view.ViewPropertyAnimator
import android.view.ViewTreeObserver import android.view.ViewTreeObserver
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import android.widget.ImageView import android.widget.ImageView
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.ActionMode import androidx.appcompat.view.ActionMode
import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.coordinatorlayout.widget.CoordinatorLayout
@ -94,6 +95,7 @@ import eu.kanade.tachiyomi.ui.source.globalsearch.GlobalSearchController
import eu.kanade.tachiyomi.util.isLocal import eu.kanade.tachiyomi.util.isLocal
import eu.kanade.tachiyomi.util.moveCategories import eu.kanade.tachiyomi.util.moveCategories
import eu.kanade.tachiyomi.util.system.contextCompatDrawable import eu.kanade.tachiyomi.util.system.contextCompatDrawable
import eu.kanade.tachiyomi.util.system.disableItems
import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.system.dpToPx
import eu.kanade.tachiyomi.util.system.getResourceColor import eu.kanade.tachiyomi.util.system.getResourceColor
import eu.kanade.tachiyomi.util.system.getResourceDrawable import eu.kanade.tachiyomi.util.system.getResourceDrawable
@ -1952,13 +1954,35 @@ class LibraryController(
R.id.action_move_to_category -> showChangeMangaCategoriesSheet() R.id.action_move_to_category -> showChangeMangaCategoriesSheet()
R.id.action_share -> shareManga() R.id.action_share -> shareManga()
R.id.action_delete -> { R.id.action_delete -> {
val options = arrayOf(
R.string.remove_downloads,
R.string.remove_from_library,
)
.map { activity!!.getString(it) }
activity!!.materialAlertDialog() activity!!.materialAlertDialog()
.setMessage(R.string.remove_from_library_question) .setTitle(R.string.remove)
.setPositiveButton(R.string.remove) { _, _ -> .setMultiChoiceItems(
options.toTypedArray(),
options.map { true }.toBooleanArray(),
) { dialog, position, _ ->
if (position == 0) {
val listView = (dialog as AlertDialog).listView
listView.setItemChecked(position, true)
}
}
.setPositiveButton(R.string.remove) { dialog, _ ->
val listView = (dialog as AlertDialog).listView
if (listView.isItemChecked(1)) {
deleteMangasFromLibrary() deleteMangasFromLibrary()
} else {
val mangas = selectedMangas.toList()
presenter.confirmDeletion(mangas, false)
}
} }
.setNegativeButton(android.R.string.cancel, null) .setNegativeButton(android.R.string.cancel, null)
.show() .show().apply {
disableItems(arrayOf(options.first()))
}
} }
R.id.action_download_unread -> { R.id.action_download_unread -> {
presenter.downloadUnread(selectedMangas.toList()) presenter.downloadUnread(selectedMangas.toList())

View file

@ -920,16 +920,21 @@ class LibraryPresenter(
} }
/** Remove manga from the library and delete the downloads */ /** Remove manga from the library and delete the downloads */
fun confirmDeletion(mangas: List<Manga>) { fun confirmDeletion(mangas: List<Manga>, coverCacheToo: Boolean = true) {
launchIO { launchIO {
val mangaToDelete = mangas.distinctBy { it.id } val mangaToDelete = mangas.distinctBy { it.id }
mangaToDelete.forEach { manga -> mangaToDelete.forEach { manga ->
if (coverCacheToo) {
coverCache.deleteFromCache(manga) coverCache.deleteFromCache(manga)
}
val source = sourceManager.get(manga.source) as? HttpSource val source = sourceManager.get(manga.source) as? HttpSource
if (source != null) { if (source != null) {
downloadManager.deleteManga(manga, source) downloadManager.deleteManga(manga, source)
} }
} }
if (!coverCacheToo) {
requestDownloadBadgesUpdate()
}
} }
} }

View file

@ -133,7 +133,6 @@
<string name="updating_library">Updating library</string> <string name="updating_library">Updating library</string>
<string name="selected_">Selected: %1$d</string> <string name="selected_">Selected: %1$d</string>
<string name="local">Local</string> <string name="local">Local</string>
<string name="remove_from_library_question">Remove from library?</string>
<string name="library_search_hint">Search title, tags, source</string> <string name="library_search_hint">Search title, tags, source</string>
<string name="library_is_empty_add_from_browse">Your library is empty, add series to your <string name="library_is_empty_add_from_browse">Your library is empty, add series to your
library from the browse tab.</string> library from the browse tab.</string>