예제 #1
0
        async Task PerformSearch(CancellationToken token)
        {
            Searching = true;
            await Invoke(StateHasChanged);

            await Task.Delay(1);

            var options = GitterApi.GetNewOptions();

            options.Query = SearchText;
            options.Limit = 100;
            SearchResult  = new List <IChatMessage>();
            var messages = await GitterApi.SearchChatMessages(ChatRoom.Id, options);

            while ((messages?.Any() ?? false) && !token.IsCancellationRequested)
            {
                SearchResult?.AddRange(messages.OrderBy(m => m.Sent).Reverse());
                await Invoke(StateHasChanged);

                await Task.Delay(1000);

                options.Skip += messages.Count();
                messages      = await GitterApi.SearchChatMessages(ChatRoom.Id, options);
            }

            Searching = false;
            await Invoke(StateHasChanged);

            await Task.Delay(1);
        }
예제 #2
0
        async Task <int> FetchOldMessages(CancellationToken token)
        {
            var options = GitterApi.GetNewOptions();

            options.Lang    = Localisation.LocalCultureInfo.Name;
            options.AfterId = "";
            if (Messages?.Any() ?? false)
            {
                options.BeforeId = GetFirstMessageId();
                if (!token.IsCancellationRequested)
                {
                    var count = await FetchNewMessages(options, token);
                    await InvokeAsync(StateHasChanged);

                    //await Task.Delay(100);
                    //_ = await JSRuntime.ScrollIntoView(options.BeforeId);
                    return(count);
                }
            }
            token.ThrowIfCancellationRequested();
            return(0);
        }
예제 #3
0
        async Task MonitorNewMessages()
        {
            RoomWatcher.Stop();
            if (RoomWatcher.Interval == 250)
            {
                RoomWatcher.Interval = 2000;
            }
            var options = GitterApi.GetNewOptions();

            options.Lang    = Localisation.LocalCultureInfo.Name;
            options.AfterId = "";

            bool bottom = false;

            try
            {
                bottom = await JSRuntime.IsScrolledToBottom("blgmessagelist");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }

            if (Messages?.Any() ?? false)
            {
                options.AfterId = GetLastMessageId();
            }
            await FetchNewMessages(options, tokenSource.Token);

            if (Messages?.Any() ?? false)
            {
                if (bottom)
                {
                    _ = await JSRuntime.ScrollIntoView(GetLastMessageId());
                }
            }
            RoomWatcher?.Start();
        }
예제 #4
0
        async Task MonitorNewMessages()
        {
            RoomWatcher.Stop();
            if (RoomWatcher.Interval == 250)
            {
                RoomWatcher.Interval = 2000;
            }
            var options = GitterApi.GetNewOptions();

            options.Lang    = Localisation.LocalCultureInfo.Name;
            options.AfterId = "";

            //bool bottom = false;
            //try
            //{
            //    bottom = await JSRuntime.IsScrolledToBottom("blgmessagelist");
            //}
            //catch
            //{
            //}

            if (Messages?.Any() ?? false)
            {
                options.AfterId = GetLastMessageId();
            }
            await FetchNewMessages(options, tokenSource.Token);

            //if (Messages?.Any() ?? false)
            //{
            //    if (bottom)
            //    {
            //        _ = await JSRuntime.ScrollIntoView(GetLastMessageId());
            //    }
            //}
            RoomWatcher?.Start();
        }