async private Task connectToUrlAsyncInternal(string url, UrlParser.ParsedMergeRequestUrl parsedUrl) { labelWorkflowStatus.Text = String.Format("Connecting to {0}...", url); MergeRequestKey mrk = parseUrlIntoMergeRequestKey(parsedUrl); GitLabInstance gitLabInstance = new GitLabInstance(mrk.ProjectKey.HostName, Program.Settings); MergeRequest mergeRequest = await Shortcuts .GetMergeRequestAccessor(gitLabInstance, _modificationNotifier, mrk.ProjectKey) .SearchMergeRequestAsync(mrk.IId, false); if (mergeRequest == null) { throw new UrlConnectionException("Merge request does not exist. ", null); } labelWorkflowStatus.Text = String.Empty; bool canOpenAtLiveTab = mergeRequest.State == "opened" && checkIfCanOpenAtLiveTab(mrk, true); bool needReload = (canOpenAtLiveTab && getDataCache(canOpenAtLiveTab).MergeRequestCache == null) || mrk.ProjectKey.HostName != getHostName(); if (needReload) { Trace.TraceInformation("[MainForm.ExternalCalls] Restart workflow for url {0}", url); await restartWorkflowByUrlAsync(mrk.ProjectKey.HostName); } if (!canOpenAtLiveTab || !await openUrlAtLiveTabAsync(mrk, url, !needReload)) { await openUrlAtSearchTabAsync(mrk); } }
async private Task connectToUrlAsyncInternal(string url, UrlParser.ParsedMergeRequestUrl parsedUrl) { MergeRequestKey mrk = parseUrlIntoMergeRequestKey(parsedUrl); // First, try to select a MR from lists of visible MRs bool tryOpenAtLiveTab = true; switch (trySelectMergeRequest(mrk)) { case SelectionResult.NotFound: break; case SelectionResult.Selected: addOperationRecord("Merge Request was found in cache and selected"); return; case SelectionResult.Hidden: tryOpenAtLiveTab = false; break; } bool isConnected = getDataCache(EDataCacheType.Live)?.ConnectionContext != null; bool needReload = mrk.ProjectKey.HostName != getHostName() || !isConnected; if (needReload) { Trace.TraceInformation("[MainForm.ExternalCalls] Restart workflow for url {0}", url); await restartWorkflowByUrlAsync(mrk.ProjectKey.HostName); } // If MR is not found at the Live tab at all or user rejected to unhide it, // don't try to open it at the Live tab. // Otherwise, check if requested MR match workflow filters. tryOpenAtLiveTab = tryOpenAtLiveTab && (await checkLiveDataCacheFilterAsync(mrk, url)); if (!tryOpenAtLiveTab || !await openUrlAtLiveTabAsync(mrk, url, !needReload)) { await openUrlAtSearchTabAsync(mrk); } }
internal static object Parse(string originalUrl) { if (String.IsNullOrEmpty(originalUrl)) { return(null); } string url = trimPrefix(originalUrl); List <Exception> exceptions = new List <Exception>(); try { UrlParser.ParsedMergeRequestUrl originalParsed = UrlParser.ParseMergeRequestUrl(url); UrlParser.ParsedMergeRequestUrl mergeRequestUrl = new UrlParser.ParsedMergeRequestUrl( StringUtils.GetHostWithPrefix(originalParsed.Host), originalParsed.Project, originalParsed.IId); return(mergeRequestUrl); } catch (Exception ex) { // ok, let's try another parser exceptions.Add(ex); } try { return(NewMergeRequestUrlParser.Parse(url)); } catch (Exception ex) { // ok, input string cannot be parsed exceptions.Add(ex); } exceptions.ForEach(ex => ExceptionHandlers.Handle("Input URL cannot be parsed", ex)); return(null); }
private MergeRequestKey parseUrlIntoMergeRequestKey(UrlParser.ParsedMergeRequestUrl parsedUrl) { return(new MergeRequestKey(new ProjectKey(parsedUrl.Host, parsedUrl.Project), parsedUrl.IId)); }