public async Task <ChannelCreateRequestResult> Handle( ChannelsCreateNewChannelRequest request, CancellationToken _) { var feed = await FeedReader.ReadAsync(request.Url); var uri = new Uri(request.Url.ToLowerInvariant()); var title = string.IsNullOrWhiteSpace(feed.Title) ? uri.ToString() : feed.Title; var channelToSearch = uri.Authority + uri.AbsolutePath; var existingChannelId = await channelFinderRepository.FindChannelIdByUrlAsync(channelToSearch, IChannelFinderRepository.Match.Like); if (existingChannelId != default(Guid)) { return(ChannelCreateRequestResult.Exists(title)); } var channelId = await this.repository.SaveAsync(request.Url.ToLowerInvariant(), request.PersonId); var mesg = new ChannelToDownload() { Id = channelId, Url = request.Url }; await this.messagesCollector.AddAsync(mesg, QueuesName.ChannelToDownload); return(ChannelCreateRequestResult.Created(title)); }
public async Task <Unit> Handle(ImportSubscriptionsRequest request, CancellationToken cancellationToken) { foreach (var outline in request.Opml.Body.Outline) { if (string.IsNullOrWhiteSpace(outline.XmlUrl)) { continue; } var uri = new Uri(outline.XmlUrl.ToLowerInvariant()); var channelToSearch = uri.Authority + uri.AbsolutePath; var channelId = await this.channelFinderRepository.FindChannelIdByUrlAsync(channelToSearch, IChannelFinderRepository.Match.Like); if (channelId == default(Guid)) { channelId = await this.createNewChannelRepository.SaveAsync(outline.XmlUrl.ToLowerInvariant(), request.UserId); } var message = new ChannelToDownload { Id = channelId, Url = outline.XmlUrl.ToLowerInvariant() }; await this.messagesCollector.AddAsync(message, QueuesName.ChannelToDownload); await this.subscriptionsRepository.CreateSubscriptionAsync(channelId, request.UserId); } return(Unit.Value); }