diff --git a/cps.py b/cps.py
index 4c8bfbe2..00d0f356 100755
--- a/cps.py
+++ b/cps.py
@@ -3,7 +3,6 @@
import os
import sys
-import time
base_path = os.path.dirname(os.path.abspath(__file__))
# Insert local directories into path
@@ -22,7 +21,7 @@ if __name__ == '__main__':
http_server.listen(web.ub.config.config_port)
IOLoop.instance().start()
- if web.global_task == 0:
+ if web.helper.global_task == 0:
print("Performing restart of Calibre-web")
os.execl(sys.executable, sys.executable, *sys.argv)
else:
diff --git a/cps/helper.py b/cps/helper.py
index beee00c7..20d9402a 100755
--- a/cps/helper.py
+++ b/cps/helper.py
@@ -6,7 +6,7 @@ import ub
from flask import current_app as app
import logging
import smtplib
-import tempfile
+from tempfile import gettempdir
import socket
import sys
import os
@@ -21,13 +21,22 @@ from email.MIMEText import MIMEText
from email.generator import Generator
from flask_babel import gettext as _
import subprocess
+import threading
import shutil
+import requests
+import zipfile
+from tornado.ioloop import IOLoop
+
try:
import unidecode
use_unidecode=True
except:
use_unidecode=False
+# Global variables
+global_task = None
+updater_thread = None
+
def update_download(book_id, user_id):
check = ub.session.query(ub.Downloads).filter(ub.Downloads.user_id == user_id).filter(ub.Downloads.book_id ==
book_id).first()
@@ -267,117 +276,146 @@ def update_dir_stucture(book_id, calibrepath):
book.path = new_authordir + '/' + book.path.split('/')[1]
db.session.commit()
+class Updater(threading.Thread):
-def file_to_list(file):
- return [x.strip() for x in open(file, 'r') if not x.startswith('#EXT')]
+ def __init__(self):
+ threading.Thread.__init__(self)
+ self.status=0
-def one_minus_two(one, two):
- return [x for x in one if x not in set(two)]
+ def run(self):
+ global global_task
+ self.status=1
+ r = requests.get('https://api.github.com/repos/janeczku/calibre-web/zipball/master', stream=True)
+ fname = re.findall("filename=(.+)", r.headers['content-disposition'])[0]
+ self.status=2
+ z = zipfile.ZipFile(StringIO(r.content))
+ self.status=3
+ tmp_dir = gettempdir()
+ z.extractall(tmp_dir)
+ self.status=4
+ self.update_source(os.path.join(tmp_dir,os.path.splitext(fname)[0]),ub.config.get_main_dir)
+ self.status=5
+ global_task = 0
+ db.session.close()
+ db.engine.dispose()
+ ub.session.close()
+ ub.engine.dispose()
+ self.status=6
+ # stop tornado server
+ server = IOLoop.instance()
+ server.add_callback(server.stop)
+ self.status=7
-def reduce_dirs(delete_files, new_list):
- new_delete = []
- for file in delete_files:
- parts = file.split(os.sep)
- sub = ''
- for i in range(len(parts)):
- sub = os.path.join(sub, parts[i])
- if sub == '':
- sub = os.sep
- count = 0
- for song in new_list:
- if song.startswith(sub):
- count += 1
+ def get_update_status(self):
+ return self.status
+
+ def file_to_list(self, file):
+ return [x.strip() for x in open(file, 'r') if not x.startswith('#EXT')]
+
+ def one_minus_two(self, one, two):
+ return [x for x in one if x not in set(two)]
+
+ def reduce_dirs(self, delete_files, new_list):
+ new_delete = []
+ for file in delete_files:
+ parts = file.split(os.sep)
+ sub = ''
+ for i in range(len(parts)):
+ sub = os.path.join(sub, parts[i])
+ if sub == '':
+ sub = os.sep
+ count = 0
+ for song in new_list:
+ if song.startswith(sub):
+ count += 1
+ break
+ if count == 0:
+ if sub != '\\':
+ new_delete.append(sub)
break
- if count == 0:
- if sub != '\\':
- new_delete.append(sub)
- break
- return list(set(new_delete))
+ return list(set(new_delete))
-def reduce_files(remove_items, exclude_items):
- rf = []
- for item in remove_items:
- if not item in exclude_items:
- rf.append(item)
- return rf
+ def reduce_files(self, remove_items, exclude_items):
+ rf = []
+ for item in remove_items:
+ if not item in exclude_items:
+ rf.append(item)
+ return rf
-def moveallfiles(root_src_dir, root_dst_dir):
- change_permissions = True
- if sys.platform == "win32" or sys.platform == "darwin":
- change_permissions=False
- else:
- app.logger.debug('Update on OS-System : '+sys.platform )
- #print('OS-System: '+sys.platform )
- new_permissions=os.stat(root_dst_dir)
- #print new_permissions
- for src_dir, dirs, files in os.walk(root_src_dir):
- dst_dir = src_dir.replace(root_src_dir, root_dst_dir, 1)
- if not os.path.exists(dst_dir):
- os.makedirs(dst_dir)
- #print('Create-Dir: '+dst_dir)
- if change_permissions:
- #print('Permissions: User '+str(new_permissions.st_uid)+' Group '+str(new_permissions.st_uid))
- os.chown(dst_dir,new_permissions.st_uid,new_permissions.st_gid)
- for file_ in files:
- src_file = os.path.join(src_dir, file_)
- dst_file = os.path.join(dst_dir, file_)
- if os.path.exists(dst_file):
- if change_permissions:
- permission=os.stat(dst_file)
- #print('Remove file before copy: '+dst_file)
- os.remove(dst_file)
- else:
- if change_permissions:
- permission=new_permissions
- shutil.move(src_file, dst_dir)
- #print('Move File '+src_file+' to '+dst_dir)
- if change_permissions:
- try:
- os.chown(dst_file, permission.st_uid, permission.st_uid)
- #print('Permissions: User '+str(new_permissions.st_uid)+' Group '+str(new_permissions.st_uid))
- except:
- e = sys.exc_info()
- #print('Fail '+str(dst_file)+' error: '+str(e))
- return
-
-
-def update_source(source,destination):
- # destination files
- old_list=list()
- exclude = (['vendor' + os.sep + 'kindlegen.exe','vendor' + os.sep + 'kindlegen','/app.db','vendor','/update.py'])
- for root, dirs, files in os.walk(destination, topdown=True):
- for name in files:
- old_list.append(os.path.join(root, name).replace(destination, ''))
- for name in dirs:
- old_list.append(os.path.join(root, name).replace(destination, ''))
- # source files
- new_list = list()
- for root, dirs, files in os.walk(source, topdown=True):
- for name in files:
- new_list.append(os.path.join(root, name).replace(source, ''))
- for name in dirs:
- new_list.append(os.path.join(root, name).replace(source, ''))
-
- delete_files = one_minus_two(old_list, new_list)
- #print('raw delete list', delete_files)
-
- rf= reduce_files(delete_files, exclude)
- #print('reduced delete list', rf)
-
- remove_items = reduce_dirs(rf, new_list)
- #print('delete files', remove_items)
-
- moveallfiles(source, destination)
-
- for item in remove_items:
- item_path = os.path.join(destination, item[1:])
- if os.path.isdir(item_path):
- print("Delete dir "+ item_path)
- shutil.rmtree(item_path)
+ def moveallfiles(self, root_src_dir, root_dst_dir):
+ change_permissions = True
+ if sys.platform == "win32" or sys.platform == "darwin":
+ change_permissions = False
else:
- try:
- print("Delete file "+ item_path)
- os.remove(item_path)
- except:
- print("Could not remove:"+item_path)
- shutil.rmtree(source, ignore_errors=True)
+ app.logger.debug('Update on OS-System : ' + sys.platform)
+ # print('OS-System: '+sys.platform )
+ new_permissions = os.stat(root_dst_dir)
+ # print new_permissions
+ for src_dir, dirs, files in os.walk(root_src_dir):
+ dst_dir = src_dir.replace(root_src_dir, root_dst_dir, 1)
+ if not os.path.exists(dst_dir):
+ os.makedirs(dst_dir)
+ # print('Create-Dir: '+dst_dir)
+ if change_permissions:
+ # print('Permissions: User '+str(new_permissions.st_uid)+' Group '+str(new_permissions.st_uid))
+ os.chown(dst_dir, new_permissions.st_uid, new_permissions.st_gid)
+ for file_ in files:
+ src_file = os.path.join(src_dir, file_)
+ dst_file = os.path.join(dst_dir, file_)
+ if os.path.exists(dst_file):
+ if change_permissions:
+ permission = os.stat(dst_file)
+ # print('Remove file before copy: '+dst_file)
+ os.remove(dst_file)
+ else:
+ if change_permissions:
+ permission = new_permissions
+ shutil.move(src_file, dst_dir)
+ # print('Move File '+src_file+' to '+dst_dir)
+ if change_permissions:
+ try:
+ os.chown(dst_file, permission.st_uid, permission.st_uid)
+ # print('Permissions: User '+str(new_permissions.st_uid)+' Group '+str(new_permissions.st_uid))
+ except:
+ e = sys.exc_info()
+ # print('Fail '+str(dst_file)+' error: '+str(e))
+ return
+
+ def update_source(self, source, destination):
+ # destination files
+ old_list = list()
+ exclude = (
+ ['vendor' + os.sep + 'kindlegen.exe', 'vendor' + os.sep + 'kindlegen', '/app.db', 'vendor', '/update.py'])
+ for root, dirs, files in os.walk(destination, topdown=True):
+ for name in files:
+ old_list.append(os.path.join(root, name).replace(destination, ''))
+ for name in dirs:
+ old_list.append(os.path.join(root, name).replace(destination, ''))
+ # source files
+ new_list = list()
+ for root, dirs, files in os.walk(source, topdown=True):
+ for name in files:
+ new_list.append(os.path.join(root, name).replace(source, ''))
+ for name in dirs:
+ new_list.append(os.path.join(root, name).replace(source, ''))
+
+ delete_files = self.one_minus_two(old_list, new_list)
+
+ rf = self.reduce_files(delete_files, exclude)
+
+ remove_items = self.reduce_dirs(rf, new_list)
+
+ self.moveallfiles(source, destination)
+
+ for item in remove_items:
+ item_path = os.path.join(destination, item[1:])
+ if os.path.isdir(item_path):
+ app.logger.debug("Delete dir " + item_path)
+ shutil.rmtree(item_path)
+ else:
+ try:
+ app.logger.debug("Delete file " + item_path)
+ os.remove(item_path)
+ except:
+ app.logger.debug("Could not remove:" + item_path)
+ shutil.rmtree(source, ignore_errors=True)
diff --git a/cps/static/css/style.css b/cps/static/css/style.css
index 5e6ea314..921a35ff 100644
--- a/cps/static/css/style.css
+++ b/cps/static/css/style.css
@@ -47,3 +47,7 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te
.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary{ background-color: #1C5484; }
.btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { background-color: #89B9E2; }
.btn-toolbar>.btn+.btn, .btn-toolbar>.btn-group+.btn, .btn-toolbar>.btn+.btn-group, .btn-toolbar>.btn-group+.btn-group { margin-left:0px; }
+
+.spinner {margin:0 41%;}
+.spinner2 {margin:0 41%;}
+
diff --git a/cps/static/js/main.js b/cps/static/js/main.js
index a2d56c9e..74e1a1d8 100644
--- a/cps/static/js/main.js
+++ b/cps/static/js/main.js
@@ -1,3 +1,6 @@
+var displaytext;
+var updateTimerID;
+var updateText;
$(function() {
$('.discover .row').isotope({
@@ -31,7 +34,9 @@ $(function() {
url: window.location.pathname+"/../../shutdown",
data: {"parameter":0},
success: function(data) {
- return alert(data.text);}
+ $('#spinner').show();
+ displaytext=data.text;
+ window.setTimeout(restartTimer, 3000);}
});
});
$("#shutdown").click(function() {
@@ -50,17 +55,66 @@ $(function() {
dataType: 'json',
url: window.location.pathname+"/../../get_update_status",
success: function(data) {
- if (data.status == true) {
- $("#check_for_update").addClass('hidden');
- $("#perform_update").removeClass('hidden');
- }else{
$("#check_for_update").html(button_text);
- };}
+ if (data.status == true) {
+ $("#check_for_update").addClass('hidden');
+ $("#perform_update").removeClass('hidden');
+ $("#update_info").removeClass('hidden');
+ $("#update_info").find('span').html(data.commit);
+ }
+ }
+ });
+ });
+ $("#perform_update").click(function() {
+ $('#spinner2').show();
+ $.ajax({
+ type: "POST",
+ dataType: 'json',
+ data: { start: "True"},
+ url: window.location.pathname+"/../../get_updater_status",
+ success: function(data) {
+ updateText=data.text
+ $("#UpdateprogressDialog #Updatecontent").html(updateText[data.status]);
+ console.log(data.status);
+ updateTimerID=setInterval(updateTimer, 2000);}
});
});
-
});
+
+function restartTimer() {
+ $('#spinner').hide();
+ $('#RestartDialog').modal('hide');
+}
+
+function updateTimer() {
+ $.ajax({
+ dataType: 'json',
+ url: window.location.pathname+"/../../get_updater_status",
+ success: function(data) {
+ console.log(data.status);
+ $("#UpdateprogressDialog #Updatecontent").html(updateText[data.status]);
+ if (data.status >6){
+ clearInterval(updateTimerID);
+ $('#spinner2').hide();
+ $('#UpdateprogressDialog #updateFinished').removeClass('hidden');
+ $("#check_for_update").removeClass('hidden');
+ $("#perform_update").addClass('hidden');
+ }
+ },
+ error: function() {
+ console.log('Done');
+ clearInterval(updateTimerID);
+ $('#spinner2').hide();
+ $("#UpdateprogressDialog #Updatecontent").html(updateText[7]);
+ $('#UpdateprogressDialog #updateFinished').removeClass('hidden');
+ $("#check_for_update").removeClass('hidden');
+ $("#perform_update").addClass('hidden');
+ }
+ });
+}
+
+
$(window).resize(function(event) {
$('.discover .row').isotope('reLayout');
});
diff --git a/cps/templates/admin.html b/cps/templates/admin.html
index 31c167ee..b386e4ff 100644
--- a/cps/templates/admin.html
+++ b/cps/templates/admin.html
@@ -2,6 +2,7 @@
{% block body %}
{{_('User list')}}
+
{{_('Nickname')}} |
@@ -76,11 +77,13 @@
{{_('Administration')}}
{% if not development %}
- {{_('Current commit timestamp')}}: {{commit}}
- {{_('Restart Calibre-web')}}
- {{_('Stop Calibre-web')}}
- {{_('Check for update')}}
- {{_('Perform Update')}}
+ {{_('Current commit timestamp')}}: {{commit}}
+ {{_('Newest commit timestamp')}}:
+
+ {{_('Restart Calibre-web')}}
+ {{_('Stop Calibre-web')}}
+ {{_('Check for update')}}
+ {{_('Perform Update')}}
{% endif %}
@@ -88,15 +91,17 @@
-
+
{{_('Do you really want to restart Calibre-web?')}}
-
+
+
+
+
+
-
@@ -114,5 +119,23 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{% endblock %}
diff --git a/cps/templates/layout.html b/cps/templates/layout.html
index 71bd7941..76553ace 100644
--- a/cps/templates/layout.html
+++ b/cps/templates/layout.html
@@ -65,7 +65,7 @@
{% if g.user.is_authenticated or g.user.is_anonymous() %}
{% endif %}
diff --git a/cps/translations/de/LC_MESSAGES/messages.mo b/cps/translations/de/LC_MESSAGES/messages.mo
index 8bab995b..28e55bc1 100644
Binary files a/cps/translations/de/LC_MESSAGES/messages.mo and b/cps/translations/de/LC_MESSAGES/messages.mo differ
diff --git a/cps/translations/de/LC_MESSAGES/messages.po b/cps/translations/de/LC_MESSAGES/messages.po
index 3fb5cc32..b36b72f0 100644
--- a/cps/translations/de/LC_MESSAGES/messages.po
+++ b/cps/translations/de/LC_MESSAGES/messages.po
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n"
-"POT-Creation-Date: 2017-02-10 20:17+0100\n"
+"POT-Creation-Date: 2017-02-20 19:47+0100\n"
"PO-Revision-Date: 2016-07-12 19:54+0200\n"
"Last-Translator: Ozzie Isaacs\n"
"Language: de\n"
@@ -32,322 +32,347 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
-#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:998
+#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:1030
msgid "not installed"
msgstr "Nicht installiert"
-#: cps/helper.py:136
+#: cps/helper.py:150
#, python-format
msgid "Failed to send mail: %s"
msgstr "E-Mail: %s konnte nicht gesendet werden"
-#: cps/helper.py:143
+#: cps/helper.py:157
msgid "Calibre-web test email"
msgstr "Calibre-web Test E-Mail"
-#: cps/helper.py:144 cps/helper.py:154
+#: cps/helper.py:158 cps/helper.py:168
msgid "This email has been sent via calibre web."
msgstr "Die E-Mail wurde via calibre-web versendet"
-#: cps/helper.py:153 cps/templates/detail.html:130
+#: cps/helper.py:167 cps/templates/detail.html:130
msgid "Send to Kindle"
msgstr "An Kindle senden"
-#: cps/helper.py:171 cps/helper.py:186
+#: cps/helper.py:185 cps/helper.py:200
msgid "Could not find any formats suitable for sending by email"
msgstr ""
"Konnte keine Formate finden welche für das versenden per E-Mail geeignet "
"sind"
-#: cps/helper.py:180
+#: cps/helper.py:194
msgid "Could not convert epub to mobi"
msgstr "Konnte .epub nicht nach .mobi konvertieren"
-#: cps/helper.py:206
-msgid "The requested file could not be read. Maybe wrong permissions?"
-msgstr "Die angeforderte Datei konnte nicht gelesen werden. Falsche Dateirechte?"
-
-#: cps/ub.py:443
+#: cps/ub.py:434
msgid "Guest"
msgstr "Gast"
-#: cps/web.py:778
+#: cps/web.py:734
+msgid "Requesting update package"
+msgstr "Frage Update Paket an"
+
+#: cps/web.py:735
+msgid "Downloading update package"
+msgstr "Lade Update Paket herunter"
+
+#: cps/web.py:736
+msgid "Unzipping update package"
+msgstr "Entpacke Update Paket"
+
+#: cps/web.py:737
+msgid "Files are replaced"
+msgstr "Ersetze Dateien"
+
+#: cps/web.py:738
+msgid "Database connections are closed"
+msgstr "Schließe Datenbankverbindungen"
+
+#: cps/web.py:739
+msgid "Server is stopped"
+msgstr "Stoppe Server"
+
+#: cps/web.py:740
+msgid "Update finished, please press okay and reload page"
+msgstr "Update abgeschlossen, bitte okay drücken und Seite neu laden"
+
+#: cps/web.py:810
msgid "Latest Books"
msgstr "Letzte Bücher"
-#: cps/web.py:803
+#: cps/web.py:835
msgid "Hot Books (most downloaded)"
msgstr "Beliebte Bücher (die meisten Downloads)"
-#: cps/web.py:813
+#: cps/web.py:845
msgid "Best rated books"
msgstr "Best bewertete Bücher"
-#: cps/templates/index.xml:36 cps/web.py:822
+#: cps/templates/index.xml:36 cps/web.py:854
msgid "Random Books"
msgstr "Zufällige Bücher"
-#: cps/web.py:835
+#: cps/web.py:867
msgid "Author list"
msgstr "Autorenliste"
-#: cps/web.py:846
+#: cps/web.py:878
#, python-format
msgid "Author: %(name)s"
msgstr "Autor: %(name)s"
-#: cps/web.py:848 cps/web.py:876 cps/web.py:975 cps/web.py:1216 cps/web.py:2103
+#: cps/web.py:880 cps/web.py:908 cps/web.py:1007 cps/web.py:1235
+#: cps/web.py:2115
msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr ""
"Buch öffnen fehlgeschlagen. Datei existiert nicht, oder ist nicht "
"zugänglich."
-#: cps/templates/index.xml:57 cps/web.py:862
+#: cps/templates/index.xml:57 cps/web.py:894
msgid "Series list"
msgstr "Liste Serien"
-#: cps/web.py:874
+#: cps/web.py:906
#, python-format
msgid "Series: %(serie)s"
msgstr "Serie: %(serie)s"
-#: cps/web.py:907
+#: cps/web.py:939
msgid "Available languages"
msgstr "Verfügbare Sprachen"
-#: cps/web.py:922
+#: cps/web.py:954
#, python-format
msgid "Language: %(name)s"
msgstr "Sprache: %(name)s"
-#: cps/templates/index.xml:50 cps/web.py:935
+#: cps/templates/index.xml:50 cps/web.py:967
msgid "Category list"
msgstr "Kategorieliste"
-#: cps/web.py:947
+#: cps/web.py:979
#, python-format
msgid "Category: %(name)s"
msgstr "Kategorie: %(name)s"
-#: cps/web.py:1008
+#: cps/web.py:1040
msgid "Statistics"
msgstr "Statistiken"
-#: cps/web.py:1029
-msgid "Performing Restart, please reload page"
-msgstr "Führe Neustart durch, bitte Seite neu laden"
+#: cps/web.py:1061
+msgid "Server restarted, please reload page"
+msgstr "Server neu gestartet,bitte Seite neu laden"
-#: cps/web.py:1031
+#: cps/web.py:1063
msgid "Performing shutdown of server, please close window"
msgstr "Server wird runtergefahren, bitte Fenster schließen"
-#: cps/web.py:1055
+#: cps/web.py:1073
msgid "Update done"
msgstr "Update durchgeführt"
-#: cps/web.py:1128 cps/web.py:1141
+#: cps/web.py:1147 cps/web.py:1160
msgid "search"
msgstr "Suche"
-#: cps/web.py:1192 cps/web.py:1199 cps/web.py:1206 cps/web.py:1213
+#: cps/web.py:1211 cps/web.py:1218 cps/web.py:1225 cps/web.py:1232
msgid "Read a Book"
msgstr "Lese ein Buch"
-#: cps/web.py:1264 cps/web.py:1701
+#: cps/web.py:1276 cps/web.py:1713
msgid "Please fill out all fields!"
msgstr "Bitte alle Felder ausfüllen!"
-#: cps/web.py:1265 cps/web.py:1281 cps/web.py:1286 cps/web.py:1288
+#: cps/web.py:1277 cps/web.py:1293 cps/web.py:1298 cps/web.py:1300
msgid "register"
msgstr "Registieren"
-#: cps/web.py:1280
+#: cps/web.py:1292
msgid "An unknown error occured. Please try again later."
msgstr "Es ist ein unbekannter Fehler aufgetreten. Bitte später erneut versuchen."
-#: cps/web.py:1285
+#: cps/web.py:1297
msgid "This username or email address is already in use."
msgstr "Der Benutzername oder die E-Mailadresse ist in bereits in Benutzung."
-#: cps/web.py:1303
+#: cps/web.py:1315
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr "Du bist nun eingeloggt als '%(nickname)s'"
-#: cps/web.py:1308
+#: cps/web.py:1320
msgid "Wrong Username or Password"
msgstr "Falscher Benutzername oder Passwort"
-#: cps/web.py:1310
+#: cps/web.py:1322
msgid "login"
msgstr "Login"
-#: cps/web.py:1327
+#: cps/web.py:1339
msgid "Please configure the SMTP mail settings first..."
msgstr "Bitte zuerst die SMTP Mail Einstellung konfigurieren ..."
-#: cps/web.py:1331
+#: cps/web.py:1343
#, python-format
msgid "Book successfully send to %(kindlemail)s"
msgstr "Buch erfolgreich versandt an %(kindlemail)s"
-#: cps/web.py:1335
+#: cps/web.py:1347
#, python-format
msgid "There was an error sending this book: %(res)s"
msgstr "Beim Senden des Buchs trat ein Fehler auf: %(res)s"
-#: cps/web.py:1337
+#: cps/web.py:1349
msgid "Please configure your kindle email address first..."
msgstr "Bitte die Kindle E-Mail Adresse zuuerst konfigurieren..."
-#: cps/web.py:1357
+#: cps/web.py:1369
#, python-format
msgid "Book has been added to shelf: %(sname)s"
msgstr "Das Buch wurde dem Bücherregal: %(sname)s hinzugefügt"
-#: cps/web.py:1378
+#: cps/web.py:1390
#, python-format
msgid "Book has been removed from shelf: %(sname)s"
msgstr "Das Buch wurde aus dem Bücherregal: %(sname)s entfernt"
-#: cps/web.py:1397 cps/web.py:1421
+#: cps/web.py:1409 cps/web.py:1433
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr "Es existiert bereits ein Bücheregal mit dem Titel '%(title)s'"
-#: cps/web.py:1402
+#: cps/web.py:1414
#, python-format
msgid "Shelf %(title)s created"
msgstr "Bücherregal %(title)s erzeugt"
-#: cps/web.py:1404 cps/web.py:1432
+#: cps/web.py:1416 cps/web.py:1444
msgid "There was an error"
msgstr "Es trat ein Fehler auf"
-#: cps/web.py:1405 cps/web.py:1407
+#: cps/web.py:1417 cps/web.py:1419
msgid "create a shelf"
msgstr "Bücherregal erzeugen"
-#: cps/web.py:1430
+#: cps/web.py:1442
#, python-format
msgid "Shelf %(title)s changed"
msgstr "Bücherregal %(title)s verändert"
-#: cps/web.py:1433 cps/web.py:1435
+#: cps/web.py:1445 cps/web.py:1447
msgid "Edit a shelf"
msgstr "Bücherregal editieren"
-#: cps/web.py:1453
+#: cps/web.py:1465
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr "Bücherregal %(name)s erfolgreich gelöscht"
-#: cps/web.py:1475
+#: cps/web.py:1487
#, python-format
msgid "Shelf: '%(name)s'"
msgstr "Bücherregal: '%(name)s'"
-#: cps/web.py:1506
+#: cps/web.py:1518
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr "Reihenfolge in Bücherregal '%(name)s' verändern"
-#: cps/web.py:1568
+#: cps/web.py:1580
msgid "Found an existing account for this email address."
msgstr "Es existiert ein Benutzerkonto für diese E-Mailadresse"
-#: cps/web.py:1570 cps/web.py:1574
+#: cps/web.py:1582 cps/web.py:1586
#, python-format
msgid "%(name)s's profile"
msgstr "%(name)s's Profil"
-#: cps/web.py:1571
+#: cps/web.py:1583
msgid "Profile updated"
msgstr "Profil aktualisiert"
-#: cps/web.py:1584
+#: cps/web.py:1597
msgid "Admin page"
msgstr "Admin Seite"
-#: cps/web.py:1656
+#: cps/web.py:1668
msgid "Calibre-web configuration updated"
msgstr "Calibre-web Konfiguration wurde aktualisiert"
-#: cps/web.py:1663 cps/web.py:1669 cps/web.py:1682
+#: cps/web.py:1675 cps/web.py:1681 cps/web.py:1694
msgid "Basic Configuration"
msgstr "Basis Konfiguration"
-#: cps/web.py:1667
+#: cps/web.py:1679
msgid "DB location is not valid, please enter correct path"
msgstr "DB Speicherort ist ungültig, bitte Pfad korrigieren"
-#: cps/templates/admin.html:33 cps/web.py:1703 cps/web.py:1749
+#: cps/templates/admin.html:34 cps/web.py:1715 cps/web.py:1761
msgid "Add new user"
msgstr "Neuen Benutzer hinzufügen"
-#: cps/web.py:1741
+#: cps/web.py:1753
#, python-format
msgid "User '%(user)s' created"
msgstr "Benutzer '%(user)s' angelegt"
-#: cps/web.py:1745
+#: cps/web.py:1757
msgid "Found an existing account for this email address or nickname."
msgstr ""
"Es existiert ein Benutzerkonto für diese Emailadresse oder den "
"Benutzernamen."
-#: cps/web.py:1767
+#: cps/web.py:1779
msgid "Mail settings updated"
msgstr "E-Mail Einstellungen aktualisiert"
-#: cps/web.py:1773
+#: cps/web.py:1785
#, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr "Test E-Mail erfolgreich an %(kindlemail)s versendet"
-#: cps/web.py:1776
+#: cps/web.py:1788
#, python-format
msgid "There was an error sending the Test E-Mail: %(res)s"
msgstr "Fehler beim versenden der Test E-Mail: %(res)s"
-#: cps/web.py:1777
+#: cps/web.py:1789
msgid "Edit mail settings"
msgstr "E-Mail Einstellungen editieren"
-#: cps/web.py:1805
+#: cps/web.py:1817
#, python-format
msgid "User '%(nick)s' deleted"
msgstr "Benutzer '%(nick)s' gelöscht"
-#: cps/web.py:1886
+#: cps/web.py:1898
#, python-format
msgid "User '%(nick)s' updated"
msgstr "Benutzer '%(nick)s' aktualisiert"
-#: cps/web.py:1889
+#: cps/web.py:1901
msgid "An unknown error occured."
msgstr "Es ist ein unbekanter Fehler aufgetreten"
-#: cps/web.py:1892
+#: cps/web.py:1904
#, python-format
msgid "Edit User %(nick)s"
msgstr "Benutzer %(nick)s bearbeiten"
-#: cps/web.py:2098 cps/web.py:2101 cps/web.py:2175
+#: cps/web.py:2110 cps/web.py:2113 cps/web.py:2188
msgid "edit metadata"
msgstr "Metadaten editieren"
-#: cps/web.py:2133
+#: cps/web.py:2145
#, python-format
msgid "Failed to create path %s (Permission denied)."
msgstr "Fehler beim Erzeugen des Pfads %s (Zugriff verweigert)"
-#: cps/web.py:2138
+#: cps/web.py:2150
#, python-format
msgid "Failed to store file %s (Permission denied)."
msgstr "Fehler beim speichern der Datei %s (Zugriff verweigert)"
-#: cps/web.py:2143
+#: cps/web.py:2155
#, python-format
msgid "Failed to delete file %s (Permission denied)."
msgstr "Fehler beim Löschen von Datei %s (Zugriff verweigert)"
@@ -356,145 +381,158 @@ msgstr "Fehler beim Löschen von Datei %s (Zugriff verweigert)"
msgid "User list"
msgstr "Benutzerliste"
-#: cps/templates/admin.html:7
+#: cps/templates/admin.html:8
msgid "Nickname"
msgstr "Benutzername"
-#: cps/templates/admin.html:8
+#: cps/templates/admin.html:9
msgid "Email"
msgstr "E-Mail"
-#: cps/templates/admin.html:9
+#: cps/templates/admin.html:10
msgid "Kindle"
msgstr "Kindle"
-#: cps/templates/admin.html:10
+#: cps/templates/admin.html:11
msgid "DLS"
msgstr "DLS"
-#: cps/templates/admin.html:11 cps/templates/layout.html:83
+#: cps/templates/admin.html:12 cps/templates/layout.html:85
msgid "Admin"
msgstr "Admin"
-#: cps/templates/admin.html:12 cps/templates/detail.html:117
+#: cps/templates/admin.html:13 cps/templates/detail.html:117
msgid "Download"
msgstr "Download"
-#: cps/templates/admin.html:13 cps/templates/layout.html:76
+#: cps/templates/admin.html:14 cps/templates/layout.html:78
msgid "Upload"
msgstr "Hochladen"
-#: cps/templates/admin.html:14
+#: cps/templates/admin.html:15
msgid "Edit"
msgstr "Editieren"
-#: cps/templates/admin.html:15
+#: cps/templates/admin.html:16
msgid "Passwd"
msgstr "Passwort"
-#: cps/templates/admin.html:34
+#: cps/templates/admin.html:35
msgid "SMTP mail settings"
msgstr "SMTP Mail Einstellungen"
-#: cps/templates/admin.html:37 cps/templates/email_edit.html:7
+#: cps/templates/admin.html:38 cps/templates/email_edit.html:7
msgid "SMTP hostname"
msgstr "SMTP Hostname"
-#: cps/templates/admin.html:38
+#: cps/templates/admin.html:39
msgid "SMTP port"
msgstr "SMTP Port"
-#: cps/templates/admin.html:39
+#: cps/templates/admin.html:40
msgid "SSL"
msgstr "SSL"
-#: cps/templates/admin.html:40 cps/templates/email_edit.html:23
+#: cps/templates/admin.html:41 cps/templates/email_edit.html:23
msgid "SMTP login"
msgstr "SMTP Login"
-#: cps/templates/admin.html:41 cps/templates/email_edit.html:27
+#: cps/templates/admin.html:42 cps/templates/email_edit.html:27
msgid "SMTP password"
msgstr "SMTP Passwort"
-#: cps/templates/admin.html:42
+#: cps/templates/admin.html:43
msgid "From mail"
msgstr "Absenderadresse"
-#: cps/templates/admin.html:54
+#: cps/templates/admin.html:55
msgid "Change SMTP settings"
msgstr "SMTP Einstellungen ändern"
-#: cps/templates/admin.html:56 cps/templates/admin.html:76
+#: cps/templates/admin.html:57 cps/templates/admin.html:77
msgid "Configuration"
msgstr "Konfiguration"
-#: cps/templates/admin.html:59
+#: cps/templates/admin.html:60
msgid "Calibre DB dir"
msgstr "Calibre DB Pfad"
-#: cps/templates/admin.html:60 cps/templates/config_edit.html:32
+#: cps/templates/admin.html:61 cps/templates/config_edit.html:32
msgid "Log Level"
msgstr "Log Level"
-#: cps/templates/admin.html:61
+#: cps/templates/admin.html:62
msgid "Port"
msgstr "Port"
-#: cps/templates/admin.html:62 cps/templates/config_edit.html:19
+#: cps/templates/admin.html:63 cps/templates/config_edit.html:19
msgid "Books per page"
msgstr "Bücher pro Seite"
-#: cps/templates/admin.html:63
+#: cps/templates/admin.html:64
msgid "Uploading"
msgstr "Hochladen"
-#: cps/templates/admin.html:64
+#: cps/templates/admin.html:65
msgid "Public registration"
msgstr "Öffentliche Registrierung"
-#: cps/templates/admin.html:65
+#: cps/templates/admin.html:66
msgid "Anonymous browsing"
msgstr "Anonymer Zugriff"
-#: cps/templates/admin.html:77
+#: cps/templates/admin.html:78
msgid "Administration"
msgstr "Administration"
-#: cps/templates/admin.html:79
+#: cps/templates/admin.html:80
+msgid "Current commit timestamp"
+msgstr "Aktuelles Commit Datum"
+
+#: cps/templates/admin.html:81
+msgid "Newest commit timestamp"
+msgstr "Neuestes Commit Datum"
+
+#: cps/templates/admin.html:83
msgid "Restart Calibre-web"
msgstr "Calibre-web Neustarten"
-#: cps/templates/admin.html:80
+#: cps/templates/admin.html:84
msgid "Stop Calibre-web"
msgstr "Stoppe Calibre-web"
-#: cps/templates/admin.html:81
+#: cps/templates/admin.html:85
msgid "Check for update"
msgstr "Suche nach Update"
-#: cps/templates/admin.html:82
+#: cps/templates/admin.html:86
msgid "Perform Update"
msgstr "Update durchführen"
-#: cps/templates/admin.html:93
+#: cps/templates/admin.html:96
msgid "Do you really want to restart Calibre-web?"
msgstr "Calibre-web wirklich neustarten?"
-#: cps/templates/admin.html:94 cps/templates/admin.html:109
+#: cps/templates/admin.html:101 cps/templates/admin.html:115
+#: cps/templates/admin.html:136
msgid "Ok"
msgstr "Ok"
-#: cps/templates/admin.html:95 cps/templates/admin.html:110
+#: cps/templates/admin.html:102 cps/templates/admin.html:116
#: cps/templates/book_edit.html:108 cps/templates/config_edit.html:75
#: cps/templates/email_edit.html:36 cps/templates/shelf_edit.html:17
#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:111
msgid "Back"
msgstr "Zurück"
-#: cps/templates/admin.html:108
+#: cps/templates/admin.html:114
msgid "Do you really want to stop Calibre-web?"
msgstr "Calibre-web wirklich stoppen"
+#: cps/templates/admin.html:127
+msgid "Updating, please do not reload page"
+msgstr "Updatevorgang, bitte Seite nicht neu laden"
+
#: cps/templates/book_edit.html:16 cps/templates/search_form.html:6
msgid "Book Title"
msgstr "Buchtitel"
@@ -511,7 +549,7 @@ msgstr "Beschreibung"
msgid "Tags"
msgstr "Tags"
-#: cps/templates/book_edit.html:33 cps/templates/layout.html:136
+#: cps/templates/book_edit.html:33 cps/templates/layout.html:138
#: cps/templates/search_form.html:33
msgid "Series"
msgstr "Serien"
@@ -606,7 +644,7 @@ msgstr "Bearbeiten erlauben"
msgid "Allow Changing Password"
msgstr "Passwort ändern erlauben"
-#: cps/templates/config_edit.html:78 cps/templates/layout.html:91
+#: cps/templates/config_edit.html:78 cps/templates/layout.html:93
#: cps/templates/login.html:4
msgid "Login"
msgstr "Login"
@@ -689,11 +727,11 @@ msgstr "Entdecke (Zufälliges Buch)"
msgid "Start"
msgstr "Start"
-#: cps/templates/index.xml:7 cps/templates/layout.html:61
+#: cps/templates/index.xml:7 cps/templates/layout.html:58
msgid "Search"
msgstr "Suche"
-#: cps/templates/index.xml:15 cps/templates/layout.html:124
+#: cps/templates/index.xml:15 cps/templates/layout.html:126
msgid "Hot Books"
msgstr "Beliebte Bücher"
@@ -701,7 +739,7 @@ msgstr "Beliebte Bücher"
msgid "Popular publications from this catalog based on Downloads."
msgstr "Beliebte Publikationen aus dieser Bibliothek basierend auf Downloadzahlen"
-#: cps/templates/index.xml:22 cps/templates/layout.html:127
+#: cps/templates/index.xml:22 cps/templates/layout.html:129
msgid "Best rated Books"
msgstr "Best bewertete Bücher"
@@ -709,7 +747,7 @@ msgstr "Best bewertete Bücher"
msgid "Popular publications from this catalog based on Rating."
msgstr "Beliebte Veröffentlichungen dieses Katalogs basierend auf Bewertungen"
-#: cps/templates/index.xml:29 cps/templates/layout.html:122
+#: cps/templates/index.xml:29 cps/templates/layout.html:124
msgid "New Books"
msgstr "Neue Bücher"
@@ -721,7 +759,7 @@ msgstr "Die neuesten Bücher"
msgid "Show Random Books"
msgstr "Zeige zufällige Bücher"
-#: cps/templates/index.xml:43 cps/templates/layout.html:138
+#: cps/templates/index.xml:43 cps/templates/layout.html:140
msgid "Authors"
msgstr "Autoren"
@@ -741,51 +779,51 @@ msgstr "Bücher nach Reihen geordnet"
msgid "Toggle navigation"
msgstr "Nagivation umschalten"
-#: cps/templates/layout.html:63
+#: cps/templates/layout.html:60
msgid "Go!"
msgstr "Los!"
-#: cps/templates/layout.html:66
+#: cps/templates/layout.html:68
msgid "Advanced Search"
msgstr "Erweiterte Suche"
-#: cps/templates/layout.html:87
+#: cps/templates/layout.html:89
msgid "Logout"
msgstr "Logout"
-#: cps/templates/layout.html:92 cps/templates/register.html:18
+#: cps/templates/layout.html:94 cps/templates/register.html:18
msgid "Register"
msgstr "Registrieren"
-#: cps/templates/layout.html:121
+#: cps/templates/layout.html:123
msgid "Browse"
msgstr "Browsen"
-#: cps/templates/layout.html:130
+#: cps/templates/layout.html:132
msgid "Discover"
msgstr "Entdecke"
-#: cps/templates/layout.html:133
+#: cps/templates/layout.html:135
msgid "Categories"
msgstr "Kategorien"
-#: cps/templates/layout.html:140 cps/templates/search_form.html:54
+#: cps/templates/layout.html:142 cps/templates/search_form.html:54
msgid "Languages"
msgstr "Sprachen"
-#: cps/templates/layout.html:143
+#: cps/templates/layout.html:145
msgid "Public Shelves"
msgstr "Öffentiche Bücherregale"
-#: cps/templates/layout.html:147
+#: cps/templates/layout.html:149
msgid "Your Shelves"
msgstr "Deine Bücherregale"
-#: cps/templates/layout.html:152
+#: cps/templates/layout.html:154
msgid "Create a Shelf"
msgstr "Bücherregal erzeugen"
-#: cps/templates/layout.html:153
+#: cps/templates/layout.html:155
msgid "About"
msgstr "Über"
diff --git a/cps/translations/es/LC_MESSAGES/messages.mo b/cps/translations/es/LC_MESSAGES/messages.mo
index 17a93367..2c7f6ec7 100644
Binary files a/cps/translations/es/LC_MESSAGES/messages.mo and b/cps/translations/es/LC_MESSAGES/messages.mo differ
diff --git a/cps/translations/es/LC_MESSAGES/messages.po b/cps/translations/es/LC_MESSAGES/messages.po
index 3cbb30b7..c695a965 100644
--- a/cps/translations/es/LC_MESSAGES/messages.po
+++ b/cps/translations/es/LC_MESSAGES/messages.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n"
-"POT-Creation-Date: 2017-02-10 20:17+0100\n"
+"POT-Creation-Date: 2017-02-20 19:47+0100\n"
"PO-Revision-Date: 2016-11-13 18:35+0100\n"
"Last-Translator: Juan F. Villa \n"
"Language: es\n"
@@ -25,316 +25,341 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
-#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:998
+#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:1030
msgid "not installed"
msgstr "No instalado"
-#: cps/helper.py:136
+#: cps/helper.py:150
#, python-format
msgid "Failed to send mail: %s"
msgstr "Fallo al enviar el correo : %s"
-#: cps/helper.py:143
+#: cps/helper.py:157
msgid "Calibre-web test email"
msgstr "Prueba de Correo Calibre-web"
-#: cps/helper.py:144 cps/helper.py:154
+#: cps/helper.py:158 cps/helper.py:168
msgid "This email has been sent via calibre web."
msgstr "Este mensaje ha sido enviado via Calibre Web."
-#: cps/helper.py:153 cps/templates/detail.html:130
+#: cps/helper.py:167 cps/templates/detail.html:130
msgid "Send to Kindle"
msgstr "Enviar a Kindle"
-#: cps/helper.py:171 cps/helper.py:186
+#: cps/helper.py:185 cps/helper.py:200
msgid "Could not find any formats suitable for sending by email"
msgstr "Formato no compatible para enviar por correo electronico"
-#: cps/helper.py:180
+#: cps/helper.py:194
msgid "Could not convert epub to mobi"
msgstr "No fue posible convertir de epub a mobi"
-#: cps/helper.py:206
-msgid "The requested file could not be read. Maybe wrong permissions?"
-msgstr "El fichero solicitado no puede ser leido. Problema de permisos?"
-
-#: cps/ub.py:443
+#: cps/ub.py:434
msgid "Guest"
msgstr ""
-#: cps/web.py:778
+#: cps/web.py:734
+msgid "Requesting update package"
+msgstr ""
+
+#: cps/web.py:735
+msgid "Downloading update package"
+msgstr ""
+
+#: cps/web.py:736
+msgid "Unzipping update package"
+msgstr ""
+
+#: cps/web.py:737
+msgid "Files are replaced"
+msgstr ""
+
+#: cps/web.py:738
+msgid "Database connections are closed"
+msgstr ""
+
+#: cps/web.py:739
+msgid "Server is stopped"
+msgstr ""
+
+#: cps/web.py:740
+msgid "Update finished, please press okay and reload page"
+msgstr ""
+
+#: cps/web.py:810
msgid "Latest Books"
msgstr "Libros recientes"
-#: cps/web.py:803
+#: cps/web.py:835
msgid "Hot Books (most downloaded)"
msgstr "Libros Populares (los mas descargados)"
-#: cps/web.py:813
+#: cps/web.py:845
msgid "Best rated books"
msgstr ""
-#: cps/templates/index.xml:36 cps/web.py:822
+#: cps/templates/index.xml:36 cps/web.py:854
msgid "Random Books"
msgstr "Libros al Azar"
-#: cps/web.py:835
+#: cps/web.py:867
msgid "Author list"
msgstr "Lista de Autores"
-#: cps/web.py:846
+#: cps/web.py:878
#, python-format
msgid "Author: %(name)s"
msgstr ""
-#: cps/web.py:848 cps/web.py:876 cps/web.py:975 cps/web.py:1216 cps/web.py:2103
+#: cps/web.py:880 cps/web.py:908 cps/web.py:1007 cps/web.py:1235
+#: cps/web.py:2115
msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "Error en apertura del Objeto. El archivo no existe o no es accesible"
-#: cps/templates/index.xml:57 cps/web.py:862
+#: cps/templates/index.xml:57 cps/web.py:894
msgid "Series list"
msgstr "lista de Series"
-#: cps/web.py:874
+#: cps/web.py:906
#, python-format
msgid "Series: %(serie)s"
msgstr "Series : %(serie)s"
-#: cps/web.py:907
+#: cps/web.py:939
msgid "Available languages"
msgstr "Lenguajes disponibles"
-#: cps/web.py:922
+#: cps/web.py:954
#, python-format
msgid "Language: %(name)s"
msgstr "Lenguaje: %(name)s"
-#: cps/templates/index.xml:50 cps/web.py:935
+#: cps/templates/index.xml:50 cps/web.py:967
msgid "Category list"
msgstr "Lista de Categorias"
-#: cps/web.py:947
+#: cps/web.py:979
#, python-format
msgid "Category: %(name)s"
msgstr "Categoria : %(name)s"
-#: cps/web.py:1008
+#: cps/web.py:1040
msgid "Statistics"
msgstr "Estadisticas"
-#: cps/web.py:1029
-msgid "Performing Restart, please reload page"
+#: cps/web.py:1061
+msgid "Server restarted, please reload page"
msgstr ""
-#: cps/web.py:1031
+#: cps/web.py:1063
msgid "Performing shutdown of server, please close window"
msgstr ""
-#: cps/web.py:1055
+#: cps/web.py:1073
msgid "Update done"
msgstr ""
-#: cps/web.py:1128 cps/web.py:1141
+#: cps/web.py:1147 cps/web.py:1160
msgid "search"
msgstr ""
-#: cps/web.py:1192 cps/web.py:1199 cps/web.py:1206 cps/web.py:1213
+#: cps/web.py:1211 cps/web.py:1218 cps/web.py:1225 cps/web.py:1232
msgid "Read a Book"
msgstr "Leer un Libro"
-#: cps/web.py:1264 cps/web.py:1701
+#: cps/web.py:1276 cps/web.py:1713
msgid "Please fill out all fields!"
msgstr "Por favor llenar todos los campos!"
-#: cps/web.py:1265 cps/web.py:1281 cps/web.py:1286 cps/web.py:1288
+#: cps/web.py:1277 cps/web.py:1293 cps/web.py:1298 cps/web.py:1300
msgid "register"
msgstr "Registrarse"
-#: cps/web.py:1280
+#: cps/web.py:1292
msgid "An unknown error occured. Please try again later."
msgstr "Ocurrio un error. Intentar de nuevo mas tarde."
-#: cps/web.py:1285
+#: cps/web.py:1297
msgid "This username or email address is already in use."
msgstr "Usuario o direccion de correo en uso."
-#: cps/web.py:1303
+#: cps/web.py:1315
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr "Sesion iniciada como : '%(nickname)s'"
-#: cps/web.py:1308
+#: cps/web.py:1320
msgid "Wrong Username or Password"
msgstr "Usuario o contraseña invalido"
-#: cps/web.py:1310
+#: cps/web.py:1322
msgid "login"
msgstr "Iniciar Sesion"
-#: cps/web.py:1327
+#: cps/web.py:1339
msgid "Please configure the SMTP mail settings first..."
msgstr "Configurar primero los parametros SMTP por favor..."
-#: cps/web.py:1331
+#: cps/web.py:1343
#, python-format
msgid "Book successfully send to %(kindlemail)s"
msgstr "Envio de Libro a %(kindlemail)s correctamente"
-#: cps/web.py:1335
+#: cps/web.py:1347
#, python-format
msgid "There was an error sending this book: %(res)s"
msgstr "Ha sucedido un error en el envio del Libro: %(res)s"
-#: cps/web.py:1337
+#: cps/web.py:1349
msgid "Please configure your kindle email address first..."
msgstr "Configurar primero la dirección de correo Kindle por favor..."
-#: cps/web.py:1357
+#: cps/web.py:1369
#, python-format
msgid "Book has been added to shelf: %(sname)s"
msgstr "El libro fue agregado a el estante: %(sname)s"
-#: cps/web.py:1378
+#: cps/web.py:1390
#, python-format
msgid "Book has been removed from shelf: %(sname)s"
msgstr "El libro fue removido del estante: %(sname)s"
-#: cps/web.py:1397 cps/web.py:1421
+#: cps/web.py:1409 cps/web.py:1433
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr "Une étagère de ce nom '%(title)s' existe déjà."
-#: cps/web.py:1402
+#: cps/web.py:1414
#, python-format
msgid "Shelf %(title)s created"
msgstr "Estante %(title)s creado"
-#: cps/web.py:1404 cps/web.py:1432
+#: cps/web.py:1416 cps/web.py:1444
msgid "There was an error"
msgstr "Hemos tenido un error"
-#: cps/web.py:1405 cps/web.py:1407
+#: cps/web.py:1417 cps/web.py:1419
msgid "create a shelf"
msgstr "Crear un Estante"
-#: cps/web.py:1430
+#: cps/web.py:1442
#, python-format
msgid "Shelf %(title)s changed"
msgstr ""
-#: cps/web.py:1433 cps/web.py:1435
+#: cps/web.py:1445 cps/web.py:1447
msgid "Edit a shelf"
msgstr ""
-#: cps/web.py:1453
+#: cps/web.py:1465
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr "Estante %(name)s fue borrado correctamente"
-#: cps/web.py:1475
+#: cps/web.py:1487
#, python-format
msgid "Shelf: '%(name)s'"
msgstr "Estante: '%(name)s'"
-#: cps/web.py:1506
+#: cps/web.py:1518
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr ""
-#: cps/web.py:1568
+#: cps/web.py:1580
msgid "Found an existing account for this email address."
msgstr "Existe una cuenta vinculada a esta cuenta de correo."
-#: cps/web.py:1570 cps/web.py:1574
+#: cps/web.py:1582 cps/web.py:1586
#, python-format
msgid "%(name)s's profile"
msgstr "Perfil de %(name)s"
-#: cps/web.py:1571
+#: cps/web.py:1583
msgid "Profile updated"
msgstr "Perfil actualizado"
-#: cps/web.py:1584
+#: cps/web.py:1597
msgid "Admin page"
msgstr ""
-#: cps/web.py:1656
+#: cps/web.py:1668
msgid "Calibre-web configuration updated"
msgstr ""
-#: cps/web.py:1663 cps/web.py:1669 cps/web.py:1682
+#: cps/web.py:1675 cps/web.py:1681 cps/web.py:1694
msgid "Basic Configuration"
msgstr ""
-#: cps/web.py:1667
+#: cps/web.py:1679
msgid "DB location is not valid, please enter correct path"
msgstr ""
-#: cps/templates/admin.html:33 cps/web.py:1703 cps/web.py:1749
+#: cps/templates/admin.html:34 cps/web.py:1715 cps/web.py:1761
msgid "Add new user"
msgstr "Agregar un nuevo usuario"
-#: cps/web.py:1741
+#: cps/web.py:1753
#, python-format
msgid "User '%(user)s' created"
msgstr "Usuario '%(user)s' creado"
-#: cps/web.py:1745
+#: cps/web.py:1757
msgid "Found an existing account for this email address or nickname."
msgstr "Se ha encontrado una cuenta vinculada a esta cuenta de correo o usuario."
-#: cps/web.py:1767
+#: cps/web.py:1779
msgid "Mail settings updated"
msgstr "Parametros de correo actualizados"
-#: cps/web.py:1773
+#: cps/web.py:1785
#, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr "Exito al realizar envio de prueba a %(kindlemail)s"
-#: cps/web.py:1776
+#: cps/web.py:1788
#, python-format
msgid "There was an error sending the Test E-Mail: %(res)s"
msgstr "Error al realizar envio de prueba a E-Mail: %(res)s"
-#: cps/web.py:1777
+#: cps/web.py:1789
msgid "Edit mail settings"
msgstr "Editar parametros de correo"
-#: cps/web.py:1805
+#: cps/web.py:1817
#, python-format
msgid "User '%(nick)s' deleted"
msgstr "Usuario '%(nick)s' borrado"
-#: cps/web.py:1886
+#: cps/web.py:1898
#, python-format
msgid "User '%(nick)s' updated"
msgstr "Usuario '%(nick)s' Actualizado"
-#: cps/web.py:1889
+#: cps/web.py:1901
msgid "An unknown error occured."
msgstr "Oups ! Error inesperado."
-#: cps/web.py:1892
+#: cps/web.py:1904
#, python-format
msgid "Edit User %(nick)s"
msgstr "Editar Usuario %(nick)s"
-#: cps/web.py:2098 cps/web.py:2101 cps/web.py:2175
+#: cps/web.py:2110 cps/web.py:2113 cps/web.py:2188
msgid "edit metadata"
msgstr ""
-#: cps/web.py:2133
+#: cps/web.py:2145
#, python-format
msgid "Failed to create path %s (Permission denied)."
msgstr "Fallo al crear la ruta %s (permiso negado)"
-#: cps/web.py:2138
+#: cps/web.py:2150
#, python-format
msgid "Failed to store file %s (Permission denied)."
msgstr "Fallo al almacenar el archivo %s (permiso negado)"
-#: cps/web.py:2143
+#: cps/web.py:2155
#, python-format
msgid "Failed to delete file %s (Permission denied)."
msgstr "Fallo al borrar el archivo %s (permiso negado)"
@@ -343,145 +368,158 @@ msgstr "Fallo al borrar el archivo %s (permiso negado)"
msgid "User list"
msgstr "lista de usuarios"
-#: cps/templates/admin.html:7
+#: cps/templates/admin.html:8
msgid "Nickname"
msgstr "Nickname"
-#: cps/templates/admin.html:8
+#: cps/templates/admin.html:9
msgid "Email"
msgstr "Correo"
-#: cps/templates/admin.html:9
+#: cps/templates/admin.html:10
msgid "Kindle"
msgstr "Kindle"
-#: cps/templates/admin.html:10
+#: cps/templates/admin.html:11
msgid "DLS"
msgstr "DLS"
-#: cps/templates/admin.html:11 cps/templates/layout.html:83
+#: cps/templates/admin.html:12 cps/templates/layout.html:85
msgid "Admin"
msgstr "Administracion"
-#: cps/templates/admin.html:12 cps/templates/detail.html:117
+#: cps/templates/admin.html:13 cps/templates/detail.html:117
msgid "Download"
msgstr "Descarga"
-#: cps/templates/admin.html:13 cps/templates/layout.html:76
+#: cps/templates/admin.html:14 cps/templates/layout.html:78
msgid "Upload"
msgstr "Subir archivo"
-#: cps/templates/admin.html:14
+#: cps/templates/admin.html:15
msgid "Edit"
msgstr "Editar"
-#: cps/templates/admin.html:15
+#: cps/templates/admin.html:16
msgid "Passwd"
msgstr "Clave"
-#: cps/templates/admin.html:34
+#: cps/templates/admin.html:35
msgid "SMTP mail settings"
msgstr "Parametros smtp del correo"
-#: cps/templates/admin.html:37 cps/templates/email_edit.html:7
+#: cps/templates/admin.html:38 cps/templates/email_edit.html:7
msgid "SMTP hostname"
msgstr "Servidor smtp"
-#: cps/templates/admin.html:38
+#: cps/templates/admin.html:39
msgid "SMTP port"
msgstr "Puerto smtp"
-#: cps/templates/admin.html:39
+#: cps/templates/admin.html:40
msgid "SSL"
msgstr "SSL"
-#: cps/templates/admin.html:40 cps/templates/email_edit.html:23
+#: cps/templates/admin.html:41 cps/templates/email_edit.html:23
msgid "SMTP login"
msgstr "Login SMTP"
-#: cps/templates/admin.html:41 cps/templates/email_edit.html:27
+#: cps/templates/admin.html:42 cps/templates/email_edit.html:27
msgid "SMTP password"
msgstr "Clave SMTP"
-#: cps/templates/admin.html:42
+#: cps/templates/admin.html:43
msgid "From mail"
msgstr "Desde el correo"
-#: cps/templates/admin.html:54
+#: cps/templates/admin.html:55
msgid "Change SMTP settings"
msgstr "Cambiar parametros smtp"
-#: cps/templates/admin.html:56 cps/templates/admin.html:76
+#: cps/templates/admin.html:57 cps/templates/admin.html:77
msgid "Configuration"
msgstr ""
-#: cps/templates/admin.html:59
+#: cps/templates/admin.html:60
msgid "Calibre DB dir"
msgstr ""
-#: cps/templates/admin.html:60 cps/templates/config_edit.html:32
+#: cps/templates/admin.html:61 cps/templates/config_edit.html:32
msgid "Log Level"
msgstr ""
-#: cps/templates/admin.html:61
+#: cps/templates/admin.html:62
msgid "Port"
msgstr ""
-#: cps/templates/admin.html:62 cps/templates/config_edit.html:19
+#: cps/templates/admin.html:63 cps/templates/config_edit.html:19
msgid "Books per page"
msgstr ""
-#: cps/templates/admin.html:63
+#: cps/templates/admin.html:64
msgid "Uploading"
msgstr ""
-#: cps/templates/admin.html:64
+#: cps/templates/admin.html:65
msgid "Public registration"
msgstr ""
-#: cps/templates/admin.html:65
+#: cps/templates/admin.html:66
msgid "Anonymous browsing"
msgstr ""
-#: cps/templates/admin.html:77
+#: cps/templates/admin.html:78
msgid "Administration"
msgstr ""
-#: cps/templates/admin.html:79
-msgid "Restart Calibre-web"
-msgstr ""
-
#: cps/templates/admin.html:80
-msgid "Stop Calibre-web"
+msgid "Current commit timestamp"
msgstr ""
#: cps/templates/admin.html:81
+msgid "Newest commit timestamp"
+msgstr ""
+
+#: cps/templates/admin.html:83
+msgid "Restart Calibre-web"
+msgstr ""
+
+#: cps/templates/admin.html:84
+msgid "Stop Calibre-web"
+msgstr ""
+
+#: cps/templates/admin.html:85
msgid "Check for update"
msgstr ""
-#: cps/templates/admin.html:82
+#: cps/templates/admin.html:86
msgid "Perform Update"
msgstr ""
-#: cps/templates/admin.html:93
+#: cps/templates/admin.html:96
msgid "Do you really want to restart Calibre-web?"
msgstr ""
-#: cps/templates/admin.html:94 cps/templates/admin.html:109
+#: cps/templates/admin.html:101 cps/templates/admin.html:115
+#: cps/templates/admin.html:136
msgid "Ok"
msgstr ""
-#: cps/templates/admin.html:95 cps/templates/admin.html:110
+#: cps/templates/admin.html:102 cps/templates/admin.html:116
#: cps/templates/book_edit.html:108 cps/templates/config_edit.html:75
#: cps/templates/email_edit.html:36 cps/templates/shelf_edit.html:17
#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:111
msgid "Back"
msgstr "Regresar"
-#: cps/templates/admin.html:108
+#: cps/templates/admin.html:114
msgid "Do you really want to stop Calibre-web?"
msgstr ""
+#: cps/templates/admin.html:127
+msgid "Updating, please do not reload page"
+msgstr ""
+
#: cps/templates/book_edit.html:16 cps/templates/search_form.html:6
msgid "Book Title"
msgstr "Titulo del Libro"
@@ -498,7 +536,7 @@ msgstr "Descripcion"
msgid "Tags"
msgstr "Etiqueta"
-#: cps/templates/book_edit.html:33 cps/templates/layout.html:136
+#: cps/templates/book_edit.html:33 cps/templates/layout.html:138
#: cps/templates/search_form.html:33
msgid "Series"
msgstr "Series"
@@ -593,7 +631,7 @@ msgstr "Permitir editar"
msgid "Allow Changing Password"
msgstr "Permitir cambiar la clave"
-#: cps/templates/config_edit.html:78 cps/templates/layout.html:91
+#: cps/templates/config_edit.html:78 cps/templates/layout.html:93
#: cps/templates/login.html:4
msgid "Login"
msgstr "Inicio de Sesion"
@@ -674,11 +712,11 @@ msgstr "Descubrir (Libros al azar)"
msgid "Start"
msgstr "Iniciar"
-#: cps/templates/index.xml:7 cps/templates/layout.html:61
+#: cps/templates/index.xml:7 cps/templates/layout.html:58
msgid "Search"
msgstr "Buscar"
-#: cps/templates/index.xml:15 cps/templates/layout.html:124
+#: cps/templates/index.xml:15 cps/templates/layout.html:126
msgid "Hot Books"
msgstr "Libros Populares"
@@ -686,7 +724,7 @@ msgstr "Libros Populares"
msgid "Popular publications from this catalog based on Downloads."
msgstr ""
-#: cps/templates/index.xml:22 cps/templates/layout.html:127
+#: cps/templates/index.xml:22 cps/templates/layout.html:129
msgid "Best rated Books"
msgstr ""
@@ -694,7 +732,7 @@ msgstr ""
msgid "Popular publications from this catalog based on Rating."
msgstr "Publicaciones populares del catalogo basados en el puntaje."
-#: cps/templates/index.xml:29 cps/templates/layout.html:122
+#: cps/templates/index.xml:29 cps/templates/layout.html:124
msgid "New Books"
msgstr "Nuevos Libros"
@@ -706,7 +744,7 @@ msgstr "Libros Recientes"
msgid "Show Random Books"
msgstr "Mostrar libros al azar"
-#: cps/templates/index.xml:43 cps/templates/layout.html:138
+#: cps/templates/index.xml:43 cps/templates/layout.html:140
msgid "Authors"
msgstr "Autores"
@@ -726,51 +764,51 @@ msgstr "Libros ordenados por Series"
msgid "Toggle navigation"
msgstr ""
-#: cps/templates/layout.html:63
+#: cps/templates/layout.html:60
msgid "Go!"
msgstr "Vamos!"
-#: cps/templates/layout.html:66
+#: cps/templates/layout.html:68
msgid "Advanced Search"
msgstr "Busqueda avanzada"
-#: cps/templates/layout.html:87
+#: cps/templates/layout.html:89
msgid "Logout"
msgstr "Cerrar Sesion"
-#: cps/templates/layout.html:92 cps/templates/register.html:18
+#: cps/templates/layout.html:94 cps/templates/register.html:18
msgid "Register"
msgstr "Registro"
-#: cps/templates/layout.html:121
+#: cps/templates/layout.html:123
msgid "Browse"
msgstr "Explorar"
-#: cps/templates/layout.html:130
+#: cps/templates/layout.html:132
msgid "Discover"
msgstr "Descubrir"
-#: cps/templates/layout.html:133
+#: cps/templates/layout.html:135
msgid "Categories"
msgstr "Categoria"
-#: cps/templates/layout.html:140 cps/templates/search_form.html:54
+#: cps/templates/layout.html:142 cps/templates/search_form.html:54
msgid "Languages"
msgstr "Lenguaje"
-#: cps/templates/layout.html:143
+#: cps/templates/layout.html:145
msgid "Public Shelves"
msgstr "Estantes Publicos"
-#: cps/templates/layout.html:147
+#: cps/templates/layout.html:149
msgid "Your Shelves"
msgstr "Sus Estantes"
-#: cps/templates/layout.html:152
+#: cps/templates/layout.html:154
msgid "Create a Shelf"
msgstr "Crear un estante"
-#: cps/templates/layout.html:153
+#: cps/templates/layout.html:155
msgid "About"
msgstr "Acerca de"
@@ -789,7 +827,7 @@ msgid "Remember me"
msgstr "Recordarme"
#: cps/templates/osd.xml:5
-msgid "instanceCalibre Web ebook catalog"
+msgid "Calibre Web ebook catalog"
msgstr ""
#: cps/templates/read.html:136
diff --git a/cps/translations/fr/LC_MESSAGES/messages.mo b/cps/translations/fr/LC_MESSAGES/messages.mo
index fd8ba5a0..9fe03e48 100644
Binary files a/cps/translations/fr/LC_MESSAGES/messages.mo and b/cps/translations/fr/LC_MESSAGES/messages.mo differ
diff --git a/cps/translations/fr/LC_MESSAGES/messages.po b/cps/translations/fr/LC_MESSAGES/messages.po
index f6f35475..76a2948a 100644
--- a/cps/translations/fr/LC_MESSAGES/messages.po
+++ b/cps/translations/fr/LC_MESSAGES/messages.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n"
-"POT-Creation-Date: 2017-02-10 20:17+0100\n"
+"POT-Creation-Date: 2017-02-20 19:47+0100\n"
"PO-Revision-Date: 2016-11-13 18:35+0100\n"
"Last-Translator: Nicolas Roudninski \n"
"Language: fr\n"
@@ -31,320 +31,343 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
-#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:998
+#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:1030
msgid "not installed"
msgstr ""
-#: cps/helper.py:136
+#: cps/helper.py:150
#, python-format
msgid "Failed to send mail: %s"
msgstr "Impossible d'envoyer le courriel : %s"
-#: cps/helper.py:143
+#: cps/helper.py:157
msgid "Calibre-web test email"
msgstr ""
-#: cps/helper.py:144 cps/helper.py:154
+#: cps/helper.py:158 cps/helper.py:168
msgid "This email has been sent via calibre web."
msgstr "Ce message a été envoyé depuis calibre web."
-#: cps/helper.py:153 cps/templates/detail.html:130
+#: cps/helper.py:167 cps/templates/detail.html:130
msgid "Send to Kindle"
msgstr "Envoyer ver Kindle"
-#: cps/helper.py:171 cps/helper.py:186
+#: cps/helper.py:185 cps/helper.py:200
msgid "Could not find any formats suitable for sending by email"
msgstr "Impossible de trouver un format adapté à envoyer par courriel"
-#: cps/helper.py:180
+#: cps/helper.py:194
msgid "Could not convert epub to mobi"
msgstr "Impossible de convertir epub vers mobi"
-#: cps/helper.py:206
-msgid "The requested file could not be read. Maybe wrong permissions?"
-msgstr ""
-"Le fichier demandé ne peux pas être lu. Peut-être de mauvaises "
-"permissions ?"
-
-#: cps/ub.py:443
+#: cps/ub.py:434
msgid "Guest"
msgstr ""
-#: cps/web.py:778
+#: cps/web.py:734
+msgid "Requesting update package"
+msgstr ""
+
+#: cps/web.py:735
+msgid "Downloading update package"
+msgstr ""
+
+#: cps/web.py:736
+msgid "Unzipping update package"
+msgstr ""
+
+#: cps/web.py:737
+msgid "Files are replaced"
+msgstr ""
+
+#: cps/web.py:738
+msgid "Database connections are closed"
+msgstr ""
+
+#: cps/web.py:739
+msgid "Server is stopped"
+msgstr ""
+
+#: cps/web.py:740
+msgid "Update finished, please press okay and reload page"
+msgstr ""
+
+#: cps/web.py:810
msgid "Latest Books"
msgstr "Derniers livres"
-#: cps/web.py:803
+#: cps/web.py:835
msgid "Hot Books (most downloaded)"
msgstr "Livres populaires (les plus téléchargés)"
-#: cps/web.py:813
+#: cps/web.py:845
msgid "Best rated books"
msgstr ""
-#: cps/templates/index.xml:36 cps/web.py:822
+#: cps/templates/index.xml:36 cps/web.py:854
msgid "Random Books"
msgstr "Livres au hasard"
-#: cps/web.py:835
+#: cps/web.py:867
msgid "Author list"
msgstr "Liste des auteurs"
-#: cps/web.py:846
+#: cps/web.py:878
#, python-format
msgid "Author: %(name)s"
msgstr ""
-#: cps/web.py:848 cps/web.py:876 cps/web.py:975 cps/web.py:1216 cps/web.py:2103
+#: cps/web.py:880 cps/web.py:908 cps/web.py:1007 cps/web.py:1235
+#: cps/web.py:2115
msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr ""
"Erreur d'ouverture du livre numérique. Le fichier n'existe pas ou n'est "
"pas accessible :"
-#: cps/templates/index.xml:57 cps/web.py:862
+#: cps/templates/index.xml:57 cps/web.py:894
msgid "Series list"
msgstr "Liste des séries"
-#: cps/web.py:874
+#: cps/web.py:906
#, python-format
msgid "Series: %(serie)s"
msgstr "Séries : %(serie)s"
-#: cps/web.py:907
+#: cps/web.py:939
msgid "Available languages"
msgstr "Langues disponibles"
-#: cps/web.py:922
+#: cps/web.py:954
#, python-format
msgid "Language: %(name)s"
msgstr "Langue : %(name)s"
-#: cps/templates/index.xml:50 cps/web.py:935
+#: cps/templates/index.xml:50 cps/web.py:967
msgid "Category list"
msgstr "Liste des catégories"
-#: cps/web.py:947
+#: cps/web.py:979
#, python-format
msgid "Category: %(name)s"
msgstr "Catégorie : %(name)s"
-#: cps/web.py:1008
+#: cps/web.py:1040
msgid "Statistics"
msgstr "Statistiques"
-#: cps/web.py:1029
-msgid "Performing Restart, please reload page"
+#: cps/web.py:1061
+msgid "Server restarted, please reload page"
msgstr ""
-#: cps/web.py:1031
+#: cps/web.py:1063
msgid "Performing shutdown of server, please close window"
msgstr ""
-#: cps/web.py:1055
+#: cps/web.py:1073
msgid "Update done"
msgstr ""
-#: cps/web.py:1128 cps/web.py:1141
+#: cps/web.py:1147 cps/web.py:1160
msgid "search"
msgstr ""
-#: cps/web.py:1192 cps/web.py:1199 cps/web.py:1206 cps/web.py:1213
+#: cps/web.py:1211 cps/web.py:1218 cps/web.py:1225 cps/web.py:1232
msgid "Read a Book"
msgstr "Lire un livre"
-#: cps/web.py:1264 cps/web.py:1701
+#: cps/web.py:1276 cps/web.py:1713
msgid "Please fill out all fields!"
msgstr "SVP, complétez tous les champs !"
-#: cps/web.py:1265 cps/web.py:1281 cps/web.py:1286 cps/web.py:1288
+#: cps/web.py:1277 cps/web.py:1293 cps/web.py:1298 cps/web.py:1300
msgid "register"
msgstr "S'enregistrer"
-#: cps/web.py:1280
+#: cps/web.py:1292
msgid "An unknown error occured. Please try again later."
msgstr "Une erreur a eu lieu. Merci de réessayez plus tard."
-#: cps/web.py:1285
+#: cps/web.py:1297
msgid "This username or email address is already in use."
msgstr "Ce nom d'utilisateur ou cette adresse de courriel est déjà utilisée."
-#: cps/web.py:1303
+#: cps/web.py:1315
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr "Vous êtes maintenant connecté sous : '%(nickname)s'"
-#: cps/web.py:1308
+#: cps/web.py:1320
msgid "Wrong Username or Password"
msgstr "Mauvais nom d'utilisateur ou mot de passe"
-#: cps/web.py:1310
+#: cps/web.py:1322
msgid "login"
msgstr "Connexion"
-#: cps/web.py:1327
+#: cps/web.py:1339
msgid "Please configure the SMTP mail settings first..."
msgstr "Veillez configurer les paramètres smtp d'abord..."
-#: cps/web.py:1331
+#: cps/web.py:1343
#, python-format
msgid "Book successfully send to %(kindlemail)s"
msgstr "Livres envoyés à %(kindlemail)s avec succès"
-#: cps/web.py:1335
+#: cps/web.py:1347
#, python-format
msgid "There was an error sending this book: %(res)s"
msgstr "Il y a eu une erreur en envoyant ce livre : %(res)s"
-#: cps/web.py:1337
+#: cps/web.py:1349
msgid "Please configure your kindle email address first..."
msgstr "Veuillez configurer votre adresse kindle d'abord..."
-#: cps/web.py:1357
+#: cps/web.py:1369
#, python-format
msgid "Book has been added to shelf: %(sname)s"
msgstr "Le livre a bien été ajouté à l'étagère : %(sname)s"
-#: cps/web.py:1378
+#: cps/web.py:1390
#, python-format
msgid "Book has been removed from shelf: %(sname)s"
msgstr "Le livre a été supprimé de l'étagère %(sname)s"
-#: cps/web.py:1397 cps/web.py:1421
+#: cps/web.py:1409 cps/web.py:1433
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr "Une étagère de ce nom '%(title)s' existe déjà."
-#: cps/web.py:1402
+#: cps/web.py:1414
#, python-format
msgid "Shelf %(title)s created"
msgstr "Étagère %(title)s créée"
-#: cps/web.py:1404 cps/web.py:1432
+#: cps/web.py:1416 cps/web.py:1444
msgid "There was an error"
msgstr "Il y a eu une erreur"
-#: cps/web.py:1405 cps/web.py:1407
+#: cps/web.py:1417 cps/web.py:1419
msgid "create a shelf"
msgstr "Créer une étagère"
-#: cps/web.py:1430
+#: cps/web.py:1442
#, python-format
msgid "Shelf %(title)s changed"
msgstr ""
-#: cps/web.py:1433 cps/web.py:1435
+#: cps/web.py:1445 cps/web.py:1447
msgid "Edit a shelf"
msgstr ""
-#: cps/web.py:1453
+#: cps/web.py:1465
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr "L'étagère %(name)s a été supprimé avec succès"
-#: cps/web.py:1475
+#: cps/web.py:1487
#, python-format
msgid "Shelf: '%(name)s'"
msgstr "Étagère : '%(name)s'"
-#: cps/web.py:1506
+#: cps/web.py:1518
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr ""
-#: cps/web.py:1568
+#: cps/web.py:1580
msgid "Found an existing account for this email address."
msgstr "Un compte avec cette adresse de courriel existe déjà."
-#: cps/web.py:1570 cps/web.py:1574
+#: cps/web.py:1582 cps/web.py:1586
#, python-format
msgid "%(name)s's profile"
msgstr "Profil de %(name)s"
-#: cps/web.py:1571
+#: cps/web.py:1583
msgid "Profile updated"
msgstr "Profil mis à jour"
-#: cps/web.py:1584
+#: cps/web.py:1597
msgid "Admin page"
msgstr ""
-#: cps/web.py:1656
+#: cps/web.py:1668
msgid "Calibre-web configuration updated"
msgstr ""
-#: cps/web.py:1663 cps/web.py:1669 cps/web.py:1682
+#: cps/web.py:1675 cps/web.py:1681 cps/web.py:1694
msgid "Basic Configuration"
msgstr ""
-#: cps/web.py:1667
+#: cps/web.py:1679
msgid "DB location is not valid, please enter correct path"
msgstr ""
-#: cps/templates/admin.html:33 cps/web.py:1703 cps/web.py:1749
+#: cps/templates/admin.html:34 cps/web.py:1715 cps/web.py:1761
msgid "Add new user"
msgstr "Ajouter un nouvel utilisateur"
-#: cps/web.py:1741
+#: cps/web.py:1753
#, python-format
msgid "User '%(user)s' created"
msgstr "Utilisateur '%(user)s' créé"
-#: cps/web.py:1745
+#: cps/web.py:1757
msgid "Found an existing account for this email address or nickname."
msgstr "Un compte avec cette adresse de courriel ou ce surnom existe déjà."
-#: cps/web.py:1767
+#: cps/web.py:1779
msgid "Mail settings updated"
msgstr "Paramètres de courriel mis à jour"
-#: cps/web.py:1773
+#: cps/web.py:1785
#, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr ""
-#: cps/web.py:1776
+#: cps/web.py:1788
#, python-format
msgid "There was an error sending the Test E-Mail: %(res)s"
msgstr ""
-#: cps/web.py:1777
+#: cps/web.py:1789
msgid "Edit mail settings"
msgstr "Éditer les paramètres de courriel"
-#: cps/web.py:1805
+#: cps/web.py:1817
#, python-format
msgid "User '%(nick)s' deleted"
msgstr "Utilisateur '%(nick)s' supprimé"
-#: cps/web.py:1886
+#: cps/web.py:1898
#, python-format
msgid "User '%(nick)s' updated"
msgstr "Utilisateur '%(nick)s' mis à jour"
-#: cps/web.py:1889
+#: cps/web.py:1901
msgid "An unknown error occured."
msgstr "Oups ! Une erreur inconnue a eu lieu."
-#: cps/web.py:1892
+#: cps/web.py:1904
#, python-format
msgid "Edit User %(nick)s"
msgstr "Éditer l'utilisateur %(nick)s"
-#: cps/web.py:2098 cps/web.py:2101 cps/web.py:2175
+#: cps/web.py:2110 cps/web.py:2113 cps/web.py:2188
msgid "edit metadata"
msgstr ""
-#: cps/web.py:2133
+#: cps/web.py:2145
#, python-format
msgid "Failed to create path %s (Permission denied)."
msgstr "Impossible de créer le chemin %s (permission refusée)"
-#: cps/web.py:2138
+#: cps/web.py:2150
#, python-format
msgid "Failed to store file %s (Permission denied)."
msgstr "Impossible d'enregistrer le fichier %s (permission refusée)"
-#: cps/web.py:2143
+#: cps/web.py:2155
#, python-format
msgid "Failed to delete file %s (Permission denied)."
msgstr "Impossible de supprimer le fichier %s (permission refusée)"
@@ -353,145 +376,158 @@ msgstr "Impossible de supprimer le fichier %s (permission refusée)"
msgid "User list"
msgstr "Liste des ustilisateurs"
-#: cps/templates/admin.html:7
+#: cps/templates/admin.html:8
msgid "Nickname"
msgstr "Surnom"
-#: cps/templates/admin.html:8
+#: cps/templates/admin.html:9
msgid "Email"
msgstr "Courriel"
-#: cps/templates/admin.html:9
+#: cps/templates/admin.html:10
msgid "Kindle"
msgstr "Kindle"
-#: cps/templates/admin.html:10
+#: cps/templates/admin.html:11
msgid "DLS"
msgstr "DLS"
-#: cps/templates/admin.html:11 cps/templates/layout.html:83
+#: cps/templates/admin.html:12 cps/templates/layout.html:85
msgid "Admin"
msgstr "Administration"
-#: cps/templates/admin.html:12 cps/templates/detail.html:117
+#: cps/templates/admin.html:13 cps/templates/detail.html:117
msgid "Download"
msgstr "Télécharger"
-#: cps/templates/admin.html:13 cps/templates/layout.html:76
+#: cps/templates/admin.html:14 cps/templates/layout.html:78
msgid "Upload"
msgstr "Téléverser"
-#: cps/templates/admin.html:14
+#: cps/templates/admin.html:15
msgid "Edit"
msgstr "Éditer"
-#: cps/templates/admin.html:15
+#: cps/templates/admin.html:16
msgid "Passwd"
msgstr "Mot de passe"
-#: cps/templates/admin.html:34
+#: cps/templates/admin.html:35
msgid "SMTP mail settings"
msgstr "Paramètres smtp"
-#: cps/templates/admin.html:37 cps/templates/email_edit.html:7
+#: cps/templates/admin.html:38 cps/templates/email_edit.html:7
msgid "SMTP hostname"
msgstr "Serveur smtp"
-#: cps/templates/admin.html:38
+#: cps/templates/admin.html:39
msgid "SMTP port"
msgstr "Port smtp"
-#: cps/templates/admin.html:39
+#: cps/templates/admin.html:40
msgid "SSL"
msgstr "SSL"
-#: cps/templates/admin.html:40 cps/templates/email_edit.html:23
+#: cps/templates/admin.html:41 cps/templates/email_edit.html:23
msgid "SMTP login"
msgstr "Login smtp"
-#: cps/templates/admin.html:41 cps/templates/email_edit.html:27
+#: cps/templates/admin.html:42 cps/templates/email_edit.html:27
msgid "SMTP password"
msgstr "Mot de passe smtp"
-#: cps/templates/admin.html:42
+#: cps/templates/admin.html:43
msgid "From mail"
msgstr "Expéditeur des courriels"
-#: cps/templates/admin.html:54
+#: cps/templates/admin.html:55
msgid "Change SMTP settings"
msgstr "Changer les paramètre smtp"
-#: cps/templates/admin.html:56 cps/templates/admin.html:76
+#: cps/templates/admin.html:57 cps/templates/admin.html:77
msgid "Configuration"
msgstr ""
-#: cps/templates/admin.html:59
+#: cps/templates/admin.html:60
msgid "Calibre DB dir"
msgstr ""
-#: cps/templates/admin.html:60 cps/templates/config_edit.html:32
+#: cps/templates/admin.html:61 cps/templates/config_edit.html:32
msgid "Log Level"
msgstr ""
-#: cps/templates/admin.html:61
+#: cps/templates/admin.html:62
msgid "Port"
msgstr ""
-#: cps/templates/admin.html:62 cps/templates/config_edit.html:19
+#: cps/templates/admin.html:63 cps/templates/config_edit.html:19
msgid "Books per page"
msgstr ""
-#: cps/templates/admin.html:63
+#: cps/templates/admin.html:64
msgid "Uploading"
msgstr ""
-#: cps/templates/admin.html:64
+#: cps/templates/admin.html:65
msgid "Public registration"
msgstr ""
-#: cps/templates/admin.html:65
+#: cps/templates/admin.html:66
msgid "Anonymous browsing"
msgstr ""
-#: cps/templates/admin.html:77
+#: cps/templates/admin.html:78
msgid "Administration"
msgstr ""
-#: cps/templates/admin.html:79
-msgid "Restart Calibre-web"
-msgstr ""
-
#: cps/templates/admin.html:80
-msgid "Stop Calibre-web"
+msgid "Current commit timestamp"
msgstr ""
#: cps/templates/admin.html:81
+msgid "Newest commit timestamp"
+msgstr ""
+
+#: cps/templates/admin.html:83
+msgid "Restart Calibre-web"
+msgstr ""
+
+#: cps/templates/admin.html:84
+msgid "Stop Calibre-web"
+msgstr ""
+
+#: cps/templates/admin.html:85
msgid "Check for update"
msgstr ""
-#: cps/templates/admin.html:82
+#: cps/templates/admin.html:86
msgid "Perform Update"
msgstr ""
-#: cps/templates/admin.html:93
+#: cps/templates/admin.html:96
msgid "Do you really want to restart Calibre-web?"
msgstr ""
-#: cps/templates/admin.html:94 cps/templates/admin.html:109
+#: cps/templates/admin.html:101 cps/templates/admin.html:115
+#: cps/templates/admin.html:136
msgid "Ok"
msgstr ""
-#: cps/templates/admin.html:95 cps/templates/admin.html:110
+#: cps/templates/admin.html:102 cps/templates/admin.html:116
#: cps/templates/book_edit.html:108 cps/templates/config_edit.html:75
#: cps/templates/email_edit.html:36 cps/templates/shelf_edit.html:17
#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:111
msgid "Back"
msgstr "Retour"
-#: cps/templates/admin.html:108
+#: cps/templates/admin.html:114
msgid "Do you really want to stop Calibre-web?"
msgstr ""
+#: cps/templates/admin.html:127
+msgid "Updating, please do not reload page"
+msgstr ""
+
#: cps/templates/book_edit.html:16 cps/templates/search_form.html:6
msgid "Book Title"
msgstr "Titre du livre"
@@ -508,7 +544,7 @@ msgstr "Description"
msgid "Tags"
msgstr "Étiquette"
-#: cps/templates/book_edit.html:33 cps/templates/layout.html:136
+#: cps/templates/book_edit.html:33 cps/templates/layout.html:138
#: cps/templates/search_form.html:33
msgid "Series"
msgstr "Séries"
@@ -603,7 +639,7 @@ msgstr "Permettre l'édition"
msgid "Allow Changing Password"
msgstr "Permettre le changement de mot de passe"
-#: cps/templates/config_edit.html:78 cps/templates/layout.html:91
+#: cps/templates/config_edit.html:78 cps/templates/layout.html:93
#: cps/templates/login.html:4
msgid "Login"
msgstr "Connexion"
@@ -684,11 +720,11 @@ msgstr "Découverte (livres au hasard)"
msgid "Start"
msgstr "Démarrer"
-#: cps/templates/index.xml:7 cps/templates/layout.html:61
+#: cps/templates/index.xml:7 cps/templates/layout.html:58
msgid "Search"
msgstr "Chercher"
-#: cps/templates/index.xml:15 cps/templates/layout.html:124
+#: cps/templates/index.xml:15 cps/templates/layout.html:126
msgid "Hot Books"
msgstr "Livres populaires"
@@ -696,7 +732,7 @@ msgstr "Livres populaires"
msgid "Popular publications from this catalog based on Downloads."
msgstr ""
-#: cps/templates/index.xml:22 cps/templates/layout.html:127
+#: cps/templates/index.xml:22 cps/templates/layout.html:129
msgid "Best rated Books"
msgstr ""
@@ -704,7 +740,7 @@ msgstr ""
msgid "Popular publications from this catalog based on Rating."
msgstr "Publications populaires de ce catalogue sur la base de notes."
-#: cps/templates/index.xml:29 cps/templates/layout.html:122
+#: cps/templates/index.xml:29 cps/templates/layout.html:124
msgid "New Books"
msgstr "Nouveaux livres"
@@ -716,7 +752,7 @@ msgstr "Les derniers livres"
msgid "Show Random Books"
msgstr "Montrer des livres au hasard"
-#: cps/templates/index.xml:43 cps/templates/layout.html:138
+#: cps/templates/index.xml:43 cps/templates/layout.html:140
msgid "Authors"
msgstr "Auteurs"
@@ -736,51 +772,51 @@ msgstr "Livres classés par série"
msgid "Toggle navigation"
msgstr "Basculer la navigation"
-#: cps/templates/layout.html:63
+#: cps/templates/layout.html:60
msgid "Go!"
msgstr "Allez !"
-#: cps/templates/layout.html:66
+#: cps/templates/layout.html:68
msgid "Advanced Search"
msgstr "Recherche avancée"
-#: cps/templates/layout.html:87
+#: cps/templates/layout.html:89
msgid "Logout"
msgstr "Déconnexion"
-#: cps/templates/layout.html:92 cps/templates/register.html:18
+#: cps/templates/layout.html:94 cps/templates/register.html:18
msgid "Register"
msgstr "S'enregistrer"
-#: cps/templates/layout.html:121
+#: cps/templates/layout.html:123
msgid "Browse"
msgstr "Explorer"
-#: cps/templates/layout.html:130
+#: cps/templates/layout.html:132
msgid "Discover"
msgstr "Découvrir"
-#: cps/templates/layout.html:133
+#: cps/templates/layout.html:135
msgid "Categories"
msgstr "Catégories"
-#: cps/templates/layout.html:140 cps/templates/search_form.html:54
+#: cps/templates/layout.html:142 cps/templates/search_form.html:54
msgid "Languages"
msgstr "Langues"
-#: cps/templates/layout.html:143
+#: cps/templates/layout.html:145
msgid "Public Shelves"
msgstr "Étagères publiques"
-#: cps/templates/layout.html:147
+#: cps/templates/layout.html:149
msgid "Your Shelves"
msgstr "Vos étagères"
-#: cps/templates/layout.html:152
+#: cps/templates/layout.html:154
msgid "Create a Shelf"
msgstr "Créer une étagère"
-#: cps/templates/layout.html:153
+#: cps/templates/layout.html:155
msgid "About"
msgstr "À popos"
@@ -799,7 +835,7 @@ msgid "Remember me"
msgstr "Se rappeler de moi"
#: cps/templates/osd.xml:5
-msgid "instanceCalibre Web ebook catalog"
+msgid "Calibre Web ebook catalog"
msgstr ""
#: cps/templates/read.html:136
diff --git a/cps/translations/pl/LC_MESSAGES/messages.mo b/cps/translations/pl/LC_MESSAGES/messages.mo
index 3c5e3ab7..747a9970 100644
Binary files a/cps/translations/pl/LC_MESSAGES/messages.mo and b/cps/translations/pl/LC_MESSAGES/messages.mo differ
diff --git a/cps/translations/pl/LC_MESSAGES/messages.po b/cps/translations/pl/LC_MESSAGES/messages.po
index ff0e2170..6257519c 100644
--- a/cps/translations/pl/LC_MESSAGES/messages.po
+++ b/cps/translations/pl/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre Web - polski (170210.2017)\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2017-02-12 08:13+0100\n"
+"POT-Creation-Date: 2017-02-20 19:47+0100\n"
"PO-Revision-Date: 2017-02-11 15:56+0100\n"
"Last-Translator: Radosław Kierznowski \n"
"Language: pl\n"
@@ -20,318 +20,343 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
-#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:998
+#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:1030
msgid "not installed"
msgstr "nie zainstalowane"
-#: cps/helper.py:136
+#: cps/helper.py:150
#, python-format
msgid "Failed to send mail: %s"
msgstr "Nie można wysłać poczty: %s"
-#: cps/helper.py:143
+#: cps/helper.py:157
msgid "Calibre-web test email"
msgstr "Calibre-web testowy email"
-#: cps/helper.py:144 cps/helper.py:154
+#: cps/helper.py:158 cps/helper.py:168
msgid "This email has been sent via calibre web."
msgstr "Ten e-mail został wysłany za pośrednictwem calibre web."
-#: cps/helper.py:153 cps/templates/detail.html:130
+#: cps/helper.py:167 cps/templates/detail.html:130
msgid "Send to Kindle"
msgstr "Wyślij do Kindle"
-#: cps/helper.py:171 cps/helper.py:186
+#: cps/helper.py:185 cps/helper.py:200
msgid "Could not find any formats suitable for sending by email"
msgstr ""
"Nie można znaleźć żadnych formatów przystosowane do wysyłania pocztą "
"e-mail"
-#: cps/helper.py:180
+#: cps/helper.py:194
msgid "Could not convert epub to mobi"
msgstr "Nie można konwertować epub do mobi"
-#: cps/helper.py:206
-msgid "The requested file could not be read. Maybe wrong permissions?"
-msgstr "Żądany plik nie może być odczytany. Może złe uprawnienia?"
-
-#: cps/ub.py:443
+#: cps/ub.py:434
msgid "Guest"
msgstr "Gość"
-#: cps/web.py:778
+#: cps/web.py:734
+msgid "Requesting update package"
+msgstr ""
+
+#: cps/web.py:735
+msgid "Downloading update package"
+msgstr ""
+
+#: cps/web.py:736
+msgid "Unzipping update package"
+msgstr ""
+
+#: cps/web.py:737
+msgid "Files are replaced"
+msgstr ""
+
+#: cps/web.py:738
+msgid "Database connections are closed"
+msgstr ""
+
+#: cps/web.py:739
+msgid "Server is stopped"
+msgstr ""
+
+#: cps/web.py:740
+msgid "Update finished, please press okay and reload page"
+msgstr ""
+
+#: cps/web.py:810
msgid "Latest Books"
msgstr "Najnowsze książki"
-#: cps/web.py:803
+#: cps/web.py:835
msgid "Hot Books (most downloaded)"
msgstr "Najpopularniejsze książki (najczęściej pobierane)"
-#: cps/web.py:813
+#: cps/web.py:845
msgid "Best rated books"
msgstr "Najlepiej oceniane książki"
-#: cps/templates/index.xml:36 cps/web.py:822
+#: cps/templates/index.xml:36 cps/web.py:854
msgid "Random Books"
msgstr "Losowe książki"
-#: cps/web.py:835
+#: cps/web.py:867
msgid "Author list"
msgstr "Lista autorów"
-#: cps/web.py:846
+#: cps/web.py:878
#, python-format
msgid "Author: %(name)s"
msgstr "Autor: %(name)s"
-#: cps/web.py:848 cps/web.py:876 cps/web.py:975 cps/web.py:1216 cps/web.py:2103
+#: cps/web.py:880 cps/web.py:908 cps/web.py:1007 cps/web.py:1235
+#: cps/web.py:2115
msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "Błąd otwierania e-booka. Plik nie istnieje lub plik nie jest dostępny:"
-#: cps/templates/index.xml:57 cps/web.py:862
+#: cps/templates/index.xml:57 cps/web.py:894
msgid "Series list"
msgstr "Lista serii"
-#: cps/web.py:874
+#: cps/web.py:906
#, python-format
msgid "Series: %(serie)s"
msgstr "Serie: %(serie)s"
-#: cps/web.py:907
+#: cps/web.py:939
msgid "Available languages"
msgstr "Dostępne języki"
-#: cps/web.py:922
+#: cps/web.py:954
#, python-format
msgid "Language: %(name)s"
msgstr "Język: %(name)s"
-#: cps/templates/index.xml:50 cps/web.py:935
+#: cps/templates/index.xml:50 cps/web.py:967
msgid "Category list"
msgstr "Lista kategorii"
-#: cps/web.py:947
+#: cps/web.py:979
#, python-format
msgid "Category: %(name)s"
msgstr "Kategoria: %(name)s"
-#: cps/web.py:1008
+#: cps/web.py:1040
msgid "Statistics"
msgstr "Statystyki"
-#: cps/web.py:1029
-msgid "Performing Restart, please reload page"
-msgstr "Wykonano ponowne uruchomienie, proszę odświeżyć stronę"
+#: cps/web.py:1061
+msgid "Server restarted, please reload page"
+msgstr ""
-#: cps/web.py:1031
+#: cps/web.py:1063
msgid "Performing shutdown of server, please close window"
msgstr "Wykonano wyłączenie serwera, proszę zamknąć okno"
-#: cps/web.py:1055
+#: cps/web.py:1073
msgid "Update done"
msgstr "Aktualizacja zakończona"
-#: cps/web.py:1128 cps/web.py:1141
+#: cps/web.py:1147 cps/web.py:1160
msgid "search"
msgstr "szukaj"
-#: cps/web.py:1192 cps/web.py:1199 cps/web.py:1206 cps/web.py:1213
+#: cps/web.py:1211 cps/web.py:1218 cps/web.py:1225 cps/web.py:1232
msgid "Read a Book"
msgstr "Czytaj książkę"
-#: cps/web.py:1264 cps/web.py:1701
+#: cps/web.py:1276 cps/web.py:1713
msgid "Please fill out all fields!"
msgstr "Proszę wypełnić wszystkie pola!"
-#: cps/web.py:1265 cps/web.py:1281 cps/web.py:1286 cps/web.py:1288
+#: cps/web.py:1277 cps/web.py:1293 cps/web.py:1298 cps/web.py:1300
msgid "register"
msgstr "rejestracja"
-#: cps/web.py:1280
+#: cps/web.py:1292
msgid "An unknown error occured. Please try again later."
msgstr "Wystąpił nieznany błąd. Spróbuj ponownie później."
-#: cps/web.py:1285
+#: cps/web.py:1297
msgid "This username or email address is already in use."
msgstr "Nazwa użytkownika lub adres e-mail jest już w użyciu."
-#: cps/web.py:1303
+#: cps/web.py:1315
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr "Zalogowałeś się jako: '%(nickname)s'"
-#: cps/web.py:1308
+#: cps/web.py:1320
msgid "Wrong Username or Password"
msgstr "Błędna nazwa użytkownika lub hasło"
-#: cps/web.py:1310
+#: cps/web.py:1322
msgid "login"
msgstr "logowanie"
-#: cps/web.py:1327
+#: cps/web.py:1339
msgid "Please configure the SMTP mail settings first..."
msgstr "Proszę najpierw skonfigurować ustawienia SMTP poczty e-mail..."
-#: cps/web.py:1331
+#: cps/web.py:1343
#, python-format
msgid "Book successfully send to %(kindlemail)s"
msgstr "Książka została pomyślnie wysłana do %(kindlemail)s"
-#: cps/web.py:1335
+#: cps/web.py:1347
#, python-format
msgid "There was an error sending this book: %(res)s"
msgstr "Wystąpił błąd podczas wysyłania tej książki: %(res)s"
-#: cps/web.py:1337
+#: cps/web.py:1349
msgid "Please configure your kindle email address first..."
msgstr "Proszę najpierw skonfigurować adres e-mail swojego kindla..."
-#: cps/web.py:1357
+#: cps/web.py:1369
#, python-format
msgid "Book has been added to shelf: %(sname)s"
msgstr "Książka została dodana do półki: %(sname)s"
-#: cps/web.py:1378
+#: cps/web.py:1390
#, python-format
msgid "Book has been removed from shelf: %(sname)s"
msgstr "Książka została usunięta z półki: %(sname)s"
-#: cps/web.py:1397 cps/web.py:1421
+#: cps/web.py:1409 cps/web.py:1433
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr "Półka o nazwie '%(title)s' już istnieje."
-#: cps/web.py:1402
+#: cps/web.py:1414
#, python-format
msgid "Shelf %(title)s created"
msgstr "Półka %(title)s została utworzona"
-#: cps/web.py:1404 cps/web.py:1432
+#: cps/web.py:1416 cps/web.py:1444
msgid "There was an error"
msgstr "Wystąpił błąd"
-#: cps/web.py:1405 cps/web.py:1407
+#: cps/web.py:1417 cps/web.py:1419
msgid "create a shelf"
msgstr "utwórz półkę"
-#: cps/web.py:1430
+#: cps/web.py:1442
#, python-format
msgid "Shelf %(title)s changed"
msgstr "Półka %(title)s została zmieniona"
-#: cps/web.py:1433 cps/web.py:1435
+#: cps/web.py:1445 cps/web.py:1447
msgid "Edit a shelf"
msgstr "Edytuj półkę"
-#: cps/web.py:1453
+#: cps/web.py:1465
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr "pomyślnie usunięto półkę %(name)s"
-#: cps/web.py:1475
+#: cps/web.py:1487
#, python-format
msgid "Shelf: '%(name)s'"
msgstr "Półka: '%(name)s'"
-#: cps/web.py:1506
+#: cps/web.py:1518
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr "Zmieniono kolejność półki: '%(name)s'"
-#: cps/web.py:1568
+#: cps/web.py:1580
msgid "Found an existing account for this email address."
msgstr "Znaleziono istniejące konto dla tego adresu e-mail."
-#: cps/web.py:1570 cps/web.py:1574
+#: cps/web.py:1582 cps/web.py:1586
#, python-format
msgid "%(name)s's profile"
msgstr "Profil użytkownika %(name)s"
-#: cps/web.py:1571
+#: cps/web.py:1583
msgid "Profile updated"
msgstr "Zaktualizowano profil"
-#: cps/web.py:1584
+#: cps/web.py:1597
msgid "Admin page"
msgstr "Portal administracyjny"
-#: cps/web.py:1656
+#: cps/web.py:1668
msgid "Calibre-web configuration updated"
msgstr "Konfiguracja Calibre-web została zaktualizowana"
-#: cps/web.py:1663 cps/web.py:1669 cps/web.py:1682
+#: cps/web.py:1675 cps/web.py:1681 cps/web.py:1694
msgid "Basic Configuration"
msgstr "Podstawowa konfiguracja"
-#: cps/web.py:1667
+#: cps/web.py:1679
msgid "DB location is not valid, please enter correct path"
msgstr "Lokalizacja bazy danych nie jest prawidłowa, wpisz poprawną ścieżkę"
-#: cps/templates/admin.html:33 cps/web.py:1703 cps/web.py:1749
+#: cps/templates/admin.html:34 cps/web.py:1715 cps/web.py:1761
msgid "Add new user"
msgstr "Dodaj nowego użytkownika"
-#: cps/web.py:1741
+#: cps/web.py:1753
#, python-format
msgid "User '%(user)s' created"
msgstr "Użytkownik '%(user)s' został utworzony"
-#: cps/web.py:1745
+#: cps/web.py:1757
msgid "Found an existing account for this email address or nickname."
msgstr "Znaleziono istniejące konto dla tego adresu e-mail lub nazwy użytkownika."
-#: cps/web.py:1767
+#: cps/web.py:1779
msgid "Mail settings updated"
msgstr "Zaktualizowano ustawienia poczty e-mail"
-#: cps/web.py:1773
+#: cps/web.py:1785
#, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr "Testowy e-mail pomyślnie wysłany do %(kindlemail)s"
-#: cps/web.py:1776
+#: cps/web.py:1788
#, python-format
msgid "There was an error sending the Test E-Mail: %(res)s"
msgstr "Wystąpił błąd podczas wysyłania testowej wiadomości e-mail: %(res)s"
-#: cps/web.py:1777
+#: cps/web.py:1789
msgid "Edit mail settings"
msgstr "Edytuj ustawienia poczty e-mail"
-#: cps/web.py:1805
+#: cps/web.py:1817
#, python-format
msgid "User '%(nick)s' deleted"
msgstr "Użytkownik '%(nick)s' został usunięty"
-#: cps/web.py:1886
+#: cps/web.py:1898
#, python-format
msgid "User '%(nick)s' updated"
msgstr "Użytkownik '%(nick)s' został zaktualizowany"
-#: cps/web.py:1889
+#: cps/web.py:1901
msgid "An unknown error occured."
msgstr "Wystąpił nieznany błąd."
-#: cps/web.py:1892
+#: cps/web.py:1904
#, python-format
msgid "Edit User %(nick)s"
msgstr "Edytuj użytkownika %(nick)s"
-#: cps/web.py:2098 cps/web.py:2101 cps/web.py:2175
+#: cps/web.py:2110 cps/web.py:2113 cps/web.py:2188
msgid "edit metadata"
msgstr "edytuj metadane"
-#: cps/web.py:2133
+#: cps/web.py:2145
#, python-format
msgid "Failed to create path %s (Permission denied)."
msgstr "Nie udało się utworzyć łącza %s (Odmowa dostępu)."
-#: cps/web.py:2138
+#: cps/web.py:2150
#, python-format
msgid "Failed to store file %s (Permission denied)."
msgstr "Nie można przechowywać pliku %s (Odmowa dostępu)."
-#: cps/web.py:2143
+#: cps/web.py:2155
#, python-format
msgid "Failed to delete file %s (Permission denied)."
msgstr "Nie udało się usunąć pliku %s (Odmowa dostępu)."
@@ -340,145 +365,158 @@ msgstr "Nie udało się usunąć pliku %s (Odmowa dostępu)."
msgid "User list"
msgstr "Lista użytkowników"
-#: cps/templates/admin.html:7
+#: cps/templates/admin.html:8
msgid "Nickname"
msgstr "Nazwa użytkownika"
-#: cps/templates/admin.html:8
+#: cps/templates/admin.html:9
msgid "Email"
msgstr "Email"
-#: cps/templates/admin.html:9
+#: cps/templates/admin.html:10
msgid "Kindle"
msgstr "Kindle"
-#: cps/templates/admin.html:10
+#: cps/templates/admin.html:11
msgid "DLS"
msgstr "DLS"
-#: cps/templates/admin.html:11 cps/templates/layout.html:83
+#: cps/templates/admin.html:12 cps/templates/layout.html:85
msgid "Admin"
msgstr "Portal administracyjny"
-#: cps/templates/admin.html:12 cps/templates/detail.html:117
+#: cps/templates/admin.html:13 cps/templates/detail.html:117
msgid "Download"
msgstr "Pobierz"
-#: cps/templates/admin.html:13 cps/templates/layout.html:76
+#: cps/templates/admin.html:14 cps/templates/layout.html:78
msgid "Upload"
msgstr "Wyślij"
-#: cps/templates/admin.html:14
+#: cps/templates/admin.html:15
msgid "Edit"
msgstr "Edycja"
-#: cps/templates/admin.html:15
+#: cps/templates/admin.html:16
msgid "Passwd"
msgstr "Zmiana hasła"
-#: cps/templates/admin.html:34
+#: cps/templates/admin.html:35
msgid "SMTP mail settings"
msgstr "Ustawienia poczty SMTP"
-#: cps/templates/admin.html:37 cps/templates/email_edit.html:7
+#: cps/templates/admin.html:38 cps/templates/email_edit.html:7
msgid "SMTP hostname"
msgstr "Adres serwera SMTP"
-#: cps/templates/admin.html:38
+#: cps/templates/admin.html:39
msgid "SMTP port"
msgstr "Port serwera SMTP"
-#: cps/templates/admin.html:39
+#: cps/templates/admin.html:40
msgid "SSL"
msgstr "SSL"
-#: cps/templates/admin.html:40 cps/templates/email_edit.html:23
+#: cps/templates/admin.html:41 cps/templates/email_edit.html:23
msgid "SMTP login"
msgstr "Nazwa użytkownika SMTP"
-#: cps/templates/admin.html:41 cps/templates/email_edit.html:27
+#: cps/templates/admin.html:42 cps/templates/email_edit.html:27
msgid "SMTP password"
msgstr "Hasło SMTP"
-#: cps/templates/admin.html:42
+#: cps/templates/admin.html:43
msgid "From mail"
msgstr "Wyślij z adresu e-mail"
-#: cps/templates/admin.html:54
+#: cps/templates/admin.html:55
msgid "Change SMTP settings"
msgstr "Zmień ustawienia SMTP"
-#: cps/templates/admin.html:56 cps/templates/admin.html:76
+#: cps/templates/admin.html:57 cps/templates/admin.html:77
msgid "Configuration"
msgstr "Konfiguracja"
-#: cps/templates/admin.html:59
+#: cps/templates/admin.html:60
msgid "Calibre DB dir"
msgstr "Folder bazy danych Calibre"
-#: cps/templates/admin.html:60 cps/templates/config_edit.html:32
+#: cps/templates/admin.html:61 cps/templates/config_edit.html:32
msgid "Log Level"
msgstr "Poziom logów"
-#: cps/templates/admin.html:61
+#: cps/templates/admin.html:62
msgid "Port"
msgstr "Port"
-#: cps/templates/admin.html:62 cps/templates/config_edit.html:19
+#: cps/templates/admin.html:63 cps/templates/config_edit.html:19
msgid "Books per page"
msgstr "Ilość książek na stronie"
-#: cps/templates/admin.html:63
+#: cps/templates/admin.html:64
msgid "Uploading"
msgstr "Wysyłanie"
-#: cps/templates/admin.html:64
+#: cps/templates/admin.html:65
msgid "Public registration"
msgstr "Publiczna rejestracja"
-#: cps/templates/admin.html:65
+#: cps/templates/admin.html:66
msgid "Anonymous browsing"
msgstr "Anonimowe przeglądanie"
-#: cps/templates/admin.html:77
+#: cps/templates/admin.html:78
msgid "Administration"
msgstr "Zarządzanie"
-#: cps/templates/admin.html:79
+#: cps/templates/admin.html:80
+msgid "Current commit timestamp"
+msgstr ""
+
+#: cps/templates/admin.html:81
+msgid "Newest commit timestamp"
+msgstr ""
+
+#: cps/templates/admin.html:83
msgid "Restart Calibre-web"
msgstr "Uruchom ponownie Calibre-web"
-#: cps/templates/admin.html:80
+#: cps/templates/admin.html:84
msgid "Stop Calibre-web"
msgstr "Zatrzymaj Calibre-web"
-#: cps/templates/admin.html:81
+#: cps/templates/admin.html:85
msgid "Check for update"
msgstr "Sprawdź aktualizacje"
-#: cps/templates/admin.html:82
+#: cps/templates/admin.html:86
msgid "Perform Update"
msgstr "Wykonaj aktualizację"
-#: cps/templates/admin.html:93
+#: cps/templates/admin.html:96
msgid "Do you really want to restart Calibre-web?"
msgstr "Na pewno chcesz uruchomić ponownie Calibre-web?"
-#: cps/templates/admin.html:94 cps/templates/admin.html:109
+#: cps/templates/admin.html:101 cps/templates/admin.html:115
+#: cps/templates/admin.html:136
msgid "Ok"
msgstr "Ok"
-#: cps/templates/admin.html:95 cps/templates/admin.html:110
+#: cps/templates/admin.html:102 cps/templates/admin.html:116
#: cps/templates/book_edit.html:108 cps/templates/config_edit.html:75
#: cps/templates/email_edit.html:36 cps/templates/shelf_edit.html:17
#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:111
msgid "Back"
msgstr "Wróć"
-#: cps/templates/admin.html:108
+#: cps/templates/admin.html:114
msgid "Do you really want to stop Calibre-web?"
msgstr "Na pewno chcesz zatrzymać Calibre-web?"
+#: cps/templates/admin.html:127
+msgid "Updating, please do not reload page"
+msgstr ""
+
#: cps/templates/book_edit.html:16 cps/templates/search_form.html:6
msgid "Book Title"
msgstr "Tytuł książki"
@@ -495,7 +533,7 @@ msgstr "Opis"
msgid "Tags"
msgstr "Tagi"
-#: cps/templates/book_edit.html:33 cps/templates/layout.html:136
+#: cps/templates/book_edit.html:33 cps/templates/layout.html:138
#: cps/templates/search_form.html:33
msgid "Series"
msgstr "Serie"
@@ -590,7 +628,7 @@ msgstr "Zezwalaj na edycję"
msgid "Allow Changing Password"
msgstr "Zezwalaj na zmianę hasła"
-#: cps/templates/config_edit.html:78 cps/templates/layout.html:91
+#: cps/templates/config_edit.html:78 cps/templates/layout.html:93
#: cps/templates/login.html:4
msgid "Login"
msgstr "Zaloguj się"
@@ -673,11 +711,11 @@ msgstr "Odkrywaj (losowe książki)"
msgid "Start"
msgstr "Rozpocznij"
-#: cps/templates/index.xml:7 cps/templates/layout.html:61
+#: cps/templates/index.xml:7 cps/templates/layout.html:58
msgid "Search"
msgstr "Szukaj"
-#: cps/templates/index.xml:15 cps/templates/layout.html:124
+#: cps/templates/index.xml:15 cps/templates/layout.html:126
msgid "Hot Books"
msgstr "Najpopularniejsze książki"
@@ -685,7 +723,7 @@ msgstr "Najpopularniejsze książki"
msgid "Popular publications from this catalog based on Downloads."
msgstr "Popularne publikacje z tego katalogu bazujące na pobieraniach."
-#: cps/templates/index.xml:22 cps/templates/layout.html:127
+#: cps/templates/index.xml:22 cps/templates/layout.html:129
msgid "Best rated Books"
msgstr "Najlepiej ocenione książki"
@@ -693,7 +731,7 @@ msgstr "Najlepiej ocenione książki"
msgid "Popular publications from this catalog based on Rating."
msgstr "Popularne publikacje z tego katalogu bazujące na ocenach."
-#: cps/templates/index.xml:29 cps/templates/layout.html:122
+#: cps/templates/index.xml:29 cps/templates/layout.html:124
msgid "New Books"
msgstr "Nowe książki"
@@ -705,7 +743,7 @@ msgstr "Ostatnie książki"
msgid "Show Random Books"
msgstr "Pokazuj losowe książki"
-#: cps/templates/index.xml:43 cps/templates/layout.html:138
+#: cps/templates/index.xml:43 cps/templates/layout.html:140
msgid "Authors"
msgstr "Autorzy"
@@ -725,51 +763,51 @@ msgstr "Książki sortowane według serii"
msgid "Toggle navigation"
msgstr "Przełącz nawigację"
-#: cps/templates/layout.html:63
+#: cps/templates/layout.html:60
msgid "Go!"
msgstr "Idź!"
-#: cps/templates/layout.html:66
+#: cps/templates/layout.html:68
msgid "Advanced Search"
msgstr "Zaawansowane wyszukiwanie"
-#: cps/templates/layout.html:87
+#: cps/templates/layout.html:89
msgid "Logout"
msgstr "Wyloguj się"
-#: cps/templates/layout.html:92 cps/templates/register.html:18
+#: cps/templates/layout.html:94 cps/templates/register.html:18
msgid "Register"
msgstr "Zarejestruj się"
-#: cps/templates/layout.html:121
+#: cps/templates/layout.html:123
msgid "Browse"
msgstr "Przeglądaj"
-#: cps/templates/layout.html:130
+#: cps/templates/layout.html:132
msgid "Discover"
msgstr "Odkrywaj"
-#: cps/templates/layout.html:133
+#: cps/templates/layout.html:135
msgid "Categories"
msgstr "Kategorie"
-#: cps/templates/layout.html:140 cps/templates/search_form.html:54
+#: cps/templates/layout.html:142 cps/templates/search_form.html:54
msgid "Languages"
msgstr "Języki"
-#: cps/templates/layout.html:143
+#: cps/templates/layout.html:145
msgid "Public Shelves"
msgstr "Publiczne półki"
-#: cps/templates/layout.html:147
+#: cps/templates/layout.html:149
msgid "Your Shelves"
msgstr "Twoje półki"
-#: cps/templates/layout.html:152
+#: cps/templates/layout.html:154
msgid "Create a Shelf"
msgstr "Utwórz półkę"
-#: cps/templates/layout.html:153
+#: cps/templates/layout.html:155
msgid "About"
msgstr "O programie"
@@ -788,7 +826,7 @@ msgid "Remember me"
msgstr "Zapamiętaj mnie"
#: cps/templates/osd.xml:5
-msgid "instanceCalibre Web ebook catalog"
+msgid "Calibre Web ebook catalog"
msgstr ""
#: cps/templates/read.html:136
diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo
index 65d2954f..d3a83c0d 100644
Binary files a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo and b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo differ
diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po
index bfabdbe5..5356f3b2 100644
--- a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po
+++ b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po
@@ -15,7 +15,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n"
-"POT-Creation-Date: 2017-02-10 20:17+0100\n"
+"POT-Creation-Date: 2017-02-20 19:47+0100\n"
"PO-Revision-Date: 2017-01-06 17:00+0000\n"
"Last-Translator: dalin \n"
"Language: zh_Hans_CN\n"
@@ -26,316 +26,341 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
-#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:998
+#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:1030
msgid "not installed"
msgstr "未安装"
-#: cps/helper.py:136
+#: cps/helper.py:150
#, python-format
msgid "Failed to send mail: %s"
msgstr "发送邮件失败: %s"
-#: cps/helper.py:143
+#: cps/helper.py:157
msgid "Calibre-web test email"
msgstr "Calibre-web 测试邮件"
-#: cps/helper.py:144 cps/helper.py:154
+#: cps/helper.py:158 cps/helper.py:168
msgid "This email has been sent via calibre web."
msgstr "此邮件由calibre web发送"
-#: cps/helper.py:153 cps/templates/detail.html:130
+#: cps/helper.py:167 cps/templates/detail.html:130
msgid "Send to Kindle"
msgstr "发送到Kindle"
-#: cps/helper.py:171 cps/helper.py:186
+#: cps/helper.py:185 cps/helper.py:200
msgid "Could not find any formats suitable for sending by email"
msgstr "无法找到适合邮件发送的格式"
-#: cps/helper.py:180
+#: cps/helper.py:194
msgid "Could not convert epub to mobi"
msgstr "无法转换epub到mobi"
-#: cps/helper.py:206
-msgid "The requested file could not be read. Maybe wrong permissions?"
-msgstr "无法读取所请求的文件。可能是错误权限不对?"
-
-#: cps/ub.py:443
+#: cps/ub.py:434
msgid "Guest"
msgstr "游客"
-#: cps/web.py:778
+#: cps/web.py:734
+msgid "Requesting update package"
+msgstr ""
+
+#: cps/web.py:735
+msgid "Downloading update package"
+msgstr ""
+
+#: cps/web.py:736
+msgid "Unzipping update package"
+msgstr ""
+
+#: cps/web.py:737
+msgid "Files are replaced"
+msgstr ""
+
+#: cps/web.py:738
+msgid "Database connections are closed"
+msgstr ""
+
+#: cps/web.py:739
+msgid "Server is stopped"
+msgstr ""
+
+#: cps/web.py:740
+msgid "Update finished, please press okay and reload page"
+msgstr ""
+
+#: cps/web.py:810
msgid "Latest Books"
msgstr "最新书籍"
-#: cps/web.py:803
+#: cps/web.py:835
msgid "Hot Books (most downloaded)"
msgstr "热门书籍(最多下载)"
-#: cps/web.py:813
+#: cps/web.py:845
msgid "Best rated books"
-msgstr "最高评分书籍"
+msgstr ""
-#: cps/templates/index.xml:36 cps/web.py:822
+#: cps/templates/index.xml:36 cps/web.py:854
msgid "Random Books"
msgstr "随机书籍"
-#: cps/web.py:835
+#: cps/web.py:867
msgid "Author list"
msgstr "作者列表"
-#: cps/web.py:846
+#: cps/web.py:878
#, python-format
msgid "Author: %(name)s"
-msgstr "作者: %(name)s"
+msgstr ""
-#: cps/web.py:848 cps/web.py:876 cps/web.py:975 cps/web.py:1216 cps/web.py:2103
+#: cps/web.py:880 cps/web.py:908 cps/web.py:1007 cps/web.py:1235
+#: cps/web.py:2115
msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "无法打开电子书。 文件不存在或者文件不可访问:"
-#: cps/templates/index.xml:57 cps/web.py:862
+#: cps/templates/index.xml:57 cps/web.py:894
msgid "Series list"
msgstr "丛书列表"
-#: cps/web.py:874
+#: cps/web.py:906
#, python-format
msgid "Series: %(serie)s"
msgstr "丛书: %(serie)s"
-#: cps/web.py:907
+#: cps/web.py:939
msgid "Available languages"
msgstr "可用语言"
-#: cps/web.py:922
+#: cps/web.py:954
#, python-format
msgid "Language: %(name)s"
msgstr "语言: %(name)s"
-#: cps/templates/index.xml:50 cps/web.py:935
+#: cps/templates/index.xml:50 cps/web.py:967
msgid "Category list"
msgstr "分类列表"
-#: cps/web.py:947
+#: cps/web.py:979
#, python-format
msgid "Category: %(name)s"
msgstr "分类: %(name)s"
-#: cps/web.py:1008
+#: cps/web.py:1040
msgid "Statistics"
msgstr "统计"
-#: cps/web.py:1029
-msgid "Performing Restart, please reload page"
-msgstr "正在重启,请刷新页面"
+#: cps/web.py:1061
+msgid "Server restarted, please reload page"
+msgstr ""
-#: cps/web.py:1031
+#: cps/web.py:1063
msgid "Performing shutdown of server, please close window"
msgstr "正在关闭服务器,请关闭窗口"
-#: cps/web.py:1055
+#: cps/web.py:1073
msgid "Update done"
-msgstr "更新完成"
+msgstr ""
-#: cps/web.py:1128 cps/web.py:1141
+#: cps/web.py:1147 cps/web.py:1160
msgid "search"
msgstr "搜索"
-#: cps/web.py:1192 cps/web.py:1199 cps/web.py:1206 cps/web.py:1213
+#: cps/web.py:1211 cps/web.py:1218 cps/web.py:1225 cps/web.py:1232
msgid "Read a Book"
msgstr "阅读一本书"
-#: cps/web.py:1264 cps/web.py:1701
+#: cps/web.py:1276 cps/web.py:1713
msgid "Please fill out all fields!"
msgstr "请填写所有字段"
-#: cps/web.py:1265 cps/web.py:1281 cps/web.py:1286 cps/web.py:1288
+#: cps/web.py:1277 cps/web.py:1293 cps/web.py:1298 cps/web.py:1300
msgid "register"
msgstr "注册"
-#: cps/web.py:1280
+#: cps/web.py:1292
msgid "An unknown error occured. Please try again later."
msgstr "发生一个未知错误。请稍后再试。"
-#: cps/web.py:1285
+#: cps/web.py:1297
msgid "This username or email address is already in use."
msgstr "此用户名或邮箱已被使用。"
-#: cps/web.py:1303
+#: cps/web.py:1315
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr "您现在已以'%(nickname)s'身份登录"
-#: cps/web.py:1308
+#: cps/web.py:1320
msgid "Wrong Username or Password"
msgstr "用户名或密码错误"
-#: cps/web.py:1310
+#: cps/web.py:1322
msgid "login"
msgstr "登录"
-#: cps/web.py:1327
+#: cps/web.py:1339
msgid "Please configure the SMTP mail settings first..."
msgstr "请先配置SMTP邮箱..."
-#: cps/web.py:1331
+#: cps/web.py:1343
#, python-format
msgid "Book successfully send to %(kindlemail)s"
msgstr "此书已被成功发给 %(kindlemail)s"
-#: cps/web.py:1335
+#: cps/web.py:1347
#, python-format
msgid "There was an error sending this book: %(res)s"
msgstr "发送这本书的时候出现错误: %(res)s"
-#: cps/web.py:1337
+#: cps/web.py:1349
msgid "Please configure your kindle email address first..."
msgstr "请先配置您的kindle电子邮箱地址..."
-#: cps/web.py:1357
+#: cps/web.py:1369
#, python-format
msgid "Book has been added to shelf: %(sname)s"
msgstr "此书已被添加到书架: %(sname)s"
-#: cps/web.py:1378
+#: cps/web.py:1390
#, python-format
msgid "Book has been removed from shelf: %(sname)s"
msgstr "此书已从书架 %(sname)s 中删除"
-#: cps/web.py:1397 cps/web.py:1421
+#: cps/web.py:1409 cps/web.py:1433
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr "已存在书架 '%(title)s'。"
-#: cps/web.py:1402
+#: cps/web.py:1414
#, python-format
msgid "Shelf %(title)s created"
msgstr "书架 %(title)s 已被创建"
-#: cps/web.py:1404 cps/web.py:1432
+#: cps/web.py:1416 cps/web.py:1444
msgid "There was an error"
msgstr "发生错误"
-#: cps/web.py:1405 cps/web.py:1407
+#: cps/web.py:1417 cps/web.py:1419
msgid "create a shelf"
msgstr "创建书架"
-#: cps/web.py:1430
+#: cps/web.py:1442
#, python-format
msgid "Shelf %(title)s changed"
msgstr "书架 %(title)s 已被修改"
-#: cps/web.py:1433 cps/web.py:1435
+#: cps/web.py:1445 cps/web.py:1447
msgid "Edit a shelf"
msgstr "编辑书架"
-#: cps/web.py:1453
+#: cps/web.py:1465
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr "成功删除书架 %(name)s"
-#: cps/web.py:1475
+#: cps/web.py:1487
#, python-format
msgid "Shelf: '%(name)s'"
msgstr "书架: '%(name)s'"
-#: cps/web.py:1506
+#: cps/web.py:1518
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr "修改书架 '%(name)s' 顺序"
-#: cps/web.py:1568
+#: cps/web.py:1580
msgid "Found an existing account for this email address."
msgstr "找到已使用此邮箱的账号。"
-#: cps/web.py:1570 cps/web.py:1574
+#: cps/web.py:1582 cps/web.py:1586
#, python-format
msgid "%(name)s's profile"
msgstr "%(name)s 的资料"
-#: cps/web.py:1571
+#: cps/web.py:1583
msgid "Profile updated"
msgstr "资料已更新"
-#: cps/web.py:1584
+#: cps/web.py:1597
msgid "Admin page"
msgstr "管理页"
-#: cps/web.py:1656
+#: cps/web.py:1668
msgid "Calibre-web configuration updated"
msgstr "Calibre-web配置已更新"
-#: cps/web.py:1663 cps/web.py:1669 cps/web.py:1682
+#: cps/web.py:1675 cps/web.py:1681 cps/web.py:1694
msgid "Basic Configuration"
msgstr "基本配置"
-#: cps/web.py:1667
+#: cps/web.py:1679
msgid "DB location is not valid, please enter correct path"
msgstr "DB位置无效,请输入正确路径"
-#: cps/templates/admin.html:33 cps/web.py:1703 cps/web.py:1749
+#: cps/templates/admin.html:34 cps/web.py:1715 cps/web.py:1761
msgid "Add new user"
msgstr "添加新用户"
-#: cps/web.py:1741
+#: cps/web.py:1753
#, python-format
msgid "User '%(user)s' created"
msgstr "用户 '%(user)s' 已被创建"
-#: cps/web.py:1745
+#: cps/web.py:1757
msgid "Found an existing account for this email address or nickname."
msgstr "已找到使用此邮箱或昵称的账号。"
-#: cps/web.py:1767
+#: cps/web.py:1779
msgid "Mail settings updated"
msgstr "邮箱设置已更新"
-#: cps/web.py:1773
+#: cps/web.py:1785
#, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr "测试邮件已成功发送到 %(kindlemail)s"
-#: cps/web.py:1776
+#: cps/web.py:1788
#, python-format
msgid "There was an error sending the Test E-Mail: %(res)s"
msgstr "发送测试邮件时发生错误: %(res)s"
-#: cps/web.py:1777
+#: cps/web.py:1789
msgid "Edit mail settings"
msgstr "编辑邮箱设置"
-#: cps/web.py:1805
+#: cps/web.py:1817
#, python-format
msgid "User '%(nick)s' deleted"
msgstr "用户 '%(nick)s' 已被删除"
-#: cps/web.py:1886
+#: cps/web.py:1898
#, python-format
msgid "User '%(nick)s' updated"
msgstr "用户 '%(nick)s' 已被更新"
-#: cps/web.py:1889
+#: cps/web.py:1901
msgid "An unknown error occured."
msgstr "发生未知错误。"
-#: cps/web.py:1892
+#: cps/web.py:1904
#, python-format
msgid "Edit User %(nick)s"
msgstr "编辑用户 %(nick)s"
-#: cps/web.py:2098 cps/web.py:2101 cps/web.py:2175
+#: cps/web.py:2110 cps/web.py:2113 cps/web.py:2188
msgid "edit metadata"
msgstr "编辑元数据"
-#: cps/web.py:2133
+#: cps/web.py:2145
#, python-format
msgid "Failed to create path %s (Permission denied)."
msgstr "创建路径 %s 失败(权限拒绝)。"
-#: cps/web.py:2138
+#: cps/web.py:2150
#, python-format
msgid "Failed to store file %s (Permission denied)."
msgstr "存储文件 %s 失败(权限拒绝)。"
-#: cps/web.py:2143
+#: cps/web.py:2155
#, python-format
msgid "Failed to delete file %s (Permission denied)."
msgstr "删除文件 %s 失败(权限拒绝)。"
@@ -344,145 +369,158 @@ msgstr "删除文件 %s 失败(权限拒绝)。"
msgid "User list"
msgstr "用户列表"
-#: cps/templates/admin.html:7
+#: cps/templates/admin.html:8
msgid "Nickname"
msgstr "昵称"
-#: cps/templates/admin.html:8
+#: cps/templates/admin.html:9
msgid "Email"
msgstr ""
-#: cps/templates/admin.html:9
+#: cps/templates/admin.html:10
msgid "Kindle"
msgstr ""
-#: cps/templates/admin.html:10
+#: cps/templates/admin.html:11
msgid "DLS"
msgstr ""
-#: cps/templates/admin.html:11 cps/templates/layout.html:83
+#: cps/templates/admin.html:12 cps/templates/layout.html:85
msgid "Admin"
msgstr "管理"
-#: cps/templates/admin.html:12 cps/templates/detail.html:117
+#: cps/templates/admin.html:13 cps/templates/detail.html:117
msgid "Download"
msgstr "下载"
-#: cps/templates/admin.html:13 cps/templates/layout.html:76
+#: cps/templates/admin.html:14 cps/templates/layout.html:78
msgid "Upload"
msgstr "上传"
-#: cps/templates/admin.html:14
+#: cps/templates/admin.html:15
msgid "Edit"
msgstr "编辑"
-#: cps/templates/admin.html:15
+#: cps/templates/admin.html:16
msgid "Passwd"
msgstr "修改密码"
-#: cps/templates/admin.html:34
+#: cps/templates/admin.html:35
msgid "SMTP mail settings"
msgstr "SMTP设置"
-#: cps/templates/admin.html:37 cps/templates/email_edit.html:7
+#: cps/templates/admin.html:38 cps/templates/email_edit.html:7
msgid "SMTP hostname"
msgstr "SMTP地址"
-#: cps/templates/admin.html:38
+#: cps/templates/admin.html:39
msgid "SMTP port"
msgstr "SMTP端口"
-#: cps/templates/admin.html:39
+#: cps/templates/admin.html:40
msgid "SSL"
msgstr ""
-#: cps/templates/admin.html:40 cps/templates/email_edit.html:23
+#: cps/templates/admin.html:41 cps/templates/email_edit.html:23
msgid "SMTP login"
msgstr "SMTP用户名"
-#: cps/templates/admin.html:41 cps/templates/email_edit.html:27
+#: cps/templates/admin.html:42 cps/templates/email_edit.html:27
msgid "SMTP password"
msgstr "SMTP密码"
-#: cps/templates/admin.html:42
+#: cps/templates/admin.html:43
msgid "From mail"
msgstr "来自邮箱"
-#: cps/templates/admin.html:54
+#: cps/templates/admin.html:55
msgid "Change SMTP settings"
msgstr "修改SMTP设置"
-#: cps/templates/admin.html:56 cps/templates/admin.html:76
+#: cps/templates/admin.html:57 cps/templates/admin.html:77
msgid "Configuration"
msgstr "配置"
-#: cps/templates/admin.html:59
+#: cps/templates/admin.html:60
msgid "Calibre DB dir"
msgstr "Calibre DB目录"
-#: cps/templates/admin.html:60 cps/templates/config_edit.html:32
+#: cps/templates/admin.html:61 cps/templates/config_edit.html:32
msgid "Log Level"
msgstr "日志级别"
-#: cps/templates/admin.html:61
+#: cps/templates/admin.html:62
msgid "Port"
msgstr "端口"
-#: cps/templates/admin.html:62 cps/templates/config_edit.html:19
+#: cps/templates/admin.html:63 cps/templates/config_edit.html:19
msgid "Books per page"
msgstr "每页书籍数"
-#: cps/templates/admin.html:63
+#: cps/templates/admin.html:64
msgid "Uploading"
msgstr "上传"
-#: cps/templates/admin.html:64
+#: cps/templates/admin.html:65
msgid "Public registration"
msgstr "开放注册"
-#: cps/templates/admin.html:65
+#: cps/templates/admin.html:66
msgid "Anonymous browsing"
msgstr "匿名浏览"
-#: cps/templates/admin.html:77
+#: cps/templates/admin.html:78
msgid "Administration"
msgstr "管理"
-#: cps/templates/admin.html:79
+#: cps/templates/admin.html:80
+msgid "Current commit timestamp"
+msgstr ""
+
+#: cps/templates/admin.html:81
+msgid "Newest commit timestamp"
+msgstr ""
+
+#: cps/templates/admin.html:83
msgid "Restart Calibre-web"
msgstr "重启 Calibre-web"
-#: cps/templates/admin.html:80
+#: cps/templates/admin.html:84
msgid "Stop Calibre-web"
msgstr "停止 Calibre-web"
-#: cps/templates/admin.html:81
+#: cps/templates/admin.html:85
msgid "Check for update"
-msgstr "检查更新"
+msgstr ""
-#: cps/templates/admin.html:82
+#: cps/templates/admin.html:86
msgid "Perform Update"
-msgstr "执行更新"
+msgstr ""
-#: cps/templates/admin.html:93
+#: cps/templates/admin.html:96
msgid "Do you really want to restart Calibre-web?"
msgstr "您确定要重启 Calibre-web 吗?"
-#: cps/templates/admin.html:94 cps/templates/admin.html:109
+#: cps/templates/admin.html:101 cps/templates/admin.html:115
+#: cps/templates/admin.html:136
msgid "Ok"
msgstr "确定"
-#: cps/templates/admin.html:95 cps/templates/admin.html:110
+#: cps/templates/admin.html:102 cps/templates/admin.html:116
#: cps/templates/book_edit.html:108 cps/templates/config_edit.html:75
#: cps/templates/email_edit.html:36 cps/templates/shelf_edit.html:17
#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:111
msgid "Back"
msgstr "后退"
-#: cps/templates/admin.html:108
+#: cps/templates/admin.html:114
msgid "Do you really want to stop Calibre-web?"
msgstr "您确定要关闭 Calibre-web 吗?"
+#: cps/templates/admin.html:127
+msgid "Updating, please do not reload page"
+msgstr ""
+
#: cps/templates/book_edit.html:16 cps/templates/search_form.html:6
msgid "Book Title"
msgstr "书名"
@@ -499,7 +537,7 @@ msgstr "简介"
msgid "Tags"
msgstr "标签"
-#: cps/templates/book_edit.html:33 cps/templates/layout.html:136
+#: cps/templates/book_edit.html:33 cps/templates/layout.html:138
#: cps/templates/search_form.html:33
msgid "Series"
msgstr "丛书"
@@ -572,7 +610,7 @@ msgstr "启用注册"
#: cps/templates/config_edit.html:52
msgid "Default Settings for new users"
-msgstr "新用户的默认设置"
+msgstr ""
#: cps/templates/config_edit.html:55 cps/templates/user_edit.html:80
msgid "Admin user"
@@ -594,7 +632,7 @@ msgstr "允许编辑"
msgid "Allow Changing Password"
msgstr "允许修改密码"
-#: cps/templates/config_edit.html:78 cps/templates/layout.html:91
+#: cps/templates/config_edit.html:78 cps/templates/layout.html:93
#: cps/templates/login.html:4
msgid "Login"
msgstr "登录"
@@ -613,7 +651,7 @@ msgstr "语言"
#: cps/templates/detail.html:74
msgid "Publishing date"
-msgstr "出版日期"
+msgstr ""
#: cps/templates/detail.html:106
msgid "Description:"
@@ -675,27 +713,27 @@ msgstr "发现(随机书籍)"
msgid "Start"
msgstr "开始"
-#: cps/templates/index.xml:7 cps/templates/layout.html:61
+#: cps/templates/index.xml:7 cps/templates/layout.html:58
msgid "Search"
msgstr "搜索"
-#: cps/templates/index.xml:15 cps/templates/layout.html:124
+#: cps/templates/index.xml:15 cps/templates/layout.html:126
msgid "Hot Books"
msgstr "热门书籍"
#: cps/templates/index.xml:19
msgid "Popular publications from this catalog based on Downloads."
-msgstr "基于下载数的热门书籍"
+msgstr ""
-#: cps/templates/index.xml:22 cps/templates/layout.html:127
+#: cps/templates/index.xml:22 cps/templates/layout.html:129
msgid "Best rated Books"
-msgstr "最高评分书籍"
+msgstr ""
#: cps/templates/index.xml:26
msgid "Popular publications from this catalog based on Rating."
msgstr "基于评分的热门书籍"
-#: cps/templates/index.xml:29 cps/templates/layout.html:122
+#: cps/templates/index.xml:29 cps/templates/layout.html:124
msgid "New Books"
msgstr "新书"
@@ -707,7 +745,7 @@ msgstr "最新书籍"
msgid "Show Random Books"
msgstr "显示随机书籍"
-#: cps/templates/index.xml:43 cps/templates/layout.html:138
+#: cps/templates/index.xml:43 cps/templates/layout.html:140
msgid "Authors"
msgstr "作者"
@@ -727,51 +765,51 @@ msgstr "书籍按丛书排序"
msgid "Toggle navigation"
msgstr "切换导航"
-#: cps/templates/layout.html:63
+#: cps/templates/layout.html:60
msgid "Go!"
msgstr "走起!"
-#: cps/templates/layout.html:66
+#: cps/templates/layout.html:68
msgid "Advanced Search"
msgstr "高级搜索"
-#: cps/templates/layout.html:87
+#: cps/templates/layout.html:89
msgid "Logout"
msgstr "注销"
-#: cps/templates/layout.html:92 cps/templates/register.html:18
+#: cps/templates/layout.html:94 cps/templates/register.html:18
msgid "Register"
msgstr "注册"
-#: cps/templates/layout.html:121
+#: cps/templates/layout.html:123
msgid "Browse"
msgstr "浏览"
-#: cps/templates/layout.html:130
+#: cps/templates/layout.html:132
msgid "Discover"
msgstr "发现"
-#: cps/templates/layout.html:133
+#: cps/templates/layout.html:135
msgid "Categories"
msgstr "分类"
-#: cps/templates/layout.html:140 cps/templates/search_form.html:54
+#: cps/templates/layout.html:142 cps/templates/search_form.html:54
msgid "Languages"
msgstr "语言"
-#: cps/templates/layout.html:143
+#: cps/templates/layout.html:145
msgid "Public Shelves"
msgstr "公开书架"
-#: cps/templates/layout.html:147
+#: cps/templates/layout.html:149
msgid "Your Shelves"
msgstr "您的书架"
-#: cps/templates/layout.html:152
+#: cps/templates/layout.html:154
msgid "Create a Shelf"
msgstr "创建书架"
-#: cps/templates/layout.html:153
+#: cps/templates/layout.html:155
msgid "About"
msgstr "关于"
@@ -790,7 +828,7 @@ msgid "Remember me"
msgstr "记住我"
#: cps/templates/osd.xml:5
-msgid "instanceCalibre Web ebook catalog"
+msgid "Calibre Web ebook catalog"
msgstr ""
#: cps/templates/read.html:136
@@ -895,11 +933,11 @@ msgstr "个作者在此书库"
#: cps/templates/stats.html:45
msgid "Categories in this Library"
-msgstr "个分类在此书库"
+msgstr ""
#: cps/templates/stats.html:49
msgid "Series in this Library"
-msgstr "个丛书在此书库"
+msgstr ""
#: cps/templates/user_edit.html:23
msgid "Kindle E-Mail"
@@ -923,7 +961,7 @@ msgstr "显示热门书籍"
#: cps/templates/user_edit.html:53
msgid "Show best rated books"
-msgstr "显示最高评分书籍"
+msgstr ""
#: cps/templates/user_edit.html:57
msgid "Show language selection"
diff --git a/cps/web.py b/cps/web.py
index 4bf67dbd..5c1cb975 100755
--- a/cps/web.py
+++ b/cps/web.py
@@ -3,7 +3,6 @@
import mimetypes
import logging
from logging.handlers import RotatingFileHandler
-from tempfile import gettempdir
import textwrap
from flask import Flask, render_template, session, request, Response, redirect, url_for, send_from_directory, \
make_response, g, flash, abort
@@ -39,9 +38,10 @@ import sys
import subprocess
import re
import db
+import thread
from shutil import move, copyfile
from tornado.ioloop import IOLoop
-import StringIO
+
try:
from wand.image import Image
@@ -51,10 +51,6 @@ except ImportError, e:
use_generic_pdf_cover = True
from cgi import escape
-# Global variables
-global_task = None
-ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx', 'fb2'])
-
# Proxy Helper class
class ReverseProxied(object):
@@ -669,7 +665,7 @@ def get_opds_download_link(book_id, format):
file_name = book.title
if len(book.authors) > 0:
file_name = book.authors[0].name + '-' + file_name
- file_name = helper.get_valid_filename(file_name)
+ # file_name = helper.get_valid_filename(file_name)
response = make_response(send_from_directory(os.path.join(config.config_calibre_dir, book.path), data.name + "." + format))
response.headers["Content-Disposition"] = "attachment; filename=\"%s.%s\"" % (data.name, format)
return response
@@ -717,10 +713,39 @@ def get_update_status():
commit = requests.get('https://api.github.com/repos/janeczku/calibre-web/git/refs/heads/master').json()
if "object" in commit and commit['object']['sha'] != commit_id:
status['status'] = True
+ commitdate = requests.get('https://api.github.com/repos/janeczku/calibre-web/git/commits/'+commit['object']['sha']).json()
+ if "committer" in commitdate:
+ status['commit'] = commitdate['committer']['date']
+ else:
+ status['commit'] = u'Unknown'
else:
status['status'] = False
return json.dumps(status)
+@app.route("/get_updater_status", methods=['GET','POST'])
+@login_required
+@admin_required
+def get_updater_status():
+ status = {}
+ if request.method == "POST":
+ commit = request.form.to_dict()
+ if "start" in commit and commit['start'] == 'True':
+ text={
+ "1": _(u'Requesting update package'),
+ "2": _(u'Downloading update package'),
+ "3": _(u'Unzipping update package'),
+ "4": _(u'Files are replaced'),
+ "5": _(u'Database connections are closed'),
+ "6": _(u'Server is stopped'),
+ "7": _(u'Update finished, please press okay and reload page')
+ }
+ status['text']=text
+ helper.updater_thread = helper.Updater()
+ helper.updater_thread.start()
+ status['status']=helper.updater_thread.get_update_status()
+ elif request.method == "GET":
+ status['status']=helper.updater_thread.get_update_status()
+ return json.dumps(status)
@app.route("/get_languages_json", methods=['GET', 'POST'])
@@ -1033,7 +1058,7 @@ def shutdown():
server.add_callback(server.stop)
showtext = {}
if task == 0:
- showtext['text'] = _(u'Performing Restart, please reload page')
+ showtext['text'] = _(u'Server restarted, please reload page')
else:
showtext['text'] = _(u'Performing shutdown of server, please close window')
return json.dumps(showtext)
@@ -1044,23 +1069,10 @@ def shutdown():
@login_required
@admin_required
def update():
- global global_task
- r = requests.get('https://api.github.com/repos/janeczku/calibre-web/zipball/master', stream=True)
- fname = re.findall("filename=(.+)", r.headers['content-disposition'])[0]
- z = zipfile.ZipFile(StringIO.StringIO(r.content))
- tmp_dir = gettempdir()
- z.extractall(tmp_dir)
- helper.update_source(os.path.join(tmp_dir,os.path.splitext(fname)[0]),config.get_main_dir)
- global_task = 0
- db.session.close()
- db.engine.dispose()
- ub.session.close()
- ub.engine.dispose()
- # stop tornado server
- server = IOLoop.instance()
- server.add_callback(server.stop)
+ helper.updater_thread = helper.Updater()
flash(_(u"Update done"), category="info")
- return logout()
+ return ""
+
@app.route("/search", methods=["GET"])
@login_required_if_no_ano
@@ -1606,7 +1618,6 @@ def configuration_helper(origin):
if request.method == "POST":
to_save = request.form.to_dict()
content = ub.session.query(ub.Settings).first()
- # ToDo: check lib vaild, and change without restart
if "config_calibre_dir" in to_save:
if content.config_calibre_dir != to_save["config_calibre_dir"]:
content.config_calibre_dir = to_save["config_calibre_dir"]
@@ -2116,18 +2127,6 @@ def upload():
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']
- if '.' in file.filename:
- file_ext = file.filename.rsplit('.', 1)[-1].lower()
- if file_ext not in ALLOWED_EXTENSIONS:
- flash(
- _('File extension "%s" is not allowed to be uploaded to this server' %
- file_ext),
- category="error"
- )
- return redirect(url_for('index'))
- else:
- flash(_('File to be uploaded must have an extension'), category="error")
- return redirect(url_for('index'))
meta = uploader.upload(file)
title = meta.title
diff --git a/messages.pot b/messages.pot
index 90b9de7e..759f051b 100644
--- a/messages.pot
+++ b/messages.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2017-02-10 20:17+0100\n"
+"POT-Creation-Date: 2017-02-20 19:47+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -17,316 +17,341 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
-#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:998
+#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:1030
msgid "not installed"
msgstr ""
-#: cps/helper.py:136
+#: cps/helper.py:150
#, python-format
msgid "Failed to send mail: %s"
msgstr ""
-#: cps/helper.py:143
+#: cps/helper.py:157
msgid "Calibre-web test email"
msgstr ""
-#: cps/helper.py:144 cps/helper.py:154
+#: cps/helper.py:158 cps/helper.py:168
msgid "This email has been sent via calibre web."
msgstr ""
-#: cps/helper.py:153 cps/templates/detail.html:130
+#: cps/helper.py:167 cps/templates/detail.html:130
msgid "Send to Kindle"
msgstr ""
-#: cps/helper.py:171 cps/helper.py:186
+#: cps/helper.py:185 cps/helper.py:200
msgid "Could not find any formats suitable for sending by email"
msgstr ""
-#: cps/helper.py:180
+#: cps/helper.py:194
msgid "Could not convert epub to mobi"
msgstr ""
-#: cps/helper.py:206
-msgid "The requested file could not be read. Maybe wrong permissions?"
-msgstr ""
-
-#: cps/ub.py:443
+#: cps/ub.py:434
msgid "Guest"
msgstr ""
-#: cps/web.py:778
+#: cps/web.py:734
+msgid "Requesting update package"
+msgstr ""
+
+#: cps/web.py:735
+msgid "Downloading update package"
+msgstr ""
+
+#: cps/web.py:736
+msgid "Unzipping update package"
+msgstr ""
+
+#: cps/web.py:737
+msgid "Files are replaced"
+msgstr ""
+
+#: cps/web.py:738
+msgid "Database connections are closed"
+msgstr ""
+
+#: cps/web.py:739
+msgid "Server is stopped"
+msgstr ""
+
+#: cps/web.py:740
+msgid "Update finished, please press okay and reload page"
+msgstr ""
+
+#: cps/web.py:810
msgid "Latest Books"
msgstr ""
-#: cps/web.py:803
+#: cps/web.py:835
msgid "Hot Books (most downloaded)"
msgstr ""
-#: cps/web.py:813
+#: cps/web.py:845
msgid "Best rated books"
msgstr ""
-#: cps/templates/index.xml:36 cps/web.py:822
+#: cps/templates/index.xml:36 cps/web.py:854
msgid "Random Books"
msgstr ""
-#: cps/web.py:835
+#: cps/web.py:867
msgid "Author list"
msgstr ""
-#: cps/web.py:846
+#: cps/web.py:878
#, python-format
msgid "Author: %(name)s"
msgstr ""
-#: cps/web.py:848 cps/web.py:876 cps/web.py:975 cps/web.py:1216 cps/web.py:2103
+#: cps/web.py:880 cps/web.py:908 cps/web.py:1007 cps/web.py:1235
+#: cps/web.py:2115
msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr ""
-#: cps/templates/index.xml:57 cps/web.py:862
+#: cps/templates/index.xml:57 cps/web.py:894
msgid "Series list"
msgstr ""
-#: cps/web.py:874
+#: cps/web.py:906
#, python-format
msgid "Series: %(serie)s"
msgstr ""
-#: cps/web.py:907
+#: cps/web.py:939
msgid "Available languages"
msgstr ""
-#: cps/web.py:922
+#: cps/web.py:954
#, python-format
msgid "Language: %(name)s"
msgstr ""
-#: cps/templates/index.xml:50 cps/web.py:935
+#: cps/templates/index.xml:50 cps/web.py:967
msgid "Category list"
msgstr ""
-#: cps/web.py:947
+#: cps/web.py:979
#, python-format
msgid "Category: %(name)s"
msgstr ""
-#: cps/web.py:1008
+#: cps/web.py:1040
msgid "Statistics"
msgstr ""
-#: cps/web.py:1029
-msgid "Performing Restart, please reload page"
+#: cps/web.py:1061
+msgid "Server restarted, please reload page"
msgstr ""
-#: cps/web.py:1031
+#: cps/web.py:1063
msgid "Performing shutdown of server, please close window"
msgstr ""
-#: cps/web.py:1055
+#: cps/web.py:1073
msgid "Update done"
msgstr ""
-#: cps/web.py:1128 cps/web.py:1141
+#: cps/web.py:1147 cps/web.py:1160
msgid "search"
msgstr ""
-#: cps/web.py:1192 cps/web.py:1199 cps/web.py:1206 cps/web.py:1213
+#: cps/web.py:1211 cps/web.py:1218 cps/web.py:1225 cps/web.py:1232
msgid "Read a Book"
msgstr ""
-#: cps/web.py:1264 cps/web.py:1701
+#: cps/web.py:1276 cps/web.py:1713
msgid "Please fill out all fields!"
msgstr ""
-#: cps/web.py:1265 cps/web.py:1281 cps/web.py:1286 cps/web.py:1288
+#: cps/web.py:1277 cps/web.py:1293 cps/web.py:1298 cps/web.py:1300
msgid "register"
msgstr ""
-#: cps/web.py:1280
+#: cps/web.py:1292
msgid "An unknown error occured. Please try again later."
msgstr ""
-#: cps/web.py:1285
+#: cps/web.py:1297
msgid "This username or email address is already in use."
msgstr ""
-#: cps/web.py:1303
+#: cps/web.py:1315
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr ""
-#: cps/web.py:1308
+#: cps/web.py:1320
msgid "Wrong Username or Password"
msgstr ""
-#: cps/web.py:1310
+#: cps/web.py:1322
msgid "login"
msgstr ""
-#: cps/web.py:1327
+#: cps/web.py:1339
msgid "Please configure the SMTP mail settings first..."
msgstr ""
-#: cps/web.py:1331
+#: cps/web.py:1343
#, python-format
msgid "Book successfully send to %(kindlemail)s"
msgstr ""
-#: cps/web.py:1335
+#: cps/web.py:1347
#, python-format
msgid "There was an error sending this book: %(res)s"
msgstr ""
-#: cps/web.py:1337
+#: cps/web.py:1349
msgid "Please configure your kindle email address first..."
msgstr ""
-#: cps/web.py:1357
+#: cps/web.py:1369
#, python-format
msgid "Book has been added to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:1378
+#: cps/web.py:1390
#, python-format
msgid "Book has been removed from shelf: %(sname)s"
msgstr ""
-#: cps/web.py:1397 cps/web.py:1421
+#: cps/web.py:1409 cps/web.py:1433
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr ""
-#: cps/web.py:1402
+#: cps/web.py:1414
#, python-format
msgid "Shelf %(title)s created"
msgstr ""
-#: cps/web.py:1404 cps/web.py:1432
+#: cps/web.py:1416 cps/web.py:1444
msgid "There was an error"
msgstr ""
-#: cps/web.py:1405 cps/web.py:1407
+#: cps/web.py:1417 cps/web.py:1419
msgid "create a shelf"
msgstr ""
-#: cps/web.py:1430
+#: cps/web.py:1442
#, python-format
msgid "Shelf %(title)s changed"
msgstr ""
-#: cps/web.py:1433 cps/web.py:1435
+#: cps/web.py:1445 cps/web.py:1447
msgid "Edit a shelf"
msgstr ""
-#: cps/web.py:1453
+#: cps/web.py:1465
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr ""
-#: cps/web.py:1475
+#: cps/web.py:1487
#, python-format
msgid "Shelf: '%(name)s'"
msgstr ""
-#: cps/web.py:1506
+#: cps/web.py:1518
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr ""
-#: cps/web.py:1568
+#: cps/web.py:1580
msgid "Found an existing account for this email address."
msgstr ""
-#: cps/web.py:1570 cps/web.py:1574
+#: cps/web.py:1582 cps/web.py:1586
#, python-format
msgid "%(name)s's profile"
msgstr ""
-#: cps/web.py:1571
+#: cps/web.py:1583
msgid "Profile updated"
msgstr ""
-#: cps/web.py:1584
+#: cps/web.py:1597
msgid "Admin page"
msgstr ""
-#: cps/web.py:1656
+#: cps/web.py:1668
msgid "Calibre-web configuration updated"
msgstr ""
-#: cps/web.py:1663 cps/web.py:1669 cps/web.py:1682
+#: cps/web.py:1675 cps/web.py:1681 cps/web.py:1694
msgid "Basic Configuration"
msgstr ""
-#: cps/web.py:1667
+#: cps/web.py:1679
msgid "DB location is not valid, please enter correct path"
msgstr ""
-#: cps/templates/admin.html:33 cps/web.py:1703 cps/web.py:1749
+#: cps/templates/admin.html:34 cps/web.py:1715 cps/web.py:1761
msgid "Add new user"
msgstr ""
-#: cps/web.py:1741
+#: cps/web.py:1753
#, python-format
msgid "User '%(user)s' created"
msgstr ""
-#: cps/web.py:1745
+#: cps/web.py:1757
msgid "Found an existing account for this email address or nickname."
msgstr ""
-#: cps/web.py:1767
+#: cps/web.py:1779
msgid "Mail settings updated"
msgstr ""
-#: cps/web.py:1773
+#: cps/web.py:1785
#, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr ""
-#: cps/web.py:1776
+#: cps/web.py:1788
#, python-format
msgid "There was an error sending the Test E-Mail: %(res)s"
msgstr ""
-#: cps/web.py:1777
+#: cps/web.py:1789
msgid "Edit mail settings"
msgstr ""
-#: cps/web.py:1805
+#: cps/web.py:1817
#, python-format
msgid "User '%(nick)s' deleted"
msgstr ""
-#: cps/web.py:1886
+#: cps/web.py:1898
#, python-format
msgid "User '%(nick)s' updated"
msgstr ""
-#: cps/web.py:1889
+#: cps/web.py:1901
msgid "An unknown error occured."
msgstr ""
-#: cps/web.py:1892
+#: cps/web.py:1904
#, python-format
msgid "Edit User %(nick)s"
msgstr ""
-#: cps/web.py:2098 cps/web.py:2101 cps/web.py:2175
+#: cps/web.py:2110 cps/web.py:2113 cps/web.py:2188
msgid "edit metadata"
msgstr ""
-#: cps/web.py:2133
+#: cps/web.py:2145
#, python-format
msgid "Failed to create path %s (Permission denied)."
msgstr ""
-#: cps/web.py:2138
+#: cps/web.py:2150
#, python-format
msgid "Failed to store file %s (Permission denied)."
msgstr ""
-#: cps/web.py:2143
+#: cps/web.py:2155
#, python-format
msgid "Failed to delete file %s (Permission denied)."
msgstr ""
@@ -335,145 +360,158 @@ msgstr ""
msgid "User list"
msgstr ""
-#: cps/templates/admin.html:7
+#: cps/templates/admin.html:8
msgid "Nickname"
msgstr ""
-#: cps/templates/admin.html:8
+#: cps/templates/admin.html:9
msgid "Email"
msgstr ""
-#: cps/templates/admin.html:9
+#: cps/templates/admin.html:10
msgid "Kindle"
msgstr ""
-#: cps/templates/admin.html:10
+#: cps/templates/admin.html:11
msgid "DLS"
msgstr ""
-#: cps/templates/admin.html:11 cps/templates/layout.html:83
+#: cps/templates/admin.html:12 cps/templates/layout.html:85
msgid "Admin"
msgstr ""
-#: cps/templates/admin.html:12 cps/templates/detail.html:117
+#: cps/templates/admin.html:13 cps/templates/detail.html:117
msgid "Download"
msgstr ""
-#: cps/templates/admin.html:13 cps/templates/layout.html:76
+#: cps/templates/admin.html:14 cps/templates/layout.html:78
msgid "Upload"
msgstr ""
-#: cps/templates/admin.html:14
+#: cps/templates/admin.html:15
msgid "Edit"
msgstr ""
-#: cps/templates/admin.html:15
+#: cps/templates/admin.html:16
msgid "Passwd"
msgstr ""
-#: cps/templates/admin.html:34
+#: cps/templates/admin.html:35
msgid "SMTP mail settings"
msgstr ""
-#: cps/templates/admin.html:37 cps/templates/email_edit.html:7
+#: cps/templates/admin.html:38 cps/templates/email_edit.html:7
msgid "SMTP hostname"
msgstr ""
-#: cps/templates/admin.html:38
+#: cps/templates/admin.html:39
msgid "SMTP port"
msgstr ""
-#: cps/templates/admin.html:39
+#: cps/templates/admin.html:40
msgid "SSL"
msgstr ""
-#: cps/templates/admin.html:40 cps/templates/email_edit.html:23
+#: cps/templates/admin.html:41 cps/templates/email_edit.html:23
msgid "SMTP login"
msgstr ""
-#: cps/templates/admin.html:41 cps/templates/email_edit.html:27
+#: cps/templates/admin.html:42 cps/templates/email_edit.html:27
msgid "SMTP password"
msgstr ""
-#: cps/templates/admin.html:42
+#: cps/templates/admin.html:43
msgid "From mail"
msgstr ""
-#: cps/templates/admin.html:54
+#: cps/templates/admin.html:55
msgid "Change SMTP settings"
msgstr ""
-#: cps/templates/admin.html:56 cps/templates/admin.html:76
+#: cps/templates/admin.html:57 cps/templates/admin.html:77
msgid "Configuration"
msgstr ""
-#: cps/templates/admin.html:59
+#: cps/templates/admin.html:60
msgid "Calibre DB dir"
msgstr ""
-#: cps/templates/admin.html:60 cps/templates/config_edit.html:32
+#: cps/templates/admin.html:61 cps/templates/config_edit.html:32
msgid "Log Level"
msgstr ""
-#: cps/templates/admin.html:61
+#: cps/templates/admin.html:62
msgid "Port"
msgstr ""
-#: cps/templates/admin.html:62 cps/templates/config_edit.html:19
+#: cps/templates/admin.html:63 cps/templates/config_edit.html:19
msgid "Books per page"
msgstr ""
-#: cps/templates/admin.html:63
+#: cps/templates/admin.html:64
msgid "Uploading"
msgstr ""
-#: cps/templates/admin.html:64
+#: cps/templates/admin.html:65
msgid "Public registration"
msgstr ""
-#: cps/templates/admin.html:65
+#: cps/templates/admin.html:66
msgid "Anonymous browsing"
msgstr ""
-#: cps/templates/admin.html:77
+#: cps/templates/admin.html:78
msgid "Administration"
msgstr ""
-#: cps/templates/admin.html:79
-msgid "Restart Calibre-web"
-msgstr ""
-
#: cps/templates/admin.html:80
-msgid "Stop Calibre-web"
+msgid "Current commit timestamp"
msgstr ""
#: cps/templates/admin.html:81
+msgid "Newest commit timestamp"
+msgstr ""
+
+#: cps/templates/admin.html:83
+msgid "Restart Calibre-web"
+msgstr ""
+
+#: cps/templates/admin.html:84
+msgid "Stop Calibre-web"
+msgstr ""
+
+#: cps/templates/admin.html:85
msgid "Check for update"
msgstr ""
-#: cps/templates/admin.html:82
+#: cps/templates/admin.html:86
msgid "Perform Update"
msgstr ""
-#: cps/templates/admin.html:93
+#: cps/templates/admin.html:96
msgid "Do you really want to restart Calibre-web?"
msgstr ""
-#: cps/templates/admin.html:94 cps/templates/admin.html:109
+#: cps/templates/admin.html:101 cps/templates/admin.html:115
+#: cps/templates/admin.html:136
msgid "Ok"
msgstr ""
-#: cps/templates/admin.html:95 cps/templates/admin.html:110
+#: cps/templates/admin.html:102 cps/templates/admin.html:116
#: cps/templates/book_edit.html:108 cps/templates/config_edit.html:75
#: cps/templates/email_edit.html:36 cps/templates/shelf_edit.html:17
#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:111
msgid "Back"
msgstr ""
-#: cps/templates/admin.html:108
+#: cps/templates/admin.html:114
msgid "Do you really want to stop Calibre-web?"
msgstr ""
+#: cps/templates/admin.html:127
+msgid "Updating, please do not reload page"
+msgstr ""
+
#: cps/templates/book_edit.html:16 cps/templates/search_form.html:6
msgid "Book Title"
msgstr ""
@@ -490,7 +528,7 @@ msgstr ""
msgid "Tags"
msgstr ""
-#: cps/templates/book_edit.html:33 cps/templates/layout.html:136
+#: cps/templates/book_edit.html:33 cps/templates/layout.html:138
#: cps/templates/search_form.html:33
msgid "Series"
msgstr ""
@@ -585,7 +623,7 @@ msgstr ""
msgid "Allow Changing Password"
msgstr ""
-#: cps/templates/config_edit.html:78 cps/templates/layout.html:91
+#: cps/templates/config_edit.html:78 cps/templates/layout.html:93
#: cps/templates/login.html:4
msgid "Login"
msgstr ""
@@ -666,11 +704,11 @@ msgstr ""
msgid "Start"
msgstr ""
-#: cps/templates/index.xml:7 cps/templates/layout.html:61
+#: cps/templates/index.xml:7 cps/templates/layout.html:58
msgid "Search"
msgstr ""
-#: cps/templates/index.xml:15 cps/templates/layout.html:124
+#: cps/templates/index.xml:15 cps/templates/layout.html:126
msgid "Hot Books"
msgstr ""
@@ -678,7 +716,7 @@ msgstr ""
msgid "Popular publications from this catalog based on Downloads."
msgstr ""
-#: cps/templates/index.xml:22 cps/templates/layout.html:127
+#: cps/templates/index.xml:22 cps/templates/layout.html:129
msgid "Best rated Books"
msgstr ""
@@ -686,7 +724,7 @@ msgstr ""
msgid "Popular publications from this catalog based on Rating."
msgstr ""
-#: cps/templates/index.xml:29 cps/templates/layout.html:122
+#: cps/templates/index.xml:29 cps/templates/layout.html:124
msgid "New Books"
msgstr ""
@@ -698,7 +736,7 @@ msgstr ""
msgid "Show Random Books"
msgstr ""
-#: cps/templates/index.xml:43 cps/templates/layout.html:138
+#: cps/templates/index.xml:43 cps/templates/layout.html:140
msgid "Authors"
msgstr ""
@@ -718,51 +756,51 @@ msgstr ""
msgid "Toggle navigation"
msgstr ""
-#: cps/templates/layout.html:63
+#: cps/templates/layout.html:60
msgid "Go!"
msgstr ""
-#: cps/templates/layout.html:66
+#: cps/templates/layout.html:68
msgid "Advanced Search"
msgstr ""
-#: cps/templates/layout.html:87
+#: cps/templates/layout.html:89
msgid "Logout"
msgstr ""
-#: cps/templates/layout.html:92 cps/templates/register.html:18
+#: cps/templates/layout.html:94 cps/templates/register.html:18
msgid "Register"
msgstr ""
-#: cps/templates/layout.html:121
+#: cps/templates/layout.html:123
msgid "Browse"
msgstr ""
-#: cps/templates/layout.html:130
+#: cps/templates/layout.html:132
msgid "Discover"
msgstr ""
-#: cps/templates/layout.html:133
+#: cps/templates/layout.html:135
msgid "Categories"
msgstr ""
-#: cps/templates/layout.html:140 cps/templates/search_form.html:54
+#: cps/templates/layout.html:142 cps/templates/search_form.html:54
msgid "Languages"
msgstr ""
-#: cps/templates/layout.html:143
+#: cps/templates/layout.html:145
msgid "Public Shelves"
msgstr ""
-#: cps/templates/layout.html:147
+#: cps/templates/layout.html:149
msgid "Your Shelves"
msgstr ""
-#: cps/templates/layout.html:152
+#: cps/templates/layout.html:154
msgid "Create a Shelf"
msgstr ""
-#: cps/templates/layout.html:153
+#: cps/templates/layout.html:155
msgid "About"
msgstr ""
@@ -781,7 +819,7 @@ msgid "Remember me"
msgstr ""
#: cps/templates/osd.xml:5
-msgid "instanceCalibre Web ebook catalog"
+msgid "Calibre Web ebook catalog"
msgstr ""
#: cps/templates/read.html:136