diff --git a/src/main/java/de/deadlocker8/budgetmaster/backup/BackupService.java b/src/main/java/de/deadlocker8/budgetmaster/backup/BackupService.java index 4874d641e4612450bccc98613df05ece1d94d336..c1e52233fa8c74f8b11ff77b4c380899ab64a2a2 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/backup/BackupService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/backup/BackupService.java @@ -3,6 +3,8 @@ package de.deadlocker8.budgetmaster.backup; import de.deadlocker8.budgetmaster.database.DatabaseService; import de.deadlocker8.budgetmaster.settings.Settings; import de.deadlocker8.budgetmaster.settings.SettingsService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.context.event.EventListener; @@ -21,6 +23,8 @@ import java.util.concurrent.ScheduledFuture; @Service public class BackupService { + private final Logger LOGGER = LoggerFactory.getLogger(BackupService.class); + private final SettingsService settingsService; private final DatabaseService databaseService; @@ -113,4 +117,10 @@ public class BackupService return BackupStatus.UNKNOWN; } + + public void runNow() + { + LOGGER.debug("Backup triggered manually"); + backupTask.run(); + } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java index 4d19aff8b34ea56403ef51bb13465ab375e3667c..b03c5b032d3284ee0337e09a368672f223e9899f 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java @@ -93,7 +93,8 @@ public class SettingsController extends BaseController @RequestParam(value = "password") String password, @RequestParam(value = "passwordConfirmation") String passwordConfirmation, @RequestParam(value = "languageType") String languageType, - @RequestParam(value = "autoBackupStrategyType", required = false) String autoBackupStrategyType) + @RequestParam(value = "autoBackupStrategyType", required = false) String autoBackupStrategyType, + @RequestParam(value = "runBackup", required = false) Boolean runBackup) { settings.setLanguage(LanguageType.fromName(languageType)); if(autoBackupStrategyType == null) @@ -130,10 +131,35 @@ public class SettingsController extends BaseController updateSettings(settings); + runBackup(request, runBackup); + WebRequestUtils.putNotification(request, new Notification(Localization.getString("notification.settings.saved"), NotificationType.SUCCESS)); return "redirect:/settings"; } + private void runBackup(WebRequest request, Boolean runBackup) + { + if(runBackup == null) + { + return; + } + + if(runBackup) + { + backupService.runNow(); + + BackupStatus backupStatus = backupService.getBackupStatus(); + if(backupStatus == BackupStatus.OK) + { + WebRequestUtils.putNotification(request, new Notification(Localization.getString("notification.settings.backup.run.success"), NotificationType.SUCCESS)); + } + else + { + WebRequestUtils.putNotification(request, new Notification(Localization.getString("notification.settings.backup.run.error"), NotificationType.ERROR)); + } + } + } + private void fillMissingFieldsWithDefaults(Settings settings) { if(settings.getBackupReminderActivated() == null) diff --git a/src/main/resources/languages/base_de.properties b/src/main/resources/languages/base_de.properties index dcb8c3e4a0eca04ee45c71d2f983e8b6320e385e..20d448619f49ab9815979fa9b0b365e9c2b374e1 100644 --- a/src/main/resources/languages/base_de.properties +++ b/src/main/resources/languages/base_de.properties @@ -142,6 +142,8 @@ info.button.backup.reminder=Zu den Einstellungen notification.settings.saved=Einstellungen gespeichert notification.settings.update.available=BudgetMaster Update "{0}" verfügbar notification.settings.database.delete.success=Datenbank erfolgreich gelöscht +notification.settings.backup.run.success=Backup erfolgreich +notification.settings.backup.run.error=Backup fehlgeschlagen upload.image.success=Erfolgreich hochgeladen upload.image.error=Fehler: {0} upload.image.error.no.file=Fehler: Keine Datei für Upload angegeben @@ -256,6 +258,7 @@ settings.backup.auto.git.token=Git Zugriffstoken settings.backup.auto.git.test=Verbindung testen settings.backup.auto.git.test.success=Verbindung erfolgreich! settings.backup.auto.git.test.fail=Verbindung fehlgeschlagen!\n{0} +settings.backup.auto.run.now=Jetzt ausführen settings.category.circle.style=Kategorien anzeigen als settings.category.circle.style.description=Legt die Darstellung von Kategorien in der Buchungsübersicht fest settings.category.circle.style.deactivated=Quadrate diff --git a/src/main/resources/languages/base_en.properties b/src/main/resources/languages/base_en.properties index d174a1568361c1cfbda3166cd2b2ed98791ab719..fee073554594d79783d7f516fbe6c9f5ef183b53 100644 --- a/src/main/resources/languages/base_en.properties +++ b/src/main/resources/languages/base_en.properties @@ -142,6 +142,8 @@ info.button.backup.reminder=To the settings notification.settings.saved=Settings saved notification.settings.update.available=BudgetMaster update "{0}" available notification.settings.database.delete.success=Successfully deleted database +notification.settings.backup.run.success=Backup successful +notification.settings.backup.run.error=Backup failed upload.image.success=Upload successful upload.image.error=Error: {0} upload.image.error.no.file=Error: No file provided for upload @@ -256,6 +258,7 @@ settings.backup.auto.git.token=Git access token settings.backup.auto.git.test=Test connection settings.backup.auto.git.test.success=Connection successful! settings.backup.auto.git.test.fail=Connection failed!\n{0} +settings.backup.auto.run.now=Run now settings.category.circle.style=Show categories as settings.category.circle.style.description=Defines how categories are displayed in the transaction overview settings.category.circle.style.deactivated=Squares diff --git a/src/main/resources/static/js/settings.js b/src/main/resources/static/js/settings.js index 31b8e205a14b59e7b9a7ff15873ff8ffe80e4211..ba1246cc5eb7052b4bcfd8210c62067332745902 100644 --- a/src/main/resources/static/js/settings.js +++ b/src/main/resources/static/js/settings.js @@ -71,6 +71,11 @@ $(document).ready(function() }); } + $('#settings-backup-run-now').click(function() + { + document.getElementById('runBackupInput').value = 1; + }); + // on initial page load let autoBackupCheckbox = document.getElementsByName("autoBackupActivated")[0]; $('#settings-auto-backup').toggle(autoBackupCheckbox.checked); diff --git a/src/main/resources/templates/settings/settingsMacros.ftl b/src/main/resources/templates/settings/settingsMacros.ftl index 6b86afb17a4bea7c6395c0f95975dbe819b2b4d4..b977593d6b9d0cd57196d3923d8eed362fc6c6d4 100644 --- a/src/main/resources/templates/settings/settingsMacros.ftl +++ b/src/main/resources/templates/settings/settingsMacros.ftl @@ -282,4 +282,10 @@ <a target="_blank" href="${locale.getString("settings.backup.auto.strategy.git.remote.help.url")}" class="waves-effect waves-light btn btn-flat text-default"><i class="material-icons left">help_outline</i>${locale.getString("settings.backup.auto.strategy.git.remote.help")}</a> </div> </div> + <div class="row"> + <div class="col s12 m12 l8 offset-l2 center-align"> + <input id="runBackupInput" type="hidden" name="runBackup" value="0"> + <@header.buttonSubmit id='settings-backup-run-now' name='action' icon='cloud_download' localizationKey='settings.backup.auto.run.now'/> + </div> + </div> </#macro> \ No newline at end of file