Fix for #3515 (Exclude shelves with Advanced search not working correct)

This commit is contained in:
Ozzie Isaacs
2026-01-08 20:01:39 +01:00

View File

@@ -177,11 +177,24 @@ def adv_search_serie(q, include_series_inputs, exclude_series_inputs):
q = q.filter(not_(db.Books.series.any(db.Series.id == serie)))
return q
def adv_search_shelf(q, include_shelf_inputs, exclude_shelf_inputs):
q = q.outerjoin(ub.BookShelf, db.Books.id == ub.BookShelf.book_id)\
.filter(or_(ub.BookShelf.shelf == None, ub.BookShelf.shelf.notin_(exclude_shelf_inputs)))
if len(include_shelf_inputs) > 0:
q = q.filter(ub.BookShelf.shelf.in_(include_shelf_inputs))
if len(include_shelf_inputs):
in_shelf = (
calibre_db.session.query(ub.BookShelf.id)
.filter(ub.BookShelf.book_id == db.Books.id)
.filter(ub.BookShelf.shelf.in_(include_shelf_inputs))
.exists()
)
q = q.filter(in_shelf)
if len(exclude_shelf_inputs):
ex_shelf = (
calibre_db.session.query(ub.BookShelf.id)
.filter(ub.BookShelf.book_id == db.Books.id)
.filter(ub.BookShelf.shelf.in_(exclude_shelf_inputs))
.exists()
)
q = q.filter(~ex_shelf)
return q
def extend_search_term(searchterm,
@@ -341,10 +354,12 @@ def render_adv_search_results(term, offset=None, order=None, limit=None):
q = adv_search_ratings(q, rating_high, rating_low)
if description:
pass
q = q.filter(db.Books.comments.any(func.lower(db.Comments.text).ilike("%" + description + "%")))
# search custom columns
try:
pass
q = adv_search_custom_columns(cc, term, q)
except AttributeError as ex:
log.debug_or_exception(ex)