diff --git a/src/libprs500/ebooks/lrf/lrs/convert_from.py b/src/libprs500/ebooks/lrf/lrs/convert_from.py index 05784d4337..c1af9d2579 100644 --- a/src/libprs500/ebooks/lrf/lrs/convert_from.py +++ b/src/libprs500/ebooks/lrf/lrs/convert_from.py @@ -1,4 +1,4 @@ -## Copyright (C) 2008 Roger Critchlow +## Copyright (C) 2008 Roger Critchlow ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or diff --git a/src/libprs500/ebooks/metadata/isbndb.py b/src/libprs500/ebooks/metadata/isbndb.py index f9d7db3d33..83d9b60673 100644 --- a/src/libprs500/ebooks/metadata/isbndb.py +++ b/src/libprs500/ebooks/metadata/isbndb.py @@ -29,12 +29,12 @@ BASE_URL = 'http://isbndb.com/api/books.xml?access_key=%(key)s&page_number=1&res class ISBNDBError(Exception): pass -def fetch_metadata(url, max=100): +def fetch_metadata(url, max=100, timeout=5.): books = [] page_number = 1 total_results = sys.maxint timeout = socket.getdefaulttimeout() - socket.setdefaulttimeout(2.) + socket.setdefaulttimeout(timeout) try: while len(books) < total_results and max > 0: try: @@ -123,7 +123,7 @@ key is the account key you generate after signing up for a free account from isb return parser -def create_books(opts, args, logger=None): +def create_books(opts, args, logger=None, timeout=5.): if logger is None: level = logging.DEBUG if opts.verbose else logging.INFO logger = logging.getLogger('isbndb') @@ -137,7 +137,7 @@ def create_books(opts, args, logger=None): logger.info('ISBNDB query: '+url) - return [ISBNDBMetadata(book) for book in fetch_metadata(url)] + return [ISBNDBMetadata(book) for book in fetch_metadata(url, timeout=timeout)] def main(args=sys.argv): parser = option_parser() diff --git a/src/libprs500/gui2/dialogs/config.py b/src/libprs500/gui2/dialogs/config.py index 0a45b41fbf..df3ec658c7 100644 --- a/src/libprs500/gui2/dialogs/config.py +++ b/src/libprs500/gui2/dialogs/config.py @@ -39,6 +39,7 @@ class ConfigDialog(QDialog, Ui_Dialog): dirs = settings.value('frequently used directories', QVariant(QStringList())).toStringList() rn = bool(settings.value('use roman numerals for series number', QVariant(True)).toBool()) + self.timeout.setValue(settings.value('network timeout', QVariant(5)).toInt()[0]) self.roman_numerals.setChecked(rn) self.directory_list.addItems(dirs) self.connect(self.add_button, SIGNAL('clicked(bool)'), self.add_dir) @@ -62,6 +63,9 @@ class ConfigDialog(QDialog, Ui_Dialog): self.directory_list.takeItem(idx) def accept(self): + settings = QSettings() + settings.setValue('use roman numerals for series number', QVariant(self.roman_numerals.isChecked())) + settings.setValue('network timeout', QVariant(self.timeout.value())) path = qstring_to_unicode(self.location.text()) if not path or not os.path.exists(path) or not os.path.isdir(path): d = error_dialog(self, _('Invalid database location'), _('Invalid database location ')+path+_('
Must be a directory.')) @@ -72,7 +76,5 @@ class ConfigDialog(QDialog, Ui_Dialog): else: self.database_location = os.path.abspath(path) self.directories = [qstring_to_unicode(self.directory_list.item(i).text()) for i in range(self.directory_list.count())] - settings = QSettings() settings.setValue('frequently used directories', QVariant(self.directories)) - settings.setValue('use roman numerals for series number', QVariant(self.roman_numerals.isChecked())) QDialog.accept(self) diff --git a/src/libprs500/gui2/dialogs/config.ui b/src/libprs500/gui2/dialogs/config.ui index dd3e667915..fb7382d1e7 100644 --- a/src/libprs500/gui2/dialogs/config.ui +++ b/src/libprs500/gui2/dialogs/config.ui @@ -19,8 +19,8 @@ - - + + @@ -54,7 +54,50 @@ - + + + + Use &Roman numerals for series number + + + true + + + + + + + + + Default network &timeout: + + + timeout + + + + + + + Set the default timeout for network fetches (i.e. anytime libprs500 foes out to the internet to get information) + + + seconds + + + 2 + + + 120 + + + 5 + + + + + + Frequently used directories @@ -149,29 +192,19 @@ - + Qt::Vertical - 20 - 40 + 372 + 16 - - - - Use &Roman numerals for series number - - - true - - - diff --git a/src/libprs500/gui2/dialogs/fetch_metadata.py b/src/libprs500/gui2/dialogs/fetch_metadata.py index 97dd6f8e65..d4d5e0251c 100644 --- a/src/libprs500/gui2/dialogs/fetch_metadata.py +++ b/src/libprs500/gui2/dialogs/fetch_metadata.py @@ -75,11 +75,12 @@ class Matches(QAbstractTableModel): class FetchMetadata(QDialog, Ui_FetchMetadata): - def __init__(self, parent, isbn, title, author, publisher): + def __init__(self, parent, isbn, title, author, publisher, timeout): QDialog.__init__(self, parent) Ui_FetchMetadata.__init__(self) self.setupUi(self) + self.timeout = timeout QObject.connect(self.fetch, SIGNAL('clicked()'), self.fetch_metadata) self.key.setText(QSettings().value('isbndb.com key', QVariant('')).toString()) @@ -126,7 +127,7 @@ class FetchMetadata(QDialog, Ui_FetchMetadata): handler.setFormatter(logging.Formatter('[%(levelname)s] %(filename)s:%(lineno)s: %(message)s')) self.logger.addHandler(handler) - books = create_books(opts, args, self.logger) + books = create_books(opts, args, self.logger, self.timeout) self.model = Matches(books) diff --git a/src/libprs500/gui2/dialogs/metadata_single.py b/src/libprs500/gui2/dialogs/metadata_single.py index 9a97c37e2b..9f5ae06b9d 100644 --- a/src/libprs500/gui2/dialogs/metadata_single.py +++ b/src/libprs500/gui2/dialogs/metadata_single.py @@ -18,7 +18,7 @@ add/remove formats ''' import os -from PyQt4.QtCore import SIGNAL, QObject, QCoreApplication, Qt +from PyQt4.QtCore import SIGNAL, QObject, QCoreApplication, Qt, QVariant, QSettings from PyQt4.QtGui import QPixmap, QListWidgetItem, QErrorMessage, QDialog @@ -149,7 +149,7 @@ class MetadataSingleDialog(QDialog, Ui_MetadataSingleDialog): self.fetch_cover) QObject.connect(self.tag_editor_button, SIGNAL('clicked()'), self.edit_tags) - + self.timeout = float(QSettings().value('network timeout', QVariant(5)).toInt()[0]) self.title.setText(db.title(row)) isbn = db.isbn(self.id) if not isbn: @@ -234,7 +234,7 @@ class MetadataSingleDialog(QDialog, Ui_MetadataSingleDialog): QCoreApplication.instance().processEvents() try: login(d.username(), d.password(), force=False) - cover_data = cover_from_isbn(isbn)[0] + cover_data = cover_from_isbn(isbn, timeout=self.timeout)[0] pix = QPixmap() pix.loadFromData(cover_data) @@ -260,7 +260,7 @@ class MetadataSingleDialog(QDialog, Ui_MetadataSingleDialog): author = qstring_to_unicode(self.authors.text()).split(',')[0] publisher = qstring_to_unicode(self.publisher.text()) if isbn or title or author or publisher: - d = FetchMetadata(self, isbn, title, author, publisher) + d = FetchMetadata(self, isbn, title, author, publisher, self.timeout) d.exec_() if d.result() == QDialog.Accepted: book = d.selected_book()