Kindle driver: Add option to not overwrite existing page number (apnx) files on the device when sending books to the device

Kindle driver: Add option to allow customization of the page number (apnx) generation algorithm based on values in a custom column

Merge branch 'apnxfiles' of https://github.com/rpspringuel/calibre
This commit is contained in:
Kovid Goyal 2014-09-01 13:05:42 +05:30
commit 57641e03dc

View File

@ -323,16 +323,33 @@ class KINDLE2(KINDLE):
' store the page count of books, you can have calibre use that'
' information, instead of calculating a page count. Specify the'
' name of the custom column here, for example, #pages.'),
_('Custom column name to retrieve calculation method from') + ':::' + _(
'If you have a custom column in your library that you use to'
' store the preferred method for calculating the number of pages'
' for a book, you can have calibre use that method instead of the'
' default one selected above. Specify the name of the custom'
' column here, for example, #pagemethod.'),
_('Overwrite existing apnx on device') + ':::' + _(
'Uncheck this option to allow an apnx file existing on the device'
' to have priority over the version which calibre would send.'
' Since apnx files are usually deleted when a book is removed from'
' the Kindle, this is mostly useful when resending a book to the'
' device which is already on the device (e.g. after making a'
' modification.)'),
]
EXTRA_CUSTOMIZATION_DEFAULT = [
True,
'fast',
'',
'',
True,
]
OPT_APNX = 0
OPT_APNX_METHOD = 1
OPT_APNX_CUST_COL = 2
OPT_APNX_METHOD_COL = 3
OPT_APNX_OVERWRITE = 4
EXTRA_CUSTOMIZATION_CHOICES = {OPT_APNX_METHOD:{'fast', 'accurate', 'pagebreak'}}
# x330 on the PaperWhite
@ -456,13 +473,26 @@ class KINDLE2(KINDLE):
apnx_path = '%s.apnx' % os.path.join(path, filename)
apnx_builder = APNXBuilder()
try:
method = opts.extra_customization[self.OPT_APNX_METHOD]
apnx_builder.write_apnx(filepath, apnx_path, method=method, page_count=custom_page_count)
except:
print 'Failed to generate APNX'
import traceback
traceback.print_exc()
# ## Check to see if there is an existing apnx file on Kindle we should keep.
if opts.extra_customization[self.OPT_APNX_OVERWRITE] or not os.path.exists(apnx_path):
try:
method = opts.extra_customization[self.OPT_APNX_METHOD]
cust_col_name = opts.extra_customization[self.OPT_APNX_METHOD_COL]
if cust_col_name:
try:
temp = unicode(metadata.get(cust_col_name, 0))
if temp in self.EXTRA_CUSTOMIZATION_CHOICES[self.OPT_APNX_METHOD]:
method = temp
else:
print "Invalid method choice for this book, reverting to default."
except:
print 'Could not retrieve override method choice, reverting to default.'
print 'Generating apnx with', method
apnx_builder.write_apnx(filepath, apnx_path, method=method, page_count=custom_page_count)
except:
print 'Failed to generate APNX'
import traceback
traceback.print_exc()
class KINDLE_DX(KINDLE2):