Beispiel #1
0
        /// <summary>
        /// Get cached metadata (json serialization of gitlab project-endpoint)
        /// </summary>
        /// <param name="project">Database project object</param>
        /// <returns>JsonProject with all project metadata</returns>
        public async Task <JsonProject> GetCachedProjectMeta(DbProject project)
        {
            var globalProjectId = project.Id;

            // read from cache
            var cachedProjectMeta = _jsonCache.ReadProject(globalProjectId);

            // return if in cache
            if (cachedProjectMeta != null)
            {
                return(cachedProjectMeta);
            }

            // write into cache
            var account      = project.Account;
            var gitlabClient = _gitlabService.GetGitlabClient(account.HostUrl, account.AuthenticationToken);

            var gitlabProject = await gitlabClient.GetProjectById(project.GitlabProjectId);

            _jsonCache.WriteProject(globalProjectId, gitlabProject);

            return(gitlabProject);
        }
        private void TryToConnect()
        {
            // reset progress
            SetState(ConnectionState.Loading(0));

            // prepare cancellation tokens
            var connectionCheckCancellationTokenSource = new CancellationTokenSource();
            var progressReportCancellationTokenSource  = new CancellationTokenSource();
            var connectionCheckCancellationToken       = connectionCheckCancellationTokenSource.Token;
            var progressReportCancellationToken        = progressReportCancellationTokenSource.Token;

            // run task to check if connection can be established
            var connectionCheckTask = Task.Run(async() =>
            {
                var gitlabClient      = _gitlabService.GetGitlabClient(_hostUrl, _authenticationToken);
                var(success, message) = await gitlabClient.IsConnectionEstablished();

                SetState(success ? ConnectionState.Success() : ConnectionState.Error(message));
                progressReportCancellationTokenSource.Cancel();
            }, connectionCheckCancellationToken);

            // run tasks to update progress
            UpdateProgress(20, 1, progressReportCancellationToken);
            UpdateProgress(40, 2, progressReportCancellationToken);
            UpdateProgress(60, 3, progressReportCancellationToken);
            UpdateProgress(80, 4, progressReportCancellationToken);
            UpdateProgress(100, 5, progressReportCancellationToken);

            // cancel established task
            Task.Delay(6 * 1000, progressReportCancellationToken).ContinueWith(_ =>
            {
                if (connectionCheckTask.IsCompletedSuccessfully)
                {
                    return;
                }
                connectionCheckCancellationTokenSource.Cancel();
                SetState(ConnectionState.Error("Connection timeout. Valid internet connection?"));
            }, progressReportCancellationToken);
        }