|
|
|
@ -29,12 +29,18 @@ def update_download(book_id, user_id):
|
|
|
|
|
def make_mobi(book_id):
|
|
|
|
|
kindlegen = os.path.join(config.MAIN_DIR, "vendor", "kindlegen")
|
|
|
|
|
if not os.path.exists(kindlegen):
|
|
|
|
|
return False
|
|
|
|
|
print "make_mobie: kindlegen binary not found in: %s" % kindlegen
|
|
|
|
|
return None
|
|
|
|
|
book = db.session.query(db.Books).filter(db.Books.id == book_id).first()
|
|
|
|
|
data = db.session.query(db.Data).filter(db.Data.book == book.id).filter(db.Data.format == 'EPUB').first()
|
|
|
|
|
if not data:
|
|
|
|
|
print "make_mobie: epub format not found for book id: %d" % book_id
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
file_path = os.path.join(config.DB_ROOT, book.path, data.name)
|
|
|
|
|
|
|
|
|
|
file_path = os.path.join(config.DB_ROOT, book.path, book.data[0].name)
|
|
|
|
|
# print os.path.getsize(file_path + ".epub")
|
|
|
|
|
if os.path.exists(file_path + ".epub") and not os.path.exists(file_path + ".mobi"):
|
|
|
|
|
if os.path.exists(file_path + ".epub"):
|
|
|
|
|
# print u"conversion started for %s" % book.title
|
|
|
|
|
check = subprocess.call([kindlegen, file_path + ".epub"], stdout=subprocess.PIPE)
|
|
|
|
|
if not check or check < 2:
|
|
|
|
@ -47,47 +53,75 @@ def make_mobi(book_id):
|
|
|
|
|
db.session.commit()
|
|
|
|
|
return file_path + ".mobi"
|
|
|
|
|
else:
|
|
|
|
|
return False
|
|
|
|
|
print "make_mobie: kindlegen failed to convert book"
|
|
|
|
|
return None
|
|
|
|
|
else:
|
|
|
|
|
return file_path + ".mobi"
|
|
|
|
|
print "make_mobie: epub not found: " + file_path + ".epub"
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
def send_mail(book_id, kindle_mail):
|
|
|
|
|
'''Send email with attachments'''
|
|
|
|
|
|
|
|
|
|
is_mobi = False
|
|
|
|
|
is_azw = False
|
|
|
|
|
is_azw3 = False
|
|
|
|
|
is_epub = False
|
|
|
|
|
is_pdf = False
|
|
|
|
|
file_path = None
|
|
|
|
|
settings = ub.get_mail_settings()
|
|
|
|
|
# create MIME message
|
|
|
|
|
msg = MIMEMultipart()
|
|
|
|
|
msg['From'] = settings["mail_from"]
|
|
|
|
|
msg['To'] = kindle_mail
|
|
|
|
|
msg['Subject'] = 'Sent to Kindle'
|
|
|
|
|
text = 'This email has been automatically sent by library.'
|
|
|
|
|
text = 'This email has been sent via calibre web.'
|
|
|
|
|
msg.attach(MIMEText(text))
|
|
|
|
|
|
|
|
|
|
use_ssl = settings.get('mail_use_ssl', 0)
|
|
|
|
|
|
|
|
|
|
print "use ssl: %d" % use_ssl
|
|
|
|
|
|
|
|
|
|
# attach files
|
|
|
|
|
#msg.attach(self.get_attachment(file_path))
|
|
|
|
|
|
|
|
|
|
book = db.session.query(db.Books).filter(db.Books.id == book_id).first()
|
|
|
|
|
for format in book.data:
|
|
|
|
|
if format.format == "MOBI":
|
|
|
|
|
is_mobi == True
|
|
|
|
|
if format.format == "EPUB":
|
|
|
|
|
is_epub = True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if is_mobi:
|
|
|
|
|
file_path = os.path.join(config.DB_ROOT, book.path, format.name + ".mobi")
|
|
|
|
|
|
|
|
|
|
if is_epub and not is_mobi:
|
|
|
|
|
file_path = make_mobi(book.id)
|
|
|
|
|
|
|
|
|
|
if file_path:
|
|
|
|
|
msg.attach(get_attachment(file_path))
|
|
|
|
|
data = db.session.query(db.Data).filter(db.Data.book == book.id)
|
|
|
|
|
|
|
|
|
|
formats = {}
|
|
|
|
|
|
|
|
|
|
for entry in data:
|
|
|
|
|
if entry.format == "MOBI":
|
|
|
|
|
formats["mobi"] = os.path.join(config.DB_ROOT, book.path, entry.name + ".mobi")
|
|
|
|
|
if entry.format == "AZW":
|
|
|
|
|
formats["azw"] = os.path.join(config.DB_ROOT, book.path, entry.name + ".azw")
|
|
|
|
|
if entry.format == "AZW3":
|
|
|
|
|
formats["azw3"] = os.path.join(config.DB_ROOT, book.path, entry.name + ".azw3")
|
|
|
|
|
if entry.format == "EPUB":
|
|
|
|
|
formats["epub"] = os.path.join(config.DB_ROOT, book.path, entry.name + ".epub")
|
|
|
|
|
if entry.format == "PDF":
|
|
|
|
|
formats["pdf"] = os.path.join(config.DB_ROOT, book.path, entry.name + ".pdf")
|
|
|
|
|
|
|
|
|
|
if len(formats) == 0:
|
|
|
|
|
print "no formats found"
|
|
|
|
|
return "Could not find any formats that can be send by email"
|
|
|
|
|
|
|
|
|
|
if 'azw3' in formats:
|
|
|
|
|
msg.attach(get_attachment(formats['azw3']))
|
|
|
|
|
elif 'azw' in formats:
|
|
|
|
|
msg.attach(get_attachment(formats['azw']))
|
|
|
|
|
elif 'mobi' in formats:
|
|
|
|
|
msg.attach(get_attachment(formats['mobi']))
|
|
|
|
|
elif 'epub' in formats:
|
|
|
|
|
filepath = make_mobi(book.id)
|
|
|
|
|
if filepath is not None:
|
|
|
|
|
msg.attach(get_attachment(filepath))
|
|
|
|
|
elif 'pdf' in formats:
|
|
|
|
|
msg.attach(get_attachment(formats['pdf']))
|
|
|
|
|
elif 'pdf' in formats:
|
|
|
|
|
msg.attach(get_attachment(formats['pdf']))
|
|
|
|
|
else:
|
|
|
|
|
return False
|
|
|
|
|
return "Could not find any formats that can be send by email"
|
|
|
|
|
|
|
|
|
|
#sys.exit()
|
|
|
|
|
# convert MIME message to string
|
|
|
|
|
fp = StringIO()
|
|
|
|
|
gen = Generator(fp, mangle_from_=False)
|
|
|
|
@ -96,17 +130,22 @@ def send_mail(book_id, kindle_mail):
|
|
|
|
|
|
|
|
|
|
# send email
|
|
|
|
|
try:
|
|
|
|
|
mail_server = smtplib.SMTP(host=settings["mail_server"],
|
|
|
|
|
port=settings["mail_port"])
|
|
|
|
|
mail_server.login(settings["mail_login"], settings["mail_password"])
|
|
|
|
|
mail_server.sendmail(settings["mail_login"], kindle_mail, msg)
|
|
|
|
|
mail_server.close()
|
|
|
|
|
mailserver = smtplib.SMTP(settings["mail_server"],settings["mail_port"])
|
|
|
|
|
mailserver.set_debuglevel(0)
|
|
|
|
|
|
|
|
|
|
if int(use_ssl) == 1:
|
|
|
|
|
mailserver.ehlo()
|
|
|
|
|
mailserver.starttls()
|
|
|
|
|
mailserver.ehlo()
|
|
|
|
|
|
|
|
|
|
mailserver.login(settings["mail_login"], settings["mail_password"])
|
|
|
|
|
mailserver.sendmail(settings["mail_login"], kindle_mail, msg)
|
|
|
|
|
mailserver.quit()
|
|
|
|
|
except smtplib.SMTPException:
|
|
|
|
|
traceback.print_exc()
|
|
|
|
|
return False
|
|
|
|
|
#sys.exit(7)
|
|
|
|
|
return "Error communicating with the mail server, please check the logs for details."
|
|
|
|
|
|
|
|
|
|
return True
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_attachment(file_path):
|
|
|
|
|