mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 18:24:30 -04:00
Merge from trunk
This commit is contained in:
commit
c03b9247cf
@ -492,7 +492,6 @@ class BulkSeries(BulkBase):
|
||||
if clear or val != '':
|
||||
extras = []
|
||||
next_index = self.db.get_next_cc_series_num_for(val, num=self.col_id)
|
||||
print 'cc commit next index', next_index
|
||||
for book_id in book_ids:
|
||||
if clear:
|
||||
extras.append(None)
|
||||
|
@ -95,11 +95,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
||||
|
||||
def mark_dirty(self):
|
||||
db = self.gui.library_view.model().db
|
||||
ids = [id for id in db.data.iterallids()]
|
||||
db.dirtied(ids)
|
||||
info_dialog(self, _('Backup metadata'),
|
||||
_('Metadata will be backed up while calibre is running, at the '
|
||||
'rate of 30 books per minute.'), show=True)
|
||||
db.dirtied(list(db.data.iterallids()))
|
||||
|
||||
def debug_device_detection(self, *args):
|
||||
from calibre.gui2.preferences.device_debug import DebugDevice
|
||||
|
@ -48,7 +48,7 @@ class MetadataBackup(Thread): # {{{
|
||||
while self.keep_running:
|
||||
try:
|
||||
time.sleep(0.5) # Limit to two per second
|
||||
id_ = self.db.dirtied_queue.get(True, 2)
|
||||
id_ = self.db.dirtied_queue.get(True, 1.45)
|
||||
except Empty:
|
||||
continue
|
||||
except:
|
||||
|
@ -566,7 +566,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
||||
def metadata_for_field(self, key):
|
||||
return self.field_metadata[key]
|
||||
|
||||
def clear_dirtied(self, book_ids=None):
|
||||
def clear_dirtied(self, book_ids):
|
||||
'''
|
||||
Clear the dirtied indicator for the books. This is used when fetching
|
||||
metadata, creating an OPF, and writing a file are separated into steps.
|
||||
@ -585,7 +585,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
||||
self.conn.commit()
|
||||
|
||||
def dump_metadata(self, book_ids=None, remove_from_dirtied=True,
|
||||
commit=True, dump_to=None):
|
||||
commit=True):
|
||||
'''
|
||||
Write metadata for each record to an individual OPF file
|
||||
|
||||
@ -598,19 +598,12 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
||||
for book_id in book_ids:
|
||||
if not self.data.has_id(book_id):
|
||||
continue
|
||||
mi = self.get_metadata(book_id, index_is_id=True, get_cover=False)
|
||||
# Always set cover to cover.jpg. Even if cover doesn't exist,
|
||||
# no harm done. This way no need to call dirtied when
|
||||
# cover is set/removed
|
||||
mi.cover = 'cover.jpg'
|
||||
path, mi = self.get_metadata_for_dump(book_id)
|
||||
if path is None:
|
||||
continue
|
||||
raw = metadata_to_opf(mi)
|
||||
path = os.path.join(self.abspath(book_id, index_is_id=True),
|
||||
'metadata.opf')
|
||||
if dump_to is None:
|
||||
with open(path, 'wb') as f:
|
||||
f.write(raw)
|
||||
else:
|
||||
dump_to.append((path, raw))
|
||||
with open(path, 'wb') as f:
|
||||
f.write(raw)
|
||||
if remove_from_dirtied:
|
||||
self.conn.execute('DELETE FROM metadata_dirtied WHERE book=?',
|
||||
(book_id,))
|
||||
@ -660,9 +653,13 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
||||
try:
|
||||
path = os.path.join(self.abspath(idx, index_is_id=True), 'metadata.opf')
|
||||
mi = self.get_metadata(idx, index_is_id=True)
|
||||
# Always set cover to cover.jpg. Even if cover doesn't exist,
|
||||
# no harm done. This way no need to call dirtied when
|
||||
# cover is set/removed
|
||||
mi.cover = 'cover.jpg'
|
||||
except:
|
||||
return ((None, None))
|
||||
return ((path, mi))
|
||||
return (None, None)
|
||||
return (path, mi)
|
||||
|
||||
def get_metadata(self, idx, index_is_id=False, get_cover=False):
|
||||
'''
|
||||
|
@ -48,12 +48,13 @@ class Restore(Thread):
|
||||
self.books = []
|
||||
self.conflicting_custom_cols = {}
|
||||
self.failed_restores = []
|
||||
self.mismatched_dirs = []
|
||||
self.successes = 0
|
||||
self.tb = None
|
||||
|
||||
@property
|
||||
def errors_occurred(self):
|
||||
return self.failed_dirs or \
|
||||
return self.failed_dirs or self.mismatched_dirs or \
|
||||
self.conflicting_custom_cols or self.failed_restores
|
||||
|
||||
@property
|
||||
@ -74,6 +75,13 @@ class Restore(Thread):
|
||||
for x in self.conflicting_custom_cols:
|
||||
ans += '\t#'+x+'\n'
|
||||
|
||||
if self.mismatched_dirs:
|
||||
ans += '\n\n'
|
||||
ans += 'The following folders were ignored:\n'
|
||||
for x in self.mismatched_dirs:
|
||||
ans += '\t'+x+'\n'
|
||||
|
||||
|
||||
return ans
|
||||
|
||||
|
||||
@ -140,7 +148,7 @@ class Restore(Thread):
|
||||
'path': path,
|
||||
})
|
||||
else:
|
||||
self.ignored_dirs.append(dirpath)
|
||||
self.mismatched_dirs.append(dirpath)
|
||||
|
||||
def create_cc_metadata(self):
|
||||
self.books.sort(key=itemgetter('timestamp'))
|
||||
|
Loading…
x
Reference in New Issue
Block a user