diff --git a/app/build.gradle.kts b/app/build.gradle.kts index cfb3479463..4f85e4cc53 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -27,7 +27,7 @@ android { applicationId = "eu.kanade.tachiyomi" minSdk = AndroidConfig.minSdk targetSdk = AndroidConfig.targetSdk - versionCode = 83 + versionCode = 84 versionName = "0.13.6" 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 752ea0d8c7..40af4ce18e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt @@ -284,6 +284,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 5d589b97cd..aa5790a30d 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 @@ -34,6 +35,7 @@ import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.model.copyFrom +import eu.kanade.tachiyomi.util.system.hasPermission import eu.kanade.tachiyomi.util.system.logcat import eu.kanade.tachiyomi.util.system.toLong import kotlinx.serialization.protobuf.ProtoBuf @@ -68,6 +70,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() val backup = Backup( backupMangas(databaseManga, flags), 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 93c0eee419..b9e85c0b59 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt @@ -214,7 +214,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 1480a16182..3c5fa434fb 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/i18n/src/main/res/values/strings.xml b/i18n/src/main/res/values/strings.xml index 8d29865c63..34c2660a73 100644 --- 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