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();
                    }
                }
            }
        }
Beispiel #2
0
 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);
         }
     }
 }
Beispiel #3
0
        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();
            }
        }
Beispiel #4
0
        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());
            }
        }
Beispiel #5
0
 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);
         }
     }
 }
Beispiel #8
0
        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
                    });
                }
            }
        }
Beispiel #9
0
        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);
            }
        }
Beispiel #10
0
        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));
            }
        }
Beispiel #11
0
        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);
                }
            }
        }
Beispiel #12
0
        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
                    });
                }
            }
        }
Beispiel #13
0
 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
     });
 }