diff --git a/src/calibre/ebooks/html/input.py b/src/calibre/ebooks/html/input.py index fbcec7861c..6d3f5cde85 100644 --- a/src/calibre/ebooks/html/input.py +++ b/src/calibre/ebooks/html/input.py @@ -328,6 +328,7 @@ class HTMLInput(InputFormatPlugin): filelist = get_filelist(htmlpath, basedir, opts, log) + filelist = [f for f in filelist if not f.is_binary] htmlfile_map = {} for f in filelist: path = f.path @@ -336,6 +337,7 @@ class HTMLInput(InputFormatPlugin): id, href = oeb.manifest.generate(id='html', href=bname) htmlfile_map[path] = href item = oeb.manifest.add(id, href, 'text/html') + item.html_input_href = bname oeb.spine.add(item, True) self.added_resources = {} @@ -409,8 +411,9 @@ class HTMLInput(InputFormatPlugin): if not islinux: link = link.lower() if link not in self.added_resources: + bhref = os.path.basename(link) id, href = self.oeb.manifest.generate(id='added', - href=os.path.basename(link)) + href=bhref) self.oeb.log.debug('Added', link) self.oeb.container = self.DirContainer(os.path.dirname(link), self.oeb.log) @@ -418,7 +421,9 @@ class HTMLInput(InputFormatPlugin): guessed = self.guess_type(href)[0] media_type = guessed or self.BINARY_MIME - self.oeb.manifest.add(id, href, media_type).data + item = self.oeb.manifest.add(id, href, media_type) + item.html_input_href = bhref + item.data self.added_resources[link] = href nlink = self.added_resources[link] diff --git a/src/calibre/ebooks/oeb/base.py b/src/calibre/ebooks/oeb/base.py index ba4ebbc598..215e5a65ce 100644 --- a/src/calibre/ebooks/oeb/base.py +++ b/src/calibre/ebooks/oeb/base.py @@ -790,10 +790,10 @@ class Manifest(object): data = first_pass(data) # Force into the XHTML namespace if barename(data.tag) != 'html': - self.log.warn('File %r does not appear to be (X)HTML'%self.href) + self.oeb.log.warn('File %r does not appear to be (X)HTML'%self.href) nroot = etree.fromstring('') for child in list(data): - child.getparent.remove(child) + child.getparent().remove(child) nroot.append(child) data = nroot elif not namespace(data.tag): @@ -927,7 +927,8 @@ class Manifest(object): if data is None: if self._loader is None: return None - data = self._loader(self.href) + data = self._loader(getattr(self, 'html_input_href', + self.href)) if not isinstance(data, basestring): pass # already parsed elif self.media_type.lower() in OEB_DOCS: diff --git a/src/calibre/gui2/dialogs/metadata_bulk.ui b/src/calibre/gui2/dialogs/metadata_bulk.ui index f2bcc3cd93..05cb9cf12c 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.ui +++ b/src/calibre/gui2/dialogs/metadata_bulk.ui @@ -45,6 +45,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + authors + @@ -55,6 +58,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + author_sort + @@ -104,6 +110,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + publisher + @@ -262,6 +271,19 @@
widgets.h
+ + authors + auto_author_sort + author_sort + rating + publisher + tag_editor_button + tags + remove_tags + series + remove_format + button_box + diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py index c38af0cbf7..7d3f8c5742 100644 --- a/src/calibre/gui2/library.py +++ b/src/calibre/gui2/library.py @@ -844,14 +844,15 @@ class OnDeviceSearch(SearchQueryParser): def get_matches(self, location, query): location = location.lower().strip() query = query.lower().strip() - if location not in ('title', 'authors', 'tags', 'all'): + if location not in ('title', 'author', 'tag', 'all', 'format'): return set([]) matches = set([]) - locations = ['title', 'authors', 'tags'] if location == 'all' else [location] + locations = ['title', 'author', 'tag', 'format'] if location == 'all' else [location] q = { 'title' : lambda x : getattr(x, 'title').lower(), - 'authors': lambda x: getattr(x, 'authors').lower(), - 'tags':lambda x: ','.join(getattr(x, 'tags')).lower() + 'author': lambda x: getattr(x, 'authors').lower(), + 'tag':lambda x: ','.join(getattr(x, 'tags')).lower(), + 'format':lambda x: os.path.splitext(x.path)[1].lower() } for i, v in enumerate(locations): locations[i] = q[v] @@ -870,7 +871,7 @@ class DeviceBooksModel(BooksModel): self.db = [] self.map = [] self.sorted_map = [] - self.unknown = str(self.trUtf8('Unknown')) + self.unknown = _('Unknown') self.marked_for_deletion = {} self.search_engine = OnDeviceSearch(self) self.editable = True