diff --git a/src/main/java/com/machiav3lli/backup/dbs/entity/Backup.kt b/src/main/java/com/machiav3lli/backup/dbs/entity/Backup.kt index 4140c26ffd..cbbfa58036 100644 --- a/src/main/java/com/machiav3lli/backup/dbs/entity/Backup.kt +++ b/src/main/java/com/machiav3lli/backup/dbs/entity/Backup.kt @@ -27,6 +27,7 @@ import com.machiav3lli.backup.PROP_NAME import com.machiav3lli.backup.entity.StorageFile import com.machiav3lli.backup.handler.LogsHandler.Companion.logException import com.machiav3lli.backup.handler.regexPackageFolder +import com.machiav3lli.backup.preferences.pref_createInvalidBackups import com.machiav3lli.backup.utils.LocalDateTimeSerializer import com.machiav3lli.backup.utils.SystemUtils import com.machiav3lli.backup.utils.getBackupRoot @@ -272,16 +273,22 @@ data class Backup @OptIn(kotlinx.serialization.ExperimentalSerializationApi::cla serialized = propertiesFile.readText() - if (serialized.isEmpty()) - return createInvalidFrom(propertiesFile, why = "empty-props") - - val backup = fromSerialized(serialized) + val backup = if (serialized.isEmpty()) { + if (pref_createInvalidBackups.value) + createInvalidFrom(propertiesFile, why = "empty-props") + else + null + } else { + fromSerialized(serialized) + } - //TODO bug: list serialization (jsonPretty, yaml) adds a space in front of each value - // found older multiline json and yaml without the bug, so it was introduced lately (by lib versions) - backup.permissions = backup.permissions.map { it.trim() } //TODO workaround + backup?.run { + backup.file = propertiesFile - backup.file = propertiesFile + //TODO bug: list serialization (jsonPretty, yaml) adds a space in front of each value + // found older multiline json and yaml without the bug, so it was introduced lately (by lib versions) + backup.permissions = backup.permissions.map { it.trim() } //TODO workaround + } return backup diff --git a/src/main/java/com/machiav3lli/backup/handler/BackendController.kt b/src/main/java/com/machiav3lli/backup/handler/BackendController.kt index b19071e604..7491ea261b 100644 --- a/src/main/java/com/machiav3lli/backup/handler/BackendController.kt +++ b/src/main/java/com/machiav3lli/backup/handler/BackendController.kt @@ -51,6 +51,7 @@ import com.machiav3lli.backup.handler.LogsHandler.Companion.logException import com.machiav3lli.backup.handler.ShellCommands.Companion.currentProfile import com.machiav3lli.backup.handler.ShellHandler.Companion.runAsRoot import com.machiav3lli.backup.preferences.pref_backupSuspendApps +import com.machiav3lli.backup.preferences.pref_createInvalidBackups import com.machiav3lli.backup.preferences.pref_earlyEmptyBackups import com.machiav3lli.backup.preferences.pref_lookForEmptyBackups import com.machiav3lli.backup.preferences.traceBackupsScan @@ -233,7 +234,7 @@ suspend fun scanBackups( if (damagedOp != null) renameDamagedToERROR(dir, "empty-backup") else - onInvalidBackup(dir, file, null, "empty") + onInvalidBackup(dir, file, null, "empty-backup") } suspend fun handleProps( @@ -582,7 +583,7 @@ fun Context.findBackups( val backupRoot = getBackupRoot() - val count = AtomicInteger(0) + //val count = AtomicInteger(0) when (1) { 1 -> { @@ -595,7 +596,7 @@ fun Context.findBackups( damagedOp = damagedOp, forceTrace = forceTrace, onValidBackup = { props -> - count.getAndIncrement() + //count.getAndIncrement() Backup.createFrom(props) ?.let { backup -> //traceDebug { "put ${backup.packageName}/${backup.backupDate}" } @@ -606,15 +607,17 @@ fun Context.findBackups( } }, onInvalidBackup = { dir: StorageFile, props: StorageFile?, packageName: String?, why: String? -> - count.getAndIncrement() - Backup.createInvalidFrom(dir, props, packageName, why) - ?.let { backup -> - //traceDebug { "put ${backup.packageName}/${backup.backupDate}" } - synchronized(backupsMap) { - backupsMap.getOrPut(backup.packageName) { mutableListOf() } - .add(backup) + //count.getAndIncrement() + if (pref_createInvalidBackups.value) { + Backup.createInvalidFrom(dir, props, packageName, why) + ?.let { backup -> + //traceDebug { "put ${backup.packageName}/${backup.backupDate}" } + synchronized(backupsMap) { + backupsMap.getOrPut(backup.packageName) { mutableListOf() } + .add(backup) + } } - } + } } ) } diff --git a/src/main/java/com/machiav3lli/backup/preferences/AdvancedPreferences.kt b/src/main/java/com/machiav3lli/backup/preferences/AdvancedPreferences.kt index 2fdcf770aa..a989cd7ef2 100644 --- a/src/main/java/com/machiav3lli/backup/preferences/AdvancedPreferences.kt +++ b/src/main/java/com/machiav3lli/backup/preferences/AdvancedPreferences.kt @@ -484,6 +484,12 @@ val pref_busyHitTime = IntPref( defaultValue = 2000 ) +val pref_createInvalidBackups = BooleanPref( + key = "dev-alt.createInvalidBackups", + summary = "create dummy 'INVALID' backups when detecting errors (for now, do not try to delete them!!!)", + defaultValue = false +) + val pref_lookForEmptyBackups = BooleanPref( key = "dev-alt.lookForEmptyBackups", summary = "scan for empty backups (slower refresh, especially remote)",