From d3d125aa9acfd6ee9e48804cc24f4a50eda70535 Mon Sep 17 00:00:00 2001 From: Charles Haley Date: Wed, 14 Dec 2022 20:51:55 +0000 Subject: [PATCH] Bug #1999571: Similar books: Grouped search problems. Fixed by adding a new API method db.cache,split_if_is_multiple_composite(). This method converts the value to a list if the composite is "tags-like". The intention is that plugins etc can use the method if needed. --- src/calibre/db/cache.py | 7 +++++++ src/calibre/gui2/actions/similar_books.py | 1 + 2 files changed, 8 insertions(+) diff --git a/src/calibre/db/cache.py b/src/calibre/db/cache.py index f797790dba..80b925e770 100644 --- a/src/calibre/db/cache.py +++ b/src/calibre/db/cache.py @@ -2349,6 +2349,13 @@ class Cache: return f.get_books_for_val(item_id_or_composite_value, self._get_proxy_metadata, self._all_book_ids()) return self._books_for_field(f.name, int(item_id_or_composite_value)) + @read_api + def split_if_is_multiple_composite(self, f, v): + fm = self.field_metadata.get(f, None) + if fm and fm['datatype'] == 'composite' and fm['is_multiple']: + return [v.strip() for v in v.split(',') if v.strip()] + return v + @read_api def data_for_find_identical_books(self): ''' Return data that can be used to implement diff --git a/src/calibre/gui2/actions/similar_books.py b/src/calibre/gui2/actions/similar_books.py index e9015aa29b..cc248ba20e 100644 --- a/src/calibre/gui2/actions/similar_books.py +++ b/src/calibre/gui2/actions/similar_books.py @@ -66,6 +66,7 @@ class SimilarBooksAction(InterfaceAction): v = mi.get(f, None) if not v: continue + v = db.new_api.split_if_is_multiple_composite(f, v) if isinstance(v, list): val.update(v) else: