public IEnumerable <string> GetSupportingPlatforms(StreamFilterOptions streamFilterOptions) { return(streamProviders .Values .Where(p => p.AreFilterOptionsSupported(streamFilterOptions)) .Select(p => p.StreamPlatformName)); }
public async Task <GetStreamsResponse> Execute(GetStreamsQuery query) { var streamFilters = new StreamFilterOptions { GameName = query.Filters.GameName }; var unpackedTokens = PageTokens.UnpackTokens(query.PageToken); var supportedPlatforms = streamPlatformService.GetSupportingPlatforms(streamFilters); var platformStreams = await streamPlatformService.GetStreams(supportedPlatforms, streamFilters, query.PageSize, unpackedTokens); var packedTokens = PageTokens .FromList(platformStreams.Select(p => new PageToken(p.StreamPlatformName, p.NextPageToken))) .PackTokens(); var aggregatedStreams = platformStreams.SelectMany(p => p.Streams.Select(s => new Stream { StreamTitle = s.StreamTitle, StreamerName = s.StreamerName, StreamUrl = s.StreamUrl, IsLive = s.IsLive, Views = s.Views, PlatformName = p.StreamPlatformName, StreamThumbnailUrl = s.StreamThumbnailUrl, StreamerAvatarUrl = s.StreamerAvatarUrl, })); return(new GetStreamsResponse { Streams = aggregatedStreams.OrderByDescending(s => s.Views), NextPageToken = packedTokens }); }
private async Task <MaybeResult <IEnumerable <TwitchStreamDto>, StreamProviderError> > FindLiveStreams( StreamFilterOptions filterOptions, int pageSize, int pageOffset) { if (string.IsNullOrEmpty(filterOptions.GameName)) { return(await twitchStreamApi.GetLiveStreams(pageSize, pageOffset)); } return(await twitchStreamApi.SearchStreams(filterOptions.GameName, pageSize, pageOffset)); }
public async Task <IEnumerable <PlatformStreamsDto> > GetStreams( IEnumerable <string> streamPlatforms, StreamFilterOptions filterOptions, int pageSize, PageTokens pageTokens ) { var tasks = streamPlatforms.Select(p => { return(streamProviders[p].GetLiveStreams(filterOptions, pageSize, pageTokens.GetTokenOrEmpty(p))); }); return(await Task.WhenAll(tasks)); }
public async Task <PlatformStreamsDto> GetLiveStreams(StreamFilterOptions filterOptions, int pageSize, PageToken pageToken) { if (!AreFilterOptionsSupported(filterOptions)) { throw new ArgumentException("The Dlive platform does not support these filter options"); } ; var liveStreamsResult = await dliveApi.GetLiveStreams(pageSize, pageToken, StreamSortOrder.Trending); return(streamMapper.Map(liveStreamsResult, pageSize, pageToken)); }
public async Task <PlatformStreamsDto> GetLiveStreams(StreamFilterOptions filterOptions, int pageSize, PageToken pageToken) { var liveVideosResult = await youTubeV3Api.SearchGamingVideos( filterOptions.GameName, VideoEventType.Live, VideoSortType.ViewCount, pageSize, pageToken); var streams = await liveVideosResult.ChainAsync(async videos => { var videoIds = videos.items.Select(v => v.id.videoId); var channelIds = videos.items.Select(v => v.snippet.channelId); var getVideoDetails = youTubeV3Api.GetVideos(videoIds.ToArray()); var getVideoChannels = youTubeV3Api.GetChannels(channelIds.ToArray()); var videoDetailResults = await getVideoDetails; var videoChannelResults = await getVideoChannels; return(streamMapper.Map(videos, videoDetailResults, videoChannelResults)); }); return(streams.GetOrElse(PlatformStreamsDto.Empty(StreamPlatformName))); }
public async Task <IActionResult> GetStreams( [FromQuery(Name = "game")] string gameName = null, [FromQuery(Name = "pageSize")] int pageSize = 8, [FromQuery(Name = "pageToken")] string pageToken = null) { var filterOptions = new StreamFilterOptions { GameName = gameName }; var streamsQuery = new GetStreamsQuery { StreamPlatformNames = streamService.GetSupportingPlatforms(filterOptions), PageSize = pageSize, PageToken = pageToken, Filters = new StreamFilters { GameName = filterOptions.GameName }, }; var streams = await streamsQueryHandler.Execute(streamsQuery); return(Ok(streams)); }
public bool AreFilterOptionsSupported(StreamFilterOptions filterOptions) { return(string.IsNullOrEmpty(filterOptions.GameName)); }
public async Task <PlatformStreamsDto> GetLiveStreams(StreamFilterOptions filterOptions, int pageSize, PageToken pageToken) { var liveStreamsResult = await FindLiveStreams(filterOptions, pageSize, pageToken); return(streamMapper.Map(liveStreamsResult, pageSize, pageToken)); }
public bool AreFilterOptionsSupported(StreamFilterOptions filterOptions) => isFilterSupported;
Task <PlatformStreamsDto> IStreamProvider.GetLiveStreams(StreamFilterOptions filterOptions, int pageSize, PageToken pageToken) { throw new NotImplementedException(); }