diff --git a/src/pyj/book_list/book_details.pyj b/src/pyj/book_list/book_details.pyj index 9ba0d8e764..0da81afc19 100644 --- a/src/pyj/book_list/book_details.pyj +++ b/src/pyj/book_list/book_details.pyj @@ -12,10 +12,10 @@ from modals import error_dialog from widgets import create_spinner, create_button from date import format_date from session import get_interface_data -from utils import fmt_sidx, parse_url_params +from utils import fmt_sidx, parse_url_params, conditional_timeout from book_list.router import back -from book_list.library_data import book_metadata, cover_url, set_book_metadata, current_library_id, library_data, download_url +from book_list.library_data import book_metadata, cover_url, set_book_metadata, current_library_id, library_data, download_url, load_status from book_list.top_bar import create_top_bar, set_title, add_button from book_list.ui import set_panel_handler from book_list.views import search @@ -409,16 +409,15 @@ def fetch_metadata(container_id, book_id): create_spinner(), '\xa0' + _('Fetching metadata for the book, please wait') + '…', )) -def init(container_id): + +def create_book_details(container): q = parse_url_params() current_book_id = q.book_id - container = document.getElementById(container_id) - create_top_bar(container, title=_('Book details'), action=back, icon='close') if current_book_id is undefined or current_book_id is None: no_book(container) return - container.appendChild(E.div()) current_book_id = int(current_book_id) + container_id = container.parentNode.id if current_book_id is not 0 and book_metadata(current_book_id): render_book(container_id, current_book_id) else: @@ -427,4 +426,35 @@ def init(container_id): fetch_metadata(container_id, current_book_id) +def check_for_books_loaded(): + container = this + if load_status.loading: + conditional_timeout(container.id, 5, check_for_books_loaded) + return + container = container.lastChild + clear(container) + if not load_status.ok: + err = E.div() + err.innerHTML = load_status.error_html + container.appendChild(E.div( + style='margin: 1ex 1em', + E.div(_('Failed to load books from calibre library, with error:')), + err, + E.div( + style='margin-top: 1em; border-top: solid 1px currentColor; padding-top: 1ex;', + E.a(onclick=back, href='javascript: void(0)', style='color: blue', _('Go back to the home page'))) + ), + ) + return + create_book_details(container) + + +def init(container_id): + container = document.getElementById(container_id) + create_top_bar(container, title=_('Book details'), action=back, icon='close') + container.appendChild(E.div(class_=CLASS_NAME)) + container.lastChild.appendChild(E.div(_('Loading books from the calibre library, please wait...'), style='margin: 1ex 1em')) + conditional_timeout(container_id, 5, check_for_books_loaded) + + set_panel_handler('book_details', init) diff --git a/src/pyj/book_list/library_data.pyj b/src/pyj/book_list/library_data.pyj index ba72ad79af..6a044ed7c9 100644 --- a/src/pyj/book_list/library_data.pyj +++ b/src/pyj/book_list/library_data.pyj @@ -10,7 +10,7 @@ from utils import parse_url_params from book_list.globals import get_session_data load_status = {'loading':True, 'ok':False, 'error_html':None, 'current_fetch': None} -library_data = {} +library_data = {'metadata':{}} def current_library_id(): diff --git a/src/pyj/book_list/views.pyj b/src/pyj/book_list/views.pyj index f527a2b548..c8f9224455 100644 --- a/src/pyj/book_list/views.pyj +++ b/src/pyj/book_list/views.pyj @@ -43,15 +43,15 @@ def clear_grid(): book_list_data.init_grid(container.lastChild.previousSibling) -def show_book_details(): - pass +def show_book_details(book_id): + show_panel('book_details', {'book_id':book_id}) def render_id(book_id): l = book_list_data.shown_book_ids.length book_list_data.shown_book_ids.add(book_id) if l < book_list_data.shown_book_ids.length: - return book_list_data.render_book(book_id, show_book_details.bind(book_id)) + return book_list_data.render_book(book_id, show_book_details.bind(None, book_id)) def render_ids(book_ids):