コード例 #1
0
        /// <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());
            }
        }