Commit 10e212fc authored by Ozzieisaacs's avatar Ozzieisaacs

Merge branch 'master' into Develop

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