/// <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); }