diff --git a/cps/config_sql.py b/cps/config_sql.py index 56ec3b8e..d25e5c04 100644 --- a/cps/config_sql.py +++ b/cps/config_sql.py @@ -117,17 +117,12 @@ class _Settings(_Base): config_ldap_group_members_field = Column(String, default='memberUid') config_ldap_group_name = Column(String, default='calibreweb') - # config_ebookconverter = Column(Integer, default=0) - config_kepubifypath = Column(String) - config_converterpath = Column(String) + config_kepubifypath = Column(String, default=None) + config_converterpath = Column(String, default=None) config_calibre = Column(String) - config_rarfile_location = Column(String) + config_rarfile_location = Column(String, default=None) 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) @@ -271,7 +266,8 @@ class _ConfigSQL(object): setattr(self, k, v) if self.config_google_drive_watch_changes_response: - self.config_google_drive_watch_changes_response = json.loads(self.config_google_drive_watch_changes_response) + self.config_google_drive_watch_changes_response = \ + json.loads(self.config_google_drive_watch_changes_response) have_metadata_db = bool(self.config_calibre_dir) if have_metadata_db: @@ -280,6 +276,16 @@ class _ConfigSQL(object): have_metadata_db = os.path.isfile(db_file) self.db_configured = have_metadata_db + if self.config_converterpath == None: + self.config_converterpath = autodetect_calibre_binary() + + if self.config_kepubifypath == None: + self.config_kepubifypath = autodetect_kepubify_binary() + + if self.config_rarfile_location == None: + self.config_rarfile_location = autodetect_unrar_binary() + + logger.setup(self.config_logfile, self.config_log_level) def save(self): @@ -337,6 +343,7 @@ def _migrate_table(session, orm_class): if changed: session.commit() + def autodetect_calibre_binary(): if sys.platform == "win32": calibre_path = ["C:\\program files\calibre\calibre-convert.exe", @@ -346,8 +353,29 @@ def autodetect_calibre_binary(): for element in calibre_path: if os.path.isfile(element) and os.access(element, os.X_OK): return element - return None + return "" +def autodetect_unrar_binary(): + if sys.platform == "win32": + calibre_path = ["C:\\program files\\WinRar\\unRAR.exe", + "C:\\program files(x86)\\WinRar\\unRAR.exe"] + else: + calibre_path = ["/usr/bin/unrar"] + for element in calibre_path: + if os.path.isfile(element) and os.access(element, os.X_OK): + return element + return "" + +def autodetect_kepubify_binary(): + if sys.platform == "win32": + calibre_path = ["C:\\program files\\kepubify\\kepubify-windows-64Bit.exe", + "C:\\program files(x86)\\kepubify\\kepubify-windows-64Bit.exe"] + else: + calibre_path = ["/opt/kepubify/kepubify-linux-64bit", "/opt/kepubify/kepubify-linux-32bit"] + for element in calibre_path: + if os.path.isfile(element) and os.access(element, os.X_OK): + return element + return "" def _migrate_database(session): # make sure the table is created, if it does not exist diff --git a/cps/editbooks.py b/cps/editbooks.py index 13e26f5b..79e3eafe 100644 --- a/cps/editbooks.py +++ b/cps/editbooks.py @@ -24,7 +24,7 @@ from __future__ import division, print_function, unicode_literals import os from datetime import datetime import json -from shutil import move, copyfile +from shutil import copyfile from uuid import uuid4 from flask import Blueprint, request, flash, redirect, url_for, abort, Markup, Response @@ -267,19 +267,27 @@ def render_edit_book(book_id): # Option for showing convertbook button valid_source_formats=list() + allowed_conversion_formats = list() + kepub_possible=None if config.config_converterpath: for file in book.data: if file.format.lower() in constants.EXTENSIONS_CONVERT: valid_source_formats.append(file.format.lower()) + if config.config_kepubifypath and 'epub' in [file.format.lower() for file in book.data]: + kepub_possible = True + if not config.config_converterpath: + valid_source_formats.append('epub') # Determine what formats don't already exist - allowed_conversion_formats = constants.EXTENSIONS_CONVERT.copy() - for file in book.data: - try: - allowed_conversion_formats.remove(file.format.lower()) - except Exception: - log.warning('%s already removed from list.', file.format.lower()) - + if config.config_converterpath: + allowed_conversion_formats = constants.EXTENSIONS_CONVERT.copy() + for file in book.data: + try: + allowed_conversion_formats.remove(file.format.lower()) + except Exception: + log.warning('%s already removed from list.', file.format.lower()) + if kepub_possible: + allowed_conversion_formats.append('kepub') return render_title_template('book_edit.html', book=book, authors=author_names, cc=cc, title=_(u"edit metadata"), page="editbook", conversion_formats=allowed_conversion_formats, diff --git a/cps/ub.py b/cps/ub.py index f9227a44..cfedf360 100644 --- a/cps/ub.py +++ b/cps/ub.py @@ -107,6 +107,11 @@ def get_sidebar_config(kwargs=None): {"glyph": "glyphicon-trash", "text": _('Archived Books'), "link": 'web.books_list', "id": "archived", "visibility": constants.SIDEBAR_ARCHIVED, 'public': (not g.user.is_anonymous), "page": "archived", "show_text": _('Show archived books'), "config_show": content}) + sidebar.append( + {"glyph": "glyphicon-th-list", "text": _('Books List'), "link": 'web.books_list', "id": "list", + "visibility": constants.SIDEBAR_LIST, 'public': (not g.user.is_anonymous), "page": "list", + "show_text": _('Show Books List'), "config_show": content}) + return sidebar