Example #1
0
        public async Task HandleAsync(PlaylistEnded args)
        {
            await _logService.LogAppActivityAsync($"Playlist has ended for party with code {args.PartyCode}. Sending to all listeners");

            Party party = await _partyService.GetPartyWithCodeAsync(args.PartyCode);

            if (party.Listeners.Count < 1)
            {
                await party.DeletePlaylistAsync();
                await _partyService.EndPartyAsync(args.PartyCode);
                return;
            }

            List<Track> playlistSongs = await GenerateNewPlaylist(party);
            // If there is atleast 1 person still in the party, regenerate the playlist
            party.Playlist = new Playlist(playlistSongs, party.Listeners, party.PartyCode, party.Playlist.History);

            await party.Playlist.StartAsync();

            await _partyHubContext.Clients.Group(args.PartyCode).SendAsync("UpdatePartyView",
            new
            {
                Song = party.Playlist.CurrentSong,
                Position = party.Playlist.CurrentPositionInSong()
            },
            party.Playlist.History,
            party.Playlist.Queue
            );
        }
Example #2
0
 protected virtual void OnPlaylistEnded(string playlist)
 {
     PlaylistEnded?.Invoke(this, new PlaylistEnded
     {
         PlaylistName = playlist
     });
 }
Example #3
0
        public async Task Ticker_OnTick_PlaylistEnded()
        {
            const string key    = "ticker";
            var          ticker = new Ticker();
            var          tracks = new List <ExampleTrack>
            {
                new ExampleTrack {
                    Start = DateTime.Now.AddSeconds(-1), Stop = DateTime.Now.AddSeconds(1), Title = "1"
                }
            };
            var playlistEnded = new PlaylistEnded();

            ticker.AddChannel(key, tracks);
            ticker.PlaylistEnded += (sender, ended) => playlistEnded = ended;
            ticker.Start();
            await Task.Delay(TimeSpan.FromSeconds(3));

            playlistEnded.PlaylistName.Should().Be(key);
        }
Example #4
0
        /// <summary>
        /// Воспроизвести следующий файл
        /// </summary>
        public void PlayNext()
        {
            if (playlist.Count == 0)
            {
                // если больше нечего вопроизводить - отправить сигнал об этом
                currentFile = null;
                PlaylistEnded?.Invoke(this, EventArgs.Empty);
            }

            else
            {
                // если список воспроизведения циклический, то ставим файл обратно в очередь
                if (repeat && currentFile != null)
                {
                    playlist.Enqueue(currentFile);
                }
                currentFile = playlist.Dequeue();
                engine.Open(currentFile);
                engine.Play();
            }
        }
Example #5
0
        public async Task HandleAsync(PlaylistEnded args)
        {
            await _logService.LogAppActivityAsync($"Playlist has ended for party with code {args.PartyCode}. Sending to all listeners");

            Party party = await _partyService.GetPartyWithCodeAsync(args.PartyCode);

            if (party.Listeners.Count < 1)
            {
                await party.DeletePlaylistAsync();

                await _partyService.EndPartyAsync(args.PartyCode);

                return;
            }

            List <Song> songs = new List <Song>();

            foreach (PartyGoer listener in party.Listeners)
            {
                songs.AddRange(await _partyGoerService.GetRecommendedSongsAsync(listener.Id, 5));
            }

            List <Song> playlistSongs = await _spotifyHttpClient.GetRecommendedSongsAsync(party.Listeners.ElementAt(0).Id, songs.GetRandomNItems(5).Select(p => p.TrackUri).ToList(), 0);

            // If there is atleast 1 person still in the party, regenerate the playlist
            party.Playlist = new Playlist(playlistSongs, party.Listeners, party.PartyCode, party.Playlist.History);

            await party.Playlist.StartAsync();

            await _partyHubContext.Clients.Group(args.PartyCode).SendAsync("UpdatePartyView",
                                                                           new
            {
                Song     = party.Playlist.CurrentSong,
                Position = party.Playlist.CurrentPositionInSong()
            },
                                                                           party.Playlist.History,
                                                                           party.Playlist.Queue
                                                                           );
        }