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(); } } } }
public void SynchronizeMediaSecToPri(bool deleteNotExisted) { var pri = MediaDirectoryPRI as ServerDirectory; var sec = MediaDirectorySEC as ServerDirectory; if (pri != null && sec != null && pri != sec && pri.IsInitialized && sec.IsInitialized) { ThreadPool.QueueUserWorkItem(o => { lock (_lockSynchronizeMediaSecToPri) { if (!_isSynchronizedMediaSecToPri) { Debug.WriteLine(this, "SynchronizeMediaSecToPri started"); Logger.Debug("SynchronizeMediaSecToPri started"); try { var pRIMediaList = pri.GetFiles(); foreach (ServerMedia pRImedia in pRIMediaList) { if (pRImedia.MediaStatus == TMediaStatus.Available && pRImedia.FileExists()) { ServerMedia secMedia = (ServerMedia)sec.FindMediaByMediaGuid(pRImedia.MediaGuid); if (secMedia == null) { secMedia = (ServerMedia)sec.FindMediaFirst(m => m.FileExists() && m.FileSize == pRImedia.FileSize && m.FileName == pRImedia.FileName && m.LastUpdated.DateTimeEqualToDays(pRImedia.LastUpdated)); if (secMedia != null) { secMedia.CloneMediaProperties(pRImedia); secMedia.MediaGuid = pRImedia.MediaGuid; secMedia.Verify(); } else { _fileManager.Queue(new FileOperation() { Kind = TFileOperationKind.Copy, SourceMedia = pRImedia, DestDirectory = sec }); } } } } _isSynchronizedMediaSecToPri = true; } catch (Exception e) { Logger.Error(e, "SynchronizeMediaSecToPri exception"); } } if (deleteNotExisted) { try { var secMediaList = sec.GetFiles().ToList(); foreach (ServerMedia secMedia in secMediaList) { if ((ServerMedia)pri.FindMediaByMediaGuid(secMedia.MediaGuid) == null) { _fileManager.Queue(new FileOperation() { Kind = TFileOperationKind.Delete, SourceMedia = 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()); } } catch (Exception e) { Logger.Error(e, "SynchronizeMediaSecToPri on deleteNotExisted exception"); } } Logger.Debug("SynchronizeMediaSecToPri finished"); Debug.WriteLine(this, "SynchronizeMediaSecToPri finished"); } }); } }