internal PlayingOrchestrateResult(INiconicoVideoSessionProvider vss, INiconicoCommentSessionProvider <VideoComment> cs, INicoVideoDetails videoDetails) { IsSuccess = vss != null; VideoSessionProvider = vss; CommentSessionProvider = cs; VideoDetails = videoDetails; }
/// <summary> /// 再生処理 /// </summary> /// <returns></returns> public async Task <PlayingOrchestrateResult> CreatePlayingOrchestrateResultAsync(string videoId) { var cacheVideoResult = await _videoCacheManager.TryCreateCachedVideoSessionProvider(videoId); if (cacheVideoResult.IsSuccess) { INiconicoCommentSessionProvider commentSessionProvider = null; INicoVideoDetails nicoVideoDetails = null; if (!Models.Helpers.InternetConnection.IsInternet()) { var cachedComment = _commentRepository.GetCached(videoId); if (cachedComment != null) { commentSessionProvider = new CachedCommentsProvider(videoId, cachedComment.Comments); } var videoInfo = Database.NicoVideoDb.Get(videoId); if (videoInfo != null) { nicoVideoDetails = new CachedVideoDetails() { VideoTitle = videoInfo.Title, ViewCount = videoInfo.ViewCount, CommentCount = videoInfo.CommentCount, MylistCount = videoInfo.MylistCount, VideoLength = videoInfo.Length, SubmitDate = videoInfo.PostedAt, Tags = videoInfo.Tags.Select(x => new NicoVideoTag(x.Id)).ToArray(), ProviderId = videoInfo.Owner?.OwnerId, ProviderName = videoInfo.Owner?.ScreenName, OwnerIconUrl = videoInfo.Owner.IconUrl, DescriptionHtml = videoInfo.DescriptionWithHtml, ThumbnailUrl = videoInfo.ThumbnailUrl }; } } else { var preparePlayVideo = await _nicoVideoSessionProvider.PreparePlayVideoAsync(videoId); commentSessionProvider = preparePlayVideo; nicoVideoDetails = preparePlayVideo?.GetVideoDetails(); } // キャッシュからコメントを取得する方法が必要 return(new PlayingOrchestrateResult( cacheVideoResult.VideoSessionProvider, commentSessionProvider, nicoVideoDetails )); } else { /* * bool canPlay = true; * var downloadLineOwnership = await _videoCacheManager.TryRentDownloadLineAsync(); * if (downloadLineOwnership == null) * { * canPlay = false; * if (await ShowSuspendCacheDownloadingDialog()) * { * await _videoCacheManager.SuspendCacheDownload(); * canPlay = true; * } * } * * if (!canPlay) * { * return new PlayingOrchestrateResult(); * } */ var preparePlayVideo = await _nicoVideoSessionProvider.PreparePlayVideoAsync(videoId); if (!preparePlayVideo.IsSuccess) { var progress = await _videoCacheManager.GetDownloadProgressVideosAsync(); if (!_niconicoSession.IsPremiumAccount && progress.Any()) { var result = await ShowSuspendCacheDownloadingDialog(); if (result) { preparePlayVideo = await _nicoVideoSessionProvider.PreparePlayVideoAsync(videoId); } } } if (preparePlayVideo == null || !preparePlayVideo.IsSuccess) { throw new NotSupportedException("不明なエラーにより再生できません"); } return(new PlayingOrchestrateResult( preparePlayVideo, preparePlayVideo, preparePlayVideo.GetVideoDetails() )); } }