Esempio n. 1
0
        public override void startVideoPreview(CancellationToken token)
        {
            if (!(Item is YoutubeVideoItem))
            {
                return;
            }

            YoutubeVideoStreamedItem video, audio;

            YoutubeVideoItem videoItem = Item as YoutubeVideoItem;

            videoItem.getStreams(out video, out audio, 500);

            if (video != null)
            {
                MediaProbe.open(video.Location, token);
            }
        }
Esempio n. 2
0
        public YoutubeViewModel(IRegionManager regionManager, IEventAggregator eventAggregator)
        {
            TokenSource = new CancellationTokenSource();

            RegionManager   = regionManager;
            EventAggregator = eventAggregator;
            NrColumns       = 4;

            MediaState = new MediaState();
            MediaStateCollectionView = new YoutubeCollectionView(MediaState);
            MediaState.clearUIState("Empty", DateTime.Now, MediaStateType.SearchResult);

            MediaStateCollectionView.SelectionChanged += mediaStateCollectionView_SelectionChanged;

            ViewCommand = new Command <SelectableMediaItem>((selectableItem) =>
            {
                if (selectableItem.Item.Metadata == null)
                {
                    return;
                }

                if (selectableItem.Item is YoutubeVideoItem)
                {
                    YoutubeVideoItem item = selectableItem.Item as YoutubeVideoItem;

                    if (item.IsEmbeddedOnly)
                    {
                        Process.Start("https://www.youtube.com/watch?v=" + item.VideoId);
                    }
                    else
                    {
                        YoutubeVideoStreamedItem video, audio;
                        item.getStreams(out video, out audio, (int)Properties.Settings.Default.MaxPlaybackResolution);

                        Shell.ShellViewModel.navigateToVideoView(video, null, audio);
                    }
                }
            });

            ViewChannelCommand = new AsyncCommand <SelectableMediaItem>(async(selectableItem) =>
            {
                if (selectableItem.Item.Metadata == null)
                {
                    return;
                }

                YoutubeItem item = selectableItem.Item as YoutubeItem;

                SearchResource.ListRequest searchListRequest = Youtube.Search.List("snippet");
                searchListRequest.ChannelId  = item.ChannelId;
                searchListRequest.MaxResults = YoutubeSearchViewModel.maxResults;
                searchListRequest.Order      = Google.Apis.YouTube.v3.SearchResource.ListRequest.OrderEnum.Date;

                MediaStateCollectionView.FilterModes.MoveCurrentToFirst();

                await searchAsync(searchListRequest, item.ChannelTitle, false);
            });

            ViewPlaylistCommand = new AsyncCommand <SelectableMediaItem>(async(selectableItem) =>
            {
                if (selectableItem.Item.Metadata == null)
                {
                    return;
                }

                YoutubePlaylistItem item = selectableItem.Item as YoutubePlaylistItem;

                PlaylistItemsResource.ListRequest searchListRequest = Youtube.PlaylistItems.List("snippet");
                searchListRequest.PlaylistId = item.PlaylistId;
                searchListRequest.MaxResults = YoutubeSearchViewModel.maxResults;

                MediaStateCollectionView.FilterModes.MoveCurrentToFirst();

                await searchAsync(searchListRequest, item.Name, false);
            });

            SubscribeCommand = new Command <SelectableMediaItem>((selectableItem) =>
            {
                YoutubeChannelItem item = selectableItem.Item as YoutubeChannelItem;

                EventAggregator.GetEvent <AddFavoriteChannelEvent>().Publish(item);
            });

            DownloadCommand = new AsyncCommand <SelectableMediaItem>(async(selectableItem) => {
                List <MediaItem> items = MediaStateCollectionView.getSelectedItems();
                if (items.Count == 0)
                {
                    items.Add(selectableItem.Item);
                }

                String outputPath = null;

                switch (YoutubePlugin.Properties.Settings.Default.VideoSaveMode)
                {
                case MediaViewer.Infrastructure.Constants.SaveLocation.Current:
                    {
                        outputPath = MediaFileWatcher.Instance.Path;
                        break;
                    }

                case MediaViewer.Infrastructure.Constants.SaveLocation.Ask:
                    {
                        DirectoryPickerView directoryPicker = new DirectoryPickerView();
                        directoryPicker.DirectoryPickerViewModel.InfoString   = "Select Output Directory";
                        directoryPicker.DirectoryPickerViewModel.SelectedPath = MediaFileWatcher.Instance.Path;

                        if (directoryPicker.ShowDialog() == false)
                        {
                            return;
                        }

                        outputPath = directoryPicker.DirectoryPickerViewModel.SelectedPath;

                        break;
                    }

                case MediaViewer.Infrastructure.Constants.SaveLocation.Fixed:
                    {
                        outputPath = YoutubePlugin.Properties.Settings.Default.FixedDownloadPath;
                        break;
                    }

                default:
                    break;
                }

                CancellableOperationProgressView progressView = new CancellableOperationProgressView();
                DownloadProgressViewModel vm = new DownloadProgressViewModel();
                progressView.DataContext     = vm;

                progressView.Show();
                vm.OkCommand.IsExecutable     = false;
                vm.CancelCommand.IsExecutable = true;

                await Task.Factory.StartNew(() =>
                {
                    vm.startDownload(outputPath, items);
                });

                vm.OkCommand.IsExecutable     = true;
                vm.CancelCommand.IsExecutable = false;
            });

            LoadNextPageCommand = new AsyncCommand(async() =>
            {
                await searchAsync(CurrentQuery, "", true);
            });

            SelectAllCommand = new Command(() =>
            {
                MediaStateCollectionView.selectAll();
            }, false);

            DeselectAllCommand = new Command(() =>
            {
                MediaStateCollectionView.deselectAll();
            });

            ShutdownCommand = new Command(() =>
            {
                Properties.Settings.Default.Save();
            });

            MediaState.UIMediaCollection.IsLoadingChanged += UIMediaCollection_IsLoadingChanged;

            MediaViewer.Model.Global.Commands.GlobalCommands.ShutdownCommand.RegisterCommand(ShutdownCommand);

            setupViews();

            EventAggregator.GetEvent <SearchEvent>().Subscribe(searchEvent);

            SearchTask = null;
        }