private bool DelayEventIfRetryCountPositive(AbstractFolderEvent fileOrFolderEvent) { if (fileOrFolderEvent.RetryCount > 0) { this.retryEvents.Add(fileOrFolderEvent); return true; } return false; }
private bool CouldLocalObjectBeAccumulated(AbstractFolderEvent e) { if (e == null) { return false; } else if(e.Remote == MetaDataChangeType.DELETED) { return false; } else if (e is FileEvent) { return (e as FileEvent).LocalFile == null; } else if (e is FolderEvent) { return (e as FolderEvent).LocalFolder == null; } else { return false; } }
public void SetUp() { this.localPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); this.localFolder = new DirectoryInfo(this.localPath); this.localFolder.Create(); this.localSubFolder = new DirectoryInfo(Path.Combine(this.localFolder.FullName, Path.GetRandomFileName())); this.localSubFolder.Create(); this.localFile = new FileInfo(Path.Combine(this.localFolder.FullName, Path.GetRandomFileName())); using (this.localFile.Create()) { } this.queue = new Mock<ISyncEventQueue>(); this.returnedFileEvent = null; this.returnedFolderEvent = null; }
private void Solve(ISolver s, AbstractFolderEvent e) { using (var activity = new ActivityListenerResource(this.activityListener)) { if (e is FolderEvent) { s.Solve((e as FolderEvent).LocalFolder, (e as FolderEvent).RemoteFolder, ContentChangeType.NONE, ContentChangeType.NONE); } else if (e is FileEvent) { s.Solve((e as FileEvent).LocalFile, (e as FileEvent).RemoteFile, (e as FileEvent).LocalContent, (e as FileEvent).RemoteContent); } } }
private void DoHandle(AbstractFolderEvent actualEvent) { SituationType localSituation = this.LocalSituation.Analyse(this.storage, actualEvent); SituationType remoteSituation = this.RemoteSituation.Analyse(this.storage, actualEvent); ISolver solver = this.Solver[(int)localSituation, (int)remoteSituation]; if (solver == null) { throw new NotImplementedException(string.Format("Solver for LocalSituation: {0}, and RemoteSituation {1} not implemented", localSituation, remoteSituation)); } Stopwatch watch = Stopwatch.StartNew(); this.Solve(solver, actualEvent); watch.Stop(); Logger.Debug(string.Format("Solver {0} took {1} ms", solver.GetType(), watch.ElapsedMilliseconds)); }
public void HandleFSFileAddedEvents() { this.queue.Setup(q => q.AddEvent(It.IsAny<AbstractFolderEvent>())) .Callback((ISyncEvent f) => this.returnedFileEvent = f as AbstractFolderEvent); var watcher = new WatcherConsumer(this.queue.Object); var fileCreatedFSEvent = new FSEvent(WatcherChangeTypes.Created, this.localFile.FullName, false); Assert.True(watcher.Handle(fileCreatedFSEvent)); Assert.AreEqual(MetaDataChangeType.CREATED, this.returnedFileEvent.Local); Assert.AreEqual(ContentChangeType.CREATED, (this.returnedFileEvent as FileEvent).LocalContent); Assert.AreEqual(this.localFile.FullName, (this.returnedFileEvent as FileEvent).LocalFile.FullName); Assert.IsNull((this.returnedFileEvent as FileEvent).RemoteFile); Assert.AreEqual(MetaDataChangeType.NONE, (this.returnedFileEvent as FileEvent).Remote); Assert.AreEqual(ContentChangeType.NONE, (this.returnedFileEvent as FileEvent).RemoteContent); }
public void HandleFSFolderRenamedEvents() { string oldpath = Path.Combine(this.localFolder.FullName, Path.GetRandomFileName()); this.queue.Setup(q => q.AddEvent(It.IsAny<AbstractFolderEvent>())) .Callback((ISyncEvent f) => this.returnedFolderEvent = f as AbstractFolderEvent); var watcher = new WatcherConsumer(this.queue.Object); var folderRenamedFSEvent = new FSMovedEvent(oldpath, this.localFolder.FullName, true); Assert.True(watcher.Handle(folderRenamedFSEvent)); Assert.AreEqual(MetaDataChangeType.MOVED, this.returnedFolderEvent.Local); Assert.AreEqual(this.localFolder.FullName, (this.returnedFolderEvent as FolderEvent).LocalFolder.FullName); Assert.AreEqual(oldpath, (this.returnedFolderEvent as FolderMovedEvent).OldLocalFolder.FullName); Assert.IsNull((this.returnedFolderEvent as FolderMovedEvent).RemoteFolder); Assert.IsNull((this.returnedFolderEvent as FolderMovedEvent).OldRemoteFolderPath); Assert.AreEqual(MetaDataChangeType.NONE, (this.returnedFolderEvent as FolderEvent).Remote); }
public void HandleFSFolderRemovedEvents() { this.queue.Setup(q => q.AddEvent(It.IsAny<AbstractFolderEvent>())) .Callback((ISyncEvent f) => this.returnedFolderEvent = f as AbstractFolderEvent); var watcher = new WatcherConsumer(this.queue.Object); var folderRemovedFSEvent = new FSEvent(WatcherChangeTypes.Deleted, this.localFolder.FullName, true); Assert.True(watcher.Handle(folderRemovedFSEvent)); Assert.AreEqual(MetaDataChangeType.DELETED, this.returnedFolderEvent.Local); Assert.AreEqual(this.localFolder.FullName, (this.returnedFolderEvent as FolderEvent).LocalFolder.FullName); Assert.IsNull((this.returnedFolderEvent as FolderEvent).RemoteFolder); Assert.AreEqual(MetaDataChangeType.NONE, (this.returnedFolderEvent as FolderEvent).Remote); }
private IMappedObject GetStoredObject(AbstractFolderEvent e) { if (e is FolderEvent) { return this.storage.GetObjectByRemoteId((e as FolderEvent).RemoteFolder.Id); } else if (e is FileEvent) { return this.storage.GetObjectByRemoteId((e as FileEvent).RemoteFile.Id); } return null; }
private void AccumulateEvent(AbstractFolderEvent abstractFolderEvent, IMappedObject storedObject) { Logger.Debug("Accumulating: " + this.storage.GetLocalPath(storedObject)); if (abstractFolderEvent is FolderEvent) { (abstractFolderEvent as FolderEvent).LocalFolder = this.fsFactory.CreateDirectoryInfo(this.storage.GetLocalPath(storedObject)); } if (abstractFolderEvent is FileEvent) { (abstractFolderEvent as FileEvent).LocalFile = this.fsFactory.CreateFileInfo(this.storage.GetLocalPath(storedObject)); } }
private string GetRemoteObjectName(AbstractFolderEvent e) { if (e is FolderEvent) { return (e as FolderEvent).RemoteFolder.Name; } else if(e is FileEvent) { return (e as FileEvent).RemoteFile.Name; } else { throw new ArgumentException(); } }
private string GetParentId(AbstractFolderEvent e) { if (e is FolderEvent) { return (e as FolderEvent).RemoteFolder.ParentId; } else if (e is FileEvent) { return (e as FileEvent).RemoteFile.Parents[0].Id; } else { throw new ArgumentException(); } }