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