diff --git a/cps/helper.py b/cps/helper.py index caff999a..db9526b3 100755 --- a/cps/helper.py +++ b/cps/helper.py @@ -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): diff --git a/cps/static/favicon.ico b/cps/static/favicon.ico new file mode 100644 index 00000000..75e6ecc3 Binary files /dev/null and b/cps/static/favicon.ico differ diff --git a/cps/static/js/main.js b/cps/static/js/main.js index 7a0d17ce..31e82237 100755 --- a/cps/static/js/main.js +++ b/cps/static/js/main.js @@ -1,5 +1,4 @@ - $(function() { $('.discover .row').isotope({ // options @@ -20,6 +19,13 @@ $(function() { }, function(data){ $('.load-more .row').isotope( 'appended', $(data), null ); }); + + $('#sendbtn').click(function(){ + var $this = $(this); + $this.text('Please wait...'); + $this.addClass('disabled'); + }); + }); $(window).resize(function(event) { diff --git a/cps/templates/detail.html b/cps/templates/detail.html index 2d327cd9..0a735db9 100644 --- a/cps/templates/detail.html +++ b/cps/templates/detail.html @@ -76,7 +76,7 @@ {% if g.user.kindle_mail %} - Send to Kindle + Send to Kindle {% endif %} Read in browser diff --git a/cps/templates/email_edit.html b/cps/templates/email_edit.html index 31bd286d..0787107d 100644 --- a/cps/templates/email_edit.html +++ b/cps/templates/email_edit.html @@ -8,9 +8,13 @@