feat: Added anime clear progress (#531)

* feat: Added anime clear progress

* more stuff added
This commit is contained in:
Ankit Grai 2024-11-20 23:27:03 +05:30 committed by GitHub
parent ff3372754a
commit d01e1c89e0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 142 additions and 9 deletions

View file

@ -9,6 +9,7 @@ import android.widget.ArrayAdapter
import android.widget.ImageButton
import android.widget.LinearLayout
import androidx.core.content.ContextCompat
import androidx.core.content.ContextCompat.getString
import androidx.core.content.ContextCompat.startActivity
import androidx.core.view.isGone
import androidx.core.view.isVisible
@ -17,6 +18,7 @@ import androidx.recyclerview.widget.RecyclerView
import ani.dantotsu.FileUrl
import ani.dantotsu.R
import ani.dantotsu.currActivity
import ani.dantotsu.currContext
import ani.dantotsu.databinding.DialogLayoutBinding
import ani.dantotsu.databinding.ItemMediaSourceBinding
import ani.dantotsu.databinding.ItemChipBinding
@ -38,6 +40,7 @@ import ani.dantotsu.px
import ani.dantotsu.settings.FAQActivity
import ani.dantotsu.settings.saving.PrefManager
import ani.dantotsu.settings.saving.PrefName
import ani.dantotsu.snackString
import ani.dantotsu.toast
import ani.dantotsu.util.customAlertDialog
import com.google.android.material.chip.Chip
@ -278,6 +281,26 @@ class AnimeWatchAdapter(
}
}
}
resetProgress.setOnClickListener {
fragment.requireContext().customAlertDialog().apply {
setTitle(" Delete Progress for all episodes of ${media.nameRomaji}")
setMessage("This will delete all the locally stored progress for all episodes")
setPosButton(R.string.ok){
val prefix = "${media.id}_"
val regex = Regex("^${prefix}\\d+$")
PrefManager.getAllCustomValsForMedia(prefix)
.keys
.filter { it.matches(regex) }
.onEach { key -> PrefManager.removeCustomVal(key) }
snackString("Deleted the progress of all Episodes for ${media.nameRomaji}")
}
setNegButton(R.string.no)
show()
}
}
resetProgressDef.text = getString(currContext()!!,R.string.clear_stored_episode)
// Hidden
mangaScanlatorContainer.visibility = View.GONE
@ -298,6 +321,27 @@ class AnimeWatchAdapter(
}
// Episode Handling
handleEpisodes()
//clear progress
binding.sourceTitle.setOnLongClickListener {
fragment.requireContext().customAlertDialog().apply {
setTitle(" Delete Progress for all episodes of ${media.nameRomaji}")
setMessage("This will delete all the locally stored progress for all episodes")
setPosButton(R.string.ok){
val prefix = "${media.id}_"
val regex = Regex("^${prefix}\\d+$")
PrefManager.getAllCustomValsForMedia(prefix)
.keys
.filter { it.matches(regex) }
.onEach { key -> PrefManager.removeCustomVal(key) }
snackString("Deleted the progress of all Episodes for ${media.nameRomaji}")
}
setNegButton(R.string.no)
show()
}
true
}
}
fun subscribeButton(enabled: Boolean) {

View file

@ -1,6 +1,7 @@
package ani.dantotsu.media.manga
import android.content.Intent
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -10,6 +11,7 @@ import android.widget.ImageButton
import android.widget.LinearLayout
import android.widget.NumberPicker
import androidx.core.content.ContextCompat
import androidx.core.content.ContextCompat.getString
import androidx.core.content.ContextCompat.startActivity
import androidx.core.view.isGone
import androidx.core.view.isVisible
@ -63,6 +65,15 @@ class MangaReadAdapter(
var scanlatorSelectionListener: ScanlatorSelectionListener? = null
var options = listOf<String>()
private fun clearCustomValsForMedia(mediaId: String, suffix: String) {
val customVals = PrefManager.getAllCustomValsForMedia("$mediaId$suffix")
customVals.forEach { (key) ->
PrefManager.removeCustomVal(key)
Log.d("PrefManager", "Removed key: $key")
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val bind = ItemMediaSourceBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(bind)
@ -93,14 +104,8 @@ class MangaReadAdapter(
setTitle(" Delete Progress for all chapters of ${media.nameRomaji}")
setMessage("This will delete all the locally stored progress for chapters")
setPosButton(R.string.ok){
val currentChapters = PrefManager.getAllCustomValsForMedia("${media.id}_Chapter")
currentChapters.forEach { (key) ->
PrefManager.removeCustomVal(key)
}
val currentChapterWithVolume = PrefManager.getAllCustomValsForMedia("${media.id}_Vol")
currentChapterWithVolume.forEach { (key) ->
PrefManager.removeCustomVal(key)
}
clearCustomValsForMedia("${media.id}", "_Chapter")
clearCustomValsForMedia("${media.id}", "_Vol")
snackString("Deleted the progress of Chapters for ${media.nameRomaji}")
}
setNegButton(R.string.no)
@ -277,6 +282,22 @@ class MangaReadAdapter(
show()
}
}
resetProgress.setOnClickListener {
fragment.requireContext().customAlertDialog().apply {
setTitle(" Delete Progress for all chapters of ${media.nameRomaji}")
setMessage("This will delete all the locally stored progress for chapters")
setPosButton(R.string.ok){
// Usage
clearCustomValsForMedia("${media.id}", "_Chapter")
clearCustomValsForMedia("${media.id}", "_Vol")
snackString("Deleted the progress of Chapters for ${media.nameRomaji}")
}
setNegButton(R.string.no)
show()
}
}
resetProgressDef.text = getString(currContext()!!,R.string.clear_stored_chapter)
// Scanlator
mangaScanlatorContainer.isVisible = options.count() > 1

View file

@ -235,10 +235,18 @@ object PrefManager {
apply()
}
}
/**
* Retrieves all SharedPreferences entries with keys starting with the specified prefix.
*
* @param prefix The prefix to filter keys.
* @return A map containing key-value pairs that match the prefix.
*/
fun getAllCustomValsForMedia(prefix: String): Map<String, Any?> {
val prefs = irrelevantPreferences ?: return emptyMap()
val allEntries = mutableMapOf<String, Any?>()
irrelevantPreferences?.all?.forEach { (key, value) ->
prefs.all.forEach { (key, value) ->
if (key.startsWith(prefix)) {
allEntries[key] = value
}
@ -249,6 +257,7 @@ object PrefManager {
@Suppress("UNCHECKED_CAST")
fun <T> getLiveVal(prefName: PrefName, default: T): SharedPreferenceLiveData<T> {
val pref = getPrefLocation(prefName.data.prefLocation)