diff --git a/cps/admin.py b/cps/admin.py index f6d4a917..4efd5bb5 100644 --- a/cps/admin.py +++ b/cps/admin.py @@ -538,6 +538,11 @@ def _configuration_update_helper(): _config_string("config_converterpath") _config_string("config_kepubifypath") + + _config_checkbox_int("config_automatic_kepub") + _config_string("config_kepubify_path") + _config_string("config_kepub_cache_dir") + reboot_required |= _config_int("config_login_type") #LDAP configurator, diff --git a/cps/config_sql.py b/cps/config_sql.py index 603d38d5..56ec3b8e 100644 --- a/cps/config_sql.py +++ b/cps/config_sql.py @@ -124,6 +124,10 @@ class _Settings(_Base): config_rarfile_location = Column(String) config_upload_formats = Column(String, default=','.join(constants.EXTENSIONS_UPLOAD)) + config_automatic_kepub = Column(Boolean, default=False) + config_kepubify_path = Column(String) + config_kepub_cache_dir = Column(String) + config_updatechannel = Column(Integer, default=constants.UPDATE_STABLE) config_reverse_proxy_login_header_name = Column(String) diff --git a/cps/helper.py b/cps/helper.py index fcabf2f0..d254a669 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -593,7 +593,8 @@ def save_cover(img, book_path): return save_cover_from_filestorage(os.path.join(config.config_calibre_dir, book_path), "cover.jpg", img) -def do_download_file(book, book_format, data, headers): + +def do_download_file(book, book_format, client, data, headers): if config.config_use_google_drive: startTime = time.time() df = gd.getFileFromEbooksFolder(book.path, data.name + "." + book_format) @@ -607,7 +608,18 @@ def do_download_file(book, book_format, data, headers): if not os.path.isfile(os.path.join(filename, data.name + "." + book_format)): # ToDo: improve error handling log.error('File not found: %s', os.path.join(filename, data.name + "." + book_format)) + + if client == "kobo" and book_format == "epub": + filename = config.config_kepub_cache_dir + os.system('{0} "{1}" -o {2}'.format( + config.config_kepubify_path, + os.path.join(filename, data.name + "." + book_format), + filename)) + book_format = "kepub.epub" + headers["Content-Disposition"] = headers["Content-Disposition"].replace(".epub", ".kepub.epub") + response = make_response(send_from_directory(filename, data.name + "." + book_format)) + response.headers = headers return response @@ -876,8 +888,7 @@ def get_cc_columns(filter_config_custom_read=False): return cc - -def get_download_link(book_id, book_format): +def get_download_link(book_id, book_format, client): book_format = book_format.split(".")[0] book = db.session.query(db.Books).filter(db.Books.id == book_id).filter(common_filters()).first() if book: @@ -897,7 +908,7 @@ def get_download_link(book_id, book_format): headers["Content-Type"] = mimetypes.types_map.get('.' + book_format, "application/octet-stream") headers["Content-Disposition"] = "attachment; filename=%s.%s; filename*=UTF-8''%s.%s" % ( quote(file_name.encode('utf-8')), book_format, quote(file_name.encode('utf-8')), book_format) - return do_download_file(book, book_format, data1, headers) + return do_download_file(book, book_format, client, data1, headers) else: abort(404) diff --git a/cps/templates/config_edit.html b/cps/templates/config_edit.html index 647ac762..9fded88e 100644 --- a/cps/templates/config_edit.html +++ b/cps/templates/config_edit.html @@ -363,6 +363,18 @@ +
+ + +
+
+ + +
+
+ + +
{% if feature_support['rar'] %}
diff --git a/cps/web.py b/cps/web.py index 7ece77b1..9ae3cd49 100644 --- a/cps/web.py +++ b/cps/web.py @@ -1233,7 +1233,11 @@ def serve_book(book_id, book_format, anyname): @login_required_if_no_ano @download_required def download_link(book_id, book_format, anyname): - return get_download_link(book_id, book_format.lower()) + if (config.config_automatic_kepub and + "Kobo" in request.headers.get('User-Agent')): + client = "kobo" + + return get_download_link(book_id, book_format, client) @web.route('/send///')