Chunked reading status on kobo sync
Bugfix loading text on shelf delete Bugfix sort books list according to selection without selection
This commit is contained in:
		
							parent
							
								
									6e5d9d7657
								
							
						
					
					
						commit
						50d703e2d8
					
				
							
								
								
									
										16
									
								
								cps/kobo.py
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								cps/kobo.py
									
									
									
									
									
								
							|  | @ -267,10 +267,9 @@ def HandleSyncRequest(): | ||||||
|         entries = calibre_db.session.execute(changed_entries).all() |         entries = calibre_db.session.execute(changed_entries).all() | ||||||
|         book_count = len(entries) |         book_count = len(entries) | ||||||
|     else: |     else: | ||||||
|         #entries = changed_entries.all() |  | ||||||
|         book_count = changed_entries.count() |         book_count = changed_entries.count() | ||||||
|     # last entry: |     # 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)) |     log.debug("Remaining books to Sync: {}".format(book_count)) | ||||||
|     # generate reading state data |     # generate reading state data | ||||||
|     changed_reading_states = ub.session.query(ub.KoboReadingState) |     changed_reading_states = ub.session.query(ub.KoboReadingState) | ||||||
|  | @ -282,18 +281,18 @@ def HandleSyncRequest(): | ||||||
|             .filter(current_user.id == ub.Shelf.user_id)\ |             .filter(current_user.id == ub.Shelf.user_id)\ | ||||||
|             .filter(ub.Shelf.kobo_sync, |             .filter(ub.Shelf.kobo_sync, | ||||||
|                     or_( |                     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 |                         func.datetime(ub.BookShelf.date_added) > sync_token.books_last_modified | ||||||
|                     )).distinct() |                     )).distinct() | ||||||
|     else: |     else: | ||||||
|         changed_reading_states = changed_reading_states.filter( |         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( |     changed_reading_states = changed_reading_states.filter( | ||||||
|         and_(ub.KoboReadingState.user_id == current_user.id, |         and_(ub.KoboReadingState.user_id == current_user.id, | ||||||
|              ub.KoboReadingState.book_id.notin_(reading_states_in_new_entitlements))) |              ub.KoboReadingState.book_id.notin_(reading_states_in_new_entitlements))) | ||||||
| 
 |     cont_sync |= bool(changed_reading_states.count() > SYNC_ITEM_LIMIT) | ||||||
|     for kobo_reading_state in changed_reading_states.all(): |     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() |         book = calibre_db.session.query(db.Books).filter(db.Books.id == kobo_reading_state.book_id).one_or_none() | ||||||
|         if book: |         if book: | ||||||
|             sync_results.append({ |             sync_results.append({ | ||||||
|  | @ -311,7 +310,7 @@ def HandleSyncRequest(): | ||||||
|     sync_token.reading_state_last_modified = new_reading_state_last_modified |     sync_token.reading_state_last_modified = new_reading_state_last_modified | ||||||
|     # sync_token.books_last_id = books_last_id |     # 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): | 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 = [] |     extra_filters = [] | ||||||
|     if only_kobo_shelves: |     if only_kobo_shelves: | ||||||
|  |  | ||||||
|  | @ -7,6 +7,7 @@ | ||||||
|       {% endif %} |       {% endif %} | ||||||
|   {% if g.user.is_authenticated %} |   {% if g.user.is_authenticated %} | ||||||
|     {% if (g.user.role_edit_shelfs() and shelf.is_public ) or not shelf.is_public  %} |     {% if (g.user.role_edit_shelfs() and shelf.is_public ) or not shelf.is_public  %} | ||||||
|  |       <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"> | ||||||
|       <div class="btn btn-danger" id="delete_shelf" data-value="{{ shelf.id }}">{{ _('Delete this Shelf') }}</div> |       <div class="btn btn-danger" id="delete_shelf" data-value="{{ shelf.id }}">{{ _('Delete this Shelf') }}</div> | ||||||
|       <a id="edit_shelf" href="{{ url_for('shelf.edit_shelf', shelf_id=shelf.id) }}" class="btn btn-primary">{{ _('Edit Shelf Properties') }} </a> |       <a id="edit_shelf" href="{{ url_for('shelf.edit_shelf', shelf_id=shelf.id) }}" class="btn btn-primary">{{ _('Edit Shelf Properties') }} </a> | ||||||
|       {% if entries.__len__() %} |       {% if entries.__len__() %} | ||||||
|  |  | ||||||
|  | @ -781,6 +781,7 @@ def list_books(): | ||||||
| 
 | 
 | ||||||
|     if sort == "state": |     if sort == "state": | ||||||
|         state = json.loads(request.args.get("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": |     elif sort == "tags": | ||||||
|         order = [db.Tags.name.asc()] if order == "asc" else [db.Tags.name.desc()] |         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 |         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() |     total_count = filtered_count = calibre_db.session.query(db.Books).count() | ||||||
| 
 | 
 | ||||||
|     if state: |     if state is not None: | ||||||
|         if search: |         if search: | ||||||
|             books = calibre_db.search_query(search).all() |             books = calibre_db.search_query(search).all() | ||||||
|             filtered_count = len(books) |             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): | def adv_search_shelf(q, include_shelf_inputs, exclude_shelf_inputs): | ||||||
|     q = q.outerjoin(ub.BookShelf, db.Books.id == ub.BookShelf.book_id)\ |     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: |     if len(include_shelf_inputs) > 0: | ||||||
|         q = q.filter(ub.BookShelf.shelf.in_(include_shelf_inputs)) |         q = q.filter(ub.BookShelf.shelf.in_(include_shelf_inputs)) | ||||||
|     return q |     return q | ||||||
|  | @ -1361,7 +1362,7 @@ def render_adv_search_results(term, offset=None, order=None, limit=None): | ||||||
|     flask_session['query'] = json.dumps(term) |     flask_session['query'] = json.dumps(term) | ||||||
|     ub.store_ids(q) |     ub.store_ids(q) | ||||||
|     result_count = len(q) |     result_count = len(q) | ||||||
|     if offset != None and limit != None: |     if offset is not None and limit is not None: | ||||||
|         offset = int(offset) |         offset = int(offset) | ||||||
|         limit_all = offset + int(limit) |         limit_all = offset + int(limit) | ||||||
|         pagination = Pagination((offset / (int(limit)) + 1), limit, result_count) |         pagination = Pagination((offset / (int(limit)) + 1), limit, result_count) | ||||||
|  | @ -1561,7 +1562,7 @@ def login(): | ||||||
|         else: |         else: | ||||||
|             ip_Address = request.headers.get('X-Forwarded-For', request.remote_addr) |             ip_Address = request.headers.get('X-Forwarded-For', request.remote_addr) | ||||||
|             if 'forgot' in form and form['forgot'] == 'forgot': |             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) |                     ret, __ = reset_password(user.id) | ||||||
|                     if ret == 1: |                     if ret == 1: | ||||||
|                         flash(_(u"New Password was send to your email address"), category="info") |                         flash(_(u"New Password was send to your email address"), category="info") | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user