mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
GR changes supporting ondevice
This commit is contained in:
parent
99b494fb7b
commit
2501e40e43
@ -33,7 +33,7 @@ class GenerateCatalogAction(InterfaceAction):
|
|||||||
show=True)
|
show=True)
|
||||||
|
|
||||||
# Calling gui2.tools:generate_catalog()
|
# Calling gui2.tools:generate_catalog()
|
||||||
ret = generate_catalog(self.gui, dbspec, ids, self.gui.device_manager.device)
|
ret = generate_catalog(self.gui, dbspec, ids, self.gui.device_manager)
|
||||||
if ret is None:
|
if ret is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -238,7 +238,7 @@ def fetch_scheduled_recipe(arg):
|
|||||||
|
|
||||||
return 'gui_convert', args, _('Fetch news from ')+arg['title'], fmt.upper(), [pt]
|
return 'gui_convert', args, _('Fetch news from ')+arg['title'], fmt.upper(), [pt]
|
||||||
|
|
||||||
def generate_catalog(parent, dbspec, ids, device):
|
def generate_catalog(parent, dbspec, ids, device_manager):
|
||||||
from calibre.gui2.dialogs.catalog import Catalog
|
from calibre.gui2.dialogs.catalog import Catalog
|
||||||
|
|
||||||
# Build the Catalog dialog in gui2.dialogs.catalog
|
# Build the Catalog dialog in gui2.dialogs.catalog
|
||||||
@ -252,9 +252,18 @@ def generate_catalog(parent, dbspec, ids, device):
|
|||||||
|
|
||||||
# Profile the connected device
|
# Profile the connected device
|
||||||
# Parallel initialization in calibre.library.cli:command_catalog()
|
# Parallel initialization in calibre.library.cli:command_catalog()
|
||||||
connected_device = { 'storage':None,'serial':None,'save_template':None,'name':None}
|
connected_device = {
|
||||||
|
'is_device_connected': device_manager.is_device_connected,
|
||||||
|
'kind': device_manager.connected_device_kind,
|
||||||
|
'name': None,
|
||||||
|
'save_template': None,
|
||||||
|
'serial': None,
|
||||||
|
'storage': None
|
||||||
|
}
|
||||||
|
|
||||||
if device:
|
if device_manager.is_device_connected:
|
||||||
|
device = device_manager.device
|
||||||
|
connected_device['name'] = device.gui_name
|
||||||
try:
|
try:
|
||||||
storage = []
|
storage = []
|
||||||
if device._main_prefix:
|
if device._main_prefix:
|
||||||
@ -263,11 +272,10 @@ def generate_catalog(parent, dbspec, ids, device):
|
|||||||
storage.append(os.path.join(device._card_a_prefix, device.EBOOK_DIR_CARD_A))
|
storage.append(os.path.join(device._card_a_prefix, device.EBOOK_DIR_CARD_A))
|
||||||
if device._card_b_prefix:
|
if device._card_b_prefix:
|
||||||
storage.append(os.path.join(device._card_b_prefix, device.EBOOK_DIR_CARD_B))
|
storage.append(os.path.join(device._card_b_prefix, device.EBOOK_DIR_CARD_B))
|
||||||
connected_device = { 'storage': storage,
|
connected_device['storage'] = storage
|
||||||
'serial': device.detected_device.serial if \
|
connected_device['serial'] = device.detected_device.serial if \
|
||||||
hasattr(device.detected_device,'serial') else None,
|
hasattr(device.detected_device,'serial') else None
|
||||||
'save_template': device.save_template(),
|
connected_device['save_template'] = device.save_template()
|
||||||
'name': device.gui_name}
|
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -67,6 +67,8 @@ class CSV_XML(CatalogPlugin):
|
|||||||
if opts.verbose:
|
if opts.verbose:
|
||||||
opts_dict = vars(opts)
|
opts_dict = vars(opts)
|
||||||
log("%s(): Generating %s" % (self.name,self.fmt))
|
log("%s(): Generating %s" % (self.name,self.fmt))
|
||||||
|
if opts.connected_device['is_device_connected']:
|
||||||
|
log(" connected_device: %s" % opts.connected_device['name'])
|
||||||
if opts_dict['search_text']:
|
if opts_dict['search_text']:
|
||||||
log(" --search='%s'" % opts_dict['search_text'])
|
log(" --search='%s'" % opts_dict['search_text'])
|
||||||
|
|
||||||
@ -81,7 +83,6 @@ class CSV_XML(CatalogPlugin):
|
|||||||
else:
|
else:
|
||||||
log(" Fields: %s" % opts_dict['fields'])
|
log(" Fields: %s" % opts_dict['fields'])
|
||||||
|
|
||||||
|
|
||||||
# If a list of ids are provided, don't use search_text
|
# If a list of ids are provided, don't use search_text
|
||||||
if opts.ids:
|
if opts.ids:
|
||||||
opts.search_text = None
|
opts.search_text = None
|
||||||
@ -888,302 +889,302 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
self.__totalSteps += 2
|
self.__totalSteps += 2
|
||||||
|
|
||||||
# Accessors
|
# Accessors
|
||||||
'''
|
if True:
|
||||||
@dynamic_property
|
'''
|
||||||
def xxxx(self):
|
@dynamic_property
|
||||||
def fget(self):
|
def xxxx(self):
|
||||||
return self.__
|
def fget(self):
|
||||||
def fset(self, val):
|
return self.__
|
||||||
self.__ = val
|
def fset(self, val):
|
||||||
return property(fget=fget, fset=fset)
|
self.__ = val
|
||||||
'''
|
return property(fget=fget, fset=fset)
|
||||||
|
'''
|
||||||
|
@dynamic_property
|
||||||
|
def authorClip(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__authorClip
|
||||||
|
def fset(self, val):
|
||||||
|
self.__authorClip = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def authors(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__authors
|
||||||
|
def fset(self, val):
|
||||||
|
self.__authors = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def basename(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__basename
|
||||||
|
def fset(self, val):
|
||||||
|
self.__basename = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def bookmarked_books(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__bookmarked_books
|
||||||
|
def fset(self, val):
|
||||||
|
self.__bookmarked_books = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def booksByAuthor(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__booksByAuthor
|
||||||
|
def fset(self, val):
|
||||||
|
self.__booksByAuthor = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def booksByDateRead(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__booksByDateRead
|
||||||
|
def fset(self, val):
|
||||||
|
self.__booksByDateRead = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def booksByTitle(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__booksByTitle
|
||||||
|
def fset(self, val):
|
||||||
|
self.__booksByTitle = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def booksByTitle_noSeriesPrefix(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__booksByTitle_noSeriesPrefix
|
||||||
|
def fset(self, val):
|
||||||
|
self.__booksByTitle_noSeriesPrefix = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def catalogPath(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__catalogPath
|
||||||
|
def fset(self, val):
|
||||||
|
self.__catalogPath = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def contentDir(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__contentDir
|
||||||
|
def fset(self, val):
|
||||||
|
self.__contentDir = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def currentStep(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__currentStep
|
||||||
|
def fset(self, val):
|
||||||
|
self.__currentStep = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def creator(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__creator
|
||||||
|
def fset(self, val):
|
||||||
|
self.__creator = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def db(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__db
|
||||||
|
return property(fget=fget)
|
||||||
|
@dynamic_property
|
||||||
|
def descriptionClip(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__descriptionClip
|
||||||
|
def fset(self, val):
|
||||||
|
self.__descriptionClip = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def error(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__error
|
||||||
|
return property(fget=fget)
|
||||||
|
@dynamic_property
|
||||||
|
def generateForKindle(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__generateForKindle
|
||||||
|
def fset(self, val):
|
||||||
|
self.__generateForKindle = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def generateRecentlyRead(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__generateRecentlyRead
|
||||||
|
def fset(self, val):
|
||||||
|
self.__generateRecentlyRead = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def genres(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__genres
|
||||||
|
def fset(self, val):
|
||||||
|
self.__genres = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def genre_tags_dict(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__genre_tags_dict
|
||||||
|
def fset(self, val):
|
||||||
|
self.__genre_tags_dict = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def htmlFileList(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__htmlFileList
|
||||||
|
def fset(self, val):
|
||||||
|
self.__htmlFileList = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def libraryPath(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__libraryPath
|
||||||
|
def fset(self, val):
|
||||||
|
self.__libraryPath = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def markerTags(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__markerTags
|
||||||
|
def fset(self, val):
|
||||||
|
self.__markerTags = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def ncxSoup(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__ncxSoup
|
||||||
|
def fset(self, val):
|
||||||
|
self.__ncxSoup = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def opts(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__opts
|
||||||
|
return property(fget=fget)
|
||||||
|
@dynamic_property
|
||||||
|
def playOrder(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__playOrder
|
||||||
|
def fset(self,val):
|
||||||
|
self.__playOrder = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def plugin(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__plugin
|
||||||
|
return property(fget=fget)
|
||||||
|
@dynamic_property
|
||||||
|
def progressInt(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__progressInt
|
||||||
|
def fset(self, val):
|
||||||
|
self.__progressInt = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def progressString(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__progressString
|
||||||
|
def fset(self, val):
|
||||||
|
self.__progressString = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def reporter(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__reporter
|
||||||
|
def fset(self, val):
|
||||||
|
self.__reporter = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def stylesheet(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__stylesheet
|
||||||
|
def fset(self, val):
|
||||||
|
self.__stylesheet = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def thumbs(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__thumbs
|
||||||
|
def fset(self, val):
|
||||||
|
self.__thumbs = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
def thumbWidth(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__thumbWidth
|
||||||
|
def fset(self, val):
|
||||||
|
self.__thumbWidth = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
def thumbHeight(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__thumbHeight
|
||||||
|
def fset(self, val):
|
||||||
|
self.__thumbHeight = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def title(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__title
|
||||||
|
def fset(self, val):
|
||||||
|
self.__title = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def totalSteps(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__totalSteps
|
||||||
|
return property(fget=fget)
|
||||||
|
@dynamic_property
|
||||||
|
def useSeriesPrefixInTitlesSection(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__useSeriesPrefixInTitlesSection
|
||||||
|
def fset(self, val):
|
||||||
|
self.__useSeriesPrefixInTitlesSection = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
@dynamic_property
|
||||||
|
def verbose(self):
|
||||||
|
def fget(self):
|
||||||
|
return self.__verbose
|
||||||
|
def fset(self, val):
|
||||||
|
self.__verbose = val
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
|
||||||
@dynamic_property
|
@dynamic_property
|
||||||
def authorClip(self):
|
def NOT_READ_SYMBOL(self):
|
||||||
def fget(self):
|
def fget(self):
|
||||||
return self.__authorClip
|
return '<span style="color:white">✓</span>' if self.generateForKindle else \
|
||||||
def fset(self, val):
|
'<span style="color:white">%s</span>' % self.opts.read_tag
|
||||||
self.__authorClip = val
|
return property(fget=fget)
|
||||||
return property(fget=fget, fset=fset)
|
@dynamic_property
|
||||||
@dynamic_property
|
def READING_SYMBOL(self):
|
||||||
def authors(self):
|
def fget(self):
|
||||||
def fget(self):
|
return '<span style="color:black">▷</span>' if self.generateForKindle else \
|
||||||
return self.__authors
|
'<span style="color:white">%s</span>' % self.opts.read_tag
|
||||||
def fset(self, val):
|
return property(fget=fget)
|
||||||
self.__authors = val
|
@dynamic_property
|
||||||
return property(fget=fget, fset=fset)
|
def READ_SYMBOL(self):
|
||||||
@dynamic_property
|
def fget(self):
|
||||||
def basename(self):
|
return '<span style="color:black">✓</span>' if self.generateForKindle else \
|
||||||
def fget(self):
|
'<span style="color:black">%s</span>' % self.opts.read_tag
|
||||||
return self.__basename
|
return property(fget=fget)
|
||||||
def fset(self, val):
|
@dynamic_property
|
||||||
self.__basename = val
|
def FULL_RATING_SYMBOL(self):
|
||||||
return property(fget=fget, fset=fset)
|
def fget(self):
|
||||||
@dynamic_property
|
return "★" if self.generateForKindle else "*"
|
||||||
def bookmarked_books(self):
|
return property(fget=fget)
|
||||||
def fget(self):
|
@dynamic_property
|
||||||
return self.__bookmarked_books
|
def EMPTY_RATING_SYMBOL(self):
|
||||||
def fset(self, val):
|
def fget(self):
|
||||||
self.__bookmarked_books = val
|
return "☆" if self.generateForKindle else ' '
|
||||||
return property(fget=fget, fset=fset)
|
return property(fget=fget)
|
||||||
@dynamic_property
|
@dynamic_property
|
||||||
def booksByAuthor(self):
|
def READ_PROGRESS_SYMBOL(self):
|
||||||
def fget(self):
|
def fget(self):
|
||||||
return self.__booksByAuthor
|
return "▪" if self.generateForKindle else '+'
|
||||||
def fset(self, val):
|
return property(fget=fget)
|
||||||
self.__booksByAuthor = val
|
@dynamic_property
|
||||||
return property(fget=fget, fset=fset)
|
def UNREAD_PROGRESS_SYMBOL(self):
|
||||||
@dynamic_property
|
def fget(self):
|
||||||
def booksByDateRead(self):
|
return "▫" if self.generateForKindle else '-'
|
||||||
def fget(self):
|
return property(fget=fget)
|
||||||
return self.__booksByDateRead
|
|
||||||
def fset(self, val):
|
|
||||||
self.__booksByDateRead = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def booksByTitle(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__booksByTitle
|
|
||||||
def fset(self, val):
|
|
||||||
self.__booksByTitle = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def booksByTitle_noSeriesPrefix(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__booksByTitle_noSeriesPrefix
|
|
||||||
def fset(self, val):
|
|
||||||
self.__booksByTitle_noSeriesPrefix = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def catalogPath(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__catalogPath
|
|
||||||
def fset(self, val):
|
|
||||||
self.__catalogPath = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def contentDir(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__contentDir
|
|
||||||
def fset(self, val):
|
|
||||||
self.__contentDir = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def currentStep(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__currentStep
|
|
||||||
def fset(self, val):
|
|
||||||
self.__currentStep = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def creator(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__creator
|
|
||||||
def fset(self, val):
|
|
||||||
self.__creator = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def db(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__db
|
|
||||||
return property(fget=fget)
|
|
||||||
@dynamic_property
|
|
||||||
def descriptionClip(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__descriptionClip
|
|
||||||
def fset(self, val):
|
|
||||||
self.__descriptionClip = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def error(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__error
|
|
||||||
return property(fget=fget)
|
|
||||||
@dynamic_property
|
|
||||||
def generateForKindle(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__generateForKindle
|
|
||||||
def fset(self, val):
|
|
||||||
self.__generateForKindle = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def generateRecentlyRead(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__generateRecentlyRead
|
|
||||||
def fset(self, val):
|
|
||||||
self.__generateRecentlyRead = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def genres(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__genres
|
|
||||||
def fset(self, val):
|
|
||||||
self.__genres = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def genre_tags_dict(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__genre_tags_dict
|
|
||||||
def fset(self, val):
|
|
||||||
self.__genre_tags_dict = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def htmlFileList(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__htmlFileList
|
|
||||||
def fset(self, val):
|
|
||||||
self.__htmlFileList = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def libraryPath(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__libraryPath
|
|
||||||
def fset(self, val):
|
|
||||||
self.__libraryPath = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def markerTags(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__markerTags
|
|
||||||
def fset(self, val):
|
|
||||||
self.__markerTags = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def ncxSoup(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__ncxSoup
|
|
||||||
def fset(self, val):
|
|
||||||
self.__ncxSoup = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def opts(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__opts
|
|
||||||
return property(fget=fget)
|
|
||||||
@dynamic_property
|
|
||||||
def playOrder(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__playOrder
|
|
||||||
def fset(self,val):
|
|
||||||
self.__playOrder = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def plugin(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__plugin
|
|
||||||
return property(fget=fget)
|
|
||||||
@dynamic_property
|
|
||||||
def progressInt(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__progressInt
|
|
||||||
def fset(self, val):
|
|
||||||
self.__progressInt = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def progressString(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__progressString
|
|
||||||
def fset(self, val):
|
|
||||||
self.__progressString = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def reporter(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__reporter
|
|
||||||
def fset(self, val):
|
|
||||||
self.__reporter = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def stylesheet(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__stylesheet
|
|
||||||
def fset(self, val):
|
|
||||||
self.__stylesheet = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def thumbs(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__thumbs
|
|
||||||
def fset(self, val):
|
|
||||||
self.__thumbs = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
def thumbWidth(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__thumbWidth
|
|
||||||
def fset(self, val):
|
|
||||||
self.__thumbWidth = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
def thumbHeight(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__thumbHeight
|
|
||||||
def fset(self, val):
|
|
||||||
self.__thumbHeight = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def title(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__title
|
|
||||||
def fset(self, val):
|
|
||||||
self.__title = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def totalSteps(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__totalSteps
|
|
||||||
return property(fget=fget)
|
|
||||||
@dynamic_property
|
|
||||||
def useSeriesPrefixInTitlesSection(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__useSeriesPrefixInTitlesSection
|
|
||||||
def fset(self, val):
|
|
||||||
self.__useSeriesPrefixInTitlesSection = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
@dynamic_property
|
|
||||||
def verbose(self):
|
|
||||||
def fget(self):
|
|
||||||
return self.__verbose
|
|
||||||
def fset(self, val):
|
|
||||||
self.__verbose = val
|
|
||||||
return property(fget=fget, fset=fset)
|
|
||||||
|
|
||||||
@dynamic_property
|
|
||||||
def NOT_READ_SYMBOL(self):
|
|
||||||
def fget(self):
|
|
||||||
return '<span style="color:white">✓</span>' if self.generateForKindle else \
|
|
||||||
'<span style="color:white">%s</span>' % self.opts.read_tag
|
|
||||||
return property(fget=fget)
|
|
||||||
@dynamic_property
|
|
||||||
def READING_SYMBOL(self):
|
|
||||||
def fget(self):
|
|
||||||
return '<span style="color:black">▷</span>' if self.generateForKindle else \
|
|
||||||
'<span style="color:white">%s</span>' % self.opts.read_tag
|
|
||||||
return property(fget=fget)
|
|
||||||
@dynamic_property
|
|
||||||
def READ_SYMBOL(self):
|
|
||||||
def fget(self):
|
|
||||||
return '<span style="color:black">✓</span>' if self.generateForKindle else \
|
|
||||||
'<span style="color:black">%s</span>' % self.opts.read_tag
|
|
||||||
return property(fget=fget)
|
|
||||||
@dynamic_property
|
|
||||||
def FULL_RATING_SYMBOL(self):
|
|
||||||
def fget(self):
|
|
||||||
return "★" if self.generateForKindle else "*"
|
|
||||||
return property(fget=fget)
|
|
||||||
@dynamic_property
|
|
||||||
def EMPTY_RATING_SYMBOL(self):
|
|
||||||
def fget(self):
|
|
||||||
return "☆" if self.generateForKindle else ' '
|
|
||||||
return property(fget=fget)
|
|
||||||
@dynamic_property
|
|
||||||
def READ_PROGRESS_SYMBOL(self):
|
|
||||||
def fget(self):
|
|
||||||
return "▪" if self.generateForKindle else '+'
|
|
||||||
return property(fget=fget)
|
|
||||||
@dynamic_property
|
|
||||||
def UNREAD_PROGRESS_SYMBOL(self):
|
|
||||||
def fget(self):
|
|
||||||
return "▫" if self.generateForKindle else '-'
|
|
||||||
return property(fget=fget)
|
|
||||||
|
|
||||||
# Methods
|
# Methods
|
||||||
def buildSources(self):
|
def buildSources(self):
|
||||||
@ -1206,7 +1207,6 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
|
|
||||||
self.generateOPF()
|
self.generateOPF()
|
||||||
self.generateNCXHeader()
|
self.generateNCXHeader()
|
||||||
self.generateNCXDescriptions("Descriptions")
|
|
||||||
self.generateNCXByAuthor("Authors")
|
self.generateNCXByAuthor("Authors")
|
||||||
if self.opts.generate_titles:
|
if self.opts.generate_titles:
|
||||||
self.generateNCXByTitle("Titles")
|
self.generateNCXByTitle("Titles")
|
||||||
@ -1215,6 +1215,7 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
if self.generateRecentlyRead:
|
if self.generateRecentlyRead:
|
||||||
self.generateNCXByDateRead("Recently Read")
|
self.generateNCXByDateRead("Recently Read")
|
||||||
self.generateNCXByGenre("Genres")
|
self.generateNCXByGenre("Genres")
|
||||||
|
self.generateNCXDescriptions("Descriptions")
|
||||||
self.writeNCX()
|
self.writeNCX()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -1570,8 +1571,8 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
if title['series']:
|
if title['series']:
|
||||||
# title<br />series series_index
|
# title<br />series series_index
|
||||||
brTag = Tag(soup,'br')
|
brTag = Tag(soup,'br')
|
||||||
title_tokens = title['title'].split(': ')
|
title_tokens = list(title['title'].partition(':'))
|
||||||
emTag.insert(0, escape(NavigableString(title_tokens[1])))
|
emTag.insert(0, escape(NavigableString(title_tokens[2].strip())))
|
||||||
emTag.insert(1, brTag)
|
emTag.insert(1, brTag)
|
||||||
smallTag = Tag(soup,'small')
|
smallTag = Tag(soup,'small')
|
||||||
smallTag.insert(0, escape(NavigableString(title_tokens[0])))
|
smallTag.insert(0, escape(NavigableString(title_tokens[0])))
|
||||||
@ -1747,8 +1748,8 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
nspt = deepcopy(self.booksByTitle)
|
nspt = deepcopy(self.booksByTitle)
|
||||||
for book in nspt:
|
for book in nspt:
|
||||||
if book['series']:
|
if book['series']:
|
||||||
tokens = book['title'].split(': ')
|
tokens = book['title'].partition(':')
|
||||||
book['title'] = '%s (%s)' % (tokens[1], tokens[0])
|
book['title'] = '%s (%s)' % (tokens[2].strip(), tokens[0])
|
||||||
book['title_sort'] = self.generateSortTitle(book['title'])
|
book['title_sort'] = self.generateSortTitle(book['title'])
|
||||||
nspt = sorted(nspt,
|
nspt = sorted(nspt,
|
||||||
key=lambda x:(x['title_sort'].upper(), x['title_sort'].upper()))
|
key=lambda x:(x['title_sort'].upper(), x['title_sort'].upper()))
|
||||||
@ -1929,7 +1930,7 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
current_series = book['series']
|
current_series = book['series']
|
||||||
pSeriesTag = Tag(soup,'p')
|
pSeriesTag = Tag(soup,'p')
|
||||||
pSeriesTag['class'] = "series"
|
pSeriesTag['class'] = "series"
|
||||||
pSeriesTag.insert(0,NavigableString(self.NOT_READ_SYMBOL + book['series']))
|
pSeriesTag.insert(0,NavigableString(self.NOT_READ_SYMBOL + '%s Series' % book['series']))
|
||||||
divTag.insert(dtc,pSeriesTag)
|
divTag.insert(dtc,pSeriesTag)
|
||||||
dtc += 1
|
dtc += 1
|
||||||
if current_series and not book['series']:
|
if current_series and not book['series']:
|
||||||
@ -2046,7 +2047,7 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
current_series = new_entry['series']
|
current_series = new_entry['series']
|
||||||
pSeriesTag = Tag(soup,'p')
|
pSeriesTag = Tag(soup,'p')
|
||||||
pSeriesTag['class'] = "series"
|
pSeriesTag['class'] = "series"
|
||||||
pSeriesTag.insert(0,NavigableString(self.NOT_READ_SYMBOL + new_entry['series']))
|
pSeriesTag.insert(0,NavigableString(self.NOT_READ_SYMBOL + '%s Series' % new_entry['series']))
|
||||||
divTag.insert(dtc,pSeriesTag)
|
divTag.insert(dtc,pSeriesTag)
|
||||||
dtc += 1
|
dtc += 1
|
||||||
if current_series and not new_entry['series']:
|
if current_series and not new_entry['series']:
|
||||||
@ -2186,8 +2187,8 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
nspt = deepcopy(self.booksByTitle)
|
nspt = deepcopy(self.booksByTitle)
|
||||||
for book in nspt:
|
for book in nspt:
|
||||||
if book['series']:
|
if book['series']:
|
||||||
tokens = book['title'].split(': ')
|
tokens = book['title'].partition(':')
|
||||||
book['title'] = '%s (%s)' % (tokens[1], tokens[0])
|
book['title'] = '%s (%s)' % (tokens[2].strip(), tokens[0])
|
||||||
book['title_sort'] = self.generateSortTitle(book['title'])
|
book['title_sort'] = self.generateSortTitle(book['title'])
|
||||||
self.booksByDateRange = sorted(nspt, key=lambda x:(x['timestamp'], x['timestamp']),reverse=True)
|
self.booksByDateRange = sorted(nspt, key=lambda x:(x['timestamp'], x['timestamp']),reverse=True)
|
||||||
|
|
||||||
@ -2683,22 +2684,7 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
# HTML files - add books to manifest and spine
|
# HTML files - add books to manifest and spine
|
||||||
sort_descriptions_by = self.booksByAuthor if self.opts.sort_descriptions_by_author \
|
sort_descriptions_by = self.booksByAuthor if self.opts.sort_descriptions_by_author \
|
||||||
else self.booksByTitle
|
else self.booksByTitle
|
||||||
for book in sort_descriptions_by:
|
# Add html_files to manifest and spine
|
||||||
# manifest
|
|
||||||
itemTag = Tag(soup, "item")
|
|
||||||
itemTag['href'] = "content/book_%d.html" % int(book['id'])
|
|
||||||
itemTag['id'] = "book%d" % int(book['id'])
|
|
||||||
itemTag['media-type'] = "application/xhtml+xml"
|
|
||||||
manifest.insert(mtc, itemTag)
|
|
||||||
mtc += 1
|
|
||||||
|
|
||||||
# spine
|
|
||||||
itemrefTag = Tag(soup, "itemref")
|
|
||||||
itemrefTag['idref'] = "book%d" % int(book['id'])
|
|
||||||
spine.insert(stc, itemrefTag)
|
|
||||||
stc += 1
|
|
||||||
|
|
||||||
# Add other html_files to manifest and spine
|
|
||||||
|
|
||||||
for file in self.htmlFileList:
|
for file in self.htmlFileList:
|
||||||
itemTag = Tag(soup, "item")
|
itemTag = Tag(soup, "item")
|
||||||
@ -2734,6 +2720,21 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
spine.insert(stc, itemrefTag)
|
spine.insert(stc, itemrefTag)
|
||||||
stc += 1
|
stc += 1
|
||||||
|
|
||||||
|
for book in sort_descriptions_by:
|
||||||
|
# manifest
|
||||||
|
itemTag = Tag(soup, "item")
|
||||||
|
itemTag['href'] = "content/book_%d.html" % int(book['id'])
|
||||||
|
itemTag['id'] = "book%d" % int(book['id'])
|
||||||
|
itemTag['media-type'] = "application/xhtml+xml"
|
||||||
|
manifest.insert(mtc, itemTag)
|
||||||
|
mtc += 1
|
||||||
|
|
||||||
|
# spine
|
||||||
|
itemrefTag = Tag(soup, "itemref")
|
||||||
|
itemrefTag['idref'] = "book%d" % int(book['id'])
|
||||||
|
spine.insert(stc, itemrefTag)
|
||||||
|
stc += 1
|
||||||
|
|
||||||
# Guide
|
# Guide
|
||||||
referenceTag = Tag(soup, "reference")
|
referenceTag = Tag(soup, "reference")
|
||||||
referenceTag['type'] = 'masthead'
|
referenceTag['type'] = 'masthead'
|
||||||
@ -2821,15 +2822,15 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
navLabelTag = Tag(ncx_soup, "navLabel")
|
navLabelTag = Tag(ncx_soup, "navLabel")
|
||||||
textTag = Tag(ncx_soup, "text")
|
textTag = Tag(ncx_soup, "text")
|
||||||
if book['series']:
|
if book['series']:
|
||||||
tokens = book['title'].split(': ')
|
tokens = list(book['title'].partition(':'))
|
||||||
if self.generateForKindle:
|
if self.generateForKindle:
|
||||||
# Don't include Author for Kindle
|
# Don't include Author for Kindle
|
||||||
textTag.insert(0, NavigableString(self.formatNCXText('%s (%s)' % \
|
textTag.insert(0, NavigableString(self.formatNCXText('%s (%s)' % \
|
||||||
(tokens[1], tokens[0]), dest='title')))
|
(tokens[2].strip(), tokens[0]), dest='title')))
|
||||||
else:
|
else:
|
||||||
# Include Author for non-Kindle
|
# Include Author for non-Kindle
|
||||||
textTag.insert(0, NavigableString(self.formatNCXText('%s · %s (%s)' % \
|
textTag.insert(0, NavigableString(self.formatNCXText('%s · %s (%s)' % \
|
||||||
(tokens[1], book['author'], tokens[0]), dest='title')))
|
(tokens[2].strip(), book['author'], tokens[0]), dest='title')))
|
||||||
else:
|
else:
|
||||||
if self.generateForKindle:
|
if self.generateForKindle:
|
||||||
# Don't include Author for Kindle
|
# Don't include Author for Kindle
|
||||||
@ -3752,7 +3753,7 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
current_series = book['series']
|
current_series = book['series']
|
||||||
pSeriesTag = Tag(soup,'p')
|
pSeriesTag = Tag(soup,'p')
|
||||||
pSeriesTag['class'] = "series"
|
pSeriesTag['class'] = "series"
|
||||||
pSeriesTag.insert(0,NavigableString(self.NOT_READ_SYMBOL + book['series']))
|
pSeriesTag.insert(0,NavigableString(self.NOT_READ_SYMBOL + '%s Series' % book['series']))
|
||||||
divTag.insert(dtc,pSeriesTag)
|
divTag.insert(dtc,pSeriesTag)
|
||||||
dtc += 1
|
dtc += 1
|
||||||
|
|
||||||
@ -3897,7 +3898,7 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<p class="title"></p>
|
<p class="title"></p>
|
||||||
<div class="hr"><blockquote><hr/></blockquote></div>
|
<!--div class="hr"><blockquote><hr/></blockquote></div-->
|
||||||
<div class="authors"></div>
|
<div class="authors"></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -4231,6 +4232,7 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
op = opts.output_profile
|
op = opts.output_profile
|
||||||
if op is None:
|
if op is None:
|
||||||
op = 'default'
|
op = 'default'
|
||||||
|
|
||||||
if opts.connected_device['name'] and 'kindle' in opts.connected_device['name'].lower():
|
if opts.connected_device['name'] and 'kindle' in opts.connected_device['name'].lower():
|
||||||
opts.connected_kindle = True
|
opts.connected_kindle = True
|
||||||
if opts.connected_device['serial'] and opts.connected_device['serial'][:4] in ['B004','B005']:
|
if opts.connected_device['serial'] and opts.connected_device['serial'][:4] in ['B004','B005']:
|
||||||
@ -4256,7 +4258,8 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
opts.exclude_genre = '\[^.\]'
|
opts.exclude_genre = '\[^.\]'
|
||||||
build_log.append(" converting empty exclude_genre to '\[^.\]'")
|
build_log.append(" converting empty exclude_genre to '\[^.\]'")
|
||||||
|
|
||||||
if opts.connected_device['name']:
|
if opts.connected_device['is_device_connected'] and \
|
||||||
|
opts.connected_device['kind'] == 'device':
|
||||||
if opts.connected_device['serial']:
|
if opts.connected_device['serial']:
|
||||||
build_log.append(u" connected_device: '%s' #%s%s " % \
|
build_log.append(u" connected_device: '%s' #%s%s " % \
|
||||||
(opts.connected_device['name'],
|
(opts.connected_device['name'],
|
||||||
@ -4270,6 +4273,8 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
for storage in opts.connected_device['storage']:
|
for storage in opts.connected_device['storage']:
|
||||||
if storage:
|
if storage:
|
||||||
build_log.append(u" mount point: %s" % storage)
|
build_log.append(u" mount point: %s" % storage)
|
||||||
|
else:
|
||||||
|
build_log.append(u" connected_device: '%s'" % opts.connected_device['name'])
|
||||||
|
|
||||||
opts_dict = vars(opts)
|
opts_dict = vars(opts)
|
||||||
if opts_dict['ids']:
|
if opts_dict['ids']:
|
||||||
|
@ -672,7 +672,14 @@ def command_catalog(args, dbpath):
|
|||||||
|
|
||||||
# No support for connected device in CLI environment
|
# No support for connected device in CLI environment
|
||||||
# Parallel initialization in calibre.gui2.tools:generate_catalog()
|
# Parallel initialization in calibre.gui2.tools:generate_catalog()
|
||||||
opts.connected_device = { 'storage':None,'serial':None,'save_template':None,'name':None}
|
opts.connected_device = {
|
||||||
|
'is_device_connected': False,
|
||||||
|
'kind': device_manager.connected_device_kind,
|
||||||
|
'name': None,
|
||||||
|
'save_template': None,
|
||||||
|
'serial': None,
|
||||||
|
'storage': None,
|
||||||
|
}
|
||||||
|
|
||||||
with plugin:
|
with plugin:
|
||||||
plugin.run(args[1], opts, get_db(dbpath, opts))
|
plugin.run(args[1], opts, get_db(dbpath, opts))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user