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));
        }
示例#2
0
        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);
        }