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()); } }
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"); }
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"); }
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(); }
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 }); } } }
public PlayoutServer() { MediaDirectory = new ServerDirectory(this); AnimationDirectory = new AnimationDirectory(this); }