/// <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); } } } }
/// <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; }