コード例 #1
0
        private async void InitializeIssueAutoUpdate(string url, JiraConfig jiraConfig,
                                                     JiraQuery jiraQuery, JiraIssueViewModelBase viewModel, JiraApiService jiraApiService,
                                                     JiraStatusCategory jiraStatusCategory)
        {
            const string apiBase = "/search";

            var issueResult = await _apiRequestService.MakeRequestWithBasicAuthAsync <APIIssueRequestRoot>(new Uri($"{url}{apiBase}"),
                                                                                                           jiraConfig.Username, Encoding.UTF8.GetString(Convert.FromBase64String(jiraConfig.Password)), jiraQuery.ToString());

            if (issueResult.StatusCode == 200)
            {
                viewModel.IssuesTotal = issueResult.Data.total;
                viewModel.AddOrUpdateNewIssues(jiraApiService.ParseIssues(issueResult));
                viewModel.Refresh();
            }

            var lastPage = IsLastPage(50, issueResult.Data.startAt, issueResult.Data.total);

            var startAt = 0;

            if (!lastPage)
            {
                startAt += issueResult.Data.issues.Length;
            }

            await SetupJiraWindow(url, apiBase, lastPage, startAt, jiraConfig, jiraQuery,
                                  viewModel, jiraApiService, issueResult.Data.total, jiraStatusCategory);
        }
コード例 #2
0
        private async Task MakeAsyncRequest(string url, string apiBase, JiraConfig jiraConfig,
                                            JiraQuery jiraQuery, JiraIssueViewModelBase viewModel, JiraApiService jiraApiService, int startAt)
        {
            async void Callback()
            {
                var issueResult = await _apiRequestService.MakeRequestWithBasicAuthAsync <APIIssueRequestRoot>(
                    new Uri($"{url}{apiBase}"), jiraConfig.Username, Encoding.UTF8.GetString(Convert.FromBase64String(jiraConfig.Password)), $"{jiraQuery}&startAt={startAt}");

                if (issueResult.StatusCode == 200)
                {
                    viewModel.AddOrUpdateNewIssues(jiraApiService.ParseIssues(issueResult));
                    viewModel.Refresh();
                }
                else
                {
                    throw new NotImplementedException();
                }
            }

            await Task.Run(() => Dispatcher.Invoke(Callback));
        }
コード例 #3
0
        private async Task SetupJiraWindow(string url, string apiBase,
                                           bool lastPage, int startAt,
                                           JiraConfig jiraConfig, JiraQuery jiraQuery, JiraIssueViewModelBase viewModel,
                                           JiraApiService jiraApiService, int issuesTotal, JiraStatusCategory status)
        {
            while (!lastPage)
            {
                var at = startAt;

                await MakeAsyncRequest(url, apiBase, jiraConfig, jiraQuery, viewModel, jiraApiService, at);

                lastPage = IsLastPage(50, startAt, issuesTotal);

                if (!lastPage)
                {
                    startAt += 50;
                }
            }

            var lastUpdate       = DateTime.Now;
            var refreshRate      = jiraConfig.RefreshRate;
            var lastPageUpdate   = DateTime.Now;
            var lastCleanup      = DateTime.Now;
            var pageRotation     = jiraConfig.PageRotation;
            var pageRotationRate = jiraConfig.PageRotationRate;

            AppHeartbeatTimer.Elapsed += delegate
            {
                Dispatcher.Invoke(async() =>
                {
                    if (DateTime.Now.Subtract(lastCleanup) > TimeSpan.FromHours(1))
                    {
                        viewModel.Cleanup();
                        lastCleanup = DateTime.Now;
                    }

                    if (pageRotation)
                    {
                        if (DateTime.Now.Subtract(lastPageUpdate) > TimeSpan.FromSeconds(pageRotationRate))
                        {
                            Logger.Trace($"Page update {viewModel.GetType().Name}");
                            viewModel.TurnPageCommand.Execute(null);
                            lastPageUpdate = DateTime.Now;
                        }
                    }

                    if (DateTime.Now.Subtract(lastUpdate) > TimeSpan.FromSeconds(refreshRate))
                    {
                        Logger.Trace($"Try update {Enum.GetName(typeof(JiraStatusCategory),status)}");
                        MakeAsyncRequest(url, apiBase, jiraConfig, new JiraQuery().UpdatedSince(-15, JiraTimeDifference.Minutes).OrderBy("updated"), viewModel, jiraApiService, 0);
                        lastUpdate = DateTime.Now;
                    }
                });
            };
        }