From 98902367104a0b98db17b013576837ba84cef20c Mon Sep 17 00:00:00 2001 From: Brian Bicknell Date: Wed, 5 Mar 2025 22:08:46 -0500 Subject: [PATCH] Fixed memory leak issue with song image source not getting disposed. Added playbackbar configuration button. --- Harmonia.UI/ViewModels/MainViewModel.cs | 2 +- Harmonia.UI/ViewModels/PlaybackBarViewModel.cs | 9 ++++++++- .../ViewModels/PlayingSongInfoViewModel.cs | 9 ++++++++- Harmonia.UI/Views/PlaybackBar.axaml | 18 +++++++++++++++++- 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Harmonia.UI/ViewModels/MainViewModel.cs b/Harmonia.UI/ViewModels/MainViewModel.cs index 4399bc1..87c7631 100644 --- a/Harmonia.UI/ViewModels/MainViewModel.cs +++ b/Harmonia.UI/ViewModels/MainViewModel.cs @@ -2,5 +2,5 @@ public partial class MainViewModel : ViewModelBase { - public string Greeting => "Welcome to Avalonia!"; + public static string Greeting => "Welcome to Avalonia!"; } diff --git a/Harmonia.UI/ViewModels/PlaybackBarViewModel.cs b/Harmonia.UI/ViewModels/PlaybackBarViewModel.cs index 93cd116..d32cbf6 100644 --- a/Harmonia.UI/ViewModels/PlaybackBarViewModel.cs +++ b/Harmonia.UI/ViewModels/PlaybackBarViewModel.cs @@ -16,7 +16,7 @@ using System.Windows.Input; namespace Harmonia.UI.ViewModels; -public partial class PlaybackBarViewModel : ViewModelBase +public partial class PlaybackBarViewModel : ViewModelBase, IDisposable { private readonly IAudioPlayer _audioPlayer; private readonly IAudioImageCache _audioImageCache; @@ -52,6 +52,7 @@ public partial class PlaybackBarViewModel : ViewModelBase } private set { + _songImageSource?.Dispose(); _songImageSource = value; OnPropertyChanged(); } @@ -217,4 +218,10 @@ public partial class PlaybackBarViewModel : ViewModelBase { _audioPlayer.NextAsync(); } + + public void Dispose() + { + SongImageSource?.Dispose(); + GC.SuppressFinalize(this); + } } \ No newline at end of file diff --git a/Harmonia.UI/ViewModels/PlayingSongInfoViewModel.cs b/Harmonia.UI/ViewModels/PlayingSongInfoViewModel.cs index 29f815f..9348edd 100644 --- a/Harmonia.UI/ViewModels/PlayingSongInfoViewModel.cs +++ b/Harmonia.UI/ViewModels/PlayingSongInfoViewModel.cs @@ -11,7 +11,7 @@ using System.Threading.Tasks; namespace Harmonia.UI.ViewModels; -public class PlayingSongInfoViewModel : ViewModelBase +public class PlayingSongInfoViewModel : ViewModelBase, IDisposable { private readonly IAudioPlayer _audioPlayer; private readonly IAudioImageCache _audioImageCache; @@ -41,6 +41,7 @@ public class PlayingSongInfoViewModel : ViewModelBase } private set { + _songImageSource?.Dispose(); _songImageSource = value; OnPropertyChanged(); } @@ -88,4 +89,10 @@ public class PlayingSongInfoViewModel : ViewModelBase using MemoryStream stream = new(songPictureInfo.Data); SongImageSource = new(stream); } + + public void Dispose() + { + SongImageSource?.Dispose(); + GC.SuppressFinalize(this); + } } \ No newline at end of file diff --git a/Harmonia.UI/Views/PlaybackBar.axaml b/Harmonia.UI/Views/PlaybackBar.axaml index 6f13f91..f02395b 100644 --- a/Harmonia.UI/Views/PlaybackBar.axaml +++ b/Harmonia.UI/Views/PlaybackBar.axaml @@ -82,7 +82,7 @@ - + + + + + + + +