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