public async Task <List <Video> > GetChannelVideos(ChannelVideosQuery channelVideosQuery, CancellationToken cancellationToken = default(CancellationToken)) { if (channelVideosQuery == null) { throw new ArgumentNullException(nameof(channelVideosQuery)); } if (IsNullOrWhiteSpace(channelVideosQuery.ChannelName)) { throw new ArgumentNullException(nameof(channelVideosQuery.ChannelName)); } var request = RequestConstants.ChannelVideos.Replace("{0}", channelVideosQuery.ChannelName); request += $"?offset={channelVideosQuery.Skip}&limit={channelVideosQuery.Take}"; if (channelVideosQuery.BroadcastsOnly) { request += "&broadcasts=true"; } if (channelVideosQuery.HLSVodsOnly) { request += "&hls=true"; } var channelVideosRoot = await ExecuteRequest <ChannelVideosRoot>(request, cancellationToken); return(channelVideosRoot.Videos); }
public async Task GetChannelVideos() { var channelVideosQuery = new ChannelVideosQuery("ECTVLoL"); var videos = await sut.GetChannelVideos(channelVideosQuery); Assert.NotNull(videos); Assert.NotEmpty(videos); Assert.NotNull(videos[0].Channel); }
public async Task GetChannelVideos(string channelName, bool broadcastsOnly, bool hlsVodsOnly) { var channelVideosQuery = new ChannelVideosQuery() { ChannelName = channelName, BroadcastsOnly = broadcastsOnly, HLSVodsOnly = hlsVodsOnly, }; var channelVideos = await sut.GetChannelVideos(channelVideosQuery); Assert.NotNull(channelVideos); Assert.NotEmpty(channelVideos); }
public async Task <List <Video> > GetChannelVideos(ChannelVideosQuery channelVideosQuery, CancellationToken cancellationToken = default(CancellationToken)) { if (channelVideosQuery == null) { throw new ArgumentNullException(nameof(channelVideosQuery)); } if (IsNullOrWhiteSpace(channelVideosQuery.ChannelName)) { throw new ArgumentNullException(nameof(channelVideosQuery.ChannelName)); } var request = RequestConstants.ChannelVideos.Replace("{0}", channelVideosQuery.ChannelName); // hitbox doesn't actually have any offset/start value specified in their documentation // so maybe they dont have any paging available through the api: http://developers.hitbox.tv/#list-videos request += $"?offset={channelVideosQuery.Skip}&limit={channelVideosQuery.Take}"; var channelVideosRoot = await HttpClientExtensions.ExecuteRequest <ChannelVideosRoot>(request, cancellationToken); return(channelVideosRoot?.Videos); }
public async Task <List <VodDetails> > GetVods(VodQuery vodQuery) { if (vodQuery == null) { throw new ArgumentNullException(nameof(vodQuery)); } if (string.IsNullOrWhiteSpace(vodQuery.StreamId)) { throw new ArgumentNullException(nameof(vodQuery.StreamId)); } var channelVideosQuery = new ChannelVideosQuery() { ChannelName = vodQuery.StreamId, Take = vodQuery.Take, Skip = vodQuery.Skip, HLSVodsOnly = true, BroadcastsOnly = vodQuery.VodTypes.Contains(BroadcastVodType) }; var channelVideos = await twitchTvClient.GetChannelVideos(channelVideosQuery); var vods = channelVideos.Select(channelVideo => new VodDetails { // hack to correct the url path for twitch videos see github issue: https://github.com/laurencee/Livestream.Monitor/issues/24 // was previously twitch.tv/videos/XXXXXXX // now is twitch.tv/user/v/XXXXXXX Url = channelVideo.Url.Replace(@"twitch.tv/videos/", @"twitch.tv/user/v/"), Length = TimeSpan.FromSeconds(channelVideo.Length), RecordedAt = channelVideo.RecordedAt ?? DateTimeOffset.MinValue, Views = channelVideo.Views, Game = channelVideo.Game, Description = channelVideo.Description, Title = channelVideo.Title, PreviewImage = channelVideo.Preview, ApiClient = this, }).ToList(); return(vods); }
public void SetChannelVideos(ChannelVideoIdsDto channelVideoIds) { var query = new ChannelVideosQuery(channelVideoIds.ChannelId); _channelVideosQueryHandler.CreateOrUpdateValueById<ChannelVideoIdsDto>(query, channelVideoIds); }
public ChannelVideoIdsDto GetChannelVideos(string id) { var query = new ChannelVideosQuery(id); return _channelVideosQueryHandler.GetValueById(query); }