public static List <CrossRef_AniDB_TvDB_Episode> GetMatchPreviewWithOverrides(int animeID, int tvdbID) { var matches = GetMatchPreview(animeID, tvdbID); var overrides = Repo.Instance.CrossRef_AniDB_TvDB_Episode_Override.GetByAnimeID(animeID); List <CrossRef_AniDB_TvDB_Episode> result = new List <CrossRef_AniDB_TvDB_Episode>(); foreach (var match in matches) { var match_override = overrides.FirstOrDefault(a => a.AniDBEpisodeID == match.AniDBEpisodeID); if (match_override == null) { result.Add(match); } else { var new_match = new CrossRef_AniDB_TvDB_Episode { AniDBEpisodeID = match_override.AniDBEpisodeID, TvDBEpisodeID = match_override.TvDBEpisodeID, MatchRating = MatchRating.UserVerified }; result.Add(new_match); } } return(result); }
public CrossRef_AniDB_TvDB_Episode GetByAniDBEpisodeID(int id) { using (var session = JMMService.SessionFactory.OpenSession()) { CrossRef_AniDB_TvDB_Episode cr = session .CreateCriteria(typeof(CrossRef_AniDB_TvDB_Episode)) .Add(Restrictions.Eq("AniDBEpisodeID", id)) .UniqueResult <CrossRef_AniDB_TvDB_Episode>(); return(cr); } }
public VM_CrossRef_AniDB_TvDB_Episode(CrossRef_AniDB_TvDB_Episode baselink, VM_AniDB_Episode ani, VM_TvDB_Episode tv) { CrossRef_AniDB_TvDB_EpisodeID = baselink.CrossRef_AniDB_TvDB_EpisodeID; AniDBEpisodeID = baselink.AniDBEpisodeID; TvDBEpisodeID = baselink.TvDBEpisodeID; MatchRating = baselink.MatchRating; aniep = ani; tvep = tv; }
public void Save(CrossRef_AniDB_TvDB_Episode obj) { using (var session = JMMService.SessionFactory.OpenSession()) { // populate the database using (var transaction = session.BeginTransaction()) { session.SaveOrUpdate(obj); transaction.Commit(); } } }
public void Delete(int id) { using (var session = JMMService.SessionFactory.OpenSession()) { // populate the database using (var transaction = session.BeginTransaction()) { CrossRef_AniDB_TvDB_Episode cr = GetByID(id); if (cr != null) { session.Delete(cr); transaction.Commit(); } } } }
public static void LinkAniDBTvDBEpisode(int aniDBID, int tvDBID, int animeID) { CrossRef_AniDB_TvDB_Episode xref = RepoFactory.CrossRef_AniDB_TvDB_Episode.GetByAniDBEpisodeID(aniDBID); if (xref == null) { xref = new CrossRef_AniDB_TvDB_Episode(); } xref.AnimeID = animeID; xref.AniDBEpisodeID = aniDBID; xref.TvDBEpisodeID = tvDBID; RepoFactory.CrossRef_AniDB_TvDB_Episode.Save(xref); AniDB_Anime.UpdateStatsByAnimeID(animeID); logger.Trace("Changed tvdb episode association: {0}", aniDBID); }
public static void LinkAniDBTvDBEpisode(int aniDBID, int tvDBID, int animeID) { CrossRef_AniDB_TvDB_Episode xref = RepoFactory.CrossRef_AniDB_TvDB_Episode.GetByAniDBEpisodeID(aniDBID) ?? new CrossRef_AniDB_TvDB_Episode(); xref.AnimeID = animeID; xref.AniDBEpisodeID = aniDBID; xref.TvDBEpisodeID = tvDBID; RepoFactory.CrossRef_AniDB_TvDB_Episode.Save(xref); SVR_AniDB_Anime.UpdateStatsByAnimeID(animeID); SVR_AnimeEpisode ep = RepoFactory.AnimeEpisode.GetByAniDBEpisodeID(aniDBID); RepoFactory.AnimeEpisode.Save(ep); logger.Trace($"Changed tvdb episode association: {aniDBID}"); }
public static void LinkAniDBTvDBEpisode(int aniDBID, int tvDBID, int animeID) { CrossRef_AniDB_TvDB_EpisodeRepository repCrossRef = new CrossRef_AniDB_TvDB_EpisodeRepository(); CrossRef_AniDB_TvDB_Episode xref = repCrossRef.GetByAniDBEpisodeID(aniDBID); if (xref == null) { xref = new CrossRef_AniDB_TvDB_Episode(); } xref.AnimeID = animeID; xref.AniDBEpisodeID = aniDBID; xref.TvDBEpisodeID = tvDBID; repCrossRef.Save(xref); StatsCache.Instance.UpdateUsingAnime(animeID); logger.Trace("Changed tvdb episode association: {0}", aniDBID); }
public static Video GenerateVideoFromAnimeEpisode(SVR_AnimeEpisode ep) { Video l = new Video(); List <SVR_VideoLocal> vids = ep.GetVideoLocals(); l.Type = "episode"; l.Summary = "Episode Overview Not Available"; //TODO Intenationalization l.Id = ep.AnimeEpisodeID.ToString(); l.AnimeType = AnimeTypes.AnimeEpisode.ToString(); if (vids.Count > 0) { //List<string> hashes = vids.Select(a => a.Hash).Distinct().ToList(); l.Title = Path.GetFileNameWithoutExtension(vids[0].FileName); l.AddedAt = vids[0].DateTimeCreated.ToUnixTime(); l.UpdatedAt = vids[0].DateTimeUpdated.ToUnixTime(); l.OriginallyAvailableAt = vids[0].DateTimeCreated.ToPlexDate(); l.Year = vids[0].DateTimeCreated.Year.ToString(); l.Medias = new List <Media>(); foreach (SVR_VideoLocal v in vids) { if (string.IsNullOrEmpty(v.Media?.Duration)) { SVR_VideoLocal_Place pl = v.GetBestVideoLocalPlace(); if (pl?.RefreshMediaInfo() == true) { RepoFactory.VideoLocal.Save(v, true); } } v.Media?.Parts?.Where(a => a != null) ?.ToList() ?.ForEach(a => { if (string.IsNullOrEmpty(a.LocalKey)) { a.LocalKey = v?.GetBestVideoLocalPlace()?.FullServerPath ?? null; } }); if (v.Media != null) { l.Medias.Add(v.Media); } } AniDB_Episode aep = ep?.AniDB_Episode; if (aep != null) { l.EpisodeNumber = aep.EpisodeNumber.ToString(); l.Index = aep.EpisodeNumber.ToString(); l.Title = aep.EnglishName; l.OriginalTitle = aep.RomajiName; l.EpisodeType = aep.EpisodeType.ToString(); l.Rating = float.Parse(aep.Rating, CultureInfo.InvariantCulture) .ToString(CultureInfo.InvariantCulture); AniDB_Vote vote = RepoFactory.AniDB_Vote.GetByEntityAndType(ep.AnimeEpisodeID, AniDBVoteType.Episode); if (vote != null) { l.UserRating = (vote.VoteValue / 100D).ToString(CultureInfo.InvariantCulture); } if (aep.GetAirDateAsDate().HasValue) { l.Year = aep.GetAirDateAsDate()?.Year.ToString(); l.OriginallyAvailableAt = aep.GetAirDateAsDate()?.ToPlexDate(); } #region TvDB using (var session = DatabaseFactory.SessionFactory.OpenSession()) { List <CrossRef_AniDB_TvDBV2> xref_tvdbv2 = RepoFactory.CrossRef_AniDB_TvDBV2.GetByAnimeIDEpTypeEpNumber(aep.AnimeID, aep.EpisodeType, aep.EpisodeNumber); if (xref_tvdbv2?.Count > 0) { TvDB_Episode tvep = ep?.TvDBEpisode; if (tvep != null) { l.Thumb = tvep.GenPoster(null); l.Summary = tvep.Overview; l.Season = $"{tvep.SeasonNumber}x{tvep.EpisodeNumber:0#}"; } else { string anime = "[Blank]"; SVR_AnimeSeries ser = ep.GetAnimeSeries(); if (ser?.GetSeriesName() != null) { anime = ser.GetSeriesName(); } LogManager.GetCurrentClassLogger() .Warn( $"Episode {aep.EpisodeNumber}: {aep.EnglishName} from {anime} is out of range" + " for its TvDB Link. Please check the TvDB links for it."); } } } #endregion #region TvDB Overrides CrossRef_AniDB_TvDB_Episode xref_tvdb = RepoFactory.CrossRef_AniDB_TvDB_Episode.GetByAniDBEpisodeID(aep.AniDB_EpisodeID); if (xref_tvdb != null) { TvDB_Episode tvdb_ep = RepoFactory.TvDB_Episode.GetByTvDBID(xref_tvdb.TvDBEpisodeID); if (tvdb_ep != null) { l.Thumb = tvdb_ep.GenPoster(null); l.Summary = tvdb_ep.Overview; l.Season = $"{tvdb_ep.SeasonNumber}x{tvdb_ep.EpisodeNumber:0#}"; } } #endregion } if (l.Thumb == null || l.Summary == null) { l.Thumb = ((IProvider)null).ConstructSupportImageLink("plex_404.png"); l.Summary = "Episode Overview not Available"; } } l.Id = ep.AnimeEpisodeID.ToString(); return(l); }
public static void GenerateTvDBEpisodeMatches(int animeID, bool skipMatchClearing = false) { // wipe old links except User Verified if (!skipMatchClearing) { RepoFactory.CrossRef_AniDB_TvDB_Episode.DeleteAllUnverifiedLinksForAnime(animeID); } List <CrossRef_AniDB_TvDB> tvxrefs = RepoFactory.CrossRef_AniDB_TvDB.GetByAnimeID(animeID); int tvdbID = tvxrefs.FirstOrDefault()?.TvDBID ?? 0; var matches = GetTvDBEpisodeMatches(animeID, tvdbID); List <CrossRef_AniDB_TvDB_Episode> tosave = new List <CrossRef_AniDB_TvDB_Episode>(); foreach (var match in matches) { if (match.AniDB == null || match.TvDB == null) { continue; } var xref = RepoFactory.CrossRef_AniDB_TvDB_Episode.GetByAniDBAndTvDBEpisodeIDs(match.AniDB.EpisodeID, match.TvDB.Id); // Don't touch User Verified links if (xref?.MatchRating == MatchRating.UserVerified) { continue; } // check for duplicates only if we skip clearing the links if (skipMatchClearing) { xref = RepoFactory.CrossRef_AniDB_TvDB_Episode.GetByAniDBAndTvDBEpisodeIDs(match.AniDB.EpisodeID, match.TvDB.Id); if (xref != null) { if (xref.MatchRating != match.Rating) { xref.MatchRating = match.Rating; tosave.Add(xref); } continue; } } xref = new CrossRef_AniDB_TvDB_Episode { AniDBEpisodeID = match.AniDB.EpisodeID, TvDBEpisodeID = match.TvDB.Id, MatchRating = match.Rating }; tosave.Add(xref); } if (tosave.Count == 0) { return; } tosave.Batch(50).ForEach(RepoFactory.CrossRef_AniDB_TvDB_Episode.Save); }
public static Video GenerateVideoFromAnimeEpisode(AnimeEpisode ep) { Video l = new Video(); List <VideoLocal> vids = ep.GetVideoLocals(); l.Type = "episode"; l.Summary = "Episode Overview Not Available"; //TODO Intenationalization l.Id = ep.AnimeEpisodeID.ToString(); l.AnimeType = JMMContracts.PlexAndKodi.AnimeTypes.AnimeEpisode.ToString(); if (vids.Count > 0) { //List<string> hashes = vids.Select(a => a.Hash).Distinct().ToList(); l.Title = Path.GetFileNameWithoutExtension(vids[0].FileName); l.AddedAt = vids[0].DateTimeCreated.ToUnixTime(); l.UpdatedAt = vids[0].DateTimeUpdated.ToUnixTime(); l.OriginallyAvailableAt = vids[0].DateTimeCreated.ToPlexDate(); l.Year = vids[0].DateTimeCreated.Year.ToString(); l.Medias = new List <Media>(); foreach (VideoLocal v in vids) { if (string.IsNullOrEmpty(v.Media?.Duration)) { VideoLocal_Place pl = v.GetBestVideoLocalPlace(); if (pl != null) { if (pl.RefreshMediaInfo()) { RepoFactory.VideoLocal.Save(v, true); } } } v.Media?.Parts?.Where(a => a != null)?.ToList()?.ForEach(a => { if (String.IsNullOrEmpty(a.LocalKey)) { a.LocalKey = v?.GetBestVideoLocalPlace()?.FullServerPath ?? null; } }); if (v.Media != null) { l.Medias.Add(v.Media); } } AniDB_Episode aep = ep?.AniDB_Episode; if (aep != null) { l.EpisodeNumber = aep.EpisodeNumber.ToString(); l.Index = aep.EpisodeNumber.ToString(); l.Title = aep.EnglishName; l.OriginalTitle = aep.RomajiName; l.EpisodeType = aep.EpisodeType.ToString(); l.Rating = float.Parse(aep.Rating, CultureInfo.InvariantCulture).ToString(CultureInfo.InvariantCulture); if (aep.AirDateAsDate.HasValue) { l.Year = aep.AirDateAsDate.Value.Year.ToString(); l.OriginallyAvailableAt = aep.AirDateAsDate.Value.ToPlexDate(); } #region TvDB using (var session = DatabaseFactory.SessionFactory.OpenSession()) { List <CrossRef_AniDB_TvDBV2> xref_tvdb2 = RepoFactory.CrossRef_AniDB_TvDBV2.GetByAnimeIDEpTypeEpNumber(session, aep.AnimeID, aep.EpisodeType, aep.EpisodeNumber); if (xref_tvdb2 != null && xref_tvdb2.Count > 0) { TvDB_Episode tvep = GetTvDBEpisodeFromAniDB(session, aep, xref_tvdb2[0]); if (tvep != null) { l.Thumb = tvep.GenPoster(); l.Summary = tvep.Overview; } else { string anime = "[Blank]"; AnimeSeries ser = ep.GetAnimeSeries(); if (ser != null && ser.GetSeriesName() != null) { anime = ser.GetSeriesName(); } LogManager.GetCurrentClassLogger().Error("Episode " + aep.EpisodeNumber + ": " + aep.EnglishName + " from " + anime + " is out of range for its TvDB Link. Please relink it."); } } } #endregion #region TvDB Overrides CrossRef_AniDB_TvDB_Episode xref_tvdb = RepoFactory.CrossRef_AniDB_TvDB_Episode.GetByAniDBEpisodeID(aep.AniDB_EpisodeID); if (xref_tvdb != null) { TvDB_Episode tvdb_ep = RepoFactory.TvDB_Episode.GetByTvDBID(xref_tvdb.TvDBEpisodeID); if (tvdb_ep != null) { l.Thumb = tvdb_ep.GenPoster(); l.Summary = tvdb_ep.Overview; } } #endregion } if (l.Thumb == null || l.Summary == null) { l.Thumb = ConstructSupportImageLink("plex_404.png"); l.Summary = "Episode Overview not Available"; } } l.Id = ep.AnimeEpisodeID.ToString(); return(l); }