public async Task Process(Models.BeyondPod.PodCast source, IConsolidationRepository consolidationRepository, INewPodCastQueue newPodCastQueue, ILogger log) { log.LogInformation($"Processing Beyond Pod data"); var existing = await consolidationRepository.Get(source.FeedName, source.EpisodeName); var isNew = (existing == null); Models.BeyondPod.PodCastTableEntity podCast = isNew ? NewPodCast(source) : UpdatePodCast(existing, source); podCast = ApplyFixes(podCast); var shouldBeProgressed = ShouldPodCastBeProgressed(podCast); if (shouldBeProgressed) { podCast.Actioned = true; } // Make sure we can save the podcast before we progress await consolidationRepository.Save(podCast); if (shouldBeProgressed) { var activityPodcast = _podCastConverter.Convert(podCast); newPodCastQueue.Add(activityPodcast); } }
public static Models.BeyondPod.PodCastTableEntity NewPodCast(Models.BeyondPod.PodCast source) { var podCast = new Models.BeyondPod.PodCastTableEntity(source.FeedName, source.EpisodeName); podCast.Created = source.Created; podCast.Playing = source.Playing; podCast.FeedName = source.FeedName; podCast.FeedUrl = source.FeedUrl; podCast.EpisodeName = source.EpisodeName; podCast.EpisodeUrl = source.EpisodeUrl; podCast.EpisodeFile = source.EpisodeFile; podCast.EpisodePostUrl = source.EpisodePostUrl; podCast.EpisodeMime = source.EpisodeMime; podCast.EpisodeSummary = source.EpisodeSummary; podCast.EpisodeDuration = source.EpisodeDuration; podCast.EpisodePosition = source.EpisodePosition; podCast.Artist = source.Artist; podCast.Album = source.Album; podCast.Track = source.Track; return(podCast); }
public async Task RunAsync( [QueueTrigger("beyond-pod-raw-data", Connection = "AzureWebJobsStorage")] Models.BeyondPod.PodCast source, [Table("PodCasts", Connection = "AzureWebJobsStorage")] CloudTable destination, [Queue("new-podcast", Connection = "AzureWebJobsStorage")] ICollector <PodCast> podcastReadyToGo, ILogger log) { log.LogInformation("BeyondPodRawDataConsolidation: Processing Beyond Pod data"); try { var consolidationRepository = new ConsolidationRepository(destination); var newPodCastQueue = new NewPodCastQueue(podcastReadyToGo); await _handler.Process(source, consolidationRepository, newPodCastQueue, log); } catch (Exception ex) { log.LogError("BeyondPodRawDataConsolidation failed", ex); } log.LogInformation("BeyondPodRawDataConsolidation: Processing complete"); }
public static Models.BeyondPod.PodCastTableEntity UpdatePodCast(Models.BeyondPod.PodCastTableEntity podCast, Models.BeyondPod.PodCast source) { if (source.Created > podCast.Created) { podCast.Created = source.Created; podCast.Playing = source.Playing; podCast.EpisodePosition = source.EpisodePosition; // Sometimes we seem to see zero durations if (podCast.EpisodeDuration < source.EpisodeDuration) { podCast.EpisodeDuration = source.EpisodeDuration; } } return(podCast); }