diff --git a/cps/editbooks.py b/cps/editbooks.py index e217ebd9..dd506fa6 100644 --- a/cps/editbooks.py +++ b/cps/editbooks.py @@ -26,6 +26,7 @@ from datetime import datetime import json from shutil import copyfile from uuid import uuid4 +from markupsafe import escape try: from lxml.html.clean import clean_html except ImportError: @@ -663,9 +664,9 @@ def upload_single_file(request, book, book_id): return redirect(url_for('web.show_book', book_id=book.id)) # Queue uploader info - uploadText=_(u"File format %(ext)s added to %(book)s", ext=file_ext.upper(), book=book.title) - WorkerThread.add(current_user.name, TaskUpload( - "" + uploadText + "")) + link = '{}'.format(url_for('web.show_book', book_id=book.id), escape(book.title)) + uploadText=_(u"File format %(ext)s added to %(book)s", ext=file_ext.upper(), book=link) + WorkerThread.add(current_user.name, TaskUpload(uploadText)) return uploader.process( saved_filename, *os.path.splitext(requested_file.filename), @@ -1038,9 +1039,9 @@ def upload(): gdriveutils.updateGdriveCalibreFromLocal() if error: flash(error, category="error") - uploadText=_(u"File %(file)s uploaded", file=title) - WorkerThread.add(current_user.name, TaskUpload( - "" + uploadText + "")) + link = '{}'.format(url_for('web.show_book', book_id=book_id), escape(title)) + uploadText = _(u"File %(file)s uploaded", file=link) + WorkerThread.add(current_user.name, TaskUpload(uploadText)) if len(request.files.getlist("btn-upload")) < 2: if current_user.role_edit() or current_user.role_admin(): diff --git a/cps/helper.py b/cps/helper.py index 56b71c65..d3e0dbbb 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -100,8 +100,8 @@ def convert_book_format(book_id, calibrepath, old_book_format, new_book_format, settings = dict() link = '{}'.format(url_for('web.show_book', book_id=book.id), escape(book.title)) # prevent xss txt = u"{} -> {}: {}".format( - old_book_format, - new_book_format, + old_book_format.upper(), + new_book_format.upper(), link) settings['old_book_format'] = old_book_format settings['new_book_format'] = new_book_format @@ -216,9 +216,11 @@ def send_mail(book_id, book_format, convert, kindle_mail, calibrepath, user_id): for entry in iter(book.data): if entry.format.upper() == book_format.upper(): converted_file_name = entry.name + '.' + book_format.lower() + link = '{}'.format(url_for('web.show_book', book_id=book_id), escape(book.title)) + EmailText = _(u"%(book)s send to Kindle", book=link) WorkerThread.add(user_id, TaskEmail(_(u"Send to Kindle"), book.path, converted_file_name, config.get_mail_settings(), kindle_mail, - _(u"E-mail: %(book)s", book=book.title), _(u'This e-mail has been sent via Calibre-Web.'))) + EmailText, _(u'This e-mail has been sent via Calibre-Web.'))) return return _(u"The requested file could not be read. Maybe wrong permissions?") diff --git a/cps/services/gmail.py b/cps/services/gmail.py index 9380121a..baada1f8 100644 --- a/cps/services/gmail.py +++ b/cps/services/gmail.py @@ -61,7 +61,7 @@ def get_user_info(credentials): return user_info.get('email', "") def send_messsage(token, msg): - log.debug("Start sending email via Gmail") + log.debug("Start sending e-mail via Gmail") creds = Credentials( token=token['token'], refresh_token=token['refresh_token'], @@ -80,4 +80,4 @@ def send_messsage(token, msg): body = {'raw': raw} (service.users().messages().send(userId='me', body=body).execute()) - log.debug("Email send successfully via Gmail") + log.debug("E-mail send successfully via Gmail") diff --git a/cps/static/js/table.js b/cps/static/js/table.js index 60d1a957..9fa28281 100644 --- a/cps/static/js/table.js +++ b/cps/static/js/table.js @@ -36,10 +36,10 @@ $(function() { async: true, timeout: 900, success: function (data) { - $('#table').bootstrapTable("load", data); + $('#tasktable').bootstrapTable("load", data); } }); - }, 2000); + }, 1000); } $("#books-table").on("check.bs.table check-all.bs.table uncheck.bs.table uncheck-all.bs.table", diff --git a/cps/tasks/convert.py b/cps/tasks/convert.py index 2e2a51d8..56cc7076 100644 --- a/cps/tasks/convert.py +++ b/cps/tasks/convert.py @@ -5,6 +5,7 @@ import re from glob import glob from shutil import copyfile +from markupsafe import escape from sqlalchemy.exc import SQLAlchemyError @@ -13,6 +14,7 @@ from cps import db from cps import logger, config from cps.subproc_wrapper import process_open from flask_babel import gettext as _ +from flask import url_for from cps.tasks.mail import TaskEmail from cps import gdriveutils @@ -24,6 +26,7 @@ class TaskConvert(CalibreTask): super(TaskConvert, self).__init__(taskMessage) self.file_path = file_path self.bookid = bookid + self.title = "" self.settings = settings self.kindle_mail = kindle_mail self.user = user @@ -35,6 +38,7 @@ class TaskConvert(CalibreTask): if config.config_use_google_drive: worker_db = db.CalibreDB(expire_on_commit=False) cur_book = worker_db.get_book(self.bookid) + self.title = cur_book.title data = worker_db.get_book_format(self.bookid, self.settings['old_book_format']) df = gdriveutils.getFileFromEbooksFolder(cur_book.path, data.name + "." + self.settings['old_book_format'].lower()) @@ -66,12 +70,13 @@ class TaskConvert(CalibreTask): # if we're sending to kindle after converting, create a one-off task and run it immediately # todo: figure out how to incorporate this into the progress try: + EmailText = _(u"%(book)s send to Kindle", book=escape(self.title)) worker_thread.add(self.user, TaskEmail(self.settings['subject'], self.results["path"], filename, self.settings, self.kindle_mail, - self.settings['subject'], + EmailText, self.settings['body'], internal=True) ) @@ -93,8 +98,9 @@ class TaskConvert(CalibreTask): local_db.get_book_format(self.bookid, self.settings['new_book_format']): log.info("Book id %d already converted to %s", book_id, format_new_ext) cur_book = local_db.get_book(book_id) + self.title = cur_book.title self.results['path'] = file_path - self.results['title'] = cur_book.title + self.results['title'] = self.title self._handleSuccess() local_db.session.close() return os.path.basename(file_path + format_new_ext) @@ -130,7 +136,8 @@ class TaskConvert(CalibreTask): local_db.session.close() return self.results['path'] = cur_book.path - self.results['title'] = cur_book.title + self.title = cur_book.title + self.results['title'] = self.title if not config.config_use_google_drive: self._handleSuccess() return os.path.basename(file_path + format_new_ext) diff --git a/cps/tasks/mail.py b/cps/tasks/mail.py index f19231ec..292114d5 100644 --- a/cps/tasks/mail.py +++ b/cps/tasks/mail.py @@ -143,7 +143,7 @@ class TaskEmail(CalibreTask): self.send_gmail_email(msg) except MemoryError as e: log.debug_or_exception(e) - self._handleError(u'MemoryError sending email: {}'.format(str(e))) + self._handleError(u'MemoryError sending e-mail: {}'.format(str(e))) except (smtplib.SMTPException, smtplib.SMTPAuthenticationError) as e: log.debug_or_exception(e) if hasattr(e, "smtp_error"): @@ -154,13 +154,13 @@ class TaskEmail(CalibreTask): text = '\n'.join(e.args) else: text = '' - self._handleError(u'Smtplib Error sending email: {}'.format(text)) + self._handleError(u'Smtplib Error sending e-mail: {}'.format(text)) except socket.error as e: log.debug_or_exception(e) - self._handleError(u'Socket Error sending email: {}'.format(e.strerror)) + self._handleError(u'Socket Error sending e-mail: {}'.format(e.strerror)) except Exception as ex: log.debug_or_exception(ex) - self._handleError(u'Error sending email: {}'.format(ex)) + self._handleError(u'Error sending e-mail: {}'.format(ex)) def send_standard_email(self, msg): @@ -173,7 +173,7 @@ class TaskEmail(CalibreTask): org_smtpstderr = smtplib.stderr smtplib.stderr = logger.StderrLogger('worker.smtp') - log.debug("Start sending email") + log.debug("Start sending e-mail") if use_ssl == 2: self.asyncSMTP = EmailSSL(self.settings["mail_server"], self.settings["mail_port"], timeout=timeout) @@ -196,7 +196,7 @@ class TaskEmail(CalibreTask): self.asyncSMTP.sendmail(self.settings["mail_from"], self.recipent, fp.getvalue()) self.asyncSMTP.quit() self._handleSuccess() - log.debug("Email send successfully") + log.debug("E-mail send successfully") if sys.version_info < (3, 0): smtplib.stderr = org_smtpstderr @@ -258,7 +258,7 @@ class TaskEmail(CalibreTask): @property def name(self): - return "Email" + return "E-mail" def __str__(self): return "{}, {}".format(self.name, self.subject)