| 303 | } |
| 304 | |
| 305 | func stepSyncBook(tx *database.DB, b client.SyncFragBook) error { |
| 306 | var localUSN int |
| 307 | var dirty bool |
| 308 | err := tx.QueryRow("SELECT usn, dirty FROM books WHERE uuid = ?", b.UUID).Scan(&localUSN, &dirty) |
| 309 | if err != nil && err != sql.ErrNoRows { |
| 310 | return errors.Wrapf(err, "getting local book %s", b.UUID) |
| 311 | } |
| 312 | |
| 313 | // if book exists in the server and does not exist in the client |
| 314 | if err == sql.ErrNoRows { |
| 315 | if e := mergeBook(tx, b, modeInsert); e != nil { |
| 316 | return errors.Wrapf(e, "resolving book") |
| 317 | } |
| 318 | |
| 319 | return nil |
| 320 | } |
| 321 | |
| 322 | if e := mergeBook(tx, b, modeUpdate); e != nil { |
| 323 | return errors.Wrapf(e, "resolving book") |
| 324 | } |
| 325 | |
| 326 | return nil |
| 327 | } |
| 328 | |
| 329 | func mergeNote(tx *database.DB, serverNote client.SyncFragNote, localNote database.Note) error { |
| 330 | var bookDeleted bool |