public async Task <bool> SetUserConfigurationsAsync(
            string userId,
            BitBucketConversationVariables bitBucketConversationVariables)
        {
            if (GetUserConfigurationsAsync(userId) != null)
            {
                await MyStorage.DeleteAsync(new[] { userId });
            }
            IDictionary <string, object> defaultConfig = new Dictionary <string, object>();

            defaultConfig.Add(userId, JObject.Parse(JsonConvert.SerializeObject(bitBucketConversationVariables)));
            await MyStorage.WriteAsync(defaultConfig);

            return(true);
        }
        public CheckActivePullRequestsDialog(IInnerBitbucketClient bitbucketClient, BitBucketConversationVariables bitBucketConversationVariables)
            : base(nameof(CheckActivePullRequestsDialog))
        {
            _bitbucketClient = bitbucketClient;
            BitBucketConversationVariables = bitBucketConversationVariables;
            AddDialog(new TextPrompt(nameof(TextPrompt)));
            AddDialog(new ConfirmPrompt(nameof(ConfirmPrompt)));
            //  AddDialog(new DateResolverDialog());
            AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[]
            {
                FetchPullRequests,
                FinalStepAsync
            }));

            // The initial child Dialog to run.
            InitialDialogId = nameof(WaterfallDialog);
        }
        private async Task <DialogTurnResult> FetchPullRequests(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            BitBucketConversationVariables = await GlobalVariablesService.GetBitBucketConversationVariables(stepContext.Context.Activity.Recipient.Id);

            if (BitBucketConversationVariables?.GlobalVariables == null)
            {
                await stepContext.Context.SendActivityAsync("No configuration found", cancellationToken : cancellationToken);

                return(await stepContext.NextAsync(null, cancellationToken));
            }
            await stepContext.Context.SendActivityAsync("Gathering info...", cancellationToken : cancellationToken);

            bool foundAnyPullRequest = false;

            foreach (var globalVariable in BitBucketConversationVariables.GlobalVariables)
            {
                foreach (var project in globalVariable.Projects)
                {
                    foreach (var repositoryName in project.RepositoryNames)
                    {
                        var pullRequestList = new List <PullRequest>();

                        try
                        {
                            pullRequestList.AddRange((await _bitbucketClient.FetchActivePullRequests(
                                                          globalVariable.BaseUrl,
                                                          project.ProjectName,
                                                          repositoryName,
                                                          globalVariable.PersonalAccessToken,
                                                          globalVariable.Password,
                                                          globalVariable.UserName)).FindAll(x => x.Open));

                            if (pullRequestList.Count > 0)
                            {
                                foundAnyPullRequest = true;
                            }
                        }
                        catch (Exception e)
                        {
                            await stepContext.Context.SendActivityAsync(
                                "Error was thrown during fetching data, maybe there in a wrong info provided for fetching information?",
                                cancellationToken : cancellationToken);

                            await stepContext.Context.SendActivityAsync(e.Message, cancellationToken : cancellationToken);
                        }

                        foreach (var pullRequest in pullRequestList)
                        {
                            var pullRequestCard = CreateAdaptiveCardAttachment(pullRequest, globalVariable.BaseUrl, project.ProjectName,
                                                                               repositoryName);
                            var response = MessageFactory.Attachment(pullRequestCard);
                            await stepContext.Context.SendActivityAsync(response, cancellationToken);
                        }
                    }
                }
            }

            if (!foundAnyPullRequest)
            {
                await stepContext.Context.SendActivityAsync("No active pull requests found", cancellationToken : cancellationToken);
            }

            return(await stepContext.NextAsync(null, cancellationToken));
        }
示例#4
0
 public static async Task <bool> SetBitBucketConversationVariables(string userId, BitBucketConversationVariables bitBucketConversationVariables)
 {
     try
     {
         return(await AzureDb.SetUserConfigurationsAsync(userId, bitBucketConversationVariables));
     }
     catch
     {
         return(false);
     }
 }