public PreparePlayVideoResult(string contentId, NiconicoSession niconicoSession, NicoVideoSessionOwnershipManager ownershipManager, DmcWatchData dmcWatchData)
            : this(contentId, niconicoSession)
        {
            _ownershipManager = ownershipManager;
            _dmcWatchData     = dmcWatchData;
            IsSuccess         = _dmcWatchData != null;
            if (_dmcWatchData?.DmcWatchResponse.Video.DmcInfo != null)
            {
                AvailableQualities = _dmcWatchData.DmcWatchResponse.Video.DmcInfo.Quality.Videos
                                     .Select(x => new NicoVideoQualityEntity(x.Available, QualityIdToNicoVideoQuality(x.Id), x.Id, x.Bitrate, x.Resolution?.Width, x.Resolution?.Height))
                                     .ToImmutableArray();
            }
            else if (_dmcWatchData.DmcWatchResponse.Video.SmileInfo != null)
            {
                var video     = _dmcWatchData.DmcWatchResponse.Video;
                var smileInfo = _dmcWatchData.DmcWatchResponse.Video.SmileInfo;
                var quality   = smileInfo.Url.EndsWith("low") ? NicoVideoQuality.Smile_Low : NicoVideoQuality.Smile_Original;

                AvailableQualities = new[]
                {
                    new NicoVideoQualityEntity(false, NicoVideoQuality.Smile_Low, "", null, video.Width, video.Height),
                    new NicoVideoQualityEntity(false, NicoVideoQuality.Smile_Original, "", null, video.Width, video.Height),
                }
                .ToImmutableArray();
            }
        }
 public NicoVideoSessionProvider(
     NicoVideoProvider nicoVideoProvider,
     NiconicoSession niconicoSession,
     NicoVideoSessionOwnershipManager nicoVideoSessionOwnershipManager
     )
 {
     _nicoVideoProvider = nicoVideoProvider;
     _niconicoSession   = niconicoSession;
     _nicoVideoSessionOwnershipManager = nicoVideoSessionOwnershipManager;
 }
        public PreparePlayVideoResult(string contentId, NiconicoSession niconicoSession, NicoVideoSessionOwnershipManager ownershipManager, WatchApiResponse watchApiResponse)
            : this(contentId, niconicoSession)
        {
            _ownershipManager = ownershipManager;
            _watchApiResponse = watchApiResponse;
            IsSuccess         = _watchApiResponse != null;
            var quality = _watchApiResponse.VideoUrl.OriginalString.EndsWith("low") ? NicoVideoQuality.Smile_Low : NicoVideoQuality.Smile_Original;

            AvailableQualities = new[]
            {
                new NicoVideoQualityEntity(true, quality, quality.ToString())
            }
            .ToImmutableArray();

            // Note: スマイル鯖はいずれ無くなると見て対応を限定的にしてしまう
        }
 internal VideoSessionOwnership(string videoId, NicoVideoSessionOwnershipManager ownershipManager)
 {
     VideoId           = videoId;
     _ownershipManager = ownershipManager;
 }