예제 #1
0
        private async Task StreamCurrentlyPlayingAsync(CancellationToken ct)
        {
            var currentPlayback = new SpotifyTogglePlaybackResult
            {
                Title = "Loading current play state..."
            };

            Available(currentPlayback);

            while (true)
            {
                var playback = await _client.GetCurrentPlaybackAsync(ct);

                if (playback == null)
                {
                    currentPlayback.Title = "Nothing playing";
                }
                else
                {
                    var progress = TimeSpan.FromMilliseconds(playback.ProgressMs ?? 0);
                    var duration = TimeSpan.FromMilliseconds(playback.Item.DurationMs);
                    var action   = playback.IsPlaying ? "Pause" : "Play";
                    currentPlayback.IsPlaying        = playback.IsPlaying;
                    currentPlayback.Title            = $"{action} '{playback.Item.Name}' on {playback.Device?.Name}";
                    currentPlayback.Description      = $"{progress:mm\\:ss}";
                    currentPlayback.PlaybackProgress = $"{progress:mm\\:ss}";
                    currentPlayback.TrackDuration    = $"{duration:mm\\:ss}";
                    currentPlayback.AlbumName        = playback.Item.Album.Name;
                    currentPlayback.ArtistName       = playback.Item.Artists.FirstOrDefault()?.Name;
                    currentPlayback.ReleaseDate      = playback.Item.Album.ReleaseDate;
                    currentPlayback.ActiveTrackName  = playback.Item.Name;
                    currentPlayback.CoverArt         = playback.Item.Album.Images.FirstOrDefault(i => i.Width == 300)?.Url ??
                                                       playback.Item.Album.Images.FirstOrDefault()?.Url;
                    currentPlayback.PreviewUri = PreviewUri.NowPlaying;
                }

                Updated(currentPlayback);
                await Task.Delay(TimeSpan.FromSeconds(1), ct);

                ct.ThrowIfCancellationRequested();
            }
        }