public IEnumerable <string> GetSupportingPlatforms(StreamFilterOptions streamFilterOptions)
 {
     return(streamProviders
            .Values
            .Where(p => p.AreFilterOptionsSupported(streamFilterOptions))
            .Select(p => p.StreamPlatformName));
 }
Пример #2
0
        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));
        }
Пример #5
0
        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)));
        }
Пример #7
0
        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));
        }
Пример #8
0
 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();
 }