private void _mediaPRIVerified(object o, MediaEventArgs e) { var sec = MediaDirectorySEC as ServerDirectory; var pri = MediaDirectoryPRI as ServerDirectory; if (sec != null && pri != null && sec != pri && sec.IsInitialized && pri.IsInitialized) { ServerMedia sECMedia = sec.FindMediaFirst(sm => e.Media.FileSize == sm.FileSize && e.Media.FileName == sm.FileName && sm.FileExists()) as ServerMedia; if (e.Media.MediaStatus == TMediaStatus.Available) { if (sECMedia == null) { FileManager.Queue(new FileOperation { Kind = TFileOperationKind.Copy, SourceMedia = e.Media, DestDirectory = sec }, false); } else { sECMedia.CloneMediaProperties(e.Media); sECMedia.MediaGuid = e.Media.MediaGuid; sECMedia.ReVerify(); } } } }
private void _mediaPRIRemoved(object o, MediaEventArgs e) { if (MediaDirectorySEC != null && MediaDirectorySEC != MediaDirectoryPRI && MediaDirectorySEC.IsInitialized) { var mediaToDelete = ((WatcherDirectory)MediaDirectorySEC).FindMediaByMediaGuid(e.Media.MediaGuid); if (mediaToDelete != null && mediaToDelete.FileExists()) { var operation = new FileOperation(_fileManager) { Kind = TFileOperationKind.Delete, Source = mediaToDelete }; operation.Success += (sender, args) => { foreach (var ingestDirectory in IngestDirectories) { if (((IngestDirectory)ingestDirectory).FindMediaByMediaGuid(operation.Source.MediaGuid) is IngestMedia media) { media.IngestStatus = TIngestStatus.Unknown; } } }; FileManager.Queue(operation); } } }
private void _mediaPRIVerified(object o, MediaEventArgs e) { if (e.Media.MediaStatus != TMediaStatus.Available) { return; } if (!(MediaDirectorySEC is ServerDirectory sec) || !(MediaDirectoryPRI is ServerDirectory pri) || sec == pri || !sec.IsInitialized || !pri.IsInitialized) { return; } var sEcMedia = sec.FindMediaByMediaGuid(e.Media.MediaGuid); if (sEcMedia != null) { return; } sEcMedia = sec.FindMediaFirst(sm => e.Media.FileSize == sm.FileSize && e.Media.FileName == sm.FileName && sm.FileExists()) as MediaBase; if (sEcMedia == null) { FileManager.Queue(new FileOperation(_fileManager) { Kind = TFileOperationKind.Copy, Source = e.Media, DestDirectory = sec }, false); } else { sEcMedia.CloneMediaProperties(e.Media); sEcMedia.MediaGuid = e.Media.MediaGuid; sEcMedia.ReVerify(); } }
private void DeleteExtraSecMedia(ServerDirectory pri, ServerDirectory sec) { var secMediaList = sec.GetAllFiles(); foreach (var secMedia in secMediaList) { if (pri.FindMediaByMediaGuid(secMedia.MediaGuid) == null) { FileManager.Queue(new DeleteOperation { Source = secMedia }); } } var duplicatesList = secMediaList .Where(m => secMediaList.FirstOrDefault(d => d.MediaGuid == m.MediaGuid && ((ServerMedia)d).IdPersistentMedia != ((ServerMedia)m).IdPersistentMedia) != null) .Select(m => m.MediaGuid) .Distinct(); foreach (var mediaGuid in duplicatesList) { sec.FindMediaList(m => m.MediaGuid == mediaGuid) .Skip(1).ToList() .ForEach(m => m.Delete()); } }
private void _mediaPRIRemoved(object o, MediaEventArgs e) { if (MediaDirectorySEC != null && MediaDirectorySEC != MediaDirectoryPRI && MediaDirectorySEC.IsInitialized) { var mediaToDelete = ((WatcherDirectory)MediaDirectorySEC).FindMediaByMediaGuid(e.Media.MediaGuid); if (mediaToDelete != null && mediaToDelete.FileExists()) { var operation = new DeleteOperation { Source = mediaToDelete }; if (mediaToDelete.Directory is ServerDirectory serverDirectory) { operation.Success += (sender, args) => { foreach (var ingestDirectory in IngestDirectories) { if (((IngestDirectory)ingestDirectory).FindMediaByMediaGuid(operation.Source.MediaGuid) is IngestMedia ingestMedia) { ingestMedia.NotifyIngestStatusUpdated(serverDirectory, TIngestStatus.Unknown); } } } } ; FileManager.Queue(operation); } } }
private void _mediaPRIRemoved(object o, MediaEventArgs e) { if (MediaDirectorySEC != null && MediaDirectorySEC != MediaDirectoryPRI && MediaDirectorySEC.IsInitialized) { IMedia mediaToDelete = ((MediaDirectory)MediaDirectorySEC).FindMediaByMediaGuid(e.Media.MediaGuid); if (mediaToDelete != null && mediaToDelete.FileExists()) { FileManager.Queue(new FileOperation { Kind = TFileOperationKind.Delete, SourceMedia = mediaToDelete }, false); } } }
public void CopyMediaToPlayout(IEnumerable <IMedia> mediaList, bool toTop) { foreach (IMedia sourceMedia in mediaList) { IServerDirectory destDir = MediaDirectoryPRI != null && MediaDirectoryPRI.DirectoryExists() ? MediaDirectoryPRI : MediaDirectoryPRV != null && MediaDirectoryPRV.DirectoryExists() ? MediaDirectoryPRV : null; if (sourceMedia is PersistentMedia && destDir != null && destDir != sourceMedia.Directory) { _fileManager.Queue(new FileOperation() { Kind = TFileOperationKind.Copy, SourceMedia = sourceMedia, DestDirectory = destDir }, toTop); } } }
private void CopyMissingMediaPriToSec(ServerDirectory pri, ServerDirectory sec) { Logger.Debug("SynchronizeMediaSecToPri started"); var pRiMediaList = pri.GetAllFiles(); foreach (var pRImedia in pRiMediaList) { if (pRImedia.MediaStatus != TMediaStatus.Available || !pRImedia.FileExists()) { continue; } var secMedia = sec.FindMediaByMediaGuid(pRImedia.MediaGuid); if (secMedia != null && secMedia.FileExists()) { continue; } if (secMedia == null) { secMedia = (ServerMedia)sec.FindMediaFirst(m => m.FileSize == pRImedia.FileSize && m.FileName == pRImedia.FileName && m.LastUpdated.DateTimeEqualToDays(pRImedia.LastUpdated) && (!pri.IsRecursive || !sec.IsRecursive || string.Equals(pRImedia.Folder, m.Folder, StringComparison.OrdinalIgnoreCase)) ); } if (secMedia?.FileExists() == true) { secMedia.CloneMediaProperties(pRImedia); sec.UpdateMediaGuid(secMedia, pRImedia.MediaGuid); secMedia.Verify(false); } else { FileManager.Queue(new CopyOperation { Source = pRImedia, DestDirectory = sec, Dest = secMedia }); } } }
private MediaDeleteResult _deleteMedia(IMedia media, bool forceDelete) { if (forceDelete) { FileManager.Queue(new DeleteOperation { Source = media }); return(MediaDeleteResult.NoDeny); } else { var reason = media is PersistentMedia pm?_engine.CanDeleteMedia(pm) : MediaDeleteResult.NoDeny; if (reason.Result == MediaDeleteResult.MediaDeleteResultEnum.Success) { FileManager.Queue(new DeleteOperation { Source = media }); } return(reason); } }
private void _mediaPRIVerified(object o, MediaEventArgs e) { if (e.Media.MediaStatus != TMediaStatus.Available) { return; } if (!(MediaDirectorySEC is ServerDirectory sec) || !(MediaDirectoryPRI is ServerDirectory pri) || sec == pri || !sec.IsInitialized || !pri.IsInitialized) { return; } _engine.NotifyMediaVerified(e); var sEcMedia = sec.FindMediaByMediaGuid(e.Media.MediaGuid); if (sEcMedia != null) { return; } sEcMedia = sec.FindMediaFirst(sm => e.Media.FileSize == sm.FileSize && e.Media.FileName == sm.FileName && sm.FileExists()) as MediaBase; if (sEcMedia == null) { FileManager.Queue(new FileOperation(_fileManager) { Kind = TFileOperationKind.Copy, Source = e.Media, DestDirectory = sec }); } else { sEcMedia.CloneMediaProperties(e.Media); sec.UpdateMediaGuid(sEcMedia, e.Media.MediaGuid); sEcMedia.MediaStatus = TMediaStatus.Unknown; sEcMedia.IsVerified = false; ThreadPool.QueueUserWorkItem(s => sEcMedia.Verify(false)); } }
public void Export(IEnumerable <MediaExportDescription> exportList, bool asSingleFile, string singleFilename, IIngestDirectory directory, TmXFAudioExportFormat mXFAudioExportFormat, TmXFVideoExportFormat mXFVideoExportFormat) { if (!Engine.HaveRight(EngineRight.MediaExport)) { return; } if (asSingleFile) { FileManager.Queue(new ExportOperation { Sources = exportList, DestProperties = new MediaProxy { FileName = singleFilename, VideoFormat = Engine.VideoFormat, MediaName = Path.GetFileNameWithoutExtension(singleFilename) }, DestDirectory = directory as IngestDirectory, MXFAudioExportFormat = mXFAudioExportFormat, MXFVideoExportFormat = mXFVideoExportFormat }); } else { foreach (MediaExportDescription e in exportList) { _export(e, directory, mXFAudioExportFormat, mXFVideoExportFormat); } } }
public void CopyMediaToPlayout(IEnumerable <IMedia> mediaList) { var destDir = MediaDirectoryPRI != null && MediaDirectoryPRI.DirectoryExists? (ServerDirectory)MediaDirectoryPRI : MediaDirectoryPRV != null && MediaDirectoryPRV.DirectoryExists? (ServerDirectory)MediaDirectoryPRV : throw new ApplicationException("No ServerDirectory available to copy media to"); foreach (var sourceMedia in mediaList) { if (destDir.FindMediaByMediaGuid(sourceMedia.MediaGuid) != null) { continue; } if (!(sourceMedia is MediaBase media)) { throw new ApplicationException("Invalid type provided"); } if (sourceMedia is PersistentMedia && destDir != null && destDir != media.Directory) { FileManager.Queue(new CopyOperation { Source = sourceMedia, DestDirectory = destDir }); } } }
private void _export(MediaExportDescription export, IIngestDirectory directory, TmXFAudioExportFormat mXFAudioExportFormat, TmXFVideoExportFormat mXFVideoExportFormat) { FileManager.Queue(new ExportOperation { Sources = new[] { export }, DestProperties = export.Media, StartTC = export.StartTC, Duration = export.Duration, AudioVolume = export.AudioVolume, DestDirectory = directory as IngestDirectory, MXFAudioExportFormat = mXFAudioExportFormat, MXFVideoExportFormat = mXFVideoExportFormat }); }