Beispiel #1
0
        // Windows10のメディアコントロールとHohoemaのプレイリスト機能を統合してサポート

        // 外部からの次送り、前送り
        // プレイリストリセットなどに対応する
        //
        // 外部からの操作はイベントに切り出す

        // 画面の遷移自体はPageManagerに任せることにする
        // PageManagerに動画情報を渡すまでをやる

        // TODO: 「あとで見る」プレイリストをローミングフォルダへ書き出す

        public HohoemaPlaylist(
            IScheduler scheduler,
            NiconicoSession niconicoSession,
            VideoCacheManager videoCacheManager,
            PlaylistSettings playlistSettings,
            PlayerViewManager viewMan
            )
        {
            Scheduler         = scheduler;
            NiconicoSession   = niconicoSession;
            VideoCacheManager = videoCacheManager;
            PlaylistSettings  = playlistSettings;
            PlayerViewManager = viewMan;

            Player = new PlaylistPlayer(this, playlistSettings);

            MakeDefaultPlaylist();

            Player.PlayRequested += Player_PlayRequested;


            // 一般会員は再生とキャッシュDLを1ラインしか許容していないため
            // 再生終了時にキャッシュダウンロードの再開を行う必要がある
            // PlayerViewManager.NowPlaying はSecondaryViewでの再生時にFalseを示してしまうため
            // IsPlayerShowWithSecondaryViewを使ってセカンダリビューでの再生中を検出している
            _resumingObserver = new[]
            {
                // PlayerViewManager.ObserveProperty(x => x.NowPlaying).Select(x => !x),
                PlayerViewManager.ObserveProperty(x => x.IsPlayerShowWithPrimaryView).Select(x => !x),
                PlayerViewManager.ObserveProperty(x => x.IsPlayerShowWithSecondaryView).Select(x => !x),
                NiconicoSession.ObserveProperty(x => x.IsPremiumAccount).Select(x => !x)
            }
            .CombineLatestValuesAreAllTrue()
            .Throttle(TimeSpan.FromSeconds(1))
            .Subscribe(nowResumingCacheDL =>
            {
                Scheduler.Schedule(() =>
                {
                    if (nowResumingCacheDL)
                    {
                        _ = VideoCacheManager.ResumeCacheDownload();

                        // TODO: キャッシュDL再開した場合の通知
                    }
                });
            });
        }