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