mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Store: Clean calibre query logic from searches better.
This commit is contained in:
parent
234248cd23
commit
6a40749075
@ -33,6 +33,13 @@ TIMEOUT = 75 # seconds
|
|||||||
SEARCH_THREAD_TOTAL = 4
|
SEARCH_THREAD_TOTAL = 4
|
||||||
COVER_DOWNLOAD_THREAD_TOTAL = 2
|
COVER_DOWNLOAD_THREAD_TOTAL = 2
|
||||||
|
|
||||||
|
def comparable_price(text):
|
||||||
|
if len(text) < 3 or text[-3] not in ('.', ','):
|
||||||
|
text += '00'
|
||||||
|
text = re.sub(r'\D', '', text)
|
||||||
|
text = text.rjust(6, '0')
|
||||||
|
|
||||||
|
|
||||||
class SearchDialog(QDialog, Ui_Dialog):
|
class SearchDialog(QDialog, Ui_Dialog):
|
||||||
|
|
||||||
def __init__(self, istores, *args):
|
def __init__(self, istores, *args):
|
||||||
@ -294,9 +301,7 @@ class SearchThread(Thread):
|
|||||||
while self._run and not self.tasks.empty():
|
while self._run and not self.tasks.empty():
|
||||||
try:
|
try:
|
||||||
query, store_name, store_plugin, timeout = self.tasks.get()
|
query, store_name, store_plugin, timeout = self.tasks.get()
|
||||||
squery = query
|
squery = self._clean_query(query)
|
||||||
for loc in SearchFilter.USABLE_LOCATIONS:
|
|
||||||
squery = re.sub(r'%s:"?(?P<a>[^\s"]+)"?' % loc, '\g<a>', squery)
|
|
||||||
for res in store_plugin.search(squery, timeout=timeout):
|
for res in store_plugin.search(squery, timeout=timeout):
|
||||||
if not self._run:
|
if not self._run:
|
||||||
return
|
return
|
||||||
@ -306,6 +311,21 @@ class SearchThread(Thread):
|
|||||||
self.tasks.task_done()
|
self.tasks.task_done()
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def _clean_query(self, query):
|
||||||
|
query = query.lower()
|
||||||
|
for loc in ( 'all', 'author', 'authors', 'title'):
|
||||||
|
query = re.sub(r'%s:"?(?P<a>[^\s"]+)"?' % loc, '\g<a>', query)
|
||||||
|
for loc in ('cover', 'drm', 'format', 'formats', 'price', 'store'):
|
||||||
|
query = re.sub(r'%s:"[^"]"' % loc, '', query)
|
||||||
|
query = re.sub(r'%s:[^\s]*' % loc, '', query)
|
||||||
|
query = re.sub(r'(^|\s)(and|not|or)(\s|$)', ' ', query)
|
||||||
|
query = query.replace('\\', '')
|
||||||
|
query = query.replace('!', '')
|
||||||
|
query = query.replace('=', '')
|
||||||
|
query = query.replace('~', '')
|
||||||
|
query = re.sub(r'\s{2,}', ' ', query)
|
||||||
|
return query
|
||||||
|
|
||||||
|
|
||||||
class CoverThreadPool(GenericDownloadThreadPool):
|
class CoverThreadPool(GenericDownloadThreadPool):
|
||||||
@ -439,11 +459,7 @@ class Matches(QAbstractItemModel):
|
|||||||
elif col == 2:
|
elif col == 2:
|
||||||
text = result.author
|
text = result.author
|
||||||
elif col == 3:
|
elif col == 3:
|
||||||
text = result.price
|
text = comparable_price(result.price)
|
||||||
if len(text) < 3 or text[-3] not in ('.', ','):
|
|
||||||
text += '00'
|
|
||||||
text = re.sub(r'\D', '', text)
|
|
||||||
text = text.rjust(6, '0')
|
|
||||||
elif col == 4:
|
elif col == 4:
|
||||||
text = result.store_name
|
text = result.store_name
|
||||||
return text
|
return text
|
||||||
@ -504,8 +520,9 @@ class SearchFilter(SearchQueryParser):
|
|||||||
q = {
|
q = {
|
||||||
'author': self.search_result.author.lower(),
|
'author': self.search_result.author.lower(),
|
||||||
'cover': self.search_result.cover_url,
|
'cover': self.search_result.cover_url,
|
||||||
|
'drm': '',
|
||||||
'format': '',
|
'format': '',
|
||||||
'price': self.search_result.price,
|
'price': comparable_price(self.search_result.price),
|
||||||
'store': self.search_result.store_name.lower(),
|
'store': self.search_result.store_name.lower(),
|
||||||
'title': self.search_result.title.lower(),
|
'title': self.search_result.title.lower(),
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user