2019-05-19 20:21:54 -04:00
|
|
|
|
using System.Collections.ObjectModel;
|
2019-07-05 14:17:09 -04:00
|
|
|
|
using Aurora.Models.Media;
|
|
|
|
|
using Aurora.Services;
|
|
|
|
|
using Aurora.Services.PlayerService;
|
2019-05-22 10:30:41 -04:00
|
|
|
|
using Xamarin.Forms;
|
2019-05-19 17:25:42 -04:00
|
|
|
|
|
2019-07-05 14:17:09 -04:00
|
|
|
|
namespace Aurora.Design.Views.Songs
|
2019-05-18 17:25:36 -04:00
|
|
|
|
{
|
2019-05-19 17:25:42 -04:00
|
|
|
|
public class SongsViewModel : BaseViewModel
|
2019-05-18 17:25:36 -04:00
|
|
|
|
{
|
2019-05-19 17:25:42 -04:00
|
|
|
|
#region Fields
|
2019-05-24 10:27:19 -04:00
|
|
|
|
private ObservableCollection<BaseMedia> _songsList;
|
|
|
|
|
private BaseMedia _selectedSong;
|
2019-11-06 22:32:43 -05:00
|
|
|
|
private PlayerService _player;
|
2019-05-19 17:25:42 -04:00
|
|
|
|
|
|
|
|
|
#endregion Fields
|
|
|
|
|
|
|
|
|
|
#region Constructor
|
2019-05-18 17:25:36 -04:00
|
|
|
|
public SongsViewModel()
|
|
|
|
|
{
|
2019-11-06 22:32:43 -05:00
|
|
|
|
_player = PlayerService.Instance;
|
2019-05-24 10:27:19 -04:00
|
|
|
|
_songsList = new ObservableCollection<BaseMedia>();
|
2019-11-09 14:55:09 -05:00
|
|
|
|
PlayCommand = new Command(OnPlayButtonExecute, CanPlayButtonExecute);
|
2019-11-06 22:32:43 -05:00
|
|
|
|
|
|
|
|
|
_player.PlaybackStateChanged += OnPlaybackStateChanged;
|
|
|
|
|
|
2019-05-19 17:25:42 -04:00
|
|
|
|
Initialize();
|
2019-05-18 17:25:36 -04:00
|
|
|
|
}
|
2019-05-19 17:25:42 -04:00
|
|
|
|
|
|
|
|
|
#endregion Constructor
|
|
|
|
|
|
|
|
|
|
#region Properties
|
2019-05-24 10:27:19 -04:00
|
|
|
|
public ObservableCollection<BaseMedia> SongsList
|
2019-05-19 17:25:42 -04:00
|
|
|
|
{
|
|
|
|
|
get { return _songsList; }
|
2019-05-22 10:30:41 -04:00
|
|
|
|
set { SetProperty(ref _songsList, value); }
|
2019-05-19 17:25:42 -04:00
|
|
|
|
}
|
|
|
|
|
|
2019-05-24 10:27:19 -04:00
|
|
|
|
public BaseMedia SelectedSong
|
2019-05-19 17:25:42 -04:00
|
|
|
|
{
|
|
|
|
|
get { return _selectedSong; }
|
2019-05-22 10:30:41 -04:00
|
|
|
|
set { SetProperty(ref _selectedSong, value); }
|
2019-05-19 17:25:42 -04:00
|
|
|
|
}
|
|
|
|
|
|
2019-05-22 10:30:41 -04:00
|
|
|
|
public Command PlayCommand { get; private set; }
|
|
|
|
|
|
2019-05-19 17:25:42 -04:00
|
|
|
|
#endregion Properties
|
|
|
|
|
|
|
|
|
|
#region Methods
|
|
|
|
|
public void Initialize()
|
|
|
|
|
{
|
|
|
|
|
|
2019-05-19 20:21:54 -04:00
|
|
|
|
SongsList = LibraryService.Instance.GetLibrary();
|
2019-05-19 17:25:42 -04:00
|
|
|
|
}
|
|
|
|
|
|
2019-11-06 22:32:43 -05:00
|
|
|
|
#endregion Methods
|
|
|
|
|
|
|
|
|
|
#region Commmands
|
2019-11-09 14:55:09 -05:00
|
|
|
|
public override bool CanPreviousButtonExecute()
|
2019-11-06 22:32:43 -05:00
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2019-11-09 14:55:09 -05:00
|
|
|
|
public override void OnPreviousButtonExecute()
|
2019-11-06 22:32:43 -05:00
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-09 14:55:09 -05:00
|
|
|
|
public override bool CanPlayButtonExecute()
|
2019-05-22 18:59:15 -04:00
|
|
|
|
{
|
2019-11-06 22:32:43 -05:00
|
|
|
|
switch (_player.PlaybackState)
|
|
|
|
|
{
|
|
|
|
|
case PlaybackState.Buffering:
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
case PlaybackState.Playing:
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
case PlaybackState.Stopped:
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
2019-05-22 18:59:15 -04:00
|
|
|
|
}
|
|
|
|
|
|
2019-11-09 14:55:09 -05:00
|
|
|
|
public async override void OnPlayButtonExecute()
|
2019-11-06 22:32:43 -05:00
|
|
|
|
{
|
2019-11-08 19:54:51 -05:00
|
|
|
|
base.Media = _selectedSong;
|
|
|
|
|
if (!_player.IsMediaLoaded(base.Media))
|
2019-11-06 22:32:43 -05:00
|
|
|
|
{
|
2019-11-08 19:54:51 -05:00
|
|
|
|
await _player.LoadMedia(base.Media).ConfigureAwait(true);
|
2019-11-06 22:32:43 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (_player.PlaybackState)
|
|
|
|
|
{
|
|
|
|
|
case PlaybackState.Buffering:
|
|
|
|
|
{
|
|
|
|
|
_player.Play();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case PlaybackState.Playing:
|
|
|
|
|
{
|
|
|
|
|
_player.Pause();
|
|
|
|
|
break;
|
|
|
|
|
}
|
2019-11-29 12:37:57 -05:00
|
|
|
|
case PlaybackState.Stopped:
|
|
|
|
|
{
|
|
|
|
|
_player.Play();
|
|
|
|
|
break;
|
|
|
|
|
}
|
2019-11-06 22:32:43 -05:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-09 14:55:09 -05:00
|
|
|
|
public override bool CanNextButtonExecute()
|
2019-11-06 22:32:43 -05:00
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-09 14:55:09 -05:00
|
|
|
|
public override void OnNextButtonExecute()
|
2019-11-06 22:32:43 -05:00
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#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");
|
|
|
|
|
}
|
2019-05-19 17:25:42 -04:00
|
|
|
|
|
2019-11-06 22:32:43 -05:00
|
|
|
|
#endregion Events
|
2019-05-18 17:25:36 -04:00
|
|
|
|
}
|
|
|
|
|
}
|