예제 #1
0
        public object Put(PutNotesRequest request)
        {
            try {
                using (var note_repo = GetNotes (request.Username)) {

                    // constraint taken from snowy source code at http://git.gnome.org/browse/snowy/tree/api/handlers.py:143
                    var new_sync_rev = note_repo.Manifest.LastSyncRevision + 1;

                    // TODO LatestSyncRevision is not correctly SERIALIZED
                    Logger.DebugFormat ("client sent LatestSyncRevision: {0}", request.LatestSyncRevision);

                    // TODO sanitize LatestSyncRevision sent by client - we don't need it to update notes
                    // but a wrong LatestSyncRevision may be an indicator for a bug in the client

                    //if (new_sync_rev != note_repo.Manifest.LatestSyncRevision + 1)
                    //	throw new Exception ("Sync revisions differ by more than one, sth went wrong");

                    foreach (var dto_note in request.Notes) {
                        var note = new Note ("note://tomboy/" + dto_note.Guid);
                        // map from the DTO
                        note.PopulateWith (dto_note);

                        if (dto_note.Command == "delete") {
                            note_repo.Engine.DeleteNote (note);
                        } else {
                            // track the revision of the note
                            note_repo.Manifest.NoteRevisions [dto_note.Guid] = (int)new_sync_rev;
                            note_repo.Engine.SaveNote (note, false);
                        }
                    }

                    // only update the sync revision if changes were sent
                    if (request.Notes.Count > 0)
                        note_repo.Manifest.LastSyncRevision = new_sync_rev;

                    var notes_to_return = NotesService.GetStoredNotes (note_repo);
                    notes_to_return.LatestSyncRevision = new_sync_rev;
                    return notes_to_return;
                }
            } catch (Exception e) {
                // log the error and rethrow
                Logger.DebugFormat ("CAUGHT EXCEPTION: {0} {1}", e.Message, e.StackTrace);
                throw e;
            }
        }
예제 #2
0
 public object Post(PutNotesRequest request)
 {
     return Put (request);
 }