示例#1
0
        public void SyncFolderPair(SyncTask curTask, bool disablePrompt)
        {
            try
            {
                Logger.WriteSyncLog(_metaDataDir, curTask.Name, true);
                this.NotifyUIs("Analyzing " + curTask.Name + "...");

                Detector detector = new Detector(_metaDataDir, curTask);
                detector.CompareFolders();

                if (!detector.IsSynchronized())
                {
                    if (!CheckSufficientDiskSpace(curTask.Source.Substring(0, 1), detector.TgtDirtySize, disablePrompt) ||
                            !CheckSufficientDiskSpace(curTask.Target.Substring(0, 1), detector.SrcDirtySize, disablePrompt))
                    {
                        throw new Exception("Insufficient disk space");
                    }

                    Reconciler reconciler = new Reconciler(detector.SourceList, detector.TargetList, curTask, _metaDataDir);
                    this.NotifyUIs("Synchronizing " + curTask.Name + "...");

                    if (curTask.TypeOfSync)
                    {
                        reconciler.Sync();
                        SyncMetaData.WriteMetaData(_metaDataDir + @"\" + curTask.Name + ".meta", reconciler.UpdatedList);
                    }
                    else
                    {
                        reconciler.BackupSource(detector.BackupFiles);
                        SyncMetaData.WriteMetaData(_metaDataDir + @"\" + curTask.Name + ".bkp", detector.BackupFiles);
                    }
                }

                this.UpdateSyncTaskResult(curTask, "Successful");
            }
            catch (Exception e)
            {
                Logger.WriteErrorLog(e.Message);
                this.UpdateSyncTaskResult(curTask, "Unsuccessful");
            }
            finally
            {
                Logger.WriteSyncLog(_metaDataDir, curTask.Name, false);
            }

            this.UpdateSyncTaskTime(curTask, DateTime.Now.ToString());
        }