From eaffb2755cfae436f4c2b1affe9c125046c2cc55 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sat, 29 Jun 2024 17:44:03 +0200 Subject: [PATCH] Cleanup only created auto backup files (#984) The automated backup cleanup just deleted every file (recursively in subfolders as well) in the set folder in case it was older than the set backup ttl. This made it impossible to save the automated backups into a folder with different files. --- .../manga/impl/backup/proto/ProtoBackupExport.kt | 5 +++-- .../manga/impl/backup/proto/models/Backup.kt | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupExport.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupExport.kt index e7018728..70c91104 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupExport.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupExport.kt @@ -56,6 +56,7 @@ object ProtoBackupExport : ProtoBackupBase() { private var backupSchedulerJobId: String = "" private const val LAST_AUTOMATED_BACKUP_KEY = "lastAutomatedBackup" private val preferences = Injekt.get().getSharedPreferences("server_util", Context.MODE_PRIVATE) + private const val AUTO_BACKUP_FILENAME = "auto" init { serverConfig.subscribeTo( @@ -114,7 +115,7 @@ object ProtoBackupExport : ProtoBackupBase() { val automatedBackupDir = File(applicationDirs.automatedBackupRoot) automatedBackupDir.mkdirs() - val backupFile = File(applicationDirs.automatedBackupRoot, Backup.getFilename()) + val backupFile = File(applicationDirs.automatedBackupRoot, Backup.getFilename(AUTO_BACKUP_FILENAME)) backupFile.outputStream().use { output -> input.copyTo(output) } } @@ -133,7 +134,7 @@ object ProtoBackupExport : ProtoBackupBase() { return } - automatedBackupDir.walkTopDown().forEach { file -> + automatedBackupDir.listFiles { file -> file.name.startsWith(Backup.getBasename(AUTO_BACKUP_FILENAME)) }?.forEach { file -> try { cleanupAutomatedBackupFile(file) } catch (e: Exception) { diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/models/Backup.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/models/Backup.kt index d584764a..faa48891 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/models/Backup.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/models/Backup.kt @@ -2,6 +2,7 @@ package suwayomi.tachidesk.manga.impl.backup.proto.models import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber +import xyz.nulldev.androidcompat.util.SafePath import java.text.SimpleDateFormat import java.util.Date @@ -19,9 +20,18 @@ data class Backup( } companion object { - fun getFilename(): String { + fun getBasename(name: String = ""): String { + val namePrefix = "org.suwayomi.tachidesk" + val namePrefixSeparator = if (name.isNotEmpty()) "." else "" + + return SafePath.buildValidFilename(namePrefix + namePrefixSeparator + name) + } + + fun getFilename(name: String = ""): String { val date = SimpleDateFormat("yyyy-MM-dd_HH-mm").format(Date()) - return "org.suwayomi.tachidesk_$date.tachibk" + val ext = ".tachibk" + + return getBasename(name + "_$date") + ext } } }