Store: Use JSONConfig in more places.

This commit is contained in:
John Schember 2011-04-21 21:17:13 -04:00
parent 39db487bb4
commit 791e65fd00
2 changed files with 37 additions and 17 deletions

View File

@ -18,19 +18,18 @@ from PyQt4.Qt import Qt, QUrl, QDialog, QAbstractItemModel, QModelIndex, QVarian
pyqtSignal pyqtSignal
from calibre import browser from calibre import browser
from calibre.gui2 import open_url, NONE from calibre.gui2 import open_url, NONE, JSONConfig
from calibre.gui2.store import StorePlugin from calibre.gui2.store import StorePlugin
from calibre.gui2.store.basic_config import BasicStoreConfig from calibre.gui2.store.basic_config import BasicStoreConfig
from calibre.gui2.store.mobileread_store_dialog_ui import Ui_Dialog from calibre.gui2.store.mobileread_store_dialog_ui import Ui_Dialog
from calibre.gui2.store.search_result import SearchResult from calibre.gui2.store.search_result import SearchResult
from calibre.gui2.store.web_store_dialog import WebStoreDialog from calibre.gui2.store.web_store_dialog import WebStoreDialog
from calibre.utils.config import DynamicConfig
from calibre.utils.icu import sort_key from calibre.utils.icu import sort_key
class MobileReadStore(BasicStoreConfig, StorePlugin): class MobileReadStore(BasicStoreConfig, StorePlugin):
def genesis(self): def genesis(self):
self.config = DynamicConfig('store/store/' + self.name) self.config = JSONConfig('store/store/' + self.name)
self.rlock = RLock() self.rlock = RLock()
def open(self, parent=None, detail_item=None, external=False): def open(self, parent=None, detail_item=None, external=False):
@ -83,7 +82,7 @@ class MobileReadStore(BasicStoreConfig, StorePlugin):
with self.rlock: with self.rlock:
url = 'http://www.mobileread.com/forums/ebooks.php?do=getlist&type=html' url = 'http://www.mobileread.com/forums/ebooks.php?do=getlist&type=html'
last_download = self.config.get(self.name + '_last_download', None) last_download = self.config.get('last_download', None)
# Don't update the book list if our cache is less than one week old. # Don't update the book list if our cache is less than one week old.
if last_download and (time.time() - last_download) < 604800: if last_download and (time.time() - last_download) < 604800:
return return
@ -118,12 +117,34 @@ class MobileReadStore(BasicStoreConfig, StorePlugin):
# Save the book list and it's create time. # Save the book list and it's create time.
if books: if books:
self.config[self.name + '_last_download'] = time.time() self.config['last_download'] = time.time()
self.config[self.name + '_book_list'] = books self.config['book_list'] = self.seralize_books(books)
def get_book_list(self, timeout=10): def get_book_list(self, timeout=10):
self.update_book_list(timeout=timeout) self.update_book_list(timeout=timeout)
return self.config.get(self.name + '_book_list', []) return self.deseralize_books(self.config.get('book_list', []))
def seralize_books(self, books):
sbooks = []
for b in books:
data = {}
data['author'] = b.author
data['title'] = b.title
data['detail_item'] = b.detail_item
data['formats'] = b.formats
sbooks.append(data)
return sbooks
def deseralize_books(self, sbooks):
books = []
for s in sbooks:
b = SearchResult()
b.author = s.get('author', '')
b.title = s.get('title', '')
b.detail_item = s.get('detail_item', '')
b.formats = s.get('formats', '')
books.append(b)
return books
class MobeReadStoreDialog(QDialog, Ui_Dialog): class MobeReadStoreDialog(QDialog, Ui_Dialog):
@ -152,11 +173,11 @@ class MobeReadStoreDialog(QDialog, Ui_Dialog):
self.plugin.open(self, result.detail_item) self.plugin.open(self, result.detail_item)
def restore_state(self): def restore_state(self):
geometry = self.plugin.config['store_mobileread_dialog_geometry'] geometry = self.plugin.config.get('dialog_geometry', None)
if geometry: if geometry:
self.restoreGeometry(geometry) self.restoreGeometry(geometry)
results_cwidth = self.plugin.config['store_mobileread_dialog_results_view_column_width'] results_cwidth = self.plugin.config.get('dialog_results_view_column_width')
if results_cwidth: if results_cwidth:
for i, x in enumerate(results_cwidth): for i, x in enumerate(results_cwidth):
if i >= self.results_view.model().columnCount(): if i >= self.results_view.model().columnCount():
@ -166,16 +187,16 @@ class MobeReadStoreDialog(QDialog, Ui_Dialog):
for i in xrange(self.results_view.model().columnCount()): for i in xrange(self.results_view.model().columnCount()):
self.results_view.resizeColumnToContents(i) self.results_view.resizeColumnToContents(i)
self.results_view.model().sort_col = self.plugin.config.get('store_mobileread_dialog_sort_col', 0) self.results_view.model().sort_col = self.plugin.config.get('dialog_sort_col', 0)
self.results_view.model().sort_order = self.plugin.config.get('store_mobileread_dialog_sort_order', Qt.AscendingOrder) self.results_view.model().sort_order = self.plugin.config.get('dialog_sort_order', Qt.AscendingOrder)
self.results_view.model().sort(self.results_view.model().sort_col, self.results_view.model().sort_order) self.results_view.model().sort(self.results_view.model().sort_col, self.results_view.model().sort_order)
self.results_view.header().setSortIndicator(self.results_view.model().sort_col, self.results_view.model().sort_order) self.results_view.header().setSortIndicator(self.results_view.model().sort_col, self.results_view.model().sort_order)
def save_state(self): def save_state(self):
self.plugin.config['store_mobileread_dialog_geometry'] = self.saveGeometry() self.plugin.config['dialog_geometry'] = bytearray(self.saveGeometry())
self.plugin.config['store_mobileread_dialog_results_view_column_width'] = [self.results_view.columnWidth(i) for i in range(self.model.columnCount())] self.plugin.config['dialog_results_view_column_width'] = [self.results_view.columnWidth(i) for i in range(self.model.columnCount())]
self.plugin.config['store_mobileread_dialog_sort_col'] = self.results_view.model().sort_col self.plugin.config['dialog_sort_col'] = self.results_view.model().sort_col
self.plugin.config['store_mobileread_dialog_sort_order'] = self.results_view.model().sort_order self.plugin.config['dialog_sort_order'] = self.results_view.model().sort_order
def dialog_closed(self, result): def dialog_closed(self, result):
self.save_state() self.save_state()

View File

@ -19,13 +19,12 @@ from PyQt4.Qt import (Qt, QAbstractItemModel, QDialog, QTimer, QVariant,
QModelIndex, QPixmap, QSize, QCheckBox, QVBoxLayout) QModelIndex, QPixmap, QSize, QCheckBox, QVBoxLayout)
from calibre import browser from calibre import browser
from calibre.gui2 import NONE from calibre.gui2 import NONE, JSONConfig
from calibre.gui2.progress_indicator import ProgressIndicator from calibre.gui2.progress_indicator import ProgressIndicator
from calibre.gui2.store.search_ui import Ui_Dialog from calibre.gui2.store.search_ui import Ui_Dialog
from calibre.gui2.store.search_result import SearchResult from calibre.gui2.store.search_result import SearchResult
from calibre.library.caches import _match, CONTAINS_MATCH, EQUALS_MATCH, \ from calibre.library.caches import _match, CONTAINS_MATCH, EQUALS_MATCH, \
REGEXP_MATCH REGEXP_MATCH
from calibre.gui2 import JSONConfig
from calibre.utils.icu import sort_key from calibre.utils.icu import sort_key
from calibre.utils.magick.draw import thumbnail from calibre.utils.magick.draw import thumbnail
from calibre.utils.search_query_parser import SearchQueryParser from calibre.utils.search_query_parser import SearchQueryParser