Fix periodical backups
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user