mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-31 14:33:54 -04:00
Add device Aura One and support for ignoring some collecitons.
Kobo are releasing the Aura One and Aura Edition 2. This adds the device ids but does not update the firmware version. The firmware for these devices have not been released. It will probably be compatible, but, there might be changes. This also includes an extra configuration option to ignore some collections. With this, the named collections will not be touched buy the drivers collection management.
This commit is contained in:
parent
7152a09ee2
commit
baa098bb0a
@ -80,6 +80,10 @@ class ImageWrapper(object):
|
|||||||
|
|
||||||
class KTCollectionsBookList(CollectionsBookList):
|
class KTCollectionsBookList(CollectionsBookList):
|
||||||
|
|
||||||
|
def __init__(self, oncard, prefix, settings):
|
||||||
|
super(KTCollectionsBookList, self).__init__(oncard, prefix, settings)
|
||||||
|
self.set_device_managed_collections([])
|
||||||
|
|
||||||
def get_collections(self, collection_attributes):
|
def get_collections(self, collection_attributes):
|
||||||
debug_print("KTCollectionsBookList:get_collections - start - collection_attributes=", collection_attributes)
|
debug_print("KTCollectionsBookList:get_collections - start - collection_attributes=", collection_attributes)
|
||||||
|
|
||||||
@ -126,6 +130,16 @@ class KTCollectionsBookList(CollectionsBookList):
|
|||||||
# For existing books, modify the collections only if the user
|
# For existing books, modify the collections only if the user
|
||||||
# specified 'on_connect'
|
# specified 'on_connect'
|
||||||
attrs = collection_attributes
|
attrs = collection_attributes
|
||||||
|
for cat_name in self.device_managed_collections:
|
||||||
|
if cat_name in book.device_collections:
|
||||||
|
if cat_name not in collections:
|
||||||
|
collections[cat_name] = {}
|
||||||
|
if show_debug:
|
||||||
|
debug_print("KTCollectionsBookList:get_collections - Device Managed Collection:", cat_name)
|
||||||
|
if lpath not in collections[cat_name]:
|
||||||
|
collections[cat_name][lpath] = (book, tsval, tsval)
|
||||||
|
if show_debug:
|
||||||
|
debug_print("KTCollectionsBookList:get_collections - Device Managed Collection -added book to cat_name", cat_name)
|
||||||
book.device_collections = []
|
book.device_collections = []
|
||||||
if show_debug:
|
if show_debug:
|
||||||
debug_print("KTCollectionsBookList:get_collections - attrs=", attrs)
|
debug_print("KTCollectionsBookList:get_collections - attrs=", attrs)
|
||||||
@ -255,9 +269,13 @@ class KTCollectionsBookList(CollectionsBookList):
|
|||||||
books = lpaths.values()
|
books = lpaths.values()
|
||||||
books.sort(cmp=none_cmp)
|
books.sort(cmp=none_cmp)
|
||||||
result[category] = [x[0] for x in books]
|
result[category] = [x[0] for x in books]
|
||||||
|
# debug_print("KTCollectionsBookList:get_collections - result=", result.keys())
|
||||||
debug_print("KTCollectionsBookList:get_collections - end")
|
debug_print("KTCollectionsBookList:get_collections - end")
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def set_device_managed_collections(self, collection_names):
|
||||||
|
self.device_managed_collections = collection_names
|
||||||
|
|
||||||
def set_debugging_title(self, title):
|
def set_debugging_title(self, title):
|
||||||
self.debugging_title = title
|
self.debugging_title = title
|
||||||
|
|
||||||
|
@ -63,11 +63,11 @@ class KOBO(USBMS):
|
|||||||
gui_name = 'Kobo Reader'
|
gui_name = 'Kobo Reader'
|
||||||
description = _('Communicate with the Kobo Reader')
|
description = _('Communicate with the Kobo Reader')
|
||||||
author = 'Timothy Legge and David Forrester'
|
author = 'Timothy Legge and David Forrester'
|
||||||
version = (2, 3, 0)
|
version = (2, 3, 1)
|
||||||
|
|
||||||
dbversion = 0
|
dbversion = 0
|
||||||
fwversion = (0,0,0)
|
fwversion = (0,0,0)
|
||||||
supported_dbversion = 125
|
supported_dbversion = 128
|
||||||
has_kepubs = False
|
has_kepubs = False
|
||||||
|
|
||||||
supported_platforms = ['windows', 'osx', 'linux']
|
supported_platforms = ['windows', 'osx', 'linux']
|
||||||
@ -1309,7 +1309,7 @@ class KOBOTOUCH(KOBO):
|
|||||||
KOBO.author)
|
KOBO.author)
|
||||||
# icon = I('devices/kobotouch.jpg')
|
# icon = I('devices/kobotouch.jpg')
|
||||||
|
|
||||||
supported_dbversion = 125
|
supported_dbversion = 128
|
||||||
min_supported_dbversion = 53
|
min_supported_dbversion = 53
|
||||||
min_dbversion_series = 65
|
min_dbversion_series = 65
|
||||||
min_dbversion_externalid = 65
|
min_dbversion_externalid = 65
|
||||||
@ -1327,6 +1327,7 @@ class KOBOTOUCH(KOBO):
|
|||||||
min_aurah2o_fwversion = (3, 7, 0)
|
min_aurah2o_fwversion = (3, 7, 0)
|
||||||
min_reviews_fwversion = (3, 12, 0)
|
min_reviews_fwversion = (3, 12, 0)
|
||||||
min_glohd_fwversion = (3, 14, 0)
|
min_glohd_fwversion = (3, 14, 0)
|
||||||
|
min_auraone_fwversion = (3, 20, 7280)
|
||||||
|
|
||||||
has_kepubs = True
|
has_kepubs = True
|
||||||
|
|
||||||
@ -1346,8 +1347,10 @@ class KOBOTOUCH(KOBO):
|
|||||||
TIMESTAMP_STRING = "%Y-%m-%dT%H:%M:%SZ"
|
TIMESTAMP_STRING = "%Y-%m-%dT%H:%M:%SZ"
|
||||||
|
|
||||||
AURA_PRODUCT_ID = [0x4203]
|
AURA_PRODUCT_ID = [0x4203]
|
||||||
|
AURA_EDITION2_PRODUCT_ID = [0x4226]
|
||||||
AURA_HD_PRODUCT_ID = [0x4193]
|
AURA_HD_PRODUCT_ID = [0x4193]
|
||||||
AURA_H2O_PRODUCT_ID = [0x4213]
|
AURA_H2O_PRODUCT_ID = [0x4213]
|
||||||
|
AURA_ONE_PRODUCT_ID = [0x4225]
|
||||||
GLO_PRODUCT_ID = [0x4173]
|
GLO_PRODUCT_ID = [0x4173]
|
||||||
GLO_HD_PRODUCT_ID = [0x4223]
|
GLO_HD_PRODUCT_ID = [0x4223]
|
||||||
MINI_PRODUCT_ID = [0x4183]
|
MINI_PRODUCT_ID = [0x4183]
|
||||||
@ -1355,7 +1358,8 @@ class KOBOTOUCH(KOBO):
|
|||||||
TOUCH2_PRODUCT_ID = [0x4224]
|
TOUCH2_PRODUCT_ID = [0x4224]
|
||||||
PRODUCT_ID = AURA_PRODUCT_ID + AURA_HD_PRODUCT_ID + AURA_H2O_PRODUCT_ID + \
|
PRODUCT_ID = AURA_PRODUCT_ID + AURA_HD_PRODUCT_ID + AURA_H2O_PRODUCT_ID + \
|
||||||
GLO_PRODUCT_ID + GLO_HD_PRODUCT_ID + \
|
GLO_PRODUCT_ID + GLO_HD_PRODUCT_ID + \
|
||||||
MINI_PRODUCT_ID + TOUCH_PRODUCT_ID +TOUCH2_PRODUCT_ID
|
MINI_PRODUCT_ID + TOUCH_PRODUCT_ID + TOUCH2_PRODUCT_ID + \
|
||||||
|
AURA_ONE_PRODUCT_ID + AURA_EDITION2_PRODUCT_ID
|
||||||
|
|
||||||
BCD = [0x0110, 0x0326]
|
BCD = [0x0110, 0x0326]
|
||||||
|
|
||||||
@ -1363,27 +1367,45 @@ class KOBOTOUCH(KOBO):
|
|||||||
# Note: "200" has been used just as a much larger number than the current versions. It is just a lazy
|
# Note: "200" has been used just as a much larger number than the current versions. It is just a lazy
|
||||||
# way of making it open ended.
|
# way of making it open ended.
|
||||||
COVER_FILE_ENDINGS = {
|
COVER_FILE_ENDINGS = {
|
||||||
|
# Used for screensaver, home screen
|
||||||
' - N3_FULL.parsed':[(600,800),0, 200,True,], # Used for screensaver, home screen
|
' - N3_FULL.parsed':[(600,800),0, 200,True,], # Used for screensaver, home screen
|
||||||
# Used for Details screen before FW2.8.1, then for current book tile on home screen
|
# Used for Details screen before FW2.8.1, then for current book tile on home screen
|
||||||
' - N3_LIBRARY_FULL.parsed':[(355,473),0, 200,False,],
|
' - N3_LIBRARY_FULL.parsed':[(355,473),0, 200,False,],
|
||||||
|
# Used for library lists
|
||||||
' - N3_LIBRARY_GRID.parsed':[(149,198),0, 200,False,], # Used for library lists
|
' - N3_LIBRARY_GRID.parsed':[(149,198),0, 200,False,], # Used for library lists
|
||||||
|
# Used for library lists
|
||||||
' - N3_LIBRARY_LIST.parsed':[(60,90),0, 53,False,],
|
' - N3_LIBRARY_LIST.parsed':[(60,90),0, 53,False,],
|
||||||
' - AndroidBookLoadTablet_Aspect.parsed':[(355,473), 82, 100,False,], # Used for Details screen from FW2.8.1
|
# Used for Details screen from FW2.8.1
|
||||||
# ' - N3_LIBRARY_SHELF.parsed': [(40,60),0, 52,],
|
' - AndroidBookLoadTablet_Aspect.parsed':[(355,473), 82, 100,False,],
|
||||||
}
|
}
|
||||||
GLO_COVER_FILE_ENDINGS = { # Glo and Aura share resolution, so the image sizes should be the same.
|
# Glo and Aura share resolution, so the image sizes should be the same.
|
||||||
' - N3_FULL.parsed':[(758,1024),0, 200,True,], # Used for screensaver, home screen
|
GLO_COVER_FILE_ENDINGS = {
|
||||||
|
# Used for screensaver, home screen
|
||||||
|
' - N3_FULL.parsed':[(758,1024),0, 200,True,],
|
||||||
# Used for Details screen before FW2.8.1, then for current book tile on home screen
|
# Used for Details screen before FW2.8.1, then for current book tile on home screen
|
||||||
' - N3_LIBRARY_FULL.parsed':[(355,479),0, 200,False,],
|
' - N3_LIBRARY_FULL.parsed':[(355,479),0, 200,False,],
|
||||||
' - N3_LIBRARY_GRID.parsed':[(149,201),0, 200,False,], # Used for library lists
|
# Used for library lists
|
||||||
' - AndroidBookLoadTablet_Aspect.parsed':[(355,479), 88, 100,False,], # Used for Details screen from FW2.8.1
|
' - N3_LIBRARY_GRID.parsed':[(149,201),0, 200,False,],
|
||||||
|
# Used for Details screen from FW2.8.1
|
||||||
|
' - AndroidBookLoadTablet_Aspect.parsed':[(355,479), 88, 100,False,],
|
||||||
}
|
}
|
||||||
AURA_HD_COVER_FILE_ENDINGS = {
|
AURA_HD_COVER_FILE_ENDINGS = {
|
||||||
|
# Used for screensaver, home screen
|
||||||
' - N3_FULL.parsed': [(1080,1440), 0, 200,True,], # Used for screensaver, home screen
|
' - N3_FULL.parsed': [(1080,1440), 0, 200,True,], # Used for screensaver, home screen
|
||||||
# Used for Details screen before FW2.8.1, then for current book tile on home screen
|
# Used for Details screen before FW2.8.1, then for current book tile on home screen
|
||||||
' - N3_LIBRARY_FULL.parsed':[(355, 471), 0, 200,False,],
|
' - N3_LIBRARY_FULL.parsed':[(355, 471), 0, 200,False,],
|
||||||
|
# Used for library lists
|
||||||
|
' - N3_LIBRARY_GRID.parsed':[(149, 198), 0, 200,False,], # Used for library lists
|
||||||
|
# Used for Details screen from FW2.8.1
|
||||||
|
' - AndroidBookLoadTablet_Aspect.parsed':[(355, 471), 88, 100,False,],
|
||||||
|
}
|
||||||
|
AURA_ONE_COVER_FILE_ENDINGS = {
|
||||||
|
# Used for screensaver, home screen
|
||||||
|
' - N3_FULL.parsed': [(1872,1404), 0, 200,True,], # Used for screensaver, home screen
|
||||||
|
# Used for Details screen before FW2.8.1, then for current book tile on home screen
|
||||||
|
' - N3_LIBRARY_FULL.parsed':[(355, 473), 0, 200,False,],
|
||||||
|
# Used for library lists
|
||||||
' - N3_LIBRARY_GRID.parsed':[(149, 198), 0, 200,False,], # Used for library lists
|
' - N3_LIBRARY_GRID.parsed':[(149, 198), 0, 200,False,], # Used for library lists
|
||||||
' - AndroidBookLoadTablet_Aspect.parsed':[(355, 471), 88, 100,False,], # Used for Details screen from FW2.8.1
|
|
||||||
}
|
}
|
||||||
# Following are the sizes used with pre2.1.4 firmware
|
# Following are the sizes used with pre2.1.4 firmware
|
||||||
# COVER_FILE_ENDINGS = {
|
# COVER_FILE_ENDINGS = {
|
||||||
@ -2187,12 +2209,14 @@ class KOBOTOUCH(KOBO):
|
|||||||
}
|
}
|
||||||
# debug_print('KoboTouch:update_device_database_collections - collections_attributes=', collections_attributes)
|
# debug_print('KoboTouch:update_device_database_collections - collections_attributes=', collections_attributes)
|
||||||
|
|
||||||
create_bookshelves = self.create_bookshelves
|
collections_columns = self.collections_columns
|
||||||
delete_empty_shelves = self.delete_empty_shelves
|
create_collections = self.create_collections
|
||||||
|
delete_empty_collections = self.delete_empty_collections
|
||||||
update_series_details = self.update_series_details
|
update_series_details = self.update_series_details
|
||||||
debugging_title = self.get_debugging_title()
|
debugging_title = self.get_debugging_title()
|
||||||
debug_print("KoboTouch:update_device_database_collections - set_debugging_title to '%s'" % debugging_title)
|
debug_print("KoboTouch:update_device_database_collections - set_debugging_title to '%s'" % debugging_title)
|
||||||
booklists.set_debugging_title(debugging_title)
|
booklists.set_debugging_title(debugging_title)
|
||||||
|
booklists.set_device_managed_collections(self.ignore_collections_names)
|
||||||
|
|
||||||
bookshelf_attribute = len(collections_attributes) > 0
|
bookshelf_attribute = len(collections_attributes) > 0
|
||||||
|
|
||||||
@ -2223,7 +2247,7 @@ class KOBOTOUCH(KOBO):
|
|||||||
# Process any collections that exist
|
# Process any collections that exist
|
||||||
for category, books in collections.items():
|
for category, books in collections.items():
|
||||||
debug_print("KoboTouch:update_device_database_collections - category='%s' books=%d"%(category, len(books)))
|
debug_print("KoboTouch:update_device_database_collections - category='%s' books=%d"%(category, len(books)))
|
||||||
if create_bookshelves and not (category in supportedcategories or category in readstatuslist or category in accessibilitylist):
|
if create_collections and not (category in supportedcategories or category in readstatuslist or category in accessibilitylist):
|
||||||
self.check_for_bookshelf(connection, category)
|
self.check_for_bookshelf(connection, category)
|
||||||
# if category in self.bookshelvelist:
|
# if category in self.bookshelvelist:
|
||||||
# debug_print("Category: ", category, " id = ", readstatuslist.get(category))
|
# debug_print("Category: ", category, " id = ", readstatuslist.get(category))
|
||||||
@ -2248,7 +2272,10 @@ class KOBOTOUCH(KOBO):
|
|||||||
ContentType = self.get_content_type_from_extension(extension) if extension != '' else self.get_content_type_from_path(book.path)
|
ContentType = self.get_content_type_from_extension(extension) if extension != '' else self.get_content_type_from_path(book.path)
|
||||||
book.contentID = self.contentid_from_path(book.path, ContentType)
|
book.contentID = self.contentid_from_path(book.path, ContentType)
|
||||||
|
|
||||||
if category in self.bookshelvelist and self.supports_bookshelves:
|
if category in self.ignore_collections_names:
|
||||||
|
debug_print(' Ignoring collection=%s' % category)
|
||||||
|
category_added = True
|
||||||
|
elif category in self.bookshelvelist and self.supports_bookshelves:
|
||||||
if show_debug:
|
if show_debug:
|
||||||
debug_print(' length book.device_collections=%d'%len(book.device_collections))
|
debug_print(' length book.device_collections=%d'%len(book.device_collections))
|
||||||
if category not in book.device_collections:
|
if category not in book.device_collections:
|
||||||
@ -2311,7 +2338,7 @@ class KOBOTOUCH(KOBO):
|
|||||||
debug_print("KoboTouch:update_device_database_collections - about to remove a book from shelves book.title=%s" % book.title)
|
debug_print("KoboTouch:update_device_database_collections - about to remove a book from shelves book.title=%s" % book.title)
|
||||||
self.remove_book_from_device_bookshelves(connection, book)
|
self.remove_book_from_device_bookshelves(connection, book)
|
||||||
book.device_collections.extend(book.kobo_collections)
|
book.device_collections.extend(book.kobo_collections)
|
||||||
if not prefs['manage_device_metadata'] == 'manual' and delete_empty_shelves:
|
if not prefs['manage_device_metadata'] == 'manual' and delete_empty_collections:
|
||||||
debug_print("KoboTouch:update_device_database_collections - about to clear empty bookshelves")
|
debug_print("KoboTouch:update_device_database_collections - about to clear empty bookshelves")
|
||||||
self.delete_empty_bookshelves(connection)
|
self.delete_empty_bookshelves(connection)
|
||||||
debug_print("KoboTouch:update_device_database_collections - Number of series set=%d Number of books=%d" % (self.series_set, books_in_library))
|
debug_print("KoboTouch:update_device_database_collections - Number of series set=%d Number of books=%d" % (self.series_set, books_in_library))
|
||||||
@ -2467,6 +2494,7 @@ class KOBOTOUCH(KOBO):
|
|||||||
show_debug = self.is_debugging_title(book.title) # or True
|
show_debug = self.is_debugging_title(book.title) # or True
|
||||||
|
|
||||||
remove_shelf_list = set(book.current_shelves) - set(book.device_collections)
|
remove_shelf_list = set(book.current_shelves) - set(book.device_collections)
|
||||||
|
remove_shelf_list = remove_shelf_list - set(self.ignore_collections_names)
|
||||||
|
|
||||||
if show_debug:
|
if show_debug:
|
||||||
debug_print('KoboTouch:remove_book_from_device_bookshelves - book.application_id="%s"'%book.application_id)
|
debug_print('KoboTouch:remove_book_from_device_bookshelves - book.application_id="%s"'%book.application_id)
|
||||||
@ -2648,13 +2676,14 @@ class KOBOTOUCH(KOBO):
|
|||||||
"true",
|
"true",
|
||||||
"false",
|
"false",
|
||||||
)
|
)
|
||||||
|
shelf_type = "UserTag" #if self.supports_reading_list else None
|
||||||
if self.dbversion < 64:
|
if self.dbversion < 64:
|
||||||
addquery += ' ("CreationDate","InternalName","LastModified","Name","_IsDeleted","_IsVisible","_IsSynced")'\
|
addquery += ' ("CreationDate","InternalName","LastModified","Name","_IsDeleted","_IsVisible","_IsSynced")'\
|
||||||
' VALUES (?, ?, ?, ?, ?, ?, ?)'
|
' VALUES (?, ?, ?, ?, ?, ?, ?)'
|
||||||
else:
|
else:
|
||||||
addquery += ' ("CreationDate", "InternalName","LastModified","Name","_IsDeleted","_IsVisible","_IsSynced", "Id")'\
|
addquery += ' ("CreationDate", "InternalName","LastModified","Name","_IsDeleted","_IsVisible","_IsSynced", "Id", "Type")'\
|
||||||
' VALUES (?, ?, ?, ?, ?, ?, ?, ?)'
|
' VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)'
|
||||||
add_values = add_values +(bookshelf_name,)
|
add_values = add_values +(bookshelf_name, shelf_type)
|
||||||
|
|
||||||
if show_debug:
|
if show_debug:
|
||||||
debug_print('KoboTouch:check_for_bookshelf addquery=', addquery)
|
debug_print('KoboTouch:check_for_bookshelf addquery=', addquery)
|
||||||
@ -2755,15 +2784,15 @@ class KOBOTOUCH(KOBO):
|
|||||||
debug_print("KoboTouch:set_series - end")
|
debug_print("KoboTouch:set_series - end")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def config_widget(self):
|
def config_widget(cls):
|
||||||
# TODO: Cleanup the following
|
# TODO: Cleanup the following
|
||||||
self.current_friendly_name = self.gui_name
|
cls.current_friendly_name = cls.gui_name
|
||||||
|
|
||||||
from calibre.devices.kobo.kobotouch_config import KOBOTOUCHConfig
|
from calibre.devices.kobo.kobotouch_config import KOBOTOUCHConfig
|
||||||
return KOBOTOUCHConfig(self.settings(), self.FORMATS,
|
return KOBOTOUCHConfig(cls.settings(), cls.FORMATS,
|
||||||
self.SUPPORTS_SUB_DIRS, self.MUST_READ_METADATA,
|
cls.SUPPORTS_SUB_DIRS, cls.MUST_READ_METADATA,
|
||||||
self.SUPPORTS_USE_AUTHOR_SORT, self.EXTRA_CUSTOMIZATION_MESSAGE,
|
cls.SUPPORTS_USE_AUTHOR_SORT, cls.EXTRA_CUSTOMIZATION_MESSAGE,
|
||||||
self, extra_customization_choices=self.EXTRA_CUSTOMIZATION_CHOICES
|
cls, extra_customization_choices=cls.EXTRA_CUSTOMIZATION_CHOICES
|
||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -2782,6 +2811,7 @@ class KOBOTOUCH(KOBO):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def save_settings(cls, config_widget):
|
def save_settings(cls, config_widget):
|
||||||
|
cls.opts = None
|
||||||
config_widget.commit()
|
config_widget.commit()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -2796,6 +2826,7 @@ class KOBOTOUCH(KOBO):
|
|||||||
c.add_opt('collections_columns', default='')
|
c.add_opt('collections_columns', default='')
|
||||||
c.add_opt('create_collections', default=False)
|
c.add_opt('create_collections', default=False)
|
||||||
c.add_opt('delete_empty_collections', default=False)
|
c.add_opt('delete_empty_collections', default=False)
|
||||||
|
c.add_opt('ignore_collections_names', default='')
|
||||||
|
|
||||||
c.add_opt('upload_covers', default=False)
|
c.add_opt('upload_covers', default=False)
|
||||||
c.add_opt('keep_cover_aspect', default=False)
|
c.add_opt('keep_cover_aspect', default=False)
|
||||||
@ -2827,10 +2858,14 @@ class KOBOTOUCH(KOBO):
|
|||||||
|
|
||||||
def isAura(self):
|
def isAura(self):
|
||||||
return self.detected_device.idProduct in self.AURA_PRODUCT_ID
|
return self.detected_device.idProduct in self.AURA_PRODUCT_ID
|
||||||
|
def isAuraEdition2(self):
|
||||||
|
return self.detected_device.idProduct in self.AURA_EDITION2_PRODUCT_ID
|
||||||
def isAuraHD(self):
|
def isAuraHD(self):
|
||||||
return self.detected_device.idProduct in self.AURA_HD_PRODUCT_ID
|
return self.detected_device.idProduct in self.AURA_HD_PRODUCT_ID
|
||||||
def isAuraH2O(self):
|
def isAuraH2O(self):
|
||||||
return self.detected_device.idProduct in self.AURA_H2O_PRODUCT_ID
|
return self.detected_device.idProduct in self.AURA_H2O_PRODUCT_ID
|
||||||
|
def isAuraOne(self):
|
||||||
|
return self.detected_device.idProduct in self.AURA_ONE_PRODUCT_ID
|
||||||
def isGlo(self):
|
def isGlo(self):
|
||||||
return self.detected_device.idProduct in self.GLO_PRODUCT_ID
|
return self.detected_device.idProduct in self.GLO_PRODUCT_ID
|
||||||
def isGloHD(self):
|
def isGloHD(self):
|
||||||
@ -2843,8 +2878,9 @@ class KOBOTOUCH(KOBO):
|
|||||||
return self.detected_device.idProduct in self.TOUCH2_PRODUCT_ID
|
return self.detected_device.idProduct in self.TOUCH2_PRODUCT_ID
|
||||||
|
|
||||||
def cover_file_endings(self):
|
def cover_file_endings(self):
|
||||||
return self.GLO_COVER_FILE_ENDINGS if self.isGlo() or self.isAura() \
|
return self.GLO_COVER_FILE_ENDINGS if self.isGlo() or self.isAura() or self.isAuraEdition2 \
|
||||||
else self.AURA_HD_COVER_FILE_ENDINGS if self.isAuraHD() or self.isAuraH2O() or self.isGloHD() \
|
else self.AURA_HD_COVER_FILE_ENDINGS if self.isAuraHD() or self.isAuraH2O() or self.isGloHD() \
|
||||||
|
else self.AURA_ONE_COVER_FILE_ENDINGS if self.isAuraOne() \
|
||||||
else self.COVER_FILE_ENDINGS
|
else self.COVER_FILE_ENDINGS
|
||||||
|
|
||||||
def set_device_name(self):
|
def set_device_name(self):
|
||||||
@ -2870,16 +2906,27 @@ class KOBOTOUCH(KOBO):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def manage_collections(self):
|
def manage_collections(self):
|
||||||
return self.get_pref('manage_collections')
|
return self.get_pref('manage_collections') and self.supports_bookshelves
|
||||||
@property
|
@property
|
||||||
def create_collections(self):
|
def create_collections(self):
|
||||||
return self.get_pref('create_collections')
|
return self.manage_collections and self.get_pref('create_collections') and len(self.collections_columns) > 0
|
||||||
@property
|
@property
|
||||||
def collections_columns(self):
|
def collections_columns(self):
|
||||||
return self.get_pref('collections_columns')
|
return self.get_pref('collections_columns')
|
||||||
@property
|
@property
|
||||||
def delete_empty_collections(self):
|
def delete_empty_collections(self):
|
||||||
return self.get_pref('delete_empty_collections')
|
return self.manage_collections and self.get_pref('delete_empty_collections')
|
||||||
|
@property
|
||||||
|
def ignore_collections_names(self):
|
||||||
|
return [x.lower().strip() for x in self.get_pref('ignore_collections_names').split(',')]
|
||||||
|
@property
|
||||||
|
def create_bookshelves(self):
|
||||||
|
# Only for backwards compatabilty
|
||||||
|
return self.manage_collections
|
||||||
|
@property
|
||||||
|
def delete_empty_shelves(self):
|
||||||
|
# Only for backwards compatabilty
|
||||||
|
return self.delete_empty_collections
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def upload_covers(self):
|
def upload_covers(self):
|
||||||
@ -2898,12 +2945,6 @@ class KOBOTOUCH(KOBO):
|
|||||||
return self.get_pref('modify_css')
|
return self.get_pref('modify_css')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def create_bookshelves(self):
|
|
||||||
return self.get_pref('create_collections') and self.supports_bookshelves
|
|
||||||
@property
|
|
||||||
def delete_empty_shelves(self):
|
|
||||||
return self.get_pref('delete_empty_collections') and self.supports_bookshelves
|
|
||||||
@property
|
|
||||||
def update_device_metadata(self):
|
def update_device_metadata(self):
|
||||||
return self.get_pref('update_device_metadata')
|
return self.get_pref('update_device_metadata')
|
||||||
@property
|
@property
|
||||||
@ -2920,6 +2961,11 @@ class KOBOTOUCH(KOBO):
|
|||||||
@property
|
@property
|
||||||
def supports_bookshelves(self):
|
def supports_bookshelves(self):
|
||||||
return self.dbversion >= self.min_supported_dbversion
|
return self.dbversion >= self.min_supported_dbversion
|
||||||
|
# @property
|
||||||
|
# def supports_reading_list(self):
|
||||||
|
# # debug_print("KoboTouch.supports_reading_list: self.fwversion=%s self.min_reading_list_fwversion=%s" % (self.fwversion, self.min_reading_list_fwversion))
|
||||||
|
# # debug_print("KoboTouch.supports_reading_list: self.fwversion >= self.min_reading_list_fwversion=%s" % (self.fwversion >= self.min_reading_list_fwversion))
|
||||||
|
# return self.fwversion >= self.min_reading_list_fwversion
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def show_archived_books(self):
|
def show_archived_books(self):
|
||||||
@ -2956,8 +3002,7 @@ class KOBOTOUCH(KOBO):
|
|||||||
def modify_database_check(self, function):
|
def modify_database_check(self, function):
|
||||||
# Checks to see whether the database version is supported
|
# Checks to see whether the database version is supported
|
||||||
# and whether the user has chosen to support the firmware version
|
# and whether the user has chosen to support the firmware version
|
||||||
# debug_print("KoboTouch:modify_database_check - self.fwversion > self.max_supported_fwversion=", self.fwversion > self.max_supported_fwversion)
|
if self.dbversion > self.supported_dbversion or self.is_supported_fwversion:
|
||||||
if self.dbversion > self.supported_dbversion or self.fwversion > self.max_supported_fwversion:
|
|
||||||
# Unsupported database
|
# Unsupported database
|
||||||
if not self.get_pref('support_newer_firmware'):
|
if not self.get_pref('support_newer_firmware'):
|
||||||
debug_print('The database has been upgraded past supported version')
|
debug_print('The database has been upgraded past supported version')
|
||||||
@ -2989,6 +3034,13 @@ class KOBOTOUCH(KOBO):
|
|||||||
# Supported database version
|
# Supported database version
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_supported_fwversion(self):
|
||||||
|
# Starting with firmware version 3.19.x, the last number appears to be is a
|
||||||
|
# build number. It can be safely ignored when testing the firmware version.
|
||||||
|
debug_print("KoboTouch::is_supported_fwversion - self.fwversion[:2]", self.fwversion[:2])
|
||||||
|
return self.fwversion[:2] > self.max_supported_fwversion
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def migrate_old_settings(cls, settings):
|
def migrate_old_settings(cls, settings):
|
||||||
debug_print("KoboTouch::migrate_old_settings - start")
|
debug_print("KoboTouch::migrate_old_settings - start")
|
||||||
|
@ -98,6 +98,7 @@ class KOBOTOUCHConfig(TabbedDeviceConfig):
|
|||||||
p['manage_collections'] = self.manage_collections
|
p['manage_collections'] = self.manage_collections
|
||||||
p['create_collections'] = self.create_collections
|
p['create_collections'] = self.create_collections
|
||||||
p['collections_columns'] = self.collections_columns
|
p['collections_columns'] = self.collections_columns
|
||||||
|
p['ignore_collections_names'] = self.ignore_collections_names
|
||||||
p['delete_empty_collections'] = self.delete_empty_collections
|
p['delete_empty_collections'] = self.delete_empty_collections
|
||||||
|
|
||||||
p['upload_covers'] = self.upload_covers
|
p['upload_covers'] = self.upload_covers
|
||||||
@ -221,10 +222,19 @@ class CollectionsGroupBox(DeviceOptionsGroupBox):
|
|||||||
device.get_pref('delete_empty_collections')
|
device.get_pref('delete_empty_collections')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.ignore_collections_names_label = QLabel(_('Ignore Collections'))
|
||||||
|
self.ignore_collections_names_edit = QLineEdit(self)
|
||||||
|
self.ignore_collections_names_edit.setToolTip(_('List the names of collections to be ignored by ' +
|
||||||
|
'the collection management. The collections listed ' +
|
||||||
|
'will not be changed. Names are separated by commas.'))
|
||||||
|
self.ignore_collections_names_edit.setText(device.get_pref('ignore_collections_names'))
|
||||||
|
|
||||||
self.options_layout.addWidget(self.collections_columns_label, 1, 0, 1, 1)
|
self.options_layout.addWidget(self.collections_columns_label, 1, 0, 1, 1)
|
||||||
self.options_layout.addWidget(self.collections_columns_edit, 1, 1, 1, 1)
|
self.options_layout.addWidget(self.collections_columns_edit, 1, 1, 1, 1)
|
||||||
self.options_layout.addWidget(self.create_collections_checkbox, 2, 0, 1, 2)
|
self.options_layout.addWidget(self.create_collections_checkbox, 2, 0, 1, 2)
|
||||||
self.options_layout.addWidget(self.delete_empty_collections_checkbox, 3, 0, 1, 2)
|
self.options_layout.addWidget(self.delete_empty_collections_checkbox, 3, 0, 1, 2)
|
||||||
|
self.options_layout.addWidget(self.ignore_collections_names_label, 4, 0, 1, 1)
|
||||||
|
self.options_layout.addWidget(self.ignore_collections_names_edit, 4, 1, 1, 1)
|
||||||
self.options_layout.setRowStretch(4, 1)
|
self.options_layout.setRowStretch(4, 1)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -243,6 +253,10 @@ class CollectionsGroupBox(DeviceOptionsGroupBox):
|
|||||||
def delete_empty_collections(self):
|
def delete_empty_collections(self):
|
||||||
return self.delete_empty_collections_checkbox.isChecked()
|
return self.delete_empty_collections_checkbox.isChecked()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def ignore_collections_names(self):
|
||||||
|
return self.ignore_collections_names_edit.text().strip()
|
||||||
|
|
||||||
|
|
||||||
class CoversGroupBox(DeviceOptionsGroupBox):
|
class CoversGroupBox(DeviceOptionsGroupBox):
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user