From c5c3874243c45436975dd780c96198c3ee5199b6 Mon Sep 17 00:00:00 2001 From: Thore Schillmann Date: Fri, 1 Jul 2022 16:04:25 +0000 Subject: [PATCH 01/20] first implementation --- cps/helper.py | 25 +++++++++++++++++++++++-- cps/tasks/convert.py | 1 + 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/cps/helper.py b/cps/helper.py index 31b15eb9..885ffba5 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -54,7 +54,7 @@ from .tasks.convert import TaskConvert from . import logger, config, db, ub, fs from . import gdriveutils as gd from .constants import STATIC_DIR as _STATIC_DIR, CACHE_TYPE_THUMBNAILS, THUMBNAIL_TYPE_COVER, THUMBNAIL_TYPE_SERIES, SUPPORTED_CALIBRE_BINARIES -from .subproc_wrapper import process_wait +from .subproc_wrapper import process_wait, process_open from .services.worker import WorkerThread from .tasks.mail import TaskEmail from .tasks.thumbnail import TaskClearCoverThumbnailCache, TaskGenerateCoverThumbnails @@ -911,7 +911,28 @@ def do_download_file(book, book_format, client, data, headers): if client == "kobo" and book_format == "kepub": headers["Content-Disposition"] = headers["Content-Disposition"].replace(".kepub", ".kepub.epub") - response = make_response(send_from_directory(filename, data.name + "." + book_format)) + if config.config_binariesdir: + try: + quotes = [3, 5, 7, 9] + tmp_dir = os.path.join(gettempdir(), 'calibre_web') + if not os.path.isdir(tmp_dir): + os.mkdir(tmp_dir) + calibredb_binarypath = config.get_calibre_binarypath("calibredb") + opf_command = [calibredb_binarypath, 'export', '--dont-write-opf', str(book.id), + '--with-library', config.config_calibre_dir, '--to-dir', tmp_dir, + '--formats', book_format, "--template", "{} - {{authors}}".format(book.title)] + file_name = book.title + if len(book.authors) > 0: + file_name = file_name + ' - ' + book.authors[0].name + p = process_open(opf_command, quotes) + _, err = p.communicate() + if err: + log.error('Metadata embedder encountered an error: %s', err) + except (ValueError, OSError) as e: + # ToDo real error handling + log.error_or_exception(e) + + response = make_response(send_from_directory(tmp_dir, file_name + "." + book_format)) # ToDo Check headers parameter for element in headers: response.headers[element[0]] = element[1] diff --git a/cps/tasks/convert.py b/cps/tasks/convert.py index 1c9975e1..594f0c38 100644 --- a/cps/tasks/convert.py +++ b/cps/tasks/convert.py @@ -241,6 +241,7 @@ class TaskConvert(CalibreTask): calibredb_binarypath = config.get_calibre_binarypath("calibredb") opf_command = [calibredb_binarypath, 'show_metadata', '--as-opf', str(book_id), '--with-library', config.config_calibre_dir] p = process_open(opf_command, quotes) + p.wait() path_tmp_opf = os.path.join(tmp_dir, "metadata_" + str(current_milli_time()) + ".opf") with open(path_tmp_opf, 'w') as fd: copyfileobj(p.stdout, fd) From fc7ce8da2d2dee4f2c235ebce8c3ab59be832778 Mon Sep 17 00:00:00 2001 From: Thore Schillmann Date: Wed, 13 Jul 2022 15:39:01 +0000 Subject: [PATCH 02/20] cleanup --- cps/helper.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cps/helper.py b/cps/helper.py index 77323d0b..52174b02 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -917,7 +917,7 @@ def do_download_file(book, book_format, client, data, headers): tmp_dir = os.path.join(gettempdir(), 'calibre_web') if not os.path.isdir(tmp_dir): os.mkdir(tmp_dir) - calibredb_binarypath = config.get_calibre_binarypath("calibredb") + calibredb_binarypath = get_calibre_binarypath("calibredb") opf_command = [calibredb_binarypath, 'export', '--dont-write-opf', str(book.id), '--with-library', config.config_calibre_dir, '--to-dir', tmp_dir, '--formats', book_format, "--template", "{} - {{authors}}".format(book.title)] @@ -928,9 +928,9 @@ def do_download_file(book, book_format, client, data, headers): _, err = p.communicate() if err: log.error('Metadata embedder encountered an error: %s', err) - except (ValueError, OSError) as e: + except OSError as ex: # ToDo real error handling - log.error_or_exception(e) + log.error_or_exception(ex) response = make_response(send_from_directory(tmp_dir, file_name + "." + book_format)) # ToDo Check headers parameter From 0b4731913eadcd511246aa286867e7b9850d52f9 Mon Sep 17 00:00:00 2001 From: Thore Schillmann Date: Thu, 14 Jul 2022 09:25:37 +0000 Subject: [PATCH 03/20] created `do_calibre_export` function --- cps/helper.py | 55 +++++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/cps/helper.py b/cps/helper.py index 52174b02..282a22d3 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -894,9 +894,10 @@ def save_cover(img, book_path): def do_download_file(book, book_format, client, data, headers): + book_name = data.name if config.config_use_google_drive: # startTime = time.time() - df = gd.getFileFromEbooksFolder(book.path, data.name + "." + book_format) + df = gd.getFileFromEbooksFolder(book.path, book_name + "." + book_format) # log.debug('%s', time.time() - startTime) if df: return gd.do_gdrive_download(df, headers) @@ -904,41 +905,47 @@ def do_download_file(book, book_format, client, data, headers): abort(404) else: filename = os.path.join(config.config_calibre_dir, book.path) - if not os.path.isfile(os.path.join(filename, data.name + "." + book_format)): + if not os.path.isfile(os.path.join(filename, book_name + "." + book_format)): # ToDo: improve error handling - log.error('File not found: %s', os.path.join(filename, data.name + "." + book_format)) + log.error('File not found: %s', os.path.join(filename, book_name + "." + book_format)) if client == "kobo" and book_format == "kepub": headers["Content-Disposition"] = headers["Content-Disposition"].replace(".kepub", ".kepub.epub") if config.config_binariesdir: - try: - quotes = [3, 5, 7, 9] - tmp_dir = os.path.join(gettempdir(), 'calibre_web') - if not os.path.isdir(tmp_dir): - os.mkdir(tmp_dir) - calibredb_binarypath = get_calibre_binarypath("calibredb") - opf_command = [calibredb_binarypath, 'export', '--dont-write-opf', str(book.id), - '--with-library', config.config_calibre_dir, '--to-dir', tmp_dir, - '--formats', book_format, "--template", "{} - {{authors}}".format(book.title)] - file_name = book.title - if len(book.authors) > 0: - file_name = file_name + ' - ' + book.authors[0].name - p = process_open(opf_command, quotes) - _, err = p.communicate() - if err: - log.error('Metadata embedder encountered an error: %s', err) - except OSError as ex: - # ToDo real error handling - log.error_or_exception(ex) + filename, book_name = do_calibre_export(book, book_format) - response = make_response(send_from_directory(tmp_dir, file_name + "." + book_format)) + response = make_response(send_from_directory(filename, book_name + "." + book_format)) # ToDo Check headers parameter for element in headers: response.headers[element[0]] = element[1] - log.info('Downloading file: {}'.format(os.path.join(filename, data.name + "." + book_format))) + log.info('Downloading file: {}'.format(os.path.join(filename, book_name + "." + book_format))) return response + +def do_calibre_export(book, book_format): + try: + quotes = [3, 5, 7, 9] + tmp_dir = os.path.join(gettempdir(), 'calibre_web') + if not os.path.isdir(tmp_dir): + os.mkdir(tmp_dir) + calibredb_binarypath = get_calibre_binarypath("calibredb") + opf_command = [calibredb_binarypath, 'export', '--dont-write-opf', str(book.id), + '--with-library', config.config_calibre_dir, '--to-dir', tmp_dir, + '--formats', book_format, "--template", "{} - {{authors}}".format(book.title)] + file_name = book.title + if len(book.authors) > 0: + file_name = file_name + ' - ' + book.authors[0].name + p = process_open(opf_command, quotes) + _, err = p.communicate() + if err: + log.error('Metadata embedder encountered an error: %s', err) + return tmp_dir, file_name + except OSError as ex: + # ToDo real error handling + log.error_or_exception(ex) + + ################################## From 898e76fc37810029144a2d0998b988a3eff44184 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 13 Jan 2024 12:32:54 +0100 Subject: [PATCH 04/20] re enable gevent --- cps/server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/server.py b/cps/server.py index 30dad710..c0f83403 100644 --- a/cps/server.py +++ b/cps/server.py @@ -24,7 +24,7 @@ import socket import asyncio try: - from gevent_.pywsgi import WSGIServer + from gevent.pywsgi import WSGIServer from .gevent_wsgi import MyWSGIHandler from gevent.pool import Pool from gevent.socket import socket as GeventSocket From b9c329535d36217ff01fdfc8aa052ac053190fc9 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Thu, 18 Jan 2024 19:41:35 +0100 Subject: [PATCH 05/20] Fix for #2980 (invalid seriesindex causes no longer a crash) --- cps/jinjia.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/jinjia.py b/cps/jinjia.py index e42c650c..584e7d6b 100644 --- a/cps/jinjia.py +++ b/cps/jinjia.py @@ -124,7 +124,7 @@ def formatseriesindex_filter(series_index): return int(series_index) else: return series_index - except ValueError: + except (ValueError, TypeError): return series_index return 0 From 6972c1b8417b8d58f1e96f41d9669e8bcc6821b1 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sun, 21 Jan 2024 08:12:28 +0100 Subject: [PATCH 06/20] Improved errorhandling for adding invalid book_id to shelf --- cps/shelf.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cps/shelf.py b/cps/shelf.py index 5d05cfe2..abd28a26 100644 --- a/cps/shelf.py +++ b/cps/shelf.py @@ -71,6 +71,15 @@ def add_to_shelf(shelf_id, book_id): else: maxOrder = maxOrder[0] + if not ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id, + ub.BookShelf.book_id == book_id).one_or_none(): + log.error("Invalid Book Id: %s. Could not be added to shelf %s", book_id, shelf.name) + if not xhr: + flash(_("%(book_id)s is a invalid Book Id. Could not be added to Shelf", book_id=book_id), + category="error") + return redirect(url_for('web.index')) + return "%s is a invalid Book Id. Could not be added to Shelf" % book_id, 400 + shelf.books.append(ub.BookShelf(shelf=shelf.id, book_id=book_id, order=maxOrder + 1)) shelf.last_modified = datetime.utcnow() try: From cc52ad5d273679618f5f5dd2b30b77f4adb75d74 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sun, 21 Jan 2024 14:27:38 +0100 Subject: [PATCH 07/20] Added Notice --- .github/ISSUE_TEMPLATE/bug_report.md | 7 +++++++ .github/ISSUE_TEMPLATE/feature_request.md | 7 +++++++ README.md | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 666becdb..21a83e77 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,3 +1,10 @@ +# Short Notice from the maintainer + +After 6 years of more or less intensive programming on Caliber-Web, I need a break. +The last few months, maintaining Calibre-Web has felt more like work than a hobby. I felt pressured and teased by people to solve "their" problems and merge PRs for "their" Calibre-Web. +I have turned off all notifications from Github/Discord and will now concentrate undisturbed on the development of “my” Calibre-Web over the next few weeks/months. +I will look into the issues and meaybe also the PRs from time to time, but don't expect a quick response from me. + --- name: Bug/Problem report about: Create a report to help us improve Calibre-Web diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 6b2b9afc..ce8d061f 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,3 +1,10 @@ +# Short Notice from the maintainer + +After 6 years of more or less intensive programming on Caliber-Web, I need a break. +The last few months, maintaining Calibre-Web has felt more like work than a hobby. I felt pressured and teased by people to solve "their" problems and merge PRs for "their" Calibre-Web. +I have turned off all notifications from Github/Discord and will now concentrate undisturbed on the development of “my” Calibre-Web over the next few weeks/months. +I will look into the issues and meaybe also the PRs from time to time, but don't expect a quick response from me. + --- name: Feature request about: Suggest an idea for Calibre-Web diff --git a/README.md b/README.md index db8efe31..5c188faa 100755 --- a/README.md +++ b/README.md @@ -1,3 +1,10 @@ +# Short Notice from the maintainer + +After 6 years of more or less intensive programming on Caliber-Web, I need a break. +The last few months, maintaining Calibre-Web has felt more like work than a hobby. I felt pressured and teased by people to solve "their" problems and merge PRs for "their" Calibre-Web. +I have turned off all notifications from Github/Discord and will now concentrate undisturbed on the development of “my” Calibre-Web over the next few weeks/months. +I will look into the issues and meaybe also the PRs from time to time, but don't expect a quick response from me. + # Calibre-Web Calibre-Web is a web app that offers a clean and intuitive interface for browsing, reading, and downloading eBooks using a valid [Calibre](https://calibre-ebook.com) database. From fbfb7adef6adc6118afdaa21ab1fbd9b18d7b8e7 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sun, 21 Jan 2024 14:33:50 +0100 Subject: [PATCH 08/20] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 38 +++++++++++----------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 21a83e77..dd84ea78 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,22 +1,14 @@ -# Short Notice from the maintainer - -After 6 years of more or less intensive programming on Caliber-Web, I need a break. -The last few months, maintaining Calibre-Web has felt more like work than a hobby. I felt pressured and teased by people to solve "their" problems and merge PRs for "their" Calibre-Web. -I have turned off all notifications from Github/Discord and will now concentrate undisturbed on the development of “my” Calibre-Web over the next few weeks/months. -I will look into the issues and meaybe also the PRs from time to time, but don't expect a quick response from me. - --- -name: Bug/Problem report -about: Create a report to help us improve Calibre-Web +name: Bug report +about: Create a report to help us improve title: '' labels: '' assignees: '' --- - -**Describe the bug/problem** -A clear and concise description of what the bug is. If you are asking for support, please check our [Wiki](https://github.com/janeczku/calibre-web/wiki) if your question is already answered there. +**Describe the bug** +A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: @@ -25,22 +17,22 @@ Steps to reproduce the behavior: 3. Scroll down to '....' 4. See error -**Logfile** -Add content of calibre-web.log file or the relevant error, try to reproduce your problem with "debug" log-level to get more output. - **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. -**Environment (please complete the following information):** - - OS: [e.g. Windows 10/Raspberry Pi OS] - - Python version: [e.g. python2.7] - - Calibre-Web version: [e.g. 0.6.8 or 087c4c59 (git rev-parse --short HEAD)]: - - Docker container: [None/LinuxServer]: - - Special Hardware: [e.g. Rasperry Pi Zero] - - Browser: [e.g. Chrome 83.0.4103.97, Safari 13.3.7, Firefox 68.0.1 ESR] +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] **Additional context** -Add any other context about the problem here. [e.g. access via reverse proxy, database background sync, special database location] +Add any other context about the problem here. From ce83fb68167f0f0029212d763ef2b997971c6a38 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sun, 21 Jan 2024 14:37:12 +0100 Subject: [PATCH 09/20] Update bug_report.md --- .github/ISSUE_TEMPLATE/bug_report.md | 41 ++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index dd84ea78..09a10b12 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -7,32 +7,49 @@ assignees: '' --- -**Describe the bug** -A clear and concise description of what the bug is. +## Short Notice from the maintainer + +After 6 years of more or less intensive programming on Calibre-Web, I need a break. +The last few months, maintaining Calibre-Web has felt more like work than a hobby. I felt pressured and teased by people to solve "their" problems and merge PRs for "their" Calibre-Web. +I have turned off all notifications from Github/Discord and will now concentrate undisturbed on the development of “my” Calibre-Web over the next few weeks/months. +I will look into the issues and maybe also the PRs from time to time, but don't expect a quick response from me. + + +Please also have a look at our [Contributing Guidelines](https://github.com/janeczku/calibre-web/blob/master/CONTRIBUTING.md) + +**Describe the bug/problem** + +A clear and concise description of what the bug is. If you are asking for support, please check our [Wiki](https://github.com/janeczku/calibre-web/wiki) if your question is already answered there. **To Reproduce** + Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error +**Logfile** + +Add content of calibre-web.log file or the relevant error, try to reproduce your problem with "debug" log-level to get more output. + **Expected behavior** + A clear and concise description of what you expected to happen. **Screenshots** + If applicable, add screenshots to help explain your problem. -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] +**Environment (please complete the following information):** -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] + - OS: [e.g. Windows 10/Raspberry Pi OS] + - Python version: [e.g. python2.7] + - Calibre-Web version: [e.g. 0.6.8 or 087c4c59 (git rev-parse --short HEAD)]: + - Docker container: [None/LinuxServer]: + - Special Hardware: [e.g. Rasperry Pi Zero] + - Browser: [e.g. Chrome 83.0.4103.97, Safari 13.3.7, Firefox 68.0.1 ESR] **Additional context** -Add any other context about the problem here. +Add any other context about the problem here. [e.g. access via reverse proxy, database background sync, special database location] + From 6f5e9f167e38984f92ce748262ae7c7013f50029 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sun, 21 Jan 2024 14:42:39 +0100 Subject: [PATCH 10/20] Fix typo --- .github/ISSUE_TEMPLATE/bug_report.md | 4 ++-- .github/ISSUE_TEMPLATE/feature_request.md | 16 ++++++++-------- README.md | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 09a10b12..5a28406a 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,6 +1,6 @@ --- -name: Bug report -about: Create a report to help us improve +name: Bug/Problem report +about: Create a report to help us improve Calibre-Web title: '' labels: '' assignees: '' diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index ce8d061f..dec77d51 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,10 +1,3 @@ -# Short Notice from the maintainer - -After 6 years of more or less intensive programming on Caliber-Web, I need a break. -The last few months, maintaining Calibre-Web has felt more like work than a hobby. I felt pressured and teased by people to solve "their" problems and merge PRs for "their" Calibre-Web. -I have turned off all notifications from Github/Discord and will now concentrate undisturbed on the development of “my” Calibre-Web over the next few weeks/months. -I will look into the issues and meaybe also the PRs from time to time, but don't expect a quick response from me. - --- name: Feature request about: Suggest an idea for Calibre-Web @@ -14,7 +7,14 @@ assignees: '' --- - +# Short Notice from the maintainer + +After 6 years of more or less intensive programming on Calibre-Web, I need a break. +The last few months, maintaining Calibre-Web has felt more like work than a hobby. I felt pressured and teased by people to solve "their" problems and merge PRs for "their" Calibre-Web. +I have turned off all notifications from Github/Discord and will now concentrate undisturbed on the development of “my” Calibre-Web over the next few weeks/months. +I will look into the issues and maybe also the PRs from time to time, but don't expect a quick response from me. + +Please have a look at our [Contributing Guidelines](https://github.com/janeczku/calibre-web/blob/master/CONTRIBUTING.md) **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] diff --git a/README.md b/README.md index 5c188faa..52fa6a0c 100755 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Short Notice from the maintainer -After 6 years of more or less intensive programming on Caliber-Web, I need a break. +After 6 years of more or less intensive programming on Calibre-Web, I need a break. The last few months, maintaining Calibre-Web has felt more like work than a hobby. I felt pressured and teased by people to solve "their" problems and merge PRs for "their" Calibre-Web. I have turned off all notifications from Github/Discord and will now concentrate undisturbed on the development of “my” Calibre-Web over the next few weeks/months. -I will look into the issues and meaybe also the PRs from time to time, but don't expect a quick response from me. +I will look into the issues and maybe also the PRs from time to time, but don't expect a quick response from me. # Calibre-Web From c2267b690293bc3932dc2588df1d907a7d365f28 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Mon, 22 Jan 2024 13:17:27 +0100 Subject: [PATCH 11/20] Bugfix add to shelf --- cps/shelf.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cps/shelf.py b/cps/shelf.py index abd28a26..9d969322 100644 --- a/cps/shelf.py +++ b/cps/shelf.py @@ -71,8 +71,7 @@ def add_to_shelf(shelf_id, book_id): else: maxOrder = maxOrder[0] - if not ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id, - ub.BookShelf.book_id == book_id).one_or_none(): + if not calibre_db.session.query(db.Books).filter(db.Books.id == book_id).one_or_none(): log.error("Invalid Book Id: %s. Could not be added to shelf %s", book_id, shelf.name) if not xhr: flash(_("%(book_id)s is a invalid Book Id. Could not be added to Shelf", book_id=book_id), From eb6fbfc90cdf849fe3252c6bdd2890610f4b4285 Mon Sep 17 00:00:00 2001 From: Webysther Sperandio Date: Tue, 23 Jan 2024 04:24:21 +0100 Subject: [PATCH 12/20] HiDPI icons --- cps/static/favicon.ico | Bin 61662 -> 9085 bytes cps/static/icon.png | Bin 0 -> 27877 bytes cps/static/icon.svg | 5 +++++ 3 files changed, 5 insertions(+) create mode 100644 cps/static/icon.png create mode 100644 cps/static/icon.svg diff --git a/cps/static/favicon.ico b/cps/static/favicon.ico index 0774d0f94d01704f2df3ad0218ff178601d7c9d9..c7a6c8fa21724686c8436a005df301fa21e22d34 100644 GIT binary patch literal 9085 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 M$76zV&X{4`|4w_(IsgCw diff --git a/cps/static/icon.png b/cps/static/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..15c7288a7e4f672a4bb4e53e9c77c44de9f73b2a GIT binary patch literal 27877 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 literal 0 HcmV?d00001 diff --git a/cps/static/icon.svg b/cps/static/icon.svg new file mode 100644 index 00000000..44bd99fa --- /dev/null +++ b/cps/static/icon.svg @@ -0,0 +1,5 @@ + + + + + From 05367d2df545d0c5ef4ecb94c06819fe12db8579 Mon Sep 17 00:00:00 2001 From: mapi68 <41143572+mapi68@users.noreply.github.com> Date: Thu, 25 Jan 2024 07:46:31 +0100 Subject: [PATCH 13/20] Update messages.po --- cps/translations/it/LC_MESSAGES/messages.po | 382 ++++++++++++++------ 1 file changed, 274 insertions(+), 108 deletions(-) diff --git a/cps/translations/it/LC_MESSAGES/messages.po b/cps/translations/it/LC_MESSAGES/messages.po index 40f5ad5a..fbcca0b9 100644 --- a/cps/translations/it/LC_MESSAGES/messages.po +++ b/cps/translations/it/LC_MESSAGES/messages.po @@ -2,21 +2,22 @@ # Copyright (C) 2016 Smart Cities Community # This file is distributed under the same license as the Calibre-Web # Juan F. Villa , 2016. -# SPDX-FileCopyrightText: 2023 Massimo Pissarello +# SPDX-FileCopyrightText: 2023, 2024 Massimo Pissarello msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" "POT-Creation-Date: 2023-12-21 13:31+0100\n" -"PO-Revision-Date: 2023-10-21 15:27+0200\n" +"PO-Revision-Date: 2024-01-25 07:44+0100\n" "Last-Translator: Massimo Pissarello \n" "Language: it\n" "Language-Team: Italian <>\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.13.1\n" +"X-Generator: Lokalize 23.08.4\n" #: cps/about.py:84 msgid "Statistics" @@ -39,8 +40,11 @@ msgid "Unknown command" msgstr "Comando sconosciuto" #: cps/admin.py:173 -msgid "Success! Books queued for Metadata Backup, please check Tasks for result" -msgstr "Tutto OK! Libri in coda per il backup dei metadati, controlla le attività per il risultato" +msgid "" +"Success! Books queued for Metadata Backup, please check Tasks for result" +msgstr "" +"Tutto OK! Libri in coda per il backup dei metadati, controlla le attività per" +" il risultato" #: cps/admin.py:206 cps/editbooks.py:587 cps/editbooks.py:589 #: cps/editbooks.py:627 cps/editbooks.py:644 cps/editbooks.py:1256 @@ -96,7 +100,9 @@ msgstr "L'utente Guest (ospite) non può avere questo ruolo" #: cps/admin.py:494 cps/admin.py:1977 msgid "No admin user remaining, can't remove admin role" -msgstr "Non rimarrebbe nessun utente amministratore, non posso rimuovere il ruolo di amministratore" +msgstr "" +"Non rimarrebbe nessun utente amministratore, non posso rimuovere il ruolo di" +" amministratore" #: cps/admin.py:498 cps/admin.py:512 msgid "Value has to be true or false" @@ -116,7 +122,9 @@ msgstr "Visualizzazione non valida" #: cps/admin.py:517 msgid "Guest's Locale is determined automatically and can't be set" -msgstr "Le impostazioni locali dell'utente Guest (ospite) sono determinate automaticamente e non possono essere configurate" +msgstr "" +"Le impostazioni locali dell'utente Guest (ospite) sono determinate" +" automaticamente e non possono essere configurate" #: cps/admin.py:521 msgid "No Valid Locale Given" @@ -160,39 +168,66 @@ msgstr "Vuoi veramente eliminare questo scaffale?" #: cps/admin.py:617 msgid "Are you sure you want to change locales of selected user(s)?" -msgstr "Sei sicuro di voler modificare le impostazioni locali del/degli utente/i selezionato/i?" +msgstr "" +"Sei sicuro di voler modificare le impostazioni locali del/degli utente/i" +" selezionato/i?" #: cps/admin.py:619 -msgid "Are you sure you want to change visible book languages for selected user(s)?" -msgstr "Sei sicuro di voler modificare le impostazioni delle lingue visualizzabili dall'/dagli utente/i selezionato/i?" +msgid "" +"Are you sure you want to change visible book languages for selected user(s)?" +msgstr "" +"Sei sicuro di voler modificare le impostazioni delle lingue visualizzabili" +" dall'/dagli utente/i selezionato/i?" #: cps/admin.py:621 -msgid "Are you sure you want to change the selected role for the selected user(s)?" -msgstr "Sei sicuro di voler modificare il ruolo evidenziato del/degli utente/i selezionato/i?" +msgid "" +"Are you sure you want to change the selected role for the selected user(s)?" +msgstr "" +"Sei sicuro di voler modificare il ruolo evidenziato del/degli utente/i" +" selezionato/i?" #: cps/admin.py:623 -msgid "Are you sure you want to change the selected restrictions for the selected user(s)?" -msgstr "Sei sicuro di voler modificare le restrizioni selezionate del/degli utente/i selezionato/i?" +msgid "" +"Are you sure you want to change the selected restrictions for the selected" +" user(s)?" +msgstr "" +"Sei sicuro di voler modificare le restrizioni selezionate del/degli utente/i" +" selezionato/i?" #: cps/admin.py:625 -msgid "Are you sure you want to change the selected visibility restrictions for the selected user(s)?" -msgstr "Sei sicuro di voler modificare le restrizioni di visibilità selezionate per l'utente(i) selezionato(i)?" +msgid "" +"Are you sure you want to change the selected visibility restrictions for the" +" selected user(s)?" +msgstr "" +"Sei sicuro di voler modificare le restrizioni di visibilità selezionate per" +" l'utente(i) selezionato(i)?" #: cps/admin.py:628 -msgid "Are you sure you want to change shelf sync behavior for the selected user(s)?" -msgstr "Sei sicuro di voler modificare il comportamento di sincronizzazione dello scaffale per l'/gli utente/i selezionato/i?" +msgid "" +"Are you sure you want to change shelf sync behavior for the selected user(s)?" +msgstr "" +"Sei sicuro di voler modificare il comportamento di sincronizzazione dello" +" scaffale per l'/gli utente/i selezionato/i?" #: cps/admin.py:630 msgid "Are you sure you want to change Calibre library location?" msgstr "Sei sicuro di voler modificare la posizione della libreria di Calibre?" #: cps/admin.py:632 -msgid "Calibre-Web will search for updated Covers and update Cover Thumbnails, this may take a while?" -msgstr "Calibre-Web cercherà le copertine aggiornate e aggiornerà le miniature delle copertine, questo richiederà un po' di tempo." +msgid "" +"Calibre-Web will search for updated Covers and update Cover Thumbnails, this" +" may take a while?" +msgstr "" +"Calibre-Web cercherà le copertine aggiornate e aggiornerà le miniature delle" +" copertine, questo richiederà un po' di tempo." #: cps/admin.py:635 -msgid "Are you sure you want delete Calibre-Web's sync database to force a full sync with your Kobo Reader?" -msgstr "Sei sicuro di voler eliminare il database sincronizzato di Calibre-Web e forzare una sincronizzazione completa con il tuo lettore Kobo?" +msgid "" +"Are you sure you want delete Calibre-Web's sync database to force a full sync" +" with your Kobo Reader?" +msgstr "" +"Sei sicuro di voler eliminare il database sincronizzato di Calibre-Web e" +" forzare una sincronizzazione completa con il tuo lettore Kobo?" #: cps/admin.py:878 cps/admin.py:884 cps/admin.py:894 cps/admin.py:904 #: cps/templates/modal_dialogs.html:29 cps/templates/user_table.html:41 @@ -224,11 +259,15 @@ msgstr "client_secrets.json non è configurato per Web Application" #: cps/admin.py:1156 msgid "Logfile Location is not Valid, Please Enter Correct Path" -msgstr "La posizione del file di log non è valida, per favore indica il percorso corretto" +msgstr "" +"La posizione del file di log non è valida, per favore indica il percorso" +" corretto" #: cps/admin.py:1162 msgid "Access Logfile Location is not Valid, Please Enter Correct Path" -msgstr "La posizione del file di log di accesso non è valida, per favore indica il percorso corretto" +msgstr "" +"La posizione del file di log di accesso non è valida, per favore indica il" +" percorso corretto" #: cps/admin.py:1196 msgid "Please Enter a LDAP Provider, Port, DN and User Object Identifier" @@ -249,7 +288,8 @@ msgstr "LDAP Group Object Filter deve avere un \"%s\" Format Identifier" #: cps/admin.py:1212 msgid "LDAP Group Object Filter Has Unmatched Parenthesis" -msgstr "LDAP Group Object Filter contiene una parentesi senza la corrispondenza" +msgstr "" +"LDAP Group Object Filter contiene una parentesi senza la corrispondenza" #: cps/admin.py:1216 #, python-format @@ -270,8 +310,12 @@ msgid "LDAP Member User Filter Has Unmatched Parenthesis" msgstr "LDAP Member User Filter contiene una parentesi senza la corrispondenza" #: cps/admin.py:1234 -msgid "LDAP CACertificate, Certificate or Key Location is not Valid, Please Enter Correct Path" -msgstr "LDAP CACertificate, il certificato o la posizione della chiave non sono corretti, per favore indica il percorso corretto" +msgid "" +"LDAP CACertificate, Certificate or Key Location is not Valid, Please Enter" +" Correct Path" +msgstr "" +"LDAP CACertificate, il certificato o la posizione della chiave non sono" +" corretti, per favore indica il percorso corretto" #: cps/admin.py:1265 cps/templates/admin.html:53 msgid "Add New User" @@ -296,8 +340,11 @@ msgstr "Errore nel database: %(error)s." #: cps/admin.py:1323 #, python-format -msgid "Test e-mail queued for sending to %(email)s, please check Tasks for result" -msgstr "L'e-mail di test è stato accodata con successo per essere spedita a %(email)s, per favore controlla le attività per il risultato" +msgid "" +"Test e-mail queued for sending to %(email)s, please check Tasks for result" +msgstr "" +"L'e-mail di test è stato accodata con successo per essere spedita a " +"%(email)s, per favore controlla le attività per il risultato" #: cps/admin.py:1326 #, python-format @@ -405,7 +452,8 @@ msgstr "Errore generale" #: cps/admin.py:1530 msgid "Update file could not be saved in temp dir" -msgstr "Il file di aggiornamento non può essere salvato nella cartella temporanea" +msgstr "" +"Il file di aggiornamento non può essere salvato nella cartella temporanea" #: cps/admin.py:1531 msgid "Files could not be replaced during update" @@ -438,7 +486,8 @@ msgstr "{} utente importato con successo" #: cps/admin.py:1710 msgid "DB Location is not Valid, Please Enter Correct Path" -msgstr "La posizione del DB non è valida, per favore indica il percorso corretto" +msgstr "" +"La posizione del DB non è valida, per favore indica il percorso corretto" #: cps/admin.py:1730 msgid "DB is not Writeable" @@ -446,11 +495,13 @@ msgstr "Il DB non è scrivibile" #: cps/admin.py:1743 msgid "Keyfile Location is not Valid, Please Enter Correct Path" -msgstr "La posizione del Keyfile non è valida, per favore indica il percorso corretto" +msgstr "" +"La posizione del Keyfile non è valida, per favore indica il percorso corretto" #: cps/admin.py:1747 msgid "Certfile Location is not Valid, Please Enter Correct Path" -msgstr "La posizione del Certfile non è valida, per favore indica il percorso corretto" +msgstr "" +"La posizione del Certfile non è valida, per favore indica il percorso corretto" #: cps/admin.py:1819 msgid "Password length has to be between 1 and 40" @@ -496,11 +547,13 @@ msgstr "Non posso eliminare l'utente Guest (ospite)" #: cps/admin.py:1962 msgid "No admin user remaining, can't delete user" -msgstr "Non rimarrebbe nessun utente amministratore, non posso eliminare l'utente" +msgstr "" +"Non rimarrebbe nessun utente amministratore, non posso eliminare l'utente" #: cps/admin.py:2017 cps/web.py:1445 msgid "Email can't be empty and has to be a valid Email" -msgstr "L'indirizzo e-mail non può essere vuoto e deve essere un recapito valido" +msgstr "" +"L'indirizzo e-mail non può essere vuoto e deve essere un recapito valido" #: cps/admin.py:2043 #, python-format @@ -518,7 +571,8 @@ msgstr "Mancano i permessi di esecuzione" #: cps/db.py:752 cps/search.py:137 cps/web.py:731 #, python-format msgid "Custom Column No.%(column)d does not exist in calibre database" -msgstr "La colonna personalizzata no.%(column)d non esiste nel database di Calibre" +msgstr "" +"La colonna personalizzata no.%(column)d non esiste nel database di Calibre" #: cps/db.py:993 cps/templates/config_edit.html:204 #: cps/templates/config_view_edit.html:62 cps/templates/email_edit.html:41 @@ -529,8 +583,10 @@ msgstr "Nessuna" #: cps/editbooks.py:120 cps/editbooks.py:908 cps/web.py:525 cps/web.py:1537 #: cps/web.py:1581 cps/web.py:1626 -msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" -msgstr "Il libro selezionato non è disponibile. Il file non esiste o non è accessibile" +msgid "" +"Oops! Selected book is unavailable. File does not exist or is not accessible" +msgstr "" +"Il libro selezionato non è disponibile. Il file non esiste o non è accessibile" #: cps/editbooks.py:164 cps/editbooks.py:1239 msgid "User has no rights to upload cover" @@ -538,7 +594,9 @@ msgstr "L'utente non ha i permessi per caricare le copertine" #: cps/editbooks.py:184 cps/editbooks.py:729 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" -msgstr "Gli identificatori non fanno distinzione tra maiuscole e minuscole, sovrascrivendo il vecchio identificatore" +msgstr "" +"Gli identificatori non fanno distinzione tra maiuscole e minuscole," +" sovrascrivendo il vecchio identificatore" #: cps/editbooks.py:226 msgid "Metadata successfully updated" @@ -555,7 +613,9 @@ msgstr "Il file %(file)s è stato caricato" #: cps/editbooks.py:329 msgid "Source or destination format for conversion missing" -msgstr "Mancano o il formato sorgente o quello di destinazione, entrambi necessari alla conversione" +msgstr "" +"Mancano o il formato sorgente o quello di destinazione, entrambi necessari" +" alla conversione" #: cps/editbooks.py:337 #, python-format @@ -568,8 +628,12 @@ msgid "There was an error converting this book: %(res)s" msgstr "Si è verificato un errore durante la conversione del libro: %(res)s" #: cps/editbooks.py:648 -msgid "Uploaded book probably exists in the library, consider to change before upload new: " -msgstr "Probabilmente il libro caricato esiste già nella libreria, cambialo prima di caricarlo nuovamente:" +msgid "" +"Uploaded book probably exists in the library, consider to change before" +" upload new: " +msgstr "" +"Probabilmente il libro caricato esiste già nella libreria, cambialo prima di" +" caricarlo nuovamente:" #: cps/editbooks.py:703 cps/editbooks.py:1031 #, python-format @@ -579,7 +643,8 @@ msgstr "%(langname)s non è una lingua valida" #: cps/editbooks.py:741 cps/editbooks.py:1179 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" -msgstr "Non è consentito caricare file con l'estensione '%(ext)s' su questo server" +msgstr "" +"Non è consentito caricare file con l'estensione '%(ext)s' su questo server" #: cps/editbooks.py:745 cps/editbooks.py:1183 msgid "File to be uploaded must have an extension" @@ -636,12 +701,20 @@ msgid "File format %(ext)s added to %(book)s" msgstr "Ho aggiunto il formato %(ext)s al libro %(book)s" #: cps/gdrive.py:58 -msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" -msgstr "La configurazione di Google Drive non è stata completata correttamente. Prova a disattivare e riattivare nuovamente Google Drive" +msgid "" +"Google Drive setup not completed, try to deactivate and activate Google Drive" +" again" +msgstr "" +"La configurazione di Google Drive non è stata completata correttamente. Prova" +" a disattivare e riattivare nuovamente Google Drive" #: cps/gdrive.py:95 -msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" -msgstr "Il dominio di callback non è stato verificato. Per favore segui i passaggi per verificare il dominio nella console per sviluppatori di Google" +msgid "" +"Callback domain is not verified, please follow steps to verify domain in" +" google developer console" +msgstr "" +"Il dominio di callback non è stato verificato. Per favore segui i passaggi" +" per verificare il dominio nella console per sviluppatori di Google" #: cps/helper.py:81 #, python-format @@ -708,8 +781,11 @@ msgstr "Impossibile impostare lo stato di lettura: {}" #: cps/helper.py:365 #, python-format -msgid "Deleting bookfolder for book %(id)s failed, path has subfolders: %(path)s" -msgstr "L'eliminazione della cartella del libro %(id)s non è riuscita, il percorso ha delle sottocartelle: %(path)s" +msgid "" +"Deleting bookfolder for book %(id)s failed, path has subfolders: %(path)s" +msgstr "" +"L'eliminazione della cartella del libro %(id)s non è riuscita, il percorso ha" +" delle sottocartelle: %(path)s" #: cps/helper.py:371 #, python-format @@ -718,13 +794,20 @@ msgstr "L'eliminazione del libro %(id)s non è riuscita: %(message)s" #: cps/helper.py:382 #, python-format -msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" -msgstr "Eliminazione del libro %(id)s unicamente dal database. Il percorso del libro nel database non è valido: %(path)s" +msgid "" +"Deleting book %(id)s from database only, book path in database not valid: " +"%(path)s" +msgstr "" +"Eliminazione del libro %(id)s unicamente dal database. Il percorso del libro" +" nel database non è valido: %(path)s" #: cps/helper.py:447 #, python-format -msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" -msgstr "La modifica dell'autore da '%(src)s' a '%(dest)s' è terminata con l'errore: %(error)s" +msgid "" +"Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" +msgstr "" +"La modifica dell'autore da '%(src)s' a '%(dest)s' è terminata con l'errore: " +"%(error)s" #: cps/helper.py:519 cps/helper.py:528 #, python-format @@ -734,7 +817,9 @@ msgstr "File %(file)s non trovato su Google Drive" #: cps/helper.py:562 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" -msgstr "La modifica del titolo da '%(src)s' a '%(dest)s' è terminata con l'errore: %(error)s" +msgstr "" +"La modifica del titolo da '%(src)s' a '%(dest)s' è terminata con l'errore: " +"%(error)s" #: cps/helper.py:582 msgid "Error in rename file in path: {}" @@ -762,8 +847,11 @@ msgid "Password doesn't comply with password validation rules" msgstr "La password non è conforme alle regole di convalida della password" #: cps/helper.py:852 -msgid "Python module 'advocate' is not installed but is needed for cover uploads" -msgstr "Il modulo Python 'advocate' non è installato, ma è necessario per caricare le copertine" +msgid "" +"Python module 'advocate' is not installed but is needed for cover uploads" +msgstr "" +"Il modulo Python 'advocate' non è installato, ma è necessario per caricare le" +" copertine" #: cps/helper.py:862 msgid "Error Downloading Cover" @@ -774,8 +862,11 @@ msgid "Cover Format Error" msgstr "Errore nel formato della copertina" #: cps/helper.py:868 -msgid "You are not allowed to access localhost or the local network for cover uploads" -msgstr "Non sei autorizzato ad accedere a localhost o alla rete locale per caricare le copertine" +msgid "" +"You are not allowed to access localhost or the local network for cover uploads" +msgstr "" +"Non sei autorizzato ad accedere a localhost o alla rete locale per caricare" +" le copertine" #: cps/helper.py:878 msgid "Failed to create path for cover" @@ -783,11 +874,15 @@ msgstr "Errore nel creare il percorso per la copertina" #: cps/helper.py:894 msgid "Cover-file is not a valid image file, or could not be stored" -msgstr "Il file della copertina non è in un formato immagine valido o non può essere salvato" +msgstr "" +"Il file della copertina non è in un formato immagine valido o non può essere" +" salvato" #: cps/helper.py:905 msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" -msgstr "Solamente i file nei formati jpg/jpeg/png/webp/bmp sono supportati per le copertine" +msgstr "" +"Solamente i file nei formati jpg/jpeg/png/webp/bmp sono supportati per le" +" copertine" #: cps/helper.py:917 msgid "Invalid cover file content" @@ -814,8 +909,12 @@ msgid "Queue all books for metadata backup" msgstr "Metti in coda tutti i libri per il backup dei metadati" #: cps/kobo_auth.py:90 -msgid "Please access Calibre-Web from non localhost to get valid api_endpoint for kobo device" -msgstr "Per favore accedi a Calibe-Web non da localhost per ottenere un api_endpoint valido per il lettore kobo" +msgid "" +"Please access Calibre-Web from non localhost to get valid api_endpoint for" +" kobo device" +msgstr "" +"Per favore accedi a Calibe-Web non da localhost per ottenere un api_endpoint" +" valido per il lettore kobo" #: cps/kobo_auth.py:116 msgid "Kobo Setup" @@ -838,7 +937,8 @@ msgstr "Collegamento a %(oauth)s avvenuto con successo" #: cps/oauth_bb.py:155 msgid "Login failed, No User Linked With OAuth Account" -msgstr "Accesso non riuscito, non c'è nessun utente collegato all'account OAuth" +msgstr "" +"Accesso non riuscito, non c'è nessun utente collegato all'account OAuth" #: cps/oauth_bb.py:197 #, python-format @@ -1074,13 +1174,14 @@ msgid "Rating >= %(rating)s" msgstr "Valutazione >= %(rating)s" #: cps/search.py:221 -#, fuzzy, python-format +#, python-format msgid "Read Status = '%(status)s'" -msgstr "Stato di lettura = %(status)s" +msgstr "Stato di lettura = '%(status)s'" #: cps/search.py:324 msgid "Error on search for custom columns, please restart Calibre-Web" -msgstr "Errore di ricerca nelle colonne personalizzate. Per favore riavvia Calibre-Web" +msgstr "" +"Errore di ricerca nelle colonne personalizzate. Per favore riavvia Calibre-Web" #: cps/search.py:343 cps/search.py:375 cps/templates/layout.html:57 msgid "Advanced Search" @@ -1092,7 +1193,8 @@ msgstr "Lo scaffale specificato non è valido" #: cps/shelf.py:55 msgid "Sorry you are not allowed to add a book to that shelf" -msgstr "Mi spiace, ma non sei autorizzato ad aggiungere libri a questo scaffale" +msgstr "" +"Mi spiace, ma non sei autorizzato ad aggiungere libri a questo scaffale" #: cps/shelf.py:64 #, python-format @@ -1192,7 +1294,9 @@ msgstr "Scaffale: '%(name)s'" #: cps/shelf.py:469 msgid "Error opening shelf. Shelf does not exist or is not accessible" -msgstr "Errore durante l'apertura dello scaffale. Lo scaffale non esiste o non è accessibile" +msgstr "" +"Errore durante l'apertura dello scaffale. Lo scaffale non esiste o non è" +" accessibile" #: cps/tasks_status.py:46 cps/templates/layout.html:88 #: cps/templates/tasks.html:7 @@ -1236,8 +1340,12 @@ msgid "No update available. You already have the latest version installed" msgstr "Nessun aggiornamento disponibile. Hai già l'ultima versione installata" #: cps/updater.py:456 -msgid "A new update is available. Click on the button below to update to the latest version." -msgstr "È disponibile un nuovo aggiornamento. Fare clic sul pulsante in basso per aggiornare all'ultima versione" +msgid "" +"A new update is available. Click on the button below to update to the latest" +" version." +msgstr "" +"È disponibile un nuovo aggiornamento. Fai clic sul pulsante in basso per" +" aggiornare all'ultima versione" #: cps/updater.py:474 msgid "Could not fetch update information" @@ -1245,12 +1353,18 @@ msgstr "Impossibile recuperare le informazioni sull'aggiornamento" #: cps/updater.py:484 msgid "Click on the button below to update to the latest stable version." -msgstr "Fare clic sul pulsante in basso per eseguire l'aggiornamento all'ultima versione stabile." +msgstr "" +"Fai clic sul pulsante in basso per eseguire l'aggiornamento all'ultima" +" versione stabile." #: cps/updater.py:493 cps/updater.py:507 cps/updater.py:518 #, python-format -msgid "A new update is available. Click on the button below to update to version: %(version)s" -msgstr "È disponibile un nuovo aggiornamento. Fare clic sul pulsante in basso per aggiornare alla versione:%(version)s" +msgid "" +"A new update is available. Click on the button below to update to version: " +"%(version)s" +msgstr "" +"È disponibile un nuovo aggiornamento. Fai clic sul pulsante in basso per" +" aggiornare alla versione:%(version)s" #: cps/updater.py:536 msgid "No release information available" @@ -1350,8 +1464,10 @@ msgid "Register" msgstr "Registrati" #: cps/web.py:1266 cps/web.py:1313 -msgid "Oops! Email server is not configured, please contact your administrator." -msgstr "Il server e-mail non è configurato, per favore contatta l'amministratore" +msgid "" +"Oops! Email server is not configured, please contact your administrator." +msgstr "" +"Il server e-mail non è configurato, per favore contatta l'amministratore" #: cps/web.py:1299 msgid "Oops! Your Email is not allowed." @@ -1376,8 +1492,12 @@ msgstr "ora sei connesso come: '%(nickname)s'" #: cps/web.py:1383 #, python-format -msgid "Fallback Login as: '%(nickname)s', LDAP Server not reachable, or user not known" -msgstr "Accesso di riserva come: '%(nickname)s', il server LDAP non è raggiungibile o l'utente è sconosciuto" +msgid "" +"Fallback Login as: '%(nickname)s', LDAP Server not reachable, or user not" +" known" +msgstr "" +"Accesso di riserva come: '%(nickname)s', il server LDAP non è raggiungibile o" +" l'utente è sconosciuto" #: cps/web.py:1388 #, python-format @@ -1449,7 +1569,9 @@ msgstr "Si è verificato un errore con il convertitore Kepubify: %(error)s" #: cps/tasks/convert.py:224 #, python-format msgid "Converted file not found or more than one file in folder %(folder)s" -msgstr "Non ho trovato il file convertito o c'è più di un file nella cartella %(folder)s" +msgstr "" +"Non ho trovato il file convertito o c'è più di un file nella cartella " +"%(folder)s" #: cps/tasks/convert.py:247 #, python-format @@ -1882,8 +2004,11 @@ msgid "Rating" msgstr "Valutazione" #: cps/templates/book_edit.html:104 -msgid "Fetch Cover from URL (JPEG - Image will be downloaded and stored in database)" -msgstr "Carica la copertina da URL (jpeg - l'immagine della copertina viene scaricata e salvata nel database)" +msgid "" +"Fetch Cover from URL (JPEG - Image will be downloaded and stored in database)" +msgstr "" +"Carica la copertina da URL (jpeg - l'immagine della copertina viene scaricata" +" e salvata nel database)" #: cps/templates/book_edit.html:108 msgid "Upload Cover from Local Disk" @@ -2113,7 +2238,8 @@ msgstr "Revoca" #: cps/templates/config_db.html:68 msgid "New db location is invalid, please enter valid path" -msgstr "La nuova posizione del database non è valida, inserisci un percorso valido" +msgstr "" +"La nuova posizione del database non è valida, inserisci un percorso valido" #: cps/templates/config_edit.html:18 msgid "Server Configuration" @@ -2125,11 +2251,15 @@ msgstr "Porta del server" #: cps/templates/config_edit.html:28 msgid "SSL certfile location (leave it empty for non-SSL Servers)" -msgstr "Posizione del file del certificato SSL (lascia vuoto per una configurazione del server senza SSL)" +msgstr "" +"Posizione del file del certificato SSL (lascia vuoto per una configurazione" +" del server senza SSL)" #: cps/templates/config_edit.html:35 msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" -msgstr "Posizione del file della chiave SSL (lascia vuoto per una configurazione del server senza SSL)" +msgstr "" +"Posizione del file della chiave SSL (lascia vuoto per una configurazione del" +" server senza SSL)" #: cps/templates/config_edit.html:43 msgid "Update Channel" @@ -2153,7 +2283,8 @@ msgstr "Configurazione del file di log" #: cps/templates/config_edit.html:77 msgid "Location and name of logfile (calibre-web.log for no entry)" -msgstr "Posizione e nome del file di log (se non specificato sarà calibre-web.log)" +msgstr "" +"Posizione e nome del file di log (se non specificato sarà calibre-web.log)" #: cps/templates/config_edit.html:82 msgid "Enable Access Log" @@ -2161,7 +2292,9 @@ msgstr "Abilita il log degli accessi" #: cps/templates/config_edit.html:85 msgid "Location and name of access logfile (access.log for no entry)" -msgstr "Posizione e nome del file di log degli accessi (se non specificato sarà access.log)" +msgstr "" +"Posizione e nome del file di log degli accessi (se non specificato sarà" +" access.log)" #: cps/templates/config_edit.html:96 msgid "Feature Configuration" @@ -2169,7 +2302,9 @@ msgstr "Ulteriori opzioni" #: cps/templates/config_edit.html:104 msgid "Convert non-English characters in title and author while saving to disk" -msgstr "Converti caratteri non inglesi del titolo e dell'autore durante il salvataggio su disco" +msgstr "" +"Converti caratteri non inglesi del titolo e dell'autore durante il" +" salvataggio su disco" #: cps/templates/config_edit.html:108 msgid "Enable Uploads" @@ -2177,7 +2312,9 @@ msgstr "Abilita il caricamento" #: cps/templates/config_edit.html:108 msgid "(Please ensure that users also have upload permissions)" -msgstr "(per favore assicurati che gli utenti abbiano anche i permessi per caricare i file)" +msgstr "" +"(per favore assicurati che gli utenti abbiano anche i permessi per caricare i" +" file)" #: cps/templates/config_edit.html:112 msgid "Allowed Upload Fileformats" @@ -2268,16 +2405,24 @@ msgid "SSL" msgstr "SSL" #: cps/templates/config_edit.html:210 -msgid "LDAP CACertificate Path (Only needed for Client Certificate Authentication)" -msgstr "Percorso del CACertificate LDAP (necessario unicamente in caso di Client Certificate Authentication)" +msgid "" +"LDAP CACertificate Path (Only needed for Client Certificate Authentication)" +msgstr "" +"Percorso del CACertificate LDAP (necessario unicamente in caso di Client" +" Certificate Authentication)" #: cps/templates/config_edit.html:217 -msgid "LDAP Certificate Path (Only needed for Client Certificate Authentication)" -msgstr "Percorso del certificato LDAP (necessario unicamente in caso di Client Certificate Authentication)" +msgid "" +"LDAP Certificate Path (Only needed for Client Certificate Authentication)" +msgstr "" +"Percorso del certificato LDAP (necessario unicamente in caso di Client" +" Certificate Authentication)" #: cps/templates/config_edit.html:224 msgid "LDAP Keyfile Path (Only needed for Client Certificate Authentication)" -msgstr "Percorso della chiave LDAP (necessario unicamente in caso di Client Certificate Authentication)" +msgstr "" +"Percorso della chiave LDAP (necessario unicamente in caso di Client" +" Certificate Authentication)" #: cps/templates/config_edit.html:233 msgid "LDAP Authentication" @@ -2317,7 +2462,8 @@ msgstr "Il server LDAP è OpenLDAP?" #: cps/templates/config_edit.html:264 msgid "Following Settings are Needed For User Import" -msgstr "Le seguenti impostazioni sono necessarie per l'importazione degli utenti" +msgstr "" +"Le seguenti impostazioni sono necessarie per l'importazione degli utenti" #: cps/templates/config_edit.html:266 msgid "LDAP Group Object Filter" @@ -2436,7 +2582,8 @@ msgstr "Numero di libri casuali da mostrare" #: cps/templates/config_view_edit.html:36 msgid "No. of Authors to Display Before Hiding (0=Disable Hiding)" -msgstr "Numero di autori da mostrare prima di nascondere (0=disabilita nascondere)" +msgstr "" +"Numero di autori da mostrare prima di nascondere (0=disabilita nascondere)" #: cps/templates/config_view_edit.html:40 cps/templates/readcbr.html:101 msgid "Theme" @@ -2659,8 +2806,11 @@ msgid "Next" msgstr "Prossimo" #: cps/templates/generate_kobo_auth_url.html:6 -msgid "Open the .kobo/Kobo/Kobo eReader.conf file in a text editor and add (or edit):" -msgstr "Apri il file .kobo/Kobo/Kobo eReader.conf in un editor di testo e aggiungi (o modifica):" +msgid "" +"Open the .kobo/Kobo/Kobo eReader.conf file in a text editor and add (or edit):" +msgstr "" +"Apri il file .kobo/Kobo/Kobo eReader.conf in un editor di testo e aggiungi (o" +" modifica):" #: cps/templates/generate_kobo_auth_url.html:11 msgid "Kobo Token:" @@ -2672,7 +2822,8 @@ msgstr "Elenco" #: cps/templates/http_error.html:34 msgid "Calibre-Web Instance is unconfigured, please contact your administrator" -msgstr "L'istanza Calibre-Web non è configurata, per favore contatta l'amministratore" +msgstr "" +"L'istanza Calibre-Web non è configurata, per favore contatta l'amministratore" #: cps/templates/http_error.html:44 msgid "Create Issue" @@ -2892,7 +3043,8 @@ msgstr "Seleziona le categorie consentite/negate per l'utente" #: cps/templates/modal_dialogs.html:9 msgid "Select Allowed/Denied Custom Column Values of User" -msgstr "Seleziona i valori personali consentiti/negati per le colonne dell'utente" +msgstr "" +"Seleziona i valori personali consentiti/negati per le colonne dell'utente" #: cps/templates/modal_dialogs.html:15 msgid "Enter Tag" @@ -2915,12 +3067,19 @@ msgid "and hard disk" msgstr "e dal disco rigido" #: cps/templates/modal_dialogs.html:56 -msgid "Important Kobo Note: deleted books will remain on any paired Kobo device." -msgstr "Osservazione importante riguardo Kobo: i libri eliminati, rimarranno in ogni lettore Kobo accoppiato." +msgid "" +"Important Kobo Note: deleted books will remain on any paired Kobo device." +msgstr "" +"Osservazione importante riguardo Kobo: i libri eliminati, rimarranno in ogni" +" lettore Kobo accoppiato." #: cps/templates/modal_dialogs.html:57 -msgid "Books must first be archived and the device synced before a book can safely be deleted." -msgstr "Prima di poter eliminare in sicurezza un libro, occorre che il libro venga archiviato e che l'apparecchio venga sincronizzato." +msgid "" +"Books must first be archived and the device synced before a book can safely" +" be deleted." +msgstr "" +"Prima di poter eliminare in sicurezza un libro, occorre che il libro venga" +" archiviato e che l'apparecchio venga sincronizzato." #: cps/templates/modal_dialogs.html:76 msgid "Choose File Location" @@ -3180,11 +3339,11 @@ msgstr "Data di pubblicazione fino al" #: cps/templates/search_form.html:44 msgid "Any" -msgstr "" +msgstr "Qualsiasi" #: cps/templates/search_form.html:45 msgid "Empty" -msgstr "" +msgstr "Vuoto" #: cps/templates/search_form.html:60 msgid "Exclude Tags" @@ -3319,12 +3478,18 @@ msgid "Actions" msgstr "Azioni" #: cps/templates/tasks.html:40 -msgid "This task will be cancelled. Any progress made by this task will be saved." -msgstr "Questa attività verrà annullata. Tutti i progressi compiuti da questa attività verranno salvati." +msgid "" +"This task will be cancelled. Any progress made by this task will be saved." +msgstr "" +"Questa attività verrà annullata. Tutti i progressi compiuti da questa" +" attività verranno salvati." #: cps/templates/tasks.html:41 -msgid "If this is a scheduled task, it will be re-ran during the next scheduled time." -msgstr "Se si tratta di un'attività pianificata, verrà eseguita nuovamente durante il prossimo orario pianificato." +msgid "" +"If this is a scheduled task, it will be re-ran during the next scheduled time." +msgstr "" +"Se si tratta di un'attività pianificata, verrà eseguita nuovamente durante il" +" prossimo orario pianificato." #: cps/templates/user_edit.html:20 msgid "Reset user Password" @@ -3458,3 +3623,4 @@ msgstr "Sincronizza gli scaffali selezionati con Kobo" msgid "Show Read/Unread Section" msgstr "Mostra la sezione letto/da leggere" + From f7718cae0c73736343b2e78da3532d0568d8f989 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 10 Feb 2024 10:07:10 +0100 Subject: [PATCH 14/20] Fix typo in send password message --- cps/translations/cs/LC_MESSAGES/messages.mo | Bin 35496 -> 35496 bytes cps/translations/cs/LC_MESSAGES/messages.po | 4 ++-- cps/translations/de/LC_MESSAGES/messages.mo | Bin 61413 -> 61413 bytes cps/translations/de/LC_MESSAGES/messages.po | 4 ++-- cps/translations/el/LC_MESSAGES/messages.mo | Bin 51997 -> 51997 bytes cps/translations/el/LC_MESSAGES/messages.po | 4 ++-- cps/translations/es/LC_MESSAGES/messages.mo | Bin 46279 -> 46279 bytes cps/translations/es/LC_MESSAGES/messages.po | 4 ++-- cps/translations/fi/LC_MESSAGES/messages.mo | Bin 24553 -> 24553 bytes cps/translations/fi/LC_MESSAGES/messages.po | 4 ++-- cps/translations/fr/LC_MESSAGES/messages.mo | Bin 50422 -> 50422 bytes cps/translations/fr/LC_MESSAGES/messages.po | 4 ++-- cps/translations/gl/LC_MESSAGES/messages.mo | Bin 55657 -> 55657 bytes cps/translations/gl/LC_MESSAGES/messages.po | 4 ++-- cps/translations/hu/LC_MESSAGES/messages.mo | Bin 22520 -> 22520 bytes cps/translations/hu/LC_MESSAGES/messages.po | 4 ++-- cps/translations/id/LC_MESSAGES/messages.mo | Bin 53368 -> 53368 bytes cps/translations/id/LC_MESSAGES/messages.po | 4 ++-- cps/translations/it/LC_MESSAGES/messages.mo | Bin 63112 -> 63112 bytes cps/translations/it/LC_MESSAGES/messages.po | 4 ++-- cps/translations/ja/LC_MESSAGES/messages.mo | Bin 58986 -> 58986 bytes cps/translations/ja/LC_MESSAGES/messages.po | 4 ++-- cps/translations/km/LC_MESSAGES/messages.mo | Bin 22267 -> 22267 bytes cps/translations/km/LC_MESSAGES/messages.po | 4 ++-- cps/translations/ko/LC_MESSAGES/messages.mo | Bin 56156 -> 56156 bytes cps/translations/ko/LC_MESSAGES/messages.po | 4 ++-- cps/translations/nl/LC_MESSAGES/messages.mo | Bin 52441 -> 52441 bytes cps/translations/nl/LC_MESSAGES/messages.po | 4 ++-- cps/translations/no/LC_MESSAGES/messages.mo | Bin 36034 -> 36034 bytes cps/translations/no/LC_MESSAGES/messages.po | 4 ++-- cps/translations/pl/LC_MESSAGES/messages.mo | Bin 47178 -> 47178 bytes cps/translations/pl/LC_MESSAGES/messages.po | 4 ++-- cps/translations/pt/LC_MESSAGES/messages.mo | Bin 58366 -> 58366 bytes cps/translations/pt/LC_MESSAGES/messages.po | 4 ++-- .../pt_BR/LC_MESSAGES/messages.mo | Bin 55836 -> 55836 bytes .../pt_BR/LC_MESSAGES/messages.po | 4 ++-- cps/translations/ru/LC_MESSAGES/messages.mo | Bin 42944 -> 42944 bytes cps/translations/ru/LC_MESSAGES/messages.po | 4 ++-- cps/translations/sk/LC_MESSAGES/messages.mo | Bin 61968 -> 61968 bytes cps/translations/sk/LC_MESSAGES/messages.po | 4 ++-- cps/translations/sv/LC_MESSAGES/messages.mo | Bin 44319 -> 44319 bytes cps/translations/sv/LC_MESSAGES/messages.po | 4 ++-- cps/translations/tr/LC_MESSAGES/messages.mo | Bin 20150 -> 20150 bytes cps/translations/tr/LC_MESSAGES/messages.po | 4 ++-- cps/translations/uk/LC_MESSAGES/messages.mo | Bin 22473 -> 22473 bytes cps/translations/uk/LC_MESSAGES/messages.po | 4 ++-- cps/translations/vi/LC_MESSAGES/messages.mo | Bin 29437 -> 29437 bytes cps/translations/vi/LC_MESSAGES/messages.po | 4 ++-- .../zh_Hans_CN/LC_MESSAGES/messages.mo | Bin 55269 -> 55269 bytes .../zh_Hans_CN/LC_MESSAGES/messages.po | 4 ++-- .../zh_Hant_TW/LC_MESSAGES/messages.mo | Bin 44202 -> 44202 bytes .../zh_Hant_TW/LC_MESSAGES/messages.po | 4 ++-- cps/web.py | 2 +- messages.pot | 4 ++-- 54 files changed, 55 insertions(+), 55 deletions(-) diff --git a/cps/translations/cs/LC_MESSAGES/messages.mo b/cps/translations/cs/LC_MESSAGES/messages.mo index 45ce8ea14f73b532e7120a9f91d5164241e02312..86713655b79ad90f6316618f026c00e3bc00b976 100644 GIT binary patch delta 16 YcmZ26m1)IPrVT6sjAolz0~T8W05j7Cp8x;= delta 16 YcmZ26m1)IPrVT6sj7FPT0~T8W05iJ\n" "Language: cs_CZ\n" @@ -1460,7 +1460,7 @@ msgstr "Špatné uživatelské jméno nebo heslo" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Nové heslo bylo zasláno na vaši emailovou adresu" #: cps/web.py:1403 diff --git a/cps/translations/de/LC_MESSAGES/messages.mo b/cps/translations/de/LC_MESSAGES/messages.mo index f8c9d18a21eaf997c27cb3d3fcb012083f7dd1f0..717e833389b727871f3acec250fa0aefe9f25cf0 100644 GIT binary patch delta 23 fcmaEQpZV#1<_(jR7)v%!N!p~sXtvqCeO?9tj$aDq delta 23 fcmaEQpZV#1<_(jR7*jS+N!p~sXtdeAeO?9tjdu#t diff --git a/cps/translations/de/LC_MESSAGES/messages.po b/cps/translations/de/LC_MESSAGES/messages.po index dc200b82..077a645a 100644 --- a/cps/translations/de/LC_MESSAGES/messages.po +++ b/cps/translations/de/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2023-10-21 15:45+0200\n" "Last-Translator: Ozzie Isaacs\n" "Language: de\n" @@ -1422,7 +1422,7 @@ msgid "Wrong Username or Password" msgstr "Falscher Benutzername oder Passwort" #: cps/web.py:1399 -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Das neue Passwort wurde an die E-Mail Adresse verschickt" #: cps/web.py:1403 diff --git a/cps/translations/el/LC_MESSAGES/messages.mo b/cps/translations/el/LC_MESSAGES/messages.mo index 81822641349c34aa0a5d565eb4d9c62e07b1fbd0..ce72796172f352f48049acd09c503ce3b4824264 100644 GIT binary patch delta 16 YcmbO`jd|`g<_#^OjAol#LuZr%06C-v#{d8T delta 16 YcmbO`jd|`g<_#^Oj7FPVLuZr%06B~X!vFvP diff --git a/cps/translations/el/LC_MESSAGES/messages.po b/cps/translations/el/LC_MESSAGES/messages.po index a9da255c..9677fc60 100644 --- a/cps/translations/el/LC_MESSAGES/messages.po +++ b/cps/translations/el/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Depountis Georgios\n" "Language: el\n" @@ -1460,7 +1460,7 @@ msgstr "Λανθασμένο Όνομα Χρήστη ή Κωδικός" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Ο Νέος Κωδικός έχει σταλεί στη διεύθυνση email σου" #: cps/web.py:1403 diff --git a/cps/translations/es/LC_MESSAGES/messages.mo b/cps/translations/es/LC_MESSAGES/messages.mo index 7734ff432ff9852d664636c2c9d40697f5089550..45a52cbfca1ef115d735208d1fe1da1b1e2d7bbc 100644 GIT binary patch delta 16 XcmX^9lIi$MrVW;\n" "Language: es\n" @@ -1465,7 +1465,7 @@ msgstr "Usuario o contraseña inválido" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Una nueva contraseña se ha enviado a su cuenta de correo electrónico" #: cps/web.py:1403 diff --git a/cps/translations/fi/LC_MESSAGES/messages.mo b/cps/translations/fi/LC_MESSAGES/messages.mo index 43667edad446c2682e8ee2fbb76b961d1021413c..47fb8c9786f408224dcd2ff290f55eab5ef1cc7c 100644 GIT binary patch delta 16 YcmaF4pYi2>#tn>?jAomeET5|Z06x_QZvX%Q delta 16 YcmaF4pYi2>#tn>?j7FQ8ET5|Z06x72YXATM diff --git a/cps/translations/fi/LC_MESSAGES/messages.po b/cps/translations/fi/LC_MESSAGES/messages.po index 446fa778..9c3322b8 100644 --- a/cps/translations/fi/LC_MESSAGES/messages.po +++ b/cps/translations/fi/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2020-01-12 13:56+0100\n" "Last-Translator: Samuli Valavuo \n" "Language: fi\n" @@ -1453,7 +1453,7 @@ msgid "Wrong Username or Password" msgstr "Väärä käyttäjätunnus tai salasana" #: cps/web.py:1399 -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "" #: cps/web.py:1403 diff --git a/cps/translations/fr/LC_MESSAGES/messages.mo b/cps/translations/fr/LC_MESSAGES/messages.mo index d8661f9e237445496497f4135319a3e0b0291251..9583247cbcb0a4986b92e66d53eb1e222925716c 100644 GIT binary patch delta 16 Xcmey?$^5O8dBge)MzhTuGTdSSM4bn4 delta 16 Xcmey?$^5O8dBge)Mx)IeGTdSSM1==z diff --git a/cps/translations/fr/LC_MESSAGES/messages.po b/cps/translations/fr/LC_MESSAGES/messages.po index 223de149..18542c3c 100644 --- a/cps/translations/fr/LC_MESSAGES/messages.po +++ b/cps/translations/fr/LC_MESSAGES/messages.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2020-06-07 06:47+0200\n" "Last-Translator: \n" "Language: fr\n" @@ -1477,7 +1477,7 @@ msgstr "Mauvais nom d'utilisateur ou mot de passe" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Le nouveau mot de passe a été envoyé vers votre adresse de courriel" #: cps/web.py:1403 diff --git a/cps/translations/gl/LC_MESSAGES/messages.mo b/cps/translations/gl/LC_MESSAGES/messages.mo index 3825d6369d79074afd74c8707bc72e9d0b30bd0e..ce4969cf3f5d4532fbccc885e392470c94c532e0 100644 GIT binary patch delta 16 XcmaF4iTULw<_%_5jAon7tBm3SLGuR5 delta 16 XcmaF4iTULw<_%_5j7FQytBm3SLE8q! diff --git a/cps/translations/gl/LC_MESSAGES/messages.po b/cps/translations/gl/LC_MESSAGES/messages.po index 2080abc6..4df398ed 100644 --- a/cps/translations/gl/LC_MESSAGES/messages.po +++ b/cps/translations/gl/LC_MESSAGES/messages.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2022-08-11 16:46+0200\n" "Last-Translator: pollitor \n" "Language: gl\n" @@ -1443,7 +1443,7 @@ msgstr "Usuario ou contrasinal no válido" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Unha nova contrasinal enviouse ao seu enderezo de correo electrónico" #: cps/web.py:1403 diff --git a/cps/translations/hu/LC_MESSAGES/messages.mo b/cps/translations/hu/LC_MESSAGES/messages.mo index 19cdeafdad8cd47fcadcafbb52b3117f723e2f41..abea5cb80442b78371bc38d687caf6b9fc0a17c4 100644 GIT binary patch delta 16 Ycmeydp7FAR07p3p7XSbN delta 16 YcmeydfceJ)<_)b?j7FQ=sy>AR07oGR6951J diff --git a/cps/translations/id/LC_MESSAGES/messages.po b/cps/translations/id/LC_MESSAGES/messages.po index 66b85ace..26daadd0 100644 --- a/cps/translations/id/LC_MESSAGES/messages.po +++ b/cps/translations/id/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2023-01-21 10:00+0700\n" "Last-Translator: Arief Hidayat\n" "Language: id\n" @@ -1446,7 +1446,7 @@ msgstr "Pengguna atau Kata Sandi salah" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Kata Sandi baru telah dikirimkan ke alamat email Anda" #: cps/web.py:1403 diff --git a/cps/translations/it/LC_MESSAGES/messages.mo b/cps/translations/it/LC_MESSAGES/messages.mo index 6e1b23807994cb071fc17dcdf6a2b6ce1e4d0209..06eb3de29e0007bf35d5caf27a1dd73c92692621 100644 GIT binary patch delta 23 fcmeBp%iQsndBfQx#*)qFlFq6ynr)ub{w5CqiUkXR delta 23 fcmeBp%iQsndBfQx#+1$HlFq6y8f~7_{w5Cqi5&}U diff --git a/cps/translations/it/LC_MESSAGES/messages.po b/cps/translations/it/LC_MESSAGES/messages.po index bffb3a5d..df963dbb 100644 --- a/cps/translations/it/LC_MESSAGES/messages.po +++ b/cps/translations/it/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2024-01-25 07:44+0100\n" "Last-Translator: Massimo Pissarello \n" "Language: it\n" @@ -1422,7 +1422,7 @@ msgid "Wrong Username or Password" msgstr "Nome utente o password errati" #: cps/web.py:1399 -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "La nuova password è stata inviata al tuo indirizzo email" #: cps/web.py:1403 diff --git a/cps/translations/ja/LC_MESSAGES/messages.mo b/cps/translations/ja/LC_MESSAGES/messages.mo index b18180e158b2810204578724a608a6d88cff7316..86d391275bad1e469278bbc1466dbac4b7d11f51 100644 GIT binary patch delta 16 XcmaELhWXVQ<_!W>jAok!t0Hp%LpuiN delta 16 XcmaELhWXVQ<_!W>j7FOUt0Hp%Ln8*` diff --git a/cps/translations/ja/LC_MESSAGES/messages.po b/cps/translations/ja/LC_MESSAGES/messages.po index c157b0a8..3368b9cb 100644 --- a/cps/translations/ja/LC_MESSAGES/messages.po +++ b/cps/translations/ja/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2018-02-07 02:20-0500\n" "Last-Translator: subdiox \n" "Language: ja\n" @@ -1446,7 +1446,7 @@ msgstr "ユーザー名またはパスワードが違います" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "新しいパスワードがあなたのメールアドレスに送信されました" #: cps/web.py:1403 diff --git a/cps/translations/km/LC_MESSAGES/messages.mo b/cps/translations/km/LC_MESSAGES/messages.mo index fd4cb4307f1e36b6d16ba8f0d4600c04e3b42426..355f43df2e8d6f9b66c9615c0aa77057c51e09b5 100644 GIT binary patch delta 16 Xcmeypmhtym#tm(XjAonL6-!J3L)!-B delta 16 Xcmeypmhtym#tm(Xj7FQ=6-!J3L&FB) diff --git a/cps/translations/km/LC_MESSAGES/messages.po b/cps/translations/km/LC_MESSAGES/messages.po index 2bf934db..a0a46ff4 100644 --- a/cps/translations/km/LC_MESSAGES/messages.po +++ b/cps/translations/km/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2018-08-27 17:06+0700\n" "Last-Translator: \n" "Language: km_KH\n" @@ -1447,7 +1447,7 @@ msgid "Wrong Username or Password" msgstr "ខុសឈ្មោះអ្នកប្រើប្រាស់ ឬលេខសម្ងាត់" #: cps/web.py:1399 -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "" #: cps/web.py:1403 diff --git a/cps/translations/ko/LC_MESSAGES/messages.mo b/cps/translations/ko/LC_MESSAGES/messages.mo index e851cc8aa3b448619ab70e3289631f9dff792f64..e16513f4346314cc41694f891569e41a0efc2704 100644 GIT binary patch delta 16 Ycmcb!jrq\n" "Language: ko\n" @@ -1448,7 +1448,7 @@ msgstr "잘못된 사용자명 또는 비밀번호" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "새 비밀번호가 이메일로 전송되었습니다" #: cps/web.py:1403 diff --git a/cps/translations/nl/LC_MESSAGES/messages.mo b/cps/translations/nl/LC_MESSAGES/messages.mo index 7d750667d69760d43eee771df8d946ecbcd49550..0337ffb2688b4b682e4a9fe9b03de1218eb0b57f 100644 GIT binary patch delta 16 YcmcaPllkUM<_#N58O=6tDpd~$07GgAPyhe` delta 16 YcmcaPllkUM<_#N58I3k?Dpd~$07Fs-OaK4? diff --git a/cps/translations/nl/LC_MESSAGES/messages.po b/cps/translations/nl/LC_MESSAGES/messages.po index de663dec..3b12e5a7 100644 --- a/cps/translations/nl/LC_MESSAGES/messages.po +++ b/cps/translations/nl/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web (GPLV3)\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2023-12-20 22:00+0100\n" "Last-Translator: Michiel Cornelissen \n" "Language: nl\n" @@ -1462,7 +1462,7 @@ msgstr "Verkeerde gebruikersnaam of wachtwoord" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Een nieuw wachtwoord is verzonden naar je e-mailadres" #: cps/web.py:1403 diff --git a/cps/translations/no/LC_MESSAGES/messages.mo b/cps/translations/no/LC_MESSAGES/messages.mo index 7922912ec55bafdfb108bbe1fcc2657e2346f449..3086b19e6287410eea0253fd10c53c45301ea5a6 100644 GIT binary patch delta 16 XcmX>!lj+b*rVSxMjAoldgL16^I_m~W delta 16 XcmX>!lj+b*rVSxMj7FP7gL16^I@1P4 diff --git a/cps/translations/no/LC_MESSAGES/messages.po b/cps/translations/no/LC_MESSAGES/messages.po index 6acdd6f9..d01c3e5e 100644 --- a/cps/translations/no/LC_MESSAGES/messages.po +++ b/cps/translations/no/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2023-01-06 11:00+0000\n" "Last-Translator: Vegard Fladby \n" "Language: no\n" @@ -1455,7 +1455,7 @@ msgstr "Vennligst skriv inn gyldig brukernavn for å tilbakestille passordet" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Nytt passord ble sendt til e-postadressen din" #: cps/web.py:1403 diff --git a/cps/translations/pl/LC_MESSAGES/messages.mo b/cps/translations/pl/LC_MESSAGES/messages.mo index f33d56725da5f9895579a0dfd5766580eb93ff2b..247b95489fa96bac8f6808f78a6b3137e0296ac0 100644 GIT binary patch delta 16 YcmX^0f$7u-rVTmijAom2)9(fV07w-F=Kufz delta 16 YcmX^0f$7u-rVTmij7FPt)9(fV07v}?;{X5v diff --git a/cps/translations/pl/LC_MESSAGES/messages.po b/cps/translations/pl/LC_MESSAGES/messages.po index cfc91a5d..22232528 100644 --- a/cps/translations/pl/LC_MESSAGES/messages.po +++ b/cps/translations/pl/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre Web - polski (POT: 2021-06-12 08:52)\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2021-06-12 15:35+0200\n" "Last-Translator: Radosław Kierznowski \n" "Language: pl\n" @@ -1467,7 +1467,7 @@ msgstr "Błędna nazwa użytkownika lub hasło" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Nowe hasło zostało wysłane na Twój adres e-mail" #: cps/web.py:1403 diff --git a/cps/translations/pt/LC_MESSAGES/messages.mo b/cps/translations/pt/LC_MESSAGES/messages.mo index 8d4427ae5c907c58bdc76fff5a22968c3bbaa128..bf885566ced558d49b2f6d3eee578cf46ddc76f7 100644 GIT binary patch delta 16 Ycmex&ocZ5z<_&ChjAonJ>%OM~07cgakN^Mx delta 16 Ycmex&ocZ5z<_&Chj7FQ;>%OM~07btCi~s-t diff --git a/cps/translations/pt/LC_MESSAGES/messages.po b/cps/translations/pt/LC_MESSAGES/messages.po index 61737942..e214ad41 100644 --- a/cps/translations/pt/LC_MESSAGES/messages.po +++ b/cps/translations/pt/LC_MESSAGES/messages.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2023-07-25 11:30+0100\n" "Last-Translator: horus68 \n" "Language: pt\n" @@ -1443,7 +1443,7 @@ msgstr "Nome de utilizador ou senha incorretos" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Nova senha foi enviada para seu endereço de email" #: cps/web.py:1403 diff --git a/cps/translations/pt_BR/LC_MESSAGES/messages.mo b/cps/translations/pt_BR/LC_MESSAGES/messages.mo index dbba15700b73b5020d0d22d2b2645152e5dac264..08b2fe93b51ecea08fbd59996c1239f8b358f094 100644 GIT binary patch delta 16 YcmbQUg?Y{v<_$k98O=8Ts#Hn<07ESYr~m)} delta 16 YcmbQUg?Y{v<_$k98I3mos#Hn<07DfAqyPW_ diff --git a/cps/translations/pt_BR/LC_MESSAGES/messages.po b/cps/translations/pt_BR/LC_MESSAGES/messages.po index dd063d89..623b2a92 100644 --- a/cps/translations/pt_BR/LC_MESSAGES/messages.po +++ b/cps/translations/pt_BR/LC_MESSAGES/messages.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: br\n" @@ -1443,7 +1443,7 @@ msgstr "Nome de Usuário ou Senha incorretos" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Nova Senha foi enviada para seu endereço de e-mail" #: cps/web.py:1403 diff --git a/cps/translations/ru/LC_MESSAGES/messages.mo b/cps/translations/ru/LC_MESSAGES/messages.mo index 3f4bb9c65114cfb43a1239b969e50f90b744ece3..474eee6b17e9481d1ff4c9f155cb5d1424251936 100644 GIT binary patch delta 15 XcmX?bp6S4OrUhP%W}6wk_QwJMI4cHT delta 15 XcmX?bp6S4OrUhP%Mw=PE_QwJMI1>h1 diff --git a/cps/translations/ru/LC_MESSAGES/messages.po b/cps/translations/ru/LC_MESSAGES/messages.po index b458aad5..d0f2801d 100644 --- a/cps/translations/ru/LC_MESSAGES/messages.po +++ b/cps/translations/ru/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2020-04-29 01:20+0400\n" "Last-Translator: ZIZA\n" "Language: ru\n" @@ -1459,7 +1459,7 @@ msgstr "Ошибка в имени пользователя или пароле" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Новый пароль был отправлен на ваш адрес электронной почты" #: cps/web.py:1403 diff --git a/cps/translations/sk/LC_MESSAGES/messages.mo b/cps/translations/sk/LC_MESSAGES/messages.mo index c3f476102bf4777e45ce32ec20502c644f85c7f4..393188989697f9e92f7fae74ffa898179a99feca 100644 GIT binary patch delta 23 fcmbR6gn7af<_(jR7)v%!N!p~sXtvqC{bUvZfjtUy delta 23 fcmbR6gn7af<_(jR7*jS+N!p~sXtdeA{bUvZfK>`# diff --git a/cps/translations/sk/LC_MESSAGES/messages.po b/cps/translations/sk/LC_MESSAGES/messages.po index f265e87f..4ac197b4 100644 --- a/cps/translations/sk/LC_MESSAGES/messages.po +++ b/cps/translations/sk/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2023-11-01 06:12+0100\n" "Last-Translator: Branislav Hanáček \n" "Language: sk_SK\n" @@ -1422,7 +1422,7 @@ msgid "Wrong Username or Password" msgstr "Nesprávne používateľské meno alebo heslo" #: cps/web.py:1399 -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Na vašu e-mailovú adresu bolo odoslané nové heslo" #: cps/web.py:1403 diff --git a/cps/translations/sv/LC_MESSAGES/messages.mo b/cps/translations/sv/LC_MESSAGES/messages.mo index a94206735810727b86cfefcf24f4abee5c9ce6dd..a22b2d70300b6881055ec4e674636fc737e0d092 100644 GIT binary patch delta 16 YcmbP#i)sEXrVYDO8O=8DNlkVK07KLVd;kCd delta 16 YcmbP#i)sEXrVYDO8I3mYNlkVK07JY7cmMzZ diff --git a/cps/translations/sv/LC_MESSAGES/messages.po b/cps/translations/sv/LC_MESSAGES/messages.po index 1050c30c..90b979d9 100644 --- a/cps/translations/sv/LC_MESSAGES/messages.po +++ b/cps/translations/sv/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2021-05-13 11:00+0000\n" "Last-Translator: Jonatan Nyberg \n" "Language: sv\n" @@ -1459,7 +1459,7 @@ msgstr "Fel användarnamn eller lösenord" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Nytt lösenord skickades till din e-postadress" #: cps/web.py:1403 diff --git a/cps/translations/tr/LC_MESSAGES/messages.mo b/cps/translations/tr/LC_MESSAGES/messages.mo index 32ebc0bef902d9443b4a094ab37796bdc963ee3e..a3594e9df2a1574bcacd1df9edcf1f53e71487ba 100644 GIT binary patch delta 16 XcmdlsmvP%%#tlY#jAomS^_mp`Hm(Jy delta 16 XcmdlsmvP%%#tlY#j7FP{^_mp`HkJjW diff --git a/cps/translations/tr/LC_MESSAGES/messages.po b/cps/translations/tr/LC_MESSAGES/messages.po index be212588..9a4cd536 100644 --- a/cps/translations/tr/LC_MESSAGES/messages.po +++ b/cps/translations/tr/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2020-04-23 22:47+0300\n" "Last-Translator: iz \n" "Language: tr\n" @@ -1450,7 +1450,7 @@ msgstr "Yanlış Kullanıcı adı ya da Şifre" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Yeni şifre e-Posta adresinize gönderildi" #: cps/web.py:1403 diff --git a/cps/translations/uk/LC_MESSAGES/messages.mo b/cps/translations/uk/LC_MESSAGES/messages.mo index a8a92dbd321fdf40b94287f6f0bc66d5bdfddc54..1f873fc1d39a1eebe2d4d7e34bfc7324548e15e8 100644 GIT binary patch delta 16 XcmX@Pp7G>*#tq?`jAol7Gz;|rJWmEK delta 16 XcmX@Pp7G>*#tq?`j7FOyGz;|rJU0d@ diff --git a/cps/translations/uk/LC_MESSAGES/messages.po b/cps/translations/uk/LC_MESSAGES/messages.po index 0cc6d5c9..ddd15d3d 100644 --- a/cps/translations/uk/LC_MESSAGES/messages.po +++ b/cps/translations/uk/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2017-04-30 00:47+0300\n" "Last-Translator: ABIS Team \n" "Language: uk\n" @@ -1444,7 +1444,7 @@ msgid "Wrong Username or Password" msgstr "Помилка в імені користувача або паролі" #: cps/web.py:1399 -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "" #: cps/web.py:1403 diff --git a/cps/translations/vi/LC_MESSAGES/messages.mo b/cps/translations/vi/LC_MESSAGES/messages.mo index 7220efde88ded6b5e9ae5d7c8543d40d77fff10d..e26e3e553bfe3b340f18837d4370150f20519e21 100644 GIT binary patch delta 16 YcmezSl=1IV#tpOV8O=7&woft!08AwZsQ>@~ delta 16 YcmezSl=1IV#tpOV8I3m2woft!089-Br2qf` diff --git a/cps/translations/vi/LC_MESSAGES/messages.po b/cps/translations/vi/LC_MESSAGES/messages.po index 31b14069..5819ebeb 100644 --- a/cps/translations/vi/LC_MESSAGES/messages.po +++ b/cps/translations/vi/LC_MESSAGES/messages.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2022-09-20 21:36+0700\n" "Last-Translator: Ha Link \n" "Language: vi\n" @@ -1439,7 +1439,7 @@ msgstr "Tên đăng nhập hoặc mật khẩu không đúng" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "Mật khẩu mới đã được gửi đến email của bạn" #: cps/web.py:1403 diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo index 08bfc3d14cbf8f13ca3401c4191a90ab8b45dc67..60df4456526e8804e7230bfb40c3c6a149c35944 100644 GIT binary patch delta 23 fcmaF5p84r|<_*P3j3t{(k}6dg%{ISl`yK!Qgn
\n" "Language: zh_CN\n" @@ -1422,7 +1422,7 @@ msgid "Wrong Username or Password" msgstr "用户名或密码错误" #: cps/web.py:1399 -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "新密码已发送到您的邮箱" #: cps/web.py:1403 diff --git a/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.mo b/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.mo index d86e386e222de54e5d8d520ac11212bac6ecd395..fb75c95ea0a71c32440a97bc7de10fae716ce687 100644 GIT binary patch delta 16 YcmZ2=lWEmWrVZ0_7|k|M&k=S207AV6{Qv*} delta 16 YcmZ2=lWEmWrVZ0_7>zbh&k=S2079h(`2YX_ diff --git a/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.po b/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.po index 02597b0a..60138565 100644 --- a/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.po +++ b/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: 2020-09-27 22:18+0800\n" "Last-Translator: xlivevil \n" "Language: zh_TW\n" @@ -1451,7 +1451,7 @@ msgstr "用戶名或密碼錯誤" #: cps/web.py:1399 #, fuzzy -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "新密碼已發送到您的郵箱" #: cps/web.py:1403 diff --git a/cps/web.py b/cps/web.py index 24c5cacd..705627e7 100644 --- a/cps/web.py +++ b/cps/web.py @@ -1396,7 +1396,7 @@ def login_post(): if user is not None and user.name != "Guest": ret, __ = reset_password(user.id) if ret == 1: - flash(_(u"New Password was send to your email address"), category="info") + flash(_(u"New Password was sent to your email address"), category="info") log.info('Password reset for user "%s" IP-address: %s', username, ip_address) else: log.error(u"An unknown error occurred. Please try again later") diff --git a/messages.pot b/messages.pot index 9059bac7..4acb1046 100644 --- a/messages.pot +++ b/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2024-02-10 10:02+0100\n" +"POT-Creation-Date: 2024-02-10 10:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1419,7 +1419,7 @@ msgid "Wrong Username or Password" msgstr "" #: cps/web.py:1399 -msgid "New Password was send to your email address" +msgid "New Password was sent to your email address" msgstr "" #: cps/web.py:1403 From 2bfb02c44877c2ac4b46ff2fb48ac2e6beafb11a Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 10 Feb 2024 19:49:02 +0100 Subject: [PATCH 15/20] Updated requirements Updated testresults --- optional-requirements.txt | 6 +- setup.cfg | 6 +- test/Calibre-Web TestSummary_Linux.html | 519 ++++++++++++------------ 3 files changed, 261 insertions(+), 270 deletions(-) diff --git a/optional-requirements.txt b/optional-requirements.txt index 6763eaff..8b93032c 100644 --- a/optional-requirements.txt +++ b/optional-requirements.txt @@ -1,7 +1,7 @@ # GDrive Integration google-api-python-client>=1.7.11,<2.108.0 gevent>20.6.0,<24.0.0 -greenlet>=0.4.17,<2.1.0 +greenlet>=0.4.17,<3.1.0 httplib2>=0.9.2,<0.23.0 oauth2client>=4.0.0,<4.1.4 uritemplate>=3.0.0,<4.2.0 @@ -38,8 +38,8 @@ faust-cchardet>=2.1.18,<2.1.20 py7zr>=0.15.0,<0.21.0 # Comics -natsort>=2.2.0,<8.4.0 +natsort>=2.2.0,<8.5.0 comicapi>=2.2.0,<3.3.0 # Kobo integration -jsonschema>=3.2.0,<4.20.0 +jsonschema>=3.2.0,<4.22.0 diff --git a/setup.cfg b/setup.cfg index eb73462d..4c23a0ba 100644 --- a/setup.cfg +++ b/setup.cfg @@ -68,7 +68,7 @@ include = cps/services* gdrive = google-api-python-client>=1.7.11,<2.108.0 gevent>20.6.0,<24.0.0 - greenlet>=0.4.17,<2.1.0 + greenlet>=0.4.17,<3.1.0 httplib2>=0.9.2,<0.23.0 oauth2client>=4.0.0,<4.1.4 uritemplate>=3.0.0,<4.2.0 @@ -99,8 +99,8 @@ metadata = faust-cchardet>=2.1.18,<2.1.20 py7zr>=0.15.0,<0.21.0 comics = - natsort>=2.2.0,<8.4.0 + natsort>=2.2.0,<8.5.0 comicapi>=2.2.0,<3.3.0 kobo = - jsonschema>=3.2.0,<4.20.0 + jsonschema>=3.2.0,<4.22.0 diff --git a/test/Calibre-Web TestSummary_Linux.html b/test/Calibre-Web TestSummary_Linux.html index 6bafbd11..031ba52c 100644 --- a/test/Calibre-Web TestSummary_Linux.html +++ b/test/Calibre-Web TestSummary_Linux.html @@ -37,20 +37,20 @@
-

Start Time: 2024-01-17 20:30:42

+

Start Time: 2024-02-10 19:51:08

-

Stop Time: 2024-01-18 03:25:01

+

Stop Time: 2024-02-11 02:37:31

-

Duration: 5h 47 min

+

Duration: 5h 36 min

@@ -234,12 +234,12 @@ - + TestBackupMetadata 21 - 20 - 1 + 16 0 + 5 0 Detail @@ -320,35 +320,11 @@ - +
TestBackupMetadata - test_backup_change_book_series_index
- -
- FAIL -
- - - - + PASS @@ -416,154 +392,161 @@ AssertionError: 'test' != 'tEst' - +
TestBackupMetadata - test_backup_change_custom_float
- PASS - - - - - - -
TestBackupMetadata - test_backup_change_custom_int
- - PASS - - - - - - -
TestBackupMetadata - test_backup_change_custom_rating
- - PASS - - - - - - -
TestBackupMetadata - test_backup_change_custom_text
- - PASS - - - - - - -
TestBackupMetadata - test_upload_book
- - PASS - - - - - - - TestBackupMetadataGdrive - 1 - 0 - 0 - 1 - 0 - - Detail - - - - - - - -
TestBackupMetadataGdrive - test_backup_gdrive
-
- ERROR + ERROR
- From 0180b4b6b53b65ddca282c5be262329340d3d02f Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Mon, 12 Feb 2024 20:58:26 +0100 Subject: [PATCH 16/20] Better error handling on next parameter --- cps/redirect.py | 17 +- cps/web.py | 2 +- test/Calibre-Web TestSummary_Linux.html | 1305 ++++++++++------------- 3 files changed, 583 insertions(+), 741 deletions(-) mode change 100644 => 100755 cps/redirect.py diff --git a/cps/redirect.py b/cps/redirect.py old mode 100644 new mode 100755 index 09b3101f..337bb77b --- a/cps/redirect.py +++ b/cps/redirect.py @@ -29,7 +29,7 @@ from urllib.parse import urlparse, urljoin -from flask import request, url_for, redirect +from flask import request, url_for, redirect, current_app def is_safe_url(target): @@ -38,16 +38,15 @@ def is_safe_url(target): return test_url.scheme in ('http', 'https') and ref_url.netloc == test_url.netloc -def get_redirect_target(): - for target in request.values.get('next'), request.referrer: - if not target: - continue - if is_safe_url(target): - return target +def remove_prefix(text, prefix): + if text.startswith(prefix): + return text[len(prefix):] + return "" def redirect_back(endpoint, **values): - target = request.form['next'] - if not target or not is_safe_url(target): + target = request.form.get('next', None) or url_for(endpoint, **values) + adapter = current_app.url_map.bind(urlparse(request.host_url).netloc) + if not len(adapter.allowed_methods(remove_prefix(target, request.environ.get('HTTP_X_SCRIPT_NAME',"")))): target = url_for(endpoint, **values) return redirect(target) diff --git a/cps/web.py b/cps/web.py index 705627e7..4a95a21d 100644 --- a/cps/web.py +++ b/cps/web.py @@ -1322,7 +1322,7 @@ def handle_login_user(user, remember, message, category): ub.store_user_session() flash(message, category=category) [limiter.limiter.storage.clear(k.key) for k in limiter.current_limits] - return redirect_back(url_for("web.index")) + return redirect_back("web.index") def render_login(username="", password=""): diff --git a/test/Calibre-Web TestSummary_Linux.html b/test/Calibre-Web TestSummary_Linux.html index 031ba52c..49fa93ef 100644 --- a/test/Calibre-Web TestSummary_Linux.html +++ b/test/Calibre-Web TestSummary_Linux.html @@ -37,20 +37,20 @@
-

Start Time: 2024-02-10 19:51:08

+

Start Time: 2024-02-11 21:14:02

-

Stop Time: 2024-02-11 02:37:31

+

Stop Time: 2024-02-12 04:05:52

-

Duration: 5h 36 min

+

Duration: 5h 42 min

@@ -234,12 +234,12 @@ - + TestBackupMetadata 21 - 16 + 20 + 1 0 - 5 0 Detail @@ -383,233 +383,76 @@ - +
TestBackupMetadata - test_backup_change_custom_date
+ +
+ FAIL +
+ + + + + + + + + + +
TestBackupMetadata - test_backup_change_custom_float
+ PASS - - -
TestBackupMetadata - test_backup_change_custom_float
- - -
- ERROR -
- - - - - - - - - +
TestBackupMetadata - test_backup_change_custom_int
- -
- ERROR -
- - - - + PASS - +
TestBackupMetadata - test_backup_change_custom_rating
- -
- ERROR -
- - - - + PASS - +
TestBackupMetadata - test_backup_change_custom_text
- -
- ERROR -
- - - - + PASS - +
TestBackupMetadata - test_upload_book
- -
- ERROR -
- - - - - - - - - - - _ErrorHolder - 1 - 0 - 0 - 1 - 0 - - Detail - - - - - - - -
tearDownClass (test_backup_metadata)
- - -
- ERROR -
- - - - + PASS @@ -623,13 +466,13 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. 0 0 - Detail + Detail - +
TestBackupMetadataGdrive - test_backup_gdrive
@@ -647,13 +490,13 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. 0 0 - Detail + Detail - +
TestCli - test_already_started
@@ -662,7 +505,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCli - test_bind_to_single_interface
@@ -671,7 +514,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCli - test_change_password
@@ -680,7 +523,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCli - test_cli_SSL_files
@@ -689,7 +532,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCli - test_cli_different_folder
@@ -698,7 +541,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCli - test_cli_different_settings_database
@@ -707,7 +550,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCli - test_dryrun_update
@@ -716,7 +559,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCli - test_enable_reconnect
@@ -725,7 +568,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCli - test_environ_port_setting
@@ -734,7 +577,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCli - test_logfile
@@ -743,7 +586,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCli - test_no_database
@@ -752,7 +595,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCli - test_settingsdb_not_writeable
@@ -761,7 +604,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCli - test_writeonly_static_files
@@ -779,13 +622,13 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. 0 0 - Detail + Detail - +
TestCliGdrivedb - test_cli_gdrive_folder
@@ -794,7 +637,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCliGdrivedb - test_cli_gdrive_location
@@ -803,7 +646,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCliGdrivedb - test_gdrive_db_nonwrite
@@ -812,7 +655,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCliGdrivedb - test_no_database
@@ -830,13 +673,13 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. 0 0 - Detail + Detail - +
TestCoverEditBooks - test_invalid_jpg_hdd
@@ -845,7 +688,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestCoverEditBooks - test_upload_jpg
@@ -863,13 +706,13 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. 0 0 - Detail + Detail - +
TestDeleteDatabase - test_delete_books_in_database
@@ -887,13 +730,13 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. 0 0 - Detail + Detail - +
TestEbookConvertCalibre - test_calibre_log
@@ -902,7 +745,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibre - test_convert_deactivate
@@ -911,7 +754,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibre - test_convert_email
@@ -920,7 +763,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibre - test_convert_failed_and_email
@@ -929,7 +772,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibre - test_convert_only
@@ -938,7 +781,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibre - test_convert_options
@@ -947,7 +790,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibre - test_convert_parameter
@@ -956,7 +799,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibre - test_convert_wrong_excecutable
@@ -965,7 +808,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibre - test_convert_xss
@@ -974,7 +817,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibre - test_email_failed
@@ -983,7 +826,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibre - test_email_only
@@ -992,7 +835,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibre - test_kindle_send_not_configured
@@ -1001,7 +844,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibre - test_ssl_smtp_setup_error
@@ -1010,7 +853,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibre - test_starttls_smtp_setup_error
@@ -1019,7 +862,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibre - test_user_convert_xss
@@ -1037,13 +880,13 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. 0 0 - Detail + Detail - +
TestEbookConvertCalibreGDrive - test_convert_email
@@ -1052,7 +895,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibreGDrive - test_convert_failed_and_email
@@ -1061,7 +904,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibreGDrive - test_convert_only
@@ -1070,7 +913,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibreGDrive - test_convert_parameter
@@ -1079,7 +922,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibreGDrive - test_email_failed
@@ -1088,7 +931,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertCalibreGDrive - test_email_only
@@ -1106,13 +949,13 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. 0 0 - Detail + Detail - +
TestEbookConvertKepubify - test_convert_deactivate
@@ -1121,7 +964,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertKepubify - test_convert_only
@@ -1130,7 +973,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertKepubify - test_convert_wrong_excecutable
@@ -1148,13 +991,13 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. 0 0 - Detail + Detail - +
TestEbookConvertGDriveKepubify - test_convert_deactivate
@@ -1163,7 +1006,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertGDriveKepubify - test_convert_only
@@ -1172,7 +1015,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEbookConvertGDriveKepubify - test_convert_wrong_excecutable
@@ -1190,13 +1033,13 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. 0 2 - Detail + Detail - +
TestEditAdditionalBooks - test_cbz_comicinfo
@@ -1205,7 +1048,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_change_upload_formats
@@ -1214,7 +1057,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_delete_book
@@ -1223,7 +1066,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_delete_role
@@ -1232,7 +1075,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_details_popup
@@ -1241,7 +1084,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_edit_book_identifier
@@ -1250,7 +1093,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_edit_book_identifier_capital
@@ -1259,7 +1102,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_edit_book_identifier_standard
@@ -1268,7 +1111,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_edit_special_book_identifier
@@ -1277,7 +1120,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_title_sort
@@ -1286,7 +1129,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_upload_cbz_coverformats
@@ -1295,7 +1138,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_upload_edit_role
@@ -1304,7 +1147,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_upload_metadata_cb7
@@ -1313,7 +1156,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_upload_metadata_cbr
@@ -1322,7 +1165,7 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_upload_metadata_cbt
@@ -1331,19 +1174,19 @@ receiveMessage@chrome://remote/content/marionette/actors/MarionetteEventsParent. - +
TestEditAdditionalBooks - test_writeonly_calibre_database
- SKIP + SKIP
-