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);
        }
Exemplo n.º 3
0
        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);
        }