mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Cache the format filename info in memory
This commit is contained in:
parent
96b6492050
commit
66421de310
@ -170,6 +170,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
except:
|
except:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
self.field_metadata = FieldMetadata()
|
self.field_metadata = FieldMetadata()
|
||||||
|
self.format_filename_cache = defaultdict(dict)
|
||||||
self._library_id_ = None
|
self._library_id_ = None
|
||||||
# Create the lock to be used to guard access to the metadata writer
|
# Create the lock to be used to guard access to the metadata writer
|
||||||
# queues. This must be an RLock, not a Lock
|
# queues. This must be an RLock, not a Lock
|
||||||
@ -310,6 +311,12 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
if not self.is_second_db:
|
if not self.is_second_db:
|
||||||
load_user_template_functions(self.prefs.get('user_template_functions', []))
|
load_user_template_functions(self.prefs.get('user_template_functions', []))
|
||||||
|
|
||||||
|
# Load the format filename cache
|
||||||
|
self.format_filename_cache = defaultdict(dict)
|
||||||
|
for book_id, fmt, name in self.conn.get(
|
||||||
|
'SELECT book,format,name FROM data'):
|
||||||
|
self.format_filename_cache[book_id][fmt.upper()] = name
|
||||||
|
|
||||||
self.conn.executescript('''
|
self.conn.executescript('''
|
||||||
DROP TRIGGER IF EXISTS author_insert_trg;
|
DROP TRIGGER IF EXISTS author_insert_trg;
|
||||||
CREATE TEMP TRIGGER author_insert_trg
|
CREATE TEMP TRIGGER author_insert_trg
|
||||||
@ -599,7 +606,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
fname = self.construct_file_name(id)
|
fname = self.construct_file_name(id)
|
||||||
changed = False
|
changed = False
|
||||||
for format in formats:
|
for format in formats:
|
||||||
name = self.conn.get('SELECT name FROM data WHERE book=? AND format=?', (id, format), all=False)
|
name = self.format_filename_cache[id].get(format.upper(), None)
|
||||||
if name and name != fname:
|
if name and name != fname:
|
||||||
changed = True
|
changed = True
|
||||||
break
|
break
|
||||||
@ -1139,12 +1146,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
|
|
||||||
def format_files(self, index, index_is_id=False):
|
def format_files(self, index, index_is_id=False):
|
||||||
id = index if index_is_id else self.id(index)
|
id = index if index_is_id else self.id(index)
|
||||||
try:
|
return [(v, k) for k, v in self.format_filename_cache[id].iteritems()]
|
||||||
formats = self.conn.get('SELECT name,format FROM data WHERE book=?', (id,))
|
|
||||||
formats = map(lambda x:(x[0], x[1]), formats)
|
|
||||||
return formats
|
|
||||||
except:
|
|
||||||
return []
|
|
||||||
|
|
||||||
def formats(self, index, index_is_id=False, verify_formats=True):
|
def formats(self, index, index_is_id=False, verify_formats=True):
|
||||||
''' Return available formats as a comma separated list or None if there are no available formats '''
|
''' Return available formats as a comma separated list or None if there are no available formats '''
|
||||||
@ -1230,7 +1232,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
'''
|
'''
|
||||||
id = index if index_is_id else self.id(index)
|
id = index if index_is_id else self.id(index)
|
||||||
try:
|
try:
|
||||||
name = self.conn.get('SELECT name FROM data WHERE book=? AND format=?', (id, format), all=False)
|
name = self.format_filename_cache[id][format.upper()]
|
||||||
except:
|
except:
|
||||||
return None
|
return None
|
||||||
if name:
|
if name:
|
||||||
@ -1327,11 +1329,11 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
def add_format(self, index, format, stream, index_is_id=False, path=None,
|
def add_format(self, index, format, stream, index_is_id=False, path=None,
|
||||||
notify=True, replace=True):
|
notify=True, replace=True):
|
||||||
id = index if index_is_id else self.id(index)
|
id = index if index_is_id else self.id(index)
|
||||||
if format:
|
if not format: format = ''
|
||||||
self.format_metadata_cache[id].pop(format.upper(), None)
|
self.format_metadata_cache[id].pop(format.upper(), None)
|
||||||
|
name = self.format_filename_cache[id].get(format.upper(), None)
|
||||||
if path is None:
|
if path is None:
|
||||||
path = os.path.join(self.library_path, self.path(id, index_is_id=True))
|
path = os.path.join(self.library_path, self.path(id, index_is_id=True))
|
||||||
name = self.conn.get('SELECT name FROM data WHERE book=? AND format=?', (id, format), all=False)
|
|
||||||
if name and not replace:
|
if name and not replace:
|
||||||
return False
|
return False
|
||||||
name = self.construct_file_name(id)
|
name = self.construct_file_name(id)
|
||||||
@ -1349,6 +1351,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
self.conn.execute('INSERT OR REPLACE INTO data (book,format,uncompressed_size,name) VALUES (?,?,?,?)',
|
self.conn.execute('INSERT OR REPLACE INTO data (book,format,uncompressed_size,name) VALUES (?,?,?,?)',
|
||||||
(id, format.upper(), size, name))
|
(id, format.upper(), size, name))
|
||||||
self.conn.commit()
|
self.conn.commit()
|
||||||
|
self.format_filename_cache[id][format.upper()] = name
|
||||||
self.refresh_ids([id])
|
self.refresh_ids([id])
|
||||||
if notify:
|
if notify:
|
||||||
self.notify('metadata', [id])
|
self.notify('metadata', [id])
|
||||||
@ -1396,9 +1399,9 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
def remove_format(self, index, format, index_is_id=False, notify=True,
|
def remove_format(self, index, format, index_is_id=False, notify=True,
|
||||||
commit=True, db_only=False):
|
commit=True, db_only=False):
|
||||||
id = index if index_is_id else self.id(index)
|
id = index if index_is_id else self.id(index)
|
||||||
if format:
|
if not format: format = ''
|
||||||
self.format_metadata_cache[id].pop(format.upper(), None)
|
self.format_metadata_cache[id].pop(format.upper(), None)
|
||||||
name = self.conn.get('SELECT name FROM data WHERE book=? AND format=?', (id, format), all=False)
|
name = self.format_filename_cache[id].pop(format.upper(), None)
|
||||||
if name:
|
if name:
|
||||||
if not db_only:
|
if not db_only:
|
||||||
try:
|
try:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user