feat: Added anime clear progress (#531)
* feat: Added anime clear progress * more stuff added
This commit is contained in:
parent
ff3372754a
commit
d01e1c89e0
6 changed files with 142 additions and 9 deletions
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue