62 lines
1.5 KiB
C#
62 lines
1.5 KiB
C#
using Avalonia.Controls;
|
|
using Harmonia.Core.Engine;
|
|
using Harmonia.Core.Models;
|
|
using Harmonia.Core.Player;
|
|
using System.ComponentModel;
|
|
using System.Linq;
|
|
|
|
namespace Harmonia.UI.Views;
|
|
|
|
public partial class MainWindow : Window
|
|
{
|
|
private readonly IAudioPlayer _audioPlayer;
|
|
|
|
private const string ApplicationTitle = "Harmonia";
|
|
|
|
public MainWindow(IAudioPlayer audioPlayer)
|
|
{
|
|
_audioPlayer = audioPlayer;
|
|
_audioPlayer.PropertyChanged += OnAudioPlayerPropertyChanged;
|
|
|
|
Title = ApplicationTitle;
|
|
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void OnAudioPlayerPropertyChanged(object? sender, PropertyChangedEventArgs e)
|
|
{
|
|
switch (e.PropertyName)
|
|
{
|
|
case nameof(_audioPlayer.State):
|
|
Title = GetUpdatedAppTitle();
|
|
//PropertyChanged(nameof(Title));
|
|
break;
|
|
}
|
|
}
|
|
|
|
private string GetUpdatedAppTitle()
|
|
{
|
|
return _audioPlayer.State switch
|
|
{
|
|
AudioPlaybackState.Stopped => ApplicationTitle,
|
|
_ => $"{GetSongArtistsAndTitle()} - {ApplicationTitle}"
|
|
};
|
|
}
|
|
|
|
private string GetSongArtistsAndTitle()
|
|
{
|
|
if (_audioPlayer.PlayingSong == null)
|
|
return string.Empty;
|
|
|
|
Song song = _audioPlayer.PlayingSong.Song;
|
|
|
|
string[] values =
|
|
[
|
|
string.Join(" / ", song.Artists ?? song.AlbumArtists),
|
|
song.Title ?? song.ShortFileName
|
|
];
|
|
|
|
return string.Join(" - ", values.Where(value => string.IsNullOrWhiteSpace(value) == false));
|
|
}
|
|
}
|