From 7d71d9053809757df2b5a5a6007b50994823f168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Marchal?= Date: Mon, 14 Nov 2022 23:53:36 +0100 Subject: [PATCH] Database update feature --- App.xaml.cs | 3 ++- Handlers/MPDHandler.cs | 33 +++++++++++++++++++++++- Resources/Resources.Designer.cs | 45 ++++++++++++++++++++++++++------- Resources/Resources.es-ES.resx | 15 ++++++++--- Resources/Resources.fr-FR.resx | 15 ++++++++--- Resources/Resources.resx | 15 ++++++++--- Views/MainWindow.xaml.cs | 12 +++++++-- Views/Settings.xaml | 28 ++++++++++++++------ Views/Settings.xaml.cs | 40 ++++++++++++++++++++++++++--- 9 files changed, 173 insertions(+), 33 deletions(-) diff --git a/App.xaml.cs b/App.xaml.cs index b657ee4..0e6ffe0 100644 --- a/App.xaml.cs +++ b/App.xaml.cs @@ -15,11 +15,12 @@ namespace unison protected override void OnStartup(StartupEventArgs e) { + unison.Resources.Resources.Culture = System.Globalization.CultureInfo.CurrentCulture; + //debug language //unison.Resources.Resources.Culture = System.Globalization.CultureInfo.GetCultureInfo("fr-FR"); //unison.Resources.Resources.Culture = System.Globalization.CultureInfo.GetCultureInfo("es-ES"); - base.OnStartup(e); _mpd = new MPDHandler(); diff --git a/Handlers/MPDHandler.cs b/Handlers/MPDHandler.cs index 1ad1ef6..d5b9c6c 100644 --- a/Handlers/MPDHandler.cs +++ b/Handlers/MPDHandler.cs @@ -334,16 +334,21 @@ namespace unison }, token).ConfigureAwait(false); } + private bool UpdateStarted = false; + private async Task HandleIdleResponseAsync(string subsystems) { try { - if (subsystems.Contains("player") || subsystems.Contains("mixer") || subsystems.Contains("output") || subsystems.Contains("options")) + if (subsystems.Contains("player") || subsystems.Contains("mixer") || subsystems.Contains("output") || subsystems.Contains("options") || subsystems.Contains("update")) { await UpdateStatusAsync(); if (subsystems.Contains("player")) await UpdateSongAsync(); + + if (subsystems.Contains("update")) + UpdateDatabaseSync(); } } catch (Exception e) @@ -353,6 +358,30 @@ namespace unison } } + private void UpdateDatabaseSync() + { + if (!UpdateStarted) + { + Application.Current.Dispatcher.Invoke(() => + { + MainWindow MainWin = (MainWindow)Application.Current.MainWindow; + MainWin.GetSettings().MPDDatabaseUpdate_Start(); + }); + + UpdateStarted = true; + } + else + { + Application.Current.Dispatcher.Invoke(() => + { + MainWindow MainWin = (MainWindow)Application.Current.MainWindow; + MainWin.GetSettings().MPDDatabaseUpdate_Stop(); + MainWin.UpdateStats(); + }); + UpdateStarted = false; + } + } + private async Task UpdateStatusAsync() { if (_connection == null || _isUpdatingStatus) @@ -611,6 +640,8 @@ namespace unison return _Playlist.ToArray().Count(); } + public void UpdateDB() => SendCommand(new UpdateCommand()); + private string FormatTime(TimeSpan time) { string FormattedTime = ""; diff --git a/Resources/Resources.Designer.cs b/Resources/Resources.Designer.cs index 60efaad..70676da 100644 --- a/Resources/Resources.Designer.cs +++ b/Resources/Resources.Designer.cs @@ -60,6 +60,15 @@ namespace unison.Resources { } } + /// + /// Looks up a localized string similar to Database. + /// + public static string Database { + get { + return ResourceManager.GetString("Database", resourceCulture); + } + } + /// /// Looks up a localized string similar to day. /// @@ -636,6 +645,15 @@ namespace unison.Resources { } } + /// + /// Looks up a localized string similar to Update database. + /// + public static string Settings_UpdateDatabase { + get { + return ResourceManager.GetString("Settings_UpdateDatabase", resourceCulture); + } + } + /// /// Looks up a localized string similar to Version:. /// @@ -861,15 +879,6 @@ namespace unison.Resources { } } - /// - /// Looks up a localized string similar to Stats. - /// - public static string Stats { - get { - return ResourceManager.GetString("Stats", resourceCulture); - } - } - /// /// Looks up a localized string similar to Albums:. /// @@ -924,6 +933,24 @@ namespace unison.Resources { } } + /// + /// Looks up a localized string similar to Updating database.... + /// + public static string Stats_UpdateDBMessage1 { + get { + return ResourceManager.GetString("Stats_UpdateDBMessage1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to done!. + /// + public static string Stats_UpdateDBMessage2 { + get { + return ResourceManager.GetString("Stats_UpdateDBMessage2", resourceCulture); + } + } + /// /// Looks up a localized string similar to MPD uptime:. /// diff --git a/Resources/Resources.es-ES.resx b/Resources/Resources.es-ES.resx index 1a33235..b0b9d0d 100644 --- a/Resources/Resources.es-ES.resx +++ b/Resources/Resources.es-ES.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Base de datos + día @@ -309,6 +312,9 @@ aquí + + Actualizar base de datos + Versión: @@ -384,9 +390,6 @@ Iniciar Snapcast - - Estadísticas - Álbumes: @@ -405,6 +408,12 @@ Tiempo total jugado: + + Actualizando base de datos... + + + ¡terminado! + Tiempo de actividad de MPD: diff --git a/Resources/Resources.fr-FR.resx b/Resources/Resources.fr-FR.resx index 5f38932..63abdb0 100644 --- a/Resources/Resources.fr-FR.resx +++ b/Resources/Resources.fr-FR.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Base de donnée + jour @@ -309,6 +312,9 @@ ici + + Mettre à jour la base de donnée + Version : @@ -384,9 +390,6 @@ Démarrer Snapcast - - Stats - Albums : @@ -405,6 +408,12 @@ Temps d'écoute écoulé : + + Mise à jour de la base de donnée... + + + fini ! + MPD lancé depuis : diff --git a/Resources/Resources.resx b/Resources/Resources.resx index 4f851c6..6bd53a6 100644 --- a/Resources/Resources.resx +++ b/Resources/Resources.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Database + day @@ -309,6 +312,9 @@ here + + Update database + Version: @@ -384,9 +390,6 @@ Start Snapcast - - Stats - Albums: @@ -405,6 +408,12 @@ Total time played: + + Updating database... + + + done! + MPD uptime: diff --git a/Views/MainWindow.xaml.cs b/Views/MainWindow.xaml.cs index 7cac0c4..aab718e 100644 --- a/Views/MainWindow.xaml.cs +++ b/Views/MainWindow.xaml.cs @@ -7,6 +7,7 @@ using System.Windows.Interop; using System.Windows.Input; using System.Windows.Controls.Primitives; using System.Diagnostics; +using System.Data; namespace unison { @@ -18,6 +19,8 @@ namespace unison private readonly DispatcherTimer _timer; private readonly MPDHandler _mpd; + public Settings GetSettings() => _settingsWin; + public MainWindow() { InitHwnd(); @@ -45,12 +48,17 @@ namespace unison TimeSlider.Value = _mpd.GetCurrentTime() / _mpd.GetCurrentSong().Time * 100; } + public void UpdateStats() + { + _mpd.QueryStats(); + _settingsWin.UpdateStats(); + } + public void OnConnectionChanged(object sender, EventArgs e) { if (_mpd.IsConnected()) { - _mpd.QueryStats(); - _settingsWin.UpdateStats(); + UpdateStats(); ConnectionOkIcon.Visibility = Visibility.Visible; ConnectionFailIcon.Visibility = Visibility.Collapsed; diff --git a/Views/Settings.xaml b/Views/Settings.xaml index 2246f85..556ad58 100644 --- a/Views/Settings.xaml +++ b/Views/Settings.xaml @@ -52,7 +52,7 @@ -