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); }