Book details: Ctrl-clicking on tags now adds them to the existing search instead of replacing it. Fixes #1930136 [[Enhancement] Holding Ctrl and clicking on a tag in the Book details should add to the current search](https://bugs.launchpad.net/calibre/+bug/1930136)

This commit is contained in:
Kovid Goyal 2021-06-03 08:43:48 +05:30
parent 76f595274b
commit 3136eac5ff
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 21 additions and 6 deletions

View File

@ -151,19 +151,19 @@ def init_find_in_grouped_search(menu, field, value, book_info):
m.addAction(QIcon(get_icon_path(field, '')),
_('in category %s')%escape_for_menu(field_name),
lambda g=field: book_info.search_requested(
'{}:"={}"'.format(g, value.replace('"', r'\"'))))
'{}:"={}"'.format(g, value.replace('"', r'\"')), ''))
for gst in gsts_to_show:
icon_path = get_icon_path(gst, '@')
m.addAction(QIcon(icon_path),
_('in grouped search %s')%gst,
lambda g=gst: book_info.search_requested(
'{}:"={}"'.format(g, value.replace('"', r'\"'))))
'{}:"={}"'.format(g, value.replace('"', r'\"')), ''))
else:
menu.addAction(QIcon(I('search.png')),
_('Search calibre for {val} in category {name}').format(
val=escape_for_menu(value), name=escape_for_menu(field_name)),
lambda g=field: book_info.search_requested(
'{}:"={}"'.format(g, value.replace('"', r'\"'))))
'{}:"={}"'.format(g, value.replace('"', r'\"')), ''))
def render_html(mi, vertical, widget, all_fields=False, render_data_func=None, pref_name='book_display_fields'): # {{{
@ -918,7 +918,7 @@ class BookDetails(QWidget): # {{{
show_book_info = pyqtSignal()
open_containing_folder = pyqtSignal(int)
view_specific_format = pyqtSignal(int, object)
search_requested = pyqtSignal(object)
search_requested = pyqtSignal(object, object)
remove_specific_format = pyqtSignal(int, object)
remove_metadata_item = pyqtSignal(int, object, object)
save_specific_format = pyqtSignal(int, object)
@ -1030,7 +1030,14 @@ class BookDetails(QWidget): # {{{
typ, val = link.partition(':')[::2]
def search_term(field, val):
self.search_requested.emit('{}:"={}"'.format(field, val.replace('"', '\\"')))
append = ''
if QApplication.instance().keyboardModifiers() & Qt.KeyboardModifier.ControlModifier:
append = 'OR'
self.search_requested.emit(
'{}:"={}"'.format(field, val.replace('"', '\\"')),
append
)
def browse(url):
try:

View File

@ -664,7 +664,7 @@ class LayoutMixin(object): # {{{
type=Qt.ConnectionType.QueuedConnection)
self.book_details.open_containing_folder.connect(self.iactions['View'].view_folder_for_id)
self.book_details.view_specific_format.connect(self.iactions['View'].view_format_by_id)
self.book_details.search_requested.connect(self.search.set_search_string)
self.book_details.search_requested.connect(self.set_search_string_with_append)
self.book_details.remove_specific_format.connect(
self.iactions['Remove Books'].remove_format_by_id)
self.book_details.remove_metadata_item.connect(
@ -691,6 +691,14 @@ class LayoutMixin(object): # {{{
self.library_view.currentIndex())
self.library_view.setFocus(Qt.FocusReason.OtherFocusReason)
def set_search_string_with_append(self, expression, append=''):
current = self.search.text().strip()
if append:
expr = f'{current} {append} {expression}' if current else expression
else:
expr = expression
self.search.set_search_string(expr)
def edit_identifiers_triggerred(self):
book_id = self.library_view.current_book
db = self.current_db.new_api