public EpisodeViewModel(TvDbSeriesEpisode episode) { this.episode = episode; }
private IEnumerable <Action <TvDbSeries> > GetSeriesUpdates(string response) { var doc = XDocument.Parse(response); var poster = doc.Descendants("poster").FirstOrDefault(); if (poster != null) { if (!string.IsNullOrEmpty(poster.Value)) { var image = string.Format("{0}/banners/{1}", mirror, poster.Value); yield return(s => s.Image = image); } } yield return (doc.ParseAndGetUpdateAction("Rating", value => float.Parse(value, CultureInfo.InvariantCulture.NumberFormat), (s, r) => s.Rating = r)); yield return(doc.ParseAndGetUpdateAction("Airs_Time", (s, v) => s.AirsTime = v)); yield return (doc.ParseAndGetUpdateAction("Airs_DayOfWeek", value => DaysOfWeek.IndexOf(value.Trim().ToLowerInvariant()), (s, v) => s.AirsDayOfWeek = v)); yield return (doc.ParseAndGetUpdateAction("Runtime", int.Parse, (s, i) => s.Runtime = i)); var episodeUpdates = from newData in doc.Descendants("Episode") select new { Id = TvDbSeriesEpisode.GetEpisodeId( newData.Descendants("SeasonNumber").Select(n => n.Value).FirstOrDefault(), newData.Descendants("EpisodeNumber").Select(n => n.Value).FirstOrDefault()), Data = newData }; var newEpisodes = (from update in episodeUpdates let name = update.Data.Descendants("EpisodeName").Select(e => e.Value).FirstOrDefault() let seasonNumber = update.Data.Descendants("SeasonNumber").Select(n => n.Value).FirstOrDefault() let episodeNumber = update.Data.Descendants("EpisodeNumber").Select(n => n.Value).FirstOrDefault() let overview = update.Data.Descendants("Overview").Select(n => n.Value).FirstOrDefault() let firstAired = update.Data.Descendants("FirstAired").Select(n => { DateTime date; if (DateTime.TryParse(n.Value, out date)) { return((DateTime?)date); } return(null); }).FirstOrDefault() let image = update.Data.Descendants("filename").Select(n => string.Format("{0}/banners/{1}", mirror, n.Value)).FirstOrDefault() select(Func <IList <TvDbSeriesEpisode>, TvDbSeriesEpisode>)(episodes => { var episode = episodes.FirstOrDefault(e => e.Id == update.Id); if (episode == null) { episode = new TvDbSeriesEpisode(); } else { episodes.Remove(episode); } episode.Name = name; episode.SeriesNumber = seasonNumber; episode.EpisodeNumber = episodeNumber; episode.Description = overview; episode.FirstAired = firstAired; episode.Image = image; return(episode); })).ToList(); yield return(s => { var episodes = new SelfSortingObservableCollection <TvDbSeriesEpisode, string>(e => e.Id); var current = s.Episodes.ToList(); foreach (var episode in newEpisodes.Select(e => e(current))) { episodes.Add(episode); } s.Episodes = episodes; }); yield return(s => s.Updated = DateTime.Now); }