Ejemplo n.º 1
0
        /// <summary>
        /// execute synchronisation
        /// </summary>
        public void ExecuteSync()
        {
            _ts = new CancellationTokenSource();
            _ct = _ts.Token;

            if (!Delimon.Win32.IO.Directory.Exists(_si.Link.Path1) || !Delimon.Win32.IO.Directory.Exists(_si.Link.Path2))
            {
                throw new DirectoryNotFoundException();
            }

            _si.Status = SyncStatus.FetchingElements;

            if (_si.Link.Direction == SyncDirection.To1)
            {
                Helper.FetchFilesInDirRecursively_OneWay(_si.Link.Path2, _si.Link.Path1, new MyDirInfo("", ""),
                                                         _si, (sfi) => { },
                                                         CheckInterrupt1);

                _si.Status = SyncStatus.DetectingChanges;

                foreach (MyFileInfo fi in DirTree.GetFiles(_si.DirTree))
                {
                    Helper.DoFileComparison_OneWay(_si.Link.Path2, _si.Link.Path1, fi.SyncFileInfo, CheckInterrupt1);
                }

                Helper.GetRemoveInfosOfDirRecursively_OneWay(_si.Link.Path2, _si.Link.Path1, new MyDirInfo("", ""),
                                                             _si, CheckInterrupt1);
            }
            else if (_si.Link.Direction == SyncDirection.To2)
            {
                Helper.FetchFilesInDirRecursively_OneWay(_si.Link.Path1, _si.Link.Path2, new MyDirInfo("", ""),
                                                         _si, (sfi) => { },
                                                         CheckInterrupt1);

                _si.Status = SyncStatus.DetectingChanges;

                foreach (MyFileInfo fi in DirTree.GetFiles(_si.DirTree))
                {
                    Helper.DoFileComparison_OneWay(_si.Link.Path2, _si.Link.Path1, fi.SyncFileInfo, CheckInterrupt1);
                }

                Helper.GetRemoveInfosOfDirRecursively_OneWay(_si.Link.Path1, _si.Link.Path2, new MyDirInfo("", ""),
                                                             _si, CheckInterrupt1);
            }
            else if (_si.Link.Direction == SyncDirection.TwoWay)
            {
                Helper.FetchElementsInDirRecursively_TwoWay(new MyDirInfo("", ""), _si,
                                                            (sfi) => { }, CheckInterrupt1);

                _si.Status = SyncStatus.DetectingChanges;

                Helper.FetchChangesInDirRecursively_TwoWay(_si.DirTree, CheckInterrupt1, null);
            }


            _si.Status = SyncStatus.CreatingFolders;
            CreateFolders(_si.DirTree);

            _si.Status = SyncStatus.ApplyingFileChanges;
            DoApplyFileChanges(_si.DirTree);

            _si.Status = SyncStatus.RemoveDirs;
            RemoveFolders(_si.DirTree);
        }