public async Task <Playlist> CrawlAsync(PlaylistRequest request) { var playlistBuilder = new PlaylistBuilder() .SetStart(request.Start) .SetEnd(request.End); PlaylistItem lastItem = null; DateTime end = request.End; do { System.Diagnostics.Debug.WriteLine($"Start request for time: {end.ToString()}"); var html = await httpCrawler.GetHtmlAsync(end); var items = parser.ParseHtmlPlaylist(html); foreach (var item in items) { System.Diagnostics.Debug.WriteLine($"Handle item at ${item.Time.ToString()}"); if (item.Time >= request.Start && item.Time < request.End && !playlistBuilder.HasItem(item.Time, item.Title, item.Artist)) { playlistBuilder.AddItem(item); lastItem = item; } end = item.Time; } } while (lastItem != null && end >= request.Start); return(playlistBuilder.GetPlaylist()); }
private void AddPlayItem(MediaItem mediaItem, PlayScheduleMode scheduleMode, DateTime?startTime) { PlaylistBuilder builder = CreateBuilder(); PlaybillItem billItem = null; try { switch (scheduleMode) { case PlayScheduleMode.Timing: billItem = PlaybillItem.Timing(mediaItem, startTime.Value); builder.AddTimingItem((TimingPlaybillItem)billItem); break; case PlayScheduleMode.Auto: billItem = PlaybillItem.Auto(mediaItem); builder.AddAutoItem(new AutoPlayItem(billItem), this.SelectedPlayItem != null ? this.SelectedPlayItem.PlayItem : null); break; case PlayScheduleMode.TimingBreak: billItem = PlaybillItem.TimingBreak(mediaItem, startTime.Value); builder.AddTimingBreakItem((TimingPlaybillItem)billItem); break; } Rebuild(builder); } catch (Exception ex) { //editor.Rollback(); OnError(ex); } }
public async Task GetPlaylistDetails_ForPlaylistContainingAnAudio_DetailsContainsASingleAudio() { var playlist = new PlaylistBuilder() .WithId(GuidFactory.MakeFromInt(42)) .Build(); var playlistRepo = Substitute.For <IPlaylistEntriesRepository>(); playlistRepo .GetByIdAsync(Arg.Any <Guid>(), CancellationToken.None) .Returns(x => playlist); var audioRepo = Substitute.For <IAudioEntriesRepository>(); audioRepo .GetAudioEntriesByPlaylistAsync(playlist.PlaylistId, CancellationToken.None) .Returns(x => new[] { new AudioBuilder().Build() }); var sut = new PlaylistServiceBuilder() .WithPlaylistRepository(playlistRepo) .WithAudioRepository(audioRepo) .WithMapper(new MapperBuilder().WithDefaultProfile().Build()) .Build(); var playlistDetails = await sut.GetPlaylistDetails(playlist.PlaylistId, CancellationToken.None); var actual = playlistDetails.AudioEntries; actual.Should().ContainSingle(); }
public void GetPlaylist_SongAddedDuringFirstPeriod_NotAddedDuringSecondPeriod() { var requests = new List <SongRequest>(); requests.Add(new SongRequest() { Band = "Nirvana", SongTitle = "Come as you are", Length = new TimeSpan(0, 29, 3), Requester = "Lisa" }); requests.Add(new SongRequest() { Band = "Nirvana", SongTitle = "The man who sold the world", Length = new TimeSpan(0, 29, 3), Requester = "Lisa" }); var availability = new List <PersonAvailability>(); availability.Add(new PersonAvailability() { Name = "Lisa", Available = new bool[2] { true, true } }); var sut = new PlaylistBuilder(requests, availability); var playlistOne = sut.GetPlaylist(1); var playlistTwo = sut.GetPlaylist(2); Assert.AreEqual("Come as you are - Nirvana", playlistOne.First().TrackTitle); Assert.AreEqual("The man who sold the world - Nirvana", playlistTwo.First().TrackTitle); }
private void Process() { using (new ProgramProcessExecutionTimer(this.logger)) { try { Int32 cores = Environment.ProcessorCount; CancellationToken token = this.cancellation.Token; PlaylistBuilder builder = new PlaylistBuilder(this.logger, token); ParallelOptions options = new ParallelOptions { CancellationToken = token, MaxDegreeOfParallelism = cores }; List <PlaylistEntryHandler> playlist = builder.Build(this.arguments); this.logger.Verbose( MethodBase.GetCurrentMethod(), $"Playlist contains {playlist.Count} entries to process."); List <PlaylistEntryHandler> handlers = new List <PlaylistEntryHandler>(); while (playlist.Count > 0) { handlers.Clear(); while (handlers.Count < cores && playlist.Count > 0) { handlers.Add(playlist[0]); playlist.RemoveAt(0); } Parallel.ForEach(handlers, options, (handler) => { handler.Execute(); }); } } catch (OperationCanceledException) { this.logger.Warning( MethodBase.GetCurrentMethod(), "Operation of file processing canceled."); } catch (Exception exception) { this.logger.Critical( MethodBase.GetCurrentMethod(), exception); } } }
private void Rebuild(PlaylistBuilder builder) { var items = builder.Build(maxStopTime); _listAdapter.Clear(); foreach (var item in items) { _listAdapter.Add(item); } OnCommitted(); }
public void Delete(IPlayItem playItem) { BeforeDelete(playItem); var builder = new PlaylistBuilder(_playItems); builder.RemoveItem(playItem); var items = builder.Build(maxStopTime); _playItems.Clear(); foreach (var item in items) { _playItems.Add(item); } //OnCommitted(); }
public void GetPlaylist_RoomAtEndOfPlaylistToPlayRepeatSong_AddRepeatSong() { var requests = new List <SongRequest>(); requests.Add(new SongRequest() { Band = "Nirvana", SongTitle = "Come as you are", Length = new TimeSpan(0, 28, 3), Requester = "Lisa" }); requests.Add(new SongRequest() { Band = "Nirvana", SongTitle = "The man who sold the world", Length = new TimeSpan(0, 28, 3), Requester = "Lisa" }); requests.Add(new SongRequest() { Band = "Deftones", SongTitle = "Change", Length = new TimeSpan(0, 1, 3), Requester = "Lisa" }); var availability = new List <PersonAvailability>(); availability.Add(new PersonAvailability() { Name = "Lisa", Available = new bool[2] { true, true } }); var sut = new PlaylistBuilder(requests, availability); var playlistOne = sut.GetPlaylist(1); var playlistTwo = sut.GetPlaylist(2); Assert.AreEqual("Change - Deftones", playlistOne[1].TrackTitle); Assert.AreEqual("Change - Deftones", playlistTwo[1].TrackTitle); }
private void ChangeStartTime(IPlayItem playItem, DateTime time) { var builder = new PlaylistBuilder(_listAdapter); try { builder.ChangeStartTime(playItem, time); var items = builder.Build(maxStopTime); _listAdapter.Clear(); foreach (var item in items) { _listAdapter.Add(item); } OnCommitted(); } catch (Exception ex) { //editor.Rollback(); OnError(ex); } }
private void DeletePlayItem(IPlayItem playItem) { var builder = new PlaylistBuilder(_listAdapter); try { builder.RemoveItem(playItem); var items = builder.Build(maxStopTime); _listAdapter.Clear(); foreach (var item in items) { _listAdapter.Add(item); } OnCommitted(); } catch (Exception ex) { //editor.Rollback(); OnError(ex); } }
private static List <SongRequest> GetReturnPlaylise(List <SongRequest> requests, List <PersonAvailability> availability) { var sut = new PlaylistBuilder(requests, availability); return(sut.GetPlaylist(1)); }