diff --git a/cps/templates/search_form.html b/cps/templates/search_form.html index e713fb93..98ab392c 100644 --- a/cps/templates/search_form.html +++ b/cps/templates/search_form.html @@ -31,6 +31,14 @@ +
+ + +
diff --git a/cps/web.py b/cps/web.py index 10eb11f3..21bc41a0 100644 --- a/cps/web.py +++ b/cps/web.py @@ -618,7 +618,8 @@ def render_read_books(page, are_read, as_xml=False, order=None): db_filter = and_(ub.ReadBook.user_id == int(current_user.id), ub.ReadBook.read_status == ub.ReadBook.STATUS_FINISHED) else: - db_filter = coalesce(ub.ReadBook.read_status, 0) != ub.ReadBook.STATUS_FINISHED + db_filter = and_(ub.ReadBook.user_id == int(current_user.id), + coalesce(ub.ReadBook.read_status, 0) != ub.ReadBook.STATUS_FINISHED) entries, random, pagination = calibre_db.fill_indexpage(page, 0, db.Books, db_filter, @@ -1030,6 +1031,7 @@ def render_adv_search_results(term, offset=None, order=None, limit=None): rating_low = term.get("ratinghigh") rating_high = term.get("ratinglow") description = term.get("comment") + read_status = term.get("read_status") if author_name: author_name = author_name.strip().lower().replace(',', '|') if book_title: @@ -1047,7 +1049,7 @@ def render_adv_search_results(term, offset=None, order=None, limit=None): if include_tag_inputs or exclude_tag_inputs or include_series_inputs or exclude_series_inputs or \ include_languages_inputs or exclude_languages_inputs or author_name or book_title or \ publisher or pub_start or pub_end or rating_low or rating_high or description or cc_present or \ - include_extension_inputs or exclude_extension_inputs: + include_extension_inputs or exclude_extension_inputs or read_status: searchterm.extend((author_name.replace('|', ','), book_title, publisher)) if pub_start: try: @@ -1076,6 +1078,8 @@ def render_adv_search_results(term, offset=None, order=None, limit=None): searchterm.extend([_(u"Rating <= %(rating)s", rating=rating_high)]) if rating_low: searchterm.extend([_(u"Rating >= %(rating)s", rating=rating_low)]) + if read_status: + searchterm.extend([_(u"Read Status = %(status)s", status=read_status)]) searchterm.extend(ext for ext in include_extension_inputs) searchterm.extend(ext for ext in exclude_extension_inputs) # handle custom columns @@ -1092,6 +1096,23 @@ def render_adv_search_results(term, offset=None, order=None, limit=None): q = q.filter(db.Books.pubdate >= pub_start) if pub_end: q = q.filter(db.Books.pubdate <= pub_end) + if read_status: + if config.config_read_column: + if read_status=="True": + q = q.join(db.cc_classes[config.config_read_column], isouter=True) \ + .filter(db.cc_classes[config.config_read_column].value == True) + else: + q = q.join(db.cc_classes[config.config_read_column], isouter=True) \ + .filter(coalesce(db.cc_classes[config.config_read_column].value, False) != True) + else: + if read_status == "True": + q = q.join(ub.ReadBook, db.Books.id==ub.ReadBook.book_id, isouter=True)\ + .filter(ub.ReadBook.user_id == int(current_user.id), + ub.ReadBook.read_status == ub.ReadBook.STATUS_FINISHED) + else: + q = q.join(ub.ReadBook, db.Books.id == ub.ReadBook.book_id, isouter=True) \ + .filter(ub.ReadBook.user_id == int(current_user.id), + coalesce(ub.ReadBook.read_status, 0) != ub.ReadBook.STATUS_FINISHED) if publisher: q = q.filter(db.Books.publishers.any(func.lower(db.Publishers.name).ilike("%" + publisher + "%"))) for tag in include_tag_inputs: