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) { // map from the DTO var note = dto_note.ToTomboyNote(); 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; } }
public object Post(PutNotesRequest request) { return(Put(request)); }
public object Put(PutNotesRequest request) { try { // check if we need to include the note body bool notes_as_html = false; string as_html = Request.GetParam("notes_as_html"); if (!string.IsNullOrEmpty(as_html) && !bool.TryParse(as_html, out notes_as_html)) { throw new InvalidRequestDtoException() { ErrorMessage = "unable to parse parameter notes_as_html to boolean" } } ; using (var note_repo = GetNotes()) { // 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 bool notes_were_deleted_or_uploaded = false; foreach (var dto_note in request.Notes) { notes_were_deleted_or_uploaded = true; // map from the DTO if (notes_as_html) { dto_note.Text = dto_note.Text.ToTomboyXml(); } var note = dto_note.ToTomboyNote(); 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); } } var notes_to_return = NotesService.GetStoredNotes(note_repo); if (notes_were_deleted_or_uploaded) { note_repo.Manifest.LastSyncRevision = new_sync_rev; note_repo.Manifest.LastSyncDate = DateTime.UtcNow; 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; } }