public async Task <CloneDialogResult> ShowCloneDialog(IConnection connection, string url = null) { if (string.IsNullOrEmpty(url)) { var clipboardContext = gitHubContextService.FindContextFromClipboard(); switch (clipboardContext?.LinkType) { case LinkType.Blob: case LinkType.Repository: url = clipboardContext?.Url; break; } } var viewModel = factory.CreateViewModel <IRepositoryCloneViewModel>(); if (url != null) { viewModel.UrlTab.Url = url; } if (connection != null) { return((CloneDialogResult)await showDialog.Show( viewModel, connection, ApiClientConfiguration.RequestedScopes) .ConfigureAwait(false)); } else { return((CloneDialogResult)await showDialog.ShowWithFirstConnection(viewModel) .ConfigureAwait(false)); } }
async Task AddComment(CommentModel comment) { var vm = factory.CreateViewModel <IIssueishCommentViewModel>(); await vm.InitializeAsync( this, currentUserModel, comment, true, false).ConfigureAwait(true); timeline.Add(vm); }
public async Task <CloneDialogResult> ShowCloneDialog(IConnection connection) { var viewModel = factory.CreateViewModel <IRepositoryCloneViewModel>(); if (connection != null) { await viewModel.InitializeAsync(connection); return((CloneDialogResult)await showDialog.Show(viewModel)); } else { return((CloneDialogResult)await showDialog.ShowWithFirstConnection(viewModel)); } }
async Task NavigateTo <TViewModel>(Func <TViewModel, Task> initialize, Func <TViewModel, bool> match = null) where TViewModel : class, IPanePageViewModel { Guard.ArgumentNotNull(initialize, nameof(initialize)); if (Content != navigator) { return; } await navigating.WaitAsync(); try { var viewModel = navigator.History .OfType <TViewModel>() .FirstOrDefault(x => match?.Invoke(x) ?? true); if (viewModel == null) { viewModel = viewModelFactory.CreateViewModel <TViewModel>(); navigator.NavigateTo(viewModel); await initialize(viewModel); } else if (navigator.Content != viewModel) { navigator.NavigateTo(viewModel); } } finally { navigating.Release(); } }
async Task UpdateThread() { Thread = null; threadSubscription?.Dispose(); if (file == null) { return; } var lineAndLeftBuffer = peekService.GetLineNumber(peekSession, triggerPoint); var lineNumber = lineAndLeftBuffer.Item1; var leftBuffer = lineAndLeftBuffer.Item2; var thread = file.InlineCommentThreads?.FirstOrDefault(x => x.LineNumber == lineNumber && ((leftBuffer && x.DiffLineType == DiffChangeType.Delete) || (!leftBuffer && x.DiffLineType != DiffChangeType.Delete))); var vm = factory.CreateViewModel <IPullRequestReviewCommentThreadViewModel>(); if (thread?.Comments.Count > 0) { await vm.InitializeAsync(session, file, thread.Comments[0].Review, thread, true); } else { await vm.InitializeNewAsync(session, file, lineNumber, side, true); } Thread = vm; }
public async Task StartWithLogout <T>(T viewModel, IConnection connection) where T : IDialogContentViewModel, IConnectionInitializedViewModel { var logout = factory.CreateViewModel <ILogOutRequiredViewModel>(); subscription?.Dispose(); subscription = logout.Done.Take(1).Subscribe(async _ => { await connectionManager.Value.LogOut(connection.HostAddress).ConfigureAwait(true); connection = await ShowLogin().ConfigureAwait(true); if (connection != null) { await viewModel.InitializeAsync(connection).ConfigureAwait(true); Start(viewModel); } }); Content = logout; }
public async Task <CloneDialogResult> ShowCloneDialog(IConnection connection) { Guard.ArgumentNotNull(connection, nameof(connection)); var viewModel = factory.CreateViewModel <IRepositoryCloneViewModel>(); return((CloneDialogResult)await showDialog.Show( viewModel, connection, ApiClientConfiguration.RequestedScopes) .ConfigureAwait(false)); }
async Task UpdateThread() { Thread = null; threadSubscription?.Dispose(); Annotations = null; if (file == null) { return; } var lineAndLeftBuffer = peekService.GetLineNumber(peekSession, triggerPoint); var lineNumber = lineAndLeftBuffer.Item1; var leftBuffer = lineAndLeftBuffer.Item2; AvailableForComment = file.Diff.Any(chunk => chunk.Lines .Any(line => leftBuffer ? line.OldLineNumber - 1 == lineNumber : line.NewLineNumber - 1 == lineNumber)); var thread = file.InlineCommentThreads?.FirstOrDefault(x => x.LineNumber == lineNumber && ((leftBuffer && x.DiffLineType == DiffChangeType.Delete) || (!leftBuffer && x.DiffLineType != DiffChangeType.Delete))); Annotations = file.InlineAnnotations?.Where(model => model.EndLine - 1 == lineNumber) .Select(model => new InlineAnnotationViewModel(model)) .ToArray(); var threadModel = factory.CreateViewModel <IPullRequestReviewCommentThreadViewModel>(); if (thread?.Comments.Count > 0) { await threadModel.InitializeAsync(session, file, thread, true); } else { await threadModel.InitializeNewAsync(session, file, lineNumber, side, true); } Thread = threadModel; }
async Task UpdateThread() { var placeholderBody = GetPlaceholderBodyToPreserve(); Thread = null; threadSubscription?.Dispose(); if (file == null) { return; } var lineAndLeftBuffer = peekService.GetLineNumber(peekSession, triggerPoint); var lineNumber = lineAndLeftBuffer.Item1; var leftBuffer = lineAndLeftBuffer.Item2; var thread = file.InlineCommentThreads?.FirstOrDefault(x => x.LineNumber == lineNumber && ((leftBuffer && x.DiffLineType == DiffChangeType.Delete) || (!leftBuffer && x.DiffLineType != DiffChangeType.Delete))); Thread = factory.CreateViewModel <IPullRequestReviewCommentThreadViewModel>(); if (thread?.Comments.Count > 0) { await Thread.InitializeAsync(session, file, thread.Comments[0].Review, thread, true); } else { await Thread.InitializeNewAsync(session, file, lineNumber, side, true); } if (!string.IsNullOrWhiteSpace(placeholderBody)) { var placeholder = Thread.Comments.LastOrDefault(); if (placeholder?.EditState == CommentEditState.Placeholder) { await placeholder.BeginEdit.Execute(); placeholder.Body = placeholderBody; } } }
public static IEnumerable <IPullRequestCheckViewModel> Build(IViewViewModelFactory viewViewModelFactory, PullRequestDetailModel pullRequest) { return(pullRequest.Statuses?.Select(model => { PullRequestCheckStatus checkStatus; switch (model.State) { case StatusState.Expected: case StatusState.Error: case StatusState.Failure: checkStatus = PullRequestCheckStatus.Failure; break; case StatusState.Pending: checkStatus = PullRequestCheckStatus.Pending; break; case StatusState.Success: checkStatus = PullRequestCheckStatus.Success; break; default: throw new InvalidOperationException("Unkown PullRequestCheckStatusEnum"); } var pullRequestCheckViewModel = (PullRequestCheckViewModel)viewViewModelFactory.CreateViewModel <IPullRequestCheckViewModel>(); pullRequestCheckViewModel.Title = model.Context; pullRequestCheckViewModel.Description = model.Description; pullRequestCheckViewModel.Status = checkStatus; pullRequestCheckViewModel.DetailsUrl = new Uri(model.TargetUrl); pullRequestCheckViewModel.AvatarUrl = model.AvatarUrl ?? DefaultAvatar; pullRequestCheckViewModel.Avatar = model.AvatarUrl != null ? new BitmapImage(new Uri(model.AvatarUrl)) : AvatarProvider.CreateBitmapImage(DefaultAvatar); return pullRequestCheckViewModel; }) ?? new PullRequestCheckViewModel[0]); }
public async Task <CloneDialogResult> ShowCloneDialog(IConnection connection) { var viewModel = factory.CreateViewModel <IRepositoryCloneViewModel>(); if (connection != null) { return((CloneDialogResult)await showDialog.Show( viewModel, connection, ApiClientConfiguration.RequestedScopes) .ConfigureAwait(false)); } else { return((CloneDialogResult)await showDialog.ShowWithFirstConnection(viewModel) .ConfigureAwait(false)); } }
ILoginViewModel CreateLoginViewModel() { return(factory.CreateViewModel <ILoginViewModel>()); }
public static IEnumerable <IPullRequestCheckViewModel> Build(IViewViewModelFactory viewViewModelFactory, PullRequestDetailModel pullRequest) { var statuses = pullRequest.Statuses?.Select(model => { PullRequestCheckStatus checkStatus; switch (model.State) { case StatusState.Expected: case StatusState.Error: case StatusState.Failure: checkStatus = PullRequestCheckStatus.Failure; break; case StatusState.Pending: checkStatus = PullRequestCheckStatus.Pending; break; case StatusState.Success: checkStatus = PullRequestCheckStatus.Success; break; default: throw new InvalidOperationException("Unkown PullRequestCheckStatusEnum"); } var pullRequestCheckViewModel = (PullRequestCheckViewModel)viewViewModelFactory.CreateViewModel <IPullRequestCheckViewModel>(); pullRequestCheckViewModel.CheckType = PullRequestCheckType.StatusApi; pullRequestCheckViewModel.Title = model.Context; pullRequestCheckViewModel.Description = model.Description; pullRequestCheckViewModel.Status = checkStatus; pullRequestCheckViewModel.DetailsUrl = !string.IsNullOrEmpty(model.TargetUrl) ? new Uri(model.TargetUrl) : null; return(pullRequestCheckViewModel); }) ?? new PullRequestCheckViewModel[0]; var checks = pullRequest.CheckSuites?.SelectMany(model => model.CheckRuns) .Select(model => { PullRequestCheckStatus checkStatus; switch (model.Status) { case CheckStatusState.Requested: case CheckStatusState.Queued: case CheckStatusState.InProgress: checkStatus = PullRequestCheckStatus.Pending; break; case CheckStatusState.Completed: switch (model.Conclusion) { case CheckConclusionState.Success: checkStatus = PullRequestCheckStatus.Success; break; case CheckConclusionState.ActionRequired: case CheckConclusionState.TimedOut: case CheckConclusionState.Cancelled: case CheckConclusionState.Failure: case CheckConclusionState.Neutral: checkStatus = PullRequestCheckStatus.Failure; break; default: throw new ArgumentOutOfRangeException(); } break; default: throw new ArgumentOutOfRangeException(); } var pullRequestCheckViewModel = (PullRequestCheckViewModel)viewViewModelFactory.CreateViewModel <IPullRequestCheckViewModel>(); pullRequestCheckViewModel.CheckType = PullRequestCheckType.ChecksApi; pullRequestCheckViewModel.Title = model.Name; pullRequestCheckViewModel.Description = model.Summary; pullRequestCheckViewModel.Status = checkStatus; pullRequestCheckViewModel.DetailsUrl = new Uri(model.DetailsUrl); return(pullRequestCheckViewModel); }) ?? new PullRequestCheckViewModel[0]; return(statuses.Concat(checks).OrderBy(model => model.Title)); }