/// <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 this.Id = _fields.Id; this.Actors = _fields.Actors; this.AirsDayOfWeek = _fields.AirsDayOfWeek; this.AirsTime = _fields.AirsTime; this.ContentRating = _fields.ContentRating; this.FirstAired = _fields.FirstAired; this.Genre = _fields.Genre; this.ImdbId = _fields.ImdbId; this.Language = _fields.Language; this.Network = _fields.Network; this.Overview = _fields.Overview; this.Rating = _fields.Rating; this.Runtime = _fields.Runtime; this.TvDotComId = _fields.TvDotComId; this.SeriesName = _fields.SeriesName; this.Status = _fields.Status; this.BannerPath = _fields.BannerPath; this.FanartPath = _fields.FanartPath; this.PosterPath = _fields.PosterPath; this.LastUpdated = _fields.LastUpdated; this.Zap2itId = _fields.Zap2itId; if (_replaceEpisodes) { if (this.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 this.Episodes) { if (e.Id == f.Id && e.Banner != null && e.Banner.IsLoaded) { f.Banner = e.Banner; break; } } } } this.EpisodesLoaded = _fields.EpisodesLoaded; this.Episodes.Clear(); this.Episodes.AddRange(_fields.Episodes); } }
/// <summary> /// Add a new language to the series /// </summary> /// <param name="_fields"></param> internal void AddLanguage(TvdbSeriesFields _fields) { if (m_seriesTranslations == null) { m_seriesTranslations = new Dictionary <TvdbLanguage, TvdbSeriesFields>(); } //delete translation if it already exists and overwrite it with a new one foreach (KeyValuePair <TvdbLanguage, TvdbSeriesFields> kvp in m_seriesTranslations) { if (kvp.Key.Abbriviation.Equals(_fields.Language.Abbriviation)) { m_seriesTranslations.Remove(kvp.Key); } } m_seriesTranslations.Add(_fields.Language, _fields); }
/// <summary> /// Add a new language to the series /// </summary> /// <param name="_fields"></param> internal void AddLanguage(TvdbSeriesFields _fields) { if (m_seriesTranslations == null) { m_seriesTranslations = new Dictionary <TvdbLanguage, TvdbSeriesFields>(); } //delete translation if it already exists and overwrite it with a new one if (m_seriesTranslations.ContainsKey(_fields.Language)) { m_seriesTranslations.Remove(_fields.Language); } /*foreach (KeyValuePair<TvdbLanguage, TvdbSeriesFields> kvp in m_seriesTranslations) * { * if (kvp.Key == _fields.Language) * { * m_seriesTranslations.Remove(kvp.Key); * } * }*/ m_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 : "", fanart = series.Elements("fanart").Count() == 1 ? series.Element("fanart").Value : "", poster = series.Elements("poster").Count() == 1 ? series.Element("poster").Value : "", lastupdated = series.Element("lastupdated").Value, zap2it_id = series.Element("zap2it_id").Value }; List<TvdbSeriesFields> retList = new List<TvdbSeriesFields>(); foreach (var s in allSeries) { TvdbSeriesFields series = new TvdbSeriesFields(); series.Id = Util.Int32Parse(s.Id); series.Actors = Util.SplitTvdbString(s.Actors); series.AirsDayOfWeek = Util.GetDayOfWeek(s.Airs_DayOfWeek); series.AirsTime = s.Airs_Time; series.ContentRating = s.ContentRating; series.FirstAired = Util.ParseDateTime(s.FirstAired); series.Genre = Util.SplitTvdbString(s.Genre); series.ImdbId = s.IMDB_ID; series.Language = Util.ParseLanguage(s.Language); series.Network = s.Network; series.Overview = s.Overview; series.Rating = Util.DoubleParse(s.Rating); series.Runtime = Util.DoubleParse(s.Runtime); series.TvDotComId = Util.Int32Parse(s.SeriesID); series.SeriesName = s.SeriesName; series.Status = s.Status; series.BannerPath = s.banner; series.FanartPath = s.fanart; series.PosterPath = s.poster; series.LastUpdated = Util.UnixToDotNet(s.lastupdated); series.Zap2itId = s.zap2it_id; if (series.Id != -99) retList.Add(series); } //watch.Stop(); //Log.Debug("Extracted " + retList.Count + " series in " + watch.ElapsedMilliseconds + " milliseconds"); return retList; }
/// <summary> /// Add a new language to the series /// </summary> /// <param name="_fields"></param> internal void AddLanguage(TvdbSeriesFields _fields) { if (m_seriesTranslations == null) { m_seriesTranslations = new Dictionary<TvdbLanguage, TvdbSeriesFields>(); } //delete translation if it already exists and overwrite it with a new one if (m_seriesTranslations.ContainsKey(_fields.Language)) { m_seriesTranslations.Remove(_fields.Language); } /*foreach (KeyValuePair<TvdbLanguage, TvdbSeriesFields> kvp in m_seriesTranslations) { if (kvp.Key == _fields.Language) { m_seriesTranslations.Remove(kvp.Key); } }*/ m_seriesTranslations.Add(_fields.Language, _fields); }
/// <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 this.Id = _fields.Id; this.Actors = _fields.Actors; this.AirsDayOfWeek = _fields.AirsDayOfWeek; this.AirsTime = _fields.AirsTime; this.ContentRating = _fields.ContentRating; this.FirstAired = _fields.FirstAired; this.Genre = _fields.Genre; this.ImdbId = _fields.ImdbId; this.Language = _fields.Language; this.Network = _fields.Network; this.Overview = _fields.Overview; this.Rating = _fields.Rating; this.Runtime = _fields.Runtime; this.TvDotComId = _fields.TvDotComId; this.SeriesName = _fields.SeriesName; this.Status = _fields.Status; this.BannerPath = _fields.BannerPath; this.FanartPath = _fields.FanartPath; this.PosterPath = _fields.PosterPath; this.LastUpdated = _fields.LastUpdated; this.Zap2itId = _fields.Zap2itId; if (_replaceEpisodes) { if (this.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 this.Episodes) { if (e.Id == f.Id && e.Banner != null && e.Banner.IsLoaded) { f.Banner = e.Banner; break; } } } } this.EpisodesLoaded = _fields.EpisodesLoaded; this.Episodes.Clear(); this.Episodes.AddRange(_fields.Episodes); } }
/// <summary> /// Add a new language to the series /// </summary> /// <param name="_fields"></param> internal void AddLanguage(TvdbSeriesFields _fields) { if (m_seriesTranslations == null) { m_seriesTranslations = new Dictionary<TvdbLanguage, TvdbSeriesFields>(); } //delete translation if it already exists and overwrite it with a new one foreach (KeyValuePair<TvdbLanguage, TvdbSeriesFields> kvp in m_seriesTranslations) { if (kvp.Key.Abbriviation.Equals(_fields.Language.Abbriviation)) { m_seriesTranslations.Remove(kvp.Key); } } m_seriesTranslations.Add(_fields.Language, _fields); }