/// <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);
        }
Example #4
0
    /// <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);
      }
    }
Example #5
0
 /// <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);
 }
Example #6
0
    /// <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);
    }
Example #7
0
    /// <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;
    }