Fix periodical backups

master
Koitharu 2 years ago
parent 8901d02dba
commit 6e20cee972
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

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

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

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

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

Loading…
Cancel
Save