protected override async void Execute(object parameter)
        {
            if (parameter is Interfaces.IVideoContent content)
            {
                var video         = Database.NicoVideoDb.Get(content.Id);
                var cacheRequests = await VideoCacheManager.GetCacheRequest(content.Id);

                if (cacheRequests.Any())
                {
                    var choiceItems = await DialogService.ShowMultiChoiceDialogAsync(
                        $"削除するキャッシュ動画を選択する\n「{video.Title}」",
                        cacheRequests,
                        Enumerable.Empty <Models.Cache.NicoVideoCacheRequest>(),
                        nameof(Models.Cache.NicoVideoCacheRequest.Quality)
                        );

                    if (choiceItems?.Any() ?? false)
                    {
                        foreach (var deleteItem in choiceItems)
                        {
                            await VideoCacheManager.CancelCacheRequest(content.Id, deleteItem.Quality);
                        }
                    }
                }
            }
        }
Example #2
0
        private void SubscribeCacheState(Interfaces.IVideoContent video)
        {
            UnsubscribeCacheState();

//            System.Diagnostics.Debug.Assert(DataContext != null);

            if (video != null)
            {
                _cacheManager.VideoCacheStateChanged += _cacheManager_VideoCacheStateChanged;

                var cacheRequest = _cacheManager.GetCacheRequest(video.Id);
                ResetCacheRequests(video, cacheRequest);
            }
        }
Example #3
0
        public async void Play(PlaylistItem item)
        {
            // プレイリストアイテムが不正
            var playlist = item.Owner;

            if (item.Type == PlaylistItemType.Video)
            {
                if (playlist != null && !playlist.Contains(item.ContentId))
                {
                    throw new Exception();
                }
            }


            if (!NiconicoSession.IsPremiumAccount && !VideoCacheManager.CanAddDownloadLine)
            {
                // 一般ユーザーまたは未登録ユーザーの場合
                // 視聴セッションを1つに制限するため、キャッシュダウンロードを止める必要がある
                // キャッシュ済みのアイテムを再生中の場合はダウンロード可能なので確認をスキップする
                bool playingVideoIsCached = false;
                var  currentItem          = item;
                if (currentItem != null && currentItem.Type == PlaylistItemType.Video)
                {
                    var cachedItems = await VideoCacheManager.GetCacheRequest(currentItem.ContentId);

                    if (cachedItems.FirstOrDefault(x => x.ToCacheState() == NicoVideoCacheState.Cached) != null)
                    {
                        playingVideoIsCached = true;
                    }
                }

                if (!playingVideoIsCached)
                {
                    var currentDownloadingItems = await VideoCacheManager.GetDownloadProgressVideosAsync();

                    var downloadingItem          = currentDownloadingItems.FirstOrDefault();
                    var downloadingItemVideoInfo = Database.NicoVideoDb.Get(downloadingItem.RawVideoId);

                    var dialogService = App.Current.Container.Resolve <Services.DialogService>();
                    var totalSize     = downloadingItem.DownloadOperation.Progress.TotalBytesToReceive;
                    var receivedSize  = downloadingItem.DownloadOperation.Progress.BytesReceived;
                    var megaBytes     = (totalSize - receivedSize) / 1000_000.0;
                    var downloadProgressDescription = $"ダウンロード中\n{downloadingItemVideoInfo.Title}\n残り {megaBytes:0.0} MB ( {receivedSize / 1000_000.0:0.0} MB / {totalSize / 1000_000.0:0.0} MB)";
                    var isCancelCacheAndPlay        = await dialogService.ShowMessageDialog("ニコニコのプレミアム会員以外は 視聴とダウンロードは一つしか同時に行えません。\n視聴を開始する場合、キャッシュは中止されます。またキャッシュを再開する場合はダウンロードは最初からやり直しになります。\n\n" + downloadProgressDescription, "キャッシュを中止して視聴を開始しますか?", "キャッシュを中止して視聴する", "何もしない");

                    if (isCancelCacheAndPlay)
                    {
                        await VideoCacheManager.SuspendCacheDownload();
                    }
                    else
                    {
                        return;
                    }
                }
            }
            else if (!NiconicoSession.IsPremiumAccount)
            {
                // キャッシュ済みの場合はサスペンドを掛けない
                if (item.Type == PlaylistItemType.Video && false == await VideoCacheManager.CheckCachedAsync(item.ContentId))
                {
                    await VideoCacheManager.SuspendCacheDownload();
                }
            }

            Player.PlayStarted(item);

            _ = PlayerViewManager.PlayWithCurrentPlayerView(item);
        }