public void RemoveRecordWithOpenTransaction(ISession session, ICollection <SVR_AnimeEpisode> episodesToUpdate, ICollection <SVR_AnimeSeries> seriesToUpdate) { logger.Info("Removing VideoLocal_Place recoord for: {0}", FullServerPath ?? VideoLocal_Place_ID.ToString()); SVR_VideoLocal v = VideoLocal; List <DuplicateFile> dupFiles = RepoFactory.DuplicateFile.GetByFilePathAndImportFolder(FilePath, ImportFolderID); if (v?.Places?.Count <= 1) { List <SVR_AnimeEpisode> eps = v?.GetAnimeEpisodes()?.Where(a => a != null).ToList(); eps?.ForEach(episodesToUpdate.Add); eps?.Select(a => a.GetAnimeSeries()).ToList().ForEach(seriesToUpdate.Add); using (var transaction = session.BeginTransaction()) { RepoFactory.VideoLocalPlace.DeleteWithOpenTransaction(session, this); RepoFactory.VideoLocal.DeleteWithOpenTransaction(session, v); dupFiles.ForEach(a => RepoFactory.DuplicateFile.DeleteWithOpenTransaction(session, a)); transaction.Commit(); } CommandRequest_DeleteFileFromMyList cmdDel = new CommandRequest_DeleteFileFromMyList(v.Hash, v.FileSize); cmdDel.Save(); } else { using (var transaction = session.BeginTransaction()) { RepoFactory.VideoLocalPlace.DeleteWithOpenTransaction(session, this); dupFiles.ForEach(a => RepoFactory.DuplicateFile.DeleteWithOpenTransaction(session, a)); transaction.Commit(); } } }
public void RemoveRecordWithOpenTransaction(ISession session, ICollection <SVR_AnimeEpisode> episodesToUpdate, ICollection <SVR_AnimeSeries> seriesToUpdate) { logger.Info("RemoveRecordsWithoutPhysicalFiles : {0}", FullServerPath); SVR_VideoLocal v = VideoLocal; List <SVR_AnimeEpisode> eps = v?.GetAnimeEpisodes()?.Where(a => a != null).ToList(); eps?.ForEach(a => episodesToUpdate.Add(a)); eps?.Select(a => a.GetAnimeSeries()).ToList().ForEach(a => seriesToUpdate.Add(a)); if (v?.Places?.Count <= 1) { using (var transaction = session.BeginTransaction()) { RepoFactory.VideoLocalPlace.DeleteWithOpenTransaction(session, this); RepoFactory.VideoLocal.DeleteWithOpenTransaction(session, v); transaction.Commit(); } CommandRequest_DeleteFileFromMyList cmdDel = new CommandRequest_DeleteFileFromMyList(v.Hash, v.FileSize); cmdDel.Save(); } else { using (var transaction = session.BeginTransaction()) { RepoFactory.VideoLocalPlace.DeleteWithOpenTransaction(session, this); transaction.Commit(); } } }
public void RemoveRecord() { logger.Info("RemoveRecordsWithoutPhysicalFiles : {0}", FullServerPath); List <SVR_AnimeEpisode> episodesToUpdate = new List <SVR_AnimeEpisode>(); List <SVR_AnimeSeries> seriesToUpdate = new List <SVR_AnimeSeries>(); SVR_VideoLocal v = VideoLocal; using (var session = DatabaseFactory.SessionFactory.OpenSession()) { if (v.Places.Count <= 1) { episodesToUpdate.AddRange(v.GetAnimeEpisodes()); seriesToUpdate.AddRange(v.GetAnimeEpisodes().Select(a => a.GetAnimeSeries())); using (var transaction = session.BeginTransaction()) { RepoFactory.VideoLocalPlace.DeleteWithOpenTransaction(session, this); RepoFactory.VideoLocal.DeleteWithOpenTransaction(session, v); transaction.Commit(); } CommandRequest_DeleteFileFromMyList cmdDel = new CommandRequest_DeleteFileFromMyList(v.Hash, v.FileSize); cmdDel.Save(); } else { episodesToUpdate.AddRange(v.GetAnimeEpisodes()); seriesToUpdate.AddRange(v.GetAnimeEpisodes().Select(a => a.GetAnimeSeries())); using (var transaction = session.BeginTransaction()) { RepoFactory.VideoLocalPlace.DeleteWithOpenTransaction(session, this); transaction.Commit(); } } } episodesToUpdate = episodesToUpdate.DistinctBy(a => a.AnimeEpisodeID).ToList(); foreach (SVR_AnimeEpisode ep in episodesToUpdate) { if (ep.AnimeEpisodeID == 0) { ep.PlexContract = null; RepoFactory.AnimeEpisode.Save(ep); } try { ep.PlexContract = Helper.GenerateVideoFromAnimeEpisode(ep); RepoFactory.AnimeEpisode.Save(ep); } catch (Exception ex) { LogManager.GetCurrentClassLogger().Error(ex, ex.ToString()); } } seriesToUpdate = seriesToUpdate.DistinctBy(a => a.AnimeSeriesID).ToList(); foreach (SVR_AnimeSeries ser in seriesToUpdate) { ser.QueueUpdateStats(); } }
public static void FillVideoInfoFromMedia(SVR_VideoLocal info, Media m) { info.VideoResolution = (!string.IsNullOrEmpty(m.Width) && !string.IsNullOrEmpty(m.Height)) ? m.Width + "x" + m.Height : string.Empty; info.VideoCodec = (!string.IsNullOrEmpty(m.VideoCodec)) ? m.VideoCodec : string.Empty; info.AudioCodec = (!string.IsNullOrEmpty(m.AudioCodec)) ? m.AudioCodec : string.Empty; if (!string.IsNullOrEmpty(m.Duration)) { double duration; bool isValidDuration = double.TryParse(m.Duration, out duration); if (isValidDuration) { info.Duration = (long)double.Parse(m.Duration, NumberStyles.Any, CultureInfo.InvariantCulture); } else { info.Duration = 0; } } else { info.Duration = 0; } info.VideoBitrate = info.VideoBitDepth = info.VideoFrameRate = info.AudioBitrate = string.Empty; List <Shoko.Models.PlexAndKodi.Stream> vparts = m.Parts[0].Streams.Where(a => a.StreamType == "1").ToList(); if (vparts.Count > 0) { if (!string.IsNullOrEmpty(vparts[0].Bitrate)) { info.VideoBitrate = vparts[0].Bitrate; } if (!string.IsNullOrEmpty(vparts[0].BitDepth)) { info.VideoBitDepth = vparts[0].BitDepth; } if (!string.IsNullOrEmpty(vparts[0].FrameRate)) { info.VideoFrameRate = vparts[0].FrameRate; } } List <Shoko.Models.PlexAndKodi.Stream> aparts = m.Parts[0].Streams.Where(a => a.StreamType == "2").ToList(); if (aparts.Count > 0) { if (!string.IsNullOrEmpty(aparts[0].Bitrate)) { info.AudioBitrate = aparts[0].Bitrate; } } }
public void RemoveRecord() { logger.Info("Removing VideoLocal_Place recoord for: {0}", FullServerPath ?? VideoLocal_Place_ID.ToString()); List <SVR_AnimeEpisode> episodesToUpdate = new List <SVR_AnimeEpisode>(); List <SVR_AnimeSeries> seriesToUpdate = new List <SVR_AnimeSeries>(); SVR_VideoLocal v = VideoLocal; List <DuplicateFile> dupFiles = RepoFactory.DuplicateFile.GetByFilePathAndImportFolder(FilePath, ImportFolderID); using (var session = DatabaseFactory.SessionFactory.OpenSession()) { if (v.Places.Count <= 1) { episodesToUpdate.AddRange(v.GetAnimeEpisodes()); seriesToUpdate.AddRange(v.GetAnimeEpisodes().Select(a => a.GetAnimeSeries())); using (var transaction = session.BeginTransaction()) { RepoFactory.VideoLocalPlace.DeleteWithOpenTransaction(session, this); RepoFactory.VideoLocal.DeleteWithOpenTransaction(session, v); dupFiles?.ForEach(a => RepoFactory.DuplicateFile.DeleteWithOpenTransaction(session, a)); transaction.Commit(); } CommandRequest_DeleteFileFromMyList cmdDel = new CommandRequest_DeleteFileFromMyList(v.Hash, v.FileSize); cmdDel.Save(); } else { using (var transaction = session.BeginTransaction()) { RepoFactory.VideoLocalPlace.DeleteWithOpenTransaction(session, this); dupFiles.ForEach(a => RepoFactory.DuplicateFile.DeleteWithOpenTransaction(session, a)); transaction.Commit(); } } } episodesToUpdate = episodesToUpdate.DistinctBy(a => a.AnimeEpisodeID).ToList(); foreach (SVR_AnimeEpisode ep in episodesToUpdate) { try { RepoFactory.AnimeEpisode.Save(ep); } catch (Exception ex) { LogManager.GetCurrentClassLogger().Error(ex, ex.ToString()); } } seriesToUpdate = seriesToUpdate.DistinctBy(a => a.AnimeSeriesID).ToList(); foreach (SVR_AnimeSeries ser in seriesToUpdate) { ser.QueueUpdateStats(); } }
public bool RefreshMediaInfo() { try { logger.Trace("Getting media info for: {0}", FullServerPath ?? VideoLocal_Place_ID.ToString()); MediaContainer m = null; if (VideoLocal == null) { logger.Error($"VideoLocal for {FullServerPath ?? VideoLocal_Place_ID.ToString()} failed to be retrived for MediaInfo"); return(false); } if (FullServerPath != null) { if (GetFile() == null) { logger.Error($"File {FullServerPath ?? VideoLocal_Place_ID.ToString()} failed to be retrived for MediaInfo"); return(false); } string name = FullServerPath.Replace("/", $"{Path.DirectorySeparatorChar}"); m = Utilities.MediaInfoLib.MediaInfo.GetMediaInfo(name); //Mediainfo should have libcurl.dll for http var duration = m?.GeneralStream?.Duration ?? 0; if (duration == 0) { m = null; } } if (m != null) { SVR_VideoLocal info = VideoLocal; List <TextStream> subs = SubtitleHelper.GetSubtitleStreams(this); if (subs.Count > 0) { m.media.track.AddRange(subs); } info.Media = m; return(true); } logger.Error($"File {FullServerPath ?? VideoLocal_Place_ID.ToString()} failed to read MediaInfo"); } catch (Exception e) { logger.Error($"Unable to read the media information of file {FullServerPath ?? VideoLocal_Place_ID.ToString()} ERROR: {e}"); } return(false); }
public void RemoveRecord(bool updateMyListStatus = true) { logger.Info("Removing VideoLocal_Place record for: {0}", FullServerPath ?? VideoLocal_Place_ID.ToString()); List <SVR_AnimeSeries> seriesToUpdate = new List <SVR_AnimeSeries>(); SVR_VideoLocal v = VideoLocal; List <DuplicateFile> dupFiles = null; if (!string.IsNullOrEmpty(FilePath)) { dupFiles = RepoFactory.DuplicateFile.GetByFilePathAndImportFolder(FilePath, ImportFolderID); } using (var session = DatabaseFactory.SessionFactory.OpenSession()) { if (v?.Places?.Count <= 1) { if (updateMyListStatus) { CommandRequest_DeleteFileFromMyList cmdDel = new CommandRequest_DeleteFileFromMyList(v.MyListID); cmdDel.Save(); } using (var transaction = session.BeginTransaction()) { RepoFactory.VideoLocalPlace.DeleteWithOpenTransaction(session, this); seriesToUpdate.AddRange(v.GetAnimeEpisodes().DistinctBy(a => a.AnimeSeriesID) .Select(a => a.GetAnimeSeries())); RepoFactory.VideoLocal.DeleteWithOpenTransaction(session, v); dupFiles?.ForEach(a => RepoFactory.DuplicateFile.DeleteWithOpenTransaction(session, a)); transaction.Commit(); } } else { using (var transaction = session.BeginTransaction()) { RepoFactory.VideoLocalPlace.DeleteWithOpenTransaction(session, this); dupFiles?.ForEach(a => RepoFactory.DuplicateFile.DeleteWithOpenTransaction(session, a)); transaction.Commit(); } } } foreach (SVR_AnimeSeries ser in seriesToUpdate) { ser?.QueueUpdateStats(); } }
public void RemoveAndDeleteFile() { try { SVR_VideoLocal vid = VideoLocal; logger.Info("Deleting video local place record and file: {0}", (FullServerPath ?? VideoLocal_Place_ID.ToString())); IFileSystem fileSystem = ImportFolder?.FileSystem; if (fileSystem == null) { logger.Error("Unable to delete file, filesystem not found. Removing record."); RemoveRecord(); return; } if (FullServerPath == null) { logger.Error("Unable to delete file, fullserverpath is null. Removing record."); RemoveRecord(); return; } FileSystemResult <IObject> fr = fileSystem.Resolve(FullServerPath); if (fr == null || !fr.IsOk) { logger.Error($"Unable to find file. Removing Record: {FullServerPath}"); RemoveRecord(); return; } IFile file = fr.Result as IFile; if (file == null) { logger.Error($"Seems '{FullServerPath}' is a directory."); RemoveRecord(); return; } FileSystemResult fs = file.Delete(false); if (fs == null || !fs.IsOk) { logger.Error($"Unable to delete file '{FullServerPath}'"); return; } RemoveRecord(); // For deletion of files from Trakt, we will rely on the Daily sync return; } catch (Exception ex) { logger.Error(ex, ex.ToString()); } }
public List <CL_VideoDetailed> GetVideoDetailedContracts(int userID) { List <CL_VideoDetailed> contracts = new List <CL_VideoDetailed>(); // get all the cross refs foreach (CrossRef_File_Episode xref in FileCrossRefs) { SVR_VideoLocal v = RepoFactory.VideoLocal.GetByHash(xref.Hash); if (v != null) { contracts.Add(v.ToClientDetailed(userID)); } } return(contracts); }
public void RemoveRecordWithOpenTransaction(ISession session, ICollection <SVR_AnimeSeries> seriesToUpdate, bool updateMyListStatus = true, bool removeDuplicateFileEntries = true) { logger.Info("Removing VideoLocal_Place record for: {0}", FullServerPath ?? VideoLocal_Place_ID.ToString()); SVR_VideoLocal v = VideoLocal; List <DuplicateFile> dupFiles = null; if (!string.IsNullOrEmpty(FilePath) && removeDuplicateFileEntries) { dupFiles = RepoFactory.DuplicateFile.GetByFilePathAndImportFolder(FilePath, ImportFolderID); } if (v?.Places?.Count <= 1) { if (updateMyListStatus) { CommandRequest_DeleteFileFromMyList cmdDel = new CommandRequest_DeleteFileFromMyList(v.MyListID); cmdDel.Save(); } List <SVR_AnimeEpisode> eps = v?.GetAnimeEpisodes()?.Where(a => a != null).ToList(); eps?.DistinctBy(a => a.AnimeSeriesID).Select(a => a.GetAnimeSeries()).ToList().ForEach(seriesToUpdate.Add); using (var transaction = session.BeginTransaction()) { RepoFactory.VideoLocalPlace.DeleteWithOpenTransaction(session, this); RepoFactory.VideoLocal.DeleteWithOpenTransaction(session, v); dupFiles?.ForEach(a => RepoFactory.DuplicateFile.DeleteWithOpenTransaction(session, a)); transaction.Commit(); } } else { using (var transaction = session.BeginTransaction()) { RepoFactory.VideoLocalPlace.DeleteWithOpenTransaction(session, this); dupFiles?.ForEach(a => RepoFactory.DuplicateFile.DeleteWithOpenTransaction(session, a)); transaction.Commit(); } } }
public bool RefreshMediaInfo() { try { logger.Trace("Getting media info for: {0}", FullServerPath ?? VideoLocal_Place_ID.ToString()); Media m = null; List <Azure_Media> webmedias = AzureWebAPI.Get_Media(VideoLocal.ED2KHash); if (webmedias != null && webmedias.Count > 0 && webmedias.FirstOrDefault(a => a != null) != null) { m = webmedias.FirstOrDefault(a => a != null).ToMedia(); } if (m == null && FullServerPath != null) { string name = (ImportFolder?.CloudID == null) ? FullServerPath.Replace("/", "\\") : ((IProvider)null).ReplaceSchemeHost(((IProvider)null).ConstructVideoLocalStream(0, VideoLocalID.ToString(), "file", false)); m = MediaConvert.Convert(name, GetFile()); //Mediainfo should have libcurl.dll for http if (string.IsNullOrEmpty(m?.Duration)) { m = null; } if (m != null) { AzureWebAPI.Send_Media(VideoLocal.ED2KHash, m); } } if (m != null) { SVR_VideoLocal info = VideoLocal; FillVideoInfoFromMedia(info, m); m.Id = VideoLocalID.ToString(); List <Stream> subs = SubtitleHelper.GetSubtitleStreams(this); if (subs.Count > 0) { m.Parts[0].Streams.AddRange(subs); } foreach (Part p in m.Parts) { p.Id = null; p.Accessible = "1"; p.Exists = "1"; bool vid = false; bool aud = false; bool txt = false; foreach (Stream ss in p.Streams.ToArray()) { if (ss.StreamType == "1" && !vid) { vid = true; } if (ss.StreamType == "2" && !aud) { aud = true; ss.Selected = "1"; } if (ss.StreamType == "3" && !txt) { txt = true; ss.Selected = "1"; } } } info.Media = m; return(true); } logger.Error($"File {FullServerPath ?? VideoLocal_Place_ID.ToString()} does not exist, unable to read media information from it"); } catch (Exception e) { logger.Error($"Unable to read the media information of file {FullServerPath ?? VideoLocal_Place_ID.ToString()} ERROR: {e}"); } return(false); }