/// <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="s"></param> /// <param name="ue"></param> private void UpdateEpisode(TvdbSeries s, TvdbEpisode ue) { List<TvdbEpisode> allEpList = new List<TvdbEpisode>(); allEpList.AddRange(s.Episodes); foreach (TvdbLanguage l in s.GetAvailableLanguages()) { if (s.SeriesTranslations[l].Episodes != null && s.SeriesTranslations[l].Language != s.Language) { allEpList.AddRange(s.SeriesTranslations[l].Episodes); } } //check all episodes if the updated episode is in it foreach (TvdbEpisode e in allEpList) { if (e.Id == ue.Id) { if (e.LastUpdated < ue.LastUpdated) { //download episode which has been updated TvdbEpisode newEpisode = m_downloader.DownloadEpisode(e.Id, e.Language); //update information of episode with new episodes informations if (newEpisode != null) { newEpisode.LastUpdated = ue.LastUpdated; e.UpdateEpisodeInfo(newEpisode); Log.Info("Updated Episode " + e.Id + " for series " + e.SeriesId); } } return; } } //episode hasn't been found foreach (TvdbLanguage l in s.GetAvailableLanguages()) { //hasn't been found -> add it TvdbEpisode ep = m_downloader.DownloadEpisode(ue.Id, l); AddEpisodeToCache(ep); Log.Info("Added Episode " + ep.Id + " for series " + ep.SeriesId); } }
/// <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); } } } }