From 09e04033e788491f27feb76e90b9025cf3688e1f Mon Sep 17 00:00:00 2001 From: self-similarity <137652432+self-similarity@users.noreply.github.com> Date: Sun, 10 Sep 2023 21:45:39 +0200 Subject: [PATCH] Revert "Automatic backups" This reverts commit 8b70381a032fe3462cffa106cb172c33348d4043. --- .../lagradost/cloudstream3/MainActivity.kt | 2 +- .../services/BackupWorkManager.kt | 96 ------------------- .../ui/settings/SettingsUpdates.kt | 37 +------ .../cloudstream3/utils/BackupUtils.kt | 52 +++++----- .../lagradost/cloudstream3/utils/UIHelper.kt | 2 +- app/src/main/res/values/array.xml | 22 +---- app/src/main/res/values/strings.xml | 2 - app/src/main/res/xml/settings_updates.xml | 15 +-- 8 files changed, 35 insertions(+), 193 deletions(-) delete mode 100644 app/src/main/java/com/lagradost/cloudstream3/services/BackupWorkManager.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 953587ee..fbad4fce 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -1081,7 +1081,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { val lastAppAutoBackup: String = getKey("VERSION_NAME") ?: "" if (appVer != lastAppAutoBackup) { setKey("VERSION_NAME", BuildConfig.VERSION_NAME) - backup(this) + backup() } } catch (t: Throwable) { logError(t) diff --git a/app/src/main/java/com/lagradost/cloudstream3/services/BackupWorkManager.kt b/app/src/main/java/com/lagradost/cloudstream3/services/BackupWorkManager.kt deleted file mode 100644 index 6ed7a447..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/services/BackupWorkManager.kt +++ /dev/null @@ -1,96 +0,0 @@ -package com.lagradost.cloudstream3.services - -import android.content.Context -import androidx.core.app.NotificationCompat -import androidx.work.Constraints -import androidx.work.CoroutineWorker -import androidx.work.ExistingPeriodicWorkPolicy -import androidx.work.ForegroundInfo -import androidx.work.PeriodicWorkRequest -import androidx.work.WorkManager -import androidx.work.WorkerParameters -import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.utils.AppUtils.createNotificationChannel -import com.lagradost.cloudstream3.utils.BackupUtils -import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute -import java.util.concurrent.TimeUnit - -const val BACKUP_CHANNEL_ID = "cloudstream3.backups" -const val BACKUP_WORK_NAME = "work_backup" -const val BACKUP_CHANNEL_NAME = "Backups" -const val BACKUP_CHANNEL_DESCRIPTION = "Notifications for background backups" -const val BACKUP_NOTIFICATION_ID = 938712898 // Random unique - -class BackupWorkManager(val context: Context, workerParams: WorkerParameters) : - CoroutineWorker(context, workerParams) { - companion object { - fun enqueuePeriodicWork(context: Context?, intervalHours: Long) { - if (context == null) return - - if (intervalHours == 0L) { - WorkManager.getInstance(context).cancelUniqueWork(BACKUP_WORK_NAME) - return - } - - val constraints = Constraints.Builder() - .setRequiresStorageNotLow(true) - .build() - - val periodicSyncDataWork = - PeriodicWorkRequest.Builder( - BackupWorkManager::class.java, - intervalHours, - TimeUnit.HOURS - ) - .addTag(BACKUP_WORK_NAME) - .setConstraints(constraints) - .build() - - WorkManager.getInstance(context).enqueueUniquePeriodicWork( - BACKUP_WORK_NAME, - ExistingPeriodicWorkPolicy.UPDATE, - periodicSyncDataWork - ) - - // Uncomment below for testing - -// val oneTimeBackupWork = -// OneTimeWorkRequest.Builder(BackupWorkManager::class.java) -// .addTag(BACKUP_WORK_NAME) -// .setConstraints(constraints) -// .build() -// -// WorkManager.getInstance(context).enqueue(oneTimeBackupWork) - } - } - - private val backupNotificationBuilder = - NotificationCompat.Builder(context, BACKUP_CHANNEL_ID) - .setColorized(true) - .setOnlyAlertOnce(true) - .setSilent(true) - .setAutoCancel(true) - .setContentTitle(context.getString(R.string.pref_category_backup)) - .setPriority(NotificationCompat.PRIORITY_DEFAULT) - .setColor(context.colorFromAttribute(R.attr.colorPrimary)) - .setSmallIcon(R.drawable.ic_cloudstream_monochrome_big) - - override suspend fun doWork(): Result { - context.createNotificationChannel( - BACKUP_CHANNEL_ID, - BACKUP_CHANNEL_NAME, - BACKUP_CHANNEL_DESCRIPTION - ) - - setForeground( - ForegroundInfo( - BACKUP_NOTIFICATION_ID, - backupNotificationBuilder.build() - ) - ) - - BackupUtils.backup(context) - - return Result.success() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt index 2f796801..62e46c08 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt @@ -19,16 +19,14 @@ import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.databinding.LogcatBinding import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.network.initClient -import com.lagradost.cloudstream3.services.BackupWorkManager import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar -import com.lagradost.cloudstream3.utils.BackupUtils +import com.lagradost.cloudstream3.utils.BackupUtils.backup import com.lagradost.cloudstream3.utils.BackupUtils.restorePrompt import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.InAppUpdater.Companion.runAutoUpdate import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog -import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.VideoDownloadManager @@ -50,30 +48,7 @@ class SettingsUpdates : PreferenceFragmentCompat() { //val settingsManager = PreferenceManager.getDefaultSharedPreferences(requireContext()) getPref(R.string.backup_key)?.setOnPreferenceClickListener { - BackupUtils.backup(activity) - return@setOnPreferenceClickListener true - } - - getPref(R.string.automatic_backup_key)?.setOnPreferenceClickListener { - val settingsManager = PreferenceManager.getDefaultSharedPreferences(requireContext()) - - val prefNames = resources.getStringArray(R.array.periodic_work_names) - val prefValues = resources.getIntArray(R.array.periodic_work_values) - val current = settingsManager.getInt(getString(R.string.automatic_backup_key), 0) - - activity?.showDialog( - prefNames.toList(), - prefValues.indexOf(current), - getString(R.string.backup_frequency), - true, - {}) { index -> - settingsManager.edit() - .putInt(getString(R.string.automatic_backup_key), prefValues[index]).apply() - BackupWorkManager.enqueuePeriodicWork( - context ?: AcraApplication.context, - prefValues[index].toLong() - ) - } + activity?.backup() return@setOnPreferenceClickListener true } @@ -90,7 +65,7 @@ class SettingsUpdates : PreferenceFragmentCompat() { val builder = AlertDialog.Builder(pref.context, R.style.AlertDialogCustom) - val binding = LogcatBinding.inflate(layoutInflater, null, false) + val binding = LogcatBinding.inflate(layoutInflater,null,false ) builder.setView(binding.root) val dialog = builder.create() @@ -201,8 +176,7 @@ class SettingsUpdates : PreferenceFragmentCompat() { val settingsManager = PreferenceManager.getDefaultSharedPreferences(it.context) val prefNames = resources.getStringArray(R.array.auto_download_plugin) - val prefValues = - enumValues().sortedBy { x -> x.value }.map { x -> x.value } + val prefValues = enumValues().sortedBy { x -> x.value }.map { x -> x.value } val current = settingsManager.getInt(getString(R.string.auto_download_plugins_key), 0) @@ -212,8 +186,7 @@ class SettingsUpdates : PreferenceFragmentCompat() { getString(R.string.automatic_plugin_download_mode_title), true, {}) { - settingsManager.edit() - .putInt(getString(R.string.auto_download_plugins_key), prefValues[it]).apply() + settingsManager.edit().putInt(getString(R.string.auto_download_plugins_key), prefValues[it]).apply() (context ?: AcraApplication.context)?.let { ctx -> app.initClient(ctx) } } return@setOnPreferenceClickListener true diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt index e50131fe..96593769 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt @@ -10,7 +10,6 @@ import androidx.annotation.WorkerThread import androidx.fragment.app.FragmentActivity import com.fasterxml.jackson.annotation.JsonProperty import com.fasterxml.jackson.module.kotlin.readValue -import com.lagradost.cloudstream3.AcraApplication.Companion.getActivity import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError @@ -91,11 +90,9 @@ object BackupUtils { ) @Suppress("UNCHECKED_CAST") - private fun getBackup(context: Context?): BackupFile? { - if (context == null) return null - - val allData = context.getSharedPrefs().all.filter { it.key.isTransferable() } - val allSettings = context.getDefaultSharedPrefs().all.filter { it.key.isTransferable() } + fun Context.getBackup(): BackupFile { + val allData = getSharedPrefs().all.filter { it.key.isTransferable() } + val allSettings = getDefaultSharedPrefs().all.filter { it.key.isTransferable() } val allDataSorted = BackupVars( allData.filter { it.value is Boolean } as? Map, @@ -122,50 +119,46 @@ object BackupUtils { } @WorkerThread - fun restore( - context: Context?, + fun Context.restore( backupFile: BackupFile, restoreSettings: Boolean, restoreDataStore: Boolean ) { - if (context == null) return if (restoreSettings) { - context.restoreMap(backupFile.settings._Bool, true) - context.restoreMap(backupFile.settings._Int, true) - context.restoreMap(backupFile.settings._String, true) - context.restoreMap(backupFile.settings._Float, true) - context.restoreMap(backupFile.settings._Long, true) - context.restoreMap(backupFile.settings._StringSet, true) + restoreMap(backupFile.settings._Bool, true) + restoreMap(backupFile.settings._Int, true) + restoreMap(backupFile.settings._String, true) + restoreMap(backupFile.settings._Float, true) + restoreMap(backupFile.settings._Long, true) + restoreMap(backupFile.settings._StringSet, true) } if (restoreDataStore) { - context.restoreMap(backupFile.datastore._Bool) - context.restoreMap(backupFile.datastore._Int) - context.restoreMap(backupFile.datastore._String) - context.restoreMap(backupFile.datastore._Float) - context.restoreMap(backupFile.datastore._Long) - context.restoreMap(backupFile.datastore._StringSet) + restoreMap(backupFile.datastore._Bool) + restoreMap(backupFile.datastore._Int) + restoreMap(backupFile.datastore._String) + restoreMap(backupFile.datastore._Float) + restoreMap(backupFile.datastore._Long) + restoreMap(backupFile.datastore._StringSet) } } @SuppressLint("SimpleDateFormat") - fun backup(context: Context?) = ioSafe { - if (context == null) return@ioSafe - + fun FragmentActivity.backup() = ioSafe { var fileStream: OutputStream? = null var printStream: PrintWriter? = null try { - if (!context.checkWrite()) { + if (!checkWrite()) { showToast(R.string.backup_failed, Toast.LENGTH_LONG) - context.getActivity()?.requestRW() + requestRW() return@ioSafe } val date = SimpleDateFormat("yyyy_MM_dd_HH_mm").format(Date(currentTimeMillis())) val ext = "txt" val displayName = "CS3_Backup_${date}" - val backupFile = getBackup(context) - val stream = setupStream(context, displayName, null, ext, false) + val backupFile = getBackup() + val stream = setupStream(this@backup, displayName, null, ext, false) fileStream = stream.openNew() printStream = PrintWriter(fileStream) @@ -205,8 +198,7 @@ object BackupUtils { val restoredValue = mapper.readValue(input) - restore( - activity, + activity.restore( restoredValue, restoreSettings = true, restoreDataStore = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index 9b40e70e..038a2f11 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -71,7 +71,7 @@ object UIHelper { val Int.toDp: Int get() = (this / Resources.getSystem().displayMetrics.density).toInt() val Float.toDp: Float get() = (this / Resources.getSystem().displayMetrics.density) - fun Context.checkWrite(): Boolean { + fun Activity.checkWrite(): Boolean { return (ContextCompat.checkSelfPermission( this, Manifest.permission.WRITE_EXTERNAL_STORAGE diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index b8f0cbf8..1df7b9d6 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -41,7 +41,7 @@ 0 1 - + @string/disable @@ -126,26 +126,6 @@ 30min - - @string/none - 3h - 6h - 12h - 24h - 3d - 7d - - - - 0 - 3 - 6 - 12 - 24 - 72 - 168 - - 0 60 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c722f33f..13251c7c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -51,7 +51,6 @@ primary_color_key restore_key backup_key - automatic_backup_key prefer_media_type_key_2 app_theme_key episode_sync_enabled_key @@ -230,7 +229,6 @@ Automatically sync your current episode progress Restore data from backup Back up data - Backup frequency Loaded backup file Failed to restore data from file %s Data stored diff --git a/app/src/main/res/xml/settings_updates.xml b/app/src/main/res/xml/settings_updates.xml index e3b36648..9989e47b 100644 --- a/app/src/main/res/xml/settings_updates.xml +++ b/app/src/main/res/xml/settings_updates.xml @@ -9,7 +9,7 @@ android:summaryOn="@string/bug_report_settings_on" android:title="@string/pref_disable_acra" /> - - - - - - + -