Fix periodical backups

This commit is contained in:
Koitharu
2024-11-02 14:32:52 +02:00
parent 8901d02dba
commit 6e20cee972
4 changed files with 14 additions and 17 deletions

View File

@@ -1,11 +1,11 @@
package org.koitharu.kotatsu.core.backup
import android.net.Uri
import java.time.LocalDateTime
import java.util.Date
data class BackupFile(
val uri: Uri,
val dateTime: LocalDateTime,
val dateTime: Date,
): Comparable<BackupFile> {
override fun compareTo(other: BackupFile): Int = compareValues(dateTime, other.dateTime)

View File

@@ -1,5 +1,6 @@
package org.koitharu.kotatsu.core.backup
import android.annotation.SuppressLint
import android.content.Context
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runInterruptible
@@ -8,9 +9,9 @@ import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
import org.koitharu.kotatsu.core.zip.ZipOutput
import java.io.File
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.text.SimpleDateFormat
import java.time.format.DateTimeParseException
import java.util.Date
import java.util.Locale
import java.util.zip.Deflater
@@ -33,17 +34,18 @@ class BackupZipOutput(val file: File) : Closeable {
companion object {
const val DIR_BACKUPS = "backups"
private val dateTimeFormat = DateTimeFormatter.ofPattern("yyyyMMdd-HHmm")
@SuppressLint("SimpleDateFormat")
private val dateTimeFormat = SimpleDateFormat("yyyyMMdd-HHmm")
fun generateFileName(context: Context) = buildString {
append(context.getString(R.string.app_name).replace(' ', '_').lowercase(Locale.ROOT))
append('_')
append(LocalDateTime.now().format(dateTimeFormat))
append(dateTimeFormat.format(Date()))
append(".bk.zip")
}
fun parseBackupDateTime(fileName: String): LocalDateTime? = try {
LocalDateTime.parse(fileName.substringAfterLast('_').substringBefore('.'), dateTimeFormat)
fun parseBackupDateTime(fileName: String): Date? = try {
dateTimeFormat.parse(fileName.substringAfterLast('_').substringBefore('.'))
} catch (e: DateTimeParseException) {
e.printStackTraceDebug()
null

View File

@@ -7,8 +7,6 @@ import org.koitharu.kotatsu.core.backup.BackupZipOutput
import org.koitharu.kotatsu.core.backup.ExternalBackupStorage
import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.core.ui.CoroutineIntentService
import java.time.LocalDateTime
import java.time.temporal.ChronoUnit
import javax.inject.Inject
@AndroidEntryPoint
@@ -28,9 +26,7 @@ class PeriodicalBackupService : CoroutineIntentService() {
return
}
val lastBackupDate = externalBackupStorage.getLastBackupDate()
if (lastBackupDate != null && lastBackupDate.plus(settings.periodicalBackupFrequency, ChronoUnit.MILLIS)
.isAfter(LocalDateTime.now())
) {
if (lastBackupDate != null && lastBackupDate.time + settings.periodicalBackupFrequency > System.currentTimeMillis()) {
return
}
val output = BackupZipOutput.createTemp(applicationContext)

View File

@@ -22,8 +22,7 @@ import org.koitharu.kotatsu.core.util.ext.resolveFile
import org.koitharu.kotatsu.core.util.ext.tryLaunch
import org.koitharu.kotatsu.core.util.ext.viewLifecycleScope
import java.io.File
import java.time.format.DateTimeFormatter
import java.time.format.FormatStyle
import java.text.SimpleDateFormat
import javax.inject.Inject
@AndroidEntryPoint
@@ -83,8 +82,8 @@ class PeriodicalBackupSettingsFragment : BasePreferenceFragment(R.string.periodi
backupStorage.getLastBackupDate()
}
preference.summary = lastDate?.let {
val formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG)
preference.context.getString(R.string.last_successful_backup, it.format(formatter))
val formatter = SimpleDateFormat.getDateInstance(SimpleDateFormat.LONG)
preference.context.getString(R.string.last_successful_backup, formatter.format(it))
}
preference.isVisible = lastDate != null
}