private static SynchronizationResult SyncPrimaryRoot( Library library, bool isWebSync, SyncLog syncLog, CancellationToken cancellationToken) { var synchronizer = new SynchronizationHelper(); synchronizer.FileSynchronized += syncLog.OnFileSynchronized; synchronizer.FolderSynchronized += syncLog.OnFolderSynchronized; var whiteListFolderNames = GetSyncedSpecialFolders(library, isWebSync); synchronizer.FolderSynchronizing += (o, e) => { e.Cancel = whiteListFolderNames.Contains(Path.GetFileName(e.DestinationFilePath)); }; synchronizer.FileSynchronizing += (o, e) => { if (cancellationToken.IsCancellationRequested) synchronizer.Abort(SynchronizationResult.AbortedDueToShutDown); }; synchronizer.SynchronizationCompleting += (o, e) => { if (e.Result != SynchronizationResult.Completed) syncLog.AbortLoging(); }; var filesWhiteListItems = library.Pages .SelectMany(p => p.AllLinks) .OfType<LibraryFileLink>() .Where(link => link.DataSourceId == library.DataSourceId) .Select(link => link.FullPath) .ToList(); filesWhiteListItems.Add(Path.Combine(library.Path, Constants.LocalStorageFileName)); if (isWebSync) { filesWhiteListItems.Add(Path.Combine(library.Path, Constants.LibrariesJsonFileName)); filesWhiteListItems.Add(Path.Combine(library.Path, Constants.ShortLibraryInfoFileName)); } var destinationPath = GetLibrarySyncDestinationPath(library, isWebSync); var syncOptions = new SynchronizationOptions( new DirectoryInfo(library.Path), new DirectoryInfo(destinationPath), true); syncOptions.FilterList = SyncFilterList.Create(filesWhiteListItems, SyncFilterType.ByWhiteList); if (!Directory.Exists(destinationPath)) synchronizer.CreateFolder(destinationPath); return synchronizer.SynchronizeFolder(syncOptions); }
private static SynchronizationResult SyncSpecialFolder( string specialFolderPath, string destinationFolderPath, SyncLog syncLog, CancellationToken cancellationToken) { var synchronizer = new SynchronizationHelper(); synchronizer.FileSynchronized += syncLog.OnFileSynchronized; synchronizer.FolderSynchronized += syncLog.OnFolderSynchronized; synchronizer.FileSynchronizing += (o, e) => { if (cancellationToken.IsCancellationRequested) synchronizer.Abort(SynchronizationResult.AbortedDueToShutDown); }; synchronizer.SynchronizationCompleting += (o, e) => { if (e.Result != SynchronizationResult.Completed) syncLog.AbortLoging(); }; if (!Directory.Exists(destinationFolderPath)) synchronizer.CreateFolder(destinationFolderPath); var syncOptions = new SynchronizationOptions( new DirectoryInfo(specialFolderPath), new DirectoryInfo(destinationFolderPath), true); return synchronizer.SynchronizeFolder(syncOptions); }