public override void ProcessCommand() { logger.Info("Reading Media Info for File: {0}", VideoLocalID); try { VideoLocal vlocal = RepoFactory.VideoLocal.GetByID(VideoLocalID); VideoLocal_Place place = vlocal?.GetBestVideoLocalPlace(); if (place == null) { logger.Error("Cound not find Video: {0}", VideoLocalID); return; } if (place.RefreshMediaInfo()) { RepoFactory.VideoLocal.Save(place.VideoLocal, true); } } catch (Exception ex) { logger.Error("Error processing CommandRequest_ReadMediaInfo: {0} - {1}", VideoLocalID, ex.ToString()); return; } }
private void UpdateMediaContracts(VideoLocal obj) { if (obj.Media == null || obj.MediaVersion < VideoLocal.MEDIA_VERSION || obj.Duration == 0) { VideoLocal_Place place = obj.GetBestVideoLocalPlace(); place?.RefreshMediaInfo(); } }
public static Video VideoFromVideoLocal(IProvider prov, VideoLocal v, int userid) { Video l = new Video(); l.AnimeType = JMMContracts.PlexAndKodi.AnimeTypes.AnimeFile.ToString(); l.Id = v.VideoLocalID.ToString(); l.Type = "episode"; l.Summary = "Episode Overview Not Available"; //TODO Intenationalization l.Title = Path.GetFileNameWithoutExtension(v.FileName); l.AddedAt = v.DateTimeCreated.ToUnixTime(); l.UpdatedAt = v.DateTimeUpdated.ToUnixTime(); l.OriginallyAvailableAt = v.DateTimeCreated.ToPlexDate(); l.Year = v.DateTimeCreated.Year.ToString(); l.Medias = new List <Media>(); VideoLocal_User vlr = v.GetUserRecord(userid); if (vlr != null) { if (vlr.WatchedDate.HasValue) { l.LastViewedAt = vlr.WatchedDate.Value.ToUnixTime(); } if (vlr.ResumePosition > 0) { l.ViewOffset = vlr.ResumePosition.ToString(); } } Media m = v.Media; if (string.IsNullOrEmpty(m?.Duration)) { VideoLocal_Place pl = v.GetBestVideoLocalPlace(); if (pl != null) { if (pl.RefreshMediaInfo()) { RepoFactory.VideoLocal.Save(v, true); } } m = v.Media; } if (m != null) { l.Medias.Add(m); l.Duration = m.Duration; } AddLinksToAnimeEpisodeVideo(prov, l, userid); return(l); }
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); } } } 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(); } //FIX THIS MetroContract_Anime_Episode contract = new MetroContract_Anime_Episode(); JMMServiceImplementationMetro.SetTvDBInfo(aep.AnimeID, aep, ref contract); l.Thumb = contract.GenPoster(); l.Summary = contract.EpisodeOverview; } l.Id = ep.AnimeEpisodeID.ToString(); return(l); }
public static Video VideoFromAnimeEpisode(IProvider prov, List <Contract_CrossRef_AniDB_TvDBV2> cross, KeyValuePair <AnimeEpisode, Contract_AnimeEpisode> e, int userid) { Video v = (Video)e.Key.PlexContract?.Clone <Video>(); if (v?.Thumb != null) { v.Thumb = ReplaceSchemeHost(v.Thumb); } if (v != null && (v.Medias == null || v.Medias.Count == 0)) { foreach (VideoLocal vl2 in e.Key.GetVideoLocals()) { if (string.IsNullOrEmpty(vl2.Media?.Duration)) { VideoLocal_Place pl = vl2.GetBestVideoLocalPlace(); if (pl != null) { if (pl.RefreshMediaInfo()) { RepoFactory.VideoLocal.Save(vl2, true); } } } } RepoFactory.AnimeEpisode.Save(e.Key); v = (Video)e.Key.PlexContract?.Clone <Video>(); } if (v != null) { if (e.Value != null) { v.ViewCount = e.Value.WatchedCount.ToString(); if (e.Value.WatchedDate.HasValue) { v.LastViewedAt = e.Value.WatchedDate.Value.ToUnixTime(); } } v.ParentIndex = "1"; if (e.Key.EpisodeTypeEnum != enEpisodeType.Episode) { v.ParentIndex = null; } if (cross != null && cross.Count > 0) { Contract_CrossRef_AniDB_TvDBV2 c2 = cross.FirstOrDefault( a => a.AniDBStartEpisodeType == int.Parse(v.EpisodeType) && a.AniDBStartEpisodeNumber <= int.Parse(v.EpisodeNumber)); if (c2?.TvDBSeasonNumber > 0) { v.ParentIndex = c2.TvDBSeasonNumber.ToString(); } } AddLinksToAnimeEpisodeVideo(prov, v, userid); } v.AddResumePosition(prov, userid); return(v); }
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); }