// 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);