mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 18:24:30 -04:00
Refactor book details web search link generating code to make it re-useable in server
This commit is contained in:
parent
cc8b7ad47b
commit
ae15a85e73
@ -67,16 +67,21 @@ def search_action_with_data(search_term, value, book_id, field=None, **k):
|
|||||||
return search_action(search_term, value, field=field, book_id=book_id, **k)
|
return search_action(search_term, value, field=field, book_id=book_id, **k)
|
||||||
|
|
||||||
|
|
||||||
|
def web_search_link(template, mi, value):
|
||||||
|
formatter = SafeFormat()
|
||||||
|
mi.set('item_value', value)
|
||||||
|
u = formatter.safe_format(template, mi, 'BOOK DETAILS WEB LINK', mi)
|
||||||
|
if u:
|
||||||
|
return u, prepare_string_for_xml(_('Click to browse to: {}').format(u), attribute=True)
|
||||||
|
return '', ''
|
||||||
|
|
||||||
|
|
||||||
def cc_search_action_with_data(search_term, value, book_id, fm, mi, field=None, **k):
|
def cc_search_action_with_data(search_term, value, book_id, fm, mi, field=None, **k):
|
||||||
if mi is not None and fm is not None:
|
if mi is not None and fm is not None:
|
||||||
if template := fm.get('display', {}).get('web_search_template'):
|
if template := fm.get('display', {}).get('web_search_template'):
|
||||||
try:
|
try:
|
||||||
formatter = SafeFormat()
|
u, v = web_search_link(template, mi, value)
|
||||||
mi.set('item_value', value)
|
return action('cc_url', url=u), v
|
||||||
u = formatter.safe_format(template, mi, 'BOOK DETAILS WEB LINK', mi)
|
|
||||||
if u:
|
|
||||||
v = prepare_string_for_xml(_('Click to browse to {}').format(u), attribute=True)
|
|
||||||
return action('cc_url', url=u), v
|
|
||||||
except Exception:
|
except Exception:
|
||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
@ -91,6 +96,13 @@ def notes_action(**keys):
|
|||||||
DEFAULT_AUTHOR_LINK = f'search-{DEFAULT_AUTHOR_SOURCE}'
|
DEFAULT_AUTHOR_LINK = f'search-{DEFAULT_AUTHOR_SOURCE}'
|
||||||
|
|
||||||
|
|
||||||
|
def resolve_default_author_link(ans: str | None = None) -> str:
|
||||||
|
if ans == 'https://en.wikipedia.org/w/index.php?search={author}':
|
||||||
|
# The old default value for this setting
|
||||||
|
ans = ''
|
||||||
|
return ans or DEFAULT_AUTHOR_LINK
|
||||||
|
|
||||||
|
|
||||||
def author_search_href(which, title=None, author=None):
|
def author_search_href(which, title=None, author=None):
|
||||||
if which == 'calibre':
|
if which == 'calibre':
|
||||||
return 'calibre', _('Search the calibre library for books by %s') % author
|
return 'calibre', _('Search the calibre library for books by %s') % author
|
||||||
|
@ -630,12 +630,8 @@ QSettings.setDefaultFormat(QSettings.Format.IniFormat)
|
|||||||
|
|
||||||
|
|
||||||
def default_author_link():
|
def default_author_link():
|
||||||
from calibre.ebooks.metadata.book.render import DEFAULT_AUTHOR_LINK
|
from calibre.ebooks.metadata.book.render import resolve_default_author_link
|
||||||
ans = gprefs.get('default_author_link')
|
return resolve_default_author_link(gprefs.get('default_author_link'))
|
||||||
if ans == 'https://en.wikipedia.org/w/index.php?search={author}':
|
|
||||||
# The old default value for this setting
|
|
||||||
ans = DEFAULT_AUTHOR_LINK
|
|
||||||
return ans or DEFAULT_AUTHOR_LINK
|
|
||||||
|
|
||||||
|
|
||||||
def available_heights():
|
def available_heights():
|
||||||
|
@ -165,6 +165,22 @@ def get_gpref(name: str, defval=None):
|
|||||||
return gprefs.get(name, defval)
|
return gprefs.get(name, defval)
|
||||||
|
|
||||||
|
|
||||||
|
def web_search_link(db, book_id: int, field: str, item_val: str) -> tuple[str, str]:
|
||||||
|
from calibre.ebooks.metadata.book.render import render_author_link, resolve_default_author_link, web_search_link
|
||||||
|
if field == 'authors':
|
||||||
|
default_author_link = resolve_default_author_link(get_gpref('default_author_link'))
|
||||||
|
author_sort = db.author_sort_from_authors((item_val,))
|
||||||
|
url, tooltip = render_author_link(default_author_link, item_val, author_sort, db.field_for('title', book_id))
|
||||||
|
else:
|
||||||
|
metadata = db.field_metadata.get(field)
|
||||||
|
if metadata is None or not (template := metadata.get('display', {}).get('web_search_template')):
|
||||||
|
return '', ''
|
||||||
|
url, tooltip = web_search_link(template, db.get_metadata(book_id), item_val)
|
||||||
|
if url.partition(':')[0].lower() in ('http', 'https'):
|
||||||
|
return url, tooltip
|
||||||
|
return '', ''
|
||||||
|
|
||||||
|
|
||||||
def get_icon_for_node(node, parent, node_to_tag_map, tag_map, eval_formatter, db):
|
def get_icon_for_node(node, parent, node_to_tag_map, tag_map, eval_formatter, db):
|
||||||
category = node['category']
|
category = node['category']
|
||||||
if category in ('search', 'formats') or category.startswith('@'):
|
if category in ('search', 'formats') or category.startswith('@'):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user