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