diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 00da8f3e37..388a2d4fdb 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -19,7 +19,8 @@ from calibre.library import title_sort from calibre.library.database import LibraryDatabase from calibre.library.sqlite import connect, IntegrityError from calibre.utils.search_query_parser import SearchQueryParser -from calibre.ebooks.metadata import string_to_authors, authors_to_string, MetaInformation +from calibre.ebooks.metadata import string_to_authors, authors_to_string, \ + MetaInformation, authors_to_sort_string from calibre.ebooks.metadata.meta import get_metadata, set_metadata, \ metadata_from_formats from calibre.ebooks.metadata.opf2 import OPFCreator @@ -1197,11 +1198,17 @@ class LibraryDatabase2(LibraryDatabase): def import_book(self, mi, formats, notify=True): series_index = 1 if mi.series_index is None else mi.series_index + if not mi.title: + mi.title = _('Unknown') if not mi.authors: mi.authors = [_('Unknown')] - aus = mi.author_sort if mi.author_sort else ', '.join(mi.authors) + aus = mi.author_sort if mi.author_sort else authors_to_sort_string(mi.authors) + if isinstance(aus, str): + aus = aus.decode(preferred_encoding, 'replace') + title = mi.title if isinstance(mi.title, unicode) else \ + mi.title.decode(preferred_encoding, 'replace') obj = self.conn.execute('INSERT INTO books(title, uri, series_index, author_sort) VALUES (?, ?, ?, ?)', - (mi.title, None, series_index, aus)) + (title, None, series_index, aus)) id = obj.lastrowid self.data.books_added([id], self.conn) self.set_path(id, True)