public async Task <bool> PlayAsync(IPlaylist playlist, IPlaylistSortOption sortOption) { Guard.IsNotNull(playlist, nameof(playlist)); Guard.IsNotNull(sortOption, nameof(sortOption)); return(await _dispatcherQueue.EnqueueAsync(async() => { StopPlaybackMedia(); try { var bufferItemsSource = await UpdatePlaylistItemsSourceAsync(playlist, sortOption); var firstItem = await bufferItemsSource.GetAsync(0); if (firstItem == null || false == await UpdatePlayingMediaAsync(firstItem, null)) { return false; } SetCurrentContent(firstItem, 0); return true; } catch { Clear(); ClearPlaylist(); ClearCurrentContent(); return false; } })); }
public static VideoPlayRequestMessage PlayPlaylist(IPlaylist playlist, IPlaylistSortOption sortOption) { return(new VideoPlayRequestMessage() { Playlist = playlist, SortOptions = sortOption, }); }
public static VideoPlayRequestMessage PlayPlaylist(IPlaylist playlist, IPlaylistSortOption sortOption, IVideoContent playlistItem, TimeSpan?initialPosition = null) { return(new VideoPlayRequestMessage() { Playlist = playlist, SortOptions = sortOption, PlaylistItem = playlistItem, Potision = initialPosition, }); }
public void Receive(VideoPlayRequestMessage message) { _lastPlayedLive = null; async Task <VideoPlayRequestMessageData> ResolvePlay(VideoPlayRequestMessage message) { IPlaylist playlist = null; IPlaylistSortOption sortOption = message.SortOptions; if (message.PlayWithQueue ?? false) { playlist = _queuePlaylist; } else if (message.Playlist != null) { playlist = message.Playlist; } else if (message.PlaylistId == QueuePlaylist.Id.Id && message.PlaylistOrigin == PlaylistItemsSourceOrigin.Local) { playlist = _queuePlaylist; sortOption = QueuePlaylist.DefaultSortOption; } else if (message.PlaylistId != null) { Guard.IsNotNull(message.PlaylistId, nameof(message.PlaylistId)); Guard.IsNotNull(message.PlaylistOrigin, nameof(message.PlaylistOrigin)); var playlistId = new PlaylistId() { Id = message.PlaylistId, Origin = message.PlaylistOrigin.Value }; var factory = _playlistItemsSourceResolver.Resolve(playlistId.Origin); playlist = await factory.Create(playlistId); } if (sortOption is null && message.PlaylistSortOptionsAsString is not null) { var factory = _playlistItemsSourceResolver.Resolve(playlist.PlaylistId.Origin); sortOption = factory.DeserializeSortOptions(message.PlaylistSortOptionsAsString); }
public async Task <bool> PlayAsync(ISortablePlaylist playlist, IPlaylistSortOption sortOption, IVideoContent item, TimeSpan?startPosition = null) { Guard.IsNotNull(playlist, nameof(playlist)); Guard.IsNotNull(sortOption, nameof(sortOption)); Guard.IsNotNull(item, nameof(item)); Guard.IsFalse(item.VideoId == default(VideoId), "Not contain playable VideoId or PlaylistId"); if (startPosition == null && CurrentPlaylistItem?.VideoId == item.VideoId) { startPosition = _mediaPlayer.PlaybackSession?.Position; } return(await _dispatcherQueue.EnqueueAsync(async() => { StopPlaybackMedia(); try { var bufferedItems = await UpdatePlaylistItemsSourceAsync(playlist, sortOption); bool result = await UpdatePlayingMediaAsync(item, startPosition); var index = bufferedItems.IndexOf(item); Guard.IsBetweenOrEqualTo(index, 0, 5000, nameof(index)); SetCurrentContent(item, index); return result; } catch { Clear(); ClearPlaylist(); ClearCurrentContent(); return false; } })); }
public async Task <IEnumerable <IVideoContent> > GetPagedItemsAsync(int pageIndex, int pageSize, IPlaylistSortOption sortOption, CancellationToken cancellationToken = default) { var sort = sortOption as UserVideoPlaylistSortOption; var result = await _userProvider.GetUserVideosAsync(_userId, pageIndex, pageSize, sort.SortKey, sort.SortOrder); Guard.IsTrue(result.IsSuccess, nameof(result.IsSuccess)); return(result.Data.Items.Select(x => new NvapiVideoContent(x.Essential))); }
public BufferedPlaylistItemsSource(IUnlimitedPlaylist playlistItemsSource, IPlaylistSortOption sortOption) : base(new ObservableCollection <IVideoContent>()) { _playlistItemsSource = playlistItemsSource; SortOption = sortOption; }
public async Task <IEnumerable <IVideoContent> > GetPagedItemsAsync(int pageIndex, int pageSize, IPlaylistSortOption sortOption, CancellationToken cancellationToken = default) { var sort = sortOption as ChannelVideoPlaylistSortOption; var items = await _channelProvider.GetChannelVideo(_channelId, pageIndex, sort.SortKey, sort.SortOrder); Guard.IsTrue(items.IsSuccess, nameof(items.IsSuccess)); return(items.Data.Videos.Select(x => new ChannelVideoContent(x, _channelId))); }