public static ChaseOutcome Probe(IRatingDetailsDto ratingDetailsDto, ExtensionDetailsDto extensionDetailsDto)
        {
            var chaser       = new Chaser();
            var chaseOutcome = chaser.Chase(ratingDetailsDto, extensionDetailsDto);

            return(chaseOutcome);
        }
        /// <summary>
        /// Validates the request and conditionally displays a pop-up to user asking for an online rating / review
        /// </summary>
        /// <param name="ratingDetailsDto">Parameter data related to the request for ratings</param>
        /// <param name="extensionDetailsDto">Parameter data related to the Visual Studio extension</param>
        /// <returns>The result of the package invocation</returns>
        public ChaseOutcome Chase(IRatingDetailsDto ratingDetailsDto, ExtensionDetailsDto extensionDetailsDto)
        {
            var outcome = Validate(extensionDetailsDto);

            if (outcome == ChaseOutcome.Unknown)
            {
                InaugrualInvocation(ratingDetailsDto);
                outcome = ValidateRatingDetailsDto(ratingDetailsDto.RatingRequestCount, ratingDetailsDto.PreviousRatingRequest);

                if (outcome == ChaseOutcome.Unknown)
                {
                    var ratingDecider    = new RatingDecider();
                    var shouldShowDialog = ratingDecider.ShouldShowDialog(ratingDetailsDto);

                    if (shouldShowDialog)
                    {
                        ShowDialog(ratingDetailsDto, extensionDetailsDto);
                        outcome = _ratingHyperLinkClicked ? ChaseOutcome.SuccessfullCallAndDialogShownToUserUrlClicked : ChaseOutcome.SuccessfullCallAndDialogShownToUserUrlNotClicked;
                    }
                    else
                    {
                        outcome = ChaseOutcome.SuccessfullCallButDialogNotShownToUser;
                    }
                }
            }

            return(outcome);
        }
 private static void InaugrualInvocation(IRatingDetailsDto ratingDetailsDto)
 {
     if (IsInaugrualInvocation(ratingDetailsDto.RatingRequestCount, ratingDetailsDto.PreviousRatingRequest))
     {
         ratingDetailsDto.PreviousRatingRequest = DateTime.Now;
         ratingDetailsDto.SaveSettingsToStorage();
     }
 }
        private void ShowDialog(IRatingDetailsDto ratingDetailsDto, ExtensionDetailsDto extensionDetailsDto)
        {
            ratingDetailsDto.RatingRequestCount++;
            var ratingDialog = new RatingDialog(extensionDetailsDto, ratingDetailsDto.RatingRequestCount);

            ratingDialog.Show();
            _ratingHyperLinkClicked = ratingDialog.RatingHyperLinkClicked;
            PersistRatingDetails(ratingDetailsDto);
        }
        internal bool ShouldShowDialog(IRatingDetailsDto ratingDetailsDto)
        {
            var exceededRatingRequestLimit = ExceededRatingRequestLimit(ratingDetailsDto.RatingRequestCount, ChaseSettings.RatingRequestLimit);

            var exceededChaseTimeGapLimit = ExceededRatingRequestGap(ratingDetailsDto.PreviousRatingRequest, ChaseSettings.RatingRequestGapInMonths, DateTime.Now);

            var shouldShowDialog = ShouldShowDialog(exceededRatingRequestLimit, exceededChaseTimeGapLimit);

            return(shouldShowDialog);
        }
        public void Hunt(IRatingDetailsDto ratingDetailsDto)
        {
            var extensionDetailsDto = new ExtensionDetailsDto
            {
                AuthorName     = Vsix.Author,
                ExtensionName  = Vsix.Name,
                MarketPlaceUrl = "https://marketplace.visualstudio.com/items?itemName=GregTrevellick.DrainTheSwamp"
            };

            Probe(ratingDetailsDto, extensionDetailsDto);
        }
        public void Hunt(IRatingDetailsDto ratingDetailsDto)
        {
            var extensionDetailsDto = new ExtensionDetailsDto
            {
                AuthorName     = Vsix.Author,
                ExtensionName  = Vsix.Name,
                MarketPlaceUrl = "https://marketplace.visualstudio.com/items?itemName=GregTrevellick.SolutionOpenPopUp"
            };

            ChaserGateway.Probe(ratingDetailsDto, extensionDetailsDto);
        }
 private void PersistRatingDetails(IRatingDetailsDto ratingDetailsDto)
 {
     ratingDetailsDto.PreviousRatingRequest = DateTime.Now;
     ratingDetailsDto.SaveSettingsToStorage();
 }