/// <summary>
        /// LiveChat mesajlarını al
        /// </summary>
        /// <param name="liveChatId"></param>
        /// <param name="videoId"></param>
        /// <param name="cancellationToken"></param>
        /// <param name="progress"></param>
        /// <returns></returns>
        public async Task GetLiveChatsAsync(string liveChatId, string videoId, CancellationToken cancellationToken, IProgress <ReportChatModel> progress)
        {
            try
            {
                var isOnline = true;

                while (isOnline)
                {
                    var nextPage    = "";
                    var requestList = "id,snippet,authorDetails";

                    while (nextPage != null)
                    {
                        var report = new ReportChatModel();
                        var output = new LinkedList <LiveChatModel>();

                        var request = _service.LiveChatMessages.List(liveChatId, requestList);
                        request.MaxResults = 1000;
                        request.PageToken  = nextPage;

                        var response = await request.ExecuteAsync(cancellationToken);

                        foreach (LiveChatMessage item in response.Items)
                        {
                            try
                            {
                                cancellationToken.ThrowIfCancellationRequested();
                            }
                            catch (OperationCanceledException e)
                            {
                                //MessageBox.Show(e.Message);
                            }

                            var chat = new LiveChatModel
                            {
                                MessageId         = item.Id,
                                PublishedAt       = item.Snippet.PublishedAt?.ToString() ?? "",
                                PublishedTime     = item.Snippet.PublishedAt,
                                AuthorChannelUrl  = item.AuthorDetails.ChannelUrl,
                                DisplayMessage    = item.Snippet.DisplayMessage,
                                AuthorDisplayName = item.AuthorDetails.DisplayName,
                                IsVerified        = item.AuthorDetails.IsVerified ?? false,
                                IsChatModerator   = item.AuthorDetails.IsChatModerator ?? false,
                                IsChatOwner       = item.AuthorDetails.IsChatOwner ?? false,
                                IsChatSponsor     = item.AuthorDetails.IsChatSponsor ?? false,
                                AuthorChannelId   = item.Snippet.AuthorChannelId,
                                LiveChatId        = item.Snippet.LiveChatId,
                                VideoId           = videoId
                            };

                            output.AddLast(chat);
                        }

                        report.LiveChats             = output;
                        report.PollingIntervalMillis = response.PollingIntervalMillis;
                        progress.Report(report);

                        nextPage = response.NextPageToken;
                        isOnline = !response.OfflineAt.HasValue;

                        var wait = Convert.ToInt32(response.PollingIntervalMillis ?? 10000);
                        await Task.Delay(wait, cancellationToken);
                    }
                }
            }
            catch (Exception ex)
            {
                if (!ex.Message.Contains("iptal"))
                {
                    MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
Exemple #2
0
 private async void ReportProgress2(object sender, ReportChatModel e)
 {
     RequestCount++;
     await SaveChatsToDatabase2(e.LiveChats, e.PollingIntervalMillis);
 }