feat(backup): Add information on when was the last time backup automatically created

This commit is contained in:
Ahmad Ansori Palembani 2024-08-03 22:10:45 +07:00
parent 6d60177a09
commit 951773053b
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
4 changed files with 22 additions and 10 deletions

View file

@ -11,6 +11,7 @@
--> -->
## Additions ## Additions
- Add missing "Max automatic backups" option on experimental Data and Storage setting menu - Add missing "Max automatic backups" option on experimental Data and Storage setting menu
- Add information on when was the last time backup automatically created
## Changes ## Changes
- Add more info to WorkerInfo page - Add more info to WorkerInfo page
@ -21,6 +22,7 @@
- `manhua` tag no longer cause reading mode to switch to LTR - `manhua` tag no longer cause reading mode to switch to LTR
- Local source manga's cover now being invalidated on refresh - Local source manga's cover now being invalidated on refresh
- You can now create a backup without any entries using experimental Data and Storage setting menu - You can now create a backup without any entries using experimental Data and Storage setting menu
- Increased default maximum automatic backup files to 5
## Fixes ## Fixes
- Fixed auto backup, auto extension update, and app update checker stop working - Fixed auto backup, auto extension update, and app update checker stop working

View file

@ -24,6 +24,7 @@ import yokai.domain.storage.StorageManager
import yokai.i18n.MR import yokai.i18n.MR
import yokai.util.lang.getString import yokai.util.lang.getString
import java.io.FileOutputStream import java.io.FileOutputStream
import java.time.Instant
class BackupCreator( class BackupCreator(
val context: Context, val context: Context,
@ -35,7 +36,7 @@ class BackupCreator(
val parser = ProtoBuf val parser = ProtoBuf
private val db: DatabaseHelper = Injekt.get() private val db: DatabaseHelper = Injekt.get()
private val preferences: BackupPreferences = Injekt.get() private val backupPreferences: BackupPreferences = Injekt.get()
private val storageManager: StorageManager by injectLazy() private val storageManager: StorageManager by injectLazy()
@Suppress("RedundantSuspendModifier") @Suppress("RedundantSuspendModifier")
@ -62,7 +63,7 @@ class BackupCreator(
val dir = storageManager.getAutomaticBackupsDirectory() val dir = storageManager.getAutomaticBackupsDirectory()
// Delete older backups // Delete older backups
val numberOfBackups = preferences.numberOfBackups().get() val numberOfBackups = backupPreferences.numberOfBackups().get()
dir?.listFiles { _, filename -> Backup.filenameRegex.matches(filename) } dir?.listFiles { _, filename -> Backup.filenameRegex.matches(filename) }
.orEmpty() .orEmpty()
.sortedByDescending { it.name } .sortedByDescending { it.name }
@ -103,6 +104,10 @@ class BackupCreator(
// Make sure it's a valid backup file // Make sure it's a valid backup file
BackupFileValidator().validate(context, fileUri) BackupFileValidator().validate(context, fileUri)
if (isAutoBackup) {
backupPreferences.lastAutoBackupTimestamp().set(Instant.now().toEpochMilli())
}
return fileUri.toString() return fileUri.toString()
} catch (e: Exception) { } catch (e: Exception) {
Logger.e(e) Logger.e(e)

View file

@ -1,5 +1,6 @@
package yokai.domain.backup package yokai.domain.backup
import eu.kanade.tachiyomi.core.preference.Preference
import eu.kanade.tachiyomi.core.preference.PreferenceStore import eu.kanade.tachiyomi.core.preference.PreferenceStore
import eu.kanade.tachiyomi.data.preference.PreferenceKeys import eu.kanade.tachiyomi.data.preference.PreferenceKeys
@ -8,4 +9,6 @@ class BackupPreferences(private val preferenceStore: PreferenceStore) {
fun numberOfBackups() = preferenceStore.getInt(PreferenceKeys.numberOfBackups, 5) fun numberOfBackups() = preferenceStore.getInt(PreferenceKeys.numberOfBackups, 5)
fun backupInterval() = preferenceStore.getInt(PreferenceKeys.backupInterval, 0) fun backupInterval() = preferenceStore.getInt(PreferenceKeys.backupInterval, 0)
fun lastAutoBackupTimestamp() = preferenceStore.getLong(Preference.appStateKey("last_auto_backup_timestamp"), 0L)
} }

View file

@ -35,6 +35,7 @@ import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.extension.ExtensionManager
import eu.kanade.tachiyomi.util.compose.LocalAlertDialog import eu.kanade.tachiyomi.util.compose.LocalAlertDialog
import eu.kanade.tachiyomi.util.compose.currentOrThrow import eu.kanade.tachiyomi.util.compose.currentOrThrow
import eu.kanade.tachiyomi.util.relativeTimeSpanString
import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.DeviceUtil
import eu.kanade.tachiyomi.util.system.e import eu.kanade.tachiyomi.util.system.e
import eu.kanade.tachiyomi.util.system.launchNonCancellableIO import eu.kanade.tachiyomi.util.system.launchNonCancellableIO
@ -69,11 +70,11 @@ object SettingsDataScreen : ComposableSettings {
@Composable @Composable
override fun getPreferences(): List<Preference> { override fun getPreferences(): List<Preference> {
val storagePreferences: StoragePreferences by injectLazy() val storagePreferences: StoragePreferences by injectLazy()
val preferences: BackupPreferences by injectLazy() val backupPreferences: BackupPreferences by injectLazy()
return persistentListOf( return persistentListOf(
getStorageLocationPreference(storagePreferences = storagePreferences), getStorageLocationPreference(storagePreferences = storagePreferences),
getBackupAndRestoreGroup(preferences = preferences), getBackupAndRestoreGroup(backupPreferences = backupPreferences),
getDataGroup(), getDataGroup(),
) )
} }
@ -97,7 +98,7 @@ object SettingsDataScreen : ComposableSettings {
} }
@Composable @Composable
private fun getBackupAndRestoreGroup(preferences: BackupPreferences): Preference.PreferenceGroup { private fun getBackupAndRestoreGroup(backupPreferences: BackupPreferences): Preference.PreferenceGroup {
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
val context = LocalContext.current val context = LocalContext.current
val alertDialog = LocalAlertDialog.currentOrThrow val alertDialog = LocalAlertDialog.currentOrThrow
@ -133,7 +134,8 @@ object SettingsDataScreen : ComposableSettings {
} }
} }
val backupInterval by preferences.backupInterval().collectAsState() val backupInterval by backupPreferences.backupInterval().collectAsState()
val lastAutoBackup by backupPreferences.lastAutoBackupTimestamp().collectAsState()
return Preference.PreferenceGroup( return Preference.PreferenceGroup(
title = stringResource(MR.strings.backup_and_restore), title = stringResource(MR.strings.backup_and_restore),
@ -205,7 +207,7 @@ object SettingsDataScreen : ComposableSettings {
// Automatic backups // Automatic backups
Preference.PreferenceItem.ListPreference( Preference.PreferenceItem.ListPreference(
pref = preferences.backupInterval(), pref = backupPreferences.backupInterval(),
title = stringResource(MR.strings.backup_frequency), title = stringResource(MR.strings.backup_frequency),
entries = persistentMapOf( entries = persistentMapOf(
0 to stringResource(MR.strings.manual), 0 to stringResource(MR.strings.manual),
@ -221,14 +223,14 @@ object SettingsDataScreen : ComposableSettings {
}, },
), ),
Preference.PreferenceItem.ListPreference( Preference.PreferenceItem.ListPreference(
pref = preferences.numberOfBackups(), pref = backupPreferences.numberOfBackups(),
title = stringResource(MR.strings.max_auto_backups), title = stringResource(MR.strings.max_auto_backups),
entries = (1..5).associateWith { it.toString() }.toImmutableMap(), entries = (1..5).associateWith { it.toString() }.toImmutableMap(),
enabled = backupInterval > 0, enabled = backupInterval > 0,
), ),
Preference.PreferenceItem.InfoPreference( Preference.PreferenceItem.InfoPreference(
stringResource(MR.strings.backup_info) stringResource(MR.strings.backup_info) +
/*+ "\n\n" + stringResource(MR.strings.last_auto_backup_info, relativeTimeSpanString(lastAutoBackup))*/, "\n\n" + stringResource(MR.strings.last_auto_backup_info, relativeTimeSpanString(lastAutoBackup)),
), ),
), ),
) )