private static string Trace(GDriveData.Change change) { var list = new List <Tuple <string, object> >(); list.Add(new Tuple <string, object>("FileId", change.FileId)); list.Add(new Tuple <string, object>("ChangeType", change.ChangeType)); if (change.Removed.HasValue) { list.Add(new Tuple <string, object>("Removed", change.Removed.Value)); } if (change.Time.HasValue) { list.Add(new Tuple <string, object>("Time", change.Time.Value)); } if (change.File != null) { list.Add(new Tuple <string, object>("File.Name", change.File.Name)); list.Add(new Tuple <string, object>("File.MimeType", change.File.MimeType)); if (change.File.OriginalFilename != null) { list.Add(new Tuple <string, object>("File.OriginalFilename", change.File.OriginalFilename)); } if (change.File.Size.HasValue) { list.Add(new Tuple <string, object>("File.Size", change.File.Size.Value)); } if (change.File.Trashed.HasValue) { list.Add(new Tuple <string, object>("File.Trashed", change.File.Trashed.Value)); } if (change.File.Version.HasValue) { list.Add(new Tuple <string, object>("File.Version", change.File.Version.Value)); } if (change.File.Parents != null) { list.Add(new Tuple <string, object>("File.Parents", string.Join("|", change.File.Parents))); } if (change.File.CreatedTime.HasValue) { list.Add(new Tuple <string, object>("File.CreatedTime", change.File.CreatedTime.Value)); } if (change.File.ModifiedTime.HasValue) { list.Add(new Tuple <string, object>("File.ModifiedTime", change.File.ModifiedTime.Value)); } } return(string.Join(", ", list.Select(c => c.Item1 + "=" + c.Item2))); }
// return true to resynchronize root private void ProcessChange(GDriveData.Change change, EventHandler <SyncFileSystemEventArgs> eventHandler) { if (eventHandler == null) { return; } if (change.Type == "file") { Log(TraceLevel.Info, "Change " + Trace(change)); if ((change.File == null && change.Removed == true) || change.File?.Trashed == true) { eventHandler.Invoke(FileSystem, new SyncFileSystemEventArgs(SyncFileSystemEventType.Deleted, change.Time.Value, new StateSyncEntry { Id = change.FileId })); Log(TraceLevel.Info, "File with id '" + change.FileId + "' was deleted."); return; } if (change.File == null) { Log(TraceLevel.Warning, "Don't know what to do with a change without an associated file."); return; } if (change.File.Name != null && change.File.Name.EndsWith(FileSystem.UrlExt, StringComparison.OrdinalIgnoreCase)) { Log(TraceLevel.Warning, "File '" + change.File.Name + "' is a .url, skipped."); return; } var parentId = change.File.Parents?.FirstOrDefault(); eventHandler.Invoke(FileSystem, new SyncFileSystemEventArgs(SyncFileSystemEventType.Changed, change.Time.Value, new StateSyncEntry { Id = change.FileId, ParentId = parentId })); } }