public static void HandleSubscribe(Message message, TextWriter log)
        {
            string feedUrl = message.Body.FeedUrl;
            string imageUri = message.Body.ImageUri;
            string hash = Convert.ToBase64String(message.Hash.Code);
            Guid userGuid = message.ObjectId;

            using (var context = new CommuterDbContext())
            {
                Podcast podcast = context.Podcasts
                    .FirstOrDefault(p => p.FeedUrl == feedUrl);
                if (podcast == null)
                {
                    podcast = context.Podcasts.Add(new Podcast
                    {
                        FeedUrl = feedUrl,
                        ImageUri = imageUri
                    });
                    log.WriteLine($"Adding new podcast {feedUrl}.");
                }
                else
                {
                    log.WriteLine($"Adding subscription for existing podcast {feedUrl}.");
                }

                context.Subscriptions.Add(new Subscription
                {
                    Podcast = podcast,
                    UserGuid = userGuid,
                    Hash = hash
                });

                context.SaveChanges();
            }
        }
Exemple #2
0
 public void Save(Message message)
 {
     var objectId = message.ObjectId;
     var messages = _messagesByObjectId.GetValueOrDefault(
         objectId, ImmutableList<Message>.Empty);
     _messagesByObjectId = _messagesByObjectId.SetItem(
         objectId, messages.Add(message));
 }
Exemple #3
0
        private async Task EnqueueInternalAsync(Message message)
        {
            var messageList = await ReadMessagesAsync();

            var memento = message.GetMemento();
            messageList.Add(memento);

            await WriteMessagesAsync(messageList);
        }
Exemple #4
0
        private async Task ConfirmInternalAsync(Message message)
        {
            var messageList = await ReadMessagesAsync();

            string hash = message.Hash.ToString();
            messageList.RemoveAll(o => o.Hash == hash);

            await WriteMessagesAsync(messageList);
        }
Exemple #5
0
 public Subscription CreateSubscription(Message message)
 {
     string feedUrl = message.Body.FeedUrl;
     string imageUri = message.Body.ImageUri;
     string title = message.Body.Title;
     string subtitle = message.Body.Subtitle;
     string author = message.Body.Author;
     return new Subscription(
         new Uri(feedUrl, UriKind.Absolute),
         new Uri(imageUri, UriKind.Absolute),
         title,
         subtitle,
         author,
         message.Hash);
 }
Exemple #6
0
 private async Task SaveInternalAsync(Message message)
 {
     string fileName = String.Format("obj_{0}.json",
         message.ObjectId.ToCanonicalString());
     var inputStream = await FileImplementation.OpenForRead(
         _folderName, fileName);
     var messages = ReadMessages(inputStream);
     if (!messages.Any(m => m.Hash == message.Hash.ToString()))
     {
         messages.Add(message.GetMemento());
         var outputStream = await FileImplementation.OpenForWrite(
             _folderName, fileName);
         WriteMessages(outputStream, messages);
     }
 }
        public static SearchResult FromMessage(Message message)
        {
            string feedUrl = message.Body.FeedUrl;
            string title = message.Body.Title;
            string subtitle = message.Body.Subtitle;
            string author = message.Body.Author;
            string imageUri = message.Body.ImageUri;

            var searchResult = new SearchResult(
                new Uri(feedUrl, UriKind.Absolute),
                title,
                subtitle,
                author,
                new Uri(imageUri, UriKind.Absolute),
                message.Hash);
            return searchResult;
        }
        public static void HandleUnsubscribe(Message message, TextWriter log)
        {
            var hashes = message.GetPredecessors("Subscription")
                .Select(p => Convert.ToBase64String(p.Code))
                .ToList();

            using (var context = new CommuterDbContext())
            {
                var predecessors = context.Subscriptions
                    .Where(s => hashes.Contains(s.Hash))
                    .ToList();
                context.Subscriptions.RemoveRange(predecessors);
                log.WriteLine($"Removing {predecessors.Count} podcast subscriptions");

                context.SaveChanges();
            }
        }
Exemple #9
0
        private static async Task HandleSearch(Message searchMessage, TextWriter log)
        {
            string searchTerm = searchMessage.Body.SearchTerm;

            log.WriteLine($"Searching for {searchTerm}");
            var searchResults = await PerformSearch(searchTerm, log);
            log.WriteLine($"Found {searchResults.Count} results");

            var searchTermId = new { Text = searchTerm }.ToGuid();
            var searchResultMessages = searchResults.Select(r => CreateSearchResultMessage(
                searchMessage.Hash,
                searchTermId,
                r)).ToImmutableList();

            var aggregateMessage = CreateAggregateMessage(searchTermId, searchResultMessages);

            var pump = GetMessagePump();
            pump.SendAllMessages(searchResultMessages);
            pump.Enqueue(aggregateMessage);
        }
Exemple #10
0
 public void OnDownloaded(Message message)
 {
     _fileName.Value = message.Body.FileName;
 }
Exemple #11
0
 public void HandleMessage(Message message)
 {
     _dispatcher.Dispatch(this, message);
     _playhead.HandleMessage(message);
 }
Exemple #12
0
 private Queue CreateQueue(Message message)
 {
     string title = message.Body.Title;
     string summary = message.Body.Summary;
     DateTime publishedDate = message.Body.PublishedDate;
     string mediaUrl = message.Body.MediaUrl;
     string imageUri = message.Body.ImageUri;
     return new Queue(
         new { UserGuid = _userId, mediaUrl = mediaUrl }.ToGuid(),
         _userId,
         new Uri(mediaUrl, UriKind.Absolute),
         title,
         summary,
         publishedDate,
         new Uri(imageUri, UriKind.Absolute));
 }
Exemple #13
0
        private static void HandleUnsubscribe(Message message, TextWriter log)
        {
            MessageHandlers.HandleUnsubscribe(message, log);

            CheckFeeds(log).Wait();
        }
Exemple #14
0
 public void Confirm(Message message)
 {
 }
Exemple #15
0
 private void HandleSearch(Message message)
 {
     string searchTerm = message.Body.SearchTerm;
     var searchTermId = new { Text = searchTerm }.ToGuid();
     _searchTerm.Value = new SearchTerm(
         searchTermId, searchTerm);
 }
Exemple #16
0
 public void Save(Message message)
 {
     Perform(() => SaveInternalAsync(message));
 }
 public void HandleEpisode(Message message)
 {
     if (!_episodes.Any(e => e.Hash == message.Hash))
         _episodes.Add(new Episode
         {
             Title = message.Body.Title,
             Summary = message.Body.Summary,
             PublishDate = message.Body.PublishDate,
             MediaUrl = new Uri(message.Body.MediaUrl, UriKind.Absolute),
             Hash = message.Hash
         });
 }
Exemple #18
0
 public void HandleMessage(Message message)
 {
     _dispatcher.Dispatch(this, message);
     _subscriptions.HandleMessage(message);
     _queuedEpisodes.HandleMessage(message);
 }
Exemple #19
0
 public void Confirm(Message message)
 {
     Perform(() => ConfirmInternalAsync(message));
 }
 public void HandleMessage(Message message)
 {
     _dispatcher.Dispatch(this, message);
 }
Exemple #21
0
 public void Enqueue(Message message)
 {
     Perform(() => EnqueueInternalAsync(message));
 }
Exemple #22
0
 public void Enqueue(Message message)
 {
 }
Exemple #23
0
 public static Aggregate FromMessage(Message message)
 {
     var hashes = message.GetPredecessors("SearchResult");
     return new Aggregate(hashes.ToImmutableHashSet());
 }