public PlayViewModel(IMessenger messenger)
: base(messenger)
{
////if (IsInDesignMode)
////{
//// // Code runs in Blend --> create design time data.
////}
////else
////{
//// // Code runs "for real"
////}
MessengerInstance.Register<SongGroupMessage>(
this,
m =>
{
songs = m.Songs;
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
SongsAnalyzed = true;
});
LoadSongs(false);
});
MessengerInstance.Register<SongGroupMessage>(
this,
m =>
{
});
MessengerInstance.Register<MediaPlayerStopMessage>(
this,
m =>
{
if (Player != null)
{
Player.Stop();
}
});
PlayCommand = new RelayCommand(
() => {
if (Player.State == MediaState.Paused)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(o =>
{
Player.Resume();
}));
}
else if (Player.State == MediaState.Stopped)
{
bool canPlay = true;
if (!MediaPlayer.GameHasControl)
{
canPlay = GetControl();
}
if (canPlay)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(o =>
{
Player.Play();
}));
}
}
else
{
ThreadPool.QueueUserWorkItem(new WaitCallback(o =>
{
Player.Pause();
}));
}
});
PrevCommand = new RelayCommand(() =>
{
ThreadPool.QueueUserWorkItem(new WaitCallback(o =>
{
Player.MovePrev();
}));
});
NextCommand = new RelayCommand(() =>
{
ThreadPool.QueueUserWorkItem(new WaitCallback(o =>
{
Player.MoveNext();
}));
});
SafeIsolatedStorageSettings settings = new SafeIsolatedStorageSettings();
BPMChangedCommand = new RelayCommand<ManipulationCompletedEventArgs>((e) =>
{
settings[BPMPropertyName] = BPM;
settings.Save();
if (Player != null && Player.State == MediaState.Playing)
{
Player.Stop();
LoadSongs(true);
} else {
LoadSongs(false);
}
});
int bpm;
if (settings.TryGetValue<int>(BPMPropertyName, out bpm))
{
BPM = bpm;
} else {
BPM = 120;
}
}