From 6f5328f663a7c3e148fa1d5b93ab5186b244fa1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=8Ao=E9=A2=9Diu=E9=B1=BC?= Date: Wed, 23 Feb 2022 22:12:24 +0800 Subject: [PATCH] Fix corrupted backup file, fix #6424 (#6691) Reappear stably on the api30 Android Studio Emulator, first save a large backup file, then save a small backup file, overwriting the previous larger backup file, so you get a backup file with a larger size but only the first part is meaningful, --- .../kanade/tachiyomi/data/backup/full/FullBackupManager.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt index 366d97fc1a..652471c331 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt @@ -32,6 +32,7 @@ import logcat.LogPriority import okio.buffer import okio.gzip import okio.sink +import java.io.FileOutputStream import kotlin.math.max class FullBackupManager(context: Context) : AbstractBackupManager(context) { @@ -85,7 +86,10 @@ class FullBackupManager(context: Context) : AbstractBackupManager(context) { ?: throw Exception("Couldn't create backup file") val byteArray = parser.encodeToByteArray(BackupSerializer, backup!!) - file.openOutputStream().sink().gzip().buffer().use { it.write(byteArray) } + file.openOutputStream().also { + // Force overwrite old file size, + (it as? FileOutputStream)?.channel?.truncate(0) + }.sink().gzip().buffer().use { it.write(byteArray) } val fileUri = file.uri // Make sure it's a valid backup file