public EpisodeViewModel(TvDbSeriesEpisode episode)
 {
     this.episode = episode;
 }
Ejemplo n.º 2
0
        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);
        }