/// <summary> /// Parse series metadata as xml element and returns null if xml is not valid (series has no id) /// </summary> /// <param name="seriesXml">Series metadata as xml element</param> /// <param name="isSearchElement"></param> /// <returns>Returns the successfully parsed series</returns> public TheTvDbSeries Parse(XElement seriesXml, bool isSearchElement = false) { if (seriesXml == null) throw new ArgumentNullException(nameof(seriesXml)); // If series has no id throw ParseException var id = seriesXml.ElementAsUInt("id"); if (!id.HasValue) throw new TheTvDbParseException("Error while parsing a series xml element. Id is missing."); var series = new TheTvDbSeries(id.Value) { ImdbId = seriesXml.ElementAsString("IMDB_ID"), SeriesName = seriesXml.ElementAsString("SeriesName", true), Language = seriesXml.ElementAsString(isSearchElement ? "language" : "Language").ToTheTvDbLanguage(), Network = seriesXml.ElementAsString("Network"), Description = seriesXml.ElementAsString("Overview", true), Rating = seriesXml.ElementAsDouble("Rating"), RatingCount = seriesXml.ElementAsInt("RatingCount"), Runtime = seriesXml.ElementAsInt("Runtime"), BannerRemotePath = seriesXml.ElementAsString("banner"), FanartRemotePath = seriesXml.ElementAsString("fanart"), LastUpdated = seriesXml.ElementFromEpochToDateTime("lastupdated"), PosterRemotePath = seriesXml.ElementAsString("poster"), Zap2ItId = seriesXml.ElementAsString("zap2it_id"), FirstAired = seriesXml.ElementAsDateTime("FirstAired"), AirTime = seriesXml.ElementAsTimeSpan("Airs_Time"), AirDay = seriesXml.ElementAsEnum<TheTvDbFrequency>("Airs_DayOfWeek"), Status = seriesXml.ElementAsEnum<TheTvDbStatus>("Status"), ContentRating = seriesXml.ElementAsString("ContentRating").ToTheTvDbContentRating(), Genres = seriesXml.ElementAsString("Genre").SplitByPipe() }; if (series.FirstAired.HasValue) { series.SeriesName = series.SeriesName.Replace(string.Format(" ({0})", series.FirstAired.Value.Year), ""); } return series; }