Merge branch 'master' into cover_thumbnail
This commit is contained in:
		
						commit
						fe5d684d2c
					
				|  | @ -91,7 +91,7 @@ if wtf_present: | |||
| else: | ||||
|     csrf = None | ||||
| 
 | ||||
| ub.init_db(cli.settingspath) | ||||
| ub.init_db(cli.settings_path) | ||||
| # pylint: disable=no-member | ||||
| config = config_sql.load_configuration(ub.session) | ||||
| 
 | ||||
|  | @ -106,7 +106,7 @@ log = logger.create() | |||
| from . import services | ||||
| 
 | ||||
| db.CalibreDB.update_config(config) | ||||
| db.CalibreDB.setup_db(config.config_calibre_dir, cli.settingspath) | ||||
| db.CalibreDB.setup_db(config.config_calibre_dir, cli.settings_path) | ||||
| 
 | ||||
| 
 | ||||
| calibre_db = db.CalibreDB() | ||||
|  |  | |||
							
								
								
									
										13
									
								
								cps/cli.py
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								cps/cli.py
									
									
									
									
									
								
							|  | @ -24,7 +24,7 @@ import socket | |||
| from .constants import CONFIG_DIR as _CONFIG_DIR | ||||
| from .constants import STABLE_VERSION as _STABLE_VERSION | ||||
| from .constants import NIGHTLY_VERSION as _NIGHTLY_VERSION | ||||
| 
 | ||||
| from .constants import DEFAULT_SETTINGS_FILE, DEFAULT_GDRIVE_FILE | ||||
| 
 | ||||
| def version_info(): | ||||
|     if _NIGHTLY_VERSION[1].startswith('$Format'): | ||||
|  | @ -51,8 +51,15 @@ parser.add_argument('-d', action='store_true', help='Dry run of updater to check | |||
| parser.add_argument('-r', action='store_true', help='Enable public database reconnect route under /reconnect') | ||||
| args = parser.parse_args() | ||||
| 
 | ||||
| settingspath = args.p or os.path.join(_CONFIG_DIR, "app.db") | ||||
| gdpath       = args.g or os.path.join(_CONFIG_DIR, "gdrive.db") | ||||
| settings_path = args.p or os.path.join(_CONFIG_DIR, DEFAULT_SETTINGS_FILE) | ||||
| gd_path = args.g or os.path.join(_CONFIG_DIR, DEFAULT_GDRIVE_FILE) | ||||
| 
 | ||||
| if os.path.isdir(settings_path): | ||||
|     settings_path = os.path.join(settings_path, DEFAULT_SETTINGS_FILE) | ||||
| 
 | ||||
| if os.path.isdir(gd_path): | ||||
|     gd_path = os.path.join(gd_path, DEFAULT_GDRIVE_FILE) | ||||
| 
 | ||||
| 
 | ||||
| # handle and check parameter for ssl encryption | ||||
| certfilepath = None | ||||
|  |  | |||
|  | @ -50,6 +50,8 @@ if HOME_CONFIG: | |||
| else: | ||||
|     CONFIG_DIR = os.environ.get('CALIBRE_DBPATH', BASE_DIR) | ||||
| 
 | ||||
| DEFAULT_SETTINGS_FILE = "app.db" | ||||
| DEFAULT_GDRIVE_FILE = "gdrive.db" | ||||
| 
 | ||||
| ROLE_USER               = 0 << 0 | ||||
| ROLE_ADMIN              = 1 << 0 | ||||
|  |  | |||
|  | @ -811,7 +811,7 @@ def edit_book(book_id): | |||
|             if to_save["cover_url"].endswith('/static/generic_cover.jpg'): | ||||
|                 book.has_cover = 0 | ||||
|             else: | ||||
|                 result, error = helper.save_cover_from_url(to_save["cover_url"], book.path) | ||||
|                 result, error = helper.save_cover_from_url(to_save["cover_url"].strip(), book.path) | ||||
|                 if result is True: | ||||
|                     book.has_cover = 1 | ||||
|                     modify_date = True | ||||
|  |  | |||
|  | @ -35,10 +35,6 @@ except ImportError: | |||
| from sqlalchemy.exc import OperationalError, InvalidRequestError, IntegrityError | ||||
| from sqlalchemy.sql.expression import text | ||||
| 
 | ||||
| #try: | ||||
| #    from six import __version__ as six_version | ||||
| #except ImportError: | ||||
| #    six_version = "not installed" | ||||
| try: | ||||
|     from httplib2 import __version__ as httplib2_version | ||||
| except ImportError: | ||||
|  | @ -141,11 +137,12 @@ class Gdrive: | |||
|     def __init__(self): | ||||
|         self.drive = getDrive(gauth=Gauth.Instance().auth) | ||||
| 
 | ||||
| 
 | ||||
| def is_gdrive_ready(): | ||||
|     return os.path.exists(SETTINGS_YAML) and os.path.exists(CREDENTIALS) | ||||
| 
 | ||||
| 
 | ||||
| engine = create_engine('sqlite:///{0}'.format(cli.gdpath), echo=False) | ||||
| engine = create_engine('sqlite:///{0}'.format(cli.gd_path), echo=False) | ||||
| Base = declarative_base() | ||||
| 
 | ||||
| # Open session for database connection | ||||
|  | @ -193,11 +190,11 @@ def migrate(): | |||
|                 session.execute('ALTER TABLE gdrive_ids2 RENAME to gdrive_ids') | ||||
|             break | ||||
| 
 | ||||
| if not os.path.exists(cli.gdpath): | ||||
| if not os.path.exists(cli.gd_path): | ||||
|     try: | ||||
|         Base.metadata.create_all(engine) | ||||
|     except Exception as ex: | ||||
|         log.error("Error connect to database: {} - {}".format(cli.gdpath, ex)) | ||||
|         log.error("Error connect to database: {} - {}".format(cli.gd_path, ex)) | ||||
|         raise | ||||
| migrate() | ||||
| 
 | ||||
|  |  | |||
|  | @ -819,6 +819,9 @@ def save_cover_from_url(url, book_path): | |||
|             log.error("python modul advocate is not installed but is needed") | ||||
|             return False, _("Python modul 'advocate' is not installed but is needed for cover downloads") | ||||
|         img.raise_for_status() | ||||
|         #            # cover_processing() | ||||
|             # move_coverfile(meta, db_book) | ||||
| 
 | ||||
|         return save_cover(img, book_path) | ||||
|     except (socket.gaierror, | ||||
|             requests.exceptions.HTTPError, | ||||
|  | @ -868,24 +871,23 @@ def save_cover(img, book_path): | |||
|     content_type = img.headers.get('content-type') | ||||
| 
 | ||||
|     if use_IM: | ||||
|         if content_type not in ('image/jpeg', 'image/png', 'image/webp', 'image/bmp'): | ||||
|         if content_type not in ('image/jpeg', 'image/jpg', 'image/png', 'image/webp', 'image/bmp'): | ||||
|             log.error("Only jpg/jpeg/png/webp/bmp files are supported as coverfile") | ||||
|             return False, _("Only jpg/jpeg/png/webp/bmp files are supported as coverfile") | ||||
|         # convert to jpg because calibre only supports jpg | ||||
|         if content_type != 'image/jpg': | ||||
|             try: | ||||
|                 if hasattr(img, 'stream'): | ||||
|                     imgc = Image(blob=img.stream) | ||||
|                 else: | ||||
|                     imgc = Image(blob=io.BytesIO(img.content)) | ||||
|                 imgc.format = 'jpeg' | ||||
|                 imgc.transform_colorspace("rgb") | ||||
|                 img = imgc | ||||
|             except (BlobError, MissingDelegateError): | ||||
|                 log.error("Invalid cover file content") | ||||
|                 return False, _("Invalid cover file content") | ||||
|         try: | ||||
|             if hasattr(img, 'stream'): | ||||
|                 imgc = Image(blob=img.stream) | ||||
|             else: | ||||
|                 imgc = Image(blob=io.BytesIO(img.content)) | ||||
|             imgc.format = 'jpeg' | ||||
|             imgc.transform_colorspace("rgb") | ||||
|             img = imgc | ||||
|         except (BlobError, MissingDelegateError): | ||||
|             log.error("Invalid cover file content") | ||||
|             return False, _("Invalid cover file content") | ||||
|     else: | ||||
|         if content_type not in 'image/jpeg': | ||||
|         if content_type not in ['image/jpeg', 'image/jpg']: | ||||
|             log.error("Only jpg/jpeg files are supported as coverfile") | ||||
|             return False, _("Only jpg/jpeg files are supported as coverfile") | ||||
| 
 | ||||
|  |  | |||
|  | @ -125,6 +125,7 @@ class LubimyCzytac(Metadata): | |||
|                         ) | ||||
|                     return final_matches | ||||
|                 return matches | ||||
|             return [] | ||||
| 
 | ||||
|     def _prepare_query(self, title: str) -> str: | ||||
|         query = "" | ||||
|  |  | |||
|  | @ -381,8 +381,8 @@ $(function() { | |||
|             //extraScrollPx: 300
 | ||||
|         }); | ||||
|         $loadMore.on( "append.infiniteScroll", function( event, response, path, data ) { | ||||
|             $(".pagination").addClass("hidden").html(() => $(response).find(".pagination").html()); | ||||
|             if ($("body").hasClass("blur")) { | ||||
|                 $(".pagination").addClass("hidden").html(() => $(response).find(".pagination").html()); | ||||
|                 $(" a:not(.dropdown-toggle) ") | ||||
|                   .removeAttr("data-toggle"); | ||||
|             } | ||||
|  |  | |||
|  | @ -231,7 +231,7 @@ def pdf_meta(tmp_file_path, original_file_name, original_file_extension): | |||
|         if title == '': | ||||
|             title = doc_info.title if doc_info.title else original_file_name | ||||
|         if subject == '': | ||||
|             subject = doc_info.subject | ||||
|             subject = doc_info.subject or "" | ||||
|         if tags == '' and '/Keywords' in doc_info: | ||||
|             if isinstance(doc_info['/Keywords'], bytes): | ||||
|                 tags = doc_info['/Keywords'].decode('utf-8') | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| # GDrive Integration | ||||
| google-api-python-client>=1.7.11,<2.43.0 | ||||
| google-api-python-client>=1.7.11,<2.44.0 | ||||
| gevent>20.6.0,<22.0.0 | ||||
| greenlet>=0.4.17,<1.2.0 | ||||
| httplib2>=0.9.2,<0.21.0 | ||||
|  | @ -13,7 +13,7 @@ rsa>=3.4.2,<4.9.0 | |||
| 
 | ||||
| # Gmail | ||||
| google-auth-oauthlib>=0.4.3,<0.6.0 | ||||
| google-api-python-client>=1.7.11,<2.43.0 | ||||
| google-api-python-client>=1.7.11,<2.44.0 | ||||
| 
 | ||||
| # goodreads | ||||
| goodreads>=0.3.2,<0.4.0 | ||||
|  |  | |||
|  | @ -62,7 +62,7 @@ install_requires = | |||
| 
 | ||||
| [options.extras_require] | ||||
| gdrive =  | ||||
| 	google-api-python-client>=1.7.11,<2.43.0 | ||||
| 	google-api-python-client>=1.7.11,<2.44.0 | ||||
| 	gevent>20.6.0,<22.0.0 | ||||
| 	greenlet>=0.4.17,<1.2.0 | ||||
| 	httplib2>=0.9.2,<0.21.0 | ||||
|  | @ -75,7 +75,7 @@ gdrive = | |||
| 	rsa>=3.4.2,<4.9.0 | ||||
| gmail =  | ||||
| 	google-auth-oauthlib>=0.4.3,<0.6.0 | ||||
| 	google-api-python-client>=1.7.11,<2.43.0 | ||||
| 	google-api-python-client>=1.7.11,<2.44.0 | ||||
| goodreads =  | ||||
| 	goodreads>=0.3.2,<0.4.0 | ||||
| 	python-Levenshtein>=0.12.0,<0.13.0 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user