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 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 }); } } }