Add missing filter for current user in KoboSyncedBooks queries
This commit is contained in:
		
							parent
							
								
									cbb9edac19
								
							
						
					
					
						commit
						e880238cb9
					
				| 
						 | 
					@ -142,9 +142,6 @@ def HandleSyncRequest():
 | 
				
			||||||
    if not current_app.wsgi_app.is_proxied:
 | 
					    if not current_app.wsgi_app.is_proxied:
 | 
				
			||||||
        log.debug('Kobo: Received unproxied request, changed request port to external server port')
 | 
					        log.debug('Kobo: Received unproxied request, changed request port to external server port')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # TODO: Limit the number of books return per sync call, and rely on the sync-continuatation header
 | 
					 | 
				
			||||||
    # instead so that the device triggers another sync.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    new_books_last_modified = sync_token.books_last_modified
 | 
					    new_books_last_modified = sync_token.books_last_modified
 | 
				
			||||||
    new_books_last_created = sync_token.books_last_created
 | 
					    new_books_last_created = sync_token.books_last_created
 | 
				
			||||||
    new_reading_state_last_modified = sync_token.reading_state_last_modified
 | 
					    new_reading_state_last_modified = sync_token.reading_state_last_modified
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,25 +22,31 @@ from . import ub
 | 
				
			||||||
import datetime
 | 
					import datetime
 | 
				
			||||||
from sqlalchemy.sql.expression import or_
 | 
					from sqlalchemy.sql.expression import or_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Add the current book id to kobo_synced_books table for current user, if entry is already present,
 | 
				
			||||||
 | 
					# do nothing (safety precaution)
 | 
				
			||||||
def add_synced_books(book_id):
 | 
					def add_synced_books(book_id):
 | 
				
			||||||
    synced_book = ub.KoboSyncedBooks()
 | 
					    is_present = ub.session.query(ub.KoboSyncedBooks).filter(ub.KoboSyncedBooks.book_id == book_id)\
 | 
				
			||||||
    synced_book.user_id = current_user.id
 | 
					        .filter(ub.KoboSyncedBooks.user_id == current_user.id).count()
 | 
				
			||||||
    synced_book.book_id = book_id
 | 
					    if not is_present:
 | 
				
			||||||
    ub.session.add(synced_book)
 | 
					        synced_book = ub.KoboSyncedBooks()
 | 
				
			||||||
    ub.session_commit()
 | 
					        synced_book.user_id = current_user.id
 | 
				
			||||||
 | 
					        synced_book.book_id = book_id
 | 
				
			||||||
 | 
					        ub.session.add(synced_book)
 | 
				
			||||||
 | 
					        ub.session_commit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Select all entries of current book in kobo_synced_books table, which are from current user and delete them
 | 
				
			||||||
def remove_synced_book(book_id):
 | 
					def remove_synced_book(book_id):
 | 
				
			||||||
    ub.session.query(ub.KoboSyncedBooks).filter(ub.KoboSyncedBooks.book_id == book_id).delete()
 | 
					    ub.session.query(ub.KoboSyncedBooks).filter(ub.KoboSyncedBooks.book_id == book_id) \
 | 
				
			||||||
 | 
					        .filter(ub.KoboSyncedBooks.user_id == current_user.id).delete()
 | 
				
			||||||
    ub.session_commit()
 | 
					    ub.session_commit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def add_archived_books(book_id):
 | 
					def add_archived_books(book_id):
 | 
				
			||||||
    archived_book = (
 | 
					    archived_book = (ub.session.query(ub.ArchivedBook)
 | 
				
			||||||
        ub.session.query(ub.ArchivedBook)
 | 
					                     .filter(ub.ArchivedBook.book_id == book_id)
 | 
				
			||||||
        .filter(ub.ArchivedBook.book_id == book_id)
 | 
					                     .filter(ub.ArchivedBook.user_id == current_user.id)
 | 
				
			||||||
        .first()
 | 
					                     .first())
 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    if not archived_book:
 | 
					    if not archived_book:
 | 
				
			||||||
        archived_book = ub.ArchivedBook(user_id=current_user.id, book_id=book_id)
 | 
					        archived_book = ub.ArchivedBook(user_id=current_user.id, book_id=book_id)
 | 
				
			||||||
    archived_book.is_archived = True
 | 
					    archived_book.is_archived = True
 | 
				
			||||||
| 
						 | 
					@ -50,22 +56,23 @@ def add_archived_books(book_id):
 | 
				
			||||||
    ub.session_commit()
 | 
					    ub.session_commit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
# select all books which are synced by the current user and do not belong to a synced shelf and them to archive
 | 
					# select all books which are synced by the current user and do not belong to a synced shelf and them to archive
 | 
				
			||||||
# select all shelfs from current user which are synced and do not belong to the "only sync" shelfs
 | 
					# select all shelves from current user which are synced and do not belong to the "only sync" shelves
 | 
				
			||||||
def update_on_sync_shelfs(content_id):
 | 
					def update_on_sync_shelfs(user_id):
 | 
				
			||||||
        books_to_archive = (ub.session.query(ub.KoboSyncedBooks)
 | 
					    books_to_archive = (ub.session.query(ub.KoboSyncedBooks)
 | 
				
			||||||
                            .join(ub.BookShelf, ub.KoboSyncedBooks.book_id == ub.BookShelf.book_id, isouter=True)
 | 
					                        .join(ub.BookShelf, ub.KoboSyncedBooks.book_id == ub.BookShelf.book_id, isouter=True)
 | 
				
			||||||
                            .join(ub.Shelf, ub.Shelf.user_id == content_id, isouter=True)
 | 
					                        .join(ub.Shelf, ub.Shelf.user_id == user_id, isouter=True)
 | 
				
			||||||
                            .filter(or_(ub.Shelf.kobo_sync == 0, ub.Shelf.kobo_sync == None))
 | 
					                        .filter(or_(ub.Shelf.kobo_sync == 0, ub.Shelf.kobo_sync == None))
 | 
				
			||||||
                            .filter(ub.KoboSyncedBooks.user_id == content_id).all())
 | 
					                        .filter(ub.KoboSyncedBooks.user_id == user_id).all())
 | 
				
			||||||
        for b in books_to_archive:
 | 
					    for b in books_to_archive:
 | 
				
			||||||
            add_archived_books(b.book_id)
 | 
					        add_archived_books(b.book_id)
 | 
				
			||||||
            ub.session.query(ub.KoboSyncedBooks).filter(ub.KoboSyncedBooks.book_id == b.book_id).filter(ub.KoboSyncedBooks.user_id == content_id).delete()
 | 
					        ub.session.query(ub.KoboSyncedBooks) \
 | 
				
			||||||
            ub.session_commit()
 | 
					            .filter(ub.KoboSyncedBooks.book_id == b.book_id) \
 | 
				
			||||||
 | 
					            .filter(ub.KoboSyncedBooks.user_id == user_id).delete()
 | 
				
			||||||
 | 
					        ub.session_commit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        shelfs_to_archive = ub.session.query(ub.Shelf).filter(ub.Shelf.user_id == content_id).filter(
 | 
					    shelves_to_archive = ub.session.query(ub.Shelf).filter(ub.Shelf.user_id == user_id).filter(
 | 
				
			||||||
            ub.Shelf.kobo_sync == 0).all()
 | 
					        ub.Shelf.kobo_sync == 0).all()
 | 
				
			||||||
        for a in shelfs_to_archive:
 | 
					    for a in shelves_to_archive:
 | 
				
			||||||
            ub.session.add(ub.ShelfArchive(uuid=a.uuid, user_id=content_id))
 | 
					        ub.session.add(ub.ShelfArchive(uuid=a.uuid, user_id=user_id))
 | 
				
			||||||
            ub.session_commit()
 | 
					        ub.session_commit()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user