Exemplo n.º 1
0
        void CheckPlaybackStatus(NSTimer timer)
        {
            if (CurrentSong == null || CurrentItem == null)
            {
                return;
            }
            if (Duration > 0 && Math.Abs(lastDurration) < Double.Epsilon)
            {
                Seek(Settings.CurrentPlaybackPercent);
                lastDurration = Duration;
            }
            if (State == PlaybackState.Paused || State == PlaybackState.Stopped)
            {
                return;
            }
            var time = player.CurrentTimeSeconds();

            if (player.Rate > 0 && Math.Abs(time - lastSeconds) > Double.Epsilon)
            {
                lastSeconds = time;
                return;
            }
            if (checkPlaybackTask != null && !checkPlaybackTask.IsCompleted)
            {
                return;
            }
            checkPlaybackTask = Task.Run(async() => {
                if (player.Rate > 0)
                {
                    await PrepareSong(CurrentSong, isVideo);
                    await player.PlaySong(CurrentSong, isVideo, true);
                    if (time > 0)
                    {
                        player.Seek(time);
                    }
                }
                else
                {
                    Play();
                }
            });
        }
Exemplo n.º 2
0
        void CheckPlaybackStatus(NSTimer timer)
        {
            try
            {
                if (CurrentSong == null || (!(player.CurrentPlayer?.IsPlayerItemValid ?? false) && (DateTime.Now - playbackStarted).TotalSeconds < 10))
                {
                    return;
                }
                if (Duration > 0 && lastDurration.IsZero())
                {
                    Seek(Settings.CurrentPlaybackPercent);
                    lastDurration = Duration;
                }
                if (State == PlaybackState.Paused || State == PlaybackState.Stopped)
                {
                    return;
                }
                var time = player.CurrentTimeSeconds();
                if (player.Rate > 0 && (time - lastSeconds).IsNotZero())
                {
                    lastSeconds = time;
                    return;
                }
                if (checkPlaybackTask != null && !checkPlaybackTask.IsCompleted)
                {
                    return;
                }
                checkPlaybackTask = Task.Run(async() =>
                {
                    //if (player.Rate > 0)
                    //{
                    await PrepareSong(CurrentSong, isVideo);
                    await player.PlaySong(CurrentSong, isVideo, true);
                    if (time > 0)
                    {
                        player.Seek(time);
                    }

                    //}
                    //else
                    //Play();
                });
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Exemplo n.º 3
0
        public async Task PlaySong(Song song, bool playVideo = false)
        {
                        #if __IOS__
            if (!playVideo)
            {
                PictureInPictureManager.Shared.StopPictureInPicture();
            }
                        #endif
            player.Pause();
            CleanupSong(CurrentSong);
            CurrentSong                     = song;
            Settings.CurrentTrackId         = "";
            Settings.CurrentPlaybackIsVideo = false;
            NotificationManager.Shared.ProcCurrentTrackPositionChanged(new TrackPosition
            {
                CurrentTime = 0,
                Duration    = 0,
            });
            if (song == null)
            {
                State = PlaybackState.Stopped;
                return;
            }
            State = PlaybackState.Buffering;
                        #if __IOS__
            silentPlayer.Play();
                        #endif

            var success = await player.PlaySong(song, playVideo);

            ScrobbleManager.Shared.SetNowPlaying(song, Settings.CurrentTrackId);
            if (CurrentSong != song)
            {
                return;
            }
            if (!success)
            {
                this.State = PlaybackState.Stopped;
                PlaybackManager.Shared.NextTrack();
            }
        }