Example #1
0
        /// <summary>
        /// Saves the series to cache
        /// </summary>
        /// <param name="_series">The series to save</param>
        public void SaveToCache(TvdbSeries _series)
        {
            if (!Directory.Exists(m_rootFolder)) Directory.CreateDirectory(m_rootFolder);
              String root = m_rootFolder + "\\" + _series.Id;

              m_xmlWriter.WriteSeriesContent(_series, root + "\\all.xml");
              TvdbLanguage defaultLang = _series.Language;

              foreach(TvdbLanguage l in _series.GetAvailableLanguages())
              {
            if (l != defaultLang)
            {
              _series.SetLanguage(l);
              m_xmlWriter.WriteSeriesContent(_series, root + "\\" + l.Abbriviation + ".xml");
            }
              }

              if (_series.BannersLoaded)
              {
            m_xmlWriter.WriteSeriesBannerContent(_series.Banners, root + "\\banners.xml");
              }

              if (_series.TvdbActorsLoaded)
              {
            m_xmlWriter.WriteActorFile(_series.TvdbActors, root + "\\actors.xml");
              }

              //Save all loaded banners to file
              foreach (TvdbBanner b in _series.Banners)
              {
            FileInfo file = new FileInfo(root + "\\banner_" + b.Id + ".jpg");
            if (b.IsLoaded && !file.Exists)
            {//banner is cached
              if (!file.Directory.Exists) file.Directory.Create();
              b.Banner.Save(file.FullName);
            }
            if (b.GetType() == typeof(TvdbFanartBanner))
            {//banner is fanart -> has vignette and thumb
              file = new FileInfo(root + "\\bannerthumb_" + b.Id + ".jpg");
              if (((TvdbFanartBanner)b).IsThumbLoaded && !file.Exists)
              {
            if (!file.Directory.Exists) file.Directory.Create();
            ((TvdbFanartBanner)b).BannerThumb.Save(file.FullName);
              }

              file = new FileInfo(root + "\\bannervignette_" + b.Id + ".jpg");
              if (((TvdbFanartBanner)b).IsVignetteLoaded && !file.Exists)
              {
            if (!file.Directory.Exists) file.Directory.Create();
            ((TvdbFanartBanner)b).VignetteImage.Save(file.FullName);
              }

            }
              }

              if (_series.EpisodesLoaded)
              {
            foreach (TvdbEpisode e in _series.Episodes)
            {
              FileInfo file = new FileInfo(root + "\\EpisodeImages\\S" + e.SeasonNumber + "E" + e.EpisodeNumber + ".jpg");
              if (e.Banner != null && e.Banner.IsLoaded && !file.Exists)
              {
            if (!file.Directory.Exists) file.Directory.Create();
            e.Banner.Banner.Save(file.FullName);
              }
            }
              }

              if (_series.TvdbActorsLoaded)
              {
            foreach (TvdbActor a in _series.TvdbActors)
            {
              FileInfo file = new FileInfo(root + "\\actor_" + a.ActorImage.Id + ".jpg");
              if (a.ActorImage.IsLoaded && !file.Exists)
              {
            if (!file.Directory.Exists) file.Directory.Create();
            a.ActorImage.Banner.Save(file.FullName);
              }
            }
              }
        }
Example #2
0
        /// <summary>
        /// Load the give series from cache
        /// </summary>
        /// <param name="_seriesId">Id of the series to load</param>
        /// <returns>Series that has been loaded</returns>
        public TvdbSeries LoadSeriesFromCache(int _seriesId)
        {
            String seriesRoot = m_rootFolder + "\\" + _seriesId;
              //todo: handle languages
              TvdbSeries series = new TvdbSeries();

              #region load series in all available languages
              String[] seriesLanguages = Directory.GetFiles(seriesRoot, "*.xml");
              TvdbLanguage defaultLanguage = null; ;

              foreach (String l in seriesLanguages)
              {
            if (!l.EndsWith("actors.xml") && !l.EndsWith("banners.xml"))
            {
              String content = File.ReadAllText(l);
              List<TvdbSeriesFields> seriesList = m_xmlReader.ExtractSeriesFields(content);
              if (seriesList != null && seriesList.Count == 1)
              {
            TvdbSeriesFields s = seriesList[0];
            if (l.EndsWith("all.xml")) defaultLanguage = s.Language;

            //Load episodes
            List<TvdbEpisode> epList = m_xmlReader.ExtractEpisodes(content);
            if (epList != null && epList.Count > 0)
            {
              s.EpisodesLoaded = true;
              s.Episodes = epList;
            }
            series.AddLanguage(s);
              }
            }
              }

              if (defaultLanguage != null)
              {//change language of the series to the default language
            series.SetLanguage(defaultLanguage);
              }
              else
              {//no series info could be loaded
            return null;
              }

              Regex rex = new Regex("S(\\d+)E(\\d+)");
              if (Directory.Exists(seriesRoot + "\\EpisodeImages"))
              {
            String[] episodeFiles = Directory.GetFiles(seriesRoot + "\\EpisodeImages", "*.jpg");
            foreach (String epImageFile in episodeFiles)
            {
              try
              {
            Match match = rex.Match(epImageFile);
            int season = Int32.Parse(match.Groups[1].Value);
            int episode = Int32.Parse(match.Groups[2].Value);
            foreach (TvdbEpisode e in series.Episodes)
            {
              if (e.SeasonNumber == season && e.EpisodeNumber == episode)
              {
                e.Banner.LoadBanner(Image.FromFile(epImageFile));
                break;
              }
            }
              }
              catch (Exception)
              {
            Log.Warn("Couldn't load episode image file " + epImageFile);
              }
            }
              }

              #endregion

              #region Banner loading
              String bannerFile = seriesRoot + "\\banners.xml";
              //load cached banners
              if (File.Exists(bannerFile))
              {//banners have been already loaded
            List<TvdbBanner> bannerList = m_xmlReader.ExtractBanners(File.ReadAllText(bannerFile));

            String[] banners = Directory.GetFiles(seriesRoot, "banner*.jpg");
            foreach (String b in banners)
            {
              try
              {
            int bannerId = Int32.Parse(b.Remove(b.IndexOf(".")).Remove(0, b.LastIndexOf("_") + 1));
            foreach (TvdbBanner banner in bannerList)
            {
              if (banner.Id == bannerId)
              {
                if (b.Contains("thumb") && banner.GetType() == typeof(TvdbFanartBanner))
                {
                  ((TvdbFanartBanner)banner).LoadThumb(Image.FromFile(b));
                }
                else if (b.Contains("vignette") && banner.GetType() == typeof(TvdbFanartBanner))
                {
                  ((TvdbFanartBanner)banner).LoadVignette(Image.FromFile(b));
                }
                else
                {
                  banner.LoadBanner(Image.FromFile(b));
                }
              }
            }

              }
              catch (Exception)
              {
            Log.Warn("Couldn't load image file " + b);
              }
            }
            series.Banners = bannerList;
              }
              #endregion

              #region actor loading
              //load actor info
              String actorFile = seriesRoot + "\\actors.xml";
              if (File.Exists(actorFile))
              {
            List<TvdbActor> actorList = m_xmlReader.ExtractActors(File.ReadAllText(actorFile));

            String[] banners = Directory.GetFiles(seriesRoot, "actor_*.jpg");
            foreach (String b in banners)
            {
              try
              {
            int actorId = Int32.Parse(b.Remove(b.IndexOf(".")).Remove(0, b.LastIndexOf("_") + 1));
            foreach (TvdbActor actor in actorList)
            {
              if (actor.Id == actorId)
              {
                actor.ActorImage.LoadBanner(Image.FromFile(b));
              }
            }

              }
              catch (Exception)
              {
            Log.Warn("Couldn't load image file " + b);
              }
            }
            series.TvdbActors = actorList;
              }
              #endregion

              return series;
        }