public static string GetFullThumbnailPath(this TvDB_ImageFanart fanart) { string fname = fanart.ThumbnailPath; fname = fanart.ThumbnailPath.Replace("/", @"\"); return(System.IO.Path.Combine(ImageUtils.GetTvDBImagePath(), fname)); }
public void DownloadAutomaticImages(XmlDocument doc, int seriesID, bool forceDownload) { List <object> banners = ParseBanners(seriesID, doc); int numFanartDownloaded = 0; int numPostersDownloaded = 0; int numBannersDownloaded = 0; foreach (object obj in banners) { if (obj.GetType() == typeof(TvDB_ImageFanart)) { TvDB_ImageFanart img = obj as TvDB_ImageFanart; if (ServerSettings.TvDB_AutoFanart && numFanartDownloaded < ServerSettings.TvDB_AutoFanartAmount) { bool fileExists = File.Exists(img.FullImagePath); if (!fileExists || (fileExists && forceDownload)) { CommandRequest_DownloadImage cmd = new CommandRequest_DownloadImage(img.TvDB_ImageFanartID, JMMImageType.TvDB_FanArt, forceDownload); cmd.Save(); numFanartDownloaded++; } } } if (obj.GetType() == typeof(TvDB_ImagePoster)) { TvDB_ImagePoster img = obj as TvDB_ImagePoster; if (ServerSettings.TvDB_AutoPosters && numPostersDownloaded < ServerSettings.TvDB_AutoPostersAmount) { bool fileExists = File.Exists(img.FullImagePath); if (!fileExists || (fileExists && forceDownload)) { CommandRequest_DownloadImage cmd = new CommandRequest_DownloadImage(img.TvDB_ImagePosterID, JMMImageType.TvDB_Cover, forceDownload); cmd.Save(); numPostersDownloaded++; } } } if (obj.GetType() == typeof(TvDB_ImageWideBanner)) { TvDB_ImageWideBanner img = obj as TvDB_ImageWideBanner; if (ServerSettings.TvDB_AutoWideBanners && numBannersDownloaded < ServerSettings.TvDB_AutoWideBannersAmount) { bool fileExists = File.Exists(img.FullImagePath); if (!fileExists || (fileExists && forceDownload)) { CommandRequest_DownloadImage cmd = new CommandRequest_DownloadImage(img.TvDB_ImageWideBannerID, JMMImageType.TvDB_Banner, forceDownload); cmd.Save(); numBannersDownloaded++; } } } } }
public static void Valid(this TvDB_ImageFanart fanart) { if (!File.Exists(fanart.GetFullImagePath())) { //clean leftovers if (File.Exists(fanart.GetFullImagePath())) { File.Delete(fanart.GetFullImagePath()); } } }
public TvDB_ImageFanart GetByTvDBID(int id) { using (var session = JMMService.SessionFactory.OpenSession()) { TvDB_ImageFanart cr = session .CreateCriteria(typeof(TvDB_ImageFanart)) .Add(Restrictions.Eq("Id", id)) .UniqueResult <TvDB_ImageFanart>(); return(cr); } }
public static string GetFullImagePath(this TvDB_ImageFanart fanart) { if (String.IsNullOrEmpty(fanart.BannerPath)) { return(string.Empty); } string fname = fanart.BannerPath; fname = fanart.BannerPath.Replace("/", $"{System.IO.Path.DirectorySeparatorChar}"); return(System.IO.Path.Combine(ImageUtils.GetTvDBImagePath(), fname)); }
public void Save(TvDB_ImageFanart obj) { using (var session = JMMService.SessionFactory.OpenSession()) { // populate the database using (var transaction = session.BeginTransaction()) { session.SaveOrUpdate(obj); transaction.Commit(); } } }
public static string GetFullImagePath(this TvDB_ImageFanart fanart) { if (String.IsNullOrEmpty(fanart.BannerPath)) { return(""); } string fname = fanart.BannerPath; fname = fanart.BannerPath.Replace("/", @"\"); return(System.IO.Path.Combine(ImageUtils.GetTvDBImagePath(), fname)); }
public static string GetFileURL(ImageDownloadRequest req, bool thumbNailOnly) { switch (req.ImageType) { case ImageEntityType.TvDB_Episode: TvDB_Episode ep = req.ImageData as TvDB_Episode; return(string.Format(Constants.URLS.TvDB_Images, ep.Filename)); case ImageEntityType.TvDB_FanArt: TvDB_ImageFanart fanart = req.ImageData as TvDB_ImageFanart; if (thumbNailOnly) { return(string.Format(Constants.URLS.TvDB_Images, fanart.ThumbnailPath)); } else { return(string.Format(Constants.URLS.TvDB_Images, fanart.BannerPath)); } case ImageEntityType.TvDB_Cover: TvDB_ImagePoster poster = req.ImageData as TvDB_ImagePoster; return(string.Format(Constants.URLS.TvDB_Images, poster.BannerPath)); case ImageEntityType.TvDB_Banner: TvDB_ImageWideBanner wideBanner = req.ImageData as TvDB_ImageWideBanner; return(string.Format(Constants.URLS.TvDB_Images, wideBanner.BannerPath)); case ImageEntityType.MovieDB_Poster: MovieDB_Poster moviePoster = req.ImageData as MovieDB_Poster; return(string.Format(Constants.URLS.MovieDB_Images, moviePoster.URL)); case ImageEntityType.MovieDB_FanArt: MovieDB_Fanart movieFanart = req.ImageData as MovieDB_Fanart; return(string.Format(Constants.URLS.MovieDB_Images, movieFanart.URL)); case ImageEntityType.AniDB_Cover: SVR_AniDB_Anime anime = req.ImageData as SVR_AniDB_Anime; return(string.Format(Constants.URLS.AniDB_Images, anime.Picname)); case ImageEntityType.AniDB_Character: AniDB_Character chr = req.ImageData as AniDB_Character; return(string.Format(Constants.URLS.AniDB_Images, chr.PicName)); case ImageEntityType.AniDB_Creator: AniDB_Seiyuu creator = req.ImageData as AniDB_Seiyuu; return(string.Format(Constants.URLS.AniDB_Images, creator.PicName)); default: return(string.Empty); } }
private string GetFileName(ImageDownloadRequest req, bool thumbNailOnly) { switch (req.ImageType) { case ImageEntityType.AniDB_Cover: SVR_AniDB_Anime anime = req.ImageData as SVR_AniDB_Anime; return(anime.PosterPath); case ImageEntityType.TvDB_Episode: TvDB_Episode ep = req.ImageData as TvDB_Episode; return(ep.GetFullImagePath()); case ImageEntityType.TvDB_FanArt: TvDB_ImageFanart fanart = req.ImageData as TvDB_ImageFanart; if (thumbNailOnly) { return(fanart.GetFullThumbnailPath()); } else { return(fanart.GetFullImagePath()); } case ImageEntityType.TvDB_Cover: TvDB_ImagePoster poster = req.ImageData as TvDB_ImagePoster; return(poster.GetFullImagePath()); case ImageEntityType.TvDB_Banner: TvDB_ImageWideBanner wideBanner = req.ImageData as TvDB_ImageWideBanner; return(wideBanner.GetFullImagePath()); case ImageEntityType.MovieDB_Poster: MovieDB_Poster moviePoster = req.ImageData as MovieDB_Poster; return(moviePoster.GetFullImagePath()); case ImageEntityType.MovieDB_FanArt: MovieDB_Fanart movieFanart = req.ImageData as MovieDB_Fanart; return(movieFanart.GetFullImagePath()); case ImageEntityType.AniDB_Character: AniDB_Character chr = req.ImageData as AniDB_Character; return(chr.GetPosterPath()); case ImageEntityType.AniDB_Creator: AniDB_Seiyuu creator = req.ImageData as AniDB_Seiyuu; return(creator.GetPosterPath()); default: return(string.Empty); } }
private void RemoveImageRecord() { switch (EntityTypeEnum) { case ImageEntityType.TvDB_FanArt: TvDB_ImageFanart fanart = Repo.Instance.TvDB_ImageFanart.GetByID(EntityID); if (fanart == null) { return; } Repo.Instance.TvDB_ImageFanart.Delete(fanart); break; case ImageEntityType.TvDB_Cover: TvDB_ImagePoster poster = Repo.Instance.TvDB_ImagePoster.GetByID(EntityID); if (poster == null) { return; } Repo.Instance.TvDB_ImagePoster.Delete(poster); break; case ImageEntityType.TvDB_Banner: TvDB_ImageWideBanner wideBanner = Repo.Instance.TvDB_ImageWideBanner.GetByID(EntityID); if (wideBanner == null) { return; } Repo.Instance.TvDB_ImageWideBanner.Delete(wideBanner); break; case ImageEntityType.MovieDB_Poster: MovieDB_Poster moviePoster = Repo.Instance.MovieDB_Poster.GetByID(EntityID); if (moviePoster == null) { return; } Repo.Instance.MovieDB_Poster.Delete(moviePoster); break; case ImageEntityType.MovieDB_FanArt: MovieDB_Fanart movieFanart = Repo.Instance.MovieDB_Fanart.GetByID(EntityID); if (movieFanart == null) { return; } Repo.Instance.MovieDB_Fanart.Delete(movieFanart); break; } }
public void Delete(int id) { using (var session = JMMService.SessionFactory.OpenSession()) { // populate the database using (var transaction = session.BeginTransaction()) { TvDB_ImageFanart cr = GetByID(id); if (cr != null) { session.Delete(cr); transaction.Commit(); } } } }
public static bool Populate(this TvDB_ImageFanart fanart, int seriesID, Image image) { try { fanart.SeriesID = seriesID; fanart.Id = image.Id; fanart.BannerPath = image.FileName; fanart.BannerType2 = image.Resolution; fanart.Colors = string.Empty; fanart.VignettePath = string.Empty; return(true); } catch (Exception ex) { logger.Error(ex, "Error in TvDB_ImageFanart.Init: " + ex); return(false); } }
public static bool Populate(this TvDB_ImageFanart fanart, int seriesID, XmlNode node) { try { fanart.SeriesID = seriesID; fanart.Id = int.Parse(node["id"].InnerText); fanart.BannerPath = node["BannerPath"].InnerText; fanart.BannerType = node["BannerType"].InnerText; fanart.BannerType2 = node["BannerType2"].InnerText; fanart.Colors = node["Colors"].InnerText; fanart.Language = node["Language"].InnerText; fanart.VignettePath = node["VignettePath"].InnerText; return(true); } catch (Exception ex) { logger.Error(ex, "Error in TvDB_ImageFanart.Init: " + ex); return(false); } }
public static bool Populate(this TvDB_ImageFanart fanart, int seriesID, TvDbSharper.Dto.Image image) { if (image.Id == null) { logger.Error("Error in TvDB_ImageFanart.Populate, image.Id is null, series: {0}", seriesID); return(false); } try { fanart.SeriesID = seriesID; fanart.Id = image.Id ?? 0; fanart.BannerPath = image.FileName; fanart.BannerType2 = image.Resolution; fanart.Colors = string.Empty; fanart.ThumbnailPath = image.Thumbnail; fanart.VignettePath = string.Empty; return(true); } catch (Exception ex) { logger.Error(ex, "Error in TvDB_ImageFanart.Init: " + ex.ToString()); return(false); } }
public System.IO.Stream GetImage(string ImageType, string ImageID) { AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); TvDB_ImagePosterRepository repPosters = new TvDB_ImagePosterRepository(); TvDB_EpisodeRepository repEpisodes = new TvDB_EpisodeRepository(); TvDB_ImageFanartRepository repFanart = new TvDB_ImageFanartRepository(); TvDB_ImageWideBannerRepository repWideBanners = new TvDB_ImageWideBannerRepository(); MovieDB_PosterRepository repMoviePosters = new MovieDB_PosterRepository(); MovieDB_FanartRepository repMovieFanart = new MovieDB_FanartRepository(); Trakt_ImageFanartRepository repTraktFanart = new Trakt_ImageFanartRepository(); Trakt_ImagePosterRepository repTraktPosters = new Trakt_ImagePosterRepository(); Trakt_EpisodeRepository repTraktEpisodes = new Trakt_EpisodeRepository(); Trakt_FriendRepository repTraktFriends = new Trakt_FriendRepository(); JMMImageType imageType = (JMMImageType)int.Parse(ImageType); switch (imageType) { case JMMImageType.AniDB_Cover: AniDB_Anime anime = repAnime.GetByAnimeID(int.Parse(ImageID)); if (anime == null) { return(null); } if (File.Exists(anime.PosterPath)) { FileStream fs = File.OpenRead(anime.PosterPath); WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return(fs); } else { logger.Trace("Could not find AniDB_Cover image: {0}", anime.PosterPath); return(BlankImage()); } case JMMImageType.AniDB_Character: AniDB_CharacterRepository repChar = new AniDB_CharacterRepository(); AniDB_Character chr = repChar.GetByID(int.Parse(ImageID)); if (chr == null) { return(null); } if (File.Exists(chr.PosterPath)) { FileStream fs = File.OpenRead(chr.PosterPath); WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return(fs); } else { logger.Trace("Could not find AniDB_Character image: {0}", chr.PosterPath); return(BlankImage()); } case JMMImageType.AniDB_Creator: AniDB_SeiyuuRepository repCreator = new AniDB_SeiyuuRepository(); AniDB_Seiyuu creator = repCreator.GetByID(int.Parse(ImageID)); if (creator == null) { return(null); } if (File.Exists(creator.PosterPath)) { FileStream fs = File.OpenRead(creator.PosterPath); WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return(fs); } else { logger.Trace("Could not find AniDB_Creator image: {0}", creator.PosterPath); return(BlankImage()); } case JMMImageType.TvDB_Cover: TvDB_ImagePoster poster = repPosters.GetByID(int.Parse(ImageID)); if (poster == null) { return(null); } if (File.Exists(poster.FullImagePath)) { FileStream fs = File.OpenRead(poster.FullImagePath); WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return(fs); } else { logger.Trace("Could not find TvDB_Cover image: {0}", poster.FullImagePath); return(BlankImage()); } case JMMImageType.TvDB_Banner: TvDB_ImageWideBanner wideBanner = repWideBanners.GetByID(int.Parse(ImageID)); if (wideBanner == null) { return(null); } if (File.Exists(wideBanner.FullImagePath)) { FileStream fs = File.OpenRead(wideBanner.FullImagePath); WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return(fs); } else { logger.Trace("Could not find TvDB_Banner image: {0}", wideBanner.FullImagePath); return(BlankImage()); } case JMMImageType.TvDB_Episode: TvDB_Episode ep = repEpisodes.GetByID(int.Parse(ImageID)); if (ep == null) { return(null); } if (File.Exists(ep.FullImagePath)) { FileStream fs = File.OpenRead(ep.FullImagePath); WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return(fs); } else { logger.Trace("Could not find TvDB_Episode image: {0}", ep.FullImagePath); return(BlankImage()); } case JMMImageType.TvDB_FanArt: TvDB_ImageFanart fanart = repFanart.GetByID(int.Parse(ImageID)); if (fanart == null) { return(null); } if (File.Exists(fanart.FullImagePath)) { FileStream fs = File.OpenRead(fanart.FullImagePath); WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return(fs); } else { logger.Trace("Could not find TvDB_FanArt image: {0}", fanart.FullImagePath); return(BlankImage()); } case JMMImageType.MovieDB_Poster: MovieDB_Poster mPoster = repMoviePosters.GetByID(int.Parse(ImageID)); if (mPoster == null) { return(null); } // now find only the original size mPoster = repMoviePosters.GetByOnlineID(mPoster.URL); if (mPoster == null) { return(null); } if (File.Exists(mPoster.FullImagePath)) { FileStream fs = File.OpenRead(mPoster.FullImagePath); WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return(fs); } else { logger.Trace("Could not find MovieDB_Poster image: {0}", mPoster.FullImagePath); return(BlankImage()); } case JMMImageType.MovieDB_FanArt: MovieDB_Fanart mFanart = repMovieFanart.GetByID(int.Parse(ImageID)); if (mFanart == null) { return(null); } mFanart = repMovieFanart.GetByOnlineID(mFanart.URL); if (mFanart == null) { return(null); } if (File.Exists(mFanart.FullImagePath)) { FileStream fs = File.OpenRead(mFanart.FullImagePath); WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return(fs); } else { logger.Trace("Could not find MovieDB_FanArt image: {0}", mFanart.FullImagePath); return(BlankImage()); } case JMMImageType.Trakt_Fanart: Trakt_ImageFanart tFanart = repTraktFanart.GetByID(int.Parse(ImageID)); if (tFanart == null) { return(null); } if (File.Exists(tFanart.FullImagePath)) { FileStream fs = File.OpenRead(tFanart.FullImagePath); WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return(fs); } else { logger.Trace("Could not find Trakt_Fanart image: {0}", tFanart.FullImagePath); return(BlankImage()); } case JMMImageType.Trakt_Poster: Trakt_ImagePoster tPoster = repTraktPosters.GetByID(int.Parse(ImageID)); if (tPoster == null) { return(null); } if (File.Exists(tPoster.FullImagePath)) { FileStream fs = File.OpenRead(tPoster.FullImagePath); WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return(fs); } else { logger.Trace("Could not find Trakt_Poster image: {0}", tPoster.FullImagePath); return(BlankImage()); } case JMMImageType.Trakt_Episode: case JMMImageType.Trakt_WatchedEpisode: Trakt_Episode tEpisode = repTraktEpisodes.GetByID(int.Parse(ImageID)); if (tEpisode == null) { return(null); } if (File.Exists(tEpisode.FullImagePath)) { FileStream fs = File.OpenRead(tEpisode.FullImagePath); WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return(fs); } else { logger.Trace("Could not find Trakt_Episode image: {0}", tEpisode.FullImagePath); return(BlankImage()); } default: return(BlankImage()); } }
public string GetImagePath(string ImageType, string ImageID, bool thumnbnailOnly) { JMMImageType imageType = (JMMImageType)int.Parse(ImageType); switch (imageType) { case JMMImageType.AniDB_Cover: AniDB_Anime anime = RepoFactory.AniDB_Anime.GetByAnimeID(int.Parse(ImageID)); if (anime == null) { return(null); } if (File.Exists(anime.PosterPath)) { return(anime.PosterPath); } else { logger.Trace("Could not find AniDB_Cover image: {0}", anime.PosterPath); return(""); } case JMMImageType.AniDB_Character: AniDB_Character chr = RepoFactory.AniDB_Character.GetByID(int.Parse(ImageID)); if (chr == null) { return(null); } if (File.Exists(chr.PosterPath)) { return(chr.PosterPath); } else { logger.Trace("Could not find AniDB_Character image: {0}", chr.PosterPath); return(""); } case JMMImageType.AniDB_Creator: AniDB_Seiyuu creator = RepoFactory.AniDB_Seiyuu.GetByID(int.Parse(ImageID)); if (creator == null) { return(""); } if (File.Exists(creator.PosterPath)) { return(creator.PosterPath); } else { logger.Trace("Could not find AniDB_Creator image: {0}", creator.PosterPath); return(""); } case JMMImageType.TvDB_Cover: TvDB_ImagePoster poster = RepoFactory.TvDB_ImagePoster.GetByID(int.Parse(ImageID)); if (poster == null) { return(null); } if (File.Exists(poster.FullImagePath)) { return(poster.FullImagePath); } else { logger.Trace("Could not find TvDB_Cover image: {0}", poster.FullImagePath); return(""); } case JMMImageType.TvDB_Banner: TvDB_ImageWideBanner wideBanner = RepoFactory.TvDB_ImageWideBanner.GetByID(int.Parse(ImageID)); if (wideBanner == null) { return(null); } if (File.Exists(wideBanner.FullImagePath)) { return(wideBanner.FullImagePath); } else { logger.Trace("Could not find TvDB_Banner image: {0}", wideBanner.FullImagePath); return(""); } case JMMImageType.TvDB_Episode: TvDB_Episode ep = RepoFactory.TvDB_Episode.GetByID(int.Parse(ImageID)); if (ep == null) { return(null); } if (File.Exists(ep.FullImagePath)) { return(ep.FullImagePath); } else { logger.Trace("Could not find TvDB_Episode image: {0}", ep.FullImagePath); return(""); } case JMMImageType.TvDB_FanArt: TvDB_ImageFanart fanart = RepoFactory.TvDB_ImageFanart.GetByID(int.Parse(ImageID)); if (fanart == null) { return(null); } if (thumnbnailOnly) { if (File.Exists(fanart.FullThumbnailPath)) { return(fanart.FullThumbnailPath); } else { logger.Trace("Could not find TvDB_FanArt image: {0}", fanart.FullThumbnailPath); return(""); } } else { if (File.Exists(fanart.FullImagePath)) { return(fanart.FullImagePath); } else { logger.Trace("Could not find TvDB_FanArt image: {0}", fanart.FullImagePath); return(""); } } case JMMImageType.MovieDB_Poster: MovieDB_Poster mPoster = RepoFactory.MovieDB_Poster.GetByID(int.Parse(ImageID)); if (mPoster == null) { return(null); } // now find only the original size mPoster = RepoFactory.MovieDB_Poster.GetByOnlineID(mPoster.URL); if (mPoster == null) { return(null); } if (File.Exists(mPoster.FullImagePath)) { return(mPoster.FullImagePath); } else { logger.Trace("Could not find MovieDB_Poster image: {0}", mPoster.FullImagePath); return(""); } case JMMImageType.MovieDB_FanArt: MovieDB_Fanart mFanart = RepoFactory.MovieDB_Fanart.GetByID(int.Parse(ImageID)); if (mFanart == null) { return(null); } mFanart = RepoFactory.MovieDB_Fanart.GetByOnlineID(mFanart.URL); if (mFanart == null) { return(null); } if (File.Exists(mFanart.FullImagePath)) { return(mFanart.FullImagePath); } else { logger.Trace("Could not find MovieDB_FanArt image: {0}", mFanart.FullImagePath); return(""); } case JMMImageType.Trakt_Fanart: Trakt_ImageFanart tFanart = RepoFactory.Trakt_ImageFanart.GetByID(int.Parse(ImageID)); if (tFanart == null) { return(null); } if (File.Exists(tFanart.FullImagePath)) { return(tFanart.FullImagePath); } else { logger.Trace("Could not find Trakt_Fanart image: {0}", tFanart.FullImagePath); return(""); } case JMMImageType.Trakt_Poster: Trakt_ImagePoster tPoster = RepoFactory.Trakt_ImagePoster.GetByID(int.Parse(ImageID)); if (tPoster == null) { return(null); } if (File.Exists(tPoster.FullImagePath)) { return(tPoster.FullImagePath); } else { logger.Trace("Could not find Trakt_Poster image: {0}", tPoster.FullImagePath); return(""); } case JMMImageType.Trakt_Episode: case JMMImageType.Trakt_WatchedEpisode: Trakt_Episode tEpisode = RepoFactory.Trakt_Episode.GetByID(int.Parse(ImageID)); if (tEpisode == null) { return(null); } if (File.Exists(tEpisode.FullImagePath)) { return(tEpisode.FullImagePath); } else { logger.Trace("Could not find Trakt_Episode image: {0}", tEpisode.FullImagePath); return(""); } default: return(""); } }
private string GetRandomImagePath(int type) { ImageEntityType imageType = (ImageEntityType)type; string path; switch (imageType) { // 1 case ImageEntityType.AniDB_Cover: SVR_AniDB_Anime anime = RepoFactory.AniDB_Anime.GetAll() .Where(a => a?.PosterPath != null && !a.GetAllTags().Contains("18 restricted")) .GetRandomElement(); if (anime == null) { return(null); } path = anime.PosterPath; if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find AniDB_Cover image: {0}", anime.PosterPath); } break; // 2 case ImageEntityType.AniDB_Character: var chr = RepoFactory.AniDB_Anime.GetAll() .Where(a => a != null && !a.GetAllTags().Contains("18 restricted")) .SelectMany(a => a.GetAnimeCharacters()).Select(a => a.GetCharacter()).Where(a => a != null) .GetRandomElement(); if (chr == null) { return(null); } path = chr.GetPosterPath(); if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find AniDB_Character image: {0}", chr.GetPosterPath()); } break; // 3 -- this will likely be slow case ImageEntityType.AniDB_Creator: var creator = RepoFactory.AniDB_Anime.GetAll() .Where(a => a != null && !a.GetAllTags().Contains("18 restricted")) .SelectMany(a => a.GetAnimeCharacters()) .SelectMany(a => RepoFactory.AniDB_Character_Seiyuu.GetByCharID(a.CharID)) .Select(a => RepoFactory.AniDB_Seiyuu.GetBySeiyuuID(a.SeiyuuID)).Where(a => a != null) .GetRandomElement(); if (creator == null) { return(null); } path = creator.GetPosterPath(); if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find AniDB_Creator image: {0}", creator.GetPosterPath()); } break; // 4 case ImageEntityType.TvDB_Banner: // TvDB doesn't allow H content, so we get to skip the check! TvDB_ImageWideBanner wideBanner = RepoFactory.TvDB_ImageWideBanner.GetAll().GetRandomElement(); if (wideBanner == null) { return(null); } path = wideBanner.GetFullImagePath(); if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find TvDB_Banner image: {0}", wideBanner.GetFullImagePath()); } break; // 5 case ImageEntityType.TvDB_Cover: // TvDB doesn't allow H content, so we get to skip the check! TvDB_ImagePoster poster = RepoFactory.TvDB_ImagePoster.GetAll().GetRandomElement(); if (poster == null) { return(null); } path = poster.GetFullImagePath(); if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find TvDB_Cover image: {0}", poster.GetFullImagePath()); } break; // 6 case ImageEntityType.TvDB_Episode: // TvDB doesn't allow H content, so we get to skip the check! TvDB_Episode ep = RepoFactory.TvDB_Episode.GetAll().GetRandomElement(); if (ep == null) { return(null); } path = ep.GetFullImagePath(); if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find TvDB_Episode image: {0}", ep.GetFullImagePath()); } break; // 7 case ImageEntityType.TvDB_FanArt: // TvDB doesn't allow H content, so we get to skip the check! TvDB_ImageFanart fanart = RepoFactory.TvDB_ImageFanart.GetAll().GetRandomElement(); if (fanart == null) { return(null); } path = fanart.GetFullImagePath(); if (System.IO.File.Exists(path)) { return(path); } path = string.Empty; logger.Trace("Could not find TvDB_FanArt image: {0}", fanart.GetFullImagePath()); break; // 8 case ImageEntityType.MovieDB_FanArt: MovieDB_Fanart mFanart = RepoFactory.MovieDB_Fanart.GetAll().GetRandomElement(); if (mFanart == null) { return(null); } path = mFanart.GetFullImagePath(); if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find MovieDB_FanArt image: {0}", mFanart.GetFullImagePath()); } break; // 9 case ImageEntityType.MovieDB_Poster: MovieDB_Poster mPoster = RepoFactory.MovieDB_Poster.GetAll().GetRandomElement(); if (mPoster == null) { return(null); } path = mPoster.GetFullImagePath(); if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find MovieDB_Poster image: {0}", mPoster.GetFullImagePath()); } break; case ImageEntityType.Character: var character = RepoFactory.AniDB_Anime.GetAll() .Where(a => a != null && !a.GetAllTags().Contains("18 restricted")) .SelectMany(a => RepoFactory.CrossRef_Anime_Staff.GetByAnimeID(a.AnimeID)) .Where(a => a.RoleType == (int)StaffRoleType.Seiyuu && a.RoleID.HasValue) .Select(a => RepoFactory.AnimeCharacter.GetByID(a.RoleID.Value)).GetRandomElement(); if (character == null) { return(null); } path = ImageUtils.GetBaseAniDBCharacterImagesPath() + Path.DirectorySeparatorChar + character.ImagePath; if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find Character image: {0}", ImageUtils.GetBaseAniDBCharacterImagesPath() + Path.DirectorySeparatorChar + character.ImagePath); } break; case ImageEntityType.Staff: var staff = RepoFactory.AniDB_Anime.GetAll() .Where(a => a != null && !a.GetAllTags().Contains("18 restricted")) .SelectMany(a => RepoFactory.CrossRef_Anime_Staff.GetByAnimeID(a.AnimeID)) .Select(a => RepoFactory.AnimeStaff.GetByID(a.StaffID)).GetRandomElement(); if (staff == null) { return(null); } path = ImageUtils.GetBaseAniDBCreatorImagesPath() + Path.DirectorySeparatorChar + staff.ImagePath; if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find Staff image: {0}", ImageUtils.GetBaseAniDBCreatorImagesPath() + Path.DirectorySeparatorChar + staff.ImagePath); } break; default: path = string.Empty; break; } return(path); }
public static async Task <List <TvDB_ImageFanart> > GetFanartOnlineAsync(int seriesID) { List <int> validIDs = new List <int>(); List <TvDB_ImageFanart> tvImages = new List <TvDB_ImageFanart>(); try { Image[] images = await GetSeriesImagesAsync(seriesID, KeyType.Fanart); foreach (Image image in images) { int id = image.Id ?? 0; if (id == 0) { continue; } TvDB_ImageFanart img = RepoFactory.TvDB_ImageFanart.GetByTvDBID(id); if (img == null) { img = new TvDB_ImageFanart() { Enabled = 1 }; } img.Populate(seriesID, image); img.Language = client.AcceptedLanguage; RepoFactory.TvDB_ImageFanart.Save(img); tvImages.Add(img); validIDs.Add(id); } // delete any images from the database which are no longer valid foreach (TvDB_ImageFanart img in RepoFactory.TvDB_ImageFanart.GetBySeriesID(seriesID)) { if (!validIDs.Contains(img.Id)) { RepoFactory.TvDB_ImageFanart.Delete(img.TvDB_ImageFanartID); } } } catch (TvDbSharper.Errors.TvDbServerException exception) { if (exception.StatusCode == HttpStatusCode.Unauthorized) { client.Authentication.Token = null; await _checkAuthorizationAsync(); if (client.Authentication.Token != null) { return(await GetFanartOnlineAsync(seriesID)); } // suppress 404 and move on } else if (exception.StatusCode == HttpStatusCode.NotFound) { return(tvImages); } logger.Error(exception, "TvDB returned an error code: " + exception.StatusCode + "\n " + exception.Message); } catch (Exception ex) { logger.Error(ex, "Error in TVDBApiHelper.GetSeriesBannersOnlineAsync: " + ex.ToString()); } return(tvImages); }
/// <summary> /// Internal function that return valid image file path on server that exist /// </summary> /// <param name="id">image id</param> /// <param name="type">image type</param> /// <param name="thumb">thumb mode</param> /// <returns>string</returns> internal string GetImagePath(int type, int id, bool thumb) { ImageEntityType imageType = (ImageEntityType)type; string path; switch (imageType) { // 1 case ImageEntityType.AniDB_Cover: SVR_AniDB_Anime anime = RepoFactory.AniDB_Anime.GetByAnimeID(id); if (anime == null) { return(null); } path = anime.PosterPath; if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find AniDB_Cover image: {0}", anime.PosterPath); } break; // 2 case ImageEntityType.AniDB_Character: AniDB_Character chr = RepoFactory.AniDB_Character.GetByCharID(id); if (chr == null) { return(null); } path = chr.GetPosterPath(); if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find AniDB_Character image: {0}", chr.GetPosterPath()); } break; // 3 case ImageEntityType.AniDB_Creator: AniDB_Seiyuu creator = RepoFactory.AniDB_Seiyuu.GetBySeiyuuID(id); if (creator == null) { return(null); } path = creator.GetPosterPath(); if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find AniDB_Creator image: {0}", creator.GetPosterPath()); } break; // 4 case ImageEntityType.TvDB_Banner: TvDB_ImageWideBanner wideBanner = RepoFactory.TvDB_ImageWideBanner.GetByID(id); if (wideBanner == null) { return(null); } path = wideBanner.GetFullImagePath(); if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find TvDB_Banner image: {0}", wideBanner.GetFullImagePath()); } break; // 5 case ImageEntityType.TvDB_Cover: TvDB_ImagePoster poster = RepoFactory.TvDB_ImagePoster.GetByID(id); if (poster == null) { return(null); } path = poster.GetFullImagePath(); if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find TvDB_Cover image: {0}", poster.GetFullImagePath()); } break; // 6 case ImageEntityType.TvDB_Episode: TvDB_Episode ep = RepoFactory.TvDB_Episode.GetByID(id); if (ep == null) { return(null); } path = ep.GetFullImagePath(); if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find TvDB_Episode image: {0}", ep.GetFullImagePath()); } break; // 7 case ImageEntityType.TvDB_FanArt: TvDB_ImageFanart fanart = RepoFactory.TvDB_ImageFanart.GetByID(id); if (fanart == null) { return(null); } if (thumb) { //ratio path = fanart.GetFullThumbnailPath(); if (System.IO.File.Exists(path)) { return(path); } path = string.Empty; logger.Trace("Could not find TvDB_FanArt image: {0}", fanart.GetFullThumbnailPath()); } else { path = fanart.GetFullImagePath(); if (System.IO.File.Exists(path)) { return(path); } path = string.Empty; logger.Trace("Could not find TvDB_FanArt image: {0}", fanart.GetFullImagePath()); } break; // 8 case ImageEntityType.MovieDB_FanArt: MovieDB_Fanart mFanart = RepoFactory.MovieDB_Fanart.GetByID(id); if (mFanart == null) { return(null); } mFanart = RepoFactory.MovieDB_Fanart.GetByOnlineID(mFanart.URL); if (mFanart == null) { return(null); } path = mFanart.GetFullImagePath(); if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find MovieDB_FanArt image: {0}", mFanart.GetFullImagePath()); } break; // 9 case ImageEntityType.MovieDB_Poster: MovieDB_Poster mPoster = RepoFactory.MovieDB_Poster.GetByID(id); if (mPoster == null) { return(null); } mPoster = RepoFactory.MovieDB_Poster.GetByOnlineID(mPoster.URL); if (mPoster == null) { return(null); } path = mPoster.GetFullImagePath(); if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find MovieDB_Poster image: {0}", mPoster.GetFullImagePath()); } break; case ImageEntityType.Character: AnimeCharacter character = RepoFactory.AnimeCharacter.GetByID(id); if (character == null) { return(null); } path = ImageUtils.GetBaseAniDBCharacterImagesPath() + Path.DirectorySeparatorChar + character.ImagePath; if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find Character image: {0}", ImageUtils.GetBaseAniDBCharacterImagesPath() + Path.DirectorySeparatorChar + character.ImagePath); } break; case ImageEntityType.Staff: var staff = RepoFactory.AnimeStaff.GetByID(id); if (staff == null) { return(null); } path = ImageUtils.GetBaseAniDBCreatorImagesPath() + Path.DirectorySeparatorChar + staff.ImagePath; if (System.IO.File.Exists(path)) { return(path); } else { path = string.Empty; logger.Trace("Could not find Staff image: {0}", ImageUtils.GetBaseAniDBCreatorImagesPath() + Path.DirectorySeparatorChar + staff.ImagePath); } break; default: path = string.Empty; break; } return(path); }
public static async Task <List <TvDB_ImageFanart> > GetFanartOnlineAsync(int seriesID) { List <int> validIDs = new List <int>(); List <TvDB_ImageFanart> tvImages = new List <TvDB_ImageFanart>(); try { Image[] images = await GetSeriesImagesAsync(seriesID, KeyType.Fanart); int count = 0; foreach (Image image in images) { int id = image.Id ?? 0; if (id == 0) { continue; } if (count >= ServerSettings.Instance.TvDB.AutoFanartAmount) { break; } TvDB_ImageFanart img = RepoFactory.TvDB_ImageFanart.GetByTvDBID(id) ?? new TvDB_ImageFanart { Enabled = 1 }; img.Populate(seriesID, image); img.Language = client.AcceptedLanguage; RepoFactory.TvDB_ImageFanart.Save(img); tvImages.Add(img); validIDs.Add(id); count++; } // delete any images from the database which are no longer valid foreach (TvDB_ImageFanart img in RepoFactory.TvDB_ImageFanart.GetBySeriesID(seriesID)) { if (!validIDs.Contains(img.Id)) { RepoFactory.TvDB_ImageFanart.Delete(img); } } } catch (TvDbServerException exception) { if (exception.StatusCode == (int)HttpStatusCode.Unauthorized) { client.Authentication.Token = null; await CheckAuthorizationAsync(); if (!string.IsNullOrEmpty(client.Authentication.Token)) { return(await GetFanartOnlineAsync(seriesID)); } // suppress 404 and move on } else if (exception.StatusCode == (int)HttpStatusCode.NotFound) { return(tvImages); } logger.Error(exception, $"TvDB returned an error code: {exception.StatusCode}\n {exception.Message}"); } catch (Exception ex) { logger.Error(ex, $"Error in TVDBApiHelper.GetSeriesFanartOnlineAsync: {ex}"); } return(tvImages); }
public static string GetImagePath(ImageEntityType type, int id) { string path; switch (type) { // 1 case ImageEntityType.AniDB_Cover: SVR_AniDB_Anime anime = Repo.Instance.AniDB_Anime.GetByID(id); if (anime == null) { return(null); } path = anime.PosterPath; if (File.Exists(path)) { return(path); } else { path = string.Empty; } break; // 4 case ImageEntityType.TvDB_Banner: TvDB_ImageWideBanner wideBanner = Repo.Instance.TvDB_ImageWideBanner.GetByID(id); if (wideBanner == null) { return(null); } path = wideBanner.GetFullImagePath(); if (File.Exists(path)) { return(path); } else { path = string.Empty; } break; // 5 case ImageEntityType.TvDB_Cover: TvDB_ImagePoster poster = Repo.Instance.TvDB_ImagePoster.GetByID(id); if (poster == null) { return(null); } path = poster.GetFullImagePath(); if (File.Exists(path)) { return(path); } else { path = string.Empty; } break; // 6 case ImageEntityType.TvDB_Episode: TvDB_Episode ep = Repo.Instance.TvDB_Episode.GetByID(id); if (ep == null) { return(null); } path = ep.GetFullImagePath(); if (File.Exists(path)) { return(path); } else { path = string.Empty; } break; // 7 case ImageEntityType.TvDB_FanArt: TvDB_ImageFanart fanart = Repo.Instance.TvDB_ImageFanart.GetByID(id); if (fanart == null) { return(null); } path = fanart.GetFullImagePath(); if (File.Exists(path)) { return(path); } path = string.Empty; break; // 8 case ImageEntityType.MovieDB_FanArt: MovieDB_Fanart mFanart = Repo.Instance.MovieDB_Fanart.GetByID(id); if (mFanart == null) { return(null); } mFanart = Repo.Instance.MovieDB_Fanart.GetByOnlineID(mFanart.URL); if (mFanart == null) { return(null); } path = mFanart.GetFullImagePath(); if (File.Exists(path)) { return(path); } else { path = string.Empty; } break; // 9 case ImageEntityType.MovieDB_Poster: MovieDB_Poster mPoster = Repo.Instance.MovieDB_Poster.GetByID(id); if (mPoster == null) { return(null); } mPoster = Repo.Instance.MovieDB_Poster.GetByOnlineID(mPoster.URL); if (mPoster == null) { return(null); } path = mPoster.GetFullImagePath(); if (File.Exists(path)) { return(path); } else { path = string.Empty; } break; case ImageEntityType.Character: AnimeCharacter character = Repo.Instance.AnimeCharacter.GetByID(id); if (character == null) { return(null); } path = ImageUtils.GetBaseAniDBCharacterImagesPath() + Path.DirectorySeparatorChar + character.ImagePath; if (File.Exists(path)) { return(path); } else { path = string.Empty; } break; case ImageEntityType.Staff: var staff = Repo.Instance.AnimeStaff.GetByID(id); if (staff == null) { return(null); } path = ImageUtils.GetBaseAniDBCreatorImagesPath() + Path.DirectorySeparatorChar + staff.ImagePath; if (File.Exists(path)) { return(path); } else { path = string.Empty; } break; default: path = string.Empty; break; } return(path); }
public string GetImagePath(int imageId, int imageType, bool?thumnbnailOnly) { ImageEntityType it = (ImageEntityType)imageType; switch (it) { case ImageEntityType.AniDB_Cover: SVR_AniDB_Anime anime = Repo.Instance.AniDB_Anime.GetByID(imageId); if (anime == null) { return(null); } if (File.Exists(anime.PosterPath)) { return(anime.PosterPath); } else { logger.Trace("Could not find AniDB_Cover image: {0}", anime.PosterPath); return(string.Empty); } case ImageEntityType.AniDB_Character: AniDB_Character chr = Repo.Instance.AniDB_Character.GetByID(imageId); if (chr == null) { return(null); } if (File.Exists(chr.GetPosterPath())) { return(chr.GetPosterPath()); } else { logger.Trace("Could not find AniDB_Character image: {0}", chr.GetPosterPath()); return(string.Empty); } case ImageEntityType.AniDB_Creator: AniDB_Seiyuu creator = Repo.Instance.AniDB_Seiyuu.GetByID(imageId); if (creator == null) { return(string.Empty); } if (File.Exists(creator.GetPosterPath())) { return(creator.GetPosterPath()); } else { logger.Trace("Could not find AniDB_Creator image: {0}", creator.GetPosterPath()); return(string.Empty); } case ImageEntityType.TvDB_Cover: TvDB_ImagePoster poster = Repo.Instance.TvDB_ImagePoster.GetByID(imageId); if (poster == null) { return(null); } if (File.Exists(poster.GetFullImagePath())) { return(poster.GetFullImagePath()); } else { logger.Trace("Could not find TvDB_Cover image: {0}", poster.GetFullImagePath()); return(string.Empty); } case ImageEntityType.TvDB_Banner: TvDB_ImageWideBanner wideBanner = Repo.Instance.TvDB_ImageWideBanner.GetByID(imageId); if (wideBanner == null) { return(null); } if (File.Exists(wideBanner.GetFullImagePath())) { return(wideBanner.GetFullImagePath()); } else { logger.Trace("Could not find TvDB_Banner image: {0}", wideBanner.GetFullImagePath()); return(string.Empty); } case ImageEntityType.TvDB_Episode: TvDB_Episode ep = Repo.Instance.TvDB_Episode.GetByID(imageId); if (ep == null) { return(null); } if (File.Exists(ep.GetFullImagePath())) { return(ep.GetFullImagePath()); } else { logger.Trace("Could not find TvDB_Episode image: {0}", ep.GetFullImagePath()); return(string.Empty); } case ImageEntityType.TvDB_FanArt: TvDB_ImageFanart fanart = Repo.Instance.TvDB_ImageFanart.GetByID(imageId); if (fanart == null) { return(null); } if (thumnbnailOnly.HasValue && thumnbnailOnly.Value) { if (File.Exists(fanart.GetFullThumbnailPath())) { return(fanart.GetFullThumbnailPath()); } logger.Trace("Could not find TvDB_FanArt image: {0}", fanart.GetFullThumbnailPath()); return(string.Empty); } else { if (File.Exists(fanart.GetFullImagePath())) { return(fanart.GetFullImagePath()); } logger.Trace("Could not find TvDB_FanArt image: {0}", fanart.GetFullImagePath()); return(string.Empty); } case ImageEntityType.MovieDB_Poster: MovieDB_Poster mPoster = Repo.Instance.MovieDB_Poster.GetByID(imageId); if (mPoster == null) { return(null); } // now find only the original size mPoster = Repo.Instance.MovieDB_Poster.GetByOnlineID(mPoster.URL); if (mPoster == null) { return(null); } if (File.Exists(mPoster.GetFullImagePath())) { return(mPoster.GetFullImagePath()); } else { logger.Trace("Could not find MovieDB_Poster image: {0}", mPoster.GetFullImagePath()); return(string.Empty); } case ImageEntityType.MovieDB_FanArt: MovieDB_Fanart mFanart = Repo.Instance.MovieDB_Fanart.GetByID(imageId); if (mFanart == null) { return(null); } mFanart = Repo.Instance.MovieDB_Fanart.GetByOnlineID(mFanart.URL); if (mFanart == null) { return(null); } if (File.Exists(mFanart.GetFullImagePath())) { return(mFanart.GetFullImagePath()); } else { logger.Trace("Could not find MovieDB_FanArt image: {0}", mFanart.GetFullImagePath()); return(string.Empty); } default: return(string.Empty); } }
public override void ProcessCommand() { logger.Info("Processing CommandRequest_DownloadImage: {0}", EntityID); string downloadURL = string.Empty; try { ImageDownloadRequest req = null; switch (EntityTypeEnum) { case ImageEntityType.TvDB_Episode: TvDB_Episode ep = Repo.Instance.TvDB_Episode.GetByID(EntityID); if (string.IsNullOrEmpty(ep?.Filename)) { logger.Warn($"TvDB Episode image failed to download: Can't get episode with ID: {EntityID}"); return; } req = new ImageDownloadRequest(EntityTypeEnum, ep, ForceDownload); break; case ImageEntityType.TvDB_FanArt: TvDB_ImageFanart fanart = Repo.Instance.TvDB_ImageFanart.GetByID(EntityID); if (string.IsNullOrEmpty(fanart?.BannerPath)) { logger.Warn($"TvDB Fanart image failed to download: Can't find valid fanart with ID: {EntityID}"); RemoveImageRecord(); return; } req = new ImageDownloadRequest(EntityTypeEnum, fanart, ForceDownload); break; case ImageEntityType.TvDB_Cover: TvDB_ImagePoster poster = Repo.Instance.TvDB_ImagePoster.GetByID(EntityID); if (string.IsNullOrEmpty(poster?.BannerPath)) { logger.Warn($"TvDB Poster image failed to download: Can't find valid poster with ID: {EntityID}"); RemoveImageRecord(); return; } req = new ImageDownloadRequest(EntityTypeEnum, poster, ForceDownload); break; case ImageEntityType.TvDB_Banner: TvDB_ImageWideBanner wideBanner = Repo.Instance.TvDB_ImageWideBanner.GetByID(EntityID); if (string.IsNullOrEmpty(wideBanner?.BannerPath)) { logger.Warn($"TvDB Banner image failed to download: Can't find valid banner with ID: {EntityID}"); RemoveImageRecord(); return; } req = new ImageDownloadRequest(EntityTypeEnum, wideBanner, ForceDownload); break; case ImageEntityType.MovieDB_Poster: MovieDB_Poster moviePoster = Repo.Instance.MovieDB_Poster.GetByID(EntityID); if (string.IsNullOrEmpty(moviePoster?.URL)) { logger.Warn($"MovieDB Poster image failed to download: Can't find valid poster with ID: {EntityID}"); RemoveImageRecord(); return; } req = new ImageDownloadRequest(EntityTypeEnum, moviePoster, ForceDownload); break; case ImageEntityType.MovieDB_FanArt: MovieDB_Fanart movieFanart = Repo.Instance.MovieDB_Fanart.GetByID(EntityID); if (string.IsNullOrEmpty(movieFanart?.URL)) { logger.Warn($"MovieDB Fanart image failed to download: Can't find valid fanart with ID: {EntityID}"); return; } req = new ImageDownloadRequest(EntityTypeEnum, movieFanart, ForceDownload); break; case ImageEntityType.AniDB_Cover: SVR_AniDB_Anime anime = Repo.Instance.AniDB_Anime.GetByAnimeID(EntityID); if (anime == null) { logger.Warn($"AniDB poster image failed to download: Can't find AniDB_Anime with ID: {EntityID}"); return; } AniDbImageRateLimiter.Instance.EnsureRate(); req = new ImageDownloadRequest(EntityTypeEnum, anime, ForceDownload); break; case ImageEntityType.AniDB_Character: AniDB_Character chr = Repo.Instance.AniDB_Character.GetByCharID(EntityID); if (chr == null) { logger.Warn($"AniDB Character image failed to download: Can't find AniDB Character with ID: {EntityID}"); return; } AniDbImageRateLimiter.Instance.EnsureRate(); req = new ImageDownloadRequest(EntityTypeEnum, chr, ForceDownload); break; case ImageEntityType.AniDB_Creator: AniDB_Seiyuu creator = Repo.Instance.AniDB_Seiyuu.GetBySeiyuuID(EntityID); if (creator == null) { logger.Warn($"AniDB Seiyuu image failed to download: Can't find Seiyuu with ID: {EntityID}"); return; } AniDbImageRateLimiter.Instance.EnsureRate(); req = new ImageDownloadRequest(EntityTypeEnum, creator, ForceDownload); break; } if (req == null) { logger.Warn($"Image failed to download: No implementation found for {EntityTypeEnum}"); return; } List <string> fileNames = new List <string>(); List <string> downloadURLs = new List <string>(); string fileNameTemp = GetFileName(req, false); string downloadURLTemp = GetFileURL(req, false); fileNames.Add(fileNameTemp); downloadURLs.Add(downloadURLTemp); if (req.ImageType == ImageEntityType.TvDB_FanArt) { fileNameTemp = GetFileName(req, true); downloadURLTemp = GetFileURL(req, true); fileNames.Add(fileNameTemp); downloadURLs.Add(downloadURLTemp); } for (int i = 0; i < fileNames.Count; i++) { try { string fileName = fileNames[i]; downloadURL = downloadURLs[i]; bool downloadImage = true; bool fileExists = File.Exists(fileName); bool imageValid = fileExists && Misc.IsImageValid(fileName); if (imageValid && !req.ForceDownload) { downloadImage = false; } if (!downloadImage) { continue; } string tempName = Path.Combine(ImageUtils.GetImagesTempFolder(), Path.GetFileName(fileName)); try { if (fileExists) { File.Delete(fileName); } } catch (Exception ex) { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Instance.Culture); logger.Warn(Resources.Command_DeleteError, fileName, ex.Message); return; } // If this has any issues, it will throw an exception, so the catch below will handle it RecursivelyRetryDownload(downloadURL, ref tempName, 0, 5); // move the file to it's final location // check that the final folder exists string fullPath = Path.GetDirectoryName(fileName); if (!Directory.Exists(fullPath)) { Directory.CreateDirectory(fullPath); } File.Move(tempName, fileName); logger.Info($"Image downloaded: {fileName} from {downloadURL}"); } catch (WebException e) { logger.Warn("Error processing CommandRequest_DownloadImage: {0} ({1}) - {2}", downloadURL, EntityID, e.Message); // Remove the record if the image doesn't exist or can't download RemoveImageRecord(); } } } catch (Exception ex) { logger.Warn("Error processing CommandRequest_DownloadImage: {0} ({1}) - {2}", downloadURL, EntityID, ex.Message); } }
private void RemoveImageAndQueueRedownload(ImageEntityType EntityTypeEnum, int EntityID, object Entity) { CommandRequest_DownloadImage cmd; switch (EntityTypeEnum) { case ImageEntityType.TvDB_Episode: TvDB_Episode episode = Entity as TvDB_Episode; if (episode == null) { return; } try { if (File.Exists(episode.GetFullImagePath())) { File.Delete(episode.GetFullImagePath()); } } catch (Exception e) { logger.Error($"Unable to delete {episode.GetFullImagePath()} - {e.Message}"); } cmd = new CommandRequest_DownloadImage(EntityID, ImageEntityType.TvDB_Episode, true); break; case ImageEntityType.TvDB_FanArt: TvDB_ImageFanart fanart = Entity as TvDB_ImageFanart; if (fanart == null) { return; } try { if (File.Exists(fanart.GetFullImagePath())) { File.Delete(fanart.GetFullImagePath()); } } catch (Exception e) { logger.Error($"Unable to delete {fanart.GetFullImagePath()} - {e.Message}"); } cmd = new CommandRequest_DownloadImage(EntityID, ImageEntityType.TvDB_FanArt, true); break; case ImageEntityType.TvDB_Cover: TvDB_ImagePoster poster = Entity as TvDB_ImagePoster; if (poster == null) { return; } try { if (File.Exists(poster.GetFullImagePath())) { File.Delete(poster.GetFullImagePath()); } } catch (Exception e) { logger.Error($"Unable to delete {poster.GetFullImagePath()} - {e.Message}"); } cmd = new CommandRequest_DownloadImage(EntityID, ImageEntityType.TvDB_Cover, true); break; case ImageEntityType.TvDB_Banner: TvDB_ImageWideBanner wideBanner = Entity as TvDB_ImageWideBanner; if (wideBanner == null) { return; } try { if (File.Exists(wideBanner.GetFullImagePath())) { File.Delete(wideBanner.GetFullImagePath()); } } catch (Exception e) { logger.Error($"Unable to delete {wideBanner.GetFullImagePath()} - {e.Message}"); } cmd = new CommandRequest_DownloadImage(EntityID, ImageEntityType.TvDB_Banner, true); break; case ImageEntityType.MovieDB_Poster: MovieDB_Poster moviePoster = Entity as MovieDB_Poster; if (moviePoster == null) { return; } try { if (File.Exists(moviePoster.GetFullImagePath())) { File.Delete(moviePoster.GetFullImagePath()); } } catch (Exception e) { logger.Error($"Unable to delete {moviePoster.GetFullImagePath()} - {e.Message}"); } cmd = new CommandRequest_DownloadImage(EntityID, ImageEntityType.MovieDB_Poster, true); break; case ImageEntityType.MovieDB_FanArt: MovieDB_Fanart movieFanart = Entity as MovieDB_Fanart; if (movieFanart == null) { return; } try { if (File.Exists(movieFanart.GetFullImagePath())) { File.Delete(movieFanart.GetFullImagePath()); } } catch (Exception e) { logger.Error($"Unable to delete {movieFanart.GetFullImagePath()} - {e.Message}"); } cmd = new CommandRequest_DownloadImage(EntityID, ImageEntityType.MovieDB_FanArt, true); break; case ImageEntityType.AniDB_Cover: string coverpath = (Entity as SVR_AniDB_Anime)?.PosterPath; if (string.IsNullOrEmpty(coverpath)) { return; } try { if (File.Exists(coverpath)) { File.Delete(coverpath); } } catch (Exception e) { logger.Error($"Unable to delete {coverpath} - {e.Message}"); } cmd = new CommandRequest_DownloadImage(EntityID, ImageEntityType.AniDB_Cover, true); break; case ImageEntityType.AniDB_Creator: string creatorpath = (Entity as AniDB_Seiyuu)?.GetPosterPath(); if (string.IsNullOrEmpty(creatorpath)) { return; } try { if (File.Exists(creatorpath)) { File.Delete(creatorpath); } } catch (Exception e) { logger.Error($"Unable to delete {creatorpath} - {e.Message}"); } cmd = new CommandRequest_DownloadImage(EntityID, ImageEntityType.AniDB_Creator, true); break; case ImageEntityType.AniDB_Character: string characterpath = (Entity as AniDB_Character)?.GetPosterPath(); if (string.IsNullOrEmpty(characterpath)) { return; } try { if (File.Exists(characterpath)) { File.Delete(characterpath); } } catch (Exception e) { logger.Error($"Unable to delete {characterpath} - {e.Message}"); } cmd = new CommandRequest_DownloadImage(EntityID, ImageEntityType.AniDB_Character, true); break; default: return; } cmd.Save(); }
public byte[] GetImage(string entityID, int entityType, bool thumnbnailOnly) { AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); TvDB_ImagePosterRepository repPosters = new TvDB_ImagePosterRepository(); TvDB_EpisodeRepository repEpisodes = new TvDB_EpisodeRepository(); TvDB_ImageFanartRepository repFanart = new TvDB_ImageFanartRepository(); TvDB_ImageWideBannerRepository repWideBanners = new TvDB_ImageWideBannerRepository(); MovieDB_PosterRepository repMoviePosters = new MovieDB_PosterRepository(); MovieDB_FanartRepository repMovieFanart = new MovieDB_FanartRepository(); Trakt_ImageFanartRepository repTraktFanart = new Trakt_ImageFanartRepository(); Trakt_ImagePosterRepository repTraktPosters = new Trakt_ImagePosterRepository(); Trakt_EpisodeRepository repTraktEpisodes = new Trakt_EpisodeRepository(); Trakt_FriendRepository repTraktFriends = new Trakt_FriendRepository(); JMMImageType imageType = (JMMImageType)entityType; switch (imageType) { case JMMImageType.AniDB_Cover: AniDB_Anime anime = repAnime.GetByAnimeID(int.Parse(entityID)); if (anime == null) { return(null); } if (File.Exists(anime.PosterPath)) { return(File.ReadAllBytes(anime.PosterPath)); } else { logger.Trace("Could not find AniDB_Cover image: {0}", anime.PosterPath); return(null); } case JMMImageType.AniDB_Character: AniDB_CharacterRepository repChar = new AniDB_CharacterRepository(); AniDB_Character chr = repChar.GetByID(int.Parse(entityID)); if (chr == null) { return(null); } if (File.Exists(chr.PosterPath)) { return(File.ReadAllBytes(chr.PosterPath)); } else { logger.Trace("Could not find AniDB_Character image: {0}", chr.PosterPath); return(null); } case JMMImageType.AniDB_Creator: AniDB_SeiyuuRepository repCreator = new AniDB_SeiyuuRepository(); AniDB_Seiyuu creator = repCreator.GetByID(int.Parse(entityID)); if (creator == null) { return(null); } if (File.Exists(creator.PosterPath)) { return(File.ReadAllBytes(creator.PosterPath)); } else { logger.Trace("Could not find AniDB_Creator image: {0}", creator.PosterPath); return(null); } case JMMImageType.TvDB_Cover: TvDB_ImagePoster poster = repPosters.GetByID(int.Parse(entityID)); if (poster == null) { return(null); } if (File.Exists(poster.FullImagePath)) { return(File.ReadAllBytes(poster.FullImagePath)); } else { logger.Trace("Could not find TvDB_Cover image: {0}", poster.FullImagePath); return(null); } case JMMImageType.TvDB_Banner: TvDB_ImageWideBanner wideBanner = repWideBanners.GetByID(int.Parse(entityID)); if (wideBanner == null) { return(null); } if (File.Exists(wideBanner.FullImagePath)) { return(File.ReadAllBytes(wideBanner.FullImagePath)); } else { logger.Trace("Could not find TvDB_Banner image: {0}", wideBanner.FullImagePath); return(null); } case JMMImageType.TvDB_Episode: TvDB_Episode ep = repEpisodes.GetByID(int.Parse(entityID)); if (ep == null) { return(null); } if (File.Exists(ep.FullImagePath)) { return(File.ReadAllBytes(ep.FullImagePath)); } else { logger.Trace("Could not find TvDB_Episode image: {0}", ep.FullImagePath); return(null); } case JMMImageType.TvDB_FanArt: TvDB_ImageFanart fanart = repFanart.GetByID(int.Parse(entityID)); if (fanart == null) { return(null); } if (thumnbnailOnly) { if (File.Exists(fanart.FullThumbnailPath)) { return(File.ReadAllBytes(fanart.FullThumbnailPath)); } else { logger.Trace("Could not find TvDB_FanArt image: {0}", fanart.FullThumbnailPath); return(null); } } else { if (File.Exists(fanart.FullImagePath)) { return(File.ReadAllBytes(fanart.FullImagePath)); } else { logger.Trace("Could not find TvDB_FanArt image: {0}", fanart.FullImagePath); return(null); } } case JMMImageType.MovieDB_Poster: MovieDB_Poster mPoster = repMoviePosters.GetByID(int.Parse(entityID)); if (mPoster == null) { return(null); } // now find only the original size mPoster = repMoviePosters.GetByOnlineID(mPoster.URL); if (mPoster == null) { return(null); } if (File.Exists(mPoster.FullImagePath)) { return(File.ReadAllBytes(mPoster.FullImagePath)); } else { logger.Trace("Could not find MovieDB_Poster image: {0}", mPoster.FullImagePath); return(null); } case JMMImageType.MovieDB_FanArt: MovieDB_Fanart mFanart = repMovieFanart.GetByID(int.Parse(entityID)); if (mFanart == null) { return(null); } mFanart = repMovieFanart.GetByOnlineID(mFanart.URL); if (mFanart == null) { return(null); } if (File.Exists(mFanart.FullImagePath)) { return(File.ReadAllBytes(mFanart.FullImagePath)); } else { logger.Trace("Could not find MovieDB_FanArt image: {0}", mFanart.FullImagePath); return(null); } case JMMImageType.Trakt_Fanart: Trakt_ImageFanart tFanart = repTraktFanart.GetByID(int.Parse(entityID)); if (tFanart == null) { return(null); } if (File.Exists(tFanart.FullImagePath)) { return(File.ReadAllBytes(tFanart.FullImagePath)); } else { logger.Trace("Could not find Trakt_Fanart image: {0}", tFanart.FullImagePath); return(null); } case JMMImageType.Trakt_Friend: Trakt_Friend tFriend = repTraktFriends.GetByID(int.Parse(entityID)); if (tFriend == null) { return(null); } if (File.Exists(tFriend.FullImagePath)) { return(File.ReadAllBytes(tFriend.FullImagePath)); } else { logger.Trace("Could not find Trakt_Friend image: {0}", tFriend.FullImagePath); return(null); } case JMMImageType.Trakt_ActivityScrobble: case JMMImageType.Trakt_ShoutUser: Trakt_Friend tFriendScrobble = repTraktFriends.GetByID(int.Parse(entityID)); if (tFriendScrobble == null) { return(null); } if (File.Exists(tFriendScrobble.FullImagePath)) { return(File.ReadAllBytes(tFriendScrobble.FullImagePath)); } else { logger.Trace("Could not find Trakt_ActivityScrobble image: {0}", tFriendScrobble.FullImagePath); return(null); } case JMMImageType.Trakt_Poster: Trakt_ImagePoster tPoster = repTraktPosters.GetByID(int.Parse(entityID)); if (tPoster == null) { return(null); } if (File.Exists(tPoster.FullImagePath)) { return(File.ReadAllBytes(tPoster.FullImagePath)); } else { logger.Trace("Could not find Trakt_Poster image: {0}", tPoster.FullImagePath); return(null); } case JMMImageType.Trakt_Episode: case JMMImageType.Trakt_WatchedEpisode: Trakt_Episode tEpisode = repTraktEpisodes.GetByID(int.Parse(entityID)); if (tEpisode == null) { return(null); } if (File.Exists(tEpisode.FullImagePath)) { return(File.ReadAllBytes(tEpisode.FullImagePath)); } else { logger.Trace("Could not find Trakt_Episode image: {0}", tEpisode.FullImagePath); return(null); } default: return(null); } }
private string GetFileName(ImageDownloadRequest req, bool thumbNailOnly) { switch (req.ImageType) { case JMMImageType.AniDB_Cover: AniDB_Anime anime = req.ImageData as AniDB_Anime; return(anime.PosterPath); case JMMImageType.TvDB_Episode: TvDB_Episode ep = req.ImageData as TvDB_Episode; return(ep.FullImagePath); case JMMImageType.TvDB_FanArt: TvDB_ImageFanart fanart = req.ImageData as TvDB_ImageFanart; if (thumbNailOnly) { return(fanart.FullThumbnailPath); } else { return(fanart.FullImagePath); } case JMMImageType.TvDB_Cover: TvDB_ImagePoster poster = req.ImageData as TvDB_ImagePoster; return(poster.FullImagePath); case JMMImageType.TvDB_Banner: TvDB_ImageWideBanner wideBanner = req.ImageData as TvDB_ImageWideBanner; return(wideBanner.FullImagePath); case JMMImageType.MovieDB_Poster: MovieDB_Poster moviePoster = req.ImageData as MovieDB_Poster; return(moviePoster.FullImagePath); case JMMImageType.MovieDB_FanArt: MovieDB_Fanart movieFanart = req.ImageData as MovieDB_Fanart; return(movieFanart.FullImagePath); case JMMImageType.Trakt_Poster: Trakt_ImagePoster traktPoster = req.ImageData as Trakt_ImagePoster; return(traktPoster.FullImagePath); case JMMImageType.Trakt_Fanart: Trakt_ImageFanart traktFanart = req.ImageData as Trakt_ImageFanart; return(traktFanart.FullImagePath); case JMMImageType.Trakt_Friend: Trakt_Friend traktFriend = req.ImageData as Trakt_Friend; return(traktFriend.FullImagePath); case JMMImageType.Trakt_Episode: Trakt_Episode traktEp = req.ImageData as Trakt_Episode; return(traktEp.FullImagePath); case JMMImageType.AniDB_Character: AniDB_Character chr = req.ImageData as AniDB_Character; return(chr.PosterPath); case JMMImageType.AniDB_Creator: AniDB_Seiyuu creator = req.ImageData as AniDB_Seiyuu; return(creator.PosterPath); default: return(""); } }
private List <object> ParseBanners(int seriesID, XmlDocument xmlDoc) { List <object> banners = new List <object>(); try { XmlNodeList bannerItems = xmlDoc["Banners"].GetElementsByTagName("Banner"); //BaseConfig.MyAnimeLog.Write("Found {0} banner nodes", bannerItems.Count); if (bannerItems.Count <= 0) { return(banners); } // banner types // series = wide banner // fanart = fanart // poster = filmstrip poster/dvd cover List <int> validFanartIDs = new List <int>(); List <int> validPosterIDs = new List <int>(); List <int> validBannerIDs = new List <int>(); foreach (XmlNode node in bannerItems) { JMMImageType imageType = JMMImageType.TvDB_Cover; string bannerType = node["BannerType"].InnerText.Trim().ToUpper(); string bannerType2 = node["BannerType2"].InnerText.Trim().ToUpper(); if (bannerType == "FANART") { imageType = JMMImageType.TvDB_FanArt; } else if (bannerType == "POSTER") { imageType = JMMImageType.TvDB_Cover; } else if (bannerType == "SEASON") { if (bannerType2 == "SEASON") { imageType = JMMImageType.TvDB_Cover; } else { imageType = JMMImageType.TvDB_Banner; } } else if (bannerType == "SERIES") { if (bannerType2 == "SEASONWIDE" || bannerType2 == "GRAPHICAL" || bannerType2 == "TEXT" || bannerType2 == "BLANK") { imageType = JMMImageType.TvDB_Banner; } else { imageType = JMMImageType.TvDB_Cover; } } if (imageType == JMMImageType.TvDB_FanArt) { int id = int.Parse(node["id"].InnerText); TvDB_ImageFanart img = RepoFactory.TvDB_ImageFanart.GetByTvDBID(id); if (img == null) { img = new TvDB_ImageFanart(); img.Enabled = 1; } img.Populate(seriesID, node); RepoFactory.TvDB_ImageFanart.Save(img); banners.Add(img); validFanartIDs.Add(id); } if (imageType == JMMImageType.TvDB_Banner) { int id = int.Parse(node["id"].InnerText); TvDB_ImageWideBanner img = RepoFactory.TvDB_ImageWideBanner.GetByTvDBID(id); if (img == null) { img = new TvDB_ImageWideBanner(); img.Enabled = 1; } img.Populate(seriesID, node, TvDBImageNodeType.Series); RepoFactory.TvDB_ImageWideBanner.Save(img); banners.Add(img); validBannerIDs.Add(id); } if (imageType == JMMImageType.TvDB_Cover) { int id = int.Parse(node["id"].InnerText); TvDB_ImagePoster img = RepoFactory.TvDB_ImagePoster.GetByTvDBID(id); if (img == null) { img = new TvDB_ImagePoster(); img.Enabled = 1; } TvDBImageNodeType nodeType = TvDBImageNodeType.Series; if (bannerType == "SEASON") { nodeType = TvDBImageNodeType.Season; } img.Populate(seriesID, node, nodeType); RepoFactory.TvDB_ImagePoster.Save(img); banners.Add(img); validPosterIDs.Add(id); } } // delete any banners from the database which are no longer valid foreach (TvDB_ImageFanart img in RepoFactory.TvDB_ImageFanart.GetBySeriesID(seriesID)) { if (!validFanartIDs.Contains(img.Id)) { RepoFactory.TvDB_ImageFanart.Delete(img.TvDB_ImageFanartID); } } foreach (TvDB_ImagePoster img in RepoFactory.TvDB_ImagePoster.GetBySeriesID(seriesID)) { if (!validPosterIDs.Contains(img.Id)) { RepoFactory.TvDB_ImagePoster.Delete(img.TvDB_ImagePosterID); } } foreach (TvDB_ImageWideBanner img in RepoFactory.TvDB_ImageWideBanner.GetBySeriesID(seriesID)) { if (!validBannerIDs.Contains(img.Id)) { RepoFactory.TvDB_ImageWideBanner.Delete(img.TvDB_ImageWideBannerID); } } } catch (Exception ex) { logger.Error(ex, "Error in ParseBanners: " + ex.ToString()); } return(banners); }
public void DownloadAutomaticImages(XmlDocument doc, int seriesID, bool forceDownload) { List <object> banners = ParseBanners(seriesID, doc); int numFanartDownloaded = 0; int numPostersDownloaded = 0; int numBannersDownloaded = 0; // find out how many images we already have locally using (var session = DatabaseFactory.SessionFactory.OpenSession()) { ISessionWrapper sessionWrapper = session.Wrap(); foreach (TvDB_ImageFanart fanart in RepoFactory.TvDB_ImageFanart.GetBySeriesID(sessionWrapper, seriesID)) { if (!string.IsNullOrEmpty(fanart.FullImagePath) && File.Exists(fanart.FullImagePath)) { numFanartDownloaded++; } } foreach (TvDB_ImagePoster poster in RepoFactory.TvDB_ImagePoster.GetBySeriesID(sessionWrapper, seriesID)) { if (!string.IsNullOrEmpty(poster.FullImagePath) && File.Exists(poster.FullImagePath)) { numPostersDownloaded++; } } foreach (TvDB_ImageWideBanner banner in RepoFactory.TvDB_ImageWideBanner.GetBySeriesID(session, seriesID)) { if (!string.IsNullOrEmpty(banner.FullImagePath) && File.Exists(banner.FullImagePath)) { numBannersDownloaded++; } } } foreach (object obj in banners) { if (obj.GetType() == typeof(TvDB_ImageFanart)) { TvDB_ImageFanart img = obj as TvDB_ImageFanart; if (ServerSettings.TvDB_AutoFanart && numFanartDownloaded < ServerSettings.TvDB_AutoFanartAmount) { bool fileExists = File.Exists(img.FullImagePath); if (!fileExists || (fileExists && forceDownload)) { CommandRequest_DownloadImage cmd = new CommandRequest_DownloadImage(img.TvDB_ImageFanartID, JMMImageType.TvDB_FanArt, forceDownload); cmd.Save(); numFanartDownloaded++; } } else { //The TvDB_AutoFanartAmount point to download less images than its available // we should clean those image that we didn't download because those dont exists in local repo // first we check if file was downloaded if (!File.Exists(img.FullImagePath)) { RepoFactory.TvDB_ImageFanart.Delete(img.TvDB_ImageFanartID); } } } if (obj.GetType() == typeof(TvDB_ImagePoster)) { TvDB_ImagePoster img = obj as TvDB_ImagePoster; if (ServerSettings.TvDB_AutoPosters && numPostersDownloaded < ServerSettings.TvDB_AutoPostersAmount) { bool fileExists = File.Exists(img.FullImagePath); if (!fileExists || (fileExists && forceDownload)) { CommandRequest_DownloadImage cmd = new CommandRequest_DownloadImage(img.TvDB_ImagePosterID, JMMImageType.TvDB_Cover, forceDownload); cmd.Save(); numPostersDownloaded++; } } else { //The TvDB_AutoPostersAmount point to download less images than its available // we should clean those image that we didn't download because those dont exists in local repo // first we check if file was downloaded if (!File.Exists(img.FullImagePath)) { RepoFactory.TvDB_ImagePoster.Delete(img.TvDB_ImagePosterID); } } } if (obj.GetType() == typeof(TvDB_ImageWideBanner)) { TvDB_ImageWideBanner img = obj as TvDB_ImageWideBanner; if (ServerSettings.TvDB_AutoWideBanners && numBannersDownloaded < ServerSettings.TvDB_AutoWideBannersAmount) { bool fileExists = File.Exists(img.FullImagePath); if (!fileExists || (fileExists && forceDownload)) { CommandRequest_DownloadImage cmd = new CommandRequest_DownloadImage(img.TvDB_ImageWideBannerID, JMMImageType.TvDB_Banner, forceDownload); cmd.Save(); numBannersDownloaded++; } } else { //The TvDB_AutoWideBannersAmount point to download less images than its available // we should clean those image that we didn't download because those dont exists in local repo // first we check if file was downloaded if (!File.Exists(img.FullImagePath)) { RepoFactory.TvDB_ImageWideBanner.Delete(img.TvDB_ImageWideBannerID); } } } } }
public override void ProcessCommand() { logger.Info("Processing CommandRequest_DownloadImage: {0}", EntityID); string downloadURL = ""; try { ImageDownloadRequest req = null; switch (EntityTypeEnum) { case JMMImageType.AniDB_Cover: AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); AniDB_Anime anime = repAnime.GetByID(EntityID); if (anime == null) { return; } req = new ImageDownloadRequest(EntityTypeEnum, anime, ForceDownload); break; case JMMImageType.TvDB_Episode: TvDB_EpisodeRepository repTvEp = new TvDB_EpisodeRepository(); TvDB_Episode ep = repTvEp.GetByID(EntityID); if (ep == null) { return; } if (string.IsNullOrEmpty(ep.Filename)) { return; } req = new ImageDownloadRequest(EntityTypeEnum, ep, ForceDownload); break; case JMMImageType.TvDB_FanArt: TvDB_ImageFanartRepository repFanart = new TvDB_ImageFanartRepository(); TvDB_ImageFanart fanart = repFanart.GetByID(EntityID); if (fanart == null) { return; } if (string.IsNullOrEmpty(fanart.BannerPath)) { return; } req = new ImageDownloadRequest(EntityTypeEnum, fanart, ForceDownload); break; case JMMImageType.TvDB_Cover: TvDB_ImagePosterRepository repPoster = new TvDB_ImagePosterRepository(); TvDB_ImagePoster poster = repPoster.GetByID(EntityID); if (poster == null) { return; } if (string.IsNullOrEmpty(poster.BannerPath)) { return; } req = new ImageDownloadRequest(EntityTypeEnum, poster, ForceDownload); break; case JMMImageType.TvDB_Banner: TvDB_ImageWideBannerRepository repBanners = new TvDB_ImageWideBannerRepository(); TvDB_ImageWideBanner wideBanner = repBanners.GetByID(EntityID); if (wideBanner == null) { return; } if (string.IsNullOrEmpty(wideBanner.BannerPath)) { return; } req = new ImageDownloadRequest(EntityTypeEnum, wideBanner, ForceDownload); break; case JMMImageType.MovieDB_Poster: MovieDB_PosterRepository repMoviePosters = new MovieDB_PosterRepository(); MovieDB_Poster moviePoster = repMoviePosters.GetByID(EntityID); if (moviePoster == null) { return; } if (string.IsNullOrEmpty(moviePoster.URL)) { return; } req = new ImageDownloadRequest(EntityTypeEnum, moviePoster, ForceDownload); break; case JMMImageType.MovieDB_FanArt: MovieDB_FanartRepository repMovieFanart = new MovieDB_FanartRepository(); MovieDB_Fanart movieFanart = repMovieFanart.GetByID(EntityID); if (movieFanart == null) { return; } if (string.IsNullOrEmpty(movieFanart.URL)) { return; } req = new ImageDownloadRequest(EntityTypeEnum, movieFanart, ForceDownload); break; case JMMImageType.Trakt_Poster: Trakt_ImagePosterRepository repTraktPosters = new Trakt_ImagePosterRepository(); Trakt_ImagePoster traktPoster = repTraktPosters.GetByID(EntityID); if (traktPoster == null) { return; } if (string.IsNullOrEmpty(traktPoster.ImageURL)) { return; } req = new ImageDownloadRequest(EntityTypeEnum, traktPoster, ForceDownload); break; case JMMImageType.Trakt_Fanart: Trakt_ImageFanartRepository repTraktFanarts = new Trakt_ImageFanartRepository(); Trakt_ImageFanart traktFanart = repTraktFanarts.GetByID(EntityID); if (traktFanart == null) { return; } if (string.IsNullOrEmpty(traktFanart.ImageURL)) { return; } req = new ImageDownloadRequest(EntityTypeEnum, traktFanart, ForceDownload); break; case JMMImageType.Trakt_Friend: Trakt_FriendRepository repFriends = new Trakt_FriendRepository(); Trakt_Friend friend = repFriends.GetByID(EntityID); if (friend == null) { return; } if (string.IsNullOrEmpty(friend.Avatar)) { return; } req = new ImageDownloadRequest(EntityTypeEnum, friend, ForceDownload); break; case JMMImageType.Trakt_Episode: Trakt_EpisodeRepository repTraktEpisodes = new Trakt_EpisodeRepository(); Trakt_Episode traktEp = repTraktEpisodes.GetByID(EntityID); if (traktEp == null) { return; } if (string.IsNullOrEmpty(traktEp.EpisodeImage)) { return; } req = new ImageDownloadRequest(EntityTypeEnum, traktEp, ForceDownload); break; case JMMImageType.AniDB_Character: AniDB_CharacterRepository repChars = new AniDB_CharacterRepository(); AniDB_Character chr = repChars.GetByID(EntityID); if (chr == null) { return; } req = new ImageDownloadRequest(EntityTypeEnum, chr, ForceDownload); break; case JMMImageType.AniDB_Creator: AniDB_SeiyuuRepository repCreator = new AniDB_SeiyuuRepository(); AniDB_Seiyuu creator = repCreator.GetByID(EntityID); if (creator == null) { return; } req = new ImageDownloadRequest(EntityTypeEnum, creator, ForceDownload); break; } if (req == null) { return; } List <string> fileNames = new List <string>(); List <string> downloadURLs = new List <string>(); string fileNameTemp = GetFileName(req, false); string downloadURLTemp = GetFileURL(req, false); fileNames.Add(fileNameTemp); downloadURLs.Add(downloadURLTemp); if (req.ImageType == JMMImageType.TvDB_FanArt) { fileNameTemp = GetFileName(req, true); downloadURLTemp = GetFileURL(req, true); fileNames.Add(fileNameTemp); downloadURLs.Add(downloadURLTemp); } for (int i = 0; i < fileNames.Count; i++) { string fileName = fileNames[i]; downloadURL = downloadURLs[i]; bool downloadImage = true; bool fileExists = File.Exists(fileName); if (fileExists) { if (!req.ForceDownload) { downloadImage = false; } else { downloadImage = true; } } else { downloadImage = true; } if (downloadImage) { string tempName = Path.Combine(ImageUtils.GetImagesTempFolder(), Path.GetFileName(fileName)); if (File.Exists(tempName)) { File.Delete(tempName); } try { if (fileExists) { File.Delete(fileName); } } catch (Exception ex) { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Culture); string msg = string.Format(JMMServer.Properties.Resources.Command_DeleteError, fileName, ex.Message); logger.Warn(msg); return; } // download image using (WebClient client = new WebClient()) { client.Headers.Add("user-agent", "JMM"); //OnImageDownloadEvent(new ImageDownloadEventArgs("", req, ImageDownloadEventType.Started)); //BaseConfig.MyAnimeLog.Write("ProcessImages: Download: {0} *** to *** {1}", req.URL, fullName); if (downloadURL.Length > 0) { client.DownloadFile(downloadURL, tempName); string extension = ""; string contentType = client.ResponseHeaders["Content-type"].ToLower(); if (contentType.IndexOf("gif") >= 0) { extension = ".gif"; } if (contentType.IndexOf("jpg") >= 0) { extension = ".jpg"; } if (contentType.IndexOf("jpeg") >= 0) { extension = ".jpg"; } if (contentType.IndexOf("bmp") >= 0) { extension = ".bmp"; } if (contentType.IndexOf("png") >= 0) { extension = ".png"; } if (extension.Length > 0) { string newFile = Path.ChangeExtension(tempName, extension); if (!newFile.ToLower().Equals(tempName.ToLower())) { try { System.IO.File.Delete(newFile); } catch { //BaseConfig.MyAnimeLog.Write("DownloadedImage:Download() Delete failed:{0}", newFile); } System.IO.File.Move(tempName, newFile); tempName = newFile; } } } } // move the file to it's final location // check that the final folder exists string fullPath = Path.GetDirectoryName(fileName); if (!Directory.Exists(fullPath)) { Directory.CreateDirectory(fullPath); } System.IO.File.Move(tempName, fileName); logger.Info("Image downloaded: {0}", fileName); } } } catch (Exception ex) { logger.Warn("Error processing CommandRequest_DownloadImage: {0} ({1}) - {2}", downloadURL, EntityID, ex.Message); return; } }
/// <summary> /// Internal function that return valid image file path on server that exist /// </summary> /// <param name="id">image id</param> /// <param name="type">image type</param> /// <param name="thumb">thumb mode</param> /// <returns>string</returns> internal string ReturnImagePath(int type, int id, bool thumb) { JMMImageType imageType = (JMMImageType)type; string path = ""; switch (imageType) { // 1 case JMMImageType.AniDB_Cover: SVR_AniDB_Anime anime = RepoFactory.AniDB_Anime.GetByAnimeID(id); if (anime == null) { return(null); } path = anime.PosterPath; if (Pri.LongPath.File.Exists(path)) { return(path); } else { path = ""; logger.Trace("Could not find AniDB_Cover image: {0}", anime.PosterPath); } break; // 2 case JMMImageType.AniDB_Character: AniDB_Character chr = RepoFactory.AniDB_Character.GetByCharID(id); if (chr == null) { return(null); } path = chr.GetPosterPath(); if (Pri.LongPath.File.Exists(path)) { return(path); } else { path = ""; logger.Trace("Could not find AniDB_Character image: {0}", chr.GetPosterPath()); } break; // 3 case JMMImageType.AniDB_Creator: AniDB_Seiyuu creator = RepoFactory.AniDB_Seiyuu.GetBySeiyuuID(id); if (creator == null) { return(null); } path = creator.GetPosterPath(); if (Pri.LongPath.File.Exists(path)) { return(path); } else { path = ""; logger.Trace("Could not find AniDB_Creator image: {0}", creator.GetPosterPath()); } break; // 4 case JMMImageType.TvDB_Banner: TvDB_ImageWideBanner wideBanner = RepoFactory.TvDB_ImageWideBanner.GetByID(id); if (wideBanner == null) { return(null); } path = wideBanner.GetFullImagePath(); if (Pri.LongPath.File.Exists(path)) { return(path); } else { path = ""; logger.Trace("Could not find TvDB_Banner image: {0}", wideBanner.GetFullImagePath()); } break; // 5 case JMMImageType.TvDB_Cover: TvDB_ImagePoster poster = RepoFactory.TvDB_ImagePoster.GetByID(id); if (poster == null) { return(null); } path = poster.GetFullImagePath(); if (Pri.LongPath.File.Exists(path)) { return(path); } else { path = ""; logger.Trace("Could not find TvDB_Cover image: {0}", poster.GetFullImagePath()); } break; // 6 case JMMImageType.TvDB_Episode: TvDB_Episode ep = RepoFactory.TvDB_Episode.GetByID(id); if (ep == null) { return(null); } path = ep.GetFullImagePath(); if (Pri.LongPath.File.Exists(path)) { return(path); } else { path = ""; logger.Trace("Could not find TvDB_Episode image: {0}", ep.GetFullImagePath()); } break; // 7 case JMMImageType.TvDB_FanArt: TvDB_ImageFanart fanart = RepoFactory.TvDB_ImageFanart.GetByID(id); if (fanart == null) { return(null); } if (thumb) { //ratio path = fanart.GetFullThumbnailPath(); if (Pri.LongPath.File.Exists(path)) { return(path); } else { path = ""; logger.Trace("Could not find TvDB_FanArt image: {0}", fanart.GetFullThumbnailPath()); } } else { path = fanart.GetFullImagePath(); if (Pri.LongPath.File.Exists(path)) { return(path); } else { path = ""; logger.Trace("Could not find TvDB_FanArt image: {0}", fanart.GetFullImagePath()); } } break; // 8 case JMMImageType.MovieDB_FanArt: MovieDB_Fanart mFanart = RepoFactory.MovieDB_Fanart.GetByID(id); if (mFanart == null) { return(null); } mFanart = RepoFactory.MovieDB_Fanart.GetByOnlineID(mFanart.URL); if (mFanart == null) { return(null); } path = mFanart.GetFullImagePath(); if (Pri.LongPath.File.Exists(path)) { return(path); } else { path = ""; logger.Trace("Could not find MovieDB_FanArt image: {0}", mFanart.GetFullImagePath()); } break; // 9 case JMMImageType.MovieDB_Poster: MovieDB_Poster mPoster = RepoFactory.MovieDB_Poster.GetByID(id); if (mPoster == null) { return(null); } mPoster = RepoFactory.MovieDB_Poster.GetByOnlineID(mPoster.URL); if (mPoster == null) { return(null); } path = mPoster.GetFullImagePath(); if (Pri.LongPath.File.Exists(path)) { return(path); } else { path = ""; logger.Trace("Could not find MovieDB_Poster image: {0}", mPoster.GetFullImagePath()); } break; // 10 case JMMImageType.Trakt_Poster: Trakt_ImagePoster tPoster = RepoFactory.Trakt_ImagePoster.GetByID(id); if (tPoster == null) { return(null); } path = tPoster.GetFullImagePath(); if (Pri.LongPath.File.Exists(path)) { return(path); } else { path = ""; logger.Trace("Could not find Trakt_Poster image: {0}", tPoster.GetFullImagePath()); } break; // 11 case JMMImageType.Trakt_Fanart: Trakt_ImageFanart tFanart = RepoFactory.Trakt_ImageFanart.GetByID(id); if (tFanart == null) { return(null); } path = tFanart.GetFullImagePath(); if (Pri.LongPath.File.Exists(path)) { return(path); } else { path = ""; logger.Trace("Could not find Trakt_Fanart image: {0}", tFanart.GetFullImagePath()); } break; // 12 + 16 case JMMImageType.Trakt_Episode: case JMMImageType.Trakt_WatchedEpisode: Trakt_Episode tEpisode = RepoFactory.Trakt_Episode.GetByID(id); if (tEpisode == null) { return(null); } path = tEpisode.GetFullImagePath(); if (Pri.LongPath.File.Exists(path)) { return(path); } else { path = ""; logger.Trace("Could not find Trakt_Episode image: {0}", tEpisode.GetFullImagePath()); } break; // 0, 13-15, 17+ default: path = ""; break; } return(path); }