/// <summary> /// Synchronizes this client with the remote server. /// </summary> public void ClientSync() { // TODO(mlinder): Implement batching here. lock (sync) { var requests = new List <Action>(); // Add changes/inserts. NoteItem previous = null; foreach (NoteItem currentNote in (from Control c in Controls where c is NoteItem select c).Reverse()) { NoteItem note = currentNote; if (note.ClientSync()) { bool isNew = String.IsNullOrEmpty(note.RelatedTask.Id); requests.AddRange(GetSyncNoteRequest(note, previous, isNew)); } previous = note; } // Add deletes. foreach (NoteItem note in deletedNotes) { NoteItem noteb = note; if (note.RelatedTask != null && !String.IsNullOrEmpty(note.RelatedTask.Id)) { requests.Add(() => Program.Service.Tasks.Delete(taskList.Id, noteb.RelatedTask.Id).Execute()); } } deletedNotes.Clear(); // Execute all requests. requests.ForEach(action => action()); } }