|
@@ -39,10 +39,10 @@ class BackupRestorer(
|
|
*/
|
|
*/
|
|
private var sourceMapping: Map<Long, String> = emptyMap()
|
|
private var sourceMapping: Map<Long, String> = emptyMap()
|
|
|
|
|
|
- suspend fun restore(uri: Uri) {
|
|
|
|
|
|
+ suspend fun restore(uri: Uri, options: RestoreOptions) {
|
|
val startTime = System.currentTimeMillis()
|
|
val startTime = System.currentTimeMillis()
|
|
|
|
|
|
- restoreFromFile(uri)
|
|
|
|
|
|
+ restoreFromFile(uri, options)
|
|
|
|
|
|
val time = System.currentTimeMillis() - startTime
|
|
val time = System.currentTimeMillis() - startTime
|
|
|
|
|
|
@@ -57,20 +57,36 @@ class BackupRestorer(
|
|
)
|
|
)
|
|
}
|
|
}
|
|
|
|
|
|
- private suspend fun restoreFromFile(uri: Uri) {
|
|
|
|
|
|
+ private suspend fun restoreFromFile(uri: Uri, options: RestoreOptions) {
|
|
val backup = BackupUtil.decodeBackup(context, uri)
|
|
val backup = BackupUtil.decodeBackup(context, uri)
|
|
|
|
|
|
- restoreAmount = backup.backupManga.size + 3 // +3 for categories, app prefs, source prefs
|
|
|
|
-
|
|
|
|
// Store source mapping for error messages
|
|
// Store source mapping for error messages
|
|
val backupMaps = backup.backupSources + backup.backupBrokenSources.map { it.toBackupSource() }
|
|
val backupMaps = backup.backupSources + backup.backupBrokenSources.map { it.toBackupSource() }
|
|
sourceMapping = backupMaps.associate { it.sourceId to it.name }
|
|
sourceMapping = backupMaps.associate { it.sourceId to it.name }
|
|
|
|
|
|
|
|
+ if (options.library) {
|
|
|
|
+ restoreAmount += backup.backupManga.size + 1 // +1 for categories
|
|
|
|
+ }
|
|
|
|
+ if (options.appSettings) {
|
|
|
|
+ restoreAmount += 1
|
|
|
|
+ }
|
|
|
|
+ if (options.sourceSettings) {
|
|
|
|
+ restoreAmount += 1
|
|
|
|
+ }
|
|
|
|
+
|
|
coroutineScope {
|
|
coroutineScope {
|
|
- restoreCategories(backup.backupCategories)
|
|
|
|
- restoreAppPreferences(backup.backupPreferences)
|
|
|
|
- restoreSourcePreferences(backup.backupSourcePreferences)
|
|
|
|
- restoreManga(backup.backupManga, backup.backupCategories)
|
|
|
|
|
|
+ if (options.library) {
|
|
|
|
+ restoreCategories(backup.backupCategories)
|
|
|
|
+ }
|
|
|
|
+ if (options.appSettings) {
|
|
|
|
+ restoreAppPreferences(backup.backupPreferences)
|
|
|
|
+ }
|
|
|
|
+ if (options.sourceSettings) {
|
|
|
|
+ restoreSourcePreferences(backup.backupSourcePreferences)
|
|
|
|
+ }
|
|
|
|
+ if (options.library) {
|
|
|
|
+ restoreManga(backup.backupManga, backup.backupCategories)
|
|
|
|
+ }
|
|
|
|
|
|
// TODO: optionally trigger online library + tracker update
|
|
// TODO: optionally trigger online library + tracker update
|
|
}
|
|
}
|
|
@@ -154,3 +170,19 @@ class BackupRestorer(
|
|
return File("")
|
|
return File("")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+data class RestoreOptions(
|
|
|
|
+ val appSettings: Boolean,
|
|
|
|
+ val sourceSettings: Boolean,
|
|
|
|
+ val library: Boolean,
|
|
|
|
+) {
|
|
|
|
+ fun toBooleanArray() = booleanArrayOf(appSettings, sourceSettings, library)
|
|
|
|
+
|
|
|
|
+ companion object {
|
|
|
|
+ fun fromBooleanArray(booleanArray: BooleanArray) = RestoreOptions(
|
|
|
|
+ appSettings = booleanArray[0],
|
|
|
|
+ sourceSettings = booleanArray[1],
|
|
|
|
+ library = booleanArray[2],
|
|
|
|
+ )
|
|
|
|
+ }
|
|
|
|
+}
|