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