diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index 6af4f79cbb..d360451e2e 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -21,6 +21,7 @@ from calibre.ebooks.metadata.book.base import Metadata from calibre.utils.date import parse_date, isoformat from calibre.utils.localization import get_lang from calibre import prints +from calibre.utils.cleantext import clean_ascii_chars class Resource(object): # {{{ ''' @@ -1157,7 +1158,7 @@ class OPFCreator(Metadata): def DC_ELEM(tag, text, dc_attrs={}, opf_attrs={}): if text: - elem = getattr(DC, tag)(text, **dc_attrs) + elem = getattr(DC, tag)(clean_ascii_chars(text), **dc_attrs) else: elem = getattr(DC, tag)(**dc_attrs) for k, v in opf_attrs.items(): @@ -1260,7 +1261,6 @@ def metadata_to_opf(mi, as_string=True): from lxml import etree import textwrap from calibre.ebooks.oeb.base import OPF, DC - from calibre.utils.cleantext import clean_ascii_chars if not mi.application_id: mi.application_id = str(uuid.uuid4()) diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index c5b13901ae..a200562ea9 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -428,7 +428,7 @@ class BooksModel(QAbstractTableModel): # {{{ au = self.db.authors(row) if not au: au = _('Unknown') - au = ', '.join([a.strip() for a in au.split(',')]) + au = authors_to_string([a.strip().replace('|', ',') for a in au.split(',')]) data[_('Author(s)')] = au return data diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index 0c9d430b2e..637e7efc9c 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -16,7 +16,7 @@ from PyQt4.Qt import Qt, QTreeView, QApplication, pyqtSignal, QFont, QSize, \ QIcon, QPoint, QVBoxLayout, QHBoxLayout, QComboBox, QTimer,\ QAbstractItemModel, QVariant, QModelIndex, QMenu, QFrame,\ QPushButton, QWidget, QItemDelegate, QString, QLabel, \ - QShortcut, QKeySequence, SIGNAL, QMimeData + QShortcut, QKeySequence, SIGNAL, QMimeData, QSizePolicy from calibre.ebooks.metadata import title_sort from calibre.gui2 import config, NONE, gprefs @@ -2064,7 +2064,8 @@ class TagBrowserWidget(QWidget): # {{{ self.search_button = QPushButton() self.search_button.setText(_('F&ind')) self.search_button.setToolTip(_('Find the first/next matching item')) - self.search_button.setFixedWidth(40) + self.search_button.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, + QSizePolicy.Minimum)) search_layout.addWidget(self.search_button) self.expand_button = QPushButton() @@ -2072,6 +2073,9 @@ class TagBrowserWidget(QWidget): # {{{ self.expand_button.setFixedWidth(20) self.expand_button.setToolTip(_('Collapse all categories')) search_layout.addWidget(self.expand_button) + search_layout.setStretch(0, 10) + search_layout.setStretch(1, 1) + search_layout.setStretch(2, 1) self.current_find_position = None self.search_button.clicked.connect(self.find) diff --git a/src/calibre/web/feeds/recipes/model.py b/src/calibre/web/feeds/recipes/model.py index 712f37c5bf..2de674cc15 100644 --- a/src/calibre/web/feeds/recipes/model.py +++ b/src/calibre/web/feeds/recipes/model.py @@ -140,8 +140,8 @@ class RecipeModel(QAbstractItemModel, SearchQueryParser): self.scheduler_config = SchedulerConfig() try: with zipfile.ZipFile(P('builtin_recipes.zip'), 'r') as zf: - self.favicons = dict([(x, zf.getinfo(x)) for x in zf.namelist() if - x.endswith('.png')]) + self.favicons = dict([(x.filename, x) for x in zf.infolist() if + x.filename.endswith('.png')]) except: self.favicons = {} self.do_refresh()