예제 #1
0
        public override async Task <ScrollResponse> Scroll(ScrollRequest request, ServerCallContext context)
        {
            Logger.LogInformation("Received scroll request for {id}", request.ScrollId);

            var result = await Client.Scroll(request.ScrollId);

            var response = new ScrollResponse()
            {
                ScrollId = result.ScrollId
            };

            foreach (var message in result.Messages)
            {
                response.Results.Add(
                    new Result()
                {
                    Id          = message.Id,
                    DisplayName = message.DisplayName,
                    Message     = message.Text,
                    Channel     = message.Channel,
                    Timestamp   = message.TimeStamp
                });
            }

            return(response);
        }
예제 #2
0
        public override async Task <ScrollResponse> InitScroll(InitScrollRequest request, ServerCallContext context)
        {
            Logger.LogInformation("Initializing scroll for {Timestamp}", request.Timestamp);

            var result = await Client.InitScroll(request.Size, request.Timestamp, request.Direction);

            var response = new ScrollResponse()
            {
                ScrollId = result.ScrollId
            };

            foreach (var message in result.Messages)
            {
                response.Results.Add(
                    new Result()
                {
                    Id          = message.Id,
                    DisplayName = message.DisplayName,
                    Message     = message.Text,
                    Channel     = message.Channel,
                    Timestamp   = message.TimeStamp
                });
            }

            return(response);
        }
예제 #3
0
        //TODO: Can probably be optimized
        /// <summary>
        /// Returns recent feed items from the endpoint
        /// </summary>
        /// <param name="endpoint">Path from the base URL</param>
        /// <param name="initialScroll">False when continueing from a scroll, otherwise true</param>
        /// <returns>Feed items</returns>
        private async Task <ScrollResponse> GetScrollableFeed(string endpoint, bool initialScroll)
        {
            //First, obtain the pulse-groups from games with the given ids
            ScrollResponse feedResponse = initialScroll ? _apiClient.Scroll <ApiPulseGroup>(endpoint) : new ScrollResponse {
                Scrollables = _apiClient.GetMultiple <ApiPulseGroup>(endpoint)
            };

            //Then, get the feed items (pulses) themselves
            IEnumerable <ApiFeedItem> pulses = feedResponse.Scrollables.Select(pg => new ApiFeedItem {
                Id   = ((ApiPulseGroup)pg).FeedItems.First(),
                Game = ((ApiPulseGroup)pg).Game
            });

            string fields = "id,published_at,updated_at,url,title,summary,pulse_image";

            IEnumerable <ApiFeedItem> apiFeedItems =
                _apiClient.GetMultiple <ApiFeedItem>($"pulses/{pulses.Select(p => p.Id).CommaSeparate()}/?fields={fields}");

            //Convert the ApiFeedItems to FeedItems
            IList <FeedItem> feedItems = new List <FeedItem>();

            foreach (ApiFeedItem apiFeedItem in apiFeedItems)
            {
                int gameId = pulses.FirstOrDefault(p => p.Id == apiFeedItem.Id).Game;

                FeedItem feedItem = ApiFeedItemMapper.MapFeedItem(apiFeedItem);
                feedItem.Game = await _gameRepository.GetGame(gameId);

                feedItems.Add(feedItem);
            }

            feedResponse.Scrollables = feedItems;

            return(feedResponse);
        }
예제 #4
0
        private void Core_WebMessageReceived(object sender, CoreWebView2WebMessageReceivedEventArgs e)
        {
            ScrollResponse response = JsonConvert.DeserializeObject <ScrollResponse>(e.WebMessageAsJson);

            //MessageBox.Show("Scrolling to " + response.ScrollPos);
            if (currentReviewDocument != null)
            {
                currentReviewDocument.ScrollTo(response.ScrollPos);
            }
        }
예제 #5
0
        public async Task <HomeViewModel> Home(string userId = null)
        {
            HomeViewModel model;

            if (userId != null)
            {
                ScrollResponse feedResponse = await GetPersonalisedHomeFeed(userId);

                model = new HomeViewModel {
                    Feed          = feedResponse.Scrollables as IEnumerable <FeedItem>,
                    FeedPageCount = feedResponse.PageCount,
                    FeedScrollUrl = feedResponse.ScrollUrl
                };
            }
            else
            {
                model = new HomeViewModel {
                    Feed = new List <FeedItem>()
                };
            }

            return(model);
        }
예제 #6
0
        /// <summary>
        /// Returns feed items from continueing the scroll
        /// </summary>
        /// <param name="scrollUrl">The scroll URL to continue scrolling</param>
        /// <returns>Feed items</returns>
        public async Task <IEnumerable <FeedItem> > GetScrollableFeed(string scrollUrl)
        {
            ScrollResponse response = await GetScrollableFeed(scrollUrl, false);

            return(response.Scrollables as IEnumerable <FeedItem>);
        }