/// <summary> /// Create a series object with all the information contained in the TvdbSeriesFields object /// </summary> /// <param name="fields"></param> internal TvdbSeries(TvdbSeriesFields fields) : this() { AddLanguage(fields); SetLanguage(fields.Language); //UpdateTvdbFields(_fields, true); }
/// <summary> /// Update all fields of the object with the given information /// </summary> /// <param name="fields">the fields for the update</param> /// <param name="replaceEpisodes">Should the episodes be replaced or kept</param> internal void UpdateTvdbFields(TvdbSeriesFields fields, bool replaceEpisodes) { //Update series details Id = fields.Id; Actors = fields.Actors; AirsDayOfWeek = fields.AirsDayOfWeek; AirsTime = fields.AirsTime; ContentRating = fields.ContentRating; FirstAired = fields.FirstAired; Genre = fields.Genre; ImdbId = fields.ImdbId; Language = fields.Language; Network = fields.Network; NetworkID = fields.NetworkID; Overview = fields.Overview; Rating = fields.Rating; RatingCount = fields.RatingCount; Runtime = fields.Runtime; TvDotComId = fields.TvDotComId; SeriesName = fields.SeriesName; Status = fields.Status; BannerPath = fields.BannerPath; FanartPath = fields.FanartPath; PosterPath = fields.PosterPath; LastUpdated = fields.LastUpdated; Zap2itId = fields.Zap2itId; if (replaceEpisodes) { if (Episodes != null && fields.EpisodesLoaded) { //check for each episode if episode images have been loaded... //if yes -> copy image foreach (TvdbEpisode f in fields.Episodes) { foreach (TvdbEpisode e in Episodes) { if (e.Id == f.Id && e.Banner != null && e.Banner.IsLoaded) { f.Banner = e.Banner; break; } } } } EpisodesLoaded = fields.EpisodesLoaded; if (Episodes == null) { Episodes = new UniqueList <TvdbEpisode>(); } else { Episodes.Clear(); } Episodes.AddRange(fields.Episodes); } }
/// <summary> /// Add a new language to the series /// </summary> /// <param name="fields"></param> internal void AddLanguage(TvdbSeriesFields fields) { if (_seriesTranslations == null) { _seriesTranslations = new Dictionary <TvdbLanguage, TvdbSeriesFields>(); } //delete translation if it already exists and overwrite it with a new one if (_seriesTranslations.ContainsKey(fields.Language)) { _seriesTranslations.Remove(fields.Language); } /*foreach (KeyValuePair<TvdbLanguage, TvdbSeriesFields> kvp in _seriesTranslations) * { * if (kvp.Key == _fields.Language) * { * _seriesTranslations.Remove(kvp.Key); * } * }*/ _seriesTranslations.Add(fields.Language, fields); }
/// <summary> /// Update all fields of the object with the given information /// </summary> /// <param name="fields">the fields for the update</param> /// <param name="replaceEpisodes">Should the episodes be replaced or kept</param> internal void UpdateTvdbFields(TvdbSeriesFields fields, bool replaceEpisodes) { //Update series details Id = fields.Id; Actors = fields.Actors; AirsDayOfWeek = fields.AirsDayOfWeek; AirsTime = fields.AirsTime; ContentRating = fields.ContentRating; FirstAired = fields.FirstAired; Genre = fields.Genre; ImdbId = fields.ImdbId; Language = fields.Language; Network = fields.Network; Overview = fields.Overview; Rating = fields.Rating; Runtime = fields.Runtime; TvDotComId = fields.TvDotComId; SeriesName = fields.SeriesName; Status = fields.Status; BannerPath = fields.BannerPath; FanartPath = fields.FanartPath; PosterPath = fields.PosterPath; LastUpdated = fields.LastUpdated; Zap2itId = fields.Zap2itId; if (replaceEpisodes) { if (Episodes != null && fields.EpisodesLoaded) { //check for each episode if episode images have been loaded... //if yes -> copy image foreach (TvdbEpisode f in fields.Episodes) { foreach (TvdbEpisode e in Episodes) { if (e.Id == f.Id && e.Banner != null && e.Banner.IsLoaded) { f.Banner = e.Banner; break; } } } } EpisodesLoaded = fields.EpisodesLoaded; if (Episodes == null) Episodes = new List<TvdbEpisode>(); else Episodes.Clear(); Episodes.AddRange(fields.Episodes); } }
/// <summary> /// Add a new language to the series /// </summary> /// <param name="fields"></param> internal void AddLanguage(TvdbSeriesFields fields) { if (_seriesTranslations == null) _seriesTranslations = new Dictionary<TvdbLanguage, TvdbSeriesFields>(); //delete translation if it already exists and overwrite it with a new one if (_seriesTranslations.ContainsKey(fields.Language)) _seriesTranslations.Remove(fields.Language); /*foreach (KeyValuePair<TvdbLanguage, TvdbSeriesFields> kvp in _seriesTranslations) { if (kvp.Key == _fields.Language) { _seriesTranslations.Remove(kvp.Key); } }*/ _seriesTranslations.Add(fields.Language, fields); }
/// <summary> /// Extract all the series fields that are available on thetvdb /// <![CDATA[ /// <?xml version="1.0" encoding="UTF-8" ?> /// <Data> /// <Series> /// <id>73739</id> /// <Actors>|Malcolm David Kelley|Jorge Garcia|Maggie Grace|...|</Actors> /// <Airs_DayOfWeek>Thursday</Airs_DayOfWeek> /// <Airs_Time>9:00 PM</Airs_Time> /// <ContentRating>TV-14</ContentRating> /// <FirstAired>2004-09-22</FirstAired> /// <Genre>|Action and Adventure|Drama|Science-Fiction|</Genre> /// <IMDB_ID>tt0411008</IMDB_ID> /// <Language>en</Language> /// <Network>ABC</Network> /// <Overview>After Oceanic Air flight 815...</Overview> /// <Rating>8.9</Rating> /// <Runtime>60</Runtime> /// <SeriesID>24313</SeriesID> /// <SeriesName>Lost</SeriesName> /// <Status>Continuing</Status> /// <banner>graphical/24313-g2.jpg</banner> /// <fanart>fanart/original/73739-1.jpg</fanart> /// <lastupdated>1205694666</lastupdated> /// <zap2it_id>SH672362</zap2it_id> /// </Series> /// /// </Data> /// ]]> /// </summary> /// <param name="data"></param> /// <returns></returns> internal List<TvdbSeriesFields> ExtractSeriesFields(String data) { //Stopwatch watch = new Stopwatch(); //watch.Start(); XDocument xml = XDocument.Parse(data); var allSeries = from series in xml.Descendants("Series") select new { Id = series.Element("id").Value, Actors = series.Element("Actors").Value, Airs_DayOfWeek = series.Element("Airs_DayOfWeek").Value, Airs_Time = series.Element("Airs_Time").Value, ContentRating = series.Element("ContentRating").Value, FirstAired = series.Element("FirstAired").Value, Genre = series.Element("Genre").Value, IMDB_ID = series.Element("IMDB_ID").Value, Language = series.Element("Language").Value, Network = series.Element("Network").Value, Overview = series.Element("Overview").Value, Rating = series.Element("Rating").Value, Runtime = series.Element("Runtime").Value, SeriesID = series.Element("SeriesID").Value, SeriesName = series.Element("SeriesName").Value, Status = series.Element("Status").Value, banner = series.Elements("banner").Count() == 1 ? series.Element("banner").Value : string.Empty, fanart = series.Elements("fanart").Count() == 1 ? series.Element("fanart").Value : string.Empty, poster = series.Elements("poster").Count() == 1 ? series.Element("poster").Value : string.Empty, lastupdated = series.Element("lastupdated").Value, zap2it_id = series.Element("zap2it_id").Value }; List<TvdbSeriesFields> retList = new List<TvdbSeriesFields>(); foreach (var s in allSeries) { int id = Util.Int32Parse(s.Id); if (id == Util.NO_VALUE) continue; TvdbSeriesFields series = new TvdbSeriesFields { Id = id, Actors = Util.SplitTvdbString(s.Actors), AirsDayOfWeek = Util.GetDayOfWeek(s.Airs_DayOfWeek), AirsTime = s.Airs_Time, ContentRating = s.ContentRating, FirstAired = Util.ParseDateTime(s.FirstAired), Genre = Util.SplitTvdbString(s.Genre), ImdbId = s.IMDB_ID, Language = TvDbUtils.ParseLanguage(s.Language), Network = s.Network, Overview = s.Overview, Rating = Util.DoubleParse(s.Rating), Runtime = Util.DoubleParse(s.Runtime), TvDotComId = Util.Int32Parse(s.SeriesID), SeriesName = s.SeriesName, Status = s.Status, BannerPath = s.banner, FanartPath = s.fanart, PosterPath = s.poster, LastUpdated = Util.UnixToDotNet(s.lastupdated), Zap2itId = s.zap2it_id }; retList.Add(series); } //watch.Stop(); //Log.Debug("Extracted " + retList.Count + " series in " + watch.ElapsedMilliseconds + " milliseconds"); return retList; }