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 @@
-
+
@@ -188,7 +188,7 @@
-
+
@@ -225,17 +225,19 @@
-
+
-
+
-
-
+
+
+
+
@@ -243,8 +245,18 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Views/Settings.xaml.cs b/Views/Settings.xaml.cs
index 06daa37..bf2e57a 100644
--- a/Views/Settings.xaml.cs
+++ b/Views/Settings.xaml.cs
@@ -1,4 +1,5 @@
-using System.ComponentModel;
+using System;
+using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
@@ -11,6 +12,7 @@ using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Navigation;
+using System.Windows.Threading;
using unison.Handlers;
namespace unison
@@ -37,8 +39,7 @@ namespace unison
}
}
- HotkeyHandler _hotkeys = (HotkeyHandler)Application.Current.Properties["hotkeys"];
-
+ readonly HotkeyHandler _hotkeys = (HotkeyHandler)Application.Current.Properties["hotkeys"];
public Settings()
{
@@ -74,11 +75,13 @@ namespace unison
{
ConnectionStatus.Text = $"{unison.Resources.Resources.Settings_ConnectionStatusConnected} {mpd.GetVersion()}.";
ConnectButton.IsEnabled = false;
+ UpdateDatabaseButton.IsEnabled = true;
}
else
{
ConnectionStatus.Text = unison.Resources.Resources.Settings_ConnectionStatusOffline;
ConnectButton.IsEnabled = true;
+ UpdateDatabaseButton.IsEnabled = false;
}
}
@@ -146,6 +149,37 @@ namespace unison
MPDConnect_Clicked(null, null);
}
+ private void MPDDatabaseUpdate_Clicked(object sender, RoutedEventArgs e)
+ {
+ MPDHandler mpd = (MPDHandler)Application.Current.Properties["mpd"];
+ if (mpd.IsConnected())
+ mpd.UpdateDB();
+ }
+
+ private static void TimedText(TextBlock textBlock, int time)
+ {
+ DispatcherTimer Timer = new DispatcherTimer();
+ Timer.Interval = TimeSpan.FromSeconds(time);
+ Timer.Tick += (sender, args) =>
+ {
+ Timer.Stop();
+ textBlock.Visibility = Visibility.Collapsed;
+ };
+ Timer.Start();
+ }
+
+ public void MPDDatabaseUpdate_Start()
+ {
+ UpdateDBMessage.Visibility = Visibility.Visible;
+ }
+
+ public void MPDDatabaseUpdate_Stop()
+ {
+ UpdateDBMessage2.Visibility = Visibility.Visible;
+ TimedText(UpdateDBMessage, 2);
+ TimedText(UpdateDBMessage2, 2);
+ }
+
private void CheckUpdates(object sender, RoutedEventArgs e)
{
UpdateHandler updater = (UpdateHandler)Application.Current.Properties["updater"];