This repository has been archived on 2020-12-20. You can view files and clone it, but cannot push or open issues or pull requests.
aurora-sharp-desktop/Aurora/Design/Views/Songs/SongsViewModel.cs

144 lines
3.6 KiB
C#
Raw Normal View History

2019-05-20 00:21:54 +00:00
using System.Collections.ObjectModel;
2019-07-05 18:17:09 +00:00
using Aurora.Models.Media;
using Aurora.Services;
using Aurora.Services.PlayerService;
using Xamarin.Forms;
2019-07-05 18:17:09 +00:00
namespace Aurora.Design.Views.Songs
{
public class SongsViewModel : BaseViewModel
{
#region Fields
private ObservableCollection<BaseMedia> _songsList;
private BaseMedia _selectedSong;
private BaseMedia _playingSong;
private PlayerService _player;
#endregion Fields
#region Constructor
public SongsViewModel()
{
_player = PlayerService.Instance;
_songsList = new ObservableCollection<BaseMedia>();
PlayCommand = new Command(PlayExecute, PlayCanExecute);
_player.PlaybackStateChanged += OnPlaybackStateChanged;
Initialize();
}
#endregion Constructor
#region Properties
public ObservableCollection<BaseMedia> SongsList
{
get { return _songsList; }
set { SetProperty(ref _songsList, value); }
}
public BaseMedia SelectedSong
{
get { return _selectedSong; }
set { SetProperty(ref _selectedSong, value); }
}
public BaseMedia PlayingSong
{
get { return _playingSong; }
set { SetProperty(ref _playingSong, value); }
}
public Command PlayCommand { get; private set; }
#endregion Properties
#region Methods
public void Initialize()
{
2019-05-20 00:21:54 +00:00
SongsList = LibraryService.Instance.GetLibrary();
}
#endregion Methods
#region Commmands
public override bool PreviousCanExecute()
{
return true;
}
public override void PreviousExecute()
{
}
public override bool PlayCanExecute()
2019-05-22 22:59:15 +00:00
{
switch (_player.PlaybackState)
{
case PlaybackState.Buffering:
{
return true;
}
case PlaybackState.Playing:
{
return true;
}
case PlaybackState.Stopped:
{
return true;
}
}
return false;
2019-05-22 22:59:15 +00:00
}
public async override void PlayExecute()
{
if (!_player.IsMediaLoaded(_selectedSong))
{
await _player.LoadMedia(_selectedSong).ConfigureAwait(true);
}
_player.Play();
switch (_player.PlaybackState)
{
case PlaybackState.Buffering:
{
_player.Play();
break;
}
case PlaybackState.Playing:
{
_player.Pause();
break;
}
}
}
public override bool NextCanExecute()
{
return true;
}
public override void NextExecute()
{
}
#endregion Commands
#region Events
/// <summary>
/// PlayerService playback state changed event handler.
/// </summary>
/// <param name="sender">The sending object.</param>
/// <param name="args">Event arguments.</param>
public void OnPlaybackStateChanged(object sender, PlaybackStateChangedEventArgs args)
{
OnPropertyChanged("PlayButtonText");
}
#endregion Events
}
}