diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index fe41001818..8dd9157def 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -1125,10 +1125,18 @@ class LibraryDatabase2(LibraryDatabase): self.set_path(id, True) self.notify('metadata', [id]) - def set_metadata(self, id, mi): + def set_metadata(self, id, mi, ignore_errors=False): ''' Set metadata for the book `id` from the `MetaInformation` object `mi` ''' + def doit(func, *args, **kwargs): + try: + func(*args, **kwargs) + except: + if ignore_errors: + traceback.print_exc() + else: + raise if mi.title: self.set_title(id, mi.title) if not mi.authors: @@ -1138,29 +1146,29 @@ class LibraryDatabase2(LibraryDatabase): authors += string_to_authors(a) self.set_authors(id, authors, notify=False) if mi.author_sort: - self.set_author_sort(id, mi.author_sort, notify=False) + doit(self.set_author_sort, id, mi.author_sort, notify=False) if mi.publisher: - self.set_publisher(id, mi.publisher, notify=False) + doit(self.set_publisher, id, mi.publisher, notify=False) if mi.rating: - self.set_rating(id, mi.rating, notify=False) + doit(self.set_rating, id, mi.rating, notify=False) if mi.series: - self.set_series(id, mi.series, notify=False) + doit(self.set_series, id, mi.series, notify=False) if mi.cover_data[1] is not None: - self.set_cover(id, mi.cover_data[1]) + doit(self.set_cover, id, mi.cover_data[1]) elif mi.cover is not None and os.access(mi.cover, os.R_OK): - self.set_cover(id, open(mi.cover, 'rb').read()) + doit(self.set_cover, id, open(mi.cover, 'rb')) if mi.tags: - self.set_tags(id, mi.tags, notify=False) + doit(self.set_tags, id, mi.tags, notify=False) if mi.comments: - self.set_comment(id, mi.comments, notify=False) + doit(self.set_comment, id, mi.comments, notify=False) if mi.isbn and mi.isbn.strip(): - self.set_isbn(id, mi.isbn, notify=False) + doit(self.set_isbn, id, mi.isbn, notify=False) if mi.series_index: - self.set_series_index(id, mi.series_index, notify=False) + doit(self.set_series_index, id, mi.series_index, notify=False) if mi.pubdate: - self.set_pubdate(id, mi.pubdate, notify=False) + doit(self.set_pubdate, id, mi.pubdate, notify=False) if getattr(mi, 'timestamp', None) is not None: - self.set_timestamp(id, mi.timestamp, notify=False) + doit(self.set_timestamp, id, mi.timestamp, notify=False) self.set_path(id, True) self.notify('metadata', [id]) @@ -1519,7 +1527,7 @@ class LibraryDatabase2(LibraryDatabase): id = obj.lastrowid self.data.books_added([id], self) self.set_path(id, True) - self.set_metadata(id, mi) + self.set_metadata(id, mi, ignore_errors=True) for path in formats: ext = os.path.splitext(path)[1][1:].lower() if ext == 'opf':