Ejemplo n.º 1
0
            public async Task <CommandResult> Handle(Command request, CancellationToken cancellationToken)
            {
                var podcastSubscription = await _repository.RetrieveAsync(SubscriptionState.Pending.ToString(), request.SubscriptionToken);

                if (podcastSubscription == null)
                {
                    return(CommandResult.BadRequest("The subscription token was not valid."));
                }

                try
                {
                    var unsubscribeLink = $"{_configuration["FrontendBaseUrl"]}subscription/unsubscribe/{request.SubscriptionToken}";

                    await _feedContentClient.CreateFeedItemPublishedSubscription(podcastSubscription.FeedRowKey,
                                                                                 podcastSubscription.EmailAddress, unsubscribeLink);

                    var confirmedSubscription = PodcastSubscription.CreateConfirmed(podcastSubscription);
                    await _repository.InsertAsync(confirmedSubscription);

                    await _repository.RemoveAsync(podcastSubscription);

                    await _emailSender.Send($"{podcastSubscription.FeedTitle} subscription confirmed",
                                            GetHtml(podcastSubscription.FeedTitle, unsubscribeLink), podcastSubscription.EmailAddress);

                    return(CommandResult.Ok());
                }
                catch (Exception ex)
                {
                    // TODO: log exception in a table as App Insights is expensive
                    return(CommandResult.InternalServerError(new List <string>
                    {
                        $"An error occurred creating the subscription for {podcastSubscription.FeedRowKey} due to {ex}."
                    }));
                }
            }
            public async Task <CommandResult> Handle(Command request, CancellationToken cancellationToken)
            {
                var normalizedEmail = request.EmailAddress?.Trim().ToLowerInvariant();

                if (!IsValidEmail(normalizedEmail))
                {
                    return(CommandResult.BadRequest($@"The email address ""{normalizedEmail}"" is invalid."));
                }

                var subscriptionToken = Guid.NewGuid().ToString();
                var feedTitle         = await _feedContentStorage.GetFeedTitle(request.SubscriptionId);

                var html = GetConfirmationHtml(subscriptionToken, feedTitle);

                var response = await _emailSender.Send($@"Please confirm your subscription to {GetPodcastName(feedTitle)}", html, normalizedEmail);

                if (!response.IsSuccessStatusCode)
                {
                    return(CommandResult.BadRequest($"There was an error: {response.StatusCode}"));
                }

                var podcastSubscription = new PodcastSubscription(SubscriptionState.Pending,
                                                                  subscriptionToken, request.SubscriptionId, normalizedEmail, feedTitle);

                await _repository.InsertAsync(podcastSubscription);

                return(CommandResult.Ok());
            }
            public async Task <CommandResult> Handle(Command request, CancellationToken cancellationToken)
            {
                var confirmedSubscription = await _repository.RetrieveAsync(SubscriptionState.Confirmed.ToString(), request.SubscriptionToken);

                if (confirmedSubscription == null)
                {
                    return(CommandResult.BadRequest("The token provided was not valid."));
                }

                try
                {
                    await _feedContentClient.RemoveFeedItemPublishedSubscription(confirmedSubscription.FeedRowKey,
                                                                                 confirmedSubscription.EmailAddress);

                    var cancelledSubscription = PodcastSubscription.CreateCancelled(confirmedSubscription);
                    await _repository.InsertAsync(cancelledSubscription);

                    await _repository.RemoveAsync(confirmedSubscription);

                    return(CommandResult.Ok());
                }
                catch (Exception ex)
                {
                    // TODO: log exception in a table as App Insights is expensive
                    return(CommandResult.InternalServerError(new List <string>
                    {
                        $"An error occurred creating the subscription for {confirmedSubscription.FeedRowKey} due to {ex}."
                    }));
                }
            }
Ejemplo n.º 4
0
        protected override void ParseSubscription()
        {
            if (txtName.Text.Trim() == "" || txtURL.Text.Trim() == "")
            {
                MessageBox.Show(i18n.FillPodcastNameAndUrlFieldsMessage, i18n.AllFieldsRequiredTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.OnSubscriptionParsed(new SubscriptionParsedEventArgs(false));
                return;
            }

            if (Subscriptions.Instance.Dictionary.ContainsKey(txtURL.Text))
            {
                MessageBox.Show(string.Format(i18n.PodcastSubscriptionAlreadyExists, Subscriptions.Instance.Dictionary[txtURL.Text].Name), i18n.SubscriptionExists, MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.OnSubscriptionParsed(new SubscriptionParsedEventArgs(false));
                return;
            }

            try
            {
                var subscription = new PodcastSubscription {Name = txtName.Text, Url = txtURL.Text};
                using (var podcast = new Podcast(subscription))
                {
                    if (!podcast.IsValid())
                    {
                        MessageBox.Show(i18n.ErrorParsingPodcastMessage, i18n.ErrorParsingPodcastTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        this.OnSubscriptionParsed(new SubscriptionParsedEventArgs(false));
                        return;
                    }
                }

                this.OnSubscriptionParsed(new SubscriptionParsedEventArgs(true, subscription));
            }
            catch(Exception)
            {
                MessageBox.Show(i18n.ErrorParsingPodcastMessage, i18n.ErrorParsingPodcastTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.OnSubscriptionParsed(new SubscriptionParsedEventArgs(false));
            }
        }
Ejemplo n.º 5
0
 public ListviewPodcastSubscription(PodcastSubscription podcastSubscription)
 {
     this._podcastSubscription = podcastSubscription;
     this.Text = podcastSubscription.Name;
     this.SubItems.Add(podcastSubscription.Url);
 }