public SynchronizedFolder(RepoInfo repoInfo, RepoBase repo, IActivityListener activityListener)
{
this.activityListener = activityListener;
if (null == repoInfo || null == repo)
{
throw new ArgumentNullException("repoInfo");
}
this.repo = repo;
this.repoInfo = repoInfo;
enabled = this.repoInfo.IsSuspended;
// Database is the user's AppData/Roaming
database = new Database.Database(repoInfo.CmisDatabase, repo.LocalPath, repoInfo.RemotePath);
// Get path on remote repository.
remoteFolderPath = repoInfo.RemotePath;
if (Logger.IsInfoEnabled)
{
foreach (string ignoredFolder in repoInfo.getIgnoredPaths())
{
Logger.Info("The folder \"" + ignoredFolder + "\" will be ignored");
}
}
syncWorker = new BackgroundWorker();
syncWorker.WorkerSupportsCancellation = true;
syncWorker.DoWork += new DoWorkEventHandler(
delegate(Object o, DoWorkEventArgs args)
{
bool syncFull = (bool)args.Argument;
try
{
Sync(syncFull);
}
catch (OperationCanceledException e)
{
Logger.Info(e.Message);
}
catch (CmisPermissionDeniedException e)
{
repo.OnSyncError(new PermissionDeniedException("Authentication failed.", e));
}
catch (Exception e)
{
repo.OnSyncError(new BaseException(e));
}
finally
{
SyncComplete(syncFull);
}
}
);
}