Beispiel #1
0
        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));
            }
        }
Beispiel #2
0
        async Task AddComment(CommentModel comment)
        {
            var vm = factory.CreateViewModel <IIssueishCommentViewModel>();
            await vm.InitializeAsync(
                this,
                currentUserModel,
                comment,
                true,
                false).ConfigureAwait(true);

            timeline.Add(vm);
        }
Beispiel #3
0
        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));
            }
        }
Beispiel #4
0
        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();
            }
        }
Beispiel #5
0
        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;
        }
Beispiel #6
0
        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));
        }
Beispiel #8
0
        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]);
        }
Beispiel #11
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));
            }
        }
Beispiel #12
0
 ILoginViewModel CreateLoginViewModel()
 {
     return(factory.CreateViewModel <ILoginViewModel>());
 }
Beispiel #13
0
        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));
        }