From 0a926cea9795f124bcb18d5920d7f68593ec4253 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Mon, 13 Jun 2022 21:51:25 +0200
Subject: [PATCH] #696 - perform update search without page reload

---
 .../settings/SettingsController.java          | 12 +++++--
 .../resources/languages/base_de.properties    |  1 +
 .../resources/languages/base_en.properties    |  1 +
 .../settings/containers/settingsUpdate.ftl    | 31 ++++++++++++++++++-
 4 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
index 520b7e0fa..93c03add1 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
@@ -491,15 +491,21 @@ public class SettingsController extends BaseController
 	}
 
 	@GetMapping("/updateSearch")
-	public String updateSearch(WebRequest request)
+	@ResponseBody
+	public String updateSearch()
 	{
 		budgetMasterUpdateService.getUpdateService().fetchCurrentVersion();
 
 		if(budgetMasterUpdateService.isUpdateAvailable())
 		{
-			WebRequestUtils.putNotification(request, new Notification(Localization.getString("notification.settings.update.available", budgetMasterUpdateService.getAvailableVersionString()), NotificationType.INFO));
+			final JsonObject toastContent = new JsonObject();
+			toastContent.addProperty("localizedMessage", Localization.getString("notification.settings.update.available", budgetMasterUpdateService.getAvailableVersionString()));
+			toastContent.addProperty("classes", getToastClasses(NotificationType.INFO));
+			return toastContent.toString();
 		}
-		return ReturnValues.REDIRECT_ALL_ENTITIES;
+
+		final JsonObject toastContent = getToastContent("notification.settings.update.not.available", NotificationType.INFO);
+		return toastContent.toString();
 	}
 
 	@GetMapping("/update")
diff --git a/BudgetMasterServer/src/main/resources/languages/base_de.properties b/BudgetMasterServer/src/main/resources/languages/base_de.properties
index ef77b4acb..94e40a891 100644
--- a/BudgetMasterServer/src/main/resources/languages/base_de.properties
+++ b/BudgetMasterServer/src/main/resources/languages/base_de.properties
@@ -178,6 +178,7 @@ notification.settings.transactions.error=Fehler beim Speichern der Buchungseinst
 notification.settings.update.saved=Updateeinstellungen gespeichert
 notification.settings.update.error=Fehler beim Speichern der Updateeinstellungen
 notification.settings.update.available=BudgetMaster Update "{0}" verfügbar
+notification.settings.update.not.available=Kein Update 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
diff --git a/BudgetMasterServer/src/main/resources/languages/base_en.properties b/BudgetMasterServer/src/main/resources/languages/base_en.properties
index 56735f3d0..11177b52d 100644
--- a/BudgetMasterServer/src/main/resources/languages/base_en.properties
+++ b/BudgetMasterServer/src/main/resources/languages/base_en.properties
@@ -179,6 +179,7 @@ notification.settings.transactions.error=Error saving transactions settings
 notification.settings.update.saved=Update settings saved
 notification.settings.update.error=Error saving update settings
 notification.settings.update.available=BudgetMaster update "{0}" available
+notification.settings.update.not.available=No update available
 notification.settings.database.delete.success=Successfully deleted database
 notification.settings.backup.run.success=Backup successful
 notification.settings.backup.run.error=Backup failed
diff --git a/BudgetMasterServer/src/main/resources/templates/settings/containers/settingsUpdate.ftl b/BudgetMasterServer/src/main/resources/templates/settings/containers/settingsUpdate.ftl
index 0f157e768..cf31e0a61 100644
--- a/BudgetMasterServer/src/main/resources/templates/settings/containers/settingsUpdate.ftl
+++ b/BudgetMasterServer/src/main/resources/templates/settings/containers/settingsUpdate.ftl
@@ -46,7 +46,7 @@
                     </div>
 
                     <div class="table-cell table-cell-valign">
-                        <@header.buttonLink url='/settings/updateSearch' icon='refresh' localizationKey='settings.updates.search'/>
+                        <@header.buttonLink url='/settings/updateSearch' icon='refresh' localizationKey='settings.updates.search' isDataUrl=true id='button-update-search'/>
                     </div>
                 </div>
             </div>
@@ -77,6 +77,35 @@
                 <@header.buttonSubmit name='action' icon='save' localizationKey='save' color='background-green' formaction='/settings/save/update'/>
             </div>
         </div>
+
+        <script>
+            $('#button-update-search').click(function()
+            {
+                $.ajax({
+                    type: 'GET',
+                    url: $(this).attr('data-url'),
+                    data: {},
+                    success: function(response)
+                    {
+                        M.Toast.dismissAll();
+
+                        let parsedData = JSON.parse(response);
+                        M.toast({
+                            html: parsedData['localizedMessage'],
+                            classes: parsedData['classes']
+                        });
+                    },
+                    error: function(response)
+                    {
+                        M.toast({
+                            html: "Error searching for updates",
+                            classes: 'red'
+                        });
+                        console.error(response);
+                    }
+                });
+            });
+        </script>
     </@settingsContainerMacros.settingsContainer>
 </#macro>
 
-- 
GitLab