Ejemplo n.º 1
0
 private void RefetchTrack(AudioTrack track, Action <AudioTrack> callback)
 {
     if (track != null && track.Source != null)
     {
         Uri           currentSource = track.Source;
         AudioService  instance      = AudioService.Instance;
         List <string> ids           = new List <string>();
         ids.Add(track.GetTagId());
         Action <BackendResult <List <AudioObj>, ResultCode> > callback1 = (Action <BackendResult <List <AudioObj>, ResultCode> >)(res =>
         {
             if (res.ResultCode == ResultCode.Succeeded && res.ResultData != null && (res.ResultData.Count > 0 && currentSource.OriginalString != res.ResultData[0].url))
             {
                 Execute.ExecuteOnUIThread((Action)(() => callback(AudioTrackHelper.CreateTrack(res.ResultData[0]))));
             }
             else
             {
                 //Action closure_0 = null;
                 Execute.ExecuteOnUIThread(/*closure_0 ??*/ (/*closure_0 =*/ (Action)(() => callback(null))));
             }
         });
         instance.GetAudio(ids, callback1);
     }
     else
     {
         callback(null);
     }
 }
Ejemplo n.º 2
0
        protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState)
        {
            bool flag = true;

            try
            {
                switch (playState)
                {
                case PlayState.TrackReady:
                    if (player.PlayerState != PlayState.Playing)
                    {
                        flag = false;
                        AudioTrackHelper.PlayCurrentTrack(player, (Action <bool>)(res => this.NotifyComplete()), false);
                        break;
                    }
                    break;

                case PlayState.TrackEnded:
                    PlaybackSettings settings = PlaylistManager.ReadPlaybackSettings(false);
                    if (settings.Repeat)
                    {
                        player.Stop();
                        player.Position = TimeSpan.FromSeconds(0.0);
                        flag            = false;
                        AudioTrackHelper.PlayCurrentTrack(player, (Action <bool>)(res => this.NotifyComplete()), false);
                        break;
                    }
                    bool       startedNewCycle;
                    AudioTrack nextTrack = this.GetNextTrack(player, out startedNewCycle, settings);
                    if (nextTrack != null)
                    {
                        if (!startedNewCycle)
                        {
                            player.Track = nextTrack;
                            AudioTrackHelper.PlayCurrentTrack(player, (Action <bool>)(res => this.NotifyComplete()), false);
                            flag = false;
                            break;
                        }
                        this.NotifyComplete();
                        break;
                    }
                    break;
                }
                AudioTrackHelper.BroadcastTrackIfNeeded(player, null, null, false, false);
                if (!flag)
                {
                    return;
                }
                this.NotifyComplete();
            }
            catch
            {
                this.NotifyComplete();
            }
        }
Ejemplo n.º 3
0
        private void NextOrPreviousTrack(bool next)
        {
            bool       startedNewCycle = false;
            AudioTrack nextTrack       = AudioTrackHelper.GetNextTrack(BackgroundAudioPlayer.Instance, next, out startedNewCycle, null, true);

            if (nextTrack == null)
            {
                return;
            }
            BGAudioPlayerWrapper.Instance.Track = nextTrack;
        }
Ejemplo n.º 4
0
 private void Play(GestureEventArgs e)
 {
     this.SetPlayPauseVisibilityManually(false);
     Logger.Instance.Info("AudioAttachmentUC.play_Tap, AssignedCurrentTrack = " + this.AssignedCurrentTrack.ToString());
     this.NotifyPlaying();
     if (!this.AssignedCurrentTrack)
     {
         AttachmentViewModel dc = this.DataContext as AttachmentViewModel;
         if (dc != null)
         {
             AudioTrack track = AudioTrackHelper.CreateTrack(this.AttachmentVM.Audio);
             Logger.Instance.Info("Starting track for uri: {0}", dc.ResourceUri);
             BGAudioPlayerWrapper.Instance.Track = track;
             if (!this._initializedUri)
             {
                 Logger.Instance.Info("AudioAttachmentUC initializedUri = false, getting updated audio info");
                 AudioService  instance = AudioService.Instance;
                 List <string> ids      = new List <string>();
                 ids.Add(dc.MediaOwnerId.ToString() + "_" + dc.MediaId);
                 Action <BackendResult <List <AudioObj>, ResultCode> > callback = (Action <BackendResult <List <AudioObj>, ResultCode> >)(res =>
                 {
                     if (res.ResultCode != ResultCode.Succeeded)
                     {
                         return;
                     }
                     this._initializedUri = true;
                     AudioObj audio = res.ResultData.FirstOrDefault <AudioObj>();
                     if (audio == null)
                     {
                         return;
                     }
                     if (audio.url != dc.ResourceUri)
                     {
                         return;
                     }
                     Logger.Instance.Info("Received different uri for audio: {0}", audio.url);
                     dc.ResourceUri = audio.url;
                     dc.Audio       = audio;
                     this.Dispatcher.BeginInvoke(delegate
                     {
                         if (!this.AssignedCurrentTrack && BGAudioPlayerWrapper.Instance.Track != null || (BGAudioPlayerWrapper.Instance.PlayerState == PlayState.Paused || AudioTrackHelper.GetPositionSafe().TotalMilliseconds >= 1E-05))
                         {
                             return;
                         }
                         BGAudioPlayerWrapper.Instance.Track = AudioTrackHelper.CreateTrack(audio);
                         this.Play();
                     });
                 });
                 instance.GetAudio(ids, callback);
             }
         }
     }
     this.Play();
 }
Ejemplo n.º 5
0
 public bool TryAssignTrack()
 {
     if (this.ContentRestricted > 0)
     {
         return(false);
     }
     if ((DateTime.Now - this._lastTimeAssignedTrack).TotalMilliseconds > 5000.0)
     {
         BGAudioPlayerWrapper.Instance.Track = AudioTrackHelper.CreateTrack(this.Track);
         this._lastTimeAssignedTrack         = DateTime.Now;
     }
     return(true);
 }
Ejemplo n.º 6
0
        private void TrackAction(AudioPageViewModel.Audios.AudioData2 item)
        {
            if (BGAudioPlayerWrapper.Instance.Track != null && item.UniqueId == BGAudioPlayerWrapper.Instance.Track.Tag)
            {
                BGAudioPlayerWrapper.Instance.Pause();
            }
            else
            {
                AudioObj a = new AudioObj();
                a.duration = item.duration.ToString();
                a.artist   = item.artist;
                a.title    = item.title;
                a.url      = item.url;
                a.id       = item.id;
                a.owner_id = item.owner_id;
                BGAudioPlayerWrapper.Instance.Track = AudioTrackHelper.CreateTrack(a);
                BGAudioPlayerWrapper.Instance.Play();

                //todo:плейлист формировать из того списка, который открыт



                //
                List <AudioObj> tracks = new List <AudioObj>();

                foreach (AudioPageViewModel.Audios.AudioData2 adata in (base.DataContext as AudioPageViewModel).audios.items)
                {
                    AudioObj o = new AudioObj();
                    //AudioHeader ah = new AudioHeader(o);
                    o.artist   = adata.artist;
                    o.duration = adata.duration.ToString();
                    o.id       = adata.id;
                    o.owner_id = adata.owner_id;
                    o.title    = adata.title;
                    o.url      = adata.url;
                    tracks.Add(o);
                }

                PlaylistManager.SetAudioAgentPlaylist(tracks, CurrentMediaSource.AudioSource);
                AudioHeader track = new AudioHeader(a);
                if (!track.TryAssignTrack())
                {
                    return;
                }
                //if (need_navigate)
                //    Navigator.Current.NavigateToAudioPlayer(true);
                //else
                //    BGAudioPlayerWrapper.Instance.Play();
                //
            }
        }
Ejemplo n.º 7
0
        protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param)
        {
            bool flag = true;

            try
            {
                string str1 = "AudioPlaybackAgent.OnUserAction " + action + " track name=" + track.Title ?? "";
                string str2 = !(track.Source != null) ? str1 + ", Source=null" : str1 + ", Source=" + track.Source.ToString();
                bool   startedNewCycle;
                switch (action)
                {
                case UserAction.Stop:
                    player.Stop();
                    break;

                case UserAction.Pause:
                    player.Pause();
                    break;

                case UserAction.Play:
                    if (player.PlayerState != PlayState.Playing)
                    {
                        flag = false;
                        AudioTrackHelper.PlayCurrentTrack(player, (Action <bool>)(res => this.NotifyComplete()), false);
                        break;
                    }
                    break;

                case UserAction.SkipNext:
                    AudioTrack nextTrack = this.GetNextTrack(player, out startedNewCycle, null);
                    player.Track = nextTrack;
                    flag         = false;
                    AudioTrackHelper.PlayCurrentTrack(player, (Action <bool>)(res => this.NotifyComplete()), false);
                    break;

                case UserAction.SkipPrevious:
                    AudioTrack previousTrack = this.GetPreviousTrack(player, out startedNewCycle, null);
                    player.Track = previousTrack;
                    flag         = false;
                    AudioTrackHelper.PlayCurrentTrack(player, (Action <bool>)(res => this.NotifyComplete()), false);
                    break;

                case UserAction.FastForward:
                    player.FastForward();
                    break;

                case UserAction.Rewind:
                    player.Rewind();
                    break;

                case UserAction.Seek:
                    player.Position = (TimeSpan)param;
                    break;
                }
                if (!flag)
                {
                    return;
                }
                this.NotifyComplete();
            }
            catch
            {
                if (!flag)
                {
                    return;
                }
                this.NotifyComplete();
            }
        }
Ejemplo n.º 8
0
 private AudioTrack GetRequiredTrack(BackgroundAudioPlayer player, AudioPlayer.NextTrackType trackType, out bool startedNewCycle, PlaybackSettings settings = null)
 {
     return(AudioTrackHelper.GetNextTrack(player, trackType == AudioPlayer.NextTrackType.Next, out startedNewCycle, settings, false));
 }