This commit is contained in:
Kovid Goyal 2011-04-12 18:39:12 -06:00
parent f3beb13b62
commit 15f638784d

View File

@ -77,7 +77,7 @@ class ViewLog(QDialog): # {{{
self.copy_button.clicked.connect(self.copy_to_clipboard) self.copy_button.clicked.connect(self.copy_to_clipboard)
l.addWidget(self.bb) l.addWidget(self.bb)
self.setModal(False) self.setModal(False)
self.resize(QSize(500, 400)) self.resize(QSize(700, 500))
self.setWindowTitle(_('Download log')) self.setWindowTitle(_('Download log'))
self.setWindowIcon(QIcon(I('debug.png'))) self.setWindowIcon(QIcon(I('debug.png')))
self.show() self.show()
@ -121,7 +121,6 @@ class ApplyDialog(QDialog):
self.canceled = False self.canceled = False
QTimer.singleShot(20, self.do_one) QTimer.singleShot(20, self.do_one)
self.exec_()
def do_one(self): def do_one(self):
if self.canceled: if self.canceled:
@ -189,7 +188,7 @@ def apply_metadata(job, gui, q, result):
q.finished.disconnect() q.finished.disconnect()
if result != q.Accepted: if result != q.Accepted:
return return
id_map, failed_ids = job.result id_map, failed_ids, failed_covers, title_map = job.result
id_map = dict([(k, v) for k, v in id_map.iteritems() if k not in id_map = dict([(k, v) for k, v in id_map.iteritems() if k not in
failed_ids]) failed_ids])
if not id_map: if not id_map:
@ -219,24 +218,32 @@ def apply_metadata(job, gui, q, result):
return return
_amd = ApplyDialog(id_map, gui) _amd = ApplyDialog(id_map, gui)
_amd.exec_()
def proceed(gui, job): def proceed(gui, job):
gui.status_bar.show_message(_('Metadata download completed'), 3000) gui.status_bar.show_message(_('Metadata download completed'), 3000)
id_map, failed_ids = job.result id_map, failed_ids, failed_covers, title_map = job.result
fmsg = det_msg = '' fmsg = det_msg = ''
if failed_ids: if failed_ids or failed_covers:
fmsg = _('Could not download metadata for %d of the books. Click' fmsg = '<p>'+_('Could not download metadata and/or covers for %d of the books. Click'
' "Show details" to see which books.')%len(failed_ids) ' "Show details" to see which books.')%len(failed_ids)
det_msg = '\n'.join([id_map[i].title for i in failed_ids]) det_msg = []
for i in failed_ids | failed_covers:
title = title_map[i]
if i in failed_ids:
title += (' ' + _('(Failed metadata)'))
if i in failed_covers:
title += (' ' + _('(Failed cover)'))
det_msg.append(title)
msg = '<p>' + _('Finished downloading metadata for <b>%d book(s)</b>. ' msg = '<p>' + _('Finished downloading metadata for <b>%d book(s)</b>. '
'Proceed with updating the metadata in your library?')%len(id_map) 'Proceed with updating the metadata in your library?')%len(id_map)
q = MessageBox(MessageBox.QUESTION, _('Download complete'), q = MessageBox(MessageBox.QUESTION, _('Download complete'),
msg + fmsg, det_msg=det_msg, show_copy_button=bool(failed_ids), msg + fmsg, det_msg='\n'.join(det_msg), show_copy_button=bool(failed_ids),
parent=gui) parent=gui)
q.vlb = q.bb.addButton(_('View log'), q.bb.ActionRole) q.vlb = q.bb.addButton(_('View log'), q.bb.ActionRole)
q.vlb.setIcon(QIcon(I('debug.png'))) q.vlb.setIcon(QIcon(I('debug.png')))
q.vlb.clicked.connect(partial(view_log, job, q)) q.vlb.clicked.connect(partial(view_log, job, q))
q.det_msg_toggle.setVisible(bool(failed_ids)) q.det_msg_toggle.setVisible(bool(failed_ids | failed_covers))
q.setModal(False) q.setModal(False)
q.show() q.show()
q.finished.connect(partial(apply_metadata, job, gui, q)) q.finished.connect(partial(apply_metadata, job, gui, q))
@ -265,6 +272,8 @@ def download(ids, db, do_identify, covers,
metadata = [db.get_metadata(i, index_is_id=True, get_user_categories=False) metadata = [db.get_metadata(i, index_is_id=True, get_user_categories=False)
for i in ids] for i in ids]
failed_ids = set() failed_ids = set()
failed_covers = set()
title_map = {}
ans = {} ans = {}
count = 0 count = 0
for i, mi in izip(ids, metadata): for i, mi in izip(ids, metadata):
@ -272,6 +281,7 @@ def download(ids, db, do_identify, covers,
log.error('Aborting...') log.error('Aborting...')
break break
title, authors, identifiers = mi.title, mi.authors, mi.identifiers title, authors, identifiers = mi.title, mi.authors, mi.identifiers
title_map[i] = title
if do_identify: if do_identify:
results = [] results = []
try: try:
@ -282,9 +292,14 @@ def download(ids, db, do_identify, covers,
if results: if results:
mi = merge_result(mi, results[0]) mi = merge_result(mi, results[0])
identifiers = mi.identifiers identifiers = mi.identifiers
if not mi.is_null('rating'):
# set_metadata expects a rating out of 10
mi.rating *= 2
else: else:
log.error('Failed to download metadata for', title) log.error('Failed to download metadata for', title)
failed_ids.add(mi) failed_ids.add(i)
# We don't want set_metadata operating on anything but covers
mi = merge_result(mi, mi)
if covers: if covers:
cdata = download_cover(log, title=title, authors=authors, cdata = download_cover(log, title=title, authors=authors,
identifiers=identifiers) identifiers=identifiers)
@ -292,12 +307,14 @@ def download(ids, db, do_identify, covers,
with PersistentTemporaryFile('.jpg', 'downloaded-cover-') as f: with PersistentTemporaryFile('.jpg', 'downloaded-cover-') as f:
f.write(cdata[-1]) f.write(cdata[-1])
mi.cover = f.name mi.cover = f.name
else:
failed_covers.add(i)
ans[i] = mi ans[i] = mi
count += 1 count += 1
notifications.put((count/len(ids), notifications.put((count/len(ids),
_('Downloaded %d of %d')%(count, len(ids)))) _('Downloaded %d of %d')%(count, len(ids))))
log('Download complete, with %d failures'%len(failed_ids)) log('Download complete, with %d failures'%len(failed_ids))
return (ans, failed_ids) return (ans, failed_ids, failed_covers, title_map)