// at init time, we scan the stored changes in case we missed something while we were not running private void ProcessChanges() { var dt = CloudFolderEvents.GetLastEventTime(); if (dt == DateTime.MaxValue) { return; } Logger?.Log(TraceLevel.Info, "Processing events from " + dt); DateTime?last = null; var count = 0; foreach (var change in WebApi.EnumerateChanges(dt)) { StateSyncEntry entry; SyncFileSystemEventArgs e = null; switch (change.Type) { case WatcherChangeTypes.Deleted: entry = CloudFolderEvents.ToEntry(change.ItemId, change.ParentId); e = new SyncFileSystemEventArgs(SyncFileSystemEventType.Deleted, dt, entry); break; case WatcherChangeTypes.Created: entry = CloudFolderEvents.ToEntry(change.ItemId, change.ParentId); e = new SyncFileSystemEventArgs(SyncFileSystemEventType.Created, dt, entry); break; case WatcherChangeTypes.Changed: entry = CloudFolderEvents.ToEntry(change.ItemId, change.ParentId); e = new SyncFileSystemEventArgs(SyncFileSystemEventType.Changed, dt, entry); break; case WatcherChangeTypes.Renamed: entry = CloudFolderEvents.ToEntry(change.ItemId, change.ParentId); var oldEntry = CloudFolderEvents.ToEntry(change.ItemId, change.ParentId); oldEntry.FileName = change.OldName; e = new SyncFileSystemEventArgs(SyncFileSystemEventType.Moved, dt, entry, oldEntry); break; } if (e != null) { OnEvent(e); count++; } last = change.CreationTimeUtc; } if (last.HasValue) { CloudFolderEvents.SetLastEventTime(last.Value); } Logger?.Log(TraceLevel.Info, "Events processed. " + count + " event(s) created."); }
// raise an event to ShellBoost synchronization internal void OnEvent(SyncFileSystemEventArgs e) => ((EventHandler <SyncFileSystemEventArgs>)_events[_eventEvent])?.Invoke(this, e);