mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
delete resume watching + delete bookmarks buttons. fixed backup crash
This commit is contained in:
parent
7d3b8c464e
commit
f01820059b
5 changed files with 72 additions and 66 deletions
|
@ -658,12 +658,14 @@ class HomeFragment : Fragment() {
|
|||
return@observeNullable
|
||||
}
|
||||
|
||||
bottomSheetDialog = activity?.loadHomepageList(item, expandCallback = {
|
||||
val (items, delete) = item
|
||||
|
||||
bottomSheetDialog = activity?.loadHomepageList(items, expandCallback = {
|
||||
homeViewModel.expandAndReturn(it)
|
||||
}, dismissCallback = {
|
||||
homeViewModel.popup(null)
|
||||
bottomSheetDialog = null
|
||||
})
|
||||
}, deleteCallback = delete)
|
||||
}
|
||||
|
||||
homeViewModel.reloadStored()
|
||||
|
|
|
@ -246,7 +246,7 @@ class HomeParentItemAdapterPreview(
|
|||
private val previewViewpagerText: ViewGroup =
|
||||
itemView.findViewById(R.id.home_preview_viewpager_text)
|
||||
|
||||
// private val previewHeader: FrameLayout = itemView.findViewById(R.id.home_preview)
|
||||
// private val previewHeader: FrameLayout = itemView.findViewById(R.id.home_preview)
|
||||
private var resumeHolder: View = itemView.findViewById(R.id.home_watch_holder)
|
||||
private var resumeRecyclerView: RecyclerView =
|
||||
itemView.findViewById(R.id.home_watch_child_recyclerview)
|
||||
|
@ -257,7 +257,7 @@ class HomeParentItemAdapterPreview(
|
|||
private var homeAccount: View? =
|
||||
itemView.findViewById(R.id.home_preview_switch_account)
|
||||
|
||||
private var topPadding : View? = itemView.findViewById(R.id.home_padding)
|
||||
private var topPadding: View? = itemView.findViewById(R.id.home_padding)
|
||||
|
||||
private val homeNonePadding: View = itemView.findViewById(R.id.home_none_padding)
|
||||
|
||||
|
@ -283,7 +283,11 @@ class HomeParentItemAdapterPreview(
|
|||
item.plot ?: ""
|
||||
|
||||
homePreviewText.text = item.name
|
||||
populateChips(homePreviewTags,item.tags ?: emptyList(), R.style.ChipFilledSemiTransparent)
|
||||
populateChips(
|
||||
homePreviewTags,
|
||||
item.tags ?: emptyList(),
|
||||
R.style.ChipFilledSemiTransparent
|
||||
)
|
||||
|
||||
homePreviewTags.isGone =
|
||||
item.tags.isNullOrEmpty()
|
||||
|
@ -413,7 +417,7 @@ class HomeParentItemAdapterPreview(
|
|||
Pair(itemView.findViewById(R.id.home_plan_to_watch_btt), WatchType.PLANTOWATCH),
|
||||
)
|
||||
|
||||
private val toggleListHolder : ChipGroup? = itemView.findViewById(R.id.home_type_holder)
|
||||
private val toggleListHolder: ChipGroup? = itemView.findViewById(R.id.home_type_holder)
|
||||
|
||||
init {
|
||||
previewViewpager.setPageTransformer(HomeScrollTransformer())
|
||||
|
@ -422,8 +426,14 @@ class HomeParentItemAdapterPreview(
|
|||
resumeRecyclerView.adapter = resumeAdapter
|
||||
bookmarkRecyclerView.adapter = bookmarkAdapter
|
||||
|
||||
resumeRecyclerView.setLinearListLayout(nextLeft = R.id.nav_rail_view, nextRight = FOCUS_SELF)
|
||||
bookmarkRecyclerView.setLinearListLayout(nextLeft = R.id.nav_rail_view, nextRight = FOCUS_SELF)
|
||||
resumeRecyclerView.setLinearListLayout(
|
||||
nextLeft = R.id.nav_rail_view,
|
||||
nextRight = FOCUS_SELF
|
||||
)
|
||||
bookmarkRecyclerView.setLinearListLayout(
|
||||
nextLeft = R.id.nav_rail_view,
|
||||
nextRight = FOCUS_SELF
|
||||
)
|
||||
|
||||
fixPaddingStatusbarMargin(topPadding)
|
||||
|
||||
|
@ -547,7 +557,10 @@ class HomeParentItemAdapterPreview(
|
|||
resumeWatching,
|
||||
false
|
||||
), 1, false
|
||||
)
|
||||
),
|
||||
deleteCallback = {
|
||||
viewModel.deleteResumeWatching()
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -572,7 +585,9 @@ class HomeParentItemAdapterPreview(
|
|||
list,
|
||||
false
|
||||
), 1, false
|
||||
)
|
||||
), deleteCallback = {
|
||||
viewModel.deleteBookmarks(list)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,6 +41,8 @@ import com.lagradost.cloudstream3.utils.AppUtils.loadResult
|
|||
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
||||
import com.lagradost.cloudstream3.utils.DOWNLOAD_HEADER_CACHE
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.deleteAllBookmarkedData
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.deleteAllResumeStateIds
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllResumeStateIds
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllWatchStateIds
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.getBookmarkedData
|
||||
|
@ -92,6 +94,21 @@ class HomeViewModel : ViewModel() {
|
|||
}
|
||||
}
|
||||
|
||||
fun deleteResumeWatching() {
|
||||
deleteAllResumeStateIds()
|
||||
loadResumeWatching()
|
||||
}
|
||||
|
||||
fun deleteBookmarks(list: List<SearchResponse>) {
|
||||
list.forEach { DataStoreHelper.deleteBookmarkedData(it.id) }
|
||||
loadStoredData()
|
||||
}
|
||||
|
||||
fun deleteBookmarks() {
|
||||
deleteAllBookmarkedData()
|
||||
loadStoredData()
|
||||
}
|
||||
|
||||
var repo: APIRepository? = null
|
||||
|
||||
private val _apiName = MutableLiveData<String>()
|
||||
|
@ -394,11 +411,14 @@ class HomeViewModel : ViewModel() {
|
|||
}
|
||||
|
||||
|
||||
private val _popup = MutableLiveData<ExpandableHomepageList?>(null)
|
||||
val popup: LiveData<ExpandableHomepageList?> = _popup
|
||||
private val _popup = MutableLiveData<Pair<ExpandableHomepageList, (() -> Unit)?>?>(null)
|
||||
val popup: LiveData<Pair<ExpandableHomepageList, (() -> Unit)?>?> = _popup
|
||||
|
||||
fun popup(list: ExpandableHomepageList?) {
|
||||
_popup.postValue(list)
|
||||
fun popup(list: ExpandableHomepageList?, deleteCallback: (() -> Unit)? = null) {
|
||||
if (list == null)
|
||||
_popup.postValue(null)
|
||||
else
|
||||
_popup.postValue(list to deleteCallback)
|
||||
}
|
||||
|
||||
private fun bookmarksUpdated(unused: Boolean) {
|
||||
|
@ -436,8 +456,7 @@ class HomeViewModel : ViewModel() {
|
|||
// do nothing
|
||||
}
|
||||
|
||||
fun reloadStored() {
|
||||
loadResumeWatching()
|
||||
fun loadStoredData() {
|
||||
val list = EnumSet.noneOf(WatchType::class.java)
|
||||
getKey<IntArray>(HOME_BOOKMARK_VALUE_LIST)?.map { WatchType.fromInternalId(it) }?.let {
|
||||
list.addAll(it)
|
||||
|
@ -445,6 +464,11 @@ class HomeViewModel : ViewModel() {
|
|||
loadStoredData(list)
|
||||
}
|
||||
|
||||
fun reloadStored() {
|
||||
loadResumeWatching()
|
||||
loadStoredData()
|
||||
}
|
||||
|
||||
fun click(load: LoadClickCallback) {
|
||||
loadResult(load.response.url, load.response.apiName, load.action)
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_T
|
|||
import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_UNIXTIME_KEY
|
||||
import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_USER_KEY
|
||||
import com.lagradost.cloudstream3.syncproviders.providers.OpenSubtitlesApi.Companion.OPEN_SUBTITLES_USER_KEY
|
||||
import com.lagradost.cloudstream3.ui.result.txt
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.main
|
||||
import com.lagradost.cloudstream3.utils.DataStore.getDefaultSharedPrefs
|
||||
|
@ -143,66 +144,26 @@ object BackupUtils {
|
|||
}
|
||||
|
||||
@SuppressLint("SimpleDateFormat")
|
||||
fun FragmentActivity.backup() {
|
||||
fun FragmentActivity.backup() = ioSafe {
|
||||
var fileStream: OutputStream? = null
|
||||
var printStream: PrintWriter? = null
|
||||
try {
|
||||
if (!checkWrite()) {
|
||||
showToast(getString(R.string.backup_failed), Toast.LENGTH_LONG)
|
||||
showToast(R.string.backup_failed, Toast.LENGTH_LONG)
|
||||
requestRW()
|
||||
return
|
||||
return@ioSafe
|
||||
}
|
||||
|
||||
val date = SimpleDateFormat("yyyy_MM_dd_HH_mm").format(Date(currentTimeMillis()))
|
||||
val ext = "json"
|
||||
val ext = "txt"
|
||||
val displayName = "CS3_Backup_${date}"
|
||||
val backupFile = getBackup()
|
||||
val stream = setupStream(this, displayName, null, ext, false)
|
||||
val stream = setupStream(this@backup, displayName, null, ext, false)
|
||||
|
||||
fileStream = stream.openNew()
|
||||
printStream = PrintWriter(fileStream)
|
||||
printStream.print(mapper.writeValueAsString(backupFile))
|
||||
|
||||
/*val steam = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
|
||||
&& subDir?.isDownloadDir() == true
|
||||
) {
|
||||
val cr = this.contentResolver
|
||||
val contentUri =
|
||||
MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY) // USE INSTEAD OF MediaStore.Downloads.EXTERNAL_CONTENT_URI
|
||||
//val currentMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension)
|
||||
|
||||
val newFile = ContentValues().apply {
|
||||
put(MediaStore.MediaColumns.DISPLAY_NAME, displayName)
|
||||
put(MediaStore.MediaColumns.TITLE, displayName)
|
||||
// While it a json file we store as txt because not
|
||||
// all file managers support mimetype json
|
||||
put(MediaStore.MediaColumns.MIME_TYPE, "text/plain")
|
||||
//put(MediaStore.MediaColumns.RELATIVE_PATH, folder)
|
||||
}
|
||||
|
||||
val newFileUri = cr.insert(
|
||||
contentUri,
|
||||
newFile
|
||||
) ?: throw IOException("Error creating file uri")
|
||||
cr.openOutputStream(newFileUri, "w")
|
||||
?: throw IOException("Error opening stream")
|
||||
} else {
|
||||
val fileName = "$displayName.$ext"
|
||||
val rFile = subDir?.findFile(fileName)
|
||||
if (rFile?.exists() == true) {
|
||||
rFile.delete()
|
||||
}
|
||||
val file =
|
||||
subDir?.createFile(fileName)
|
||||
?: throw IOException("Error creating file")
|
||||
if (!file.exists()) throw IOException("File does not exist")
|
||||
file.openOutputStream()
|
||||
}
|
||||
|
||||
val printStream = PrintWriter(steam)
|
||||
printStream.print(mapper.writeValueAsString(backupFile))
|
||||
printStream.close()*/
|
||||
|
||||
showToast(
|
||||
R.string.backup_success,
|
||||
Toast.LENGTH_LONG
|
||||
|
@ -211,7 +172,7 @@ object BackupUtils {
|
|||
logError(e)
|
||||
try {
|
||||
showToast(
|
||||
getString(R.string.backup_failed_error_format).format(e.toString()),
|
||||
txt(R.string.backup_failed_error_format, e.toString()),
|
||||
Toast.LENGTH_LONG
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
|
|
|
@ -353,6 +353,12 @@ object DataStoreHelper {
|
|||
removeKeys(folder2)
|
||||
}
|
||||
|
||||
fun deleteBookmarkedData(id : Int?) {
|
||||
if (id == null) return
|
||||
removeKey("$currentAccount/$RESULT_WATCH_STATE", id.toString())
|
||||
removeKey("$currentAccount/$RESULT_WATCH_STATE_DATA", id.toString())
|
||||
}
|
||||
|
||||
fun getAllResumeStateIds(): List<Int>? {
|
||||
val folder = "$currentAccount/$RESULT_RESUME_WATCHING"
|
||||
return getKeys(folder)?.mapNotNull {
|
||||
|
@ -519,12 +525,10 @@ object DataStoreHelper {
|
|||
|
||||
fun setResultWatchState(id: Int?, status: Int) {
|
||||
if (id == null) return
|
||||
val folder = "$currentAccount/$RESULT_WATCH_STATE"
|
||||
if (status == WatchType.NONE.internalId) {
|
||||
removeKey(folder, id.toString())
|
||||
removeKey("$currentAccount/$RESULT_WATCH_STATE_DATA", id.toString())
|
||||
deleteBookmarkedData(id)
|
||||
} else {
|
||||
setKey(folder, id.toString(), status)
|
||||
setKey("$currentAccount/$RESULT_WATCH_STATE", id.toString(), status)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue