Beispiel #1
0
        public static int AddBasicInfo(TvdbSeries series)
        {
            // Get Series Id
            var seriesId = SeriesEntity.GetId(series.Id, series.SeriesName);

            // Add Series Metadata
            StatusEnum? status;
            try
            {
                status = (StatusEnum)Enum.Parse(typeof(StatusEnum), series.Status);
            }
            catch (Exception e)
            {
                Logger.ErrorException("Error while converting status string to enum.", e);
                status = null;
            }

            SeriesEntity.AddMetadata(
                seriesId,
                series.ImdbId,
                series.Zap2itId,
                series.Network,
                series.ContentRating,
                Convert.ToDecimal(series.Rating),
                status,
                GetAirTime(series.AirsDayOfWeek, series.AirsTime),
                series.FirstAired,
                Convert.ToInt16(Math.Round(series.Runtime, 0)),
                DateTime.UtcNow);

            Logger.Trace("Genres: {0}", series.GenreString);
            AddGenres(seriesId, series.Genre);

            return seriesId;
        }
 public void DebugEpisodeDump(TvdbSeries tvdbSeries)
 {
     if (config.GetProperty("dumpepisodes").ToUpper() == "TRUE")
     {
         this.DumpSeriesEpisodes(tvdbSeries);
     }
 }
Beispiel #3
0
 public void AddSeries(string path, TvdbSeries series)
 {
     Logger.Info("Adding Series [{0}]:{1} Path: {2}", series.Id, series.SeriesName, path);
     var repoSeries = new Series();
     repoSeries.SeriesId = series.Id;
     repoSeries.Title = series.SeriesName;
     repoSeries.AirTimes = series.AirsTime;
     repoSeries.AirsDayOfWeek = series.AirsDayOfWeek;
     repoSeries.Overview = series.Overview;
     repoSeries.Status = series.Status;
     repoSeries.Language = series.Language != null ? series.Language.Abbriviation : string.Empty;
     repoSeries.Path = path;
     repoSeries.CleanTitle = CleanUpRegex.Replace(series.SeriesName, "").ToLower();
     _sonioRepo.Add(repoSeries);
 }
Beispiel #4
0
 private void cmdInit_Click(object sender, EventArgs e)
 {
     m_tvdbHandler = new TvdbHandler(new XmlCacheProvider("C:\\test"), Resources.API_KEY);
       m_series = m_tvdbHandler.GetBasicSeries(80370, TvdbLanguage.DefaultLanguage, true);
       int count = 0;
       fanartControl1.NumberOfImages = m_series.FanartBanners.Count;
       foreach (TvdbFanartBanner fb in m_series.FanartBanners)
       {
     if(fb.IsThumbLoaded || fb.LoadThumb())
     {
       fanartControl1.SetImage(fb, count);
       count++;
     }
       }
 }
Beispiel #5
0
 private void cmdLoadBannerTest_Click(object sender, EventArgs e)
 {
     m_selectedSeriesForBannerTesting = m_tvdbHandler.GetSeries(Int32.Parse(txtSeriesIdForBanners.Text), TvdbLanguage.DefaultLanguage, true, true, true, true);
       if (m_selectedSeriesForBannerTesting != null)
       {
     m_bannerTestingIndex = 0;
     pbBannerTesting.Visible = true;
     pbBannerTesting.BringToFront();
     LoadBanner(m_bannerTestingIndex);
       }
       else
       {
     MessageBox.Show("Couldn't load series");
       }
 }
        public void Setup()
        {
            WithTempAsAppPath();

            series = Builder<Series>
                    .CreateNew()
                    .With(s => s.SeriesId == 79488)
                    .With(s => s.Title == "30 Rock")
                    .Build();

            var seasonBanners = Builder<TvdbSeasonBanner>
                    .CreateListOfSize(4)
                    .TheFirst(2)
                    .With(b => b.Season = 1)
                    .TheLast(2)
                    .With(b => b.Season = 2)
                    .TheFirst(1)
                    .With(b => b.BannerType = TvdbSeasonBanner.Type.season)
                    .With(b => b.BannerPath = "seasons/79488-1-1.jpg")
                    .TheNext(2)
                    .With(b => b.BannerType = TvdbSeasonBanner.Type.seasonwide)
                    .With(b => b.BannerPath = "banners/seasons/79488-test.jpg")
                    .TheLast(1)
                    .With(b => b.BannerType = TvdbSeasonBanner.Type.season)
                    .With(b => b.BannerPath = "seasons/79488-2-1.jpg")
                    .Build();

            var seriesActors = Builder<TvdbActor>
                    .CreateListOfSize(5)
                    .All()
                    .With(a => a.ActorImage = Builder<TvdbActorBanner>.CreateNew().Build())
                    .Build();

            tvdbSeries = Builder<TvdbSeries>
                    .CreateNew()
                    .With(s => s.Id = 79488)
                    .With(s => s.SeriesName = "30 Rock")
                    .With(s => s.TvdbActors = seriesActors.ToList())
                    .Build();

            tvdbSeries.Banners.AddRange(seasonBanners);
        }
        public void EnrichProgram(GuideEnricherProgram existingProgram, TvdbSeries tvdbSeries)
        {
            if (existingProgram == null) throw new ArgumentNullException("existingProgram");
            if (tvdbSeries == null) throw new ArgumentNullException("tvdbSeries");
            //
            log.DebugFormat("Starting lookup for {0} - {1}", existingProgram.Title, existingProgram.SubTitle);

            foreach (var matchMethod in this.matchMethods)
            {
                try
                {
                    if (matchMethod.Match(existingProgram, tvdbSeries.Episodes))
                    {
                        existingProgram.Matched = true;
                        break;
                    }
                }
                catch (Exception e)
                {
                    log.ErrorFormat("Matchmethod \"{0}\" failed with exception \"{1}\"", matchMethod.MethodName, e.GetBaseException().Message, e);
                }
            }
        }
Beispiel #8
0
        /// <summary>
        /// Forces a complete update of the series. All information that has already been loaded (including loaded images!) will be deleted and reloaded from tvdb -> if you only want to update the series, use the "MakeUpdate" method
        /// </summary>
        /// <param name="_series">Series to update</param>
        /// <param name="_loadEpisodes">Should episodes be loaded as well</param>
        /// <param name="_loadActors">Should actors be loaded as well</param>
        /// <param name="_loadBanners">Should banners be loaded as well</param>
        /// <returns></returns>
        public TvdbSeries ForceUpdate(TvdbSeries _series, bool _loadEpisodes,
            bool _loadActors, bool _loadBanners)
        {
            if (_series != null)
              {
            TvdbSeries newSeries = m_downloader.DownloadSeries(_series.Id, _series.Language, _loadEpisodes,
                                                           _loadActors, _loadBanners);

            if (newSeries != null)
            {
              if (m_cacheProvider != null && m_cacheProvider.Initialised)
              {//remove old series from cache and store the reloaded one
            m_cacheProvider.RemoveFromCache(_series.Id);
            m_cacheProvider.SaveToCache(newSeries);
              }

              return newSeries;
            }
            else
            {
              Log.Warn("Couldn't load series " + _series.Id + ", reloading not successful");
              return null;
            }
              }
              else
              {
            Log.Warn("no series given (null)");
            return null;
              }
        }
Beispiel #9
0
 /// <summary>
 /// Adds the series to the users list of favorites and returns the new list of
 /// favorites
 /// </summary>
 /// <param name="_series">series to add to the favorites</param>
 /// <returns>new list with all favorites</returns>
 public List<int> AddSeriesToFavorites(TvdbSeries _series)
 {
     if (_series == null) return null;
       return AddSeriesToFavorites(_series.Id);
 }
Beispiel #10
0
 /// <summary>
 /// Forces a complete update of the series. All information that has already been loaded (including loaded images!) will be deleted and reloaded from tvdb -> if you only want to update the series, use the "MakeUpdate" method
 /// </summary>
 /// <param name="_series">Series to reload</param>
 public TvdbSeries ForceUpdate(TvdbSeries _series)
 {
     return ForceUpdate(_series, _series.EpisodesLoaded, _series.TvdbActorsLoaded, _series.BannersLoaded);
 }
Beispiel #11
0
        /// <summary>
        /// Update the series with the episode (Add it to the series if it doesn't already exist or update the episode if the current episode is older than the updated one)
        /// </summary>
        /// <param name="_series">Series of the updating episode</param>
        /// <param name="_episode">Episode that is updated</param>
        /// <param name="_progress">Progress of the update run</param>
        /// <returns>true if episode has been updated, false if not (e.g. timestamp of updated episode older than
        ///          timestamp of existing episode</returns> 
        private bool UpdateEpisode(TvdbSeries _series, TvdbEpisode _episode, int _progress)
        {
            bool updateDone = false;
              TvdbLanguage currentLanguage = _series.Language;
              foreach (KeyValuePair<TvdbLanguage, TvdbSeriesFields> kvp in _series.SeriesTranslations)
              {
            if (_series.EpisodesLoaded)
            {
              bool found = false;
              List<TvdbEpisode> eps = kvp.Value.Episodes;

              if (eps != null && eps.Count > 0)
              {
            //check all episodes if the updated episode is in it
            foreach (TvdbEpisode e in eps)
            {
              if (e.Id == _episode.Id)
              {
                found = true;
                if (e.LastUpdated < _episode.LastUpdated)
                {
                  //download episode which has been updated
                  TvdbEpisode newEpisode = null;
                  try
                  {
                    newEpisode = m_downloader.DownloadEpisode(e.Id, kvp.Key);
                  }
                  catch (TvdbContentNotFoundException)
                  {
                    Log.Warn("Couldn't download episode " + e.Id + "(" + e.EpisodeName + ")");
                  }
                  //update information of episode with new episodes informations
                  if (newEpisode != null)
                  {
                    newEpisode.LastUpdated = _episode.LastUpdated;

                    e.UpdateEpisodeInfo(newEpisode);
                    if (UpdateProgressed != null)
                    {//update has started, we're downloading the updated content from tvdb
                      UpdateProgressed(new UpdateProgressEventArgs(UpdateProgressEventArgs.UpdateStage.episodesupdate,
                                                                   "Updating episode " + _series.SeriesName + " " + e.SeasonNumber +
                                                                   "x" + e.EpisodeNumber + "(id: " + _episode.Id + ")",
                                                                   _progress, 50 + (int)(_progress / 4)));
                    }
                    Log.Info("Updated Episode " + e.SeasonNumber + "x" + e.EpisodeNumber + " for series " + _series.SeriesName +
                             "(id: " + e.Id + ", lang: " + e.Language.Abbriviation + ")");
                    updateDone = true;
                  }
                }
                break;
              }
            }
              }

              if (!found)
              {
            //episode hasn't been found
            //hasn't been found -> add it to series
            TvdbEpisode ep = null;
            try
            {
              ep = m_downloader.DownloadEpisode(_episode.Id, kvp.Key);
            }
            catch (TvdbContentNotFoundException ex)
            {
              Log.Warn("Problem downloading " + _episode.Id + ": " + ex.ToString());
            }
            if (ep != null)
            {
              kvp.Value.Episodes.Add(ep);
              //todo: sort here!!!! -> create episode comparer
              //kvp.Value.Episodes.Sort(new Comparison<TvdbEpisode>(v

              if (UpdateProgressed != null)
              {//update has started, we're downloading the updated content from tvdb
                UpdateProgressed(new UpdateProgressEventArgs(UpdateProgressEventArgs.UpdateStage.episodesupdate,
                                                             "Added episode " + _series.SeriesName + " " + ep.SeasonNumber +
                                                             "x" + ep.EpisodeNumber + "(id: " + ep.Id + ")",
                                                             _progress, 50 + (int)(_progress / 4)));
              }
              Log.Info("Added Episode " + ep.SeasonNumber + "x" + ep.EpisodeNumber + " for series " + _series.SeriesName +
                       "(id: " + ep.Id + ", lang: " + ep.Language.Abbriviation + ")");
              updateDone = true;
            }
              }
            }
            else
            {
              Log.Debug("Not adding episode " + _episode.Id + ", because series " + _series.SeriesName + " hasn't loaded episodes");
              updateDone = false;
            }
              }
              _series.SetLanguage(currentLanguage);
              return updateDone;
        }
Beispiel #12
0
        /// <summary>
        /// Download the new series and update the information
        /// </summary>
        /// <param name="_series">Series to update</param>
        /// <param name="_lastUpdated">When was the last update made</param>
        /// <param name="_progress">The progress done until now</param>
        /// <returns>true if the series has been upated false if not</returns>
        private bool UpdateSeries(TvdbSeries _series, DateTime _lastUpdated, int _progress)
        {
            //get series info
              bool updateDone = false;
              TvdbLanguage currentLanguage = _series.Language;
              foreach (KeyValuePair<TvdbLanguage, TvdbSeriesFields> kvp in _series.SeriesTranslations)
              {
            if (kvp.Value.LastUpdated < _lastUpdated)
            {//the local content is older than the update time in the updates xml files
              TvdbSeries newSeries = null;
              try
              {//try to get the series
            newSeries = GetSeries(_series.Id, kvp.Key, false, false, false);
              }
              catch (TvdbContentNotFoundException ex)
              {//couldn't download the series
            Log.Warn("Problem downloading series (id: " + _series.Id + "): " + ex.ToString());
              }

              if (newSeries != null)
              {//download of the series successfull -> do updating
            if (UpdateProgressed != null)
            {//update has started, we're downloading the updated content from tvdb
              UpdateProgressed(new UpdateProgressEventArgs(UpdateProgressEventArgs.UpdateStage.seriesupdate,
                                                           "Updating series " + _series.SeriesName,
                                                           _progress, 25 + (int)(_progress / 4)));
            }
            newSeries.LastUpdated = _lastUpdated;

            //don't replace episodes, since they're
            kvp.Value.UpdateTvdbFields(newSeries, false);

            //kvp.Value.Update (newSeries);
            Log.Info("Updated Series " + _series.SeriesName + " (id: " + _series.Id + ")");
            updateDone = true;
              }
            }
              }
              _series.SetLanguage(currentLanguage);//to copy the episode-fields to the base series
              return updateDone;
        }
Beispiel #13
0
 /// <summary>
 /// Add the episode to the series
 /// </summary>
 /// <param name="_episode"></param>
 /// <param name="_series"></param>
 internal static void AddEpisodeToSeries(TvdbEpisode _episode, TvdbSeries _series)
 {
     bool episodeFound = false; ;
       for (int i = 0; i < _series.Episodes.Count; i++)
       {
     if (_series.Episodes[i].Id == _episode.Id)
     {//we have already stored this episode -> overwrite it
       _series.Episodes[i].UpdateEpisodeInfo(_episode);
       episodeFound = true;
       break;
     }
       }
       if (!episodeFound)
       {//the episode doesn't exist yet
     _series.Episodes.Add(_episode);
     if (!_series.EpisodesLoaded) _series.EpisodesLoaded = true;
       }
 }
Beispiel #14
0
        private void FillSeriesDetails(TvdbSeries _series)
        {
            if (m_tvdbHandler.UserInfo != null)
              {
            cmdAddRemoveFavorites.Enabled = true;
            cmdAddRemoveFavorites.Text = _series.IsFavorite ? "Remove from favorites" : "Add to favorites";
            cmdSendSeriesRating.Enabled = true;
            raterSeriesYourRating.Enabled = true;
              }
              else
              {
            cmdAddRemoveFavorites.Enabled = false;
            cmdSendSeriesRating.Enabled = false;
            raterSeriesYourRating.Enabled = false;
              }

              List<TvdbBanner> bannerlist = new List<TvdbBanner>();
              foreach (TvdbBanner b in _series.Banners)
              {
            if (b.GetType() == typeof(TvdbSeriesBanner))
            {
              //if (b.Language.Id == m_defaultLang.Id)
              {
            bannerlist.Add(b);
              }
            }
              }

              if (bannerlist.Count > 0)
              {
            bcSeriesBanner.BannerImages = bannerlist;
              }
              else
              {
            bcSeriesBanner.ClearControl();
              }

              if (_series.PosterBanners.Count > 0)
              {
            posterControlSeries.PosterImages = _series.PosterBanners;
              }
              else
              {
            posterControlSeries.ClearPoster();
              }

              txtSeriesId.Text = _series.Id.ToString();
              txtSeriesName.Text = _series.SeriesName;
              txtStatus.Text = _series.Status;
              txtGenre.Text = _series.GenreString;
              txtFirstAired.Text = _series.FirstAired != null ? _series.FirstAired.ToShortDateString() : "";
              txtAirsWeekday.Text = _series.AirsDayOfWeek != null ? _series.AirsDayOfWeek.ToString() : "";
              txtAirstime.Text = _series.AirsTime;
              txtNetwork.Text = _series.Network;
              txtRuntime.Text = _series.Runtime != -99 ? _series.Runtime.ToString() : "";
              txtRating.Text = _series.Rating != -99 ? _series.Rating.ToString() : "";
              txtActors.Text = _series.ActorsString;
              txtOverview.Text = _series.Overview;
              txtTvComId.Text = _series.TvDotComId != -99 ? _series.TvDotComId.ToString() : ""; //series.
              if (_series.TvDotComId != -99)
              {
            String link = "http://www.tv.com/show/" + _series.TvDotComId + "/summary.html";
            llblTvComId.Text = "Open";
            llblTvComId.Links.Clear();
            llblTvComId.Links.Add(0, link.Length, link);
              }
              else
              {
            llblTvComId.Links.Clear();
            llblTvComId.Text = "";
              }
              txtImdbId.Text = _series.ImdbId;
              if (_series.ImdbId != null && !_series.ImdbId.Equals(""))
              {
            String link = "http://www.imdb.com/title/" + _series.ImdbId;
            llblImdb.Text = "Open";
            llblImdb.Links.Clear();
            llblImdb.Links.Add(0, link.Length, link);
              }
              else
              {
            llblImdb.Links.Clear();
            llblImdb.Text = "";
              }

              txtZap2itId.Text = _series.Zap2itId;
              raterSeriesSiteRating.CurrentRating = _series.Rating != -99 ? (int)_series.Rating : 0;
        }
Beispiel #15
0
 public virtual void CreateForEpisodeFile(EpisodeFile episodeFile, TvdbSeries tvDbSeries)
 {
     foreach (var provider in _metadataProviders.Where(i => GetSettings(i.GetType()).Enable))
     {
         provider.CreateForEpisodeFile(episodeFile, tvDbSeries);
     }
 }
Beispiel #16
0
        /// <summary>
        /// Extract a list of series in the format:
        /// <![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<TvdbSeries> ExtractSeries(String _data)
        {
            List<TvdbSeriesFields> tvdbInfo = ExtractSeriesFields(_data);
              List<TvdbSeries> retList = new List<TvdbSeries>();
              foreach (TvdbSeriesFields s in tvdbInfo)
              {
            TvdbSeries series = new TvdbSeries(s);

            if (!series.BannerPath.Equals(""))
            {
              series.Banners.Add(new TvdbSeriesBanner(series.Id, series.BannerPath, series.Language, TvdbSeriesBanner.Type.graphical));
            }

            if (!series.FanartPath.Equals(""))
            {
              series.Banners.Add(new TvdbFanartBanner(series.Id, series.FanartPath, series.Language));
            }

            if (!series.PosterPath.Equals(""))
            {
              series.Banners.Add(new TvdbPosterBanner(series.Id, series.PosterPath, series.Language));
            }
            retList.Add(series);
              }
              return retList;
        }
            public TVShowMetadata(IFileSystem fileSystem, DirectoryInfoBase cacheDirectory, TvdbSeries tvdbSeries, TvdbEpisode tvdbEpisode)
            {
                // Set metadata.
                TVShowName = tvdbSeries.SeriesName;
                SeasonNumber = tvdbEpisode.SeasonNumber;
                EpisodeNumber = tvdbEpisode.EpisodeNumber;
                Name = tvdbEpisode.EpisodeName;
                Description = tvdbEpisode.Overview;
                Genres = tvdbSeries.Genre;
                Cast = tvdbSeries.Actors;
                Directors = tvdbEpisode.Directors;
                Screenwriters = tvdbEpisode.Writer;
                ReleaseDate = tvdbEpisode.FirstAired;
                Network = tvdbSeries.Network;

                // Get artwork.
                if (SeasonNumber.HasValue && tvdbSeries.SeasonBanners.Any(banner => banner.Season == SeasonNumber))
                {
                    Artwork = tvdbSeries.SeasonBanners.Where (banner => banner.Season == SeasonNumber).FirstOrDefault ().GetBannerCacheFile (fileSystem, cacheDirectory, false).ToBase64Image();
                }
                else if(tvdbSeries.PosterBanners.Any())
                {
                    Artwork = tvdbSeries.PosterBanners.FirstOrDefault ().GetBannerCacheFile (fileSystem, cacheDirectory, false).ToBase64Image();
                }
                else if(tvdbSeries.SeriesBanners.Any())
                {
                    Artwork = tvdbSeries.SeriesBanners.FirstOrDefault ().GetBannerCacheFile (fileSystem, cacheDirectory, false).ToBase64Image();
                }
            }
 private void DumpSeriesEpisodes(TvdbSeries series)
 {
     this.log.InfoFormat("Dumping episode info for {0}", series.SeriesName);
     foreach (var episode in series.Episodes)
     {
         this.log.InfoFormat("S{0:00}E{1:00}-{2}", episode.SeasonNumber, episode.EpisodeNumber, episode.EpisodeName);
     }
 }
Beispiel #19
0
        private void UpdateSeries(TvdbSeries _series)
        {
            m_currentSeries = _series;
              FillSeriesDetails(_series);

              cmdForceUpdate.Enabled = true;
              if (_series.BannersLoaded)
              {
            cmdLoadBanners.Enabled = false;
            pnlFanartEnabled.Visible = false;

              }
              else
              {
            cmdLoadBanners.Enabled = true;
            pnlFanartEnabled.Visible = true;
              }

              if (_series.EpisodesLoaded)
              {
            cmdLoadFullSeriesInfo.Enabled = false;
            pnlEpisodeEnabled.Visible = false;
            FillFullSeriesDetails(_series);
              }
              else
              {
            cmdLoadFullSeriesInfo.Enabled = true;
            pnlEpisodeEnabled.Visible = true;
              }

              if (_series.TvdbActorsLoaded && _series.Actors.Count > 0)
              {
            cmdLoadActorInfo.Enabled = false;
            pnlActorsEnabled.Visible = false;
            lbAllActors.Items.Clear();
            bcActors.ClearControl();
            if (_series.TvdbActors.Count > 0)
            {
              List<TvdbBanner> bannerList = new List<TvdbBanner>();
              foreach (TvdbActor a in _series.TvdbActors)
              {
            lbAllActors.Items.Add(a.Name);
            bannerList.Add(a.ActorImage);
              }

              bcActors.BannerImages = bannerList;
              SetActorInfo(_series.TvdbActors[0]);
            }
              }
              else
              {
            bcActors.ClearControl();

            cmdLoadActorInfo.Enabled = true;
            pnlActorsEnabled.Visible = true;
              }
        }
Beispiel #20
0
 /// <summary>
 /// Write the series content to file
 /// </summary>
 /// <param name="_series">Series to store</param>
 /// <param name="_path">Path on disk</param>
 /// <returns>true if the file could be stored, false otherwise</returns>
 internal bool WriteSeriesContent(TvdbSeries _series, String _path)
 {
     String fileContent = CreateSeriesContent(_series);
       try
       {
     FileInfo info = new FileInfo(_path);
     if (!info.Directory.Exists) info.Directory.Create();
     File.WriteAllText(info.FullName, fileContent);
     return true;
       }
       catch (Exception)
       {
     return false;
       }
 }
Beispiel #21
0
        /// <summary>
        /// Create the series content
        /// </summary>
        /// <param name="_series">Series to store</param>
        /// <returns>xml content</returns>
        internal String CreateSeriesContent(TvdbSeries _series)
        {
            XElement xml = new XElement("Data");

              xml.Add(new XElement("Series",
                  new XElement("id", _series.Id),
                  new XElement("Actors", _series.ActorsString),
                  new XElement("Airs_DayOfWeek", _series.AirsDayOfWeek),
                  new XElement("Airs_Time", _series.AirsTime),
                  new XElement("ContentRating", _series.ContentRating),
                  new XElement("FirstAired", _series.FirstAired),
                  new XElement("Genre", _series.GenreString),
                  new XElement("IMDB_ID", _series.ImdbId),
                  new XElement("Language", _series.Language.Abbriviation),
                  new XElement("Network", _series.Network),
                  new XElement("Overview", _series.Overview),
                  new XElement("Rating", _series.Rating),
                  new XElement("Runtime", _series.Runtime),
                  new XElement("SeriesID", _series.TvDotComId),
                  new XElement("SeriesName", _series.SeriesName),
                  new XElement("Status", _series.Status),
                  new XElement("banner", _series.BannerPath != null ? _series.BannerPath : ""),
                  new XElement("fanart", _series.FanartPath != null ? _series.FanartPath : ""),
                  new XElement("lastupdated", Util.DotNetToUnix(_series.LastUpdated)),
                  new XElement("zap2it_id", _series.Zap2itId))
             );

              if (_series.Episodes != null && _series.EpisodesLoaded)
              {
            foreach (TvdbEpisode e in _series.Episodes)
            {
              xml.Add(new XElement("Episode",
                  new XElement("id", e.Id),
                  new XElement("Combined_episodenumber", e.CombinedEpisodeNumber),
                  new XElement("Combined_season", e.CombinedSeason),
                  new XElement("DVD_chapter", e.DvdChapter != -99 ? e.DvdChapter.ToString() : ""),
                  new XElement("DVD_discid", e.DvdDiscId != -99 ? e.DvdDiscId.ToString() : ""),
                  new XElement("DVD_episodenumber", e.DvdEpisodeNumber != -99 ? e.DvdEpisodeNumber.ToString() : ""),
                  new XElement("DVD_season", e.DvdSeason != -99 ? e.DvdSeason.ToString() : ""),
                  new XElement("Director", e.DirectorsString),
                  new XElement("EpisodeName", e.EpisodeName),
                  new XElement("EpisodeNumber", e.EpisodeNumber),
                  new XElement("FirstAired", e.FirstAired),
                  new XElement("GuestStars", e.GuestStarsString),
                  new XElement("IMDB_ID", e.ImdbId),
                  new XElement("Language", e.Language.Abbriviation),
                  new XElement("Overview", e.Overview),
                  new XElement("ProductionCode", e.ProductionCode),
                  new XElement("Rating", e.Rating.ToString()),
                  new XElement("SeasonNumber", e.SeasonNumber),
                  new XElement("Writer", e.WriterString),
                  new XElement("absolute_number", e.AbsoluteNumber),
                  new XElement("airsafter_season", e.AirsAfterSeason != -99 ? e.AirsAfterSeason.ToString() : ""),
                  new XElement("airsbefore_episode", e.AirsBeforeEpisode != -99 ? e.AirsBeforeEpisode.ToString() : ""),
                  new XElement("airsbefore_season", e.AirsBeforeSeason != -99 ? e.AirsBeforeSeason.ToString() : ""),
                  new XElement("filename", e.BannerPath),
                  new XElement("lastupdated", Util.DotNetToUnix(e.LastUpdated)),
                  new XElement("seasonid", e.SeasonId),
                  new XElement("seriesid", e.SeriesId))
                 );

            }
              }
              return xml.ToString();
        }
Beispiel #22
0
 /// <summary>
 /// Removes the series from the users list of favorites and returns the new list of
 /// favorites
 /// </summary>
 /// <param name="_series">series to remove from the favorites</param>
 /// <returns>new list with all favorites</returns>
 public List<int> RemoveSeriesFromFavorites(TvdbSeries _series)
 {
     return RemoveSeriesFromFavorites(_series.Id);
 }
Beispiel #23
0
        public override void CreateForSeries(Series series, TvdbSeries tvDbSeries)
        {
            //Create tvshow.nfo, fanart.jpg, folder.jpg and season##.tbn
            var episodeGuideUrl = GetEpisodeGuideUrl(series.SeriesId);

            _logger.Debug("Generating tvshow.nfo for: {0}", series.Title);
            var sb = new StringBuilder();
            var xws = new XmlWriterSettings();
            xws.OmitXmlDeclaration = true;
            xws.Indent = false;

            using (var xw = XmlWriter.Create(sb, xws))
            {
                var tvShow = new XElement("tvshow");
             
                tvShow.Add(new XElement("title", tvDbSeries.SeriesName));
                tvShow.Add(new XElement("rating", tvDbSeries.Rating));
                tvShow.Add(new XElement("plot", tvDbSeries.Overview));
                tvShow.Add(new XElement("episodeguide", new XElement("url", episodeGuideUrl)));
                tvShow.Add(new XElement("episodeguideurl", episodeGuideUrl));
                tvShow.Add(new XElement("mpaa", tvDbSeries.ContentRating));
                tvShow.Add(new XElement("id", tvDbSeries.Id));
                tvShow.Add(new XElement("genre", tvDbSeries.GenreString.Trim('|').Split('|')[0]));
                tvShow.Add(new XElement("premiered", tvDbSeries.FirstAired.ToString("yyyy-MM-dd")));
                tvShow.Add(new XElement("studio", tvDbSeries.Network));

                foreach(var actor in tvDbSeries.TvdbActors)
                {
                    tvShow.Add(new XElement("actor",
                                    new XElement("name", actor.Name),
                                    new XElement("role", actor.Role),
                                    new XElement("thumb", "http://www.thetvdb.com/banners/" + actor.ActorImage.BannerPath)
                            ));
                }

                var doc = new XDocument(tvShow);
                doc.Save(xw);

                _logger.Debug("Saving tvshow.nfo for {0}", series.Title);
                _diskProvider.WriteAllText(Path.Combine(series.Path, "tvshow.nfo"), doc.ToString());
            }

            if (!_diskProvider.FileExists(Path.Combine(series.Path, "fanart.jpg")))
            {
                _logger.Debug("Downloading fanart for: {0}", series.Title);
                _bannerProvider.Download(tvDbSeries.FanartPath, Path.Combine(series.Path, "fanart.jpg"));
            }

            if (!_diskProvider.FileExists(Path.Combine(series.Path, "folder.jpg")))
            {
                if(_configProvider.MetadataUseBanners)
                {
                    _logger.Debug("Downloading series banner for: {0}", series.Title);
                    _bannerProvider.Download(tvDbSeries.BannerPath, Path.Combine(series.Path, "folder.jpg"));

                    _logger.Debug("Downloading Season banners for {0}", series.Title);
                    DownloadSeasonThumbnails(series, tvDbSeries, TvdbSeasonBanner.Type.seasonwide);
                }

                else
                {
                    _logger.Debug("Downloading series thumbnail for: {0}", series.Title);
                    _bannerProvider.Download(tvDbSeries.PosterPath, Path.Combine(series.Path, "folder.jpg"));

                    _logger.Debug("Downloading Season posters for {0}", series.Title);
                    DownloadSeasonThumbnails(series, tvDbSeries, TvdbSeasonBanner.Type.season);
                }
            }
        }
Beispiel #24
0
        /// <summary>
        /// Uptdate the info of the current series with the updated one
        /// </summary>
        /// <param name="_series">TvdbSeries object</param>
        protected void UpdateSeriesInfo(TvdbSeries _series)
        {
            this.Actors = _series.Actors;
              this.AirsDayOfWeek = _series.AirsDayOfWeek;
              this.AirsTime = _series.AirsTime;
              this.BannerPath = _series.BannerPath;
              this.Banners = _series.Banners;
              this.ContentRating = _series.ContentRating;
              this.FanartPath = _series.FanartPath;
              this.FirstAired = _series.FirstAired;
              this.Genre = _series.Genre;
              this.Id = _series.Id;
              this.ImdbId = _series.ImdbId;
              this.Language = _series.Language;
              this.LastUpdated = _series.LastUpdated;
              this.Network = _series.Network;
              this.Overview = _series.Overview;
              this.Rating = _series.Rating;
              this.Runtime = _series.Runtime;
              this.SeriesName = _series.SeriesName;
              this.Status = _series.Status;
              this.TvDotComId = _series.TvDotComId;
              this.Zap2itId = _series.Zap2itId;

              if (_series.EpisodesLoaded)
              {//check if the old series has any images loaded already -> if yes, save them
            if (this.EpisodesLoaded)
            {
              foreach (TvdbEpisode oe in this.Episodes)
              {
            foreach (TvdbEpisode ne in _series.Episodes)
            {
              if (oe.SeasonNumber == ne.SeasonNumber &&
                  oe.EpisodeNumber == ne.EpisodeNumber)
              {
                if (oe.Banner != null && oe.Banner.IsLoaded)
                {
                  ne.Banner = oe.Banner;
                }
              }
            }
              }
            }

            this.Episodes.Clear();
            this.Episodes.AddRange(_series.Episodes);
              }

              if (_series.TvdbActorsLoaded)
              {//check if the old series has any images loaded already -> if yes, save them
            if (this.TvdbActorsLoaded)
            {
              foreach (TvdbActor oa in this.TvdbActors)
              {
            foreach (TvdbActor na in _series.TvdbActors)
            {
              if (oa.Id == na.Id)
              {
                if (oa.ActorImage != null && oa.ActorImage.IsLoaded)
                {
                  na.ActorImage = oa.ActorImage;
                }
              }
            }
              }
            }
            this.TvdbActors = _series.TvdbActors;
              }

              if (_series.BannersLoaded)
              {
            //check if the old series has any images loaded already -> if yes, save them
            if (this.BannersLoaded)
            {
              foreach (TvdbBanner ob in this.Banners)
              {
            foreach (TvdbBanner nb in _series.Banners)
            {
              if (ob.BannerPath.Equals(nb.BannerPath))//I have to check for the banner path since the Update file doesn't include IDs
              {
                if (ob.BannerImage != null && ob.IsLoaded)
                {
                  nb.BannerImage = ob.BannerImage;
                }

                if (ob.GetType() == typeof(TvdbFanartBanner))
                {
                  TvdbFanartBanner newFaBanner = (TvdbFanartBanner)nb;
                  TvdbFanartBanner oldFaBanner = (TvdbFanartBanner)ob;

                  if (oldFaBanner.ThumbImage != null && oldFaBanner.IsThumbLoaded)
                  {
                    newFaBanner.ThumbImage = oldFaBanner.ThumbImage;
                  }

                  if (oldFaBanner.ThumbImage != null && oldFaBanner.IsVignetteLoaded)
                  {
                    newFaBanner.VignetteImage = oldFaBanner.VignetteImage;
                  }
                }
              }
            }
              }
            }
            this.Banners = _series.Banners;
              }
        }
        /// <summary>
        /// Saves the series to cache
        /// </summary>
        /// <param name="_series"></param>
        public void SaveToCache(TvdbSeries _series)
        {
            if (_series != null)
              {
            String seriesRoot = m_rootFolder + Path.DirectorySeparatorChar + _series.Id;
            if (!Directory.Exists(seriesRoot)) Directory.CreateDirectory(seriesRoot);

            #region delete all loaded images (since they should be already cached)

            //delete banners
            foreach (TvdbBanner b in _series.Banners)
            {
              if (b.IsLoaded)
              {//banner is loaded
            b.UnloadBanner();
              }

              //remove the ref to the cacheprovider
              b.CacheProvider = null;

              if (b.GetType() == typeof(TvdbBannerWithThumb))
              {//thumb is loaded
            if (((TvdbBannerWithThumb)b).IsThumbLoaded)
            {
              ((TvdbBannerWithThumb)b).UnloadThumb();
            }
              }

              if (b.GetType() == typeof(TvdbFanartBanner))
              {//vignette is loaded
            if (((TvdbFanartBanner)b).IsVignetteLoaded)
            {
              ((TvdbFanartBanner)b).UnloadVignette();
            }
              }
            }

            //delete Actor Images
            if (_series.TvdbActorsLoaded)
            {
              foreach (TvdbActor a in _series.TvdbActors)
              {
            if (a.ActorImage.IsLoaded)
            {
              a.ActorImage.UnloadBanner();
            }
            //remove the ref to the cacheprovider
            a.ActorImage.CacheProvider = null;
              }
            }

            //delete episode images
            if (_series.EpisodesLoaded)
            {
              foreach (TvdbEpisode e in _series.Episodes)
              {
            if (e.Banner.IsLoaded)
            {
              e.Banner.UnloadBanner();
            }
            //remove the ref to the cacheprovider
            e.Banner.CacheProvider = null;
              }
            }
            #endregion
            //serialize series to hdd
            m_filestream = new FileStream(seriesRoot + Path.DirectorySeparatorChar + "series_" + _series.Id + ".ser", FileMode.Create);
            m_formatter.Serialize(m_filestream, _series);
            m_filestream.Close();

            //serialize series config to hdd
            SeriesConfiguration cfg = new SeriesConfiguration(_series.Id, _series.EpisodesLoaded,
                                                  _series.BannersLoaded, _series.TvdbActorsLoaded);
            m_filestream = new FileStream(seriesRoot + Path.DirectorySeparatorChar + "series_" + _series.Id + ".cfg", FileMode.Create);
            m_formatter.Serialize(m_filestream, cfg);
            m_filestream.Close();
              }
        }
Beispiel #26
0
 public virtual void CreateForSeries(Series series, TvdbSeries tvDbSeries)
 {
     foreach (var provider in _metadataProviders.Where(i => GetSettings(i.GetType()).Enable))
     {
         provider.CreateForSeries(series, tvDbSeries);
     }
 }
Beispiel #27
0
        /// <summary>
        /// Uptdate the info of the current series with the updated one
        /// </summary>
        /// <param name="_series"></param>
        public void UpdateSeriesInfo(TvdbSeries _series)
        {
            this.Actors        = _series.Actors;
            this.AirsDayOfWeek = _series.AirsDayOfWeek;
            this.AirsTime      = _series.AirsTime;
            this.BannerPath    = _series.BannerPath;
            this.Banners       = _series.Banners;
            this.ContentRating = _series.ContentRating;
            this.FanartPath    = _series.FanartPath;
            this.FirstAired    = _series.FirstAired;
            this.Genre         = _series.Genre;
            this.Id            = _series.Id;
            this.ImdbId        = _series.ImdbId;
            this.Language      = _series.Language;
            this.LastUpdated   = _series.LastUpdated;
            this.Network       = _series.Network;
            this.Overview      = _series.Overview;
            this.Rating        = _series.Rating;
            this.Runtime       = _series.Runtime;
            this.SeriesName    = _series.SeriesName;
            this.Status        = _series.Status;
            this.TvDotComId    = _series.TvDotComId;
            this.Zap2itId      = _series.Zap2itId;

            if (_series.EpisodesLoaded)
            {//check if the old series has any images loaded already -> if yes, save them
                if (this.EpisodesLoaded)
                {
                    foreach (TvdbEpisode oe in this.Episodes)
                    {
                        foreach (TvdbEpisode ne in _series.Episodes)
                        {
                            if (oe.SeasonNumber == ne.SeasonNumber &&
                                oe.EpisodeNumber == ne.EpisodeNumber)
                            {
                                if (oe.Banner != null && oe.Banner.IsLoaded)
                                {
                                    ne.Banner = oe.Banner;
                                }
                            }
                        }
                    }
                }

                this.Episodes = _series.Episodes;
            }

            if (_series.TvdbActorsLoaded)
            {//check if the old series has any images loaded already -> if yes, save them
                if (this.TvdbActorsLoaded)
                {
                    foreach (TvdbActor oa in this.TvdbActors)
                    {
                        foreach (TvdbActor na in _series.TvdbActors)
                        {
                            if (oa.Id == na.Id)
                            {
                                if (oa.ActorImage != null && oa.ActorImage.IsLoaded)
                                {
                                    na.ActorImage = oa.ActorImage;
                                }
                            }
                        }
                    }
                }
                this.TvdbActors = _series.TvdbActors;
            }

            if (_series.BannersLoaded)
            {
                //check if the old series has any images loaded already -> if yes, save them
                if (this.BannersLoaded)
                {
                    foreach (TvdbBanner ob in this.Banners)
                    {
                        foreach (TvdbBanner nb in _series.Banners)
                        {
                            if (ob.BannerPath.Equals(nb.BannerPath))//I have to check for the banner path since the Update file doesn't include IDs
                            {
                                if (ob.BannerImage != null && ob.IsLoaded)
                                {
                                    nb.BannerImage = ob.BannerImage;
                                }

                                if (ob.GetType() == typeof(TvdbFanartBanner))
                                {
                                    TvdbFanartBanner newFaBanner = (TvdbFanartBanner)nb;
                                    TvdbFanartBanner oldFaBanner = (TvdbFanartBanner)ob;

                                    if (oldFaBanner.ThumbImage != null && oldFaBanner.IsThumbLoaded)
                                    {
                                        newFaBanner.ThumbImage = oldFaBanner.ThumbImage;
                                    }

                                    if (oldFaBanner.ThumbImage != null && oldFaBanner.IsVignetteLoaded)
                                    {
                                        newFaBanner.VignetteImage = oldFaBanner.VignetteImage;
                                    }
                                }
                            }
                        }
                    }
                }
                this.Banners = _series.Banners;
            }
        }
Beispiel #28
0
        private void DownloadSeasonThumbnails(Series series, TvdbSeries tvDbSeries, TvdbSeasonBanner.Type bannerType)
        {
            var seasons = tvDbSeries.SeasonBanners.Where(s => s.BannerType == bannerType).Select(s => s.Season);

            foreach (var season in seasons)
            {
                var banner = tvDbSeries.SeasonBanners.FirstOrDefault(b => b.BannerType == bannerType && b.Season == season);
                _logger.Debug("Downloading banner for Season: {0} Series: {1}", season, series.Title);

                if (season == 0)
                {
                    if (!_diskProvider.FileExists(Path.Combine(series.Path, "season-specials.tbn")))
                    {
                        _bannerProvider.Download(banner.BannerPath,
                                                 Path.Combine(series.Path, "season-specials.tbn"));
                    }
                }

                else
                {
                    if (!_diskProvider.FileExists(Path.Combine(series.Path, String.Format("season{0:00}.tbn", season))))
                    {
                        _bannerProvider.Download(banner.BannerPath,
                                                 Path.Combine(series.Path, String.Format("season{0:00}.tbn", season)));
                    }
                }
            }
        }
 private TvdbSeries GetTvdbSeries(int seriesId, TvdbSeries tvdbSeries, bool forceRefresh)
 {
     try
     {
         tvdbSeries = this.tvDbService.GetSeries(seriesId, this.language, true, false, false);
         if (forceRefresh)
         {
             tvdbSeries = this.tvDbService.ForceReload(tvdbSeries, true, false, false);
         }
     }
     catch (TvdbException tvdbException)
     {
         this.log.Debug("TVDB Error getting series", tvdbException);
     }
     return tvdbSeries;
 }
Beispiel #30
0
        public override void CreateForEpisodeFile(EpisodeFile episodeFile, TvdbSeries tvDbSeries)
        {
            //Create filename.tbn and filename.nfo
            var episodes = _episodeProvider.GetEpisodesByFileId(episodeFile.EpisodeFileId);

            if (!episodes.Any())
            {
                _logger.Debug("No episodes where found for this episode file: {0}", episodeFile.EpisodeFileId);
                return;
            }

            var episodeFileThumbnail = tvDbSeries.Episodes.FirstOrDefault(
                                                       e =>
                                                       e.SeasonNumber == episodeFile.SeasonNumber &&
                                                       e.EpisodeNumber == episodes.First().EpisodeNumber);

            if (episodeFileThumbnail == null || String.IsNullOrWhiteSpace(episodeFileThumbnail.BannerPath))
            {
                _logger.Debug("No thumbnail is available for this episode");
                return;
            }

            if (!_diskProvider.FileExists(episodeFile.Path.Replace(Path.GetExtension(episodeFile.Path), ".tbn")))
            {
                _logger.Debug("Downloading episode thumbnail for: {0}", episodeFile.EpisodeFileId);
                _bannerProvider.Download(episodeFileThumbnail.BannerPath,
                                         episodeFile.Path.Replace(Path.GetExtension(episodeFile.Path), ".tbn"));
            }

            _logger.Debug("Generating filename.nfo for: {0}", episodeFile.EpisodeFileId);

            var xmlResult = String.Empty;
            foreach (var episode in episodes)
            {
                var sb = new StringBuilder();
                var xws = new XmlWriterSettings();
                xws.OmitXmlDeclaration = true;
                xws.Indent = false;

                using (var xw = XmlWriter.Create(sb, xws))
                {
                    var doc = new XDocument();
                    var tvdbEpisode = tvDbSeries.Episodes.FirstOrDefault(
                                                                e =>
                                                                e.Id == episode.TvDbEpisodeId);

                    if (tvdbEpisode == null)
                    {
                        _logger.Debug("Looking up by TvDbEpisodeId failed, trying to match via season/episode number combination");
                        tvdbEpisode = tvDbSeries.Episodes.FirstOrDefault(
                                                                            e =>
                                                                            e.SeasonNumber == episode.SeasonNumber &&
                                                                            e.EpisodeNumber == episode.EpisodeNumber);
                    }

                    if (tvdbEpisode == null)
                    {
                        _logger.Debug("Unable to find episode from TvDb - skipping");
                        return;
                    }

                    var details = new XElement("episodedetails");
                    details.Add(new XElement("title", tvdbEpisode.EpisodeName));
                    details.Add(new XElement("season", tvdbEpisode.SeasonNumber));
                    details.Add(new XElement("episode", tvdbEpisode.EpisodeNumber));
                    details.Add(new XElement("aired", tvdbEpisode.FirstAired.ToString("yyyy-MM-dd")));
                    details.Add(new XElement("plot", tvdbEpisode.Overview));
                    details.Add(new XElement("displayseason"));
                    details.Add(new XElement("displayepisode"));
                    details.Add(new XElement("thumb", "http://www.thetvdb.com/banners/" + tvdbEpisode.BannerPath));
                    details.Add(new XElement("watched", "false"));
                    details.Add(new XElement("credits", tvdbEpisode.Writer.FirstOrDefault()));
                    details.Add(new XElement("director", tvdbEpisode.Directors.FirstOrDefault()));
                    details.Add(new XElement("rating", tvdbEpisode.Rating));

                    foreach(var actor in tvdbEpisode.GuestStars)
                    {
                        if (!String.IsNullOrWhiteSpace(actor))
                            continue;

                        details.Add(new XElement("actor",
                                                new XElement("name", actor)
                                            ));
                    }

                    foreach(var actor in tvDbSeries.TvdbActors)
                    {
                        details.Add(new XElement("actor",
                                                new XElement("name", actor.Name),
                                                new XElement("role", actor.Role),
                                                new XElement("thumb", "http://www.thetvdb.com/banners/" + actor.ActorImage.BannerPath)
                                            ));
                    }

                    doc.Add(details);
                    doc.Save(xw);

                    xmlResult += doc.ToString();
                    xmlResult += Environment.NewLine;
                }       
            }
            var filename = episodeFile.Path.Replace(Path.GetExtension(episodeFile.Path), ".nfo");
            _logger.Debug("Saving episodedetails to: {0}", filename);
            _diskProvider.WriteAllText(filename, xmlResult.Trim(EnvironmentProvider.NewLineChars));
        }
Beispiel #31
0
        /// <summary>
        /// Update the series with the banner
        /// </summary>
        /// <param name="_series"></param>
        /// <param name="_banner"></param>
        /// <returns>true, if the banner was updated successfully, false otherwise</returns>
        private bool UpdateBanner(TvdbSeries _series, TvdbBanner _banner)
        {
            if (!_series.BannersLoaded)
              {//banners for this series havn't been loaded -> don't update banners
            return false;
              }

              foreach (TvdbBanner b in _series.Banners)
              {
            if (_banner.GetType() == b.GetType() && _banner.BannerPath.Equals(b.BannerPath))
            {//banner was found
              if (b.LastUpdated < _banner.LastUpdated)
              {//update time of local banner is longer ago than update time of current update
            b.LastUpdated = _banner.LastUpdated;
            if (_banner.GetType() == typeof(TvdbFanartBanner))
            {//update fanart specific content
              TvdbFanartBanner fanart = (TvdbFanartBanner)b;

              fanart.Resolution = ((TvdbFanartBanner)_banner).Resolution;
              if (fanart.IsThumbLoaded)
              {
                fanart.LoadThumb(null);
              }

              if (fanart.IsVignetteLoaded)
              {
                fanart.LoadVignette(null);
              }
            }

            if (b.IsLoaded)
            {//the banner was previously loaded and is updated -> discard the previous image
              b.LoadBanner(null);
              b.UnloadBanner(false);
            }

            Log.Info("Replacing banner " + _banner.Id);
            return true;
              }
              else
              {
            Log.Debug("Not replacing banner " + _banner.Id + " because it's not newer than current image");
            return false;
              }
            }
              }

              //banner not found -> add it to bannerlist
              Log.Info("Adding banner " + _banner.Id);
              _series.Banners.Add(_banner);
              return true;
        }