diff --git a/cps/static/js/main.js b/cps/static/js/main.js
index 74e1a1d8..0a184530 100644
--- a/cps/static/js/main.js
+++ b/cps/static/js/main.js
@@ -36,7 +36,7 @@ $(function() {
success: function(data) {
$('#spinner').show();
displaytext=data.text;
- window.setTimeout(restartTimer, 3000);}
+ setTimeout(restartTimer, 3000);}
});
});
$("#shutdown").click(function() {
@@ -110,7 +110,8 @@ function updateTimer() {
$('#UpdateprogressDialog #updateFinished').removeClass('hidden');
$("#check_for_update").removeClass('hidden');
$("#perform_update").addClass('hidden');
- }
+ },
+ timeout:2000
});
}
diff --git a/cps/templates/stats.html b/cps/templates/stats.html
index 22826003..7ab72092 100644
--- a/cps/templates/stats.html
+++ b/cps/templates/stats.html
@@ -1,7 +1,27 @@
{% extends "layout.html" %}
{% block body %}
+
{{_('Calibre library statistics')}}
+
+
+
+ {{bookcounter}} |
+ {{_('Books in this Library')}} |
+
+
+ {{authorcounter}} |
+ {{_('Authors in this Library')}} |
+
+
+ {{categorycounter}} |
+ {{_('Categories in this Library')}} |
+
+
+ {{seriecounter}} |
+ {{_('Series in this Library')}} |
+
+
+
{{_('Linked libraries')}}
-
@@ -24,30 +44,44 @@
PyPDF2 |
- {{versions['PyPdfVersion']}} |
+ v{{versions['PyPdfVersion']}} |
+
+ Babel |
+ v{{versions['babel']}} |
+
+
+ SqlAlchemy |
+ v{{versions['sqlalchemy']}} |
+
+
+ Flask |
+ v{{versions['flask']}} |
+
+
+ Flask Login |
+ v{{versions['flasklogin']}} |
+
+
+ Flask Principal |
+ v{{versions['flask_principal']}} |
+
+
+ Tornado web server |
+ v{{versions['tornado']}} |
+
+
+ ISO639 Languages |
+ v{{versions['iso639']}} |
+
+
+ Requests |
+ v{{versions['requests']}} |
+
+
- {{_('Calibre library statistics')}}
-
-
-
- {{bookcounter}} |
- {{_('Books in this Library')}} |
-
-
- {{authorcounter}} |
- {{_('Authors in this Library')}} |
-
-
- {{categorycounter}} |
- {{_('Categories in this Library')}} |
-
-
- {{seriecounter}} |
- {{_('Series in this Library')}} |
-
-
-
{% endblock %}
+
+
diff --git a/cps/web.py b/cps/web.py
index 69cefe1a..06930901 100755
--- a/cps/web.py
+++ b/cps/web.py
@@ -4,8 +4,9 @@ import mimetypes
import logging
from logging.handlers import RotatingFileHandler
import textwrap
-from flask import Flask, render_template, session, request, Response, redirect, url_for, send_from_directory, \
+from flask import Flask, render_template, request, Response, redirect, url_for, send_from_directory, \
make_response, g, flash, abort
+from flask import __version__ as flaskVersion
import ub
from ub import config
import helper
@@ -14,9 +15,12 @@ import errno
from sqlalchemy.sql.expression import func
from sqlalchemy.sql.expression import false
from sqlalchemy.exc import IntegrityError
+from sqlalchemy import __version__ as sqlalchemyVersion
from math import ceil
from flask_login import LoginManager, login_user, logout_user, login_required, current_user
+from flask_login import __version__ as flask_loginVersion
from flask_principal import Principal, Identity, AnonymousIdentity, identity_changed
+from flask_login import __version__ as flask_principalVersion
from flask_babel import Babel
from flask_babel import gettext as _
import requests
@@ -24,6 +28,7 @@ import zipfile
from werkzeug.security import generate_password_hash, check_password_hash
from babel import Locale as LC
from babel import negotiate_locale
+from babel import __version__ as babelVersion
from babel.dates import format_date
from functools import wraps
import base64
@@ -32,16 +37,16 @@ import json
import urllib
import datetime
from iso639 import languages as isoLanguages
+from iso639 import __version__ as iso639Version
from uuid import uuid4
import os.path
import sys
import subprocess
import re
import db
-import thread
from shutil import move, copyfile
from tornado.ioloop import IOLoop
-
+from tornado import version as tornadoVersion
try:
from wand.image import Image
@@ -1042,6 +1047,15 @@ def stats():
if re.search('Amazon kindlegen\(', lines):
versions['KindlegenVersion'] = lines
versions['PythonVersion'] = sys.version
+ versions['babel'] = babelVersion
+ versions['sqlalchemy'] = sqlalchemyVersion
+ versions['flask'] = flaskVersion
+ versions['flasklogin'] = flask_loginVersion
+ versions['flask_principal'] = flask_principalVersion
+ versions['tornado'] = tornadoVersion
+ versions['iso639'] = iso639Version
+ versions['requests'] = requests.__version__
+
return render_title_template('stats.html', bookcounter=counter, authorcounter=authors, versions=versions,
categorycounter=categorys, seriecounter=series, title=_(u"Statistics"))
@@ -1796,6 +1810,8 @@ def edit_mailsettings():
category="success")
else:
flash(_(u"There was an error sending the Test E-Mail: %(res)s", res=result), category="error")
+ else:
+ flash(_(u"E-Mail settings updated"), category="success")
return render_title_template("email_edit.html", content=content, title=_(u"Edit mail settings"))
@@ -2136,7 +2152,6 @@ def upload():
db.session.connection().connection.connection.create_function("title_sort", 1, db.title_sort)
db.session.connection().connection.connection.create_function('uuid4', 0, lambda: str(uuid4()))
if request.method == 'POST' and 'btn-upload' in request.files:
- file = request.files['btn-upload']
file = request.files['btn-upload']
if '.' in file.filename:
file_ext = file.filename.rsplit('.', 1)[-1].lower()