'Called during book matching when a book on the device is matched with
a book in calibre\'s db. The method is responsible for syncronizing
data from the device to calibre\'s db (if needed).
The method must return a two-value tuple. The first value is a set of
calibre book ids changed if calibre\'s database was changed or None if the
database was not changed. If the first value is an empty set then the
metadata for the book on the device is updated with calibre\'s metadata
and given back to the device, but no GUI refresh of that book is done.
This is useful when the calibre data is correct but must be sent to the
device.
The second value is itself a 2-value tuple. The first value in the tuple
specifies whether a book format should be sent to the device. The intent
is to permit verifying that the book on the device is the same as the
book in calibre. This value must be None if no book is to be sent,
otherwise return the base file name on the device (a string like
foobar.epub). Be sure to include the extension in the name. The device
subsystem will construct a send_books job for all books with not- None
returned values. Note: other than to later retrieve the extension, the
name is ignored in cases where the device uses a template to generate
the file name, which most do. The second value in the returned tuple
indicated whether the format is future-dated. Return True if it is,
otherwise return False. calibre will display a dialog to the user
listing all future dated books.
Extremely important: this method is called on the GUI thread. It must
be threadsafe with respect to the device manager\'s thread.
book_id: the calibre id for the book in the database.
book_metadata: the Metadata object for the book coming from the device.
first_call: True if this is the first call during a sync, False otherwise'

def synchronize_with_db(self, db, book_id, book_metadata, first_call):

    return (None, (None, False))
