From 50d703e2d8081ab7f868323a9408c0acc91cee83 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 16 Oct 2021 11:28:35 +0200 Subject: [PATCH] Chunked reading status on kobo sync Bugfix loading text on shelf delete Bugfix sort books list according to selection without selection --- cps/admin.py | 2 +- cps/kobo.py | 16 +++++++++------- cps/templates/shelf.html | 1 + cps/web.py | 9 +++++---- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/cps/admin.py b/cps/admin.py index d811e4fb..2f377187 100644 --- a/cps/admin.py +++ b/cps/admin.py @@ -145,7 +145,7 @@ def shutdown(): else: showtext['text'] = _(u'Performing shutdown of server, please close window') # stop gevent/tornado server - web_server.stop(task==0) + web_server.stop(task == 0) return json.dumps(showtext) if task == 2: diff --git a/cps/kobo.py b/cps/kobo.py index a415ec5f..92abf295 100644 --- a/cps/kobo.py +++ b/cps/kobo.py @@ -267,10 +267,9 @@ def HandleSyncRequest(): entries = calibre_db.session.execute(changed_entries).all() book_count = len(entries) else: - #entries = changed_entries.all() book_count = changed_entries.count() # last entry: - # sync_cont = entries[-1].Books.id or -1 if book_count else -1 + cont_sync = bool(book_count) log.debug("Remaining books to Sync: {}".format(book_count)) # generate reading state data changed_reading_states = ub.session.query(ub.KoboReadingState) @@ -282,18 +281,18 @@ def HandleSyncRequest(): .filter(current_user.id == ub.Shelf.user_id)\ .filter(ub.Shelf.kobo_sync, or_( - func.datetime(ub.KoboReadingState.last_modified) > sync_token.reading_state_last_modified, + ub.KoboReadingState.last_modified > sync_token.reading_state_last_modified, func.datetime(ub.BookShelf.date_added) > sync_token.books_last_modified )).distinct() else: changed_reading_states = changed_reading_states.filter( - func.datetime(ub.KoboReadingState.last_modified) > sync_token.reading_state_last_modified) + ub.KoboReadingState.last_modified > sync_token.reading_state_last_modified) changed_reading_states = changed_reading_states.filter( and_(ub.KoboReadingState.user_id == current_user.id, ub.KoboReadingState.book_id.notin_(reading_states_in_new_entitlements))) - - for kobo_reading_state in changed_reading_states.all(): + cont_sync |= bool(changed_reading_states.count() > SYNC_ITEM_LIMIT) + for kobo_reading_state in changed_reading_states.limit(SYNC_ITEM_LIMIT).all(): book = calibre_db.session.query(db.Books).filter(db.Books.id == kobo_reading_state.book_id).one_or_none() if book: sync_results.append({ @@ -311,7 +310,7 @@ def HandleSyncRequest(): sync_token.reading_state_last_modified = new_reading_state_last_modified # sync_token.books_last_id = books_last_id - return generate_sync_response(sync_token, sync_results, book_count) + return generate_sync_response(sync_token, sync_results, cont_sync) def generate_sync_response(sync_token, sync_results, set_cont=False): @@ -682,6 +681,9 @@ def sync_shelves(sync_token, sync_results, only_kobo_shelves=False): } } }) + ub.session.delete(shelf) + ub.session_commit() + extra_filters = [] if only_kobo_shelves: diff --git a/cps/templates/shelf.html b/cps/templates/shelf.html index 6e436976..df05f0ad 100644 --- a/cps/templates/shelf.html +++ b/cps/templates/shelf.html @@ -7,6 +7,7 @@ {% endif %} {% if g.user.is_authenticated %} {% if (g.user.role_edit_shelfs() and shelf.is_public ) or not shelf.is_public %} +
{{ _('Delete this Shelf') }}
{{ _('Edit Shelf Properties') }} {% if entries.__len__() %} diff --git a/cps/web.py b/cps/web.py index 99201a95..066169eb 100644 --- a/cps/web.py +++ b/cps/web.py @@ -781,6 +781,7 @@ def list_books(): if sort == "state": state = json.loads(request.args.get("state", "[]")) + # order = [db.Books.timestamp.asc()] if order == "asc" else [db.Books.timestamp.desc()] # ToDo wrong: sort ticked elif sort == "tags": order = [db.Tags.name.asc()] if order == "asc" else [db.Tags.name.desc()] join = db.books_tags_link,db.Books.id == db.books_tags_link.c.book, db.Tags @@ -805,7 +806,7 @@ def list_books(): total_count = filtered_count = calibre_db.session.query(db.Books).count() - if state: + if state is not None: if search: books = calibre_db.search_query(search).all() filtered_count = len(books) @@ -1198,7 +1199,7 @@ def adv_search_serie(q, include_series_inputs, exclude_series_inputs): def adv_search_shelf(q, include_shelf_inputs, exclude_shelf_inputs): q = q.outerjoin(ub.BookShelf, db.Books.id == ub.BookShelf.book_id)\ - .filter(or_(ub.BookShelf.shelf == None, ub.BookShelf.shelf.notin_(exclude_shelf_inputs))) + .filter(or_(ub.BookShelf.shelf is None, ub.BookShelf.shelf.notin_(exclude_shelf_inputs))) if len(include_shelf_inputs) > 0: q = q.filter(ub.BookShelf.shelf.in_(include_shelf_inputs)) return q @@ -1361,7 +1362,7 @@ def render_adv_search_results(term, offset=None, order=None, limit=None): flask_session['query'] = json.dumps(term) ub.store_ids(q) result_count = len(q) - if offset != None and limit != None: + if offset is not None and limit is not None: offset = int(offset) limit_all = offset + int(limit) pagination = Pagination((offset / (int(limit)) + 1), limit, result_count) @@ -1561,7 +1562,7 @@ def login(): else: ip_Address = request.headers.get('X-Forwarded-For', request.remote_addr) if 'forgot' in form and form['forgot'] == 'forgot': - if user != None and user.name != "Guest": + if user is not None and user.name != "Guest": ret, __ = reset_password(user.id) if ret == 1: flash(_(u"New Password was send to your email address"), category="info")