diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua index fe74646a..c75bae13 100644 --- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua +++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua @@ -1828,6 +1828,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1907446663"] -- Language behavior UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2341504363"] = "Language behavior" +-- Update installation method +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T237706157"] = "Update installation method" + -- Language UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2591284123"] = "Language" @@ -1858,6 +1861,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T602293588"] -- Choose the color theme that best suits for you. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T654667432"] = "Choose the color theme that best suits for you." +-- Should updates be installed automatically or manually? +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T707880477"] = "Should updates be installed automatically or manually?" + -- Energy saving is enabled UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T71162186"] = "Energy saving is enabled" @@ -4870,6 +4876,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2128088682 -- Navigation expands on mouse hover UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2195945406"] = "Navigation expands on mouse hover" +-- Install updates manually +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T220653235"] = "Install updates manually" + -- Also show features ready for release; these should be stable UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2301448762"] = "Also show features ready for release; these should be stable" @@ -4909,6 +4918,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3137986690 -- Delete disappearing chats older than 180 days UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3491430707"] = "Delete disappearing chats older than 180 days" +-- Install updates automatically +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3569059463"] = "Install updates automatically" + -- Disable workspaces UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3612390107"] = "Disable workspaces" @@ -5575,6 +5587,9 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::SECRETS::T4007657575"] -- No update found. UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T1015418291"] = "No update found." +-- Failed to install update automatically. Please try again manually. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T3709709946"] = "Failed to install update automatically. Please try again manually." + -- The hostname is not a valid HTTP(S) URL. UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1013354736"] = "The hostname is not a valid HTTP(S) URL." diff --git a/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor b/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor index fc466e7a..14f187e9 100644 --- a/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor +++ b/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor @@ -13,7 +13,8 @@ - + + diff --git a/app/MindWork AI Studio/Layout/MainLayout.razor.cs b/app/MindWork AI Studio/Layout/MainLayout.razor.cs index cc115a2c..079b4161 100644 --- a/app/MindWork AI Studio/Layout/MainLayout.razor.cs +++ b/app/MindWork AI Studio/Layout/MainLayout.razor.cs @@ -92,7 +92,7 @@ public partial class MainLayout : LayoutComponentBase, IMessageBusReceiver, ILan [ Event.UPDATE_AVAILABLE, Event.CONFIGURATION_CHANGED, Event.COLOR_THEME_CHANGED, Event.SHOW_ERROR, Event.SHOW_ERROR, Event.SHOW_WARNING, Event.SHOW_SUCCESS, Event.STARTUP_PLUGIN_SYSTEM, - Event.PLUGINS_RELOADED + Event.PLUGINS_RELOADED, Event.INSTALL_UPDATE, ]); // Set the snackbar for the update service: @@ -143,6 +143,11 @@ public partial class MainLayout : LayoutComponentBase, IMessageBusReceiver, ILan { switch (triggeredEvent) { + case Event.INSTALL_UPDATE: + this.performingUpdate = true; + this.StateHasChanged(); + break; + case Event.UPDATE_AVAILABLE: if (data is UpdateResponse updateResponse) { diff --git a/app/MindWork AI Studio/Plugins/configuration/plugin.lua b/app/MindWork AI Studio/Plugins/configuration/plugin.lua index 5513e016..7e24e999 100644 --- a/app/MindWork AI Studio/Plugins/configuration/plugin.lua +++ b/app/MindWork AI Studio/Plugins/configuration/plugin.lua @@ -62,9 +62,13 @@ CONFIG["LLM_PROVIDERS"][#CONFIG["LLM_PROVIDERS"]+1] = { CONFIG["SETTINGS"] = {} --- Configure the update behavior: +-- Configure the update check interval: -- Allowed values are: NO_CHECK, ONCE_STARTUP, HOURLY, DAILY, WEEKLY --- CONFIG["SETTINGS"]["DataApp.UpdateBehavior"] = "NO_CHECK" +-- CONFIG["SETTINGS"]["DataApp.UpdateInterval"] = "NO_CHECK" + +-- Configure how updates are installed: +-- Allowed values are: MANUAL, AUTOMATIC +-- CONFIG["SETTINGS"]["DataApp.UpdateInstallation"] = "MANUAL" -- Configure the user permission to add providers: -- Allowed values are: true, false diff --git a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua index ec8fe2c2..c1777807 100644 --- a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua +++ b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua @@ -1830,6 +1830,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1907446663"] -- Language behavior UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2341504363"] = "Sprachverhalten" +-- Update installation method +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T237706157"] = "Installationsmethode für Updates" + -- Language UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2591284123"] = "Sprache" @@ -1860,6 +1863,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T602293588"] -- Choose the color theme that best suits for you. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T654667432"] = "Wählen Sie das Farbschema, das am besten zu Ihnen passt." +-- Should updates be installed automatically or manually? +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T707880477"] = "Sollen Updates automatisch oder manuell installiert werden?" + -- Energy saving is enabled UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T71162186"] = "Energiesparmodus ist aktiviert" @@ -4872,6 +4878,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2128088682 -- Navigation expands on mouse hover UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2195945406"] = "Navigationsleiste erweitert sich, wenn sich die Maus darüber befindet" +-- Install updates manually +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T220653235"] = "Updates manuell installieren" + -- Also show features ready for release; these should be stable UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2301448762"] = "Auch Funktionen anzeigen, die bereit für die Veröffentlichung sind; diese sollten stabil sein." @@ -4911,6 +4920,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3137986690 -- Disappearing chats: delete chats older than 180 days UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3491430707"] = "Selbstlöschende Chats: lösche Chats die älter als 180 Tage sind" +-- Install updates automatically +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3569059463"] = "Updates automatisch installieren" + -- Disable workspaces UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3612390107"] = "Arbeitsbereiche deaktivieren" @@ -5577,6 +5589,9 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::SECRETS::T4007657575"] -- No update found. UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T1015418291"] = "Kein Update gefunden." +-- Failed to install update automatically. Please try again manually. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T3709709946"] = "Fehler bei der automatischen Installation des Updates. Bitte versuchen Sie es manuell erneut." + -- The hostname is not a valid HTTP(S) URL. UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1013354736"] = "Der Hostname ist keine gültige HTTP(S)-URL." diff --git a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua index fa754177..d7104563 100644 --- a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua +++ b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua @@ -1830,6 +1830,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1907446663"] -- Language behavior UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2341504363"] = "Language behavior" +-- Update installation method +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T237706157"] = "Update installation method" + -- Language UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2591284123"] = "Language" @@ -1860,6 +1863,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T602293588"] -- Choose the color theme that best suits for you. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T654667432"] = "Choose the color theme that best suits for you." +-- Should updates be installed automatically or manually? +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T707880477"] = "Should updates be installed automatically or manually?" + -- Energy saving is enabled UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T71162186"] = "Energy saving is enabled" @@ -4872,6 +4878,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2128088682 -- Navigation expands on mouse hover UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2195945406"] = "Navigation expands on mouse hover" +-- Install updates manually +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T220653235"] = "Install updates manually" + -- Also show features ready for release; these should be stable UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2301448762"] = "Also show features ready for release; these should be stable" @@ -4911,6 +4920,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3137986690 -- Disappearing chats: delete chats older than 180 days UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3491430707"] = "Disappearing chats: delete chats older than 180 days" +-- Install updates automatically +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3569059463"] = "Install updates automatically" + -- Disable workspaces UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3612390107"] = "Disable workspaces" @@ -5577,6 +5589,9 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::SECRETS::T4007657575"] -- No update found. UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T1015418291"] = "No update found." +-- Failed to install update automatically. Please try again manually. +UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T3709709946"] = "Failed to install update automatically. Please try again manually." + -- The hostname is not a valid HTTP(S) URL. UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1013354736"] = "The hostname is not a valid HTTP(S) URL." diff --git a/app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs b/app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs index d14868fc..5004dc43 100644 --- a/app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs +++ b/app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs @@ -63,13 +63,19 @@ public static class ConfigurationSelectDataFactory yield return new(TB("Enter is sending the input"), SendBehavior.ENTER_IS_SENDING); } - public static IEnumerable> GetUpdateBehaviorData() + public static IEnumerable> GetUpdateIntervalData() { - yield return new(TB("No automatic update checks"), UpdateBehavior.NO_CHECK); - yield return new(TB("Once at startup"), UpdateBehavior.ONCE_STARTUP); - yield return new(TB("Check every hour"), UpdateBehavior.HOURLY); - yield return new(TB("Check every day"), UpdateBehavior.DAILY); - yield return new (TB("Check every week"), UpdateBehavior.WEEKLY); + yield return new(TB("No automatic update checks"), UpdateInterval.NO_CHECK); + yield return new(TB("Once at startup"), UpdateInterval.ONCE_STARTUP); + yield return new(TB("Check every hour"), UpdateInterval.HOURLY); + yield return new(TB("Check every day"), UpdateInterval.DAILY); + yield return new (TB("Check every week"), UpdateInterval.WEEKLY); + } + + public static IEnumerable> GetUpdateBehaviourData() + { + yield return new(TB("Install updates manually"), UpdateInstallation.MANUAL); + yield return new(TB("Install updates automatically"), UpdateInstallation.AUTOMATIC); } public static IEnumerable> GetWorkspaceStorageBehaviorData() diff --git a/app/MindWork AI Studio/Settings/DataModel/DataApp.cs b/app/MindWork AI Studio/Settings/DataModel/DataApp.cs index 477afa30..67be8b9b 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataApp.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataApp.cs @@ -40,7 +40,12 @@ public sealed class DataApp(Expression>? configSelection = n /// /// If and when we should look for updates. /// - public UpdateBehavior UpdateBehavior { get; set; } = ManagedConfiguration.Register(configSelection, n => n.UpdateBehavior, UpdateBehavior.HOURLY); + public UpdateInterval UpdateInterval { get; set; } = ManagedConfiguration.Register(configSelection, n => n.UpdateInterval, UpdateInterval.HOURLY); + + /// + /// How updates should be installed. + /// + public UpdateInstallation UpdateInstallation { get; set; } = ManagedConfiguration.Register(configSelection, n => n.UpdateInstallation, UpdateInstallation.MANUAL); /// /// The navigation behavior. diff --git a/app/MindWork AI Studio/Settings/DataModel/PreviousModels/DataV1V3.cs b/app/MindWork AI Studio/Settings/DataModel/PreviousModels/DataV1V3.cs index 0b1c7883..88a8a3d2 100644 --- a/app/MindWork AI Studio/Settings/DataModel/PreviousModels/DataV1V3.cs +++ b/app/MindWork AI Studio/Settings/DataModel/PreviousModels/DataV1V3.cs @@ -41,7 +41,7 @@ public sealed class DataV1V3 /// /// If and when we should look for updates. /// - public UpdateBehavior UpdateBehavior { get; set; } = UpdateBehavior.ONCE_STARTUP; + public UpdateInterval UpdateInterval { get; set; } = UpdateInterval.ONCE_STARTUP; /// /// The navigation behavior. diff --git a/app/MindWork AI Studio/Settings/DataModel/UpdateInstallation.cs b/app/MindWork AI Studio/Settings/DataModel/UpdateInstallation.cs new file mode 100644 index 00000000..50d2a296 --- /dev/null +++ b/app/MindWork AI Studio/Settings/DataModel/UpdateInstallation.cs @@ -0,0 +1,7 @@ +namespace AIStudio.Settings.DataModel; + +public enum UpdateInstallation +{ + MANUAL, + AUTOMATIC, +} diff --git a/app/MindWork AI Studio/Settings/DataModel/UpdateBehavior.cs b/app/MindWork AI Studio/Settings/DataModel/UpdateInterval.cs similarity index 79% rename from app/MindWork AI Studio/Settings/DataModel/UpdateBehavior.cs rename to app/MindWork AI Studio/Settings/DataModel/UpdateInterval.cs index 0b82604f..a7a3ec8c 100644 --- a/app/MindWork AI Studio/Settings/DataModel/UpdateBehavior.cs +++ b/app/MindWork AI Studio/Settings/DataModel/UpdateInterval.cs @@ -1,6 +1,6 @@ namespace AIStudio.Settings.DataModel; -public enum UpdateBehavior +public enum UpdateInterval { NO_CHECK, ONCE_STARTUP, diff --git a/app/MindWork AI Studio/Settings/SettingsMigrations.cs b/app/MindWork AI Studio/Settings/SettingsMigrations.cs index 7c5a4293..e5041817 100644 --- a/app/MindWork AI Studio/Settings/SettingsMigrations.cs +++ b/app/MindWork AI Studio/Settings/SettingsMigrations.cs @@ -90,7 +90,7 @@ public static class SettingsMigrations IsSavingEnergy = previousData.IsSavingEnergy, NextProviderNum = previousData.NextProviderNum, ShortcutSendBehavior = previousData.ShortcutSendBehavior, - UpdateBehavior = previousData.UpdateBehavior, + UpdateInterval = previousData.UpdateInterval, }; } @@ -117,7 +117,7 @@ public static class SettingsMigrations IsSavingEnergy = previousData.IsSavingEnergy, NextProviderNum = previousData.NextProviderNum, ShortcutSendBehavior = previousData.ShortcutSendBehavior, - UpdateBehavior = previousData.UpdateBehavior, + UpdateInterval = previousData.UpdateInterval, WorkspaceStorageBehavior = previousData.WorkspaceStorageBehavior, WorkspaceStorageTemporaryMaintenancePolicy = previousData.WorkspaceStorageTemporaryMaintenancePolicy, }; @@ -141,7 +141,7 @@ public static class SettingsMigrations { EnableSpellchecking = previousConfig.EnableSpellchecking, IsSavingEnergy = previousConfig.IsSavingEnergy, - UpdateBehavior = previousConfig.UpdateBehavior, + UpdateInterval = previousConfig.UpdateInterval, NavigationBehavior = previousConfig.NavigationBehavior, }, diff --git a/app/MindWork AI Studio/Tools/Event.cs b/app/MindWork AI Studio/Tools/Event.cs index fc8ca8e3..fcf32604 100644 --- a/app/MindWork AI Studio/Tools/Event.cs +++ b/app/MindWork AI Studio/Tools/Event.cs @@ -18,6 +18,7 @@ public enum Event // Update events: USER_SEARCH_FOR_UPDATE, UPDATE_AVAILABLE, + INSTALL_UPDATE, // Chat events: HAS_CHAT_UNSAVED_CHANGES, diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs index 5e5efd3e..28daf3d1 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs @@ -53,7 +53,10 @@ public sealed class PluginConfiguration(bool isInternal, LuaState state, PluginT } // Config: check for updates, and if so, how often? - ManagedConfiguration.TryProcessConfiguration(x => x.App, x => x.UpdateBehavior, this.Id, settingsTable, dryRun); + ManagedConfiguration.TryProcessConfiguration(x => x.App, x => x.UpdateInterval, this.Id, settingsTable, dryRun); + + // Config: how should updates be installed? + ManagedConfiguration.TryProcessConfiguration(x => x.App, x => x.UpdateInstallation, this.Id, settingsTable, dryRun); // Config: allow the user to add providers? ManagedConfiguration.TryProcessConfiguration(x => x.App, x => x.AllowUserToAddProvider, this.Id, settingsTable, dryRun); diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs index 2553b537..92f77344 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs @@ -139,7 +139,11 @@ public static partial class PluginFactory wasConfigurationChanged = true; // Check for update behavior: - if(ManagedConfiguration.IsConfigurationLeftOver(x => x.App, x => x.UpdateBehavior, AVAILABLE_PLUGINS)) + if(ManagedConfiguration.IsConfigurationLeftOver(x => x.App, x => x.UpdateInterval, AVAILABLE_PLUGINS)) + wasConfigurationChanged = true; + + // Check for update installation behavior: + if(ManagedConfiguration.IsConfigurationLeftOver(x => x.App, x => x.UpdateInstallation, AVAILABLE_PLUGINS)) wasConfigurationChanged = true; // Check for users allowed to added providers: diff --git a/app/MindWork AI Studio/Tools/Services/UpdateService.cs b/app/MindWork AI Studio/Tools/Services/UpdateService.cs index 7cda6443..75335521 100644 --- a/app/MindWork AI Studio/Tools/Services/UpdateService.cs +++ b/app/MindWork AI Studio/Tools/Services/UpdateService.cs @@ -42,14 +42,14 @@ public sealed class UpdateService : BackgroundService, IMessageBusReceiver // // Set the update interval based on the user's settings. // - this.updateInterval = this.settingsManager.ConfigurationData.App.UpdateBehavior switch + this.updateInterval = this.settingsManager.ConfigurationData.App.UpdateInterval switch { - UpdateBehavior.NO_CHECK => Timeout.InfiniteTimeSpan, - UpdateBehavior.ONCE_STARTUP => Timeout.InfiniteTimeSpan, + UpdateInterval.NO_CHECK => Timeout.InfiniteTimeSpan, + UpdateInterval.ONCE_STARTUP => Timeout.InfiniteTimeSpan, - UpdateBehavior.HOURLY => TimeSpan.FromHours(1), - UpdateBehavior.DAILY => TimeSpan.FromDays(1), - UpdateBehavior.WEEKLY => TimeSpan.FromDays(7), + UpdateInterval.HOURLY => TimeSpan.FromHours(1), + UpdateInterval.DAILY => TimeSpan.FromDays(1), + UpdateInterval.WEEKLY => TimeSpan.FromDays(7), _ => TimeSpan.FromHours(1) }; @@ -58,7 +58,7 @@ public sealed class UpdateService : BackgroundService, IMessageBusReceiver // When the user doesn't want to check for updates, we can // return early. // - if(this.settingsManager.ConfigurationData.App.UpdateBehavior is UpdateBehavior.NO_CHECK) + if(this.settingsManager.ConfigurationData.App.UpdateInterval is UpdateInterval.NO_CHECK) return; // @@ -115,7 +115,25 @@ public sealed class UpdateService : BackgroundService, IMessageBusReceiver var response = await this.rust.CheckForUpdate(); if (response.UpdateIsAvailable) { - await this.messageBus.SendMessage(null, Event.UPDATE_AVAILABLE, response); + if (this.settingsManager.ConfigurationData.App.UpdateInstallation is UpdateInstallation.AUTOMATIC) + { + try + { + await this.messageBus.SendMessage(null, Event.INSTALL_UPDATE); + await this.rust.InstallUpdate(); + } + catch (Exception) + { + SNACKBAR!.Add(TB("Failed to install update automatically. Please try again manually."), Severity.Error, config => + { + config.Icon = Icons.Material.Filled.Error; + config.IconSize = Size.Large; + config.IconColor = Color.Error; + }); + } + } + else + await this.messageBus.SendMessage(null, Event.UPDATE_AVAILABLE, response); } else { diff --git a/app/MindWork AI Studio/wwwroot/changelog/v0.9.51.md b/app/MindWork AI Studio/wwwroot/changelog/v0.9.51.md index 77ab7d97..2b70b396 100644 --- a/app/MindWork AI Studio/wwwroot/changelog/v0.9.51.md +++ b/app/MindWork AI Studio/wwwroot/changelog/v0.9.51.md @@ -1,5 +1,8 @@ # v0.9.51, build 226 (2025-08-xx xx:xx UTC) - Added support for predefined chat templates in configuration plugins to help enterprises roll out consistent templates across the organization. +- Added the ability to choose between automatic and manual update installation to the app settings (default is manual). +- Added the ability to control the update installation behavior by configuration plugins. - Improved memory usage in several areas of the app. - Improved plugin management for configuration plugins so that hot reload detects when a provider or chat template has been removed. +- Changed the configuration plugin setting name for how often to check for updates from `UpdateBehavior` to `UpdateInterval`. - Fixed a bug in various assistants where some text fields were not reset when resetting.