diff --git a/Harmonia.WinUI/Converters/VolumeStateToIconConverter.cs b/Harmonia.WinUI/Converters/VolumeStateToIconConverter.cs
index cbcce10..6f37adf 100644
--- a/Harmonia.WinUI/Converters/VolumeStateToIconConverter.cs
+++ b/Harmonia.WinUI/Converters/VolumeStateToIconConverter.cs
@@ -1,9 +1,44 @@
using System;
+using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Data;
+using Microsoft.UI.Xaml.Markup;
+using Microsoft.UI.Xaml.Media;
using Harmonia.WinUI.Models;
namespace Harmonia.WinUI.Converters;
+public sealed partial class VolumeStateToIconConverter : IValueConverter
+{
+ public object? Convert(object value, Type targetType, object parameter, string language)
+ {
+ if (value is not VolumeState volumeState)
+ return null;
+
+ if (Application.Current.Resources[$"Volume{volumeState}Icon2"] is not string pathData)
+ return null;
+
+ return XamlBindingHelper.ConvertValue(typeof(Geometry), pathData.Trim());
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, string language)
+ {
+ throw new NotImplementedException();
+ }
+}
+
+public sealed partial class VolumeStateToFillConverter : IValueConverter
+{
+ public object? Convert(object value, Type targetType, object parameter, string language)
+ {
+ return value is VolumeState.Muted ? parameter : null;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, string language)
+ {
+ throw new NotImplementedException();
+ }
+}
+
public sealed partial class VolumeStateConverter : IValueConverter
{
public VolumeStateConverter()
diff --git a/Harmonia.WinUI/MainWindow.xaml b/Harmonia.WinUI/MainWindow.xaml
index 6c3d5f1..5b3c63a 100644
--- a/Harmonia.WinUI/MainWindow.xaml
+++ b/Harmonia.WinUI/MainWindow.xaml
@@ -20,13 +20,19 @@
-->
+
+
+
+
+
+
-
+
diff --git a/Harmonia.WinUI/Resources/Converters.xaml b/Harmonia.WinUI/Resources/Converters.xaml
index cfbe23c..adefda6 100644
--- a/Harmonia.WinUI/Resources/Converters.xaml
+++ b/Harmonia.WinUI/Resources/Converters.xaml
@@ -11,5 +11,7 @@
+
+
diff --git a/Harmonia.WinUI/Resources/Geometry.xaml b/Harmonia.WinUI/Resources/Geometry.xaml
index 44369e9..4585438 100644
--- a/Harmonia.WinUI/Resources/Geometry.xaml
+++ b/Harmonia.WinUI/Resources/Geometry.xaml
@@ -79,6 +79,37 @@
M6.717 3.55A.5.5 0 0 1 7 4v8a.5.5 0 0 1-.812.39L3.825 10.5H1.5A.5.5 0 0 1 1 10V6a.5.5 0 0 1 .5-.5h2.325l2.363-1.89a.5.5 0 0 1 .529-.06
+
+ M126,192H56a8,8,0,0,0-8,8V312a8,8,0,0,0,8,8h69.65a15.93,15.93,0,0,1,10.14,3.54l91.47,74.89A8,8,0,0,0,240,392V120a8,8,0,0,0-12.74-6.43l-91.47,74.89A15,15,0,0,1,126,192Z
+ M320,320c9.74-19.38,16-40.84,16-64,0-23.48-6-44.42-16-64
+ M368,368c19.48-33.92,32-64.06,32-112s-12-77.74-32-112
+ M416,416c30-46,48-91.43,48-160S446,143,416,96
+
+
+
+ M157.65,192H88a8,8,0,0,0-8,8V312a8,8,0,0,0,8,8h69.65a16,16,0,0,1,10.14,3.63l91.47,75A8,8,0,0,0,272,392.17V119.83a8,8,0,0,0-12.74-6.44l-91.47,75A16,16,0,0,1,157.65,192Z
+ M352,320c9.74-19.41,16-40.81,16-64,0-23.51-6-44.4-16-64
+ M400,368c19.48-34,32-64,32-112s-12-77.7-32-112
+
+
+
+ M189.65,192H120a8,8,0,0,0-8,8V312a8,8,0,0,0,8,8h69.65a16,16,0,0,1,10.14,3.63l91.47,75A8,8,0,0,0,304,392.17V119.83a8,8,0,0,0-12.74-6.44l-91.47,75A16,16,0,0,1,189.65,192Z
+ M384,320c9.74-19.41,16-40.81,16-64,0-23.51-6-44.4-16-64
+
+
+
+ M237.65,192H168a8,8,0,0,0-8,8V312a8,8,0,0,0,8,8h69.65a16,16,0,0,1,10.14,3.63l91.47,75A8,8,0,0,0,352,392.17V119.83a8,8,0,0,0-12.74-6.44l-91.47,75A16,16,0,0,1,237.65,192Z
+
+
+
+ M416,432 64,80
+ M224,136.92v33.8a4,4,0,0,0,1.17,2.82l24,24a4,4,0,0,0,6.83-2.82V120.57a24.53,24.53,0,0,0-12.67-21.72,23.91,23.91,0,0,0-25.55,1.83,8.27,8.27,0,0,0-.66.51l-31.94,26.15a4,4,0,0,0-.29,5.92l17.05,17.06a4,4,0,0,0,5.37.26Z
+ M224,375.08l-78.07-63.92A32,32,0,0,0,125.65,304H64V208h50.72a4,4,0,0,0,2.82-6.83l-24-24A4,4,0,0,0,90.72,176H56a24,24,0,0,0-24,24V312a24,24,0,0,0,24,24h69.76l91.36,74.8a8.27,8.27,0,0,0,.66.51A23.93,23.93,0,0,0,243.63,413,24.49,24.49,0,0,0,256,391.45V341.28a4,4,0,0,0-1.17-2.82l-24-24a4,4,0,0,0-6.83,2.82ZM125.82,336Z
+ M352,256c0-24.56-5.81-47.88-17.75-71.27a16,16,0,0,0-28.5,14.54C315.34,218.06,320,236.62,320,256q0,4-.31,8.13a8,8,0,0,0,2.32,6.25l19.66,19.67a4,4,0,0,0,6.75-2A146.89,146.89,0,0,0,352,256Z
+ M416,256c0-51.19-13.08-83.89-34.18-120.06a16,16,0,0,0-27.64,16.12C373.07,184.44,384,211.83,384,256c0,23.83-3.29,42.88-9.37,60.65a8,8,0,0,0,1.9,8.26l16.77,16.76a4,4,0,0,0,6.52-1.27C410.09,315.88,416,289.91,416,256Z
+ M480,256c0-74.26-20.19-121.11-50.51-168.61a16,16,0,1,0-27,17.22C429.82,147.38,448,189.5,448,256c0,47.45-8.9,82.12-23.59,113a4,4,0,0,0,.77,4.55L443,391.39a4,4,0,0,0,6.4-1C470.88,348.22,480,307,480,256Z
+
+
M0 3.5A.5.5 0 0 1 .5 3H1c2.202 0 3.827 1.24 4.874 2.418.49.552.865 1.102 1.126 1.532.26-.43.636-.98 1.126-1.532C9.173 4.24 10.798 3 13 3v1c-1.798 0-3.173 1.01-4.126 2.082A9.6 9.6 0 0 0 7.556 8a9.6 9.6 0 0 0 1.317 1.918C9.828 10.99 11.204 12 13 12v1c-2.202 0-3.827-1.24-4.874-2.418A10.6 10.6 0 0 1 7 9.05c-.26.43-.636.98-1.126 1.532C4.827 11.76 3.202 13 1 13H.5a.5.5 0 0 1 0-1H1c1.798 0 3.173-1.01 4.126-2.082A9.6 9.6 0 0 0 6.444 8a9.6 9.6 0 0 0-1.317-1.918C4.172 5.01 2.796 4 1 4H.5a.5.5 0 0 1-.5-.5
M13 5.466V1.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384l-2.36 1.966a.25.25 0 0 1-.41-.192
diff --git a/Harmonia.WinUI/Session/SessionRestorer.cs b/Harmonia.WinUI/Session/SessionRestorer.cs
index 7620f13..556786a 100644
--- a/Harmonia.WinUI/Session/SessionRestorer.cs
+++ b/Harmonia.WinUI/Session/SessionRestorer.cs
@@ -35,6 +35,8 @@ public class SessionRestorer(
private async Task RestoreAudioPlayerAsync()
{
AudioPlayerState audioPlayerState = sessionService.Session.Player;
+ audioPlayer.Volume = audioPlayerState.Volume;
+ audioPlayer.IsMuted = audioPlayerState.IsMuted;
if (string.IsNullOrWhiteSpace(audioPlayerState.PlaylistSongUID))
return;
diff --git a/Harmonia.WinUI/Session/SessionTracker.cs b/Harmonia.WinUI/Session/SessionTracker.cs
index 9686093..261ab45 100644
--- a/Harmonia.WinUI/Session/SessionTracker.cs
+++ b/Harmonia.WinUI/Session/SessionTracker.cs
@@ -34,6 +34,8 @@ public class SessionTracker(
audioPlayerState.Position = audioPlayer.Position;
audioPlayerState.PlaybackState = GetSemanticPlaybackState();
+ audioPlayerState.Volume = audioPlayer.Volume;
+ audioPlayerState.IsMuted = audioPlayer.IsMuted;
}
private AudioPlaybackState GetSemanticPlaybackState()
diff --git a/Harmonia.WinUI/Views/PlayerView.xaml b/Harmonia.WinUI/Views/PlayerView.xaml
index a6de57a..323fe29 100644
--- a/Harmonia.WinUI/Views/PlayerView.xaml
+++ b/Harmonia.WinUI/Views/PlayerView.xaml
@@ -167,6 +167,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Harmonia.WinUI/Views/PlaylistDetailView.xaml b/Harmonia.WinUI/Views/PlaylistDetailView.xaml
index cbf1684..33695b3 100644
--- a/Harmonia.WinUI/Views/PlaylistDetailView.xaml
+++ b/Harmonia.WinUI/Views/PlaylistDetailView.xaml
@@ -28,6 +28,11 @@
+
+
+
+
+