コード例 #1
0
        private async void SecondaryAppView_Consolidated(ApplicationView sender, ApplicationViewConsolidatedEventArgs args)
        {
            Debug.WriteLine($"SecondaryAppView_Consolidated: IsAppInitiated:{args.IsAppInitiated} IsUserInitiated:{args.IsUserInitiated}");

            await PlaylistPlayer.ClearAsync();

            await SecondaryViewPlayerNavigationService.NavigateAsync(nameof(BlankPage), _BlankPageNavgationTransitionInfo);

            // Note: 1803時点での話
            // VisibleBoundsChanged がアプリ終了前に呼ばれるが
            // この際メインウィンドウとセカンダリウィンドウのウィンドウサイズが互い違いに送られてくるため
            // 直前のウィンドウサイズの値を前々回表示のウィンドウサイズ(_PrevSecondaryViewSize)で上書きする
            if (_PrevSecondaryViewSize != default(Size))
            {
                var localObjectStorageHelper = Microsoft.Toolkit.Mvvm.DependencyInjection.Ioc.Default.GetService <Microsoft.Toolkit.Uwp.Helpers.LocalObjectStorageHelper>();
                localObjectStorageHelper.Save(secondary_view_size, _PrevSecondaryViewSize);
            }

            _scheduler.Schedule(() =>
            {
                IsShowSecondaryView = false;
            });

            LastNavigatedPageName = null;

            // プレイヤーを閉じた時に再生中情報をクリア
            if (!isMainViewClosed)
            {
                Debug.WriteLine("ClearCurrentPlayerEntry secondary view closed.");
                _restoreNavigationManager.ClearCurrentPlayerEntry();
            }
        }
コード例 #2
0
        private async Task ThrowOperationCanceledException_WhenCancellationRequested(
            List <Skin> skins,
            CancellationTokenSource cancellationTokenSource,
            PlaylistPlayer playlistPlayer)
        {
            cancellationTokenSource.Cancel();

            var act = new Func <Task>(() => playlistPlayer.Play(skins, cancellationTokenSource.Token));

            await Assert.ThrowsAsync <OperationCanceledException>(act);
        }
コード例 #3
0
        public async Task ClearVideoPlayerAsync()
        {
            if (PlaylistPlayer == null)
            {
                return;
            }

            await SecondaryCoreAppView.DispatcherQueue.EnqueueAsync(async() =>
            {
                await PlaylistPlayer.ClearAsync();

                SecondaryAppView.Title = "Hohoema";
            });
        }
コード例 #4
0
        public async Task CloseAsync()
        {
            if (DisplayMode == PrimaryPlayerDisplayMode.Close)
            {
                return;
            }

            await PlaylistPlayer.ClearAsync();

            LastNavigatedPageName  = null;
            _lastPlayedDisplayMode = DisplayMode == PrimaryPlayerDisplayMode.Close ? _lastPlayedDisplayMode : DisplayMode;
            DisplayMode            = PrimaryPlayerDisplayMode.Close;
            _view.Title            = string.Empty;
            _restoreNavigationManager.ClearCurrentPlayerEntry();
        }
コード例 #5
0
        private async Task PlayGivenSkin(
            [Frozen] Mock <IPlayer> playerMock,
            CancellationTokenSource cancellationTokenSource,
            PlaylistPlayer playlistPlayer)
        {
            var fixture = new Fixture();
            var skins   = fixture.CreateMany <Skin>(1).ToList();

            cancellationTokenSource.Cancel();

            try
            {
                await playlistPlayer.Play(skins, cancellationTokenSource.Token);
            }
            catch (OperationCanceledException)
            { }

            playerMock.Verify(x => x.PlaySkin(It.Is <Skin>(s => s.Name == skins.First().Name), It.IsAny <CancellationToken>()));
        }
コード例 #6
0
        /// <summary>
        /// SecondaryViewを閉じます。
        /// </summary>
        public async Task CloseAsync()
        {
            if (!IsShowSecondaryView)
            {
                return;
            }

            await SecondaryCoreAppView.DispatcherQueue.EnqueueAsync(async() =>
            {
                await PlaylistPlayer.ClearAsync();

                SecondaryAppView.Title = "Hohoema";

                await SecondaryViewPlayerNavigationService.NavigateAsync(nameof(BlankPage), _BlankPageNavgationTransitionInfo);

                await Task.Delay(250);

                await SecondaryAppView.TryConsolidateAsync();
            });

            await ShowMainViewAsync();
        }
コード例 #7
0
        public async Task ClearVideoPlayerAsync()
        {
            await PlaylistPlayer.ClearAsync();

            SetTitle("Hohoema");
        }
コード例 #8
0
 public async Task ClearVideoPlayerAsync()
 {
     await PlaylistPlayer.ClearAsync();
 }
コード例 #9
0
        public HohoemaPlaylist(
            IScheduler scheduler,
            IEventAggregator eventAggregator,
            PlaylistRepository playlistRepository,
            Models.Provider.NicoVideoProvider nicoVideoProvider,
            MylistRepository mylistRepository,
            PlayerSettings playerSettings
            )
        {
            _scheduler             = scheduler;
            _eventAggregator       = eventAggregator;
            _player                = new PlaylistPlayer(this, playerSettings);
            _player.PlayRequested += OnPlayRequested;

            _player.ObserveProperty(x => x.CanGoNext).Subscribe(_ => _scheduler.Schedule(() => RaisePropertyChanged(nameof(CanGoNext)))).AddTo(_disposable);
            _player.ObserveProperty(x => x.CanGoBack).Subscribe(_ => _scheduler.Schedule(() => RaisePropertyChanged(nameof(CanGoBack)))).AddTo(_disposable);
            _player.ObserveProperty(x => x.Current).Subscribe(_ => _scheduler.Schedule(() => RaisePropertyChanged(nameof(CurrentItem)))).AddTo(_disposable);

            _playlistRepository = playlistRepository;
            _nicoVideoProvider  = nicoVideoProvider;
            _mylistRepository   = mylistRepository;
            _playerSettings     = playerSettings;

            /*
             * _ = ResolveItemsAsync(QueuePlaylist)
             *  .ContinueWith(prevTask =>
             *  {
             *      var items = prevTask.Result;
             *      foreach (var item in items)
             *      {
             *          AddQueue(item);
             *      }
             *
             *      QueuePlaylist.CollectionChangedAsObservable()
             *          .Throttle(TimeSpan.FromSeconds(0.25))
             *          .Subscribe(args => PlaylistObservableCollectionChanged(QueuePlaylist, args))
             *          .AddTo(_disposable);
             *  });
             */

            WatchAfterPlaylist = new PlaylistObservableCollection(WatchAfterPlaylistId, WatchAfterPlaylistId.Translate(), _scheduler);
            _ = ResolveItemsAsync(WatchAfterPlaylist)
                .ContinueWith(prevTask =>
            {
                var items = prevTask.Result;
                foreach (var item in items)
                {
                    AddWatchAfterPlaylist(item);
                }

                WatchAfterPlaylist.CollectionChangedAsObservable()
                .Throttle(TimeSpan.FromSeconds(0.25))
                .Subscribe(args => PlaylistObservableCollectionChanged(WatchAfterPlaylist, args))
                .AddTo(_disposable);
            });

            _isShuffleEnabled         = playerSettings.IsShuffleEnable;
            _isReverseEnabled         = playerSettings.IsReverseModeEnable;
            _isPlaylistLoopingEnabled = playerSettings.IsPlaylistLoopingEnabled;


            /*
             * if (newOwner is INotifyCollectionChanged playlistNotifyCollectionChanged)
             * {
             *  _ItemsObservaeDisposer = playlistNotifyCollectionChanged.CollectionChangedAsObservable()
             *      .Subscribe(async _ =>
             *      {
             *          using (var releaser2 = await _PlaylistUpdateLock.LockAsync())
             *          {
             *                  // 再生中アイテムが削除された時のプレイリストの動作
             *
             *                  // 動画プレイヤーには影響を与えないこととする
             *                  // 連続再生動作の継続性が確保できればOK
             *
             *                  SourceItems.Clear();
             *              foreach (var newItem in newOwner.Select(x => new PlaylistItem()
             *              {
             *                  ContentId = x,
             *              }))
             *              {
             *                  SourceItems.Add(newItem);
             *              }
             *
             *              ResetRandmizedItems(SourceItems);
             *
             *              if (PlaylistSettings.IsShuffleEnable)
             *              {
             *                  CurrentIndex = 0;
             *              }
             *              else
             *              {
             *                  CurrentIndex = Current == null ? 0 : SourceItems.IndexOf(Current);
             *              }
             *
             *              RaisePropertyChanged(nameof(CanGoBack));
             *              RaisePropertyChanged(nameof(CanGoNext));
             *          }
             *      });
             * }
             */
        }