From a56e071a19ea0cb47a08df12b60d683ac1b13b74 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 10 Jul 2021 17:09:04 +0200 Subject: [PATCH] Fix #2043 (Multiuser kobo sync with restrict to shelfs working) Sync only selected shelfs is stored correct on creating user --- cps/admin.py | 10 +++++++++- cps/kobo.py | 8 +++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/cps/admin.py b/cps/admin.py index e800339e..570ab8e0 100644 --- a/cps/admin.py +++ b/cps/admin.py @@ -1349,7 +1349,8 @@ def _handle_new_user(to_save, content, languages, translations, kobo_support): content.denied_tags = config.config_denied_tags content.allowed_column_value = config.config_allowed_column_value content.denied_column_value = config.config_denied_column_value - content.kobo_only_shelves_sync = 0 # No default value for kobo sync shelf setting + # No default value for kobo sync shelf setting + content.kobo_only_shelves_sync = to_save.get("kobo_only_shelves_sync", 0) == "on" ub.session.add(content) ub.session.commit() flash(_(u"User '%(user)s' created", user=content.name), category="success") @@ -1368,6 +1369,13 @@ def _delete_user(content): if ub.session.query(ub.User).filter(ub.User.role.op('&')(constants.ROLE_ADMIN) == constants.ROLE_ADMIN, ub.User.id != content.id).count(): if content.name != "Guest": + # Delete all books in shelfs belonging to user, all shelfs of user, downloadstat of user, read status + # and user itself + ub.session.query(ub.ReadBook).filter(ub.User.id == ub.ReadBook.user_id).delete() + ub.session.query(ub.Downloads).filter(ub.User.id == ub.Downloads.user_id).delete() + for us in ub.session.query(ub.Shelf).filter(ub.User.id == ub.Shelf.user_id): + ub.session.query(ub.BookShelf).filter(us.id == ub.BookShelf.shelf).delete() + ub.session.query(ub.Shelf).filter(ub.User.id == ub.Shelf.user_id).delete() ub.session.query(ub.User).filter(ub.User.id == content.id).delete() ub.session_commit() log.info(u"User {} deleted".format(content.name)) diff --git a/cps/kobo.py b/cps/kobo.py index 9b022379..f91adb00 100644 --- a/cps/kobo.py +++ b/cps/kobo.py @@ -169,6 +169,7 @@ def HandleSyncRequest(): .order_by(ub.ArchivedBook.last_modified) .join(ub.BookShelf, db.Books.id == ub.BookShelf.book_id) .join(ub.Shelf) + .filter(ub.Shelf.user_id == current_user.id) .filter(ub.Shelf.kobo_sync) .distinct() ) @@ -247,10 +248,11 @@ def HandleSyncRequest(): changed_reading_states = changed_reading_states.join(ub.BookShelf, ub.KoboReadingState.book_id == ub.BookShelf.book_id)\ .join(ub.Shelf)\ + .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.BookShelf.date_added > sync_token.books_last_modified + func.datetime(ub.BookShelf.date_added) > sync_token.books_last_modified )).distinct() else: changed_reading_states = changed_reading_states.filter( @@ -668,10 +670,10 @@ def sync_shelves(sync_token, sync_results, only_kobo_shelves=False): for shelf in ub.session.query(ub.Shelf).outerjoin(ub.BookShelf).filter( or_(func.datetime(ub.Shelf.last_modified) > sync_token.tags_last_modified, - ub.BookShelf.date_added > sync_token.tags_last_modified), + func.datetime(ub.BookShelf.date_added) > sync_token.tags_last_modified), ub.Shelf.user_id == current_user.id, *extra_filters - ).distinct().order_by(func.datetime(ub.Shelf.last_modified).asc()): + ).distinct().order_by(func.datetime(ub.Shelf.last_modified).asc()): # .columns(ub.Shelf): if not shelf_lib.check_shelf_view_permissions(shelf): continue