mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-08-30 23:00:21 -04:00
Match books in library window: When doing the initial search using the title of the book on the device, if no matches are found remove trailing text in parentheses or after a colon and try again. Fixes #2117322 [[Enhancement] Match book to library - ignore words in parenthesis](https://bugs.launchpad.net/calibre/+bug/2117322)
This commit is contained in:
parent
075e7e5a4b
commit
5284fb6fb1
@ -6,6 +6,8 @@ __copyright__ = '2013, Kovid Goyal kovid@kovidgoyal.net'
|
|||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
|
|
||||||
|
from contextlib import suppress
|
||||||
|
|
||||||
from qt.core import QAbstractItemView, QApplication, QCursor, QDialog, Qt, QTableWidgetItem, QTimer
|
from qt.core import QAbstractItemView, QApplication, QCursor, QDialog, Qt, QTableWidgetItem, QTimer
|
||||||
|
|
||||||
from calibre.gui2 import error_dialog, gprefs
|
from calibre.gui2 import error_dialog, gprefs
|
||||||
@ -109,8 +111,10 @@ class MatchBooks(QDialog, Ui_MatchBooks):
|
|||||||
self.buttonBox.rejected.connect(self.reject)
|
self.buttonBox.rejected.connect(self.reject)
|
||||||
self.ignore_next_key = False
|
self.ignore_next_key = False
|
||||||
|
|
||||||
search_text = self.device_db[self.current_device_book_id].title
|
self.device_book_title = self.device_db[self.current_device_book_id].title.strip()
|
||||||
|
search_text = self.device_book_title
|
||||||
search_text = search_text.replace('(', '\\(').replace(')', '\\)')
|
search_text = search_text.replace('(', '\\(').replace(')', '\\)')
|
||||||
|
self.device_book_search_query = search_text
|
||||||
self.search_text.setText(search_text)
|
self.search_text.setText(search_text)
|
||||||
if search_text and len(self.library_db.new_api.all_book_ids()) < 8000:
|
if search_text and len(self.library_db.new_api.all_book_ids()) < 8000:
|
||||||
QTimer.singleShot(0, self.search_button.click)
|
QTimer.singleShot(0, self.search_button.click)
|
||||||
@ -140,6 +144,24 @@ class MatchBooks(QDialog, Ui_MatchBooks):
|
|||||||
except ParseException as e:
|
except ParseException as e:
|
||||||
return error_dialog(self.gui, _('Could not search'), _(
|
return error_dialog(self.gui, _('Could not search'), _(
|
||||||
'The search expression {} is not valid.').format(query), det_msg=str(e), show=True)
|
'The search expression {} is not valid.').format(query), det_msg=str(e), show=True)
|
||||||
|
if not books and query == self.device_book_search_query:
|
||||||
|
import re
|
||||||
|
modified = re.sub(r'\s*\([^)]*\)$', '', self.device_book_title).replace('(', r'\(').replace(')', r'\)')
|
||||||
|
if modified:
|
||||||
|
with suppress(ParseException):
|
||||||
|
books = self.library_db.data.search(modified, return_matches=True)
|
||||||
|
if not books:
|
||||||
|
again = False
|
||||||
|
if ':' in modified:
|
||||||
|
modified = modified.partition(':')[0]
|
||||||
|
again = True
|
||||||
|
elif ':' in self.device_book_title:
|
||||||
|
modified = self.device_book_title.partition(':')[0]
|
||||||
|
modified = modified.replace('(', r'\(').replace(')', r'\)')
|
||||||
|
again = True
|
||||||
|
if again:
|
||||||
|
with suppress(ParseException):
|
||||||
|
books = self.library_db.data.search(modified, return_matches=True)
|
||||||
self.books_table.setRowCount(len(books))
|
self.books_table.setRowCount(len(books))
|
||||||
|
|
||||||
self.books_table.setSortingEnabled(False)
|
self.books_table.setSortingEnabled(False)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user