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;
                }
            }));
        }
Example #6
0
        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;
 }
Example #8
0
        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)));
        }