mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 10:14:46 -04:00
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:
parent
f130425da8
commit
8f16a5e02a
@ -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:
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user