From 0a07da55159f87f0bc97972d4c17fadcca2000ac Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 12 Apr 2019 10:33:43 +0530 Subject: [PATCH] Content server: Fix using a bookmark to load the book list not working is server is password protected. Fixes #1819025 [Error message in Chrome when trying to log in to a bookmarked page in the content server](https://bugs.launchpad.net/calibre/+bug/1819025) --- src/pyj/book_list/library_data.pyj | 4 +++- src/pyj/book_list/views.pyj | 23 ++++++++++++++++------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/pyj/book_list/library_data.pyj b/src/pyj/book_list/library_data.pyj index cb430402ea..e4dfb90603 100644 --- a/src/pyj/book_list/library_data.pyj +++ b/src/pyj/book_list/library_data.pyj @@ -10,7 +10,7 @@ from lru_cache import LRUCache from session import get_interface_data from utils import parse_url_params -load_status = {'loading':True, 'ok':False, 'error_html':None, 'current_fetch': None} +load_status = {'loading':True, 'ok':False, 'error_html':None, 'current_fetch': None, 'http_error_code': 0} library_data = {'metadata':{}, 'previous_book_ids': v'[]', 'force_refresh': False} @@ -78,6 +78,7 @@ def update_library_data(data): load_status.loading = False load_status.ok = True load_status.error_html = None + load_status.http_error_code = 0 library_data.previous_book_ids = v'[]' if library_data.for_library is not current_library_id(): library_data.field_names = {} @@ -122,6 +123,7 @@ def on_data_loaded(end_type, xhr, ev): load_status.ok = False load_status.loading = False load_status.error_html = msg or xhr.error_html + load_status.http_error_code = xhr.status if end_type is 'load': data = JSON.parse(xhr.responseText) diff --git a/src/pyj/book_list/views.pyj b/src/pyj/book_list/views.pyj index 90136a4348..75a2492dec 100644 --- a/src/pyj/book_list/views.pyj +++ b/src/pyj/book_list/views.pyj @@ -9,17 +9,18 @@ from gettext import gettext as _ from ajax import ajax_send from book_list.add import add_books_panel from book_list.cover_grid import ( - description as COVER_GRID_DESCRIPTION, append_item as cover_grid_append_item, - cover_grid_css, create_item as create_cover_grid_item, init as init_cover_grid + append_item as cover_grid_append_item, cover_grid_css, + create_item as create_cover_grid_item, description as COVER_GRID_DESCRIPTION, + init as init_cover_grid ) from book_list.custom_list import ( - description as CUSTOM_LIST_DESCRIPTION, append_item as custom_list_append_item, - create_item as create_custom_list_item, custom_list_css, + append_item as custom_list_append_item, create_item as create_custom_list_item, + custom_list_css, description as CUSTOM_LIST_DESCRIPTION, init as init_custom_list ) from book_list.details_list import ( - description as DETAILS_LIST_DESCRIPTION, append_item as details_list_append_item, - create_item as create_details_list_item, details_list_css, + append_item as details_list_append_item, create_item as create_details_list_item, + description as DETAILS_LIST_DESCRIPTION, details_list_css, init as init_details_list ) from book_list.globals import get_session_data @@ -283,12 +284,20 @@ def create_books_list(container): def check_for_books_loaded(): container = this + container_id = container.id if load_status.loading: - conditional_timeout(container.id, 5, check_for_books_loaded) + conditional_timeout(container_id, 5, check_for_books_loaded) return container = container.lastChild clear(container) if not load_status.ok: + if load_status.http_error_code is 401: + # Unauthorized, keep retrying until the user provides a + # username/password + container.appendChild(E.div(_('Username/password required, retrying...'))) + ensure_current_library_data() + conditional_timeout(container_id, 100, check_for_books_loaded) + return err = E.div() safe_set_inner_html(err, load_status.error_html) container.appendChild(E.div(