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 b54dbd3b1..a081b3ffc 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt @@ -302,7 +302,8 @@ class BackupManager(val context: Context, version: Int = CURRENT_VERSION) { source.fetchChapterList(manga, throttleManager::throttle) } else { source.fetchChapterList(manga) - }.map { syncChaptersWithSource(databaseHelper, it, manga, source) } + } + .map { syncChaptersWithSource(databaseHelper, it, manga, source) } .doOnNext { pair -> if (pair.first.isNotEmpty()) { chapters.forEach { it.manga_id = manga.id } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt index a731f5126..496889439 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt @@ -41,6 +41,7 @@ internal class BackupNotifier(private val context: Context) { setContentTitle(context.getString(R.string.creating_backup)) setProgress(0, 0, true) + setOnlyAlertOnce(true) } builder.show(Notifications.ID_BACKUP_PROGRESS) @@ -93,6 +94,7 @@ internal class BackupNotifier(private val context: Context) { } setProgress(maxAmount, progress, false) + setOnlyAlertOnce(true) // Clear old actions if they exist if (mActions.isNotEmpty()) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreService.kt index 0b825d407..9da1e1d9a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreService.kt @@ -40,7 +40,6 @@ import java.io.File import java.text.SimpleDateFormat import java.util.Date import java.util.Locale -import java.util.concurrent.ExecutorService import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job @@ -103,6 +102,8 @@ class BackupRestoreService : Service() { private var job: Job? = null + private val throttleManager = EHentaiThrottleManager() + /** * The progress of a backup restore */ @@ -113,6 +114,10 @@ class BackupRestoreService : Service() { */ private var restoreAmount = 0 + private var skippedAmount = 0 + + private var totalAmount = 0 + /** * List containing errors */ @@ -125,13 +130,6 @@ class BackupRestoreService : Service() { private val trackManager: TrackManager by injectLazy() - private lateinit var executor: ExecutorService - - private val throttleManager = EHentaiThrottleManager() - - /** - * Method called when the service is created. It injects dependencies and acquire the wake lock. - */ override fun onCreate() { super.onCreate() notifier = BackupNotifier(this) @@ -218,7 +216,29 @@ class BackupRestoreService : Service() { val mangasJson = json.get(MANGAS).asJsonArray - restoreAmount = mangasJson.size() + 1 // +1 for categories + val validManga = mangasJson.filter { + val tmanga = backupManager.parser.fromJson(it.asJsonObject.get(MANGA)) + // EXH --> + val migrated = EXHMigrations.migrateBackupEntry( + BackupEntry( + tmanga, + backupManager.parser.fromJson>(JsonArray()), + backupManager.parser.fromJson>(JsonArray()), + backupManager.parser.fromJson>(JsonArray()), + backupManager.parser.fromJson>(JsonArray()) + ) + ) + val (manga, _, _, _, _) = migrated + val sourced = backupManager.sourceManager.get(manga.source) != null + if (!sourced) { + restoreAmount -= 1 + } + sourced + } + + totalAmount = mangasJson.size() + restoreAmount = validManga.count() + 1 // +1 for categories + skippedAmount = mangasJson.size() - validManga.count() restoreProgress = 0 errors.clear() @@ -267,6 +287,10 @@ class BackupRestoreService : Service() { ?: JsonArray() ) + if (job?.isActive != true) { + throw Exception(getString(R.string.restoring_backup_canceled)) + } + // EXH --> val migrated = EXHMigrations.migrateBackupEntry( BackupEntry( @@ -280,10 +304,6 @@ class BackupRestoreService : Service() { val (manga, chapters, categories, history, tracks) = migrated // <-- EXH - if (job?.isActive != true) { - throw Exception(getString(R.string.restoring_backup_canceled)) - } - try { restoreMangaData(manga, chapters, categories, history, tracks) } catch (e: Exception) {