From a27b25f7c6443a2571597a4cfc1dfda72346cb12 Mon Sep 17 00:00:00 2001 From: arkon Date: Thu, 15 Sep 2022 22:53:46 -0400 Subject: [PATCH] Always attempt automatic backup creation - Defaults to every 12 hours - Minimum number of backups is now 2, just to offer some level of redundancy in case something happens - If it's missing storage permissions, it'll fail but that's the user's loss if they somehow haven't granted that permission yet # Conflicts: # app/build.gradle.kts # app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt --- app/build.gradle.kts | 2 +- app/src/main/java/eu/kanade/tachiyomi/Migrations.kt | 9 +++++++++ .../eu/kanade/tachiyomi/data/backup/BackupManager.kt | 6 ++++++ .../tachiyomi/data/preference/PreferencesHelper.kt | 2 +- .../tachiyomi/ui/setting/SettingsBackupController.kt | 9 ++------- app/src/main/java/exh/EXHMigrations.kt | 9 +++++++++ i18n/src/main/res/values/strings.xml | 3 ++- 7 files changed, 30 insertions(+), 10 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f947bf55d..60a2ae8c0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -28,7 +28,7 @@ android { applicationId = "eu.kanade.tachiyomi.sy" minSdk = AndroidConfig.minSdk targetSdk = AndroidConfig.targetSdk - versionCode = 39 + versionCode = 40 versionName = "1.8.5" buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"") diff --git a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt index 1b284e034..044c08972 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt @@ -287,6 +287,15 @@ object Migrations { remove("library_sorting_ascending") } } + if (oldVersion < 84) { + if (preferences.numberOfBackups().get() == 1) { + preferences.numberOfBackups().set(2) + } + if (preferences.backupInterval().get() == 0) { + preferences.backupInterval().set(12) + BackupCreatorJob.setupTask(context) + } + } return true } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt index c5e83a077..3249f4569 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.data.backup +import android.Manifest import android.content.Context import android.net.Uri import com.hippo.unifile.UniFile @@ -50,6 +51,7 @@ import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.model.copyFrom import eu.kanade.tachiyomi.source.online.MetadataSource +import eu.kanade.tachiyomi.util.system.hasPermission import eu.kanade.tachiyomi.util.system.logcat import eu.kanade.tachiyomi.util.system.toLong import exh.source.MERGED_SOURCE_ID @@ -94,6 +96,10 @@ class BackupManager( */ @Suppress("BlockingMethodInNonBlockingContext") suspend fun createBackup(uri: Uri, flags: Int, isAutoBackup: Boolean): String { + if (!context.hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + throw IllegalStateException(context.getString(R.string.missing_storage_permission)) + } + val databaseManga = getFavorites.await() /* SY --> */ + if (flags and BACKUP_READ_MANGA_MASK == BACKUP_READ_MANGA) { handler.awaitList { mangasQueries.getReadMangaNotInLibrary(mangaMapper) } } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt index 67a41bb13..1dc1c8d96 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt @@ -223,7 +223,7 @@ class PreferencesHelper(val context: Context) { fun numberOfBackups() = flowPrefs.getInt("backup_slots", 2) - fun backupInterval() = flowPrefs.getInt("backup_interval", 0) + fun backupInterval() = flowPrefs.getInt("backup_interval", 12) fun removeAfterReadSlots() = prefs.getInt(Keys.removeAfterReadSlots, -1) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBackupController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBackupController.kt index 934588649..bd516b20c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBackupController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBackupController.kt @@ -108,14 +108,13 @@ class SettingsBackupController : SettingsController() { bindTo(preferences.backupInterval()) titleRes = R.string.pref_backup_interval entriesRes = arrayOf( - R.string.update_never, R.string.update_6hour, R.string.update_12hour, R.string.update_24hour, R.string.update_48hour, R.string.update_weekly, ) - entryValues = arrayOf("0", "6", "12", "24", "48", "168") + entryValues = arrayOf("6", "12", "24", "48", "168") summary = "%s" onChange { newValue -> @@ -137,8 +136,6 @@ class SettingsBackupController : SettingsController() { } } - visibleIf(preferences.backupInterval()) { it > 0 } - preferences.backupsDirectory().asFlow() .onEach { path -> val dir = UniFile.fromUri(context, path.toUri()) @@ -149,11 +146,9 @@ class SettingsBackupController : SettingsController() { intListPreference { bindTo(preferences.numberOfBackups()) titleRes = R.string.pref_backup_slots - entries = arrayOf("1", "2", "3", "4", "5") + entries = arrayOf("2", "3", "4", "5") entryValues = entries summary = "%s" - - visibleIf(preferences.backupInterval()) { it > 0 } } } diff --git a/app/src/main/java/exh/EXHMigrations.kt b/app/src/main/java/exh/EXHMigrations.kt index a35a9481d..cb5363f01 100644 --- a/app/src/main/java/exh/EXHMigrations.kt +++ b/app/src/main/java/exh/EXHMigrations.kt @@ -448,6 +448,15 @@ object EXHMigrations { remove("library_sorting_ascending") } } + if (oldVersion under 40) { + if (preferences.numberOfBackups().get() == 1) { + preferences.numberOfBackups().set(2) + } + if (preferences.backupInterval().get() == 0) { + preferences.backupInterval().set(12) + BackupCreatorJob.setupTask(context) + } + } // if (oldVersion under 1) { } (1 is current release version) // do stuff here when releasing changed crap diff --git a/i18n/src/main/res/values/strings.xml b/i18n/src/main/res/values/strings.xml index a0f0e1c41..09263e7b4 100755 --- a/i18n/src/main/res/values/strings.xml +++ b/i18n/src/main/res/values/strings.xml @@ -471,13 +471,14 @@ What do you want to backup? Creating backup Backup failed + Storage permissions not granted No library entries to back up Backup/restore may not function properly if MIUI Optimization is disabled. Restore is already in progress Restoring backup Restoring backup failed Canceled restore - Automatic backups are highly recommended. You should keep copies in other places as well. + You should keep copies of backups in other places as well. Network