Fix #855060 (calibre, version 0.8.19 ERROR: Unhandled exception: <b>AttributeError</b>:'MobileReadStore' object has no attribute 'lock' Traceback (most recent call last): File "site-packages/calibre/gui2/actions/store.py", line 130, in open_store File "site-packages/calibre/gui2/store/stores/mobileread/mobileread_plugin.py", line 40, in open File "site-packages/calibre/gui2/store/stores/mobileread/mobileread_plugin.py", line 57, in update_cache AttributeError: 'MobileReadStore' object has no attribute 'lock')

This commit is contained in:
Kovid Goyal 2011-11-28 20:17:45 +05:30
parent f130425da8
commit 8f16a5e02a
2 changed files with 15 additions and 12 deletions

View File

@ -21,13 +21,14 @@ from calibre.gui2.store.stores.mobileread.cache_update_thread import CacheUpdate
from calibre.gui2.store.stores.mobileread.store_dialog import MobileReadStoreDialog from calibre.gui2.store.stores.mobileread.store_dialog import MobileReadStoreDialog
class MobileReadStore(BasicStoreConfig, StorePlugin): class MobileReadStore(BasicStoreConfig, StorePlugin):
def genesis(self): def __init__(self, *args, **kwargs):
StorePlugin.__init__(self, *args, **kwargs)
self.lock = Lock() self.lock = Lock()
def open(self, parent=None, detail_item=None, external=False): def open(self, parent=None, detail_item=None, external=False):
url = 'http://www.mobileread.com/' url = 'http://www.mobileread.com/'
if external or self.config.get('open_external', False): if external or self.config.get('open_external', False):
open_url(QUrl(detail_item if detail_item else url)) open_url(QUrl(detail_item if detail_item else url))
else: else:
@ -44,7 +45,7 @@ class MobileReadStore(BasicStoreConfig, StorePlugin):
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
books = self.get_book_list() books = self.get_book_list()
if not books: if not books:
return return
@ -56,24 +57,25 @@ class MobileReadStore(BasicStoreConfig, StorePlugin):
book.drm = SearchResult.DRM_UNLOCKED book.drm = SearchResult.DRM_UNLOCKED
yield book yield book
def update_cache(self, parent=None, timeout=10, force=False, suppress_progress=False): def update_cache(self, parent=None, timeout=10, force=False,
suppress_progress=False):
if self.lock.acquire(False): if self.lock.acquire(False):
try: try:
update_thread = CacheUpdateThread(self.config, self.seralize_books, timeout) update_thread = CacheUpdateThread(self.config, self.seralize_books, timeout)
if not suppress_progress: if not suppress_progress:
progress = CacheProgressDialog(parent) progress = CacheProgressDialog(parent)
progress.set_message(_('Updating MobileRead book cache...')) progress.set_message(_('Updating MobileRead book cache...'))
update_thread.total_changed.connect(progress.set_total) update_thread.total_changed.connect(progress.set_total)
update_thread.update_progress.connect(progress.set_progress) update_thread.update_progress.connect(progress.set_progress)
update_thread.update_details.connect(progress.set_details) update_thread.update_details.connect(progress.set_details)
progress.rejected.connect(update_thread.abort) progress.rejected.connect(update_thread.abort)
progress.open() progress.open()
update_thread.start() update_thread.start()
while update_thread.is_alive() and not progress.canceled: while update_thread.is_alive() and not progress.canceled:
QCoreApplication.processEvents() QCoreApplication.processEvents()
if progress.isVisible(): if progress.isVisible():
progress.accept() progress.accept()
return not progress.canceled return not progress.canceled
@ -84,7 +86,7 @@ class MobileReadStore(BasicStoreConfig, StorePlugin):
def get_book_list(self): def get_book_list(self):
return self.deseralize_books(self.config.get('book_list', [])) return self.deseralize_books(self.config.get('book_list', []))
def seralize_books(self, books): def seralize_books(self, books):
sbooks = [] sbooks = []
for b in books: for b in books:
@ -95,7 +97,7 @@ class MobileReadStore(BasicStoreConfig, StorePlugin):
data['formats'] = b.formats data['formats'] = b.formats
sbooks.append(data) sbooks.append(data)
return sbooks return sbooks
def deseralize_books(self, sbooks): def deseralize_books(self, sbooks):
books = [] books = []
for s in sbooks: for s in sbooks:

View File

@ -195,7 +195,8 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{
for ac in self.iactions.values(): for ac in self.iactions.values():
ac.do_genesis() ac.do_genesis()
self.donate_action = QAction(QIcon(I('donate.png')), _('&Donate to support calibre'), self) self.donate_action = QAction(QIcon(I('donate.png')),
_('&Donate to support calibre'), self)
for st in self.istores.values(): for st in self.istores.values():
st.do_genesis() st.do_genesis()
MainWindowMixin.__init__(self, db) MainWindowMixin.__init__(self, db)