private void LoadEpisodes(MD5 md5, FeedMetaData feedMetaData, ConcurrentBag <IDocument> destination) { var name = GetName(feedMetaData); var sw = new Stopwatch(); sw.Start(); if (string.IsNullOrWhiteSpace(feedMetaData.FeedUrl)) { throw new ArgumentException("Invalid feed, no feedUrl found"); } try { Logger.LogInformation($"{name} Downloading and parsing"); var feed = FeedReader.ReadAsync(feedMetaData.FeedUrl).Result; sw.Stop(); Logger.LogInformation($"{name} Loaded the feed, {feed.Items.Count} episode(s) found in {sw.Elapsed.TotalSeconds}s"); feed.Items.Select(e => new PodcastEpisode { Id = GetId(md5, GetAudioUrl(e.SpecificItem)), PodcastTitle = feed.Title, EpisodeDescription = e.Description, EpisodeTitle = e.Title, // TODO regex Published = e.PublishingDate, AudioUrl = GetAudioUrl(e.SpecificItem), // Season = e.Season, // TODO Not Supported by lib // EpisodeNumber = e.Episode, // TODO Not Supported by lib // EpisodeType = e.EpisodeType, // TODO Not Supported by lib // Tags = e.Tags, // TODO Have to build this Feed = feedMetaData.FeedUrl }).ToList() .ForEach(e => destination.Add(e as IDocument)); } catch (Exception ex) { sw.Stop(); Logger.LogError($"{name}: Failure downloading or parsing feed after {sw.Elapsed.TotalSeconds}s"); Logger.LogError(name + ex.ToString()); Logger.LogError($"{name} Continuing anyway"); } }
private string GetName(FeedMetaData feedMetaData) { return(feedMetaData.PodcastTitle ?? feedMetaData.FeedUrl); }