Ejemplo n.º 1
0
        /// <summary>
        /// Increments the currentTrackNumber and plays the correpsonding track.
        /// </summary>
        /// <param name="player">
        /// The BackgroundAudioPlayer
        /// </param>
        private IObservable <PortableUnit> PlayNextTrackAsync(BackgroundAudioPlayer player)
        {
            Debug.WriteLine("Player: PlayNextTrackAsync");

            if (this.NowPlaying == null || this.NowPlaying.Set == null)
            {
                Debug.WriteLine("Player: PlayNextTrackAsync (Now Playing not set)");
                return(this.StopPlayingAsync(player));
            }

            if (this.UserSettings.PlayOverWifiOnly && NetworkInterface.NetworkInterfaceType != NetworkInterfaceType.Wireless80211)
            {
                return(this.StopPlayingAsync(player));
            }

            ////
            if (this.NowPlaying.Set.IsLastTrack || this.NowPlaying.Set.IsPastLastTrack)
            {
                if (this.UserSettings.PlayNextMix)
                {
                    var currentMixId = this.NowPlaying.MixId;
                    var nextMix      = from ignoreLastTrack in this.NowPlaying.NextTrackAsync(player).DefaultIfEmpty()
                                       from stop in this.NowPlaying.StopAsync(player)
                                       from mix in PlayerService.GetNextMixAsync(currentMixId)
                                       from start in mix.StartPlayingAsync().Do(
                        t =>
                    {
                        this.NowPlaying = t;
                    })
                                       from _ in this.NowPlaying.SaveNowPlayingAsync()
                                       from play in this.PlayTrackAsync(player)
                                       select play;
                    return(nextMix
                           .Catch <PortableUnit, ServiceException>(ex => this.StopPlayingAsync(player))
                           .Catch <PortableUnit, WebException>(ex => this.StopPlayingAsync(player)));
                }

                return(this.StopPlayingAsync(player));
            }

            var playNextTrack = from nextResponse in this.NowPlaying.NextTrackAsync(player).Do(r =>
            {
                this.NowPlaying.Set = r.Set;
            })
                                from _ in this.NowPlaying.SaveNowPlayingAsync()
                                from play in this.PlayTrackAsync(player)
                                select play;

            return(playNextTrack
                   .Catch <PortableUnit, ServiceException>(ex => this.StopPlayingAsync(player))
                   .Catch <PortableUnit, WebException>(ex => this.StopPlayingAsync(player))
                   .Catch <PortableUnit, Exception>(
                       ex =>
            {
                var data = "Error playing next track, we have to stop!\r\n";
                if (this.NowPlaying != null)
                {
                    data += Json <PlayingMixContract> .Instance.SerializeToString(this.NowPlaying);
                }

                LittleWatsonLog.ReportException(ex, data);
                Debug.WriteLine("Player: PlayNextTrackAsync (Playback Error, stopping!)");
                return this.StopPlayingAsync(player);
            }));
        }
Ejemplo n.º 2
0
 private void ReportFatalStopError(Exception stopError, Exception originalError)
 {
     LittleWatsonLog.ReportException(stopError, "Errored trying to handle another error: " + originalError);
     this.Abort();
 }