Add button to force full kobo sync
This commit is contained in:
parent
7d67168a4a
commit
9d9acb058d
14
cps/admin.py
14
cps/admin.py
|
@ -590,6 +590,8 @@ def load_dialogtexts(element_id):
|
||||||
texts["main"] = _('Are you sure you want to change shelf sync behavior for the selected user(s)?')
|
texts["main"] = _('Are you sure you want to change shelf sync behavior for the selected user(s)?')
|
||||||
elif element_id == "db_submit":
|
elif element_id == "db_submit":
|
||||||
texts["main"] = _('Are you sure you want to change Calibre library location?')
|
texts["main"] = _('Are you sure you want to change Calibre library location?')
|
||||||
|
elif element_id == "btnfullsync":
|
||||||
|
texts["main"] = _("Are you sure you want delete Calibre-Web's sync database to force a full sync with your Kobo Reader?")
|
||||||
return json.dumps(texts)
|
return json.dumps(texts)
|
||||||
|
|
||||||
|
|
||||||
|
@ -889,10 +891,18 @@ def list_restriction(res_type, user_id):
|
||||||
else:
|
else:
|
||||||
json_dumps = ""
|
json_dumps = ""
|
||||||
js = json.dumps(json_dumps)
|
js = json.dumps(json_dumps)
|
||||||
response = make_response(js) #.replace("'", '"')
|
response = make_response(js)
|
||||||
response.headers["Content-Type"] = "application/json; charset=utf-8"
|
response.headers["Content-Type"] = "application/json; charset=utf-8"
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
@admi.route("/ajax/fullsync")
|
||||||
|
@login_required
|
||||||
|
def ajax_fullsync():
|
||||||
|
count = ub.session.query(ub.KoboSyncedBooks).filter(current_user.id == ub.KoboSyncedBooks.user_id).delete()
|
||||||
|
message = _("{} sync entries deleted").format(count)
|
||||||
|
ub.session_commit(message)
|
||||||
|
return Response(json.dumps([{"type": "success", "message": message}]), mimetype='application/json')
|
||||||
|
|
||||||
|
|
||||||
@admi.route("/ajax/pathchooser/")
|
@admi.route("/ajax/pathchooser/")
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -1189,13 +1199,13 @@ def _db_configuration_update_helper():
|
||||||
# if db changed -> delete shelfs, delete download books, delete read books, kobo sync...
|
# if db changed -> delete shelfs, delete download books, delete read books, kobo sync...
|
||||||
ub.session.query(ub.Downloads).delete()
|
ub.session.query(ub.Downloads).delete()
|
||||||
ub.session.query(ub.ArchivedBook).delete()
|
ub.session.query(ub.ArchivedBook).delete()
|
||||||
ub.session.query(ub.ArchivedBook).delete()
|
|
||||||
ub.session.query(ub.ReadBook).delete()
|
ub.session.query(ub.ReadBook).delete()
|
||||||
ub.session.query(ub.BookShelf).delete()
|
ub.session.query(ub.BookShelf).delete()
|
||||||
ub.session.query(ub.Bookmark).delete()
|
ub.session.query(ub.Bookmark).delete()
|
||||||
ub.session.query(ub.KoboReadingState).delete()
|
ub.session.query(ub.KoboReadingState).delete()
|
||||||
ub.session.query(ub.KoboStatistics).delete()
|
ub.session.query(ub.KoboStatistics).delete()
|
||||||
ub.session.query(ub.KoboSyncedBooks).delete()
|
ub.session.query(ub.KoboSyncedBooks).delete()
|
||||||
|
ub.session_commit()
|
||||||
_config_string(to_save, "config_calibre_dir")
|
_config_string(to_save, "config_calibre_dir")
|
||||||
calibre_db.update_config(config)
|
calibre_db.update_config(config)
|
||||||
if not os.access(os.path.join(config.config_calibre_dir, "metadata.db"), os.W_OK):
|
if not os.access(os.path.join(config.config_calibre_dir, "metadata.db"), os.W_OK):
|
||||||
|
|
|
@ -240,14 +240,14 @@ def modify_identifiers(input_identifiers, db_identifiers, db_session):
|
||||||
@editbook.route("/ajax/delete/<int:book_id>")
|
@editbook.route("/ajax/delete/<int:book_id>")
|
||||||
@login_required
|
@login_required
|
||||||
def delete_book_from_details(book_id):
|
def delete_book_from_details(book_id):
|
||||||
return Response(delete_book(book_id, "", True), mimetype='application/json')
|
return Response(delete_book_from_table(book_id, "", True), mimetype='application/json')
|
||||||
|
|
||||||
|
|
||||||
@editbook.route("/delete/<int:book_id>", defaults={'book_format': ""})
|
@editbook.route("/delete/<int:book_id>", defaults={'book_format': ""})
|
||||||
@editbook.route("/delete/<int:book_id>/<string:book_format>")
|
@editbook.route("/delete/<int:book_id>/<string:book_format>")
|
||||||
@login_required
|
@login_required
|
||||||
def delete_book_ajax(book_id, book_format):
|
def delete_book_ajax(book_id, book_format):
|
||||||
return delete_book(book_id, book_format, False)
|
return delete_book_from_table(book_id, book_format, False)
|
||||||
|
|
||||||
|
|
||||||
def delete_whole_book(book_id, book):
|
def delete_whole_book(book_id, book):
|
||||||
|
@ -317,7 +317,7 @@ def render_delete_book_result(book_format, jsonResponse, warning, book_id):
|
||||||
return redirect(url_for('web.index'))
|
return redirect(url_for('web.index'))
|
||||||
|
|
||||||
|
|
||||||
def delete_book(book_id, book_format, jsonResponse):
|
def delete_book_from_table(book_id, book_format, jsonResponse):
|
||||||
warning = {}
|
warning = {}
|
||||||
if current_user.role_delete_books():
|
if current_user.role_delete_books():
|
||||||
book = calibre_db.get_book(book_id)
|
book = calibre_db.get_book(book_id)
|
||||||
|
@ -1254,7 +1254,7 @@ def merge_list_book():
|
||||||
element.format,
|
element.format,
|
||||||
element.uncompressed_size,
|
element.uncompressed_size,
|
||||||
to_name))
|
to_name))
|
||||||
delete_book(from_book.id,"", True)
|
delete_book_from_table(from_book.id,"", True)
|
||||||
return json.dumps({'success': True})
|
return json.dumps({'success': True})
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
|
|
@ -209,7 +209,7 @@ def HandleSyncRequest():
|
||||||
books = calibre_db.session.execute(changed_entries.limit(SYNC_ITEM_LIMIT))
|
books = calibre_db.session.execute(changed_entries.limit(SYNC_ITEM_LIMIT))
|
||||||
else:
|
else:
|
||||||
books = changed_entries.limit(SYNC_ITEM_LIMIT)
|
books = changed_entries.limit(SYNC_ITEM_LIMIT)
|
||||||
log.debug("Books to Sync: {}".format(books.count()))
|
log.debug("Books to Sync: {}".format(len(books.all())))
|
||||||
for book in books:
|
for book in books:
|
||||||
formats = [data.format for data in book.Books.data]
|
formats = [data.format for data in book.Books.data]
|
||||||
if not 'KEPUB' in formats and config.config_kepubifypath and 'EPUB' in formats:
|
if not 'KEPUB' in formats and config.config_kepubifypath and 'EPUB' in formats:
|
||||||
|
|
|
@ -517,6 +517,7 @@ $(function() {
|
||||||
.on("hidden.bs.modal", function() {
|
.on("hidden.bs.modal", function() {
|
||||||
$(this).find(".modal-body").html("...");
|
$(this).find(".modal-body").html("...");
|
||||||
$("#config_delete_kobo_token").show();
|
$("#config_delete_kobo_token").show();
|
||||||
|
$("#kobo_full_sync").show();
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#config_delete_kobo_token").click(function() {
|
$("#config_delete_kobo_token").click(function() {
|
||||||
|
@ -530,6 +531,7 @@ $(function() {
|
||||||
url: getPath() + "/kobo_auth/deleteauthtoken/" + value,
|
url: getPath() + "/kobo_auth/deleteauthtoken/" + value,
|
||||||
});
|
});
|
||||||
$("#config_delete_kobo_token").hide();
|
$("#config_delete_kobo_token").hide();
|
||||||
|
$("#kobo_full_sync").hide();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -563,6 +565,33 @@ $(function() {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$("#kobo_full_sync").click(function() {
|
||||||
|
confirmDialog(
|
||||||
|
"btnfullsync",
|
||||||
|
"GeneralDeleteModal",
|
||||||
|
$(this).data('value'),
|
||||||
|
function(value){
|
||||||
|
path = getPath() + "/ajax/fullsync"
|
||||||
|
$.ajax({
|
||||||
|
method:"get",
|
||||||
|
url: path,
|
||||||
|
timeout: 900,
|
||||||
|
success:function(data) {
|
||||||
|
data.forEach(function(item) {
|
||||||
|
if (!jQuery.isEmptyObject(item)) {
|
||||||
|
$( ".navbar" ).after( '<div class="row-fluid text-center" >' +
|
||||||
|
'<div id="flash_'+item.type+'" class="alert alert-'+item.type+'">'+item.message+'</div>' +
|
||||||
|
'</div>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
$("#user_submit").click(function() {
|
$("#user_submit").click(function() {
|
||||||
this.closest("form").submit();
|
this.closest("form").submit();
|
||||||
});
|
});
|
||||||
|
|
|
@ -66,6 +66,9 @@
|
||||||
<a class="btn btn-default" id="config_create_kobo_token" data-toggle="modal" data-target="#modal_kobo_token" data-remote="false" href="{{ url_for('kobo_auth.generate_auth_token', user_id=content.id) }}">{{_('Create/View')}}</a>
|
<a class="btn btn-default" id="config_create_kobo_token" data-toggle="modal" data-target="#modal_kobo_token" data-remote="false" href="{{ url_for('kobo_auth.generate_auth_token', user_id=content.id) }}">{{_('Create/View')}}</a>
|
||||||
<div class="btn btn-danger" id="config_delete_kobo_token" data-value="{{ content.id }}" data-remote="false" {% if not content.remote_auth_token.first() %} style="display: none;" {% endif %}>{{_('Delete')}}</div>
|
<div class="btn btn-danger" id="config_delete_kobo_token" data-value="{{ content.id }}" data-remote="false" {% if not content.remote_auth_token.first() %} style="display: none;" {% endif %}>{{_('Delete')}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group col">
|
||||||
|
<div class="btn btn-default" id="kobo_full_sync" data-value="{{ content.id }}" {% if not content.remote_auth_token.first() %} style="display: none;" {% endif %}>{{_('Force full kobo sync')}}</div>
|
||||||
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
{% for element in sidebar %}
|
{% for element in sidebar %}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user