Exemplo n.º 1
0
        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();
                    }
                }
            }
        }
Exemplo n.º 2
0
        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");
                    }
                });
            }
        }