mirror of
				https://github.com/janeczku/calibre-web
				synced 2025-10-31 15:23:02 +00:00 
			
		
		
		
	Converting books from gdrive implemented
This commit is contained in:
		| @@ -86,6 +86,8 @@ def convert_kindlegen(file_path, book): | |||||||
|             uncompressed_size=os.path.getsize(file_path + ".mobi") |             uncompressed_size=os.path.getsize(file_path + ".mobi") | ||||||
|         )) |         )) | ||||||
|         db.session.commit() |         db.session.commit() | ||||||
|  |         if ub.config.config_use_google_drive: | ||||||
|  |             os.remove(file_path + u".epub") | ||||||
|         return file_path + ".mobi", RET_SUCCESS |         return file_path + ".mobi", RET_SUCCESS | ||||||
|     else: |     else: | ||||||
|         web.app.logger.info("convert_kindlegen: kindlegen failed with error while converting book") |         web.app.logger.info("convert_kindlegen: kindlegen failed with error while converting book") | ||||||
| @@ -101,8 +103,8 @@ def convert_calibre(file_path, book): | |||||||
|         web.app.logger.error("convert_calibre: " + error_message) |         web.app.logger.error("convert_calibre: " + error_message) | ||||||
|         return error_message, RET_FAIL |         return error_message, RET_FAIL | ||||||
|     try: |     try: | ||||||
|         command = ("\""+ub.config.config_converterpath + "\" " + ub.config.config_calibre + |         command = ("\""+ub.config.config_converterpath + "\" \"" + file_path + u".epub\" \"" | ||||||
|                   " \"" + file_path + u".epub\" \"" + file_path + u".mobi\"").encode(sys.getfilesystemencoding()) |                    + file_path + u".mobi\" " + ub.config.config_calibre).encode(sys.getfilesystemencoding()) | ||||||
|         p = subprocess.Popen(command,stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) |         p = subprocess.Popen(command,stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) | ||||||
|     except Exception as e: |     except Exception as e: | ||||||
|         error_message = _(u"Ebook-convert failed, no execution permissions") |         error_message = _(u"Ebook-convert failed, no execution permissions") | ||||||
| @@ -124,6 +126,9 @@ def convert_calibre(file_path, book): | |||||||
|             uncompressed_size=os.path.getsize(file_path + ".mobi") |             uncompressed_size=os.path.getsize(file_path + ".mobi") | ||||||
|         )) |         )) | ||||||
|         db.session.commit() |         db.session.commit() | ||||||
|  |         if ub.config.config_use_google_drive: | ||||||
|  |             os.remove(file_path + u".epub") | ||||||
|  |  | ||||||
|         return file_path + ".mobi", RET_SUCCESS |         return file_path + ".mobi", RET_SUCCESS | ||||||
|     else: |     else: | ||||||
|         web.app.logger.info("convert_calibre: Ebook-convert failed with error while converting book") |         web.app.logger.info("convert_calibre: Ebook-convert failed with error while converting book") | ||||||
|   | |||||||
| @@ -74,10 +74,25 @@ def make_mobi(book_id, calibrepath): | |||||||
|         error_message = _(u"epub format not found for book id: %(book)d", book=book_id) |         error_message = _(u"epub format not found for book id: %(book)d", book=book_id) | ||||||
|         app.logger.error("make_mobi: " + error_message) |         app.logger.error("make_mobi: " + error_message) | ||||||
|         return error_message, RET_FAIL |         return error_message, RET_FAIL | ||||||
|  |     if ub.config.config_use_google_drive: | ||||||
|  |         df = gd.getFileFromEbooksFolder(book.path, data.name + u".epub") | ||||||
|  |         if df: | ||||||
|  |             datafile = os.path.join(calibrepath, book.path, data.name + u".epub") | ||||||
|  |             if not os.path.exists(os.path.join(calibrepath, book.path)): | ||||||
|  |                 os.makedirs(os.path.join(calibrepath, book.path)) | ||||||
|  |             df.GetContentFile(datafile) | ||||||
|  |         else: | ||||||
|  |             error_message = "make_mobi: epub not found on gdrive: %s.epub" % data.name | ||||||
|  |             return error_message, RET_FAIL | ||||||
|  |     # else: | ||||||
|     file_path = os.path.join(calibrepath, book.path, data.name) |     file_path = os.path.join(calibrepath, book.path, data.name) | ||||||
|     if os.path.exists(file_path + u".epub"): |     if os.path.exists(file_path + u".epub"): | ||||||
|         return converter.convert_mobi(file_path, book) |         # convert book, and upload in case of google drive | ||||||
|  |         res = converter.convert_mobi(file_path, book) | ||||||
|  |         if ub.config.config_use_google_drive: | ||||||
|  |             gd.updateGdriveCalibreFromLocal() | ||||||
|  |             # time.sleep(10) | ||||||
|  |         return res | ||||||
|     else: |     else: | ||||||
|         error_message = "make_mobi: epub not found: %s.epub" % file_path |         error_message = "make_mobi: epub not found: %s.epub" % file_path | ||||||
|         return error_message, RET_FAIL |         return error_message, RET_FAIL | ||||||
| @@ -104,17 +119,18 @@ def send_mail(book_id, kindle_mail, calibrepath, user_id): | |||||||
|     msg.attach(MIMEText(text.encode('UTF-8'), 'plain', 'UTF-8')) |     msg.attach(MIMEText(text.encode('UTF-8'), 'plain', 'UTF-8')) | ||||||
|  |  | ||||||
|     book = db.session.query(db.Books).filter(db.Books.id == book_id).first() |     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) |     data = db.session.query(db.Data).filter(db.Data.book == book.id).all() | ||||||
|  |  | ||||||
|     formats = {} |     formats = {} | ||||||
|  |     index = 0 | ||||||
|     for entry in data: |     for indx,entry in enumerate(data): | ||||||
|         if entry.format == "MOBI": |         if entry.format == "MOBI": | ||||||
|             formats["mobi"] = entry.name + ".mobi" # os.path.join(calibrepath, book.path, entry.name + ".mobi") |             formats["mobi"] = entry.name + ".mobi" | ||||||
|         if entry.format == "EPUB": |         if entry.format == "EPUB": | ||||||
|             formats["epub"] = entry.name + ".epub" # os.path.join(calibrepath, book.path, entry.name + ".epub") |             formats["epub"] = entry.name + ".epub" | ||||||
|  |             index = indx | ||||||
|         if entry.format == "PDF": |         if entry.format == "PDF": | ||||||
|             formats["pdf"] = entry.name + ".pdf" # os.path.join(calibrepath, book.path, entry.name + ".pdf") |             formats["pdf"] = entry.name + ".pdf" | ||||||
|  |  | ||||||
|     if len(formats) == 0: |     if len(formats) == 0: | ||||||
|         return _("Could not find any formats suitable for sending by email") |         return _("Could not find any formats suitable for sending by email") | ||||||
| @@ -124,14 +140,15 @@ def send_mail(book_id, kindle_mail, calibrepath, user_id): | |||||||
|         if result: |         if result: | ||||||
|             msg.attach(result) |             msg.attach(result) | ||||||
|     elif 'epub' in formats: |     elif 'epub' in formats: | ||||||
|  |         # returns filename if sucess, otherwise errormessage | ||||||
|         data, resultCode = make_mobi(book.id, calibrepath) |         data, resultCode = make_mobi(book.id, calibrepath) | ||||||
|         if resultCode == RET_SUCCESS: |         if resultCode == RET_SUCCESS: | ||||||
|             result = get_attachment(calibrepath, book.path, data) # toDo check data |             result = get_attachment(calibrepath, book.path, os.path.basename(data)) | ||||||
|             if result: |             if result: | ||||||
|                 msg.attach(result) |                 msg.attach(result) | ||||||
|         else: |         else: | ||||||
|             app.logger.error = data |             app.logger.error(data) | ||||||
|             return data  # _("Could not convert epub to mobi") |             return data | ||||||
|     elif 'pdf' in formats: |     elif 'pdf' in formats: | ||||||
|         result = get_attachment(calibrepath, book.path, formats['pdf']) |         result = get_attachment(calibrepath, book.path, formats['pdf']) | ||||||
|         if result: |         if result: | ||||||
| @@ -144,22 +161,25 @@ def send_mail(book_id, kindle_mail, calibrepath, user_id): | |||||||
|     else: |     else: | ||||||
|         return _('The requested file could not be read. Maybe wrong permissions?') |         return _('The requested file could not be read. Maybe wrong permissions?') | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # For gdrive download book from gdrive to calibredir (temp dir for books), read contents in both cases and append | ||||||
|  | # it in MIME Base64 encoded to | ||||||
| def get_attachment(calibrepath, bookpath, filename): | def get_attachment(calibrepath, bookpath, filename): | ||||||
|     """Get file as MIMEBase message""" |     """Get file as MIMEBase message""" | ||||||
|     if ub.config.config_use_google_drive: |     if ub.config.config_use_google_drive: | ||||||
|         df = gd.getFileFromEbooksFolder(bookpath, filename) |         df = gd.getFileFromEbooksFolder(bookpath, filename) | ||||||
|         if df: |         if df: | ||||||
|             # tmpDir = gettempdir() |  | ||||||
|             datafile = os.path.join(calibrepath, bookpath, filename) |             datafile = os.path.join(calibrepath, bookpath, filename) | ||||||
|             if not os.path.exists(os.path.join(calibrepath, bookpath)): |             if not os.path.exists(os.path.join(calibrepath, bookpath)): | ||||||
|                 os.makedirs(os.path.join(calibrepath, bookpath)) |                 os.makedirs(os.path.join(calibrepath, bookpath)) | ||||||
|             df.GetContentFile(datafile) |             df.GetContentFile(datafile) | ||||||
|  |         else: | ||||||
|  |             return None | ||||||
|         file_ = open(datafile, 'rb') |         file_ = open(datafile, 'rb') | ||||||
|         data = file_.read() |         data = file_.read() | ||||||
|         file_.close() |         file_.close() | ||||||
|         os.remove(datafile) |         os.remove(datafile) | ||||||
|         else: |  | ||||||
|             return None |  | ||||||
|     else: |     else: | ||||||
|         try: |         try: | ||||||
|             file_ = open(os.path.join(calibrepath, bookpath, filename), 'rb') |             file_ = open(os.path.join(calibrepath, bookpath, filename), 'rb') | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Ozzie Isaacs
					Ozzie Isaacs