예제 #1
0
        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;
            }
        }
예제 #2
0
        void LoadCatalogIdNeedsToCreateCatalog_CatalogCreateCompleted(
            object sender, EchoNestApiEventArgs e)
        {
            if (e.Error == null)
            {
                Catalog cat = (Catalog)e.GetResultData();

                // TODO If isolated storage fails here, then the next time they
                // run the app, we will create another catalog. We need to handle
                // this somehow - perhaps use the unique device ID (which is bad
                // practice apparently) as the catalog name to make sure there is
                // only one catalog created per device ever.

                logger.Debug("Creating remote CatalogID completed successfully");

                SafeIsolatedStorageSettings settings = new SafeIsolatedStorageSettings();
                settings[CatalogIdPropertyName] = cat.Id;
                settings.Save();

                CatalogId = cat.Id;

                logger.Info("Completed LoadCatalogId");

            }
            else
            {
                logger.Error("Creating remote CatalogID failed, retrying");
                LoadCatalogIdNeedsToRunAgain();
            }
        }
예제 #3
0
        private bool GetControl()
        {
            bool haveControl = false;

            SafeIsolatedStorageSettings settings = new SafeIsolatedStorageSettings();
            string key = "MediaPlayerPermission";
            settings.TryGetValue<bool>(key, out haveControl);

            if (!haveControl)
            {
                MessageBoxResult result = MessageBox.Show(
                    "It looks like you are already listening to something. We need to stop it so we can play some awesome workout tunes.",
                    "Stop currently playing music?",
                    MessageBoxButton.OKCancel);

                if (result == MessageBoxResult.OK)
                {
                    haveControl = true;
                    settings[key] = true;
                    settings.Save();
                }
            }

            return haveControl;
        }