예제 #1
0
        public async void Play()
        {
            try
            {
                var item = _item;

                if (item.IsVideo && (item.Chapters == null || item.MediaStreams == null))
                {
                    item = await _apiClient.GetItemAsync(item.Id, _apiClient.CurrentUserId);
                }
                else if (item.IsAudio && (item.MediaStreams == null))
                {
                    item = await _apiClient.GetItemAsync(item.Id, _apiClient.CurrentUserId);
                }
                else if (string.IsNullOrEmpty(item.Path))
                {
                    item = await _apiClient.GetItemAsync(item.Id, _apiClient.CurrentUserId);
                }

                await _playbackManager.Play(new PlayOptions(item));
            }
            catch (Exception)
            {
                _presentation.ShowDefaultErrorMessage();
            }
        }
 public Task Play()
 {
     return(_playbackManager.Play(new PlayOptions(_item)
     {
         StartPositionTicks = Chapter.StartPositionTicks
     }));
 }
예제 #3
0
        async void _apiWebSocket_PlayCommand(object sender, PlayRequestEventArgs e)
        {
            if (_session.CurrentUser == null)
            {
                OnAnonymousRemoteControlCommand();
                return;
            }

            try
            {
                var result = await _apiClient.GetItemsAsync(new ItemQuery
                {
                    Ids    = e.Request.ItemIds,
                    UserId = _session.CurrentUser.Id,

                    Fields = new[] { ItemFields.Chapters, ItemFields.MediaStreams, ItemFields.Path }
                });

                await _playbackManager.Play(new PlayOptions
                {
                    StartPositionTicks = e.Request.StartPositionTicks ?? 0,
                    GoFullScreen       = true,
                    Items = result.Items.ToList()
                });
            }
            catch (Exception ex)
            {
                _logger.ErrorException("Error processing play command", ex);
            }
        }
예제 #4
0
        private async void PlayAllFromHere(object commandParameter)
        {
            var itemViewModel = commandParameter as ItemViewModel;

            if (itemViewModel != null)
            {
                try
                {
                    var items = _listItems.SkipWhile(i => i != itemViewModel)
                                .Where(i => _playbackManager.CanPlay(i.Item))
                                .ToList();

                    if (items.Count > 0)
                    {
                        var result = await _apiClient.GetItemsAsync(new ItemQuery
                        {
                            UserId = _apiClient.CurrentUserId,

                            Fields = new[] { ItemFields.Path, ItemFields.Chapters, ItemFields.MediaSources, ItemFields.ParentId },

                            Ids = items.Select(i => i.Item.Id).ToArray()
                        });

                        await _playbackManager.Play(new PlayOptions(result.Items));
                    }
                }
                catch (Exception)
                {
                    _presentationManager.ShowDefaultErrorMessage();
                }
            }
        }
예제 #5
0
 private Task Play(IEnumerable <BaseItemDto> items)
 {
     return(_playback.Play(new PlayOptions
     {
         GoFullScreen = false,
         Items = items.ToList()
     }));
 }
예제 #6
0
 private async Task playChannel(string uri)
 {
     if (null == uri)
     {
         _bot.SendMessage("Play Track failed due to null track");
         return;
     }
     _bot.SendMessage("Play " + uri);
     _radioPlaybackManager.Play(new Uri(uri));
 }
예제 #7
0
        public ItemOverviewViewModel(BaseItemDto item, IApiClient apiClient, IImageManager imageManager, IPlaybackManager playbackManager, ISessionManager sessionManager)
        {
            _item = item;

            Artwork = new ItemArtworkViewModel(item, apiClient, imageManager) { DesiredImageHeight = 700 };
            Info = new ItemInfoViewModel(item);

            if (item.Type == "Episode")
                Artwork.PreferredImageTypes = new[] { ImageType.Screenshot, ImageType.Art, ImageType.Primary };

            Artwork.PropertyChanged += (s, e) => {
                if (e.PropertyName == "Size") {
                    OnPropertyChanged("Size");
                }
            };

            PlayCommand = new RelayCommand(o => playbackManager.Play(new PlayOptions(item) { GoFullScreen = true, EnableCustomPlayers = true, Resume = false }));
            ResumeCommand = new RelayCommand(o => playbackManager.Play(new PlayOptions(item) { GoFullScreen = true, EnableCustomPlayers = true, Resume = true }));
            PlayAllCommand = new RelayCommand(async o => {
                var items = await apiClient.GetItemsAsync(new Model.Querying.ItemQuery { ParentId = item.Id, UserId = sessionManager.CurrentUser.Id, Recursive = true, IncludeItemTypes = new[] { "Movie", "Episode", "Track" } });
                await playbackManager.Play(new PlayOptions(items.Items) { EnableCustomPlayers = true, GoFullScreen = true });
            });
        }
예제 #8
0
        private async void Play(object commandParameter)
        {
            var chapter = (ChapterInfoViewModel)commandParameter;

            try
            {
                await _playback.Play(new PlayOptions
                {
                    Items = new List <BaseItemDto>()
                    {
                        Item
                    },
                    StartPositionTicks = chapter.Chapter.StartPositionTicks
                });
            }
            catch
            {
                _presentationManager.ShowDefaultErrorMessage();
            }
        }
        async void _apiWebSocket_PlayCommand(object sender, GenericEventArgs <PlayRequest> e)
        {
            _logger.Debug("_apiWebSocket_PlayCommand {0} {1}", e.Argument.ItemIds, e.Argument.StartPositionTicks);
            if (_sessionManager.LocalUserId == null)
            {
                OnAnonymousRemoteControlCommand();
                return;
            }

            try
            {
                var apiClient = _sessionManager.ActiveApiClient;

                var result = await apiClient.GetItemsAsync(new ItemQuery
                {
                    Ids    = e.Argument.ItemIds,
                    UserId = _sessionManager.LocalUserId,

                    Fields = new[]
                    {
                        ItemFields.Chapters,
                        ItemFields.MediaStreams,
                        ItemFields.Overview,
                        ItemFields.Path,
                        ItemFields.People,
                        ItemFields.MediaSources
                    }
                }, CancellationToken.None);

                await _playbackManager.Play(new PlayOptions
                {
                    StartPositionTicks = e.Argument.StartPositionTicks ?? 0,
                    GoFullScreen       = true,
                    Items = result.Items.ToList()
                });
            }
            catch (Exception ex)
            {
                _logger.ErrorException("Error processing play command", ex);
            }
        }
예제 #10
0
        public ItemTileViewModel(IApiClient apiClient, IImageManager imageManager, IServerEvents serverEvents,
                                 INavigator navigator, IPlaybackManager playbackManager, BaseItemDto item)
        {
            _imageManager = imageManager;
            _navigator = navigator;
            _playbackManager = playbackManager;
            _item = item;

            Image = new ItemArtworkViewModel(item, apiClient, imageManager);
            Image.PreferredImageTypes = new[] { ImageType.Primary, ImageType.Thumb, ImageType.Backdrop };
            Image.EnforcePreferredImageAspectRatio = true;
            Image.PropertyChanged += (senger, args) => {
                if (args.PropertyName == "Size") {
                    OnPropertyChanged("Size");
                    OnPropertyChanged("ShowDisplayName");
                }
            };

            DisplayNameGenerator = GetDisplayNameWithAiredSpecial;
            GoToDetailsCommand = new RelayCommand(async o => navigator.Navigate(Go.To.Item(Item)));
            PlayCommand = new RelayCommand(o => _playbackManager.Play(new PlayOptions(Item) { GoFullScreen = true, EnableCustomPlayers = true, Resume = true }));

            serverEvents.UserDataChanged += serverEvents_UserDataChanged;
        }