Esempio n. 1
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());
            }
        }
Esempio n. 2
0
 public void Initialize(MediaManager mediaManager)
 {
     Debug.WriteLine(this, "CasparServer initialize");
     lock (this)
     {
         if (!_isInitialized)
         {
             MediaDirectory = new ServerDirectory(this, mediaManager)
             {
                 Folder = MediaFolder
             };
             if (!string.IsNullOrWhiteSpace(AnimationFolder))
             {
                 AnimationDirectory = new AnimationDirectory(this, mediaManager)
                 {
                     Folder = AnimationFolder
                 }
             }
             ;
             _casparDevice = new Svt.Caspar.CasparDevice()
             {
                 IsRecordingSupported = ServerType == TServerType.CasparTVP
             };
             _casparDevice.ConnectionStatusChanged += CasparDevice_ConnectionStatusChanged;
             _casparDevice.UpdatedChannels         += CasparDevice_UpdatedChannels;
             _casparDevice.UpdatedRecorders        += CasparDevice_UpdatedRecorders;
             Connect();
             _isInitialized = true;
         }
     }
 }
        public void Initialize()
        {
            Debug.WriteLine(this, "Begin initializing");
            Logger.Debug("Begin initializing");
            ArchiveDirectory      = this.LoadArchiveDirectory <ArchiveDirectory>(_engine.IdArchive);
            MediaDirectoryPRI     = (_engine.PlayoutChannelPRI == null) ? null : ((CasparServerChannel)_engine.PlayoutChannelPRI).Owner.MediaDirectory;
            MediaDirectorySEC     = (_engine.PlayoutChannelSEC == null) ? null : ((CasparServerChannel)_engine.PlayoutChannelSEC).Owner.MediaDirectory;
            MediaDirectoryPRV     = (_engine.PlayoutChannelPRV == null) ? null : ((CasparServerChannel)_engine.PlayoutChannelPRV).Owner.MediaDirectory;
            AnimationDirectoryPRI = (_engine.PlayoutChannelPRI == null) ? null : ((CasparServerChannel)_engine.PlayoutChannelPRI).Owner.AnimationDirectory;
            AnimationDirectorySEC = (_engine.PlayoutChannelSEC == null) ? null : ((CasparServerChannel)_engine.PlayoutChannelSEC).Owner.AnimationDirectory;
            AnimationDirectoryPRV = (_engine.PlayoutChannelPRV == null) ? null : ((CasparServerChannel)_engine.PlayoutChannelPRV).Owner.AnimationDirectory;
            IMediaDirectory[] initializationList = new IMediaDirectory[] { MediaDirectoryPRI, MediaDirectorySEC, MediaDirectoryPRV, AnimationDirectoryPRI, AnimationDirectorySEC, AnimationDirectoryPRV, ArchiveDirectory };
            foreach (MediaDirectory dir in initializationList.OfType <IMediaDirectory>().Distinct())
            {
                dir.Initialize();
            }
            if (ArchiveDirectory != null)
            {
                ArchiveDirectory.MediaDeleted += ArchiveDirectory_MediaDeleted;
            }

            ServerDirectory sdir = MediaDirectoryPRI as ServerDirectory;

            if (sdir != null)
            {
                sdir.MediaPropertyChanged += _serverMediaPropertyChanged;
                sdir.PropertyChanged      += _onServerDirectoryPropertyChanged;
                sdir.MediaSaved           += _onServerDirectoryMediaSaved;
                sdir.MediaVerified        += _mediaPRIVerified;
                sdir.MediaRemoved         += _mediaPRIRemoved;
            }
            sdir = MediaDirectorySEC as ServerDirectory;
            if (MediaDirectoryPRI != MediaDirectorySEC && sdir != null)
            {
                sdir.MediaPropertyChanged += _serverMediaPropertyChanged;
                sdir.PropertyChanged      += _onServerDirectoryPropertyChanged;
            }
            AnimationDirectory adir = AnimationDirectoryPRI as AnimationDirectory;

            if (adir != null)
            {
                adir.PropertyChanged      += _onAnimationDirectoryPropertyChanged;
                adir.MediaAdded           += _onAnimationDirectoryMediaAdded;
                adir.MediaRemoved         += _onAnimationDirectoryMediaRemoved;
                adir.MediaPropertyChanged += _onAnimationDirectoryMediaPropertyChanged;
            }
            adir = AnimationDirectorySEC as AnimationDirectory;
            if (adir != null)
            {
                adir.PropertyChanged += _onAnimationDirectoryPropertyChanged;
            }

            _loadIngestDirs(Path.Combine(Directory.GetCurrentDirectory(), ConfigurationManager.AppSettings["IngestFolders"]));
            _fileManager.VolumeReferenceLoudness = Convert.ToDecimal(_engine.VolumeReferenceLoudness);

            Debug.WriteLine(this, "End initializing");
            Logger.Debug("End initializing");
        }
Esempio n. 4
0
        public void Initialize()
        {
            Debug.WriteLine(this, "Begin initializing");
            Logger.Debug("Begin initializing");
            _fileManager.ReferenceLoudness = _engine.VolumeReferenceLoudness;
            ArchiveDirectory      = EngineController.Database.LoadArchiveDirectory <ArchiveDirectory>(this, _engine.IdArchive);
            MediaDirectoryPRI     = ((CasparServerChannel)_engine.PlayoutChannelPRI)?.Owner.MediaDirectory;
            MediaDirectorySEC     = ((CasparServerChannel)_engine.PlayoutChannelSEC)?.Owner.MediaDirectory;
            MediaDirectoryPRV     = ((CasparServerChannel)_engine.PlayoutChannelPRV)?.Owner.MediaDirectory;
            AnimationDirectoryPRI = ((CasparServerChannel)_engine.PlayoutChannelPRI)?.Owner.AnimationDirectory;
            AnimationDirectorySEC = ((CasparServerChannel)_engine.PlayoutChannelSEC)?.Owner.AnimationDirectory;
            AnimationDirectoryPRV = ((CasparServerChannel)_engine.PlayoutChannelPRV)?.Owner.AnimationDirectory;
            IMediaDirectory[] initializationList = { MediaDirectoryPRI, MediaDirectorySEC, MediaDirectoryPRV, AnimationDirectoryPRI, AnimationDirectorySEC, AnimationDirectoryPRV, ArchiveDirectory };
            foreach (var mediaDirectory in initializationList.Distinct())
            {
                (mediaDirectory as MediaDirectory)?.Initialize();
            }
            if (ArchiveDirectory != null)
            {
                ArchiveDirectory.MediaDeleted += ArchiveDirectory_MediaDeleted;
            }

            ServerDirectory sdir = MediaDirectoryPRI as ServerDirectory;

            if (sdir != null)
            {
                sdir.MediaPropertyChanged += _serverMediaPropertyChanged;
                sdir.PropertyChanged      += _onServerDirectoryPropertyChanged;
                sdir.MediaSaved           += _onServerDirectoryMediaSaved;
                sdir.MediaVerified        += _mediaPRIVerified;
                sdir.MediaRemoved         += _mediaPRIRemoved;
            }
            sdir = MediaDirectorySEC as ServerDirectory;
            if (MediaDirectoryPRI != MediaDirectorySEC && sdir != null)
            {
                sdir.MediaPropertyChanged += _serverMediaPropertyChanged;
                sdir.PropertyChanged      += _onServerDirectoryPropertyChanged;
                sdir.MediaSaved           += _onServerDirectoryMediaSaved;
            }
            if (AnimationDirectoryPRI is AnimationDirectory adir)
            {
                adir.PropertyChanged      += _onAnimationDirectoryPropertyChanged;
                adir.MediaAdded           += _onAnimationDirectoryMediaAdded;
                adir.MediaRemoved         += _onAnimationDirectoryMediaRemoved;
                adir.MediaPropertyChanged += _onAnimationDirectoryMediaPropertyChanged;
            }
            adir = AnimationDirectorySEC as AnimationDirectory;
            if (adir != null)
            {
                adir.PropertyChanged += _onAnimationDirectoryPropertyChanged;
            }

            _loadIngestDirs(Path.Combine(Directory.GetCurrentDirectory(), ConfigurationManager.AppSettings["IngestFolders"]));
            Debug.WriteLine(this, "End initializing");
            Logger.Debug("End initializing");
        }
Esempio n. 5
0
        protected override void DoDispose()
        {
            base.DoDispose();

            if (ArchiveDirectory != null)
            {
                ArchiveDirectory.MediaDeleted += ArchiveDirectory_MediaDeleted;
            }

            ServerDirectory sdir = MediaDirectoryPRI as ServerDirectory;

            if (sdir != null)
            {
                sdir.MediaPropertyChanged -= _serverMediaPropertyChanged;
                sdir.PropertyChanged      -= _onServerDirectoryPropertyChanged;
                sdir.MediaSaved           -= _onServerDirectoryMediaSaved;
                sdir.MediaVerified        -= _mediaPRIVerified;
                sdir.MediaRemoved         -= _mediaPRIRemoved;
            }
            sdir = MediaDirectorySEC as ServerDirectory;
            if (MediaDirectoryPRI != MediaDirectorySEC && sdir != null)
            {
                sdir.MediaPropertyChanged -= _serverMediaPropertyChanged;
                sdir.MediaSaved           -= _onServerDirectoryMediaSaved;
                sdir.PropertyChanged      -= _onServerDirectoryPropertyChanged;
            }
            AnimationDirectory adir = AnimationDirectoryPRI as AnimationDirectory;

            if (adir != null)
            {
                adir.PropertyChanged      -= _onAnimationDirectoryPropertyChanged;
                adir.MediaAdded           -= _onAnimationDirectoryMediaAdded;
                adir.MediaRemoved         -= _onAnimationDirectoryMediaRemoved;
                adir.MediaPropertyChanged -= _onAnimationDirectoryMediaPropertyChanged;
            }
            adir = AnimationDirectorySEC as AnimationDirectory;
            if (adir != null)
            {
                adir.PropertyChanged -= _onAnimationDirectoryPropertyChanged;
            }
            UnloadIngestDirs();
        }
Esempio n. 6
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
                    });
                }
            }
        }
Esempio n. 7
0
 public PlayoutServer()
 {
     MediaDirectory = new ServerDirectory(this);
     AnimationDirectory = new AnimationDirectory(this);
 }