| 386 | } |
| 387 | |
| 388 | func fullSyncNote(tx *database.DB, n client.SyncFragNote) error { |
| 389 | var localNote database.Note |
| 390 | err := tx.QueryRow("SELECT body, usn, book_uuid, dirty, deleted FROM notes WHERE uuid = ?", n.UUID). |
| 391 | Scan(&localNote.Body, &localNote.USN, &localNote.BookUUID, &localNote.Dirty, &localNote.Deleted) |
| 392 | if err != nil && err != sql.ErrNoRows { |
| 393 | return errors.Wrapf(err, "getting local note %s", n.UUID) |
| 394 | } |
| 395 | |
| 396 | // if note exists in the server and does not exist in the client, insert the note. |
| 397 | if err == sql.ErrNoRows { |
| 398 | note := database.NewNote(n.UUID, n.BookUUID, n.Body, n.AddedOn, n.EditedOn, n.USN, n.Deleted, false) |
| 399 | |
| 400 | if err := note.Insert(tx); err != nil { |
| 401 | return errors.Wrapf(err, "inserting note with uuid %s", n.UUID) |
| 402 | } |
| 403 | } else if n.USN > localNote.USN { |
| 404 | if err := mergeNote(tx, n, localNote); err != nil { |
| 405 | return errors.Wrap(err, "merging local note") |
| 406 | } |
| 407 | } |
| 408 | |
| 409 | return nil |
| 410 | } |
| 411 | |
| 412 | func syncDeleteNote(tx *database.DB, noteUUID string) error { |
| 413 | var localUSN int |