mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Use the library broker for showing book info popups for non-current libraries
Also use an icon for the external links
This commit is contained in:
parent
866c15f233
commit
b89de1ccf1
1
imgsrc/external-link-for-dark-theme.svg
Normal file
1
imgsrc/external-link-for-dark-theme.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path fill="#6cb4ee" d="M1408 928v-480q0-26-19-45t-45-19h-480q-42 0-59 39-17 41 14 70l144 144-534 534q-19 19-19 45t19 45l102 102q19 19 45 19t45-19l534-534 144 144q18 19 45 19 12 0 25-5 39-17 39-59zm256-512v960q0 119-84.5 203.5t-203.5 84.5h-960q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5 84.5t84.5 203.5z"/></svg>
|
After Width: | Height: | Size: 440 B |
1
imgsrc/external-link.svg
Normal file
1
imgsrc/external-link.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path fill="#0000ff" d="M1408 928v-480q0-26-19-45t-45-19h-480q-42 0-59 39-17 41 14 70l144 144-534 534q-19 19-19 45t19 45l102 102q19 19 45 19t45-19l534-534 144 144q18 19 45 19 12 0 25-5 39-17 39-59zm256-512v960q0 119-84.5 203.5t-203.5 84.5h-960q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5 84.5t84.5 203.5z"/></svg>
|
After Width: | Height: | Size: 440 B |
BIN
resources/images/external-link-for-dark-theme.png
Normal file
BIN
resources/images/external-link-for-dark-theme.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
BIN
resources/images/external-link.png
Normal file
BIN
resources/images/external-link.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
@ -89,24 +89,24 @@ def mi_to_html(
|
|||||||
mi,
|
mi,
|
||||||
field_list=None, default_author_link=None, use_roman_numbers=True,
|
field_list=None, default_author_link=None, use_roman_numbers=True,
|
||||||
rating_font='Liberation Serif', rtl=False, comments_heading_pos='hide',
|
rating_font='Liberation Serif', rtl=False, comments_heading_pos='hide',
|
||||||
for_qt=False, vertical_fields=()
|
for_qt=False, vertical_fields=(), show_links=True,
|
||||||
):
|
):
|
||||||
|
|
||||||
show_links = not hasattr(mi, '_bd_dbwref')
|
link_markup = '↗️'
|
||||||
|
if for_qt:
|
||||||
|
link_markup = '<img valign="bottom" src="calibre-icon:///external-link.png" width=16 height=16>'
|
||||||
def get_link_map(column):
|
def get_link_map(column):
|
||||||
if not show_links:
|
|
||||||
return {}
|
|
||||||
try:
|
try:
|
||||||
return mi.link_maps[column]
|
return mi.link_maps[column]
|
||||||
except (KeyError, ValueError):
|
except Exception:
|
||||||
return {column:{}}
|
return {}
|
||||||
|
|
||||||
def add_other_link(field, field_value):
|
def add_other_link(field, field_value):
|
||||||
link = get_link_map(field).get(field_value, None)
|
if show_links:
|
||||||
|
link = get_link_map(field).get(field_value)
|
||||||
if link:
|
if link:
|
||||||
return (' <a title="%s" href="%s">%s</a>'%(_('Click to open {}').format(link), link, _('(item link)')))
|
link = prepare_string_for_xml(link, True)
|
||||||
else:
|
return ' <a title="{0}: {1}" href="{1}">{2}</a>'.format(_('Click to open'), link, link_markup)
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
if field_list is None:
|
if field_list is None:
|
||||||
|
@ -41,14 +41,18 @@ from polyglot.binary import from_hex_bytes
|
|||||||
InternetSearch = namedtuple('InternetSearch', 'author where')
|
InternetSearch = namedtuple('InternetSearch', 'author where')
|
||||||
|
|
||||||
|
|
||||||
def set_html(mi, html, text_browser):
|
def db_for_mi(mi):
|
||||||
if hasattr(mi, '_bd_dbwref') and mi._bd_dbwref is not None:
|
|
||||||
db = mi._bd_dbwref
|
|
||||||
else:
|
|
||||||
from calibre.gui2.ui import get_gui
|
from calibre.gui2.ui import get_gui
|
||||||
db = get_gui().current_db
|
lp = getattr(mi, 'external_library_path', None)
|
||||||
|
if lp:
|
||||||
|
return get_gui().library_broker.get_library(lp), True
|
||||||
|
return get_gui().current_db, False
|
||||||
|
|
||||||
|
|
||||||
|
def set_html(mi, html, text_browser):
|
||||||
book_id = getattr(mi, 'id', None)
|
book_id = getattr(mi, 'id', None)
|
||||||
search_paths = []
|
search_paths = []
|
||||||
|
db, _ = db_for_mi(mi)
|
||||||
if db and book_id is not None:
|
if db and book_id is not None:
|
||||||
path = db.abspath(book_id, index_is_id=True)
|
path = db.abspath(book_id, index_is_id=True)
|
||||||
if path:
|
if path:
|
||||||
@ -209,18 +213,15 @@ def comments_pat():
|
|||||||
def render_html(mi, vertical, widget, all_fields=False, render_data_func=None,
|
def render_html(mi, vertical, widget, all_fields=False, render_data_func=None,
|
||||||
pref_name='book_display_fields',
|
pref_name='book_display_fields',
|
||||||
pref_value=None): # {{{
|
pref_value=None): # {{{
|
||||||
if hasattr(mi, '_bd_dbwref') and mi._bd_dbwref is not None:
|
db, is_external = db_for_mi(mi)
|
||||||
db = mi._bd_dbwref
|
show_links = not is_external
|
||||||
else:
|
|
||||||
from calibre.gui2.ui import get_gui
|
|
||||||
db = get_gui().current_db
|
|
||||||
func = render_data_func or partial(render_data,
|
func = render_data_func or partial(render_data,
|
||||||
vertical_fields=db.prefs.get('book_details_vertical_categories') or ())
|
vertical_fields=db.prefs.get('book_details_vertical_categories') or ())
|
||||||
try:
|
try:
|
||||||
table, comment_fields = func(mi, all_fields=all_fields,
|
table, comment_fields = func(mi, all_fields=all_fields, show_links=show_links,
|
||||||
use_roman_numbers=config['use_roman_numerals_for_series_number'], pref_name=pref_name)
|
use_roman_numbers=config['use_roman_numerals_for_series_number'], pref_name=pref_name)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
table, comment_fields = func(mi, all_fields=all_fields,
|
table, comment_fields = func(mi, all_fields=all_fields, show_links=show_links,
|
||||||
use_roman_numbers=config['use_roman_numerals_for_series_number'])
|
use_roman_numbers=config['use_roman_numerals_for_series_number'])
|
||||||
|
|
||||||
def color_to_string(col):
|
def color_to_string(col):
|
||||||
@ -278,7 +279,7 @@ def get_field_list(fm, use_defaults=False, pref_name='book_display_fields', mi=N
|
|||||||
|
|
||||||
|
|
||||||
def render_data(mi, use_roman_numbers=True, all_fields=False, pref_name='book_display_fields',
|
def render_data(mi, use_roman_numbers=True, all_fields=False, pref_name='book_display_fields',
|
||||||
vertical_fields=()):
|
vertical_fields=(), show_links=True):
|
||||||
field_list = get_field_list(getattr(mi, 'field_metadata', field_metadata),
|
field_list = get_field_list(getattr(mi, 'field_metadata', field_metadata),
|
||||||
pref_name=pref_name, mi=mi)
|
pref_name=pref_name, mi=mi)
|
||||||
field_list = [(x, all_fields or display) for x, display in field_list]
|
field_list = [(x, all_fields or display) for x, display in field_list]
|
||||||
@ -286,7 +287,7 @@ def render_data(mi, use_roman_numbers=True, all_fields=False, pref_name='book_di
|
|||||||
mi, field_list=field_list, use_roman_numbers=use_roman_numbers, rtl=is_rtl(),
|
mi, field_list=field_list, use_roman_numbers=use_roman_numbers, rtl=is_rtl(),
|
||||||
rating_font=rating_font(), default_author_link=default_author_link(),
|
rating_font=rating_font(), default_author_link=default_author_link(),
|
||||||
comments_heading_pos=gprefs['book_details_comments_heading_pos'], for_qt=True,
|
comments_heading_pos=gprefs['book_details_comments_heading_pos'], for_qt=True,
|
||||||
vertical_fields=vertical_fields
|
vertical_fields=vertical_fields, show_links=show_links
|
||||||
)
|
)
|
||||||
|
|
||||||
# }}}
|
# }}}
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
|
|
||||||
import textwrap
|
import textwrap
|
||||||
import weakref
|
|
||||||
|
|
||||||
from qt.core import (
|
from qt.core import (
|
||||||
QAction, QApplication, QBrush, QCheckBox, QDialog, QDialogButtonBox, QGridLayout,
|
QAction, QApplication, QBrush, QCheckBox, QDialog, QDialogButtonBox, QGridLayout,
|
||||||
@ -201,13 +200,12 @@ class BookInfo(QDialog):
|
|||||||
self.slave_connected = False
|
self.slave_connected = False
|
||||||
if library_path is not None:
|
if library_path is not None:
|
||||||
self.view = None
|
self.view = None
|
||||||
from calibre.db.legacy import LibraryDatabase
|
db = get_gui().library_broker.get_library(library_path)
|
||||||
db = LibraryDatabase(library_path, read_only=True, is_second_db=True)
|
|
||||||
if book_id is None:
|
if book_id is None:
|
||||||
ids = db.new_api.search(query)
|
ids = db.new_api.search(query)
|
||||||
if len(ids) == 0:
|
if len(ids) == 0:
|
||||||
raise ValueError(_('Query "{}" found no books').format(query))
|
raise ValueError(_('Query "{}" found no books').format(query))
|
||||||
book_id = sorted([i for i in ids])[0]
|
book_id = sorted(ids)[0]
|
||||||
if not db.new_api.has_id(book_id):
|
if not db.new_api.has_id(book_id):
|
||||||
raise ValueError(_("Book {} doesn't exist").format(book_id))
|
raise ValueError(_("Book {} doesn't exist").format(book_id))
|
||||||
mi = db.new_api.get_metadata(book_id, get_cover=False)
|
mi = db.new_api.get_metadata(book_id, get_cover=False)
|
||||||
@ -216,7 +214,7 @@ class BookInfo(QDialog):
|
|||||||
mi.format_files = dict()
|
mi.format_files = dict()
|
||||||
mi.formats = list()
|
mi.formats = list()
|
||||||
mi.marked = ''
|
mi.marked = ''
|
||||||
mi._bd_dbwref = weakref.proxy(db)
|
mi.external_library_path = library_path
|
||||||
self.refresh(row, mi)
|
self.refresh(row, mi)
|
||||||
else:
|
else:
|
||||||
self.view = view
|
self.view = view
|
||||||
|
Loading…
x
Reference in New Issue
Block a user