From 3c8196527f73fdcbdd8da9fdc5d199184b78a254 Mon Sep 17 00:00:00 2001 From: phail Date: Sat, 9 Apr 2022 13:07:14 +0200 Subject: [PATCH 001/231] adapt to starttls interface change in imap_tools pin imap-tools version to avoid breaking changes improve mail log --- Pipfile | 2 +- src/paperless_mail/mail.py | 76 +++++++++++++++++++++++--------------- 2 files changed, 48 insertions(+), 30 deletions(-) diff --git a/Pipfile b/Pipfile index 7cbd65b55..f66f08428 100644 --- a/Pipfile +++ b/Pipfile @@ -19,7 +19,7 @@ djangorestframework = "~=3.13" filelock = "*" fuzzywuzzy = {extras = ["speedup"], version = "*"} gunicorn = "*" -imap-tools = "*" +imap-tools = "~=0.53.0" langdetect = "*" pathvalidate = "*" pillow = "~=9.0" diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index a7e455829..f6d2cccc7 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -18,6 +18,7 @@ from imap_tools import MailboxFolderSelectError from imap_tools import MailBoxUnencrypted from imap_tools import MailMessage from imap_tools import MailMessageFlags +from imap_tools.mailbox import MailBoxTls from paperless_mail.models import MailAccount from paperless_mail.models import MailRule @@ -89,14 +90,18 @@ def make_criterias(rule): def get_mailbox(server, port, security): - if security == MailAccount.IMAP_SECURITY_NONE: - mailbox = MailBoxUnencrypted(server, port) - elif security == MailAccount.IMAP_SECURITY_STARTTLS: - mailbox = MailBox(server, port, starttls=True) - elif security == MailAccount.IMAP_SECURITY_SSL: - mailbox = MailBox(server, port) - else: - raise NotImplementedError("Unknown IMAP security") # pragma: nocover + try: + if security == MailAccount.IMAP_SECURITY_NONE: + mailbox = MailBoxUnencrypted(server, port) + elif security == MailAccount.IMAP_SECURITY_STARTTLS: + mailbox = MailBoxTls(server, port) + elif security == MailAccount.IMAP_SECURITY_SSL: + mailbox = MailBox(server, port) + else: + raise NotImplementedError("Unknown IMAP security") # pragma: nocover + except Exception as e: + print(f"Error while retrieving mailbox from {server}: {e}") + raise return mailbox @@ -154,32 +159,45 @@ class MailAccountHandler(LoggingMixin): self.log("debug", f"Processing mail account {account}") total_processed_files = 0 - - with get_mailbox( - account.imap_server, - account.imap_port, - account.imap_security, - ) as M: - - try: - M.login(account.username, account.password) - except Exception: - raise MailError(f"Error while authenticating account {account}") - - self.log( - "debug", - f"Account {account}: Processing " f"{account.rules.count()} rule(s)", - ) - - for rule in account.rules.order_by("order"): + try: + with get_mailbox( + account.imap_server, + account.imap_port, + account.imap_security, + ) as M: try: - total_processed_files += self.handle_mail_rule(M, rule) + M.login(account.username, account.password) except Exception as e: self.log( "error", - f"Rule {rule}: Error while processing rule: {e}", - exc_info=True, + f"Error while authenticating account {account}: {e}", + exc_info=False, ) + return total_processed_files + + self.log( + "debug", + f"Account {account}: Processing " + f"{account.rules.count()} rule(s)", + ) + + for rule in account.rules.order_by("order"): + try: + total_processed_files += self.handle_mail_rule(M, rule) + except Exception as e: + self.log( + "error", + f"Rule {rule}: Error while processing rule: {e}", + exc_info=True, + ) + except MailError: + raise + except Exception as e: + self.log( + "error", + f"Error while retrieving mailbox {account}: {e}", + exc_info=False, + ) return total_processed_files From c05b39a05640fa00d43de9a8c1f96f737c3a2f45 Mon Sep 17 00:00:00 2001 From: phail Date: Wed, 13 Apr 2022 23:37:21 +0200 Subject: [PATCH 002/231] fix unittest --- src/paperless_mail/mail.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index f6d2cccc7..9553e2b1a 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -173,7 +173,9 @@ class MailAccountHandler(LoggingMixin): f"Error while authenticating account {account}: {e}", exc_info=False, ) - return total_processed_files + raise MailError( + f"Error while authenticating account {account}", + ) from e self.log( "debug", From 5fcf1b5434f42a55ebe4dd083d3021f27234d0cf Mon Sep 17 00:00:00 2001 From: phail Date: Thu, 14 Apr 2022 00:19:30 +0200 Subject: [PATCH 003/231] remove uneeded print and fix merge fail --- src/paperless_mail/mail.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index c80517c6e..1e868ceaa 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -90,18 +90,14 @@ def make_criterias(rule): def get_mailbox(server, port, security): - try: - if security == MailAccount.IMAP_SECURITY_NONE: - mailbox = MailBoxUnencrypted(server, port) - elif security == MailAccount.IMAP_SECURITY_STARTTLS: - mailbox = MailBoxTls(server, port) - elif security == MailAccount.IMAP_SECURITY_SSL: - mailbox = MailBox(server, port) - else: - raise NotImplementedError("Unknown IMAP security") # pragma: nocover - except Exception as e: - print(f"Error while retrieving mailbox from {server}: {e}") - raise + if security == MailAccount.ImapSecurity.NONE: + mailbox = MailBoxUnencrypted(server, port) + elif security == MailAccount.ImapSecurity.STARTTLS: + mailbox = MailBoxTls(server, port) + elif security == MailAccount.ImapSecurity.SSL: + mailbox = MailBox(server, port) + else: + raise NotImplementedError("Unknown IMAP security") # pragma: nocover return mailbox From cca576f5182fddcdeb132832fdf3fae0edfe4bfd Mon Sep 17 00:00:00 2001 From: phail Date: Fri, 15 Apr 2022 14:40:02 +0200 Subject: [PATCH 004/231] add feature to consume imap mail als .eml --- src/paperless_mail/admin.py | 1 + src/paperless_mail/mail.py | 164 +++++++++++------- .../0010_mailrule_consumption_scope.py | 32 ++++ src/paperless_mail/models.py | 14 ++ 4 files changed, 149 insertions(+), 62 deletions(-) create mode 100644 src/paperless_mail/migrations/0010_mailrule_consumption_scope.py diff --git a/src/paperless_mail/admin.py b/src/paperless_mail/admin.py index b56bc0727..1e22e6ebd 100644 --- a/src/paperless_mail/admin.py +++ b/src/paperless_mail/admin.py @@ -56,6 +56,7 @@ class MailRuleAdmin(admin.ModelAdmin): "filter_body", "filter_attachment_filename", "maximum_age", + "consumption_scope", "attachment_type", ), }, diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index 1e868ceaa..72a74639c 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -269,8 +269,11 @@ class MailAccountHandler(LoggingMixin): return total_processed_files - def handle_message(self, message, rule) -> int: - if not message.attachments: + def handle_message(self, message, rule: MailRule) -> int: + if ( + not message.attachments + and rule.consumption_scope == MailRule.ConsumptionScope.ATTACHMENTS_ONLY + ): return 0 self.log( @@ -286,76 +289,113 @@ class MailAccountHandler(LoggingMixin): processed_attachments = 0 - for att in message.attachments: + if ( + rule.consumption_scope == MailRule.ConsumptionScope.EML_ONLY + or rule.consumption_scope == MailRule.ConsumptionScope.EVERYTHING + ): + os.makedirs(settings.SCRATCH_DIR, exist_ok=True) + _, temp_filename = tempfile.mkstemp( + prefix="paperless-mail-", + dir=settings.SCRATCH_DIR, + ) + with open(temp_filename, "wb") as f: + f.write(message.obj.as_bytes()) - if ( - not att.content_disposition == "attachment" - and rule.attachment_type - == MailRule.AttachmentProcessing.ATTACHMENTS_ONLY - ): - self.log( - "debug", - f"Rule {rule}: " - f"Skipping attachment {att.filename} " - f"with content disposition {att.content_disposition}", - ) - continue + self.log( + "info", + f"Rule {rule}: " + f"Consuming eml from mail " + f"{message.subject} from {message.from_}", + ) - if rule.filter_attachment_filename: - # Force the filename and pattern to the lowercase - # as this is system dependent otherwise - if not fnmatch( - att.filename.lower(), - rule.filter_attachment_filename.lower(), + async_task( + "documents.tasks.consume_file", + path=temp_filename, + override_filename=pathvalidate.sanitize_filename( + message.subject + ".eml", + ), + override_title=message.subject, + override_correspondent_id=correspondent.id if correspondent else None, + override_document_type_id=doc_type.id if doc_type else None, + override_tag_ids=[tag.id] if tag else None, + task_name=message.subject[:100], + ) + processed_attachments += 1 + + if ( + rule.consumption_scope == MailRule.ConsumptionScope.ATTACHMENTS_ONLY + or rule.consumption_scope == MailRule.ConsumptionScope.EVERYTHING + ): + for att in message.attachments: + + if ( + not att.content_disposition == "attachment" + and rule.attachment_type + == MailRule.AttachmentProcessing.ATTACHMENTS_ONLY ): + self.log( + "debug", + f"Rule {rule}: " + f"Skipping attachment {att.filename} " + f"with content disposition {att.content_disposition}", + ) continue - title = self.get_title(message, att, rule) + if rule.filter_attachment_filename: + # Force the filename and pattern to the lowercase + # as this is system dependent otherwise + if not fnmatch( + att.filename.lower(), + rule.filter_attachment_filename.lower(), + ): + continue - # don't trust the content type of the attachment. Could be - # generic application/octet-stream. - mime_type = magic.from_buffer(att.payload, mime=True) + title = self.get_title(message, att, rule) - if is_mime_type_supported(mime_type): + # don't trust the content type of the attachment. Could be + # generic application/octet-stream. + mime_type = magic.from_buffer(att.payload, mime=True) - os.makedirs(settings.SCRATCH_DIR, exist_ok=True) - _, temp_filename = tempfile.mkstemp( - prefix="paperless-mail-", - dir=settings.SCRATCH_DIR, - ) - with open(temp_filename, "wb") as f: - f.write(att.payload) + if is_mime_type_supported(mime_type): - self.log( - "info", - f"Rule {rule}: " - f"Consuming attachment {att.filename} from mail " - f"{message.subject} from {message.from_}", - ) + os.makedirs(settings.SCRATCH_DIR, exist_ok=True) + _, temp_filename = tempfile.mkstemp( + prefix="paperless-mail-", + dir=settings.SCRATCH_DIR, + ) + with open(temp_filename, "wb") as f: + f.write(att.payload) - async_task( - "documents.tasks.consume_file", - path=temp_filename, - override_filename=pathvalidate.sanitize_filename( - att.filename, - ), - override_title=title, - override_correspondent_id=correspondent.id - if correspondent - else None, - override_document_type_id=doc_type.id if doc_type else None, - override_tag_ids=[tag.id] if tag else None, - task_name=att.filename[:100], - ) + self.log( + "info", + f"Rule {rule}: " + f"Consuming attachment {att.filename} from mail " + f"{message.subject} from {message.from_}", + ) - processed_attachments += 1 - else: - self.log( - "debug", - f"Rule {rule}: " - f"Skipping attachment {att.filename} " - f"since guessed mime type {mime_type} is not supported " - f"by paperless", - ) + async_task( + "documents.tasks.consume_file", + path=temp_filename, + override_filename=pathvalidate.sanitize_filename( + att.filename, + ), + override_title=title, + override_correspondent_id=correspondent.id + if correspondent + else None, + override_document_type_id=doc_type.id if doc_type else None, + override_tag_ids=[tag.id] if tag else None, + task_name=att.filename[:100], + ) + + processed_attachments += 1 + else: + self.log( + "debug", + f"Rule {rule}: " + f"Skipping attachment {att.filename} " + f"since guessed mime type {mime_type} is not supported " + f"by paperless", + ) return processed_attachments diff --git a/src/paperless_mail/migrations/0010_mailrule_consumption_scope.py b/src/paperless_mail/migrations/0010_mailrule_consumption_scope.py new file mode 100644 index 000000000..8569cd378 --- /dev/null +++ b/src/paperless_mail/migrations/0010_mailrule_consumption_scope.py @@ -0,0 +1,32 @@ +# Generated by Django 4.0.4 on 2022-04-14 22:36 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("paperless_mail", "0009_alter_mailrule_action_alter_mailrule_folder"), + ] + + operations = [ + migrations.AddField( + model_name="mailrule", + name="consumption_scope", + field=models.PositiveIntegerField( + choices=[ + (1, "Only process attachments."), + ( + 2, + "Process full Mail (with embedded attachments in file) as .eml", + ), + ( + 3, + "Process full Mail (with embedded attachments in file) as .eml + process attachments as separate documents", + ), + ], + default=1, + verbose_name="consumption scope", + ), + ), + ] diff --git a/src/paperless_mail/models.py b/src/paperless_mail/models.py index 2c7b9fb6d..e4809a790 100644 --- a/src/paperless_mail/models.py +++ b/src/paperless_mail/models.py @@ -56,6 +56,14 @@ class MailRule(models.Model): verbose_name = _("mail rule") verbose_name_plural = _("mail rules") + class ConsumptionScope(models.IntegerChoices): + ATTACHMENTS_ONLY = 1, _("Only process attachments.") + EML_ONLY = 2, _("Process full Mail (with embedded attachments in file) as .eml") + EVERYTHING = 3, _( + "Process full Mail (with embedded attachments in file) as .eml " + "+ process attachments as separate documents", + ) + class AttachmentProcessing(models.IntegerChoices): ATTACHMENTS_ONLY = 1, _("Only process attachments.") EVERYTHING = 2, _("Process all files, including 'inline' " "attachments.") @@ -144,6 +152,12 @@ class MailRule(models.Model): ), ) + consumption_scope = models.PositiveIntegerField( + _("consumption scope"), + choices=ConsumptionScope.choices, + default=ConsumptionScope.ATTACHMENTS_ONLY, + ) + action = models.PositiveIntegerField( _("action"), choices=AttachmentAction.choices, From 027897ff0309423f524626b894981298a3606c8b Mon Sep 17 00:00:00 2001 From: phail Date: Tue, 19 Apr 2022 00:39:00 +0200 Subject: [PATCH 005/231] work in progress Mail parsing --- Pipfile | 1 + src/paperless_mail/mail.py | 2 +- src/paperless_tika/apps.py | 2 + src/paperless_tika/parsers.py | 148 ++++++++++++++++++++++++++++++++++ src/paperless_tika/signals.py | 16 ++++ 5 files changed, 168 insertions(+), 1 deletion(-) diff --git a/Pipfile b/Pipfile index 0feabe237..da2644251 100644 --- a/Pipfile +++ b/Pipfile @@ -53,6 +53,7 @@ concurrent-log-handler = "*" zipp = {version = "*", markers = "python_version < '3.9'"} pyzbar = "*" pdf2image = "*" +click = "==8.0.4" [dev-packages] coveralls = "*" diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index 72a74639c..865581446 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -199,7 +199,7 @@ class MailAccountHandler(LoggingMixin): return total_processed_files - def handle_mail_rule(self, M, rule): + def handle_mail_rule(self, M, rule: MailRule): self.log("debug", f"Rule {rule}: Selecting folder {rule.folder}") diff --git a/src/paperless_tika/apps.py b/src/paperless_tika/apps.py index 5cab21427..791d234a0 100644 --- a/src/paperless_tika/apps.py +++ b/src/paperless_tika/apps.py @@ -1,6 +1,7 @@ from django.apps import AppConfig from django.conf import settings from paperless_tika.signals import tika_consumer_declaration +from paperless_tika.signals import tika_consumer_declaration_eml class PaperlessTikaConfig(AppConfig): @@ -11,4 +12,5 @@ class PaperlessTikaConfig(AppConfig): if settings.PAPERLESS_TIKA_ENABLED: document_consumer_declaration.connect(tika_consumer_declaration) + document_consumer_declaration.connect(tika_consumer_declaration_eml) AppConfig.ready(self) diff --git a/src/paperless_tika/parsers.py b/src/paperless_tika/parsers.py index 22218dfe7..294f637ef 100644 --- a/src/paperless_tika/parsers.py +++ b/src/paperless_tika/parsers.py @@ -1,4 +1,6 @@ import os +import re +from io import StringIO import dateutil.parser import requests @@ -6,6 +8,9 @@ from django.conf import settings from documents.parsers import DocumentParser from documents.parsers import make_thumbnail_from_pdf from documents.parsers import ParseError +from PIL import Image +from PIL import ImageDraw +from PIL import ImageFont from tika import parser @@ -97,3 +102,146 @@ class TikaDocumentParser(DocumentParser): file.close() return pdf_path + + +class TikaDocumentParserEml(DocumentParser): + """ + This parser sends documents to a local tika server + """ + + logging_name = "paperless.parsing.tikaeml" + + def get_thumbnail(self, document_path, mime_type, file_name=None): + + img = Image.new("RGB", (500, 700), color="white") + draw = ImageDraw.Draw(img) + font = ImageFont.truetype( + font=settings.THUMBNAIL_FONT_NAME, + size=20, + layout_engine=ImageFont.LAYOUT_BASIC, + ) + draw.text((5, 5), self.text, font=font, fill="black") + + out_path = os.path.join(self.tempdir, "thumb.png") + img.save(out_path) + + return out_path + + def extract_metadata(self, document_path, mime_type): + tika_server = settings.PAPERLESS_TIKA_ENDPOINT + try: + parsed = parser.from_file(document_path, tika_server) + except Exception as e: + self.log( + "warning", + f"Error while fetching document metadata for " f"{document_path}: {e}", + ) + return [] + + return [ + { + "namespace": "", + "prefix": "", + "key": key, + "value": parsed["metadata"][key], + } + for key in parsed["metadata"] + ] + + def parse(self, document_path, mime_type, file_name=None): + self.log("info", f"Sending {document_path} to Tika server") + tika_server = settings.PAPERLESS_TIKA_ENDPOINT + + try: + parsed = parser.from_file(document_path, tika_server) + except Exception as err: + raise ParseError( + f"Could not parse {document_path} with tika server at " + f"{tika_server}: {err}", + ) + + text = re.sub(" +", " ", str(parsed)) + text = re.sub("\n+", "\n", text) + self.text = text + + print(text) + + try: + self.date = dateutil.parser.isoparse(parsed["metadata"]["Creation-Date"]) + except Exception as e: + self.log( + "warning", + f"Unable to extract date for document " f"{document_path}: {e}", + ) + + md_path = self.convert_to_md(document_path, file_name) + self.archive_path = self.convert_md_to_pdf(md_path) + + def convert_md_to_pdf(self, md_path): + pdf_path = os.path.join(self.tempdir, "convert.pdf") + gotenberg_server = settings.PAPERLESS_TIKA_GOTENBERG_ENDPOINT + url = gotenberg_server + "/forms/chromium/convert/markdown" + + self.log("info", f"Converting {md_path} to PDF as {pdf_path}") + html = StringIO( + """ + + + + + My PDF + + + {{ toHTML "convert.md" }} + + + """, + ) + md = StringIO( + """ +# Subject + +blub \nblah +blib + """, + ) + + files = { + "md": ( + os.path.basename(md_path), + md, + ), + "html": ( + "index.html", + html, + ), + } + headers = {} + + try: + response = requests.post(url, files=files, headers=headers) + response.raise_for_status() # ensure we notice bad responses + except Exception as err: + raise ParseError(f"Error while converting document to PDF: {err}") + + with open(pdf_path, "wb") as file: + file.write(response.content) + file.close() + + return pdf_path + + def convert_to_md(self, document_path, file_name): + md_path = os.path.join(self.tempdir, "convert.md") + + self.log("info", f"Converting {document_path} to markdown as {md_path}") + + with open(md_path, "w") as file: + md = [ + "# Subject", + "\n\n", + "blah", + ] + file.writelines(md) + file.close() + + return md_path diff --git a/src/paperless_tika/signals.py b/src/paperless_tika/signals.py index 39838f076..a852cfdb2 100644 --- a/src/paperless_tika/signals.py +++ b/src/paperless_tika/signals.py @@ -22,3 +22,19 @@ def tika_consumer_declaration(sender, **kwargs): "text/rtf": ".rtf", }, } + + +def get_parser_eml(*args, **kwargs): + from .parsers import TikaDocumentParserEml + + return TikaDocumentParserEml(*args, **kwargs) + + +def tika_consumer_declaration_eml(sender, **kwargs): + return { + "parser": get_parser_eml, + "weight": 10, + "mime_types": { + "message/rfc822": ".eml", + }, + } From d8d2d53c59c4902f94b9ac76f16a370662b9086e Mon Sep 17 00:00:00 2001 From: phail Date: Tue, 19 Apr 2022 20:14:31 +0200 Subject: [PATCH 006/231] fix Mail actions mixup --- src/paperless_mail/mail.py | 8 +++--- .../migrations/0011_alter_mailrule_action.py | 27 +++++++++++++++++++ src/paperless_mail/models.py | 14 +++++----- src/paperless_mail/tests/test_mail.py | 20 +++++++------- 4 files changed, 48 insertions(+), 21 deletions(-) create mode 100644 src/paperless_mail/migrations/0011_alter_mailrule_action.py diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index 865581446..8beb17382 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -62,13 +62,13 @@ class FlagMailAction(BaseMailAction): def get_rule_action(rule): - if rule.action == MailRule.AttachmentAction.FLAG: + if rule.action == MailRule.MailAction.FLAG: return FlagMailAction() - elif rule.action == MailRule.AttachmentAction.DELETE: + elif rule.action == MailRule.MailAction.DELETE: return DeleteMailAction() - elif rule.action == MailRule.AttachmentAction.MOVE: + elif rule.action == MailRule.MailAction.MOVE: return MoveMailAction() - elif rule.action == MailRule.AttachmentAction.MARK_READ: + elif rule.action == MailRule.MailAction.MARK_READ: return MarkReadMailAction() else: raise NotImplementedError("Unknown action.") # pragma: nocover diff --git a/src/paperless_mail/migrations/0011_alter_mailrule_action.py b/src/paperless_mail/migrations/0011_alter_mailrule_action.py new file mode 100644 index 000000000..4dbff1386 --- /dev/null +++ b/src/paperless_mail/migrations/0011_alter_mailrule_action.py @@ -0,0 +1,27 @@ +# Generated by Django 4.0.4 on 2022-04-19 18:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("paperless_mail", "0010_mailrule_consumption_scope"), + ] + + operations = [ + migrations.AlterField( + model_name="mailrule", + name="action", + field=models.PositiveIntegerField( + choices=[ + (1, "Delete"), + (2, "Move to specified folder"), + (3, "Mark as read, don't process read mails"), + (4, "Flag the mail, don't process flagged mails"), + ], + default=3, + verbose_name="action", + ), + ), + ] diff --git a/src/paperless_mail/models.py b/src/paperless_mail/models.py index e4809a790..dbf9b17f4 100644 --- a/src/paperless_mail/models.py +++ b/src/paperless_mail/models.py @@ -68,11 +68,11 @@ class MailRule(models.Model): ATTACHMENTS_ONLY = 1, _("Only process attachments.") EVERYTHING = 2, _("Process all files, including 'inline' " "attachments.") - class AttachmentAction(models.IntegerChoices): - DELETE = 1, _("Mark as read, don't process read mails") - MOVE = 2, _("Flag the mail, don't process flagged mails") - MARK_READ = 3, _("Move to specified folder") - FLAG = 4, _("Delete") + class MailAction(models.IntegerChoices): + DELETE = 1, _("Delete") + MOVE = 2, _("Move to specified folder") + MARK_READ = 3, _("Mark as read, don't process read mails") + FLAG = 4, _("Flag the mail, don't process flagged mails") class TitleSource(models.IntegerChoices): FROM_SUBJECT = 1, _("Use subject as title") @@ -160,8 +160,8 @@ class MailRule(models.Model): action = models.PositiveIntegerField( _("action"), - choices=AttachmentAction.choices, - default=AttachmentAction.MARK_READ, + choices=MailAction.choices, + default=MailAction.MARK_READ, ) action_parameter = models.CharField( diff --git a/src/paperless_mail/tests/test_mail.py b/src/paperless_mail/tests/test_mail.py index 9335bcd75..3f3b69871 100644 --- a/src/paperless_mail/tests/test_mail.py +++ b/src/paperless_mail/tests/test_mail.py @@ -467,7 +467,7 @@ class TestMail(DirectoriesMixin, TestCase): _ = MailRule.objects.create( name="testrule", account=account, - action=MailRule.AttachmentAction.MARK_READ, + action=MailRule.MailAction.MARK_READ, ) self.assertEqual(len(self.bogus_mailbox.messages), 3) @@ -490,7 +490,7 @@ class TestMail(DirectoriesMixin, TestCase): _ = MailRule.objects.create( name="testrule", account=account, - action=MailRule.AttachmentAction.DELETE, + action=MailRule.MailAction.DELETE, filter_subject="Invoice", ) @@ -511,7 +511,7 @@ class TestMail(DirectoriesMixin, TestCase): _ = MailRule.objects.create( name="testrule", account=account, - action=MailRule.AttachmentAction.FLAG, + action=MailRule.MailAction.FLAG, filter_subject="Invoice", ) @@ -534,7 +534,7 @@ class TestMail(DirectoriesMixin, TestCase): _ = MailRule.objects.create( name="testrule", account=account, - action=MailRule.AttachmentAction.MOVE, + action=MailRule.MailAction.MOVE, action_parameter="spam", filter_subject="Claim", ) @@ -580,7 +580,7 @@ class TestMail(DirectoriesMixin, TestCase): _ = MailRule.objects.create( name="testrule", account=account, - action=MailRule.AttachmentAction.MOVE, + action=MailRule.MailAction.MOVE, action_parameter="spam", filter_subject="Claim", ) @@ -601,7 +601,7 @@ class TestMail(DirectoriesMixin, TestCase): _ = MailRule.objects.create( name="testrule", account=account, - action=MailRule.AttachmentAction.MOVE, + action=MailRule.MailAction.MOVE, action_parameter="spam", filter_subject="Claim", order=1, @@ -610,7 +610,7 @@ class TestMail(DirectoriesMixin, TestCase): _ = MailRule.objects.create( name="testrule2", account=account, - action=MailRule.AttachmentAction.MOVE, + action=MailRule.MailAction.MOVE, action_parameter="spam", filter_subject="Claim", order=2, @@ -640,7 +640,7 @@ class TestMail(DirectoriesMixin, TestCase): _ = MailRule.objects.create( name="testrule", account=account, - action=MailRule.AttachmentAction.MOVE, + action=MailRule.MailAction.MOVE, action_parameter="spam", ) @@ -665,7 +665,7 @@ class TestMail(DirectoriesMixin, TestCase): name="testrule", filter_from="amazon@amazon.de", account=account, - action=MailRule.AttachmentAction.MOVE, + action=MailRule.MailAction.MOVE, action_parameter="spam", assign_correspondent_from=MailRule.CorrespondentSource.FROM_EMAIL, ) @@ -702,7 +702,7 @@ class TestMail(DirectoriesMixin, TestCase): rule = MailRule.objects.create( name="testrule3", account=account, - action=MailRule.AttachmentAction.DELETE, + action=MailRule.MailAction.DELETE, filter_subject="Claim", ) From 790bcf05ed7f478dd497a8f4fcb47c10063a7859 Mon Sep 17 00:00:00 2001 From: phail Date: Mon, 25 Apr 2022 20:55:00 +0200 Subject: [PATCH 007/231] add prototype archive pdf --- src/paperless_mail/mail_template/index.html | 46 +++++ src/paperless_mail/mail_template/output.css | 0 src/paperless_tika/parsers.py | 186 ++++++++++++-------- 3 files changed, 157 insertions(+), 75 deletions(-) create mode 100644 src/paperless_mail/mail_template/index.html create mode 100644 src/paperless_mail/mail_template/output.css diff --git a/src/paperless_mail/mail_template/index.html b/src/paperless_mail/mail_template/index.html new file mode 100644 index 000000000..b1f332f75 --- /dev/null +++ b/src/paperless_mail/mail_template/index.html @@ -0,0 +1,46 @@ + + + + + + + + + + +
+ +
+ +
23.04.2022 18:18
+ +
From
+
{{ from }}
+ +
Subject
+
{{ Subject }} +
+ +
To
+
{{ To }} +
+ +
CC
+
{{ CC }} +
+ +
BCC
+
{{ BCC }} +
+
+ + +
+ + +
{{ content }} +
+ + + + diff --git a/src/paperless_mail/mail_template/output.css b/src/paperless_mail/mail_template/output.css new file mode 100644 index 000000000..e69de29bb diff --git a/src/paperless_tika/parsers.py b/src/paperless_tika/parsers.py index 294f637ef..9eed095b3 100644 --- a/src/paperless_tika/parsers.py +++ b/src/paperless_tika/parsers.py @@ -8,9 +8,6 @@ from django.conf import settings from documents.parsers import DocumentParser from documents.parsers import make_thumbnail_from_pdf from documents.parsers import ParseError -from PIL import Image -from PIL import ImageDraw -from PIL import ImageFont from tika import parser @@ -112,22 +109,19 @@ class TikaDocumentParserEml(DocumentParser): logging_name = "paperless.parsing.tikaeml" def get_thumbnail(self, document_path, mime_type, file_name=None): + if not self.archive_path: + self.archive_path = self.generate_pdf(document_path) - img = Image.new("RGB", (500, 700), color="white") - draw = ImageDraw.Draw(img) - font = ImageFont.truetype( - font=settings.THUMBNAIL_FONT_NAME, - size=20, - layout_engine=ImageFont.LAYOUT_BASIC, + return make_thumbnail_from_pdf( + self.archive_path, + self.tempdir, + self.logging_group, ) - draw.text((5, 5), self.text, font=font, fill="black") - - out_path = os.path.join(self.tempdir, "thumb.png") - img.save(out_path) - - return out_path def extract_metadata(self, document_path, mime_type): + result = [] + prefix_pattern = re.compile(r"(.*):(.*)") + tika_server = settings.PAPERLESS_TIKA_ENDPOINT try: parsed = parser.from_file(document_path, tika_server) @@ -136,17 +130,38 @@ class TikaDocumentParserEml(DocumentParser): "warning", f"Error while fetching document metadata for " f"{document_path}: {e}", ) - return [] + return result - return [ - { - "namespace": "", - "prefix": "", - "key": key, - "value": parsed["metadata"][key], - } - for key in parsed["metadata"] - ] + for key, value in parsed["metadata"].items(): + if isinstance(value, list): + value = ", ".join([str(e) for e in value]) + value = str(value) + try: + m = prefix_pattern.match(key) + result.append( + { + "namespace": "", + "prefix": m.group(1), + "key": m.group(2), + "value": value, + }, + ) + except AttributeError: + result.append( + { + "namespace": "", + "prefix": "", + "key": key, + "value": value, + }, + ) + except Exception as e: + self.log( + "warning", + f"Error while reading metadata {key}: {value}. Error: " f"{e}", + ) + result.sort(key=lambda item: (item["prefix"], item["key"])) + return result def parse(self, document_path, mime_type, file_name=None): self.log("info", f"Sending {document_path} to Tika server") @@ -160,57 +175,94 @@ class TikaDocumentParserEml(DocumentParser): f"{tika_server}: {err}", ) - text = re.sub(" +", " ", str(parsed)) - text = re.sub("\n+", "\n", text) - self.text = text + metadata = parsed["metadata"].copy() - print(text) + subject = metadata.pop("dc:subject", "") + content = parsed["content"].strip() + + if content.startswith(subject): + content = content[len(subject) :].strip() + + content = re.sub(" +", " ", content) + content = re.sub("\n+", "\n", content) + + self.text = ( + f"{content}\n" + f"______________________\n" + f"From: {metadata.pop('Message-From', '')}\n" + f"To: {metadata.pop('Message-To', '')}\n" + f"CC: {metadata.pop('Message-CC', '')}" + ) try: - self.date = dateutil.parser.isoparse(parsed["metadata"]["Creation-Date"]) + self.date = dateutil.parser.isoparse(parsed["metadata"]["dcterms:created"]) except Exception as e: self.log( "warning", f"Unable to extract date for document " f"{document_path}: {e}", ) - md_path = self.convert_to_md(document_path, file_name) - self.archive_path = self.convert_md_to_pdf(md_path) + self.archive_path = self.generate_pdf(document_path, parsed) + + def generate_pdf(self, document_path, parsed=None): + if not parsed: + self.log("info", f"Sending {document_path} to Tika server") + tika_server = settings.PAPERLESS_TIKA_ENDPOINT + + try: + parsed = parser.from_file(document_path, tika_server) + except Exception as err: + raise ParseError( + f"Could not parse {document_path} with tika server at " + f"{tika_server}: {err}", + ) + + def clean_html(text: str): + if isinstance(text, list): + text = ", ".join([str(e) for e in text]) + if type(text) != str: + text = str(text) + text = text.replace("&", "&") + text = text.replace("<", "<") + text = text.replace(">", ">") + text = text.replace(" ", " ") + text = text.replace("'", "'") + text = text.replace('"', """) + return text - def convert_md_to_pdf(self, md_path): pdf_path = os.path.join(self.tempdir, "convert.pdf") gotenberg_server = settings.PAPERLESS_TIKA_GOTENBERG_ENDPOINT - url = gotenberg_server + "/forms/chromium/convert/markdown" + url = gotenberg_server + "/forms/chromium/convert/html" + + self.log("info", f"Converting {document_path} to PDF as {pdf_path}") + + subject = parsed["metadata"].pop("dc:subject", "") + content = parsed.pop("content", "").strip() + + if content.startswith(subject): + content = content[len(subject) :].strip() - self.log("info", f"Converting {md_path} to PDF as {pdf_path}") html = StringIO( - """ - - - - - My PDF - - - {{ toHTML "convert.md" }} - - - """, - ) - md = StringIO( - """ -# Subject - -blub \nblah -blib - """, + f""" + + + + + My PDF + + +

{clean_html(subject)}

+

From: {clean_html(parsed['metadata'].pop('Message-From', ''))} +

To: {clean_html(parsed['metadata'].pop('Message-To', ''))} +

CC: {clean_html(parsed['metadata'].pop('Message-CC', ''))} +

Date: {clean_html(parsed['metadata'].pop('dcterms:created', ''))} +

{clean_html(content)}
+ + + """, ) files = { - "md": ( - os.path.basename(md_path), - md, - ), "html": ( "index.html", html, @@ -229,19 +281,3 @@ blib file.close() return pdf_path - - def convert_to_md(self, document_path, file_name): - md_path = os.path.join(self.tempdir, "convert.md") - - self.log("info", f"Converting {document_path} to markdown as {md_path}") - - with open(md_path, "w") as file: - md = [ - "# Subject", - "\n\n", - "blah", - ] - file.writelines(md) - file.close() - - return md_path From a2b5b3b2530daf7e88600d88803eb4ee43ab8dad Mon Sep 17 00:00:00 2001 From: phail Date: Tue, 26 Apr 2022 23:12:36 +0200 Subject: [PATCH 008/231] moved files --- src/{paperless_mail => paperless_tika}/mail_template/index.html | 0 src/{paperless_mail => paperless_tika}/mail_template/output.css | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/{paperless_mail => paperless_tika}/mail_template/index.html (100%) rename src/{paperless_mail => paperless_tika}/mail_template/output.css (100%) diff --git a/src/paperless_mail/mail_template/index.html b/src/paperless_tika/mail_template/index.html similarity index 100% rename from src/paperless_mail/mail_template/index.html rename to src/paperless_tika/mail_template/index.html diff --git a/src/paperless_mail/mail_template/output.css b/src/paperless_tika/mail_template/output.css similarity index 100% rename from src/paperless_mail/mail_template/output.css rename to src/paperless_tika/mail_template/output.css From c8081595c4450780eade4921a81d0b1bd08105cc Mon Sep 17 00:00:00 2001 From: phail Date: Tue, 26 Apr 2022 23:25:48 +0200 Subject: [PATCH 009/231] improve pdf generation --- src/paperless_tika/mail_template/index.html | 10 +- src/paperless_tika/parsers.py | 146 ++++++++++---------- 2 files changed, 80 insertions(+), 76 deletions(-) diff --git a/src/paperless_tika/mail_template/index.html b/src/paperless_tika/mail_template/index.html index b1f332f75..f7d7fbf9d 100644 --- a/src/paperless_tika/mail_template/index.html +++ b/src/paperless_tika/mail_template/index.html @@ -12,25 +12,25 @@
-
23.04.2022 18:18
+
{{ date }}
From
{{ from }}
Subject
-
{{ Subject }} +
{{ subject }}
To
-
{{ To }} +
{{ to }}
CC
-
{{ CC }} +
{{ cc }}
BCC
-
{{ BCC }} +
{{ bcc }}
diff --git a/src/paperless_tika/parsers.py b/src/paperless_tika/parsers.py index 9eed095b3..9cea35cf9 100644 --- a/src/paperless_tika/parsers.py +++ b/src/paperless_tika/parsers.py @@ -107,6 +107,25 @@ class TikaDocumentParserEml(DocumentParser): """ logging_name = "paperless.parsing.tikaeml" + _tika_parsed = None + + def get_tika_result(self, document_path): + if not self._tika_parsed: + self.log("info", f"Sending {document_path} to Tika server") + tika_server = settings.PAPERLESS_TIKA_ENDPOINT + + try: + self._tika_parsed = parser.from_file( + document_path, + tika_server, + ) + except Exception as err: + raise ParseError( + f"Could not parse {document_path} with tika server at " + f"{tika_server}: {err}", + ) + + return self._tika_parsed def get_thumbnail(self, document_path, mime_type, file_name=None): if not self.archive_path: @@ -122,10 +141,9 @@ class TikaDocumentParserEml(DocumentParser): result = [] prefix_pattern = re.compile(r"(.*):(.*)") - tika_server = settings.PAPERLESS_TIKA_ENDPOINT try: - parsed = parser.from_file(document_path, tika_server) - except Exception as e: + parsed = self.get_tika_result(document_path) + except ParseError as e: self.log( "warning", f"Error while fetching document metadata for " f"{document_path}: {e}", @@ -164,20 +182,9 @@ class TikaDocumentParserEml(DocumentParser): return result def parse(self, document_path, mime_type, file_name=None): - self.log("info", f"Sending {document_path} to Tika server") - tika_server = settings.PAPERLESS_TIKA_ENDPOINT + parsed = self.get_tika_result(document_path) - try: - parsed = parser.from_file(document_path, tika_server) - except Exception as err: - raise ParseError( - f"Could not parse {document_path} with tika server at " - f"{tika_server}: {err}", - ) - - metadata = parsed["metadata"].copy() - - subject = metadata.pop("dc:subject", "") + subject = parsed["metadata"].get("dc:subject", "") content = parsed["content"].strip() if content.startswith(subject): @@ -187,36 +194,25 @@ class TikaDocumentParserEml(DocumentParser): content = re.sub("\n+", "\n", content) self.text = ( - f"{content}\n" - f"______________________\n" - f"From: {metadata.pop('Message-From', '')}\n" - f"To: {metadata.pop('Message-To', '')}\n" - f"CC: {metadata.pop('Message-CC', '')}" + f"{content}\n\n" + f"From: {parsed['metadata'].get('Message-From', '')}\n" + f"To: {parsed['metadata'].get('Message-To', '')}\n" + f"CC: {parsed['metadata'].get('Message-CC', '')}" ) try: - self.date = dateutil.parser.isoparse(parsed["metadata"]["dcterms:created"]) + self.date = dateutil.parser.isoparse( + parsed["metadata"]["dcterms:created"], + ) except Exception as e: self.log( "warning", f"Unable to extract date for document " f"{document_path}: {e}", ) - self.archive_path = self.generate_pdf(document_path, parsed) - - def generate_pdf(self, document_path, parsed=None): - if not parsed: - self.log("info", f"Sending {document_path} to Tika server") - tika_server = settings.PAPERLESS_TIKA_ENDPOINT - - try: - parsed = parser.from_file(document_path, tika_server) - except Exception as err: - raise ParseError( - f"Could not parse {document_path} with tika server at " - f"{tika_server}: {err}", - ) + self.archive_path = self.generate_pdf(document_path) + def generate_pdf(self, document_path): def clean_html(text: str): if isinstance(text, list): text = ", ".join([str(e) for e in text]) @@ -230,51 +226,59 @@ class TikaDocumentParserEml(DocumentParser): text = text.replace('"', """) return text + parsed = self.get_tika_result(document_path) + pdf_path = os.path.join(self.tempdir, "convert.pdf") gotenberg_server = settings.PAPERLESS_TIKA_GOTENBERG_ENDPOINT url = gotenberg_server + "/forms/chromium/convert/html" self.log("info", f"Converting {document_path} to PDF as {pdf_path}") - subject = parsed["metadata"].pop("dc:subject", "") - content = parsed.pop("content", "").strip() + data = {} + data["subject"] = clean_html(parsed["metadata"].get("dc:subject", "")) + data["from"] = clean_html(parsed["metadata"].get("Message-From", "")) + data["to"] = clean_html(parsed["metadata"].get("Message-To", "")) + data["cc"] = clean_html(parsed["metadata"].get("Message-CC", "")) + data["date"] = clean_html(parsed["metadata"].get("dcterms:created", "")) - if content.startswith(subject): - content = content[len(subject) :].strip() + content = parsed.get("content", "").strip() + if content.startswith(data["subject"]): + content = content[len(data["subject"]) :].strip() + data["content"] = clean_html(content) - html = StringIO( - f""" - - - - - My PDF - - -

{clean_html(subject)}

-

From: {clean_html(parsed['metadata'].pop('Message-From', ''))} -

To: {clean_html(parsed['metadata'].pop('Message-To', ''))} -

CC: {clean_html(parsed['metadata'].pop('Message-CC', ''))} -

Date: {clean_html(parsed['metadata'].pop('dcterms:created', ''))} -

{clean_html(content)}
- - - """, - ) + html_file = os.path.join(os.path.dirname(__file__), "mail_template/index.html") + css_file = os.path.join(os.path.dirname(__file__), "mail_template/output.css") + placeholder_pattern = re.compile(r"{{(.+)}}") + html = StringIO() - files = { - "html": ( - "index.html", - html, - ), - } - headers = {} + with open(html_file, "r") as html_template_handle: + with open(css_file, "rb") as css_handle: + for line in html_template_handle.readlines(): + for placeholder in placeholder_pattern.findall(line): + line = re.sub( + "{{" + placeholder + "}}", + data.get(placeholder.strip(), ""), + line, + ) + html.write(line) + html.seek(0) + files = { + "html": ( + "index.html", + html, + ), + "css": ( + "output.css", + css_handle, + ), + } + headers = {} - try: - response = requests.post(url, files=files, headers=headers) - response.raise_for_status() # ensure we notice bad responses - except Exception as err: - raise ParseError(f"Error while converting document to PDF: {err}") + try: + response = requests.post(url, files=files, headers=headers) + response.raise_for_status() # ensure we notice bad responses + except Exception as err: + raise ParseError(f"Error while converting document to PDF: {err}") with open(pdf_path, "wb") as file: file.write(response.content) From 0e40ef5f352ca3e6ffe5b76374481f2a888e24dd Mon Sep 17 00:00:00 2001 From: phail Date: Wed, 27 Apr 2022 19:52:59 +0200 Subject: [PATCH 010/231] add css for pdf generation --- src/paperless_tika/mail_template/output.css | 860 ++++++++++++++++++++ 1 file changed, 860 insertions(+) diff --git a/src/paperless_tika/mail_template/output.css b/src/paperless_tika/mail_template/output.css index e69de29bb..ea34ab3e6 100644 --- a/src/paperless_tika/mail_template/output.css +++ b/src/paperless_tika/mail_template/output.css @@ -0,0 +1,860 @@ +/* +! tailwindcss v3.0.24 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #e5e7eb; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +*/ + +html { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font family by default. +2. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input:-ms-input-placeholder, textarea:-ms-input-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* +Ensure the default browser behavior of the `hidden` attribute. +*/ + +[hidden] { + display: none; +} + +*, ::before, ::after { + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +.container { + width: 100%; +} + +@media (min-width: 640px) { + .container { + max-width: 640px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 768px; + } +} + +@media (min-width: 1024px) { + .container { + max-width: 1024px; + } +} + +@media (min-width: 1280px) { + .container { + max-width: 1280px; + } +} + +@media (min-width: 1536px) { + .container { + max-width: 1536px; + } +} + +.col-span-12 { + grid-column: span 12 / span 12; +} + +.col-span-10 { + grid-column: span 10 / span 10; +} + +.col-span-2 { + grid-column: span 2 / span 2; +} + +.col-span-1 { + grid-column: span 1 / span 1; +} + +.col-span-9 { + grid-column: span 9 / span 9; +} + +.col-span-8 { + grid-column: span 8 / span 8; +} + +.col-span-3 { + grid-column: span 3 / span 3; +} + +.col-start-3 { + grid-column-start: 3; +} + +.col-start-1 { + grid-column-start: 1; +} + +.col-start-2 { + grid-column-start: 2; +} + +.col-start-12 { + grid-column-start: 12; +} + +.col-start-11 { + grid-column-start: 11; +} + +.col-start-10 { + grid-column-start: 10; +} + +.row-start-1 { + grid-row-start: 1; +} + +.row-start-2 { + grid-row-start: 2; +} + +.row-start-3 { + grid-row-start: 3; +} + +.row-start-4 { + grid-row-start: 4; +} + +.row-start-5 { + grid-row-start: 5; +} + +.mt-5 { + margin-top: 1.25rem; +} + +.mb-5 { + margin-bottom: 1.25rem; +} + +.mt-8 { + margin-top: 2rem; +} + +.mb-8 { + margin-bottom: 2rem; +} + +.mt-16 { + margin-top: 4rem; +} + +.mb-16 { + margin-bottom: 4rem; +} + +.mt-12 { + margin-top: 3rem; +} + +.mb-12 { + margin-bottom: 3rem; +} + +.mt-1 { + margin-top: 0.25rem; +} + +.mt-11 { + margin-top: 2.75rem; +} + +.mb-11 { + margin-bottom: 2.75rem; +} + +.mt-3 { + margin-top: 0.75rem; +} + +.mt-10 { + margin-top: 2.5rem; +} + +.box-border { + box-sizing: border-box; +} + +.box-content { + box-sizing: content-box; +} + +.flex { + display: flex; +} + +.grid { + display: grid; +} + +.h-1 { + height: 0.25rem; +} + +.h-\[4px\] { + height: 4px; +} + +.h-\[8px\] { + height: 8px; +} + +.h-\[30px\] { + height: 30px; +} + +.h-\[2px\] { + height: 2px; +} + +.h-\[1px\] { + height: 1px; +} + +.w-screen { + width: 100vw; +} + +.w-full { + width: 100%; +} + +.max-w-lg { + max-width: 32rem; +} + +.max-w-3xl { + max-width: 48rem; +} + +.max-w-4xl { + max-width: 56rem; +} + +.max-w-7xl { + max-width: 80rem; +} + +.auto-cols-min { + grid-auto-columns: -webkit-min-content; + grid-auto-columns: min-content; +} + +.auto-cols-fr { + grid-auto-columns: minmax(0, 1fr); +} + +.auto-cols-max { + grid-auto-columns: -webkit-max-content; + grid-auto-columns: max-content; +} + +.grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); +} + +.grid-cols-7 { + grid-template-columns: repeat(7, minmax(0, 1fr)); +} + +.grid-cols-12 { + grid-template-columns: repeat(12, minmax(0, 1fr)); +} + +.grid-rows-4 { + grid-template-rows: repeat(4, minmax(0, 1fr)); +} + +.grid-rows-5 { + grid-template-rows: repeat(5, minmax(0, 1fr)); +} + +.flex-col { + flex-direction: column; +} + +.items-center { + align-items: center; +} + +.justify-center { + justify-content: center; +} + +.gap-3 { + gap: 0.75rem; +} + +.gap-2 { + gap: 0.5rem; +} + +.gap-y-3 { + row-gap: 0.75rem; +} + +.gap-x-3 { + -moz-column-gap: 0.75rem; + column-gap: 0.75rem; +} + +.gap-x-2 { + -moz-column-gap: 0.5rem; + column-gap: 0.5rem; +} + +.whitespace-pre-line { + white-space: pre-line; +} + +.border { + border-width: 1px; +} + +.border-t { + border-top-width: 1px; +} + +.border-t-2 { + border-top-width: 2px; +} + +.border-b-2 { + border-bottom-width: 2px; +} + +.border-t-4 { + border-top-width: 4px; +} + +.border-b-4 { + border-bottom-width: 4px; +} + +.border-b { + border-bottom-width: 1px; +} + +.border-solid { + border-style: solid; +} + +.border-black { + --tw-border-opacity: 1; + border-color: rgb(0 0 0 / var(--tw-border-opacity)); +} + +.bg-red-600 { + --tw-bg-opacity: 1; + background-color: rgb(220 38 38 / var(--tw-bg-opacity)); +} + +.bg-white { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + +.bg-slate-300 { + --tw-bg-opacity: 1; + background-color: rgb(203 213 225 / var(--tw-bg-opacity)); +} + +.bg-slate-200 { + --tw-bg-opacity: 1; + background-color: rgb(226 232 240 / var(--tw-bg-opacity)); +} + +.p-3 { + padding: 0.75rem; +} + +.p-4 { + padding: 1rem; +} + +.text-right { + text-align: right; +} + +.align-middle { + vertical-align: middle; +} + +.text-3xl { + font-size: 1.875rem; + line-height: 2.25rem; +} + +.font-bold { + font-weight: 700; +} + +.text-slate-400 { + --tw-text-opacity: 1; + color: rgb(148 163 184 / var(--tw-text-opacity)); +} + +.text-blue-600 { + --tw-text-opacity: 1; + color: rgb(37 99 235 / var(--tw-text-opacity)); +} + +.underline { + -webkit-text-decoration-line: underline; + text-decoration-line: underline; +} From c1efe11cf3908aa6920e795a785451fd11c2eb71 Mon Sep 17 00:00:00 2001 From: phail Date: Wed, 27 Apr 2022 23:32:10 +0200 Subject: [PATCH 011/231] improve pdf generation --- src/paperless_tika/mail_template/index.html | 22 +++++++-------- src/paperless_tika/mail_template/output.css | 12 ++++----- src/paperless_tika/parsers.py | 30 ++++++++++++++++++--- 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/src/paperless_tika/mail_template/index.html b/src/paperless_tika/mail_template/index.html index f7d7fbf9d..7a8740dd8 100644 --- a/src/paperless_tika/mail_template/index.html +++ b/src/paperless_tika/mail_template/index.html @@ -14,24 +14,20 @@
{{ date }}
-
From
+
{{ from_label }}
{{ from }}
-
Subject
-
{{ subject }} -
+
{{ subject_label }}
+
{{ subject }}
-
To
-
{{ to }} -
+
{{ to_label }}
+
{{ to }}
-
CC
-
{{ cc }} -
+
{{ cc_label }}
+
{{ cc }}
-
BCC
-
{{ bcc }} -
+
{{ bcc_label }}
+
{{ bcc }}
diff --git a/src/paperless_tika/mail_template/output.css b/src/paperless_tika/mail_template/output.css index ea34ab3e6..8b05e953b 100644 --- a/src/paperless_tika/mail_template/output.css +++ b/src/paperless_tika/mail_template/output.css @@ -696,7 +696,7 @@ Ensure the default browser behavior of the `hidden` attribute. } .auto-cols-fr { - grid-auto-columns: minmax(0, 1fr); + grid-auto-columns: minmax(); } .auto-cols-max { @@ -705,23 +705,23 @@ Ensure the default browser behavior of the `hidden` attribute. } .grid-cols-5 { - grid-template-columns: repeat(5, minmax(0, 1fr)); + grid-template-columns: repeat(5, minmax()); } .grid-cols-7 { - grid-template-columns: repeat(7, minmax(0, 1fr)); + grid-template-columns: repeat(7, minmax()); } .grid-cols-12 { - grid-template-columns: repeat(12, minmax(0, 1fr)); + grid-template-columns: repeat(12, minmax()); } .grid-rows-4 { - grid-template-rows: repeat(4, minmax(0, 1fr)); + grid-template-rows: repeat(4, minmax()); } .grid-rows-5 { - grid-template-rows: repeat(5, minmax(0, 1fr)); + grid-template-rows: repeat(5, minmax()); } .flex-col { diff --git a/src/paperless_tika/parsers.py b/src/paperless_tika/parsers.py index 9cea35cf9..bc6c7aef9 100644 --- a/src/paperless_tika/parsers.py +++ b/src/paperless_tika/parsers.py @@ -215,7 +215,7 @@ class TikaDocumentParserEml(DocumentParser): def generate_pdf(self, document_path): def clean_html(text: str): if isinstance(text, list): - text = ", ".join([str(e) for e in text]) + text = "\n".join([str(e) for e in text]) if type(text) != str: text = str(text) text = text.replace("&", "&") @@ -236,9 +236,20 @@ class TikaDocumentParserEml(DocumentParser): data = {} data["subject"] = clean_html(parsed["metadata"].get("dc:subject", "")) + if data["subject"] != "": + data["subject_label"] = "Subject" data["from"] = clean_html(parsed["metadata"].get("Message-From", "")) + if data["from"] != "": + data["from_label"] = "From" data["to"] = clean_html(parsed["metadata"].get("Message-To", "")) + if data["to"] != "": + data["to_label"] = "To" data["cc"] = clean_html(parsed["metadata"].get("Message-CC", "")) + if data["cc"] != "": + data["cc_label"] = "CC" + data["bcc"] = clean_html(parsed["metadata"].get("Message-BCC", "")) + if data["bcc"] != "": + data["bcc_label"] = "BCC" data["date"] = clean_html(parsed["metadata"].get("dcterms:created", "")) content = parsed.get("content", "").strip() @@ -273,9 +284,22 @@ class TikaDocumentParserEml(DocumentParser): ), } headers = {} - + data = { + "marginTop": "0", + "marginBottom": "0", + "marginLeft": "0", + "marginRight": "0", + "paperWidth": "8.27", + "paperHeight": "11.7", + "scale": "1.0", + } try: - response = requests.post(url, files=files, headers=headers) + response = requests.post( + url, + files=files, + headers=headers, + data=data, + ) response.raise_for_status() # ensure we notice bad responses except Exception as err: raise ParseError(f"Error while converting document to PDF: {err}") From 47189643ff07059e9c9c256f725bdf837c481811 Mon Sep 17 00:00:00 2001 From: phail Date: Fri, 29 Apr 2022 22:58:11 +0200 Subject: [PATCH 012/231] add eml parser to paperless_mail --- Pipfile | 1 + .../compose/docker-compose.postgres-tika.yml | 2 +- .../docker-compose.sqlite-tika.arm.yml | 7 +- docker/compose/docker-compose.sqlite-tika.yml | 2 +- docs/configuration.rst | 2 +- docs/troubleshooting.rst | 2 +- scripts/start_services.sh | 2 +- src/paperless_mail/apps.py | 7 + src/paperless_mail/mail_template/index.html | 56 + src/paperless_mail/mail_template/input.css | 3 + src/paperless_mail/mail_template/output.css | 706 +++++++++ .../mail_template/package-lock.json | 1260 +++++++++++++++++ src/paperless_mail/mail_template/package.json | 5 + .../mail_template/tailwind.config.js | 7 + src/paperless_mail/parsers.py | 225 +++ src/paperless_mail/signals.py | 14 + 16 files changed, 2293 insertions(+), 8 deletions(-) create mode 100644 src/paperless_mail/mail_template/index.html create mode 100644 src/paperless_mail/mail_template/input.css create mode 100644 src/paperless_mail/mail_template/output.css create mode 100644 src/paperless_mail/mail_template/package-lock.json create mode 100644 src/paperless_mail/mail_template/package.json create mode 100644 src/paperless_mail/mail_template/tailwind.config.js create mode 100644 src/paperless_mail/parsers.py create mode 100644 src/paperless_mail/signals.py diff --git a/Pipfile b/Pipfile index da2644251..debccb323 100644 --- a/Pipfile +++ b/Pipfile @@ -54,6 +54,7 @@ zipp = {version = "*", markers = "python_version < '3.9'"} pyzbar = "*" pdf2image = "*" click = "==8.0.4" +bleach = "*" [dev-packages] coveralls = "*" diff --git a/docker/compose/docker-compose.postgres-tika.yml b/docker/compose/docker-compose.postgres-tika.yml index c6a72e903..ad856b0fe 100644 --- a/docker/compose/docker-compose.postgres-tika.yml +++ b/docker/compose/docker-compose.postgres-tika.yml @@ -82,7 +82,7 @@ services: restart: unless-stopped command: - "gotenberg" - - "--chromium-disable-routes=true" + - "--chromium-disable-web-security" tika: image: apache/tika diff --git a/docker/compose/docker-compose.sqlite-tika.arm.yml b/docker/compose/docker-compose.sqlite-tika.arm.yml index d6ac848ec..930c66884 100644 --- a/docker/compose/docker-compose.sqlite-tika.arm.yml +++ b/docker/compose/docker-compose.sqlite-tika.arm.yml @@ -69,10 +69,11 @@ services: PAPERLESS_TIKA_ENDPOINT: http://tika:9998 gotenberg: - image: thecodingmachine/gotenberg + image: gotenberg/gotenberg:7 restart: unless-stopped - environment: - DISABLE_GOOGLE_CHROME: 1 + command: + - "gotenberg" + - "--chromium-disable-web-security" tika: image: iwishiwasaneagle/apache-tika-arm@sha256:a78c25ffe57ecb1a194b2859d42a61af46e9e845191512b8f1a4bf90578ffdfd diff --git a/docker/compose/docker-compose.sqlite-tika.yml b/docker/compose/docker-compose.sqlite-tika.yml index d9327533e..147f803a1 100644 --- a/docker/compose/docker-compose.sqlite-tika.yml +++ b/docker/compose/docker-compose.sqlite-tika.yml @@ -71,7 +71,7 @@ services: restart: unless-stopped command: - "gotenberg" - - "--chromium-disable-routes=true" + - "--chromium-disable-web-security" tika: image: apache/tika diff --git a/docs/configuration.rst b/docs/configuration.rst index 3541f2e07..d4bde7bc8 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -494,7 +494,7 @@ requires are as follows: restart: unless-stopped command: - "gotenberg" - - "--chromium-disable-routes=true" + - "--chromium-disable-web-security" tika: image: apache/tika diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index 3ae4909de..4e3cada82 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -129,7 +129,7 @@ If using docker-compose, this is achieved by the following configuration change restart: unless-stopped command: - "gotenberg" - - "--chromium-disable-routes=true" + - "--chromium-disable-web-security" - "--api-timeout=60" Permission denied errors in the consumption directory diff --git a/scripts/start_services.sh b/scripts/start_services.sh index 24e3233cd..bebb5c913 100755 --- a/scripts/start_services.sh +++ b/scripts/start_services.sh @@ -2,5 +2,5 @@ docker run -p 5432:5432 -e POSTGRES_PASSWORD=password -v paperless_pgdata:/var/lib/postgresql/data -d postgres:13 docker run -d -p 6379:6379 redis:latest -docker run -p 3000:3000 -d gotenberg/gotenberg:7 +docker run -p 3000:3000 -d gotenberg/gotenberg:7 gotenberg --chromium-disable-web-security docker run -p 9998:9998 -d apache/tika diff --git a/src/paperless_mail/apps.py b/src/paperless_mail/apps.py index 1c5d656e0..fa6b1a267 100644 --- a/src/paperless_mail/apps.py +++ b/src/paperless_mail/apps.py @@ -1,8 +1,15 @@ from django.apps import AppConfig from django.utils.translation import gettext_lazy as _ +from paperless_mail.signals import mail_consumer_declaration class PaperlessMailConfig(AppConfig): name = "paperless_mail" verbose_name = _("Paperless mail") + + def ready(self): + from documents.signals import document_consumer_declaration + + document_consumer_declaration.connect(mail_consumer_declaration) + AppConfig.ready(self) diff --git a/src/paperless_mail/mail_template/index.html b/src/paperless_mail/mail_template/index.html new file mode 100644 index 000000000..a3a01cb3e --- /dev/null +++ b/src/paperless_mail/mail_template/index.html @@ -0,0 +1,56 @@ + + + + + + + + + + +
+ +
+ +
{{ date }}
+ +
{{ from_label }}
+
{{ from }}
+ +
{{ subject_label }}
+
{{ subject }}
+ +
{{ to_label }}
+
{{ to }}
+ +
{{ cc_label }}
+
{{ cc }}
+ +
{{ bcc_label }}
+
{{ bcc }}
+ +
{{ attachments_label }}
+
{{ attachments }}
+
+ + +
+ + +
{{ content }}
+ +
+ +
+ + + + diff --git a/src/paperless_mail/mail_template/input.css b/src/paperless_mail/mail_template/input.css new file mode 100644 index 000000000..b5c61c956 --- /dev/null +++ b/src/paperless_mail/mail_template/input.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/src/paperless_mail/mail_template/output.css b/src/paperless_mail/mail_template/output.css new file mode 100644 index 000000000..fa51c7539 --- /dev/null +++ b/src/paperless_mail/mail_template/output.css @@ -0,0 +1,706 @@ +/* +! tailwindcss v3.0.24 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #e5e7eb; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +*/ + +html { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font family by default. +2. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input:-ms-input-placeholder, textarea:-ms-input-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* +Ensure the default browser behavior of the `hidden` attribute. +*/ + +[hidden] { + display: none; +} + +*, ::before, ::after { + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +.container { + width: 100%; +} + +@media (min-width: 640px) { + .container { + max-width: 640px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 768px; + } +} + +@media (min-width: 1024px) { + .container { + max-width: 1024px; + } +} + +@media (min-width: 1280px) { + .container { + max-width: 1280px; + } +} + +@media (min-width: 1536px) { + .container { + max-width: 1536px; + } +} + +.col-span-2 { + grid-column: span 2 / span 2; +} + +.col-span-8 { + grid-column: span 8 / span 8; +} + +.col-span-10 { + grid-column: span 10 / span 10; +} + +.col-span-3 { + grid-column: span 3 / span 3; +} + +.col-span-4 { + grid-column: span 4 / span 4; +} + +.col-span-7 { + grid-column: span 7 / span 7; +} + +.col-start-11 { + grid-column-start: 11; +} + +.col-start-1 { + grid-column-start: 1; +} + +.col-start-2 { + grid-column-start: 2; +} + +.col-start-10 { + grid-column-start: 10; +} + +.col-start-9 { + grid-column-start: 9; +} + +.row-start-1 { + grid-row-start: 1; +} + +.row-start-2 { + grid-row-start: 2; +} + +.row-start-3 { + grid-row-start: 3; +} + +.row-start-4 { + grid-row-start: 4; +} + +.row-start-5 { + grid-row-start: 5; +} + +.row-start-6 { + grid-row-start: 6; +} + +.my-1 { + margin-top: 0.25rem; + margin-bottom: 0.25rem; +} + +.my-0\.5 { + margin-top: 0.125rem; + margin-bottom: 0.125rem; +} + +.my-0 { + margin-top: 0px; + margin-bottom: 0px; +} + +.mb-5 { + margin-bottom: 1.25rem; +} + +.box-content { + box-sizing: content-box; +} + +.flex { + display: flex; +} + +.grid { + display: grid; +} + +.h-\[1px\] { + height: 1px; +} + +.w-screen { + width: 100vw; +} + +.w-full { + width: 100%; +} + +.max-w-4xl { + max-width: 56rem; +} + +.grid-cols-12 { + grid-template-columns: repeat(12, minmax(0, 1fr)); +} + +.grid-rows-5 { + grid-template-rows: repeat(5, minmax(0, 1fr)); +} + +.flex-col { + flex-direction: column; +} + +.items-center { + align-items: center; +} + +.gap-x-2 { + -moz-column-gap: 0.5rem; + column-gap: 0.5rem; +} + +.whitespace-pre-line { + white-space: pre-line; +} + +.break-words { + overflow-wrap: break-word; +} + +.border-t { + border-top-width: 1px; +} + +.border-b { + border-bottom-width: 1px; +} + +.border-solid { + border-style: solid; +} + +.border-black { + --tw-border-opacity: 1; + border-color: rgb(0 0 0 / var(--tw-border-opacity)); +} + +.bg-white { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + +.bg-slate-200 { + --tw-bg-opacity: 1; + background-color: rgb(226 232 240 / var(--tw-bg-opacity)); +} + +.p-4 { + padding: 1rem; +} + +.text-right { + text-align: right; +} + +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} + +.font-bold { + font-weight: 700; +} + +.text-slate-400 { + --tw-text-opacity: 1; + color: rgb(148 163 184 / var(--tw-text-opacity)); +} + +.text-blue-600 { + --tw-text-opacity: 1; + color: rgb(37 99 235 / var(--tw-text-opacity)); +} + +.underline { + -webkit-text-decoration-line: underline; + text-decoration-line: underline; +} diff --git a/src/paperless_mail/mail_template/package-lock.json b/src/paperless_mail/mail_template/package-lock.json new file mode 100644 index 000000000..9d7a08b10 --- /dev/null +++ b/src/paperless_mail/mail_template/package-lock.json @@ -0,0 +1,1260 @@ +{ + "name": "phail-html", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "devDependencies": { + "tailwindcss": "^3.0.24" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "node_modules/detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "dependencies": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", + "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.1", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.6" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.0.24", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz", + "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==", + "dev": true, + "dependencies": { + "arg": "^5.0.1", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.12", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + } + }, + "dependencies": { + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postcss": { + "version": "8.4.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", + "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==", + "dev": true, + "requires": { + "nanoid": "^3.3.1", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.6" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tailwindcss": { + "version": "3.0.24", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz", + "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==", + "dev": true, + "requires": { + "arg": "^5.0.1", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.12", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } + } +} diff --git a/src/paperless_mail/mail_template/package.json b/src/paperless_mail/mail_template/package.json new file mode 100644 index 000000000..48785a003 --- /dev/null +++ b/src/paperless_mail/mail_template/package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "tailwindcss": "^3.0.24" + } +} diff --git a/src/paperless_mail/mail_template/tailwind.config.js b/src/paperless_mail/mail_template/tailwind.config.js new file mode 100644 index 000000000..1e01796ee --- /dev/null +++ b/src/paperless_mail/mail_template/tailwind.config.js @@ -0,0 +1,7 @@ +module.exports = { + content: ['./*.html'], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/src/paperless_mail/parsers.py b/src/paperless_mail/parsers.py new file mode 100644 index 000000000..c3ac323ae --- /dev/null +++ b/src/paperless_mail/parsers.py @@ -0,0 +1,225 @@ +import os +import re +from io import StringIO + +import requests +from bleach import clean +from bleach import linkify +from django.conf import settings +from documents.parsers import DocumentParser +from documents.parsers import make_thumbnail_from_pdf +from documents.parsers import ParseError +from imap_tools import MailMessage + + +class MailDocumentParser(DocumentParser): + """ + This parser sends documents to a local tika server + """ + + logging_name = "paperless.parsing.mail" + _parsed = None + + def get_parsed(self, document_path) -> MailMessage: + if not self._parsed: + try: + with open(document_path, "rb") as eml: + self._parsed = MailMessage.from_bytes(eml.read()) + except Exception as err: + raise ParseError( + f"Could not parse {document_path}: {err}", + ) + + return self._parsed + + def get_thumbnail(self, document_path, mime_type, file_name=None): + if not self.archive_path: + self.archive_path = self.generate_pdf(document_path) + + return make_thumbnail_from_pdf( + self.archive_path, + self.tempdir, + self.logging_group, + ) + + def extract_metadata(self, document_path, mime_type): + result = [] + + try: + mail = self.get_parsed(document_path) + except ParseError as e: + self.log( + "warning", + f"Error while fetching document metadata for " f"{document_path}: {e}", + ) + return result + + for key, value in mail.headers.items(): + value = ", ".join(i for i in value) + + result.append( + { + "namespace": "", + "prefix": "header", + "key": key, + "value": value, + }, + ) + + result.append( + { + "namespace": "", + "prefix": "", + "key": "attachments", + "value": ", ".join( + f"{attachment.filename}({(attachment.size / 1024):.2f} KiB)" + for attachment in mail.attachments + ), + }, + ) + + result.append( + { + "namespace": "", + "prefix": "", + "key": "date", + "value": mail.date.strftime("%Y-%m-%d %H:%M:%S %Z"), + }, + ) + + result.sort(key=lambda item: (item["prefix"], item["key"])) + return result + + def parse(self, document_path, mime_type, file_name=None): + mail = self.get_parsed(document_path) + + content = mail.text.strip() + + content = re.sub(" +", " ", content) + content = re.sub("\n+", "\n", content) + + self.text = f"{content}\n\n" + self.text += f"Subject: {mail.subject}\n" + self.text += f"From: {mail.from_values.full}\n" + self.text += f"To: {', '.join(address.full for address in mail.to_values)}\n" + if len(mail.cc_values) >= 1: + self.text += ( + f"CC: {', '.join(address.full for address in mail.cc_values)}\n" + ) + if len(mail.bcc_values) >= 1: + self.text += ( + f"BCC: {', '.join(address.full for address in mail.bcc_values)}\n" + ) + if len(mail.attachments) >= 1: + att = ", ".join(f"{a.filename} ({a.size})" for a in mail.attachments) + self.text += f"Attachments: {att}" + + self.date = mail.date + self.archive_path = self.generate_pdf(document_path) + + def generate_pdf(self, document_path): + def clean_html(text: str): + if isinstance(text, list): + text = "\n".join([str(e) for e in text]) + if type(text) != str: + text = str(text) + text = text.replace("&", "&") + text = text.replace("<", "<") + text = text.replace(">", ">") + text = text.replace(" ", "  ") + text = text.replace("'", "'") + text = text.replace('"', """) + text = clean(text) + text = linkify(text, parse_email=True) + text = text.replace("\n", "
") + return text + + def clean_html_script(text: str): + text = text.replace("
diff --git a/src/paperless_mail/tests/samples/simple_text.eml b/src/paperless_mail/tests/samples/simple_text.eml index 49080bde8..ae5cc579d 100644 --- a/src/paperless_mail/tests/samples/simple_text.eml +++ b/src/paperless_mail/tests/samples/simple_text.eml @@ -14,6 +14,8 @@ User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.1 Content-Language: en-US To: some@one.de +Cc: asdasd@æsdasd.de, asdadasdasdasda.asdasd@æsdasd.de +Bcc: fdf@fvf.de From: Some One Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py index e545067a4..66b19d182 100644 --- a/src/paperless_mail/tests/test_parsers.py +++ b/src/paperless_mail/tests/test_parsers.py @@ -69,7 +69,7 @@ class TestParser(TestCase): # The created intermediary pdf is not reproducible. But the thumbnail image should always look the same. expected_hash = ( - "18a2513c80584e538c4a129e8a2b0ce19bf0276eab9c95b72fa93e941db38d12" + "eeb2cf861f4873d2e569d0dfbfd385c2ac11722accf0fd3a32a54e3b115317a9" ) self.assertEqual( thumb_hash, @@ -226,7 +226,7 @@ class TestParser(TestCase): # Validate parsing returns the expected results parser.parse(os.path.join(self.SAMPLE_FILES, "html.eml"), "message/rfc822") - text_expected = "Some Text\nand an embedded image.\n\nSubject: HTML Message\n\nFrom: Name \n\nTo: someone@example.de\n\nAttachments: IntM6gnXFm00FEV5.png (6.89 KiB)\n\nHTML content: Some Text\nand an embedded image.\nParagraph unchanged." + text_expected = "Some Text\r\n\r\nand an embedded image.\n\nSubject: HTML Message\n\nFrom: Name \n\nTo: someone@example.de\n\nAttachments: IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (0.59 MiB)\n\nHTML content: Some Text\nand an embedded image.\nParagraph unchanged." self.assertEqual(text_expected, parser.text) self.assertEqual( datetime.datetime( @@ -241,6 +241,27 @@ class TestParser(TestCase): parser.date, ) + # Validate parsing returns the expected results + parser = MailDocumentParser(None) + parser.parse( + os.path.join(self.SAMPLE_FILES, "simple_text.eml"), + "message/rfc822", + ) + text_expected = "This is just a simple Text Mail.\n\nSubject: Simple Text Mail\n\nFrom: Some One \n\nTo: some@one.de\n\nCC: asdasd@æsdasd.de, asdadasdasdasda.asdasd@æsdasd.de\n\nBCC: fdf@fvf.de\n\n" + self.assertEqual(text_expected, parser.text) + self.assertEqual( + datetime.datetime( + 2022, + 10, + 12, + 21, + 40, + 43, + tzinfo=datetime.timezone(datetime.timedelta(seconds=7200)), + ), + parser.date, + ) + # Just check if file exists, the unittest for generate_pdf() goes deeper. self.assertTrue(os.path.isfile(parser.archive_path)) @@ -267,6 +288,18 @@ class TestParser(TestCase): parsed = parser.tika_parse(html) self.assertEqual(expected_text, parsed) + @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_mail") + @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_html") + def test_generate_pdf_parse_error(self, m: mock.MagicMock, n: mock.MagicMock): + m.return_value = b"" + n.return_value = b"" + parser = MailDocumentParser(None) + + # Check if exception is raised when the pdf can not be created. + parser.gotenberg_server = "" + with pytest.raises(ParseError): + parser.generate_pdf(os.path.join(self.SAMPLE_FILES, "html.eml")) + @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output def test_generate_pdf(self, m): parser = MailDocumentParser(None) @@ -295,7 +328,7 @@ class TestParser(TestCase): # The created pdf is not reproducible. But the converted image should always look the same. expected_hash = ( - "23468c4597d63bbefd38825e27c7f05ac666573fc35447d9ddf1784c9c31c6ea" + "4f338619575a21c5227de003a14216b07ba00a372ca5f132745e974a1f990e09" ) self.assertEqual( thumb_hash, @@ -341,7 +374,7 @@ class TestParser(TestCase): # The created pdf is not reproducible. But the converted image should always look the same. expected_hash = ( - "635bda532707faf69f06b040660445b656abcc7d622cc29c24a5c7fd2c713c5f" + "8734a3f0a567979343824e468cd737bf29c02086bbfd8773e94feb986968ad32" ) self.assertEqual( thumb_hash, From 90cb0836bb5d5f06b205290c2431efa7527b7c72 Mon Sep 17 00:00:00 2001 From: phail Date: Thu, 27 Oct 2022 23:11:41 +0200 Subject: [PATCH 034/231] Downgrade pdf validation to text only --- src/paperless_mail/tests/test_parsers.py | 84 +++--------------------- 1 file changed, 10 insertions(+), 74 deletions(-) diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py index 66b19d182..953263f78 100644 --- a/src/paperless_mail/tests/test_parsers.py +++ b/src/paperless_mail/tests/test_parsers.py @@ -8,8 +8,8 @@ from urllib.request import urlopen import pytest from django.test import TestCase from documents.parsers import ParseError -from documents.parsers import run_convert from paperless_mail.parsers import MailDocumentParser +from pdfminer.high_level import extract_text class TestParser(TestCase): @@ -311,30 +311,9 @@ class TestParser(TestCase): pdf_path = parser.generate_pdf(os.path.join(self.SAMPLE_FILES, "html.eml")) self.assertTrue(os.path.isfile(pdf_path)) - converted = os.path.join(parser.tempdir, "test_generate_pdf.webp") - run_convert( - density=300, - scale="500x5000>", - alpha="remove", - strip=True, - trim=False, - auto_orient=True, - input_file=f"{pdf_path}", # Do net define an index to convert all pages. - output_file=converted, - logging_group=None, - ) - self.assertTrue(os.path.isfile(converted)) - thumb_hash = self.hashfile(converted) - - # The created pdf is not reproducible. But the converted image should always look the same. - expected_hash = ( - "4f338619575a21c5227de003a14216b07ba00a372ca5f132745e974a1f990e09" - ) - self.assertEqual( - thumb_hash, - expected_hash, - f"PDF looks different. Check if {converted} looks weird.", - ) + extracted = extract_text(pdf_path) + expected = "From Name \n\n2022-10-15 09:23\n\nSubject HTML Message\n\nTo someone@example.de\n\nAttachments IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (0.59 MiB)\n\nSome Text \n\nand an embedded image.\n\n\x0cSome Text\n\n This image should not be shown.\n\nand an embedded image.\n\nParagraph unchanged.\n\n\x0c" + self.assertEqual(expected, extracted) def test_mail_to_html(self): parser = MailDocumentParser(None) @@ -357,30 +336,9 @@ class TestParser(TestCase): file.write(parser.generate_pdf_from_mail(mail)) file.close() - converted = os.path.join(parser.tempdir, "test_generate_pdf_from_mail.webp") - run_convert( - density=300, - scale="500x5000>", - alpha="remove", - strip=True, - trim=False, - auto_orient=True, - input_file=f"{pdf_path}", # Do net define an index to convert all pages. - output_file=converted, - logging_group=None, - ) - self.assertTrue(os.path.isfile(converted)) - thumb_hash = self.hashfile(converted) - - # The created pdf is not reproducible. But the converted image should always look the same. - expected_hash = ( - "8734a3f0a567979343824e468cd737bf29c02086bbfd8773e94feb986968ad32" - ) - self.assertEqual( - thumb_hash, - expected_hash, - f"PDF looks different. Check if {converted} looks weird.", - ) + extracted = extract_text(pdf_path) + expected = "From Name \n\n2022-10-15 09:23\n\nSubject HTML Message\n\nTo someone@example.de\n\nAttachments IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (0.59 MiB)\n\nSome Text \n\nand an embedded image.\n\n\x0c" + self.assertEqual(expected, extracted) def test_transform_inline_html(self): class MailAttachmentMock: @@ -432,31 +390,9 @@ class TestParser(TestCase): file.write(result) file.close() - converted = os.path.join(parser.tempdir, "test_generate_pdf_from_html.webp") - run_convert( - density=300, - scale="500x5000>", - alpha="remove", - strip=True, - trim=False, - auto_orient=True, - input_file=f"{pdf_path}", # Do net define an index to convert all pages. - output_file=converted, - logging_group=None, - ) - self.assertTrue(os.path.isfile(converted)) - thumb_hash = self.hashfile(converted) - - # The created pdf is not reproducible. But the converted image should always look the same. - expected_hash = ( - "267d61f0ab8f128a037002a424b2cb4bfe18a81e17f0b70f15d241688ed47d1a" - ) - self.assertEqual( - thumb_hash, - expected_hash, - f"PDF looks different. Check if {converted} looks weird. " - f"If Rick Astley is shown, Gotenberg loads from web which is bad for Mail content.", - ) + extracted = extract_text(pdf_path) + expected = "Some Text\n\n This image should not be shown.\n\nand an embedded image.\n\nParagraph unchanged.\n\n\x0c" + self.assertEqual(expected, extracted) def test_is_online_image_still_available(self): """ From 3c81a7468b47cdf5a2df0826429df99ab21f769b Mon Sep 17 00:00:00 2001 From: phail Date: Thu, 27 Oct 2022 23:41:29 +0200 Subject: [PATCH 035/231] replace thumbnail creation with mock --- src/paperless_mail/tests/test_parsers.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py index 953263f78..f4985a6ee 100644 --- a/src/paperless_mail/tests/test_parsers.py +++ b/src/paperless_mail/tests/test_parsers.py @@ -57,24 +57,21 @@ class TestParser(TestCase): sha256.update(data) return sha256.hexdigest() + @mock.patch("paperless_mail.parsers.make_thumbnail_from_pdf") @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output - def test_get_thumbnail(self, m): + def test_get_thumbnail(self, m, mock_make_thumbnail_from_pdf: mock.MagicMock): parser = MailDocumentParser(None) thumb = parser.get_thumbnail( os.path.join(self.SAMPLE_FILES, "simple_text.eml"), "message/rfc822", ) - self.assertTrue(os.path.isfile(thumb)) - thumb_hash = self.hashfile(thumb) - - # The created intermediary pdf is not reproducible. But the thumbnail image should always look the same. - expected_hash = ( - "eeb2cf861f4873d2e569d0dfbfd385c2ac11722accf0fd3a32a54e3b115317a9" + self.assertEqual( + parser.archive_path, + mock_make_thumbnail_from_pdf.call_args_list[0].args[0], ) self.assertEqual( - thumb_hash, - expected_hash, - "Thumbnail file hash not as expected.", + parser.tempdir, + mock_make_thumbnail_from_pdf.call_args_list[0].args[1], ) @mock.patch("documents.loggers.LoggingMixin.log") From 2204090151dbb34f57af8482366db1b3a4153ad8 Mon Sep 17 00:00:00 2001 From: phail Date: Thu, 27 Oct 2022 23:53:47 +0200 Subject: [PATCH 036/231] fix string --- src/paperless_mail/tests/test_parsers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py index f4985a6ee..596e7d180 100644 --- a/src/paperless_mail/tests/test_parsers.py +++ b/src/paperless_mail/tests/test_parsers.py @@ -223,7 +223,7 @@ class TestParser(TestCase): # Validate parsing returns the expected results parser.parse(os.path.join(self.SAMPLE_FILES, "html.eml"), "message/rfc822") - text_expected = "Some Text\r\n\r\nand an embedded image.\n\nSubject: HTML Message\n\nFrom: Name \n\nTo: someone@example.de\n\nAttachments: IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (0.59 MiB)\n\nHTML content: Some Text\nand an embedded image.\nParagraph unchanged." + text_expected = "Some Text\nand an embedded image.\n\nSubject: HTML Message\n\nFrom: Name \n\nTo: someone@example.de\n\nAttachments: IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (0.59 MiB)\n\nHTML content: Some Text\nand an embedded image.\nParagraph unchanged." self.assertEqual(text_expected, parser.text) self.assertEqual( datetime.datetime( From 6df73ae940420eed2b1f5c300b90992d0becb013 Mon Sep 17 00:00:00 2001 From: phail Date: Sat, 29 Oct 2022 23:20:35 +0200 Subject: [PATCH 037/231] gotenberg with modified cmd --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index afd3d1a73..c4965a348 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -87,7 +87,7 @@ jobs: ports: - "9998:9998/tcp" gotenberg: - image: docker.io/gotenberg/gotenberg:7.6 + image: ghcr.io/p-h-a-i-l/gotenberg:7.6 ports: - "3000:3000/tcp" env: From 3de6e0bcf1b6e0e7afe578e37fd67f5b455c1987 Mon Sep 17 00:00:00 2001 From: phail Date: Thu, 3 Nov 2022 00:58:36 +0100 Subject: [PATCH 038/231] put parser into setup make test using convert optional Gotenberg live testing --- .github/workflows/ci.yml | 4 + src/paperless_mail/tests/samples/first.pdf | Bin 0 -> 6714 bytes src/paperless_mail/tests/samples/second.pdf | Bin 0 -> 6723 bytes .../tests/samples/simple_text.eml.pdf | Bin 0 -> 22301 bytes .../tests/samples/simple_text.eml.pdf.webp | Bin 0 -> 5340 bytes src/paperless_mail/tests/test_parsers.py | 195 +++++++++------- src/paperless_mail/tests/test_parsers_live.py | 220 ++++++++++++++++++ 7 files changed, 329 insertions(+), 90 deletions(-) create mode 100644 src/paperless_mail/tests/samples/first.pdf create mode 100644 src/paperless_mail/tests/samples/second.pdf create mode 100644 src/paperless_mail/tests/samples/simple_text.eml.pdf create mode 100644 src/paperless_mail/tests/samples/simple_text.eml.pdf.webp create mode 100644 src/paperless_mail/tests/test_parsers_live.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c4965a348..8e506c8aa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -97,6 +97,10 @@ jobs: PAPERLESS_MAIL_TEST_HOST: ${{ secrets.TEST_MAIL_HOST }} PAPERLESS_MAIL_TEST_USER: ${{ secrets.TEST_MAIL_USER }} PAPERLESS_MAIL_TEST_PASSWD: ${{ secrets.TEST_MAIL_PASSWD }} + # Skip Tests which require convert + PAPERLESS_TEST_SKIP_CONVERT: 1 + # Enable Gotenberg end to end testing + GOTENBERG_LIVE: 1 steps: - name: Checkout diff --git a/src/paperless_mail/tests/samples/first.pdf b/src/paperless_mail/tests/samples/first.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4f74613f97a8cf297ce4c453e346b34c54a5364c GIT binary patch literal 6714 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 literal 0 HcmV?d00001 diff --git a/src/paperless_mail/tests/samples/second.pdf b/src/paperless_mail/tests/samples/second.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2955c8d5d133267d97e5279dc7a30886fdd95fb9 GIT binary patch literal 6723 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 GkpBUk(v literal 0 HcmV?d00001 diff --git a/src/paperless_mail/tests/samples/simple_text.eml.pdf b/src/paperless_mail/tests/samples/simple_text.eml.pdf new file mode 100644 index 0000000000000000000000000000000000000000..678e6df42eb3d69a13c6b209bef01494c5847240 GIT binary patch literal 22301 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Ä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 literal 0 HcmV?d00001 diff --git a/src/paperless_mail/tests/samples/simple_text.eml.pdf.webp b/src/paperless_mail/tests/samples/simple_text.eml.pdf.webp new file mode 100644 index 0000000000000000000000000000000000000000..614aeee9c2edaef9ac705e15de6c9234050b008a GIT binary patch literal 5340 zcmeHIRbLd2qGah#MH-ft_|py2y$I4FE8UHBcS%Wyq_C7U(!HSMuB3E#yGSnVIp^Ll zaNh5or}@pi%*@N^s;j8Xy+A`VQdZD0)DdU;`EL%-LHh#Wx&}be-=wRRf-1h2GXwQ; z)f&n19Nmz?d3z_ssAeNDmpF=hneV<~JXH)y8Tes^#F)qa8dh~N5xV*ed)&w?K0|f+ zC*7frWowHDKBS{qQ09jrXY^SQad*Y{Z%V)o$erh$yANdUS5G8J$OGg7{|AIY7|rCfwQ? z-D&w}gawXA5nHK;6tg0|2N1_7NSBWB6Vn=iRm_Z+CiZO{<@XL*O0X81AI5eshDAh6 zb{(fvk64g}c$gcmGTYG=?S(fVIa1XLvH~Sy3)s#Gm8bkJgMnk^b5TC*FRbh8MZ(Z* zp^@dnJm5z?*v3Rt$dAiFfF?S}5tW3ci>?wJv#t0->!zCQN4J#mXGoV0mK9rl>X*77 zKi=5QZ%I##AelqGPlMHHfmyxsQo?>rS#xnlrH}e5TfHyN*2e6>e4xKRc>x}f>>}+K zVz9Jf^1v-!qc*F ze8}S&T>O(V6$~mYn-UpQJeh76Bw)Ok@#$@GVdSp!u6W`Toiyv27?H7O-jePdbu?rV z9LP4oX2ElFvYA@gE!`6h`!#~!E}_ATCPdU%cUx7QIN1ZvJ3bKtTtytI5P1;^0AK#h zFn3tph;`HQDfbSg?i5)_p1QN!T{IOF+bZ}UD;mrQYwvHo#O{qGIdc21*3#t>nJ;uI zviH`ApWl-=D2iXCY-b^NuK!IUcok@0TlfF+|D{cI(4HG&2)vBY-dN%1COixd@u*SUX_2g{o>t^F z*W(Ab)^&tFSB{$$aBV^+G$!IMj$QssBX7MV@%f(_kRO&z=u%(&4LI?Q^_wk`b-7`A z4so*8otrB^EmO&^QOvBW@2_iTrUYx92bBLzH4hWzRzxtwW|cBo1b#k*xZpNx)=wZ{ zx(tllf{T@vhW2}-6zbdu@peD?6>Gvddju)p+Su{)A~tS59a`oDWtD7<1mO882e*L#TVMghwV`dV@OMO-{LT8bp##y&}VYH!lwYw5Sv$}}#t z0VkQ!Kc;dqF0ITAEPHE$M@Zsv2qzTgy7{=S04r!$bb|nl4vcRRrSLcn9F;1DcS_<` zI)r0|2n9vK3o@EXs-)rbg;dgzGreNa=fpgFG z`^51&=HP~y0jfF8)sy{+f;e!Cu7&7+YqLRy0H=isFIQWBmMZeTe*gCdQ}Mu=^X=dpHT{78nm@yxKA*0_|B#2GCv(ChQjbSD z-@aOYr$c8@mS$~GV7OxD-7TK=dRQNpn@2G}=*<$D>Zzbu4`E>o-5|OazLVz)WWXdo zp)n2syYC!?nn zy_sV(7-$SW@uBh|Et5oHa+6%6xt3aL8G^iA_M)aS9TVX5-KyeHEK)*Ai@B5<0=Ij! z*TU4x1jVsr&V_GDX7-;@Z~=02$>k6GOkil-2TiGUfN}1c(b;iIo+Z3 z;0Ur5SOh6H);CCgUxrM6p}&<2F6$eoDd=m=C1U!P9kgAFgL`lZ|0KHa9ZQVd2y#7=T$?|i&VE(0Ej zoHS7o>l!&GL#5MABC|`?Q3Po5cmI@8yiB3wW@P(e=B-dK8ofe6s4klDNEX>6CWCAf z_rAW{NcAL8suBJdZ}!f-1h%o zm9g2<+A>wq3z&c4sapX0F}j#{{6arAiuBGxhGlCDZhLI_-6L{3C-o!iEUkddsEPcK zU9WQ~%pJPg^pDF{ACC;YZP4amg#0EDxyMVFBV2v_l();NKTgBDjzuH)I^QD-5WDGK zKL$JW?8bnqacclmyjCp3)W51O+l;12fqw|H^Jz9C=MR*zw}KK4|JWW@C~c&jG@lHP zK#3u-U+hY45;O=cB`M23@MTJLvqSaa{Ob(OMI#Te$Yv;Bc< z38>rV`(}-gf9Mv9e>Xv1K}&e5qe#uZ*h^=1XN{{=-qAR4NU}9Bc)TlnB^T_G?!SH3Y4%Brch#K35A9+`b5B2ubV6lw`jjhEnW-|L%LsjCb!)C$O;jywt# zZs@H2CQ_Q6n*br46Zw9RN5|Uf*OQ%7!7J21V76lb!tbnrTDU4vxQ)0PZN3*wSCh^; zL%f9foiFouHrq%PG=7Zx*%?h>=&wFIQ24SJUVr(3dX+rYt@{~WX|c<_ln(#5S^%6V zneQUosVj?geVp)5(707}5`2J>XvNl;nf&{@*w?I`zUa$1H*&x<_~jnQId^4x-*jqb z!j0%@euD=V@06G{JNrWA`cak55;0!EaM>{=K6mE{?1Wh?b&3I0r3pUVIFh}wMQ2&Q zphF&h2$yl7(iY-rZvO|_%0X5@*XKP*3-Sxmw)>6Hy!~E8PO7d*U)2)u_%&dI1`kX} zD0sHCM$p(ITKsmDKG^C#XuG6?P~LgNIN6p(uUU#vlJzXVnx&jl35owLP{!d}{E?xj zonG-WF0FLmGDH6voz~f(g`agPUg(gQu>Y0-D&5R6(6?fbp41giq&m%p;1k%x5yi|k z)ozDwhWUKH!I;baq{6`#4or}+#5W^lN1S8kyK3)Nl=iLsOeekzlByjy8*!*K79L4w z_)E63LeT>^I5`5iCACfn0h`ZuN2?sa@^k8sxnMR}c^61t{($%L++ObyB-S5}MLHqw z%4i$b;w9{`eTgi#u0K$y8XKJIJYoIrUuBgOKC-Wx%&gsKs@7B%9IQ;ZK1bEI^mCq| zHJlT?Gt4;hNw&_$z~1mVtM{pZU(SVn8u0R0NjZaK3`#2z>Fn_ZI>#V3eJZ1)nmQz> zz!1rL0!w<6p6G)-rDL5j{Cl^v$nC^CoQC8Wn+;!}XWVr)-8{urod zw8ykcw8Yo#XZJMvCq4!^->R;iT&ZhGQ=l>jY*vy(j7YQF0s4 zaM1ID^ZD{SCl0wvcelavo!=jR{ zU_JQ!NZ zM_XnZ13N&Duax&|UQR16Ng7$b-9+Nmt1bIyGrT4{{9|>{+954|l?pB5l2@;S=%*Nk zyq^_p!}7Lvr*(fB<%zne#xc-;n2XJ(nAdw4z5V_or zg%F<{e5WR(7P3&my!Y>R3$cU4avk$ytuM(|-jx~r$rdkrh1XJo!oRUFk%P5{@TSy5 z?Mcq%D7NM*xIzBI>c`;Q9Z2WlCnn)hCY6hvI`wb&!nK$-4)BU3-qWe9Z_wN9n*!ED z=FI~=&fm(0HJg=CJ%3L|9+KjOA^#hP7-A2dnJi7v{Ixs$j+0>VjPGW#*V=C;%pxL{M$&;X)V z^rTs89aY8R9NC4v^U@lH_^3y_wv-rx!-j&YU1pOOSh||}bo+Y7L?>cp&w}+|NCsK8 zA_Ufd(ik&mDRxh_aOxylQ2IBdEffO<2&LyN8h6hU-8Y}~9NCLR|E2?@tynIDcC|86 zwUs)x1*k^U14AX?5!QpLH=x>ybA}vuX4My(JBo9Y=h)4TI5kc=F(NGiwK=XPg1}53 zx}%g5OnAGJll8_%lLR(Cx66WaN7PbD)z8Dfx44;^l1P&*oMpjaCj(!e?_ z_wuj}S(R02^M??okB?vY*;9TML>g=&PHjV$;o3)?V-j<=^}51VR88LDjYySIwuJYu zo~HNiE(5{kOko;rQE9uruh9X)(vp02g-pHPTe#v*IFV0oUYKgrxRx?8_})S+GM8WU zNa1{2Vk$ALYBGwKw8KAtL#Zd3UD&eSVZL@!!X_9ZCB7L%V3)|iSWS@q`OtCRj`1mq z^L5`~>ShyJ+iux4;77ENU{h1IDr{oPH*QIF`W(j4_f+Lhytv`=oMdW4WA}NR1Loa) zIKD0MsT_=L`DaA!x02+&(fIob&TcoYhGm`?widL^!(9NqnLkk$C(us}hTO;)sEoOs zOiq#($aJmd)w5gIC~5q?Y$NG6+b1}I?jz{HuwpodkPxkNJuh@%fqiJY;KS5VWmMe{1H2Mmx2>tBP1B{XRo`_pMcc-P+afIj^D{ zQElUcccg|0tqr#@J_7H#t<;Gs$zire`}58!e^UP0r|zb^%og(v`tO2<~$`^wo!9v<^WEezwk6n rXztKK)yt`iErF=`BuT~I6p}`zcg(#n6zgz_b9 None: + self.parser = MailDocumentParser(logging_group=None) + def tearDown(self) -> None: + self.parser.cleanup() + + def test_get_parsed(self): # Check if exception is raised when parsing fails. with pytest.raises(ParseError): - parser.get_parsed(os.path.join(self.SAMPLE_FILES, "na")) + self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "na")) # Check if exception is raised when the mail is faulty. with pytest.raises(ParseError): - parser.get_parsed(os.path.join(self.SAMPLE_FILES, "broken.eml")) + self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "broken.eml")) # Parse Test file and check relevant content - parsed1 = parser.get_parsed(os.path.join(self.SAMPLE_FILES, "simple_text.eml")) + parsed1 = self.parser.get_parsed( + os.path.join(self.SAMPLE_FILES, "simple_text.eml"), + ) self.assertEqual(parsed1.date.year, 2022) self.assertEqual(parsed1.date.month, 10) @@ -42,48 +45,45 @@ class TestParser(TestCase): self.assertEqual(parsed1.to, ("some@one.de",)) # Check if same parsed object as before is returned, even if another file is given. - parsed2 = parser.get_parsed(os.path.join(os.path.join(self.SAMPLE_FILES, "na"))) + parsed2 = self.parser.get_parsed( + os.path.join(os.path.join(self.SAMPLE_FILES, "na")), + ) self.assertEqual(parsed1, parsed2) - @staticmethod - def hashfile(file): - buf_size = 65536 # An arbitrary (but fixed) buffer - sha256 = hashlib.sha256() - with open(file, "rb") as f: - while True: - data = f.read(buf_size) - if not data: - break - sha256.update(data) - return sha256.hexdigest() - + @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf") @mock.patch("paperless_mail.parsers.make_thumbnail_from_pdf") - @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output - def test_get_thumbnail(self, m, mock_make_thumbnail_from_pdf: mock.MagicMock): - parser = MailDocumentParser(None) - thumb = parser.get_thumbnail( + def test_get_thumbnail( + self, + mock_make_thumbnail_from_pdf: mock.MagicMock, + mock_generate_pdf: mock.MagicMock, + ): + mocked_return = "Passing the return value through.." + mock_make_thumbnail_from_pdf.return_value = mocked_return + + mock_generate_pdf.return_value = "Mocked return value.." + + thumb = self.parser.get_thumbnail( os.path.join(self.SAMPLE_FILES, "simple_text.eml"), "message/rfc822", ) self.assertEqual( - parser.archive_path, + self.parser.archive_path, mock_make_thumbnail_from_pdf.call_args_list[0].args[0], ) self.assertEqual( - parser.tempdir, + self.parser.tempdir, mock_make_thumbnail_from_pdf.call_args_list[0].args[1], ) + self.assertEqual(mocked_return, thumb) @mock.patch("documents.loggers.LoggingMixin.log") def test_extract_metadata(self, m: mock.MagicMock): - parser = MailDocumentParser(None) - # Validate if warning is logged when parsing fails - self.assertEqual([], parser.extract_metadata("na", "message/rfc822")) + self.assertEqual([], self.parser.extract_metadata("na", "message/rfc822")) self.assertEqual("warning", m.call_args[0][0]) # Validate Metadata parsing returns the expected results - metadata = parser.extract_metadata( + metadata = self.parser.extract_metadata( os.path.join(self.SAMPLE_FILES, "simple_text.eml"), "message/rfc822", ) @@ -209,22 +209,22 @@ class TestParser(TestCase): in metadata, ) - @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output - def test_parse(self, m): - parser = MailDocumentParser(None) - + def test_parse_na(self): # Check if exception is raised when parsing fails. with pytest.raises(ParseError): - parser.parse( + self.parser.parse( os.path.join(os.path.join(self.SAMPLE_FILES, "na")), "message/rfc822", ) + @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf") + @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output + def test_parse_html_eml(self, m, n): # Validate parsing returns the expected results - parser.parse(os.path.join(self.SAMPLE_FILES, "html.eml"), "message/rfc822") + self.parser.parse(os.path.join(self.SAMPLE_FILES, "html.eml"), "message/rfc822") text_expected = "Some Text\nand an embedded image.\n\nSubject: HTML Message\n\nFrom: Name \n\nTo: someone@example.de\n\nAttachments: IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (0.59 MiB)\n\nHTML content: Some Text\nand an embedded image.\nParagraph unchanged." - self.assertEqual(text_expected, parser.text) + self.assertEqual(text_expected, self.parser.text) self.assertEqual( datetime.datetime( 2022, @@ -235,17 +235,20 @@ class TestParser(TestCase): 19, tzinfo=datetime.timezone(datetime.timedelta(seconds=7200)), ), - parser.date, + self.parser.date, ) + @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf") + @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output + def test_parse_simple_eml(self, m, n): # Validate parsing returns the expected results - parser = MailDocumentParser(None) - parser.parse( + + self.parser.parse( os.path.join(self.SAMPLE_FILES, "simple_text.eml"), "message/rfc822", ) text_expected = "This is just a simple Text Mail.\n\nSubject: Simple Text Mail\n\nFrom: Some One \n\nTo: some@one.de\n\nCC: asdasd@æsdasd.de, asdadasdasdasda.asdasd@æsdasd.de\n\nBCC: fdf@fvf.de\n\n" - self.assertEqual(text_expected, parser.text) + self.assertEqual(text_expected, self.parser.text) self.assertEqual( datetime.datetime( 2022, @@ -256,33 +259,32 @@ class TestParser(TestCase): 43, tzinfo=datetime.timezone(datetime.timedelta(seconds=7200)), ), - parser.date, + self.parser.date, ) # Just check if file exists, the unittest for generate_pdf() goes deeper. - self.assertTrue(os.path.isfile(parser.archive_path)) + self.assertTrue(os.path.isfile(self.parser.archive_path)) @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output def test_tika_parse(self, m): html = '

Some Text

' expected_text = "\n\n\n\n\n\n\n\n\nSome Text\n" - parser = MailDocumentParser(None) - tika_server_original = parser.tika_server + tika_server_original = self.parser.tika_server # Check if exception is raised when Tika cannot be reached. with pytest.raises(ParseError): - parser.tika_server = "" - parser.tika_parse(html) + self.parser.tika_server = "" + self.parser.tika_parse(html) # Check unsuccessful parsing - parser.tika_server = tika_server_original + self.parser.tika_server = tika_server_original - parsed = parser.tika_parse(None) + parsed = self.parser.tika_parse(None) self.assertEqual("", parsed) # Check successful parsing - parsed = parser.tika_parse(html) + parsed = self.parser.tika_parse(html) self.assertEqual(expected_text, parsed) @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_mail") @@ -290,32 +292,63 @@ class TestParser(TestCase): def test_generate_pdf_parse_error(self, m: mock.MagicMock, n: mock.MagicMock): m.return_value = b"" n.return_value = b"" - parser = MailDocumentParser(None) # Check if exception is raised when the pdf can not be created. - parser.gotenberg_server = "" + self.parser.gotenberg_server = "" with pytest.raises(ParseError): - parser.generate_pdf(os.path.join(self.SAMPLE_FILES, "html.eml")) - - @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output - def test_generate_pdf(self, m): - parser = MailDocumentParser(None) + self.parser.generate_pdf(os.path.join(self.SAMPLE_FILES, "html.eml")) + @mock.patch("paperless_mail.parsers.requests.post") + @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_mail") + @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_html") + def test_generate_pdf( + self, + mock_generate_pdf_from_html: mock.MagicMock, + mock_generate_pdf_from_mail: mock.MagicMock, + mock_post: mock.MagicMock, + ): # Check if exception is raised when the mail can not be parsed. with pytest.raises(ParseError): - parser.generate_pdf(os.path.join(self.SAMPLE_FILES, "broken.eml")) + self.parser.generate_pdf(os.path.join(self.SAMPLE_FILES, "broken.eml")) - pdf_path = parser.generate_pdf(os.path.join(self.SAMPLE_FILES, "html.eml")) + mock_generate_pdf_from_mail.return_value = b"Mail Return" + mock_generate_pdf_from_html.return_value = b"HTML Return" + + mock_response = mock.MagicMock() + mock_response.content = b"Content" + mock_post.return_value = mock_response + pdf_path = self.parser.generate_pdf(os.path.join(self.SAMPLE_FILES, "html.eml")) self.assertTrue(os.path.isfile(pdf_path)) - extracted = extract_text(pdf_path) - expected = "From Name \n\n2022-10-15 09:23\n\nSubject HTML Message\n\nTo someone@example.de\n\nAttachments IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (0.59 MiB)\n\nSome Text \n\nand an embedded image.\n\n\x0cSome Text\n\n This image should not be shown.\n\nand an embedded image.\n\nParagraph unchanged.\n\n\x0c" - self.assertEqual(expected, extracted) + mock_generate_pdf_from_mail.assert_called_once_with( + self.parser.get_parsed(None), + ) + mock_generate_pdf_from_html.assert_called_once_with( + self.parser.get_parsed(None).html, + self.parser.get_parsed(None).attachments, + ) + self.assertEqual( + self.parser.gotenberg_server + "/forms/pdfengines/merge", + mock_post.call_args.args[0], + ) + self.assertEqual({}, mock_post.call_args.kwargs["headers"]) + self.assertEqual( + b"Mail Return", + mock_post.call_args.kwargs["files"]["1_mail.pdf"][1].read(), + ) + self.assertEqual( + b"HTML Return", + mock_post.call_args.kwargs["files"]["2_html.pdf"][1].read(), + ) + + mock_response.raise_for_status.assert_called_once() + + with open(pdf_path, "rb") as file: + self.assertEqual(b"Content", file.read()) def test_mail_to_html(self): - parser = MailDocumentParser(None) - mail = parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml")) - html_handle = parser.mail_to_html(mail) + mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml")) + html_handle = self.parser.mail_to_html(mail) with open( os.path.join(self.SAMPLE_FILES, "html.eml.html"), @@ -324,13 +357,12 @@ class TestParser(TestCase): @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output def test_generate_pdf_from_mail(self, m): - parser = MailDocumentParser(None) - mail = parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml")) + mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml")) - pdf_path = os.path.join(parser.tempdir, "test_generate_pdf_from_mail.pdf") + pdf_path = os.path.join(self.parser.tempdir, "test_generate_pdf_from_mail.pdf") with open(pdf_path, "wb") as file: - file.write(parser.generate_pdf_from_mail(mail)) + file.write(self.parser.generate_pdf_from_mail(mail)) file.close() extracted = extract_text(pdf_path) @@ -343,8 +375,6 @@ class TestParser(TestCase): self.payload = payload self.content_id = content_id - parser = MailDocumentParser(None) - result = None with open(os.path.join(self.SAMPLE_FILES, "sample.html")) as html_file: @@ -354,7 +384,7 @@ class TestParser(TestCase): attachments = [ MailAttachmentMock(png, "part1.pNdUSz0s.D3NqVtPg@example.de"), ] - result = parser.transform_inline_html(html, attachments) + result = self.parser.transform_inline_html(html, attachments) resulting_html = result[-1][1].read() self.assertTrue(result[-1][0] == "index.html") @@ -368,8 +398,6 @@ class TestParser(TestCase): self.payload = payload self.content_id = content_id - parser = MailDocumentParser(None) - result = None with open(os.path.join(self.SAMPLE_FILES, "sample.html")) as html_file: @@ -379,9 +407,9 @@ class TestParser(TestCase): attachments = [ MailAttachmentMock(png, "part1.pNdUSz0s.D3NqVtPg@example.de"), ] - result = parser.generate_pdf_from_html(html, attachments) + result = self.parser.generate_pdf_from_html(html, attachments) - pdf_path = os.path.join(parser.tempdir, "test_generate_pdf_from_html.pdf") + pdf_path = os.path.join(self.parser.tempdir, "test_generate_pdf_from_html.pdf") with open(pdf_path, "wb") as file: file.write(result) @@ -390,16 +418,3 @@ class TestParser(TestCase): extracted = extract_text(pdf_path) expected = "Some Text\n\n This image should not be shown.\n\nand an embedded image.\n\nParagraph unchanged.\n\n\x0c" self.assertEqual(expected, extracted) - - def test_is_online_image_still_available(self): - """ - A public image is used in the html sample file. We have no control - whether this image stays online forever, so here we check if it is still there - """ - - # Start by Testing if nonexistent URL really throws an Exception - with pytest.raises(HTTPError): - urlopen("https://upload.wikimedia.org/wikipedia/en/f/f7/nonexistent.png") - - # Now check the URL used in samples/sample.html - urlopen("https://upload.wikimedia.org/wikipedia/en/f/f7/RickRoll.png") diff --git a/src/paperless_mail/tests/test_parsers_live.py b/src/paperless_mail/tests/test_parsers_live.py new file mode 100644 index 000000000..6676ebc1e --- /dev/null +++ b/src/paperless_mail/tests/test_parsers_live.py @@ -0,0 +1,220 @@ +import hashlib +import os +from unittest import mock +from urllib.error import HTTPError +from urllib.request import urlopen + +import pytest +from django.test import TestCase +from documents.parsers import ParseError +from documents.parsers import run_convert +from paperless_mail.parsers import MailDocumentParser +from pdfminer.high_level import extract_text + + +class TestParserLive(TestCase): + SAMPLE_FILES = os.path.join(os.path.dirname(__file__), "samples") + + def setUp(self) -> None: + self.parser = MailDocumentParser(logging_group=None) + + def tearDown(self) -> None: + self.parser.cleanup() + + @staticmethod + def hashfile(file): + buf_size = 65536 # An arbitrary (but fixed) buffer + sha256 = hashlib.sha256() + with open(file, "rb") as f: + while True: + data = f.read(buf_size) + if not data: + break + sha256.update(data) + return sha256.hexdigest() + + # Only run if convert is available + @pytest.mark.skipif( + "PAPERLESS_TEST_SKIP_CONVERT" in os.environ, + reason="PAPERLESS_TEST_SKIP_CONVERT set, skipping Test", + ) + @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf") + @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output + def test_get_thumbnail(self, m, mock_generate_pdf: mock.MagicMock): + mock_generate_pdf.return_value = os.path.join( + self.SAMPLE_FILES, + "simple_text.eml.pdf", + ) + thumb = self.parser.get_thumbnail( + os.path.join(self.SAMPLE_FILES, "simple_text.eml"), + "message/rfc822", + ) + self.assertTrue(os.path.isfile(thumb)) + + expected = os.path.join(self.SAMPLE_FILES, "simple_text.eml.pdf.webp") + + self.assertEqual( + self.hashfile(thumb), + self.hashfile(expected), + f"Created Thumbnail {thumb} differs from expected file {expected}", + ) + + @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output + def test_tika_parse(self, m): + html = '

Some Text

' + expected_text = "\n\n\n\n\n\n\n\n\nSome Text\n" + + tika_server_original = self.parser.tika_server + + # Check if exception is raised when Tika cannot be reached. + with pytest.raises(ParseError): + self.parser.tika_server = "" + self.parser.tika_parse(html) + + # Check unsuccessful parsing + self.parser.tika_server = tika_server_original + + parsed = self.parser.tika_parse(None) + self.assertEqual("", parsed) + + # Check successful parsing + parsed = self.parser.tika_parse(html) + self.assertEqual(expected_text, parsed) + + @pytest.mark.skipif( + "GOTENBERG_LIVE" not in os.environ, + reason="No gotenberg server", + ) + @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_mail") + @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_html") + def test_generate_pdf_gotenberg_merging( + self, + mock_generate_pdf_from_html: mock.MagicMock, + mock_generate_pdf_from_mail: mock.MagicMock, + ): + + with open(os.path.join(self.SAMPLE_FILES, "first.pdf"), "rb") as first: + mock_generate_pdf_from_mail.return_value = first.read() + + with open(os.path.join(self.SAMPLE_FILES, "second.pdf"), "rb") as second: + mock_generate_pdf_from_html.return_value = second.read() + + pdf_path = self.parser.generate_pdf(os.path.join(self.SAMPLE_FILES, "html.eml")) + self.assertTrue(os.path.isfile(pdf_path)) + + extracted = extract_text(pdf_path) + expected = ( + "first\tPDF\tto\tbe\tmerged.\n\n\x0csecond\tPDF\tto\tbe\tmerged.\n\n\x0c" + ) + self.assertEqual(expected, extracted) + + # Only run if convert is available + @pytest.mark.skipif( + "PAPERLESS_TEST_SKIP_CONVERT" in os.environ, + reason="PAPERLESS_TEST_SKIP_CONVERT set, skipping Test", + ) + @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output + def test_generate_pdf_from_mail(self, m): + # TODO + mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml")) + + pdf_path = os.path.join(self.parser.tempdir, "test_generate_pdf_from_mail.pdf") + + with open(pdf_path, "wb") as file: + file.write(self.parser.generate_pdf_from_mail(mail)) + file.close() + + converted = os.path.join(parser.tempdir, "test_generate_pdf_from_mail.webp") + run_convert( + density=300, + scale="500x5000>", + alpha="remove", + strip=True, + trim=False, + auto_orient=True, + input_file=f"{pdf_path}", # Do net define an index to convert all pages. + output_file=converted, + logging_group=None, + ) + self.assertTrue(os.path.isfile(converted)) + thumb_hash = self.hashfile(converted) + + # The created pdf is not reproducible. But the converted image should always look the same. + expected_hash = ( + "8734a3f0a567979343824e468cd737bf29c02086bbfd8773e94feb986968ad32" + ) + self.assertEqual( + thumb_hash, + expected_hash, + f"PDF looks different. Check if {converted} looks weird.", + ) + + # Only run if convert is available + @pytest.mark.skipif( + "PAPERLESS_TEST_SKIP_CONVERT" in os.environ, + reason="PAPERLESS_TEST_SKIP_CONVERT set, skipping Test", + ) + @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output + def test_generate_pdf_from_html(self, m): + # TODO + class MailAttachmentMock: + def __init__(self, payload, content_id): + self.payload = payload + self.content_id = content_id + + result = None + + with open(os.path.join(self.SAMPLE_FILES, "sample.html")) as html_file: + with open(os.path.join(self.SAMPLE_FILES, "sample.png"), "rb") as png_file: + html = html_file.read() + png = png_file.read() + attachments = [ + MailAttachmentMock(png, "part1.pNdUSz0s.D3NqVtPg@example.de"), + ] + result = self.parser.generate_pdf_from_html(html, attachments) + + pdf_path = os.path.join(self.parser.tempdir, "test_generate_pdf_from_html.pdf") + + with open(pdf_path, "wb") as file: + file.write(result) + file.close() + + converted = os.path.join(parser.tempdir, "test_generate_pdf_from_html.webp") + run_convert( + density=300, + scale="500x5000>", + alpha="remove", + strip=True, + trim=False, + auto_orient=True, + input_file=f"{pdf_path}", # Do net define an index to convert all pages. + output_file=converted, + logging_group=None, + ) + self.assertTrue(os.path.isfile(converted)) + thumb_hash = self.hashfile(converted) + + # The created pdf is not reproducible. But the converted image should always look the same. + expected_hash = ( + "267d61f0ab8f128a037002a424b2cb4bfe18a81e17f0b70f15d241688ed47d1a" + ) + self.assertEqual( + thumb_hash, + expected_hash, + f"PDF looks different. Check if {converted} looks weird. " + f"If Rick Astley is shown, Gotenberg loads from web which is bad for Mail content.", + ) + + @staticmethod + def test_is_online_image_still_available(): + """ + A public image is used in the html sample file. We have no control + whether this image stays online forever, so here we check if it is still there + """ + + # Start by Testing if nonexistent URL really throws an Exception + with pytest.raises(HTTPError): + urlopen("https://upload.wikimedia.org/wikipedia/en/f/f7/nonexistent.png") + + # Now check the URL used in samples/sample.html + urlopen("https://upload.wikimedia.org/wikipedia/en/f/f7/RickRoll.png") From acd383241777e16e923ecceece9f2b669adb1ef3 Mon Sep 17 00:00:00 2001 From: phail Date: Thu, 3 Nov 2022 21:08:15 +0100 Subject: [PATCH 039/231] merge Pipfile.lock --- Pipfile.lock | 430 +++++++++++++++++++++++++++------------------------ 1 file changed, 227 insertions(+), 203 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 317a8cbda..18494f726 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "f8bdb4da9007a887c66a7e0243c486419676aa1a053c9a78e3760abb1f60e0a0" + "sha256": "ebc09a2366e86169c02be7c5fa3dddcf2af3cc7c063daeeb68bfe7e6eac8aa7a" }, "pipfile-spec": 6, "requires": {}, @@ -109,6 +109,14 @@ ], "version": "==3.6.4.0" }, + "bleach": { + "hashes": [ + "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a", + "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c" + ], + "index": "pypi", + "version": "==5.0.1" + }, "celery": { "extras": [ "redis" @@ -218,7 +226,7 @@ "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845", "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==2.1.1" }, "click": { @@ -234,7 +242,7 @@ "sha256:a0713dc7a1de3f06bc0df5a9567ad19ead2d3d5689b434768a6145bff77c0667", "sha256:f184f0d851d96b6d29297354ed981b7dd71df7ff500d82fa6d11f0856bee8035" ], - "markers": "python_version < '4' and python_full_version >= '3.6.2'", + "markers": "python_full_version >= '3.6.2' and python_full_version < '4.0.0'", "version": "==0.3.0" }, "click-plugins": { @@ -276,35 +284,35 @@ }, "cryptography": { "hashes": [ - "sha256:0297ffc478bdd237f5ca3a7dc96fc0d315670bfa099c04dc3a4a2172008a405a", - "sha256:10d1f29d6292fc95acb597bacefd5b9e812099d75a6469004fd38ba5471a977f", - "sha256:16fa61e7481f4b77ef53991075de29fc5bacb582a1244046d2e8b4bb72ef66d0", - "sha256:194044c6b89a2f9f169df475cc167f6157eb9151cc69af8a2a163481d45cc407", - "sha256:1db3d807a14931fa317f96435695d9ec386be7b84b618cc61cfa5d08b0ae33d7", - "sha256:3261725c0ef84e7592597606f6583385fed2a5ec3909f43bc475ade9729a41d6", - "sha256:3b72c360427889b40f36dc214630e688c2fe03e16c162ef0aa41da7ab1455153", - "sha256:3e3a2599e640927089f932295a9a247fc40a5bdf69b0484532f530471a382750", - "sha256:3fc26e22840b77326a764ceb5f02ca2d342305fba08f002a8c1f139540cdfaad", - "sha256:5067ee7f2bce36b11d0e334abcd1ccf8c541fc0bbdaf57cdd511fdee53e879b6", - "sha256:52e7bee800ec869b4031093875279f1ff2ed12c1e2f74923e8f49c916afd1d3b", - "sha256:64760ba5331e3f1794d0bcaabc0d0c39e8c60bf67d09c93dc0e54189dfd7cfe5", - "sha256:765fa194a0f3372d83005ab83ab35d7c5526c4e22951e46059b8ac678b44fa5a", - "sha256:79473cf8a5cbc471979bd9378c9f425384980fcf2ab6534b18ed7d0d9843987d", - "sha256:896dd3a66959d3a5ddcfc140a53391f69ff1e8f25d93f0e2e7830c6de90ceb9d", - "sha256:89ed49784ba88c221756ff4d4755dbc03b3c8d2c5103f6d6b4f83a0fb1e85294", - "sha256:ac7e48f7e7261207d750fa7e55eac2d45f720027d5703cd9007e9b37bbb59ac0", - "sha256:ad7353f6ddf285aeadfaf79e5a6829110106ff8189391704c1d8801aa0bae45a", - "sha256:b0163a849b6f315bf52815e238bc2b2346604413fa7c1601eea84bcddb5fb9ac", - "sha256:b6c9b706316d7b5a137c35e14f4103e2115b088c412140fdbd5f87c73284df61", - "sha256:c2e5856248a416767322c8668ef1845ad46ee62629266f84a8f007a317141013", - "sha256:ca9f6784ea96b55ff41708b92c3f6aeaebde4c560308e5fbbd3173fbc466e94e", - "sha256:d1a5bd52d684e49a36582193e0b89ff267704cd4025abefb9e26803adeb3e5fb", - "sha256:d3971e2749a723e9084dd507584e2a2761f78ad2c638aa31e80bc7a15c9db4f9", - "sha256:d4ef6cc305394ed669d4d9eebf10d3a101059bdcf2669c366ec1d14e4fb227bd", - "sha256:d9e69ae01f99abe6ad646947bba8941e896cb3aa805be2597a0400e0764b5818" + "sha256:068147f32fa662c81aebab95c74679b401b12b57494872886eb5c1139250ec5d", + "sha256:06fc3cc7b6f6cca87bd56ec80a580c88f1da5306f505876a71c8cfa7050257dd", + "sha256:25c1d1f19729fb09d42e06b4bf9895212292cb27bb50229f5aa64d039ab29146", + "sha256:402852a0aea73833d982cabb6d0c3bb582c15483d29fb7085ef2c42bfa7e38d7", + "sha256:4e269dcd9b102c5a3d72be3c45d8ce20377b8076a43cbed6f660a1afe365e436", + "sha256:5419a127426084933076132d317911e3c6eb77568a1ce23c3ac1e12d111e61e0", + "sha256:554bec92ee7d1e9d10ded2f7e92a5d70c1f74ba9524947c0ba0c850c7b011828", + "sha256:5e89468fbd2fcd733b5899333bc54d0d06c80e04cd23d8c6f3e0542358c6060b", + "sha256:65535bc550b70bd6271984d9863a37741352b4aad6fb1b3344a54e6950249b55", + "sha256:6ab9516b85bebe7aa83f309bacc5f44a61eeb90d0b4ec125d2d003ce41932d36", + "sha256:6addc3b6d593cd980989261dc1cce38263c76954d758c3c94de51f1e010c9a50", + "sha256:728f2694fa743a996d7784a6194da430f197d5c58e2f4e278612b359f455e4a2", + "sha256:785e4056b5a8b28f05a533fab69febf5004458e20dad7e2e13a3120d8ecec75a", + "sha256:78cf5eefac2b52c10398a42765bfa981ce2372cbc0457e6bf9658f41ec3c41d8", + "sha256:7f836217000342d448e1c9a342e9163149e45d5b5eca76a30e84503a5a96cab0", + "sha256:8d41a46251bf0634e21fac50ffd643216ccecfaf3701a063257fe0b2be1b6548", + "sha256:984fe150f350a3c91e84de405fe49e688aa6092b3525f407a18b9646f6612320", + "sha256:9b24bcff7853ed18a63cfb0c2b008936a9554af24af2fb146e16d8e1aed75748", + "sha256:b1b35d9d3a65542ed2e9d90115dfd16bbc027b3f07ee3304fc83580f26e43249", + "sha256:b1b52c9e5f8aa2b802d48bd693190341fae201ea51c7a167d69fc48b60e8a959", + "sha256:bbf203f1a814007ce24bd4d51362991d5cb90ba0c177a9c08825f2cc304d871f", + "sha256:be243c7e2bfcf6cc4cb350c0d5cdf15ca6383bbcb2a8ef51d3c9411a9d4386f0", + "sha256:bfbe6ee19615b07a98b1d2287d6a6073f734735b49ee45b11324d85efc4d5cbd", + "sha256:c46837ea467ed1efea562bbeb543994c2d1f6e800785bd5a2c98bc096f5cb220", + "sha256:dfb4f4dd568de1b6af9f4cda334adf7d72cf5bc052516e1b2608b683375dd95c", + "sha256:ed7b00096790213e09eb11c97cc6e2b757f15f3d2f85833cd2d3ec3fe37c1722" ], "markers": "python_version >= '3.6'", - "version": "==38.0.1" + "version": "==38.0.3" }, "daphne": { "hashes": [ @@ -316,11 +324,11 @@ }, "dateparser": { "hashes": [ - "sha256:3821bf191f95b2658c4abd91571c09821ce7a2bc179bf6cefd8b4515c3ccf9ef", - "sha256:d31659dc806a7d88e2b510b2c74f68b525ae531f145c62a57a99bd616b7f90cf" + "sha256:711f7eef6d431225bec56c00e386af3f6a47083276253375bdae1ae6c8d23d4a", + "sha256:ae7a7de30f26983d09fff802c1f9d35d54e1c11d7ab52ae904a1f3fc037ecba5" ], "index": "pypi", - "version": "==1.1.2" + "version": "==1.1.3" }, "deprecated": { "hashes": [ @@ -339,11 +347,11 @@ }, "django": { "hashes": [ - "sha256:26dc24f99c8956374a054bcbf58aab8dc0cad2e6ac82b0fe036b752c00eee793", - "sha256:b8d843714810ab88d59344507d4447be8b2cf12a49031363b6eed9f1b9b2280f" + "sha256:678bbfc8604eb246ed54e2063f0765f13b321a50526bdc8cb1f943eda7fa31f1", + "sha256:6b1de6886cae14c7c44d188f580f8ba8da05750f544c80ae5ad43375ab293cd5" ], "index": "pypi", - "version": "==4.1.2" + "version": "==4.1.3" }, "django-celery-results": { "hashes": [ @@ -990,28 +998,28 @@ }, "prompt-toolkit": { "hashes": [ - "sha256:9696f386133df0fc8ca5af4895afe5d78f5fcfe5258111c2a79a1c3e41ffa96d", - "sha256:9ada952c9d1787f52ff6d5f3484d0b4df8952787c087edf6a1f7c2cb1ea88148" + "sha256:24becda58d49ceac4dc26232eb179ef2b21f133fecda7eed6018d341766ed76e", + "sha256:e7f2129cba4ff3b3656bbdda0e74ee00d2f874a8bcdb9dd16f5fec7b3e173cae" ], "markers": "python_full_version >= '3.6.2'", - "version": "==3.0.31" + "version": "==3.0.32" }, "psycopg2": { "hashes": [ - "sha256:07b90a24d5056687781ddaef0ea172fd951f2f7293f6ffdd03d4f5077801f426", - "sha256:1da77c061bdaab450581458932ae5e469cc6e36e0d62f988376e9f513f11cb5c", - "sha256:46361c054df612c3cc813fdb343733d56543fb93565cff0f8ace422e4da06acb", - "sha256:839f9ea8f6098e39966d97fcb8d08548fbc57c523a1e27a1f0609addf40f777c", - "sha256:849bd868ae3369932127f0771c08d1109b254f08d48dc42493c3d1b87cb2d308", - "sha256:8de6a9fc5f42fa52f559e65120dcd7502394692490c98fed1221acf0819d7797", - "sha256:a11946bad3557ca254f17357d5a4ed63bdca45163e7a7d2bfb8e695df069cc3a", - "sha256:aa184d551a767ad25df3b8d22a0a62ef2962e0e374c04f6cbd1204947f540d61", - "sha256:aafa96f2da0071d6dd0cbb7633406d99f414b40ab0f918c9d9af7df928a1accb", - "sha256:c7fa041b4acb913f6968fce10169105af5200f296028251d817ab37847c30184", - "sha256:d529926254e093a1b669f692a3aa50069bc71faf5b0ecd91686a78f62767d52f" + "sha256:190d51e8c1b25a47484e52a79638a8182451d6f6dff99f26ad9bd81e5359a0fa", + "sha256:1a5c7d7d577e0eabfcf15eb87d1e19314c8c4f0e722a301f98e0e3a65e238b4e", + "sha256:1e5a38aa85bd660c53947bd28aeaafb6a97d70423606f1ccb044a03a1203fe4a", + "sha256:322fd5fca0b1113677089d4ebd5222c964b1760e361f151cbb2706c4912112c5", + "sha256:4cb9936316d88bfab614666eb9e32995e794ed0f8f6b3b718666c22819c1d7ee", + "sha256:922cc5f0b98a5f2b1ff481f5551b95cd04580fd6f0c72d9b22e6c0145a4840e0", + "sha256:a5246d2e683a972e2187a8714b5c2cf8156c064629f9a9b1a873c1730d9e245a", + "sha256:b9ac1b0d8ecc49e05e4e182694f418d27f3aedcfca854ebd6c05bb1cffa10d6d", + "sha256:d3ef67e630b0de0779c42912fe2cbae3805ebaba30cda27fea2a3de650a9414f", + "sha256:f5b6320dbc3cf6cfb9f25308286f9f7ab464e65cfb105b64cc9c52831748ced2", + "sha256:fc04dd5189b90d825509caa510f20d1d504761e78b8dfb95a0ede180f71d50e5" ], "index": "pypi", - "version": "==2.9.4" + "version": "==2.9.5" }, "pyasn1": { "hashes": [ @@ -1174,98 +1182,98 @@ }, "rapidfuzz": { "hashes": [ - "sha256:028aa9edfa044629a0a9e924a168a01f61c8f570c9ea919e2ed214826ba1cdfb", - "sha256:02a5c8b780af49a4e5f08033450d3f7c696f6c04e57c67ecbb19c9944ea3ce20", - "sha256:07c623741958dd49d8c2c51f7c2e62472f41b8d795cc9c734e441e30de3f8330", - "sha256:0ae8c0c2f51f618d54579341c44ba198849d9cd845bb0dc85d1711fd8de9a159", - "sha256:129c93a76c4fed176b4eaaf78fecd290932971bca10315dee9feaf94a7b443b1", - "sha256:13ad87a539b13794292fb661b8c4f4c19e6c066400d9db991e3a1441f55fc29b", - "sha256:16426b441d28efb3b1fe10f2b81aa469020655cef068a32de6ec24433590ee5b", - "sha256:1a600b037a56a61111c01809b5e4c4b5aac12edf2769c094fefab02d496a95a4", - "sha256:1e0f6f878c20454a7e7ea2ed30970ae0334852c5e422e7014757821fa33c1588", - "sha256:20f2f0f0746ffc165168ca160c5b1a1485076bdde5b656cf3dbe532ef2ac57ff", - "sha256:2207927f42ae7b7fbcc1a4ff86f202647776200f3d8723603e7acf96af924e9f", - "sha256:22487992f4811c8aef449736f483514f0294d5593f5f9c95cbfb2474dbc363b9", - "sha256:22646f54d44d98d6f462fb3f1ac997ea53aaebdd1344039e8f75090f43e47a89", - "sha256:22e8b127abcf0b10ebf8a9b3351c3c980e5c27cb60a865632d90d6a698060a9a", - "sha256:238fddfb90fab858ced88d064608bff9aed83cec11a7630a4e95b7e49734d8b1", - "sha256:241912c4f7f232c7518384f8cea719cf2ff290f80735355a217e9c690d274f62", - "sha256:25db060ba8082c38f75da482ff15d3b60a4bc59f158b6d29a2c5bccadd2b71b0", - "sha256:2676f7ccd22a67638baff054a8e13924f20d87efb3a873f6ea248a395a80e2c8", - "sha256:27fa0e7d5e5291dc3e48c6512524f2f8e7ba3d397fa712a85a97639e3d6597e9", - "sha256:2c2cd1e01e8aef2bd1b5152e66e0b865f31eb2d00a8d28cbbbb802f42e2dbe43", - "sha256:2e9709a163ec3b890f9a4173261e9ef586046feee74bbece62595bf103421178", - "sha256:2fda8c003d9ae4f3674c783887b31ecb76f4ab58670a8f01b93efd0917c1e503", - "sha256:33cfd01cb7f8a48c8e057198e3814a120323c0360017dd5c4eba07d097b43b39", - "sha256:35737fd5766ca212d98e0598fb4d302f509e1cbf7b6dc42e2eddefd956150815", - "sha256:35b34f33a9f0a86fdba39053b203d8d517da76f3553230a55867c51f0d802b67", - "sha256:3abe9c25f9ba260a6828d24002a15112c5f21c6877c5f8c294ffe4b9d197c6d2", - "sha256:3c7f3c61e2d1530cf7e1647bdbb466f0f83fa30d2c579b6d75e444f88ff47913", - "sha256:3e8707e98b645f80834e24103e7cd67f1b772999bb979da6d61ca1fcdc07672a", - "sha256:3eae4c6880dbabee9f363950510c09d7e12dea8dbc6ebcd2ff58e594a78d9370", - "sha256:3f7b798807ac9c5f632e8f359adf1393f81d9211e4961eedb5e2d4ce311e0078", - "sha256:43398361d54fed476ccfdb52dc34d88c64461f0ec35f8abf10dd0413a3f19d8c", - "sha256:4581600ded8f37e8387d0eef93520fb33dafab6ccb37d005e20d05cd3fbdd9db", - "sha256:45def44f1140c6f5c7a5389645d02e8011d27a6e64f529f33cee687e7c25af07", - "sha256:475a551c43ba23b4ca328c9bbcae39205729f4751280eb9763da08d97d328953", - "sha256:4787d8e9f4b184d383ad000cdd48330ae75ec927c5832067a6b3617c5f6fb677", - "sha256:48539221026b0a84b6d2c2665c3dde784e3c0fac28975658c03fed352f8e1d7e", - "sha256:4f3f0ddfe3176e19c0a3cf6ad29e9ff216ff5fdec035b001ebabad91ef155107", - "sha256:4fc958b21416825c599e228278c69efb480169cd99d1a21787a54f53fbff026c", - "sha256:589464c49a332c644b750f2ebc3737d444427669323ace623bd4948e414a641a", - "sha256:5c6a9ada752149e23051852867596b35afc79015760e23676ac287bcad58e0b6", - "sha256:5dcd7bd175d870338fc9ae43d0184ecd45958f5ca2ee7ea0a7953eedc4d9718e", - "sha256:5e2c0a5a0346ce95a965ed6fa941edcf129cac22bf63314b684a3fe64078c95b", - "sha256:5fa88543c5744d725fc989afd79926c226e1c5f5c00904834851997f367da2b5", - "sha256:626eaa1b52a9dafa9bf377bcdcfdf1ea867dd51b5bb5dab1a05938c3303f317f", - "sha256:651664023726f28f7447e40fa2b8a015514f9db4b58654e9bf7d3729e2606eab", - "sha256:74f821370ac01f677b5a26e0606084f2eb671f7bb4f3e2e82d94a100b1c28457", - "sha256:7a67d93fd2e6e5a4e278eade2bbef16ba88d4efcb4eed106f075b0b21427a92f", - "sha256:7e34c996cc245a21f376c3b8eede1296339845f039c8c270297a455d3a1ad71b", - "sha256:7f2db0c684d9999c81084aa370e2e6b266b694e76c7e356bbeb3b282ca524475", - "sha256:7febf074f7de7ebc374100be0036fc592659af911b6efbc1135cdebfe939c57d", - "sha256:800b1498989bfb64118b219eeb42957b3d93ec7d6955dfc742a3cbf3be738f2f", - "sha256:8eadfb5394ab5b9c6e3d4bb00ef49e19f60a4e431190c103e647d4e4bff3332e", - "sha256:917e3e2ffc0e078cce4a632f65d32a339f18cad22b5536a32c641bf1900e7f96", - "sha256:96fe7da85d8721c3a5c362f6b1e7fd26ad74a76bebc369fb7ae62907cf069940", - "sha256:9836bea98f25a67c296f57cf6de420c88f46e430ee85d25ae5f397968c7adcdf", - "sha256:9c8295dd49582dfb6a29e5f9dfa1691a0edd2e0512377ceb2c8dd11e7fabd38a", - "sha256:9ceb8d6f1bd18a058cb8472c6e8cc84802413a65b029a7832589ba7b76c0eb11", - "sha256:9e239e404dbb9fec308409e174710b5e53ff8bd9647e8875e2ca245b1f762f89", - "sha256:9f849d4889a0f1bc2260b981b1ae8393938e8a2c92666e1757e69f947c6ce868", - "sha256:a6d78f967b7b162013fc85821a74cc7cd021fbf045f166629c9bd523799d8e51", - "sha256:a8d5787f5c52c00991032b976b69f5c1e181a3bddce76fd43c91b2c4901c96ce", - "sha256:a9a90ab26b12218d10d5f148e84e8facd62f562bc25d32e2c3cf3c743f7e0e67", - "sha256:ac6ce417174a086a496aefc7caa614640dc33d418a922ee0a184b093d84f2f6c", - "sha256:ac95a2ca4add04f349f8f5c05269d8b194a72ebdfc4f86a725c15d79a420d429", - "sha256:ad279e4892652583671a7ece977dd9b1eb17ae9752fbc9013c950095b044a315", - "sha256:ad5935f4a0ec3a2c3d19021fcd27addce4892ae00f71cc4180009bc4bed930ac", - "sha256:ae0519d01a05c6204c2d27ae49b2231787d9a6efc801d5dbf131b20065fd21e3", - "sha256:b1114da71974c86e64a98afff8d88cf3a3351b289d07f0218e67d56b506cb9e2", - "sha256:b2b81c6cb59b955b82a4853e3fbef7231da87c5522a69daaf9b01bd81d137ec3", - "sha256:b63402c5af2ad744c2c1ab2e7265eb317e75257fd27eb6f087fea76464b065db", - "sha256:b75fe7abf55e7da6d32174b5ac207a465d1bc69d777049c277776472c0b7d82c", - "sha256:c0006c6450d02efdfef8d3f81e6a87790572486046676fe29f4c5da8708ea11b", - "sha256:c1191a1c9f24134c6048770aabaa2f7def8d6d4c919da857d5e7dabdf63308f2", - "sha256:c43579c7a64f21c9b4d4c3106ace46a8ebfb8e704372e6c8cc45807d1b86462f", - "sha256:c62472a70c7f22f1ae9864c02554dbc234a1dfbac24388542bf87437a4169379", - "sha256:c6c4064b2324b86f7a035379928fe1f3aca4ca5ba75ebedc9ea0d821b0e05606", - "sha256:c6fa81c8d3c901d9f174482185f23b02052e71da015da3a613be98f28fd2672b", - "sha256:c74b960a1b93ac22e6cbf268ce509fb2c2338a29180c3d844df4a57bfff73273", - "sha256:c9c2b3b00033afdb745cc77b8c2ed858b08bb9a773c9a81a1160ece59a361545", - "sha256:c9fdbe8b1b32a731ee48a21a161358e55067c9cabd36ba0b8d844e5106056920", - "sha256:d0fc1e32353afef426488d2e19cd295f1f504323215275ec0871bdae2b052a70", - "sha256:d5b65d9f2860210087739adadc075bd9215b363d00c3c8e68369560683a4c3df", - "sha256:d6e6972c5bd1ee4f532029616dfe0f5133f7cc688ebc05dbbc03e19b4ec12199", - "sha256:e333bb6a69c515a1fce149002aaf7d8902fddab54db14fe14c89c6da402410d2", - "sha256:ef812c73fff460678defaab3a95ec9b7551ef14d424eb6af7b75e376050119d2", - "sha256:f030223aa618a48d2f8339fd674c4c03db88649313e2c65107e9c04e09edc7f2", - "sha256:f371453d0c1109e93ef569741a27171e602ef1fbea5c27a8f190f403234fd36b", - "sha256:f74636ca4a3ce700f4fe2dbe10d224ee4fb52ecab12ea3007a2bc2fcd0d53888", - "sha256:f96973d42caf0e4566882b6e7acbba753199d7acb4db486f14ab553c7b395cd5" + "sha256:068dbbe59752f9eb8ec946df48af60669cd61bb722dfb89f48f142f9fbdc275d", + "sha256:0a9524a22db1d5cb386c0cfea8b533fb0c7f8bd196682579e559febdf34a8b8a", + "sha256:0e8db03317d4d61fc35a29a6fbcaab286d0f93f9430855ee690dee1f01c10d7d", + "sha256:0f2dd1fe2d1b614dc8ad65e76fd0cb58430a1029d371b1797fa353d9d1251e84", + "sha256:0fa9e82d73f64bdd1bcc85cdedd6aef3547c9edcffc55e413c28fbee128bbee7", + "sha256:1436fbaf695a05dd4d6b7a309605fdb738f14951a2d836cbc8e1b0d629891238", + "sha256:1548e3ca0b496286a21d7f0007e00931ba2cfd1bbce0a855237ecff80ff312d7", + "sha256:159fc6b4dd1a0e2b7873ca36307de61b385dfa0bb8fa8c8485b23bd40c5b99fe", + "sha256:17b733c64ea52ebae625459da348bb21788a6f74d63f6efc760c2d1fd98e6b25", + "sha256:1869e213378d187ced55ae45077c9613a37e59a6429d2431343f0b124f235e1e", + "sha256:187f97eb3b0b36447d20d80c5934a4a65cf0749a754029fedc1379c657f00bf5", + "sha256:1b8da9e0198ca4f16b84aaa0ef4227c1dfde17d1ffa6e33b01f2cd1a0becbfaf", + "sha256:1c82e9065add225968ac3b34820b0b91d26d88289102e2e34c817643ff1616c2", + "sha256:1f1ae125e6b89f83ba9fcfef9c9b9fc14ab81243522ee78009d302d138a695db", + "sha256:1ff41df445dd0903c2e2c5c943169deb616debc1ff26b19ddd4ab2974f6e2247", + "sha256:200363583476fb09e2db2809507e544809ec8b624ff5c0585d169e7497124f56", + "sha256:20634aa6571997391463ba07cd72294a296f22ffe8f6fccab2b78cba9efc796a", + "sha256:249b7d331f6940e11bdea0040c7251aa0ecb3a3f388f6b388efc9d7c951ff9d8", + "sha256:2d493cab218f9aeb177b043b0fca3cbcce60ed6116835dd50ef87eebb253e840", + "sha256:2e2af01a2d090f71eba16954536b2c3a713bf2f005f23b827ef62f0ffa83e310", + "sha256:317b1d986abe1261d6ffcc19345db64d13eb0b0975be4a45a5467a61f59c041a", + "sha256:3389a5113bf82fcb2a07ab73b3ff539a86a06df53c2bd979739e01a28521d2bb", + "sha256:33ae43add9871311aa0115db6e98577b10ee8250f8038ffadb24f3bae94ce217", + "sha256:38727c4b856c7b91a18abb9a58101886c34cf4f9098f0a76fc487582d32c5f93", + "sha256:3e65dbc81ecd8e799a79dc9a6d92c4dee5b8a81df5e0eccbbfa929e86b58c2c6", + "sha256:3f72c6e588f5e1617a7dcefc885efeb98ffae9c21d6703910a1d41cf7f86de27", + "sha256:4000ac171e904c3be46c20d2ff75bc087126d8994fab41891806a80c2cc077c0", + "sha256:43b09d7b1b91b6a438f8b28e6daa035d096867690d13601e79bdc91c42cfce78", + "sha256:45e532cb6851cac350898293e6f57ba41544a0aab956403427909139e8587fe9", + "sha256:470b79619f0bbb96308dd77f800297c02ee4af1d1f7a24f33dd54885492e5506", + "sha256:48d1404eb673275f90b4e725cf4ad33e7663b1f82fccf01fa51ebe11a93dfd20", + "sha256:4ad8d13dcacb2f31a61aa31d414f9101370d4ec9dd5b4a1d721e73ff047997be", + "sha256:4b3759b1f59118b9f54606da8fb23f775320172609f796a22badbe94cc5b9aba", + "sha256:4cbf24b94cbb4c40aacad8a542a9c016083a16262c79673599ed0c5a23700d25", + "sha256:4dc7baadba7478798a66e325789e6f7f19aba5e556caa9509a4f9cddf17ee5f8", + "sha256:51402ceb8747d13aca21ce76df70a4309e9e0fceaf9e594397748855ce5ab113", + "sha256:542b9e5c70a15cae3f182b7d2744dedde9d9f169b754e730790816f7dc51b730", + "sha256:599301048ef558a1de0f24e48be6b97d49b2eaecf66f6e8815ceaa18c78de45f", + "sha256:5c1c58fa810a9bf8cc27b5da720c6da6da08c3b736ab56c1fd0d53db724a3182", + "sha256:5d52b8c97f66a4a67ceee11f1e81959669c3fcd3008e65c6941ab326cda7d8a9", + "sha256:60687f534b46c2d216d51bc6bd886f3b7bb871d4c390012229169baf7f7e326c", + "sha256:60b9f30e24e73336644e5098f0b79fd164f54fedcdaf78c5c12ff30d668eb0cb", + "sha256:610db32a6ced2d2ffedc94d16cfc7762b1495727a5da6f31a84130a12c40921c", + "sha256:613982d09586087b24e0c850d7b3bb0dc1a3c7aed11dcf6fe5c4dcc9ac2d63c8", + "sha256:62180830ab02ba7163d59e723cdafee606908f001ad410694b41fe3d98acfd44", + "sha256:637cfcd7eb10eab0d02bf2ce3d478e403d9c86695100523300c6bfc67cd70452", + "sha256:682790babbe4234d06ff89116d523269c5e2f7c52af0efaca01959b2e33ff1ef", + "sha256:6d5c9690c717b884e031268238bfc2ef2afa32b033f4e3413a832802f427157d", + "sha256:6faa0d8c5d2506a665a6635823d13346ce91480802995eb2e306766b883ee307", + "sha256:717e1289cd6fbe182b287912e51b89a3841d07fd12e3ac58ea61a574efa82306", + "sha256:728790ed57682c4570e6637cacf3f1795ec786a184474703a53c431c5301b4d0", + "sha256:75cf7ed7370d2fd8a4151e9a5e5f1aa2315cc1910060e05ed03065e8f41e13dd", + "sha256:794858517ed8d3f17516ab85054bbfed5bdb9354fdba59d0643643b35a5ec4fb", + "sha256:7d474cb2b5e2b613c3c869ce9c0666d3a22551cfe1b49e4d3c344b83529454ec", + "sha256:86c9102e65a9b1e66ff15f42cd67ef7999b82c21ec402a41eb2216ec7046aeb2", + "sha256:89560a047cabd48703c38aa8108817c31cfd029109690474c7d52a6c1fa4cb4c", + "sha256:898f44a77d12e2d199096f5ed81805fd1b53d90ad1a47787c3108361600e6923", + "sha256:8db783fd4a874a45489ade1b78a7b8d2fbc45f01bf6d349d48d5511be36f592c", + "sha256:90fff8fc261a79698f5b4326db5e7a9442670ad84c83f421d985be54e2947074", + "sha256:9279eb1acbdb58a9864001a934d54976a6f7f3a2a1c1b5bcd10ef46557b9ade2", + "sha256:976a28d9651450086ea1666b4c5c6e4695623fae155b55b8da5bacc8edf1c7a8", + "sha256:99c685fce0a69e3c1b2238bb7a28c7ec746e16524d2225f64ad91825d87659e7", + "sha256:99f22fca5b0d9b3ce5a0cc6faad98caebd533356b5f786f46a2558369ea7bc58", + "sha256:9a2b974717613edbed2c74e45c1611a62711103555ab3ff6b4b18d16746713e8", + "sha256:9b92621ab63f0de61fa2bbe391cc38c1bb8a7998af65f58607120f8979e5266c", + "sha256:9fa33dc301eef34ef441a31327e027a14a18fd9d3b9f50369745d21e199a1f03", + "sha256:a52bb5781e4246579e01950c73b6c6c4963ca495063748b1b2641c756fdafb13", + "sha256:a603f05cb6a6f6590549300d807d35ce193db5a0054c9cba9e7725b89e0be2d5", + "sha256:a895173559fa33084a9a94ccecf9e1a6d455134bf680b84a26fb01aecdb4c89d", + "sha256:a8d124fe0b1942279fcea5b774c74ca48553da5407e904670fbd6c1e823bcf45", + "sha256:aba223a34d60f8a15701a38450dceabe646cda1caf64448d914087cdca8c0aa8", + "sha256:abec93183205a3e022eb40bd55b8d20f59b2bd26b46a5389ff9ebab375ca3570", + "sha256:aeb1a15984a6aaa3392a519dc1c9b1af98fbeb4b0a2a545806641ddb5f385631", + "sha256:b1a6165a3c1226760eb3c9f7605264ce24b5cb33907cab00025f6eca7c2b349f", + "sha256:c04921f442968e7c7760cb21bf4f897c1026840b97ad695c7c9c6caeddacea5f", + "sha256:c1947fa6ee4d4bd9c73091e0ef75079f8114c1564603bc42bb506575e0b48575", + "sha256:c2b1575d24f58d7337391dad32543a5dc2ebf3ee771df479e5d334b36ff30718", + "sha256:cb38bc3e49694bd568a48a81235e6e8e587b79e5f079fefbea4239dc609af713", + "sha256:cbfda5c6a10adc3ec18b0ed8b1aebcd8f1b63d4555ff352521d7be56a7fb19cc", + "sha256:ceb459c9df17b9b35e7302c4e0df992de46fab859a59b70eeb6f55e6c7e8221e", + "sha256:cee41d563a1fa0fbd0d9028cca10775189cdc69e47f845d2ee2d6343264f183d", + "sha256:d979e315e2bc5775a1e52d73e9a82e29844bf293be4f5491dae634c2c2d7a2f0", + "sha256:dffba251ed903b8741530fb296664a06ab32bae30d700359ec423dd546da785e", + "sha256:e4d371b057679000f00296caa827a885c3ed74fdf4b3eddb99e95385b73f120b", + "sha256:f4038e27f672983c7586a7d91d2c9039b8637490efc705bdc6b3432d0845cc82", + "sha256:f8d455f89ab9dfe95b516cdbfd5f946751f38309fe4f725c66620d7b1327e4da", + "sha256:faa9e3c531fa4e59c5297cbee178cae43201cdf1d150ab0e44b7d7d2620a2d8d", + "sha256:fae3e77478cabd3b5d772ffd50c29c871ee7aabdde0b8be4899a35a7d99fcd2a", + "sha256:fbdb56a12c6d218fb0c53b6e4327fcc1a7b3dea2923ec3fbd6d037a38b5222f0" ], "index": "pypi", - "version": "==2.12.0" + "version": "==2.13.1" }, "redis": { "extras": [ @@ -1642,7 +1650,7 @@ "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" ], - "markers": "python_version >= '3.7'", + "markers": "python_version < '3.10'", "version": "==4.4.0" }, "tzdata": { @@ -1784,6 +1792,13 @@ ], "version": "==0.2.5" }, + "webencodings": { + "hashes": [ + "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", + "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" + ], + "version": "==0.5.1" + }, "websockets": { "hashes": [ "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41", @@ -1955,46 +1970,49 @@ }, "zope.interface": { "hashes": [ - "sha256:006f8dd81fae28027fc28ada214855166712bf4f0bfbc5a8788f9b70982b9437", - "sha256:03f5ae315db0d0de668125d983e2a819a554f3fdb2d53b7e934e3eb3c3c7375d", - "sha256:0eb2b3e84f48dd9cfc8621c80fba905d7e228615c67f76c7df7c716065669bb6", - "sha256:1e3495bb0cdcea212154e558082c256f11b18031f05193ae2fb85d048848db14", - "sha256:26c1456520fdcafecc5765bec4783eeafd2e893eabc636908f50ee31fe5c738c", - "sha256:2cb3003941f5f4fa577479ac6d5db2b940acb600096dd9ea9bf07007f5cab46f", - "sha256:37ec9ade9902f412cc7e7a32d71f79dec3035bad9bd0170226252eed88763c48", - "sha256:3eedf3d04179774d750e8bb4463e6da350956a50ed44d7b86098e452d7ec385e", - "sha256:3f68404edb1a4fb6aa8a94675521ca26c83ebbdbb90e894f749ae0dc4ca98418", - "sha256:423c074e404f13e6fa07f4454f47fdbb38d358be22945bc812b94289d9142374", - "sha256:43490ad65d4c64e45a30e51a2beb7a6b63e1ff395302ad22392224eb618476d6", - "sha256:47ff078734a1030c48103422a99e71a7662d20258c00306546441adf689416f7", - "sha256:58a66c2020a347973168a4a9d64317bac52f9fdfd3e6b80b252be30da881a64e", - "sha256:58a975f89e4584d0223ab813c5ba4787064c68feef4b30d600f5e01de90ae9ce", - "sha256:5c6023ae7defd052cf76986ce77922177b0c2f3913bea31b5b28fbdf6cb7099e", - "sha256:6566b3d2657e7609cd8751bcb1eab1202b1692a7af223035a5887d64bb3a2f3b", - "sha256:687cab7f9ae18d2c146f315d0ca81e5ffe89a139b88277afa70d52f632515854", - "sha256:700ebf9662cf8df70e2f0cb4988e078c53f65ee3eefd5c9d80cf988c4175c8e3", - "sha256:740f3c1b44380658777669bcc42f650f5348e53797f2cee0d93dc9b0f9d7cc69", - "sha256:7bdcec93f152e0e1942102537eed7b166d6661ae57835b20a52a2a3d6a3e1bf3", - "sha256:7d9ec1e6694af39b687045712a8ad14ddcb568670d5eb1b66b48b98b9312afba", - "sha256:85dd6dd9aaae7a176948d8bb62e20e2968588fd787c29c5d0d964ab475168d3d", - "sha256:8b9f153208d74ccfa25449a0c6cb756ab792ce0dc99d9d771d935f039b38740c", - "sha256:8c791f4c203ccdbcda588ea4c8a6e4353e10435ea48ddd3d8734a26fe9714cba", - "sha256:970661ece2029915b8f7f70892e88404340fbdefd64728380cad41c8dce14ff4", - "sha256:9cdc4e898d3b1547d018829fd4a9f403e52e51bba24be0fbfa37f3174e1ef797", - "sha256:9dc4493aa3d87591e3d2bf1453e25b98038c839ca8e499df3d7106631b66fe83", - "sha256:a69c28d85bb7cf557751a5214cb3f657b2b035c8c96d71080c1253b75b79b69b", - "sha256:aeac590cce44e68ee8ad0b8ecf4d7bf15801f102d564ca1b0eb1f12f584ee656", - "sha256:be11fce0e6af6c0e8d93c10ef17b25aa7c4acb7ec644bff2596c0d639c49e20f", - "sha256:cbbf83914b9a883ab324f728de869f4e406e0cbcd92df7e0a88decf6f9ab7d5a", - "sha256:cfa614d049667bed1c737435c609c0956c5dc0dbafdc1145ee7935e4658582cb", - "sha256:d18fb0f6c8169d26044128a2e7d3c39377a8a151c564e87b875d379dbafd3930", - "sha256:d80f6236b57a95eb19d5e47eb68d0296119e1eff6deaa2971ab8abe3af918420", - "sha256:da7912ae76e1df6a1fb841b619110b1be4c86dfb36699d7fd2f177105cdea885", - "sha256:df6593e150d13cfcce69b0aec5df7bc248cb91e4258a7374c129bb6d56b4e5ca", - "sha256:f70726b60009433111fe9928f5d89cbb18962411d33c45fb19eb81b9bbd26fcd" + "sha256:026e7da51147910435950a46c55159d68af319f6e909f14873d35d411f4961db", + "sha256:061a41a3f96f076686d7f1cb87f3deec6f0c9f0325dcc054ac7b504ae9bb0d82", + "sha256:0eda7f61da6606a28b5efa5d8ad79b4b5bb242488e53a58993b2ec46c924ffee", + "sha256:13a7c6e3df8aa453583412de5725bf761217d06f66ff4ed776d44fbcd13ec4e4", + "sha256:185f0faf6c3d8f2203e8755f7ca16b8964d97da0abde89c367177a04e36f2568", + "sha256:2204a9d545fdbe0d9b0bf4d5e2fc67e7977de59666f7131c1433fde292fc3b41", + "sha256:27c53aa2f46d42940ccdcb015fd525a42bf73f94acd886296794a41f229d5946", + "sha256:3c293c5c0e1cabe59c33e0d02fcee5c3eb365f79a20b8199a26ca784e406bd0d", + "sha256:3e42b1c3f4fd863323a8275c52c78681281a8f2e1790f0e869d911c1c7b25c46", + "sha256:3e5540b7d703774fd171b7a7dc2a3cb70e98fc273b8b260b1bf2f7d3928f125b", + "sha256:4477930451521ac7da97cc31d49f7b83086d5ae76e52baf16aac659053119f6d", + "sha256:475b6e371cdbeb024f2302e826222bdc202186531f6dc095e8986c034e4b7961", + "sha256:489c4c46fcbd9364f60ff0dcb93ec9026eca64b2f43dc3b05d0724092f205e27", + "sha256:509a8d39b64a5e8d473f3f3db981f3ca603d27d2bc023c482605c1b52ec15662", + "sha256:58331d2766e8e409360154d3178449d116220348d46386430097e63d02a1b6d2", + "sha256:59a96d499ff6faa9b85b1309f50bf3744eb786e24833f7b500cbb7052dc4ae29", + "sha256:6cb8f9a1db47017929634264b3fc7ea4c1a42a3e28d67a14f14aa7b71deaa0d2", + "sha256:6d678475fdeb11394dc9aaa5c564213a1567cc663082e0ee85d52f78d1fbaab2", + "sha256:72a93445937cc71f0b8372b0c9e7c185328e0db5e94d06383a1cb56705df1df4", + "sha256:76cf472c79d15dce5f438a4905a1309be57d2d01bc1de2de30bda61972a79ab4", + "sha256:7b4547a2f624a537e90fb99cec4d8b3b6be4af3f449c3477155aae65396724ad", + "sha256:7f2e4ebe0a000c5727ee04227cf0ff5ae612fe599f88d494216e695b1dac744d", + "sha256:8343536ea4ee15d6525e3e726bb49ffc3f2034f828a49237a36be96842c06e7c", + "sha256:8de7bde839d72d96e0c92e8d1fdb4862e89b8fc52514d14b101ca317d9bcf87c", + "sha256:90f611d4cdf82fb28837fe15c3940255755572a4edf4c72e2306dbce7dcb3092", + "sha256:9ad58724fabb429d1ebb6f334361f0a3b35f96be0e74bfca6f7de8530688b2df", + "sha256:a1393229c9c126dd1b4356338421e8882347347ab6fe3230cb7044edc813e424", + "sha256:a20fc9cccbda2a28e8db8cabf2f47fead7e9e49d317547af6bf86a7269e4b9a1", + "sha256:a69f6d8b639f2317ba54278b64fef51d8250ad2c87acac1408b9cc461e4d6bb6", + "sha256:a6f51ffbdcf865f140f55c484001415505f5e68eb0a9eab1d37d0743b503b423", + "sha256:c9552ee9e123b7997c7630fb95c466ee816d19e721c67e4da35351c5f4032726", + "sha256:cd423d49abcf0ebf02c29c3daffe246ff756addb891f8aab717b3a4e2e1fd675", + "sha256:d0587d238b7867544134f4dcca19328371b8fd03fc2c56d15786f410792d0a68", + "sha256:d1f2d91c9c6cd54d750fa34f18bd73c71b372d0e6d06843bc7a5f21f5fd66fe0", + "sha256:d2f2ec42fbc21e1af5f129ec295e29fee6f93563e6388656975caebc5f851561", + "sha256:d743b03a72fefed807a4512c079fb1aa5e7777036cc7a4b6ff79ae4650a14f73", + "sha256:dd4b9251e95020c3d5d104b528dbf53629d09c146ce9c8dfaaf8f619ae1cce35", + "sha256:e4988d94962f517f6da2d52337170b84856905b31b7dc504ed9c7b7e4bab2fc3", + "sha256:e6a923d2dec50f2b4d41ce198af3516517f2e458220942cf393839d2f9e22000", + "sha256:e8c8764226daad39004b7873c3880eb4860c594ff549ea47c045cdf313e1bad5" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==5.5.0" + "version": "==5.5.1" } }, "develop": { @@ -2069,7 +2087,7 @@ "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845", "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==2.1.1" }, "click": { @@ -2089,9 +2107,7 @@ "version": "==0.4.6" }, "coverage": { - "extras": [ - "toml" - ], + "extras": [], "hashes": [ "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79", "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a", @@ -2202,11 +2218,11 @@ }, "faker": { "hashes": [ - "sha256:096c15e136adb365db24d8c3964fe26bfc68fe060c9385071a339f8c14e09c8a", - "sha256:a741b77f484215c3aab2604100669657189548f440fcb2ed0f8b7ee21c385629" + "sha256:1bfb1b447cd45169a74a09f821cee47f51548508b62a29f6dfdab1d001d448a4", + "sha256:bd922a6ad210bb96a5b31987e10918851131c9670429172d5bfb3a5ede238a79" ], "markers": "python_version >= '3.7'", - "version": "==15.1.1" + "version": "==15.1.3" }, "filelock": { "hashes": [ @@ -2240,6 +2256,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.4.1" }, + "importlib-metadata": { + "hashes": [ + "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab", + "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43" + ], + "markers": "python_version < '3.10'", + "version": "==5.0.0" + }, "iniconfig": { "hashes": [ "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", @@ -2458,14 +2482,6 @@ "index": "pypi", "version": "==0.8.1" }, - "pytest-forked": { - "hashes": [ - "sha256:8b67587c8f98cbbadfdd804539ed5455b6ed03802203485dd2f53c1422d7440e", - "sha256:bbbb6717efc886b9d64537b41fb1497cfaf3c9601276be8da2cccfea5a3c8ad8" - ], - "markers": "python_version >= '3.6'", - "version": "==1.4.0" - }, "pytest-sugar": { "hashes": [ "sha256:3da42de32ce4e1e95b448d61c92804433f5d4058c0a765096991c2e93d5a289f", @@ -2476,11 +2492,11 @@ }, "pytest-xdist": { "hashes": [ - "sha256:4580deca3ff04ddb2ac53eba39d76cb5dd5edeac050cb6fbc768b0dd712b4edf", - "sha256:6fe5c74fec98906deb8f2d2b616b5c782022744978e7bd4695d39c8f42d0ce65" + "sha256:688da9b814370e891ba5de650c9327d1a9d861721a524eb917e620eec3e90291", + "sha256:9feb9a18e1790696ea23e1434fa73b325ed4998b0e9fcb221f16fd1945e6df1b" ], "index": "pypi", - "version": "==2.5.0" + "version": "==3.0.2" }, "python-dateutil": { "hashes": [ @@ -2591,11 +2607,11 @@ }, "sphinx-rtd-theme": { "hashes": [ - "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8", - "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c" + "sha256:36da4267c804b98197419df8aa415d245449b8945301fce8c961038e0ba79ec5", + "sha256:6e20f00f62b2c05434a33c5116bc3348a41ca94af03d3d7d1714c63457073bb3" ], "index": "pypi", - "version": "==1.0.0" + "version": "==1.1.0" }, "sphinxcontrib-applehelp": { "hashes": [ @@ -2666,7 +2682,7 @@ "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" ], - "markers": "python_version < '3.11'", + "markers": "python_full_version < '3.11.0a7'", "version": "==2.0.1" }, "tornado": { @@ -2699,7 +2715,7 @@ "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" ], - "markers": "python_version >= '3.7'", + "markers": "python_version < '3.10'", "version": "==4.4.0" }, "urllib3": { @@ -2717,6 +2733,14 @@ ], "markers": "python_version >= '3.6'", "version": "==20.16.6" + }, + "zipp": { + "hashes": [ + "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1", + "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8" + ], + "markers": "python_version < '3.9'", + "version": "==3.10.0" } } } From b01cbc9aa08a51a63b1719e71335d140ce73a432 Mon Sep 17 00:00:00 2001 From: phail Date: Sat, 12 Nov 2022 15:48:30 +0100 Subject: [PATCH 040/231] add conditions to unittests --- .../tests/samples/sample.html.pdf.webp | Bin 0 -> 2830 bytes src/paperless_mail/tests/test_parsers.py | 88 ++++++++++++++---- src/paperless_mail/tests/test_parsers_live.py | 65 ++++++++++--- 3 files changed, 123 insertions(+), 30 deletions(-) create mode 100644 src/paperless_mail/tests/samples/sample.html.pdf.webp diff --git a/src/paperless_mail/tests/samples/sample.html.pdf.webp b/src/paperless_mail/tests/samples/sample.html.pdf.webp new file mode 100644 index 0000000000000000000000000000000000000000..534157660b25e9bf210b2ab898aff969aa8a655b GIT binary patch literal 2830 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 iAA>f%ws-?V1KCMAa-tm02PkX+v Date: Sun, 13 Nov 2022 22:33:26 +0100 Subject: [PATCH 041/231] fix live tests --- src/paperless_mail/tests/samples/html.eml.pdf | Bin 0 -> 22907 bytes .../tests/samples/html.eml.pdf.webp | Bin 0 -> 6012 bytes .../tests/samples/sample.html.pdf | Bin 0 -> 30170 bytes src/paperless_mail/tests/test_parsers.py | 61 +++++++++++------- src/paperless_mail/tests/test_parsers_live.py | 39 +++++++++-- 5 files changed, 68 insertions(+), 32 deletions(-) create mode 100644 src/paperless_mail/tests/samples/html.eml.pdf create mode 100644 src/paperless_mail/tests/samples/html.eml.pdf.webp create mode 100644 src/paperless_mail/tests/samples/sample.html.pdf diff --git a/src/paperless_mail/tests/samples/html.eml.pdf b/src/paperless_mail/tests/samples/html.eml.pdf new file mode 100644 index 0000000000000000000000000000000000000000..058988f66172a822ab2fcfd62daeb780a4332aab GIT binary patch literal 22907 zcmc({1yq&G*9U9>(k&(6p&L%orGS)lNq2WkD=n#jN`oRH9V#H*t)v2iG}7JuJqNvi z@#=f;`+vXnt&in8p0l5sJ+t@h`8_jx_8vL~F>y8sI~<*^e`#S79RdP_>qKfq=PyC+DRt>}&Y|pL=zRWL#=_PLokJW12kP578UuaT0t0oxI_Mlq zCPvO6EeIz!hzHEg4&mbEje&)=vmKw4osEf|t;sDDHv=1cYZG>36DFXi9Lmm)E=JA@2974S&L9XF@%K{z z?*I1!fO*)VaG=jn5H~l3ofpw(5EKd!IYHb!u~oI|9b^-n%#Na07gY&;{A=l0zS% zCu32VuOP9GmbH4=yQPQTr;<{ov$P*S8$yu!pNdgZDygKm#QBKyZmFrI);|o#HNw4j z|AT1b))yqYo*YKX!o+U7Cc%XWB#FD;rQnma2+;n48+*yR+X(AN#nDrlT`#fAFE|q` zErfcudgdkR_ZgVm%~^WXpWbSi=YQ}fgOy_B=pN=69*PMJh15@!>Q!2i3H*io$jfLM zOwZ!Fds4>NchP;!9}xAW_@IS*%H*3@nr`T_#)gG`sARLz%>S~Isj(b>iJ{^KI^8T< zz*UyyU|giM`PGCBC4CEh_bmmuOz(~(=yI5?sFBv^if8jRoMyy{-}0=|u{ux}z?M|i z^n+auzR}bPQ-SVP_3h?SG4P2`kONF50~L0k5NPOafim#yJJGn!#&>g{98T4jDMxHkx97sPO%%u-wv9EX~ zTuV*Z7fUV4-Db}sJxVVZh_ib$Hn*Gcbf3WFbsDYxWe*X@30-C@?RA$8;ov9*PdF?b zQ|_!7zJRMm;j+!a`XRQDSUw3x1CwnsO4W_=@{9f$zi@lgJ$=S8dW6}Sach+q-WWn8 zxT$S05}r~%1NsIvq9`3DfKf9FCe(7ie1#qF!M)WXkTsL%w2;F!GRbT1q-Rzw^oo<# zimRdJ@} z8aX>Tb8|!0StgclG`fMWUcLG#H_E(CER$=X z`yC1_@%M3tZ{8~=utcESj~Va-=b%3)&v%GXFfaq=jFO3yor|N9i4y{Q0N^!JHUZG; z9CJBTOx&D798xwwL6IN-i~jgu3Yh74+?*wpoe@Y3RF!~%5J;+oKq7HF0D%CSI2;5= z&;SZ2i1YhX#B*5_V+#WjJGbu`$%(*1PF`Lv5D)wZt{`9p0kBRWEd=r^fe`Se1W-i* z&H%hQfe=st@V$t6P9QMw>i7QlRM(*FF0pR(!W+Bjv%_126Q?q}N=G<0(XA8N=_P00M-<0&LH0NgY?_&e~lQi&) z&HiRe|JdvgGyOLu!v54O*TrTpy!!rViQm^BfD!%_6mmWZel98GMWg{^kvFsi{V4O7 zUH++Y&I^r05i6O08o~dQs^NcXmit1p=c4>mvwtw0bDRJ{&eaY&@AvPM0s_0x2=q5t z{HO7R{+x0DIK?^tB-_Qgc+Tj*lkL2xe~^afqBQ?D*M1o(=s95j`=sFdgEY{KbMc(f ze<{s5y!%q7pH%s~H0M42gJE36IoN--%7FbZR~e8$ zEi+&jr`I{B|5BWD#Q0rH7oiRIZ`0@3!TH}VGyb&BfL)wlu>T4zVE@~8|Fj~2U4#qR zzuEZzP2N8(31AoJ*0}`#X7xz2wqQ9$3{rJ(OGArRn1046EuI|zZkPg&4+TL*m~ ztKX~+{LAS7wLto@6b3=QGlZNY7U;)X==+KQ@LGIt?0bK{gE!!kIVXOfv7qxw3FzpL z8vDz0^c$jo-+ib!ngAOsITssXO92MKzAr|;J7oS^nw-xX+dXWkPsOL+{UpT-4>UZT|EXxT{zboV-l?$MLSN}ySH`9+L+%J520P6WN>=!B^ z+mBJbzyVlI{AFJkseo+I-(&;c)qfe`#j=2GKkVZo6_D+RrCy{0vV9-Wi#>w^vi&fv zi)8`Xei->hDj?er`@2X5Wcx7_E>Hm||I0`(QUTe%PnU~*0C4gzOTJhZknIN)T%-b0 z{6L1EJ5u-s82G+bJ~z}~_R1G5_u@MlF&UKX5Wdp8pzk&bfW!GF9q~jC@G#spaYt;y ze-c5kb6Y@cW)WpT=dB|g3qR%^{I@l`sDZPAwVfG)i5V~#epHt=aI})LHMRS>kok)O zxFCRMCdMGZWoiO2{^3XXtFJ$>>q3hcUeVv3j1UkU$_3#9JRASuh~$OAfVc2ZPvnZ1 zr?#rGaJC*Aw#`K}*vI~+dmTWV0Ah9sK zYdy+0UL#6vMkeA*xQP*+2@ce(rQ}KFLB13FzB%Ri!O3ZS_u3x6l>^UF(wpuvtNiMe zBVEu_Ttm89B*~3OTH-i9Gw&5+(0mU9dZNl6OLu#%$J#{Ubzvo+*XTNbNB%j(#OpYAyI(QF>h4qX5Ri%xs(wiH^?lTVf)t zd?Hhx@`>8&grD|u*NV$3q!oAL3#>b#@ zl;Pf>BE5<#mBRIEy?4s~F&yJ)+O26Tv4J#Zntt?{jjG|uZOwS2D>`^Ym}IZc2g zMeu$3WdXg@*EZ!Q zNvGi=v`W2@QvH{?j~>CzLgc4SWY#esP%Fn>4Tei!;`4>vURbKM{dmlDHSE!2w*rOs z_GD*&0sj;h(AyL1%FXTT8u-ZiPn~y$7S*Sor16bY7zwV0hb?{Hxfe^BxSUOM;PTBq z<#2cRxLD*VPl25C;O(>mImvCG(?Uw0vHYc?H+i-CRJmbBs3wM%BbB~NrsZ@vF^(i^gYUGKda>1B~l#k${u5?cs>Tb z8W;;SW{#&={_3+T+_)}StGjh}`RUkWYE_i<=DvCZJ^au;QV6w#h=eeBaC(jKgeD+P zufB%q@L50tj(*sD?ne7N9}c~hvNOwC?|Vl&su7b+O!paoy{0|;@jv449?u%B?G0_#=?I9L_ z%oTIxrxuSROAR-4_`leH^`5LKm2B|W46;Gf3c$Rz;(p1+5Yw`UQQ$1-slF%FQW7m* z&UETsuyM|pSbq<0f{pqcV;kDuOKM(fGT$Z>`xP5Aqk>gslL9Jo!=L!Z1?GngHTu)Y zw$9PHb+r_uw_~af22b$B*t6rj4-^QPr@F68ktPdF$ui>ei>;nG? zzc%M_Yt|}9T7s%(tCo8@VpP7NCUDU_<`Xx%Y9!d>b+q!bBXuM{#gY5^Nj#6|%fqf) zZ=?h*M7;b5qRA?*7G_R(bT#n%l*Y2wb1$`Py$xYE`no=b?HH9*m+~wf%@SE8I1Qdy zbY>A1b=Mg_{McwliQ&UDI$u|h#k!pKg9y!MV{K;|!(9<5)A?irH`x8+ZcCQ|I z$2LWKcn~cJp^o1oBF9HTC2}N+6lFWWH&e_j3{i=)Nhh>$=!;Jee^$c3@e#7YGyIT; zAoXTe;yhaVDo960E-LGmzJEKt2l{~}wQy83IN{mL%Vxz)l4lU|C7zmE->0bN@dLMb z?lyW#3V!5NJfXn)+N8{^OKZZjWnLni6Pr{*Y^F$C>R)q5E1k1RUaqbhj3M;$E>dBU zGKox%AO6EDN`Xdp3S&{3J??Flei zvu;zqS%LJNDx;&{+)n|2KCB$6>yhc3EVGY$Lk&w;EisoFSaN(xD0A-`3d48y)ls6wM{@kqStKO*(QO8~fhm)t*}46WdQj zKGnn`CYTIvwZnTbVgHh>rZDKa+J3?Hn%Q+(yZs8`q`7rfdaq#t>EjZzgkqyDMxMPp z6>h+D$>45Yua-$``r~G_RJBG@>{OnKX=M9D)qPm-_ zXxILzi>eYz*zIIG49X==J(GNFuh2HfW**D)l1Trs(#U_P@>6wJ+ARX>Ru zJjhG_ZJjJwlw5b#z6TrYdWhlG;KO^m*Oz#!9QFP7J95{h-`h{jifz;(>G6}Vqj4}a z_+TI97;pp&k}vX9H5uH;t1|c1;h+tz44nwn4Bi)^9^jjBr#(DS8)~2A#pdU+zF)_M ztyQMplpkNze5ISn_h#jOt^q7q_J-^fJ@yS*g)Nx?b!DV(>!Ofuu{x9+0yYn`c=8Il z!j^bd5)CM7-WHI3E+~FvrK}%;oMIjLDOdOUJtuWl&fD5M%z4bjIVqBax%9W5$-7bG zsX3|_S5=n#HEyo1^OPLyvlUrqD{6lW$Pjfi#$pAXneTv}bu;nR3?6Bpc zC!)N;Q0$uBadvgk>GMWEWNAzfg1S= zT?X{Qlouc8hp7D7fP(mBlAt6$pAk%gdE*d^ft?=nI9VY>LfU& zvAh_?L7OFB55B@sO| zC?#D_++!5GX6$3|pnVaBL8N^VJ=KZ2%eMZu9`gxk7CQLNZ>i^_7jY|TMRKkxMH4hX z)dKP2MdL>pMqkH|cv4s2Ni~M<&}No&Rp1Wp2s)%qL1 zvu8l2(bI3F<)e0p-pJHZMdA84yPB%&w9OY|HTC$U50)FasJ)Z*s&3&lD;;ujvZF37 zeU8ZtiS5VxCTln>NY0!0*06Vq?sU<`YVdAkq1*V@oO>!q?JEgk{<}A{>}zaz#${Y; z)KgW}zQr&>_yTY#>JK*Ab#8FevJ6Z*LWf8CqrUpvG*S(!9>ucivhr%WjSY9Zt*zCh z+ocN2k2fjG8?hgSFzTN!?+k~ed~O3lV{bKJM&C6nNw(;;>a=CU z%)avLgSJUmk7`7SU?y&tTklAJDy~jV;;H8~Eqt~z7r-2TAdVkI9wg~=Z6i^QUoBwi z>t_=C%Cv@!{JZ-p`3Fj2DJDQHvTyN{Vbl~UiVj_~q*RL`^?EZA~_{vro zhRM|6k|7=U6LrhC$;&->IrEZtjh;kx-DPXzReLZ!wcx{|j?6{H@R8k=!IY`9Zb9J` zo_tJ6@uf6hjgeGaxO_*24f~8<%s+?PPNBbK1SE(jn1^|!cc%K z8YooSKrnSb{^XD|dSp#wT8Ay)-bNP7B^cLUygWvLi<`%2M=6Iopr<$acuDnC@shc^ zL5|5gxSpkLvA0WoCbcx3|Kau>NMLbbN*a%^%nQiCEaB8tO!ON-_bF|vWFN4(Z1r&t z^T#@bC-lbeFZ=ecb@6!R862%%UE;Fwwj7uordx|V3Qb6P*fi9lntI9x*~m|X=H~j8 z*|v^OMfU}ypHOxOd(PF~Qn|s;K=@MbPRx;)E|pU0y`eOklahWrEmKpUlAbD&F(QI* znJD%I{<5LP?|PTsztNeCwGRDA^{TW5Bb1cU^`XpW3+Qp^{Fe~gKAj@q+{yLlY$&&yz zjlh9>xoYvZS`P6=XblU%cn@CB+z+-bJCN<1x>tFRHeqUK^-&xycT=-CU0VE<58$2($y!-PGuH=yzvW77MUTYBs1oKE_9Pg7}-qy^{<=<(6%^No@DTed0!=Bn` zRk&{{3B2~%hc%A#8mzq8tMATk6{K+1fy0dA1I;|px_us|@0Rj8n1Z0F)p{AsXJDmSv9K?s;gg?I5xtr zKfBT5w)=eTXu{un)>CjpB3JIg$<9K~tGDZucfu%Jt`1sIIjV$^2j(u#JTsy(M-ExP zQHtSH!V3Rvr$tdgt>{`gEn+C?RW*{wP7po5AYVHr>{_5?Zq$?*C6N|c{#dM*w4a1! zkPn-;#^F+da%7HTBrZk)Zu{!(5@0LP^5n{sE$!n8( z*o7~>`PINggFy+|MqSkdhhOi(Ra}}A4+J6B-gAdcp5ny4USs%G<+@OZBi24cgKH?b zQGT}?T)4tr<3r0T2{CD01=v$~ULq0HcYbnnPu)kWp^Cz*Vb4QBdchfh-Vvgxh%XgE zyGx8L9)ilBF=yN%={NCAku|>Ki>@VFr>ghs^=j*W7xIR^>8YKrJ8!c0+n=Q(>#z`$ zYR}{zBwXEYq}Ud9Y^*9f>Psi{qq^QimPE|rES^E8Xc)d5E2b|-=-M}D972aG7SB^S z8x+ECib=_r#7mpVtZdXi-hqt9PC2o_?{;{ZPc$T@N<4+m_I3oN+~)&mqwI?ZLJilE zyK%~P+e%hD+=N=+u}mH$X-OFGJPM&@!e$zMiXTrD18s`>OlKlFm?$yy@$K7pLp@J7 zBXc}nJaH^he7|$j{;IT$!#J(~c78XgadCS-Nk;m(n5kBTkEYkkSnLRountvBkHb^0 z&_Sr$#dx`GJL*In-F#-yLRb~fh$ed_f|ixPvjFA!Ogd7tBC>M6!e#!s0IARg+H3s< zDdtKdBwu18ULd8!=~Xy>GTO>f*B*l@-#=OC=8(x>P~Mr@^{KHqR?%4?M!vE4v@1?7 z`3CVR)aLk#&tW!-uAZ)L@pc);LULhpI?i+K%H-PiT2nk#tun!4!y_&sx27k0WA0fl zL+j0#<>!Y5aVR_Vs*Z`q2~Rg~Bp#IE$Rs-KQNS>=*ma8@V!N+gqNsS0=UDb&>R!e% z@u{!afQ}2boG3>(_`X~JeT-rw>41)mCPz!|hrUCkm%(i$6LhngW7sIkn=gbfyHf-P zdMFmg(76n1a*%<$%`uhz+;z9wi6mBC>W>$th^@agVXq7=K@|Dw2gjxJyO_0H)S%D1 zsG5zDdplKHX?rkU!u=v%8fny6FekTAW;hLb#j$lgyZK4AFC%Yso6wUiClDOI??D!9 z5luW**NMG>!5S6o)9!dy4!1w+Q%C5YH)MVta7E^Z z_g^H#E63tndO4lzK1bXr+Z2V{tSo-AdLM;0r`0)EIP#H07tQO#7?zjjd#`4EuE4!y zUQe}+NE*-QHVz&MDIRl1D)ND2vyz2T&U^3EU9M zn=gIpo8Pi@ZMOzv`f4+)u)BybPWlw;Xfs8%bYItfT98h z;#i=ILXVbl?fP5>0!s91)_Dd zt9MdoV!Sg$6hJZrSshNzhW(D}>_Swk?W&nrMT%b-Z$6BjEt|ACkYA5F=JcZRV)J3q z2}*6&OD`ZWjY4~)fD4!FwYWoRO>q5+B5wNwbmN!SS2~AA>n2K_mT`O&`O;~d)1J!A zxai>&b@IgzGxaku=zI86ei(kSX7_}2UO|PA<_jBHzWI|;5xuL@UE%mv%5beHb)&nP zg3Ad9x>&Sn)Nc&KsNXaLvehdOOAiXMS$}+X8Xlv!Y0$t8(xu+(47O%h~rP6J1|n zn3JyTa&cHqnM6!wb5R_RCeXK(;`zSy8GCtCBWLyFR&!e$+{AUe^(0EwSmo*Ku2B*B z_o9zS{7mxFuD>6&2+YAM4%Iw@dX(sH>boWiB+Ev1#Db zSfF`pYf5lSCPr{QGqr3@lcF1H$+>aRTz6G+>6!ZE)@S(S7E7^YmJ*X~y*5Mq@#k1G zE=X8Zb5qOwwhUL%&`{hdijhp-L|W5Mo|DZ!Uu98bo~*WwUKG9&xJA63R*1QwPd3uN zC2Qy-ochKG>9@+$$(mf+`wM<6^Pld#@p}9rk^pKdd#44vDKj%`EG3jQDj}CyN`6_G ziK)-RjFJ(P-Tmxz<>=e0+j5xjhWx?7H6KO}oA{HdmmOFcdQ}pQK1rv=Mir~U!sY58Hbgf5_s5?zb}@& zLTmb^oFrBg3M=vghqsvL(MV?((D3Df2F%Gtwu_sB3?rV|c%;^-*J>1|UZOZcie49; z5K*4E!k6+{Ic<@H&nQ7mcY_WiwDuCe|BF@yp=`0r7wN*N+jMD2?9^$oOW|6t3C~29 zwp>DOWoUblZ3%1%S{tvZW2#GZ$S^P-P8vsvqz?ts_R>CQP7e)cZoHCM)L+qjc(78#|3;lIBkF4)%7Bfi%ZY4(cVcVUu*fjbmUoL z_SDIMi> z8@bUZ?Zh!ge0nQh*;|2raehNr_9NepkUezl5;86ni55Yw=UNh$}~_H`0p#-h)yp&EVHpn3D1kRK0uSzscq&ddvQ zx^xp=B_q=}O5GIIPaIx=G6h<0UX?U6qwr5xdWZUMgrqMa?AxplFSixe0*+1EhtyFzV~h+4|XF z4o>(`U=UclN^;nM-aq*&jg8HR_~aduTIc%R=|IfXUNVy~=Es`XXCLD)xL`}PN9tHo z5amTq9=Amt97R%ojjeT zVh-Q(*EJ$#D$auP%_s!koK^LTcAArsj*#TL56yPm4s? zZ>a^cW0=@@%C_pcPYg9l-4tl!*f4^>Tftx+e6w>lBdX=`G zf^+$Sm8<1O{mC3_-Cz07_H1lwQ){`)QobI4jEAj}^E-XxKSe&H=QGtCWG}4t=}r%M z%l&-q%8H*kpJ+5X-8mCYBqVQfnQu@FmKg?dt z4}QMNW}h8WJxEDQdP8GTSM{}mitvNe3LPx0lRd%B7R6FFdybK}?){TCzS8ZaL-6pY82`XMIDhehyr2d3v-18~<;kQzvx5RWMvr8D@ikH=lXhkKEb#XyI z1^Z?W-rD+&FT#^X0~_H@(kT0*;`9Wa1~J-9HR9OuyF<=giWOgFTEI3hYHf_}kZUt#vyW#w?eW+#hyx|* zUa8?*(nU{(Qd;YWj3c|gxyFGK$tn4bG@uNb9Bw2I$o>y`?n)4O9 zu)^%uEU(kDuRdn=Sg>zgmdJ61ccoN1N{EWqR=7W|zSQ}x`(Oj(jzMa^BH?qJFPmLU zT34Tm)URd}%;~)&o&g1HSM};*pE!A1tiFvsK`sz3A1Y*P*%4O9l*=QL=?NA}J4^&` zb5kk#`@`cFpLHvdf99{7B-_vJR`MG2!OKWjVUFo^HaUcf#upE$n6kfls?lj}va1v< zJY^Vg(&GK)hL9tZM&(kVisBOyjV(mm;e4f?9#z@J?geb_$>xn z-RrUvuWP6RV&QP@uz|dLX2)ZsLu{m$g<+qzD?j2AYIBo>4h%~Lbu*DFc84oiWDnkq z#=@r`@Fx%TRP)AeNsd`#@il$m)AkM5q}dPe@QY($ea{e;j#Y{%A2vJM!fMb7wrBrj zovwBsQ;Zm%Sz^dRJtT=OK56Z>nYhbS*sFqPusCj3f~4yOCX>=*Pt+ger@V(rn?<>N z-1lWdS7oq!Z3ebHeoc!Xd1ER5qhk;)3${_v$OKn~>{kf6E2k^xPVXLM8?p-_6>JhE zP!FYQ9-^cD8o#=TpMW2OpSUO$aaXbctU|&fbKNv}^BGqQt-mo6L0tV6wW8ZdVj_g) zf#%+h9+tHON6MW_oyzwz4wX4FgN!tVmIec3W=>igq=s(<%+lPC)GM`~`r;EY!g1z) ztc4@Xt66T|JVWfoA+R&NmbFZLxFRP-D)@z)_G91df(hrfsSgBr z1tcbHPCb)nvZDc9k2E6h3}{Tc8)gMNKSQDEAaUvXR>a5^H~2_6zJBHPi@{smwR;)* zqe`K)X682+l}gmQ+1^1sU{Q5tO;&qLpjjTkLDc%1hlbXPU)v+di4 z;+!3Rshg=s2`7c%9?_2;1e&$|JoqPdpjgAm_qQV~KUOUwnN~zH%7KuKOnR0JOtqw( z%chWY^9pNSx@qjHM9*&Flu-CKd`QHxGs?JkT$w3Tfy#e<_2|X51O`G}n(9y7k}4hU z_1J!SNkwi3ge-jG5w6P?MN3#Jyrftqa-TR*9n=wJEK@{8WlXM1^Ri7rf%dtR@(#G_|kz(ijB*>Jh zq+|x}Lp-{wE!bxs3C^S(Y8wT)qhjJ;TMQ=iHqE=az{7>TO4KSjJp-wL96GdkZOLrC zdfRo3sl!rxtE}DSn{Zrr!pMh(j#9?0oY@;eLN6Z)OIpcq`5#YMR6On$l2x|IQNZQ7 z;pYE&tKOOsWA=^tvl0{+U#_;;RN9Wc57on^xDt{?mswNpj&0r?ot(3o?!00%-r#YF z-1!1`pT7`Q+x$pqpOP&qmT4SIjoRp|mR)Z+@>h(d10&D!>>@Hz&fu#G0i*UT0RMqU?z&s9!ig38Mj*J zbv7?AmA<<_*(3OT$HP%FeZgJNM0a9wE-XGS>YY*4Tl6rxL``OPa_(+(Hh_+M; zLtzZT43bOlkDd52&W@`aR%;e=tE=p-)>dAvYR|WR z1yL-{f&clV@r-)RD$!QU(DU^!)cQ}_Jr=s`YOaXL26?Ab29 zg)nc#33stmI%;<+<6aY3DWrAIO=ViK-@%T6Qk7z5){WKJ^Vt~(9{Kd)o5+cytw*xj zFOCJRam6s)?+w|nBz(PL9d_bpwjkhs&$@E=c+pc%i783>)Rtgm>uGIPlT-HQ{opgo zfUR`GaY05IsyFKbcg?BZ@Uc05OS4O485EaoE%58&_N4h zdN(O-p%HJFWzmlNew;nGu42LeUwoXNUG;rZaRaARiTA8*q3@r#op#@XKiNJ*es}38 z84)n$z)U z`BFf(rI`~V$Mv?85hBZ!7m@x6g>nILPzW9f5*rl8$<71gZH zTu^`wmZy{nhf0Oxpjh~W( z;O8NMK>DtMlgW7k+n*HhpL|~+kqc1>5$Og6?EYbWDV?r{5WGk4;Ieu=VWDf zCqM~*MWHE~m{|Y=;tpcG4dfo10CBSNh+JU{MC9yW)c~Thi#?FniwLVlB#WVQ+(X2X zYH@+V>|kDQE<~s$5LOD|X6NCCfO&NgVRb-+EsPh;4uNrTLlJ?ST0Ah|@wvMGQxFLD z1AiZxUn=t=f)=@8T;rLfbFxEtInSdS!2ok0)ekXX0AnsrPIhiC2+&`EF)+B?yigz= znj6l;4u*39Lki*q#NdL#fkHrTH;4=JSLZJ_i}=pT4(8qkpYf4{;d;h0kM8GsI#vM zZv|LttsCOxRpRKoETdat_Ui8M-q;!;;=-Lw>=I^Z?cOvh_!4z+GqVt#Ort;NOHa?Z z%$;SCK{a=gl8XG6z|pcr>6HUDZJ9<%oq~k1Fr$`Z`6Iq?Q^Q=*uX^*%TjR2_nX30n z4?m)JHp?#QElNg&drCD}T3V+MD%C!tfQ+|)cDETHanRKI&_8X}*OYGLYnfA%c{}!c zypm3P*n2^=uC3bZU=@ZyHv7!W(_X`HD$ogWx=pGzGG! zL@&xyKi5d=9#?w2bjJer*#_0J0fV{9r#s76m?P8iU-Cqw570$vy|`L@yZ9~*KZ)W! z-1ZkC9VVCX4t=#n*r{-+aCn^CC@BrJ`)qq1C&CR-iN%IdNpS8Hn~fUs^m?n< ziaW-mw}8)T+&@rODt-+wwwiS9U1_XB%TH^qSk&##IXJy6Utfp%2OtJU`45=%AACUo z3jl`y2u62ofwXr7cKio&*d+e~Vq*gU4gr7y0>k0wG3aIjg8X-#a^M}ih(CE`c`$?z`!#4p}SP-TOQM4)nS=| z)z>d}EhI(fbjWM%$sh{ZrES+s7KW-T;R#HAG=r!d^ameFOmf(L7E_g-xxAtIl}P77gI!NIe^y>*U#-(Teu?Y`SdqWX)@P8{?a?};sxE(F$!m-0jzec&Dbi!*yCkcwoZNbKa7c!S zqrc}ZxRwalN;KX0xcj0dDsyE;kaex2vDCBX%H!JvUT(92&&pZ~=Ui4x-;tU5?K!No_iZn(x(uEgM-Ymp%4A4zHs&Rp>0vYFb9h7b%M4rLZb3<*beD!n zVb{W$|I$&J`LN*0WuE(HW2 z7YiSx?g<`TQSiyZ(al(yT$@j@O(?4yNHvu3!7%N8kwqY%CCb$|DIItq$m5S1_t`(U ztSz0Ae8J0jXJV6rCz#QGZ-TGk(&oZ(SDG>$ji?TZZ0;7tcCZ1M*i;nRfyIE*!4zLG zcsczxdV1s6@x<9`!ER5_vHXqTouHVvL_|@u@y@QfOgA`2k!O1(ww_1}CKoNFztl{U z+T=U@K%-@%aJ9XO;*M(v6A=d{o$wors0k!5n zjq5Aj-KgDxHn<`<`DI9|O{%TQ*3{Lu`QT)DY$wZ*7@5_~3Mk5pDOrXunl*V@SUOH` z?4#yOWTDLA&S5g4XyJ5At3=s%F3Gjc1sm2(H$rF0c<W(gJEel7GAt#he^Ca8h)>Rh$kRA|ckr&a2%?vI#$=B{>%0!H=#W?&A|Em^5!6*0K&m4zNsz2_SMpnsI&Tz7twwMtEJv$6$hEb` zdn+}}Ls4q(EjWU)WWcc^xbsprtMvVyQhZyC$Wkyl>60*;R`r))k^PMEBW(~X>~x0^rZAR z!ty>@qo|RYlHSc{!ORWsCQFlk$ZTe8+47e7Q=V{E41b6>J=ddHzNWi|f_7_F4^tF` zd26@G5A8~GIMa_FcBg61Qwi#Sav^rW6|V!?7Ns&OIE`q)o`R!4Uf8x}X z=c#HHY@H$_c+AI@NCm-v#VQ`gH0Vz>H$lt1cH1%PTiZvqyI$F^-q4uWdhHy3S}wAd zPkecxzy z%H--pGr!6<CG0c}KujNlCio~Fm@6Qxr+2o{rWHGL zLpXxGQ5nGPm_$}}vlN*(M&~|PWLvp1xn)l)^|04eNKYy^O&>nr&3JTTX+s6O+SgA_ z4fD2aLX)bd&?Jg?vm$-HT>k2X`|ZSe{coknACU7jt5`M7C|OfW&7}KxCq@}43v<1v zLQeX#N+w?>TF(z`QY2$A=9f{Sn z-Lk{cb5uKvo8*0-vAck6t)Zi*F)_JWmhqg!VD@YA;L-W4eD_!_h`Zqqm}=K2S6S~V z_!~QCt8)EaOQm7K&NO<9vqj6He62cGpza2y}L(Z!`^j;f)J+STIbxZSVpV5}>< z>g$d4b=$;`RX3*PHoRVa$1}RwJjonO+yboRk4NSVVL0LLj=%d#gB~L-# zF;P65r>_^@XgQ?;PeI0h*wxjA6cdsq{bT|<6(4s+s!5qn5`0VGnSa;o4{&n@d5&Q8 zPox#!%#`@)i}r^udivJF6^;n@8kq>9C2D^zsfWbPREth&T@68!xS5qQUm9#xPl zwb+v`zItfOxchoX>vw(6nAQ{OI7Z!6C!W1%C`83%Cc$ibaG*W;K&r9(`Y~%jYC+gU zD*7>PK&IX-U0 z^_ggW!*FtJjoO{$x(UN`tN8j+p1=5OWY!q>hO(~Lc)(gzizk(U)UN#DMiUB5IO@?_ z&GgI~{UpDQ!7&9xY2c&-{>{g&Msflk#y5qT*V`uXeT;8XYS7=rcBa_eYNT`H0o~l3 zPDQTK@x30ojUGrorQVr93-3{L3Td3nh*E`4C>Q4$=*H0|=J#zhPDgE=0tgAlx z9%*)YrDADy?UV6(%1-F|K5(9_4VV&7ugsn+kK+Y;}O*r=Uq`Htk3vw>8Bw3eZI6}$`(F2hOHqURQvp2MOW!hQ09#vZm3`Qb{cY`rYpA%?#v z@P@^rIEO8G+QTrPqe-uS-O6|AHTDvJFcBWxJpadGEydX6(=EM$azbAM1CgIk3I@agKZ-|Qmk5&)So5~WNwg_}5f zB*bU&Lj*xt@ecZn*g^{W%)|0ueXn-K;YXgtIJuqS(pMe}@LoGo)gMP+rdekv-i>r# zAG4L&OdF4=#?QWV;_)8R>x-s8iAJ?O+(Z1NT5g+h-qpxU8~%9DD2Xkp^^Vb~ZUyXf zdofXX2>T3VheTHH6$V6FKm96Ao0b@=PLtC?uZHg=HYUM5=nGYkt}j<^@<>Ck>#fo+ zy%jR0Pnz&WoX8RwIhBzTp0|f0KYM6RXpZ}u`1LgUAleN2=0nzCT$cIH!FsyeWwC*< zYktVXx@yISSWA0nuj6W*x(SrjRv?7xqw7$z-0&c83F$)1o#F;xaEHJ zubyXhUvM7$mIjY-Jbah;r~DxJdD{0ym&X63hW|K0{{MHf0^Udn9L@>TL3ot`r|M6? zD8fw#Tsg@O1#<&VLSA0L%?aU#0A5H=PQYEq0|mT-JiL$}PD#K?_}u}Cs0GyH{^2$U zzH_wn1 zvw?jIQ6nB7dAgw@rif!DLA94PCq~kH4YM$#{KJsz$hX#4bKY>WB-t7+uKOYviob}m zeAsXHiN}^Gzt%y_gv!_i?TY7Kzf-Q>7d$G^$a|s!_7xA;6yfI996ZCRHu**d-#50r z32Invp*_j?p_Tk}qI9R9oYodSPCt<;G00H_IjGwb3gc(oOQU7zP)dW-Rfwe&q(J4l z<#`odsX7P}^w+MRxC)^}tkK>T8GrNTQ%y}o%^k0q24W*^+PBv_4Da4%7EsGzsD591 zbkztueE;{!`#+oz{KpV~^Tz#8ru)Bj$(?7Y|KgH6AKeQ{?rx4Irs#kt7=r%&hB(A0 z!e44-Ik4#rYH4zi1G^&-`~9;IsaFIS3aQaDwt{T_`{V&Q5;i2ZjI_e*T>X z&od(={`Wp?-`&+wE;Kbm!a@>g9HGXXa21cAa{7QoY7pnf9 z27@9FrG703gCMR-`5O&5W%-Q;M_AO~%E1ulFn^;VPS^fU91uofoW literal 0 HcmV?d00001 diff --git a/src/paperless_mail/tests/samples/html.eml.pdf.webp b/src/paperless_mail/tests/samples/html.eml.pdf.webp new file mode 100644 index 0000000000000000000000000000000000000000..b4481efd92e594f4fb8afeeedcc67d1df9e47db1 GIT binary patch literal 6012 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 R1mu8nfxu`qG!lxE{|oGNHG%*D literal 0 HcmV?d00001 diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py index 2bc0fbdad..3da54e364 100644 --- a/src/paperless_mail/tests/test_parsers.py +++ b/src/paperless_mail/tests/test_parsers.py @@ -6,7 +6,6 @@ import pytest from django.test import TestCase from documents.parsers import ParseError from paperless_mail.parsers import MailDocumentParser -from pdfminer.high_level import extract_text class TestParser(TestCase): @@ -217,13 +216,16 @@ class TestParser(TestCase): "message/rfc822", ) + @mock.patch("paperless_mail.parsers.MailDocumentParser.tika_parse") @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf") @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output - def test_parse_html_eml(self, m, n): + def test_parse_html_eml(self, m, n, mock_tika_parse: mock.MagicMock): # Validate parsing returns the expected results + text_expected = "Some Text\nand an embedded image.\n\nSubject: HTML Message\n\nFrom: Name \n\nTo: someone@example.de\n\nAttachments: IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (0.59 MiB)\n\nHTML content: tika return" + mock_tika_parse.return_value = "tika return" + self.parser.parse(os.path.join(self.SAMPLE_FILES, "html.eml"), "message/rfc822") - text_expected = "Some Text\nand an embedded image.\n\nSubject: HTML Message\n\nFrom: Name \n\nTo: someone@example.de\n\nAttachments: IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (0.59 MiB)\n\nHTML content: Some Text\nand an embedded image.\nParagraph unchanged." self.assertEqual(text_expected, self.parser.text) self.assertEqual( datetime.datetime( @@ -265,27 +267,30 @@ class TestParser(TestCase): # Just check if file exists, the unittest for generate_pdf() goes deeper. self.assertTrue(os.path.isfile(self.parser.archive_path)) + @mock.patch("paperless_mail.parsers.parser.from_buffer") @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output - def test_tika_parse(self, m): + def test_tika_parse(self, m, mock_from_buffer: mock.MagicMock): html = '

Some Text

' expected_text = "Some Text" - - tika_server_original = self.parser.tika_server - - # Check if exception is raised when Tika cannot be reached. - with pytest.raises(ParseError): - self.parser.tika_server = "" - self.parser.tika_parse(html) + mock_from_buffer.return_value = {"content": expected_text} # Check unsuccessful parsing - self.parser.tika_server = tika_server_original - + mock_from_buffer.return_value = {"content": None} parsed = self.parser.tika_parse(None) self.assertEqual("", parsed) # Check successful parsing + mock_from_buffer.return_value = {"content": expected_text} parsed = self.parser.tika_parse(html) self.assertEqual(expected_text, parsed.strip()) + mock_from_buffer.assert_called_with(html, self.parser.tika_server) + + # Check ParseError + def my_side_effect(): + raise Exception("Test") + + mock_from_buffer.side_effect = my_side_effect + self.assertRaises(ParseError, self.parser.tika_parse, html) @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_mail") @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_html") @@ -373,25 +378,31 @@ class TestParser(TestCase): retval = self.parser.generate_pdf_from_mail(mail) self.assertEqual(b"Content", retval) - mock_generate_pdf_from_mail.assert_called_once_with( - self.parser.get_parsed(None), - ) - mock_generate_pdf_from_html.assert_called_once_with( - self.parser.get_parsed(None).html, - self.parser.get_parsed(None).attachments, - ) + mock_mail_to_html.assert_called_once_with(mail) self.assertEqual( - self.parser.gotenberg_server + "/forms/pdfengines/merge", + self.parser.gotenberg_server + "/forms/chromium/convert/html", mock_post.call_args.args[0], ) self.assertEqual({}, mock_post.call_args.kwargs["headers"]) self.assertEqual( - b"Mail Return", - mock_post.call_args.kwargs["files"]["1_mail.pdf"][1].read(), + { + "marginTop": "0.1", + "marginBottom": "0.1", + "marginLeft": "0.1", + "marginRight": "0.1", + "paperWidth": "8.27", + "paperHeight": "11.7", + "scale": "1.0", + }, + mock_post.call_args.kwargs["data"], ) self.assertEqual( - b"HTML Return", - mock_post.call_args.kwargs["files"]["2_html.pdf"][1].read(), + "Testresponse", + mock_post.call_args.kwargs["files"]["html"][1], + ) + self.assertEqual( + "output.css", + mock_post.call_args.kwargs["files"]["css"][0], ) mock_response.raise_for_status.assert_called_once() diff --git a/src/paperless_mail/tests/test_parsers_live.py b/src/paperless_mail/tests/test_parsers_live.py index a0fa1f54d..653388300 100644 --- a/src/paperless_mail/tests/test_parsers_live.py +++ b/src/paperless_mail/tests/test_parsers_live.py @@ -59,6 +59,10 @@ class TestParserLive(TestCase): f"Created Thumbnail {thumb} differs from expected file {expected}", ) + @pytest.mark.skipif( + "TIKA_LIVE" not in os.environ, + reason="No tika server", + ) @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output def test_tika_parse(self, m): html = '

Some Text

' @@ -108,6 +112,28 @@ class TestParserLive(TestCase): ) self.assertEqual(expected, extracted) + @pytest.mark.skipif( + "GOTENBERG_LIVE" not in os.environ, + reason="No gotenberg server", + ) + @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output + def test_generate_pdf_from_mail_no_convert(self, m): + mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml")) + + pdf_path = os.path.join(self.parser.tempdir, "html.eml.pdf") + + with open(pdf_path, "wb") as file: + file.write(self.parser.generate_pdf_from_mail(mail)) + file.close() + + extracted = extract_text(pdf_path) + expected = extract_text(os.path.join(self.SAMPLE_FILES, "html.eml.pdf")) + self.assertEqual(expected, extracted) + + @pytest.mark.skipif( + "GOTENBERG_LIVE" not in os.environ, + reason="No gotenberg server", + ) # Only run if convert is available @pytest.mark.skipif( "PAPERLESS_TEST_SKIP_CONVERT" in os.environ, @@ -115,10 +141,9 @@ class TestParserLive(TestCase): ) @mock.patch("documents.loggers.LoggingMixin.log") # Disable log output def test_generate_pdf_from_mail(self, m): - # TODO mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml")) - pdf_path = os.path.join(self.parser.tempdir, "test_generate_pdf_from_mail.pdf") + pdf_path = os.path.join(self.parser.tempdir, "html.eml.pdf") with open(pdf_path, "wb") as file: file.write(self.parser.generate_pdf_from_mail(mail)) @@ -126,7 +151,7 @@ class TestParserLive(TestCase): converted = os.path.join( self.parser.tempdir, - "test_generate_pdf_from_mail.webp", + "html.eml.pdf.webp", ) run_convert( density=300, @@ -143,8 +168,8 @@ class TestParserLive(TestCase): thumb_hash = self.hashfile(converted) # The created pdf is not reproducible. But the converted image should always look the same. - expected_hash = ( - "8734a3f0a567979343824e468cd737bf29c02086bbfd8773e94feb986968ad32" + expected_hash = self.hashfile( + os.path.join(self.SAMPLE_FILES, "html.eml.pdf.webp"), ) self.assertEqual( thumb_hash, @@ -174,14 +199,14 @@ class TestParserLive(TestCase): ] result = self.parser.generate_pdf_from_html(html, attachments) - pdf_path = os.path.join(self.parser.tempdir, "test_generate_pdf_from_html.pdf") + pdf_path = os.path.join(self.parser.tempdir, "sample.html.pdf") with open(pdf_path, "wb") as file: file.write(result) file.close() extracted = extract_text(pdf_path) - expected = "Some Text\n\n This image should not be shown.\n\nand an embedded image.\n\nParagraph unchanged.\n\n\x0c" + expected = extract_text(os.path.join(self.SAMPLE_FILES, "sample.html.pdf")) self.assertEqual(expected, extracted) @pytest.mark.skipif( From b68906b14ed89832705397b6822cf4001de87626 Mon Sep 17 00:00:00 2001 From: phail Date: Sun, 13 Nov 2022 22:49:52 +0100 Subject: [PATCH 042/231] merge pipfile --- Pipfile.lock | 180 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 105 insertions(+), 75 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index b6d73906f..d40977c95 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "9fefc737155e789ced61b41750b4273c7780ac7801c50cf36dc5925be3b85783" + "sha256": "a9410a1269e5129c9114fde990a0e4a5367931093c5b7290051c3602aab61557" }, "pipfile-spec": 6, "requires": {}, @@ -109,6 +109,14 @@ ], "version": "==3.6.4.0" }, + "bleach": { + "hashes": [ + "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a", + "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c" + ], + "index": "pypi", + "version": "==5.0.1" + }, "celery": { "extras": [ "redis" @@ -276,36 +284,35 @@ }, "cryptography": { "hashes": [ - "sha256:0297ffc478bdd237f5ca3a7dc96fc0d315670bfa099c04dc3a4a2172008a405a", - "sha256:10d1f29d6292fc95acb597bacefd5b9e812099d75a6469004fd38ba5471a977f", - "sha256:16fa61e7481f4b77ef53991075de29fc5bacb582a1244046d2e8b4bb72ef66d0", - "sha256:194044c6b89a2f9f169df475cc167f6157eb9151cc69af8a2a163481d45cc407", - "sha256:1db3d807a14931fa317f96435695d9ec386be7b84b618cc61cfa5d08b0ae33d7", - "sha256:3261725c0ef84e7592597606f6583385fed2a5ec3909f43bc475ade9729a41d6", - "sha256:3b72c360427889b40f36dc214630e688c2fe03e16c162ef0aa41da7ab1455153", - "sha256:3e3a2599e640927089f932295a9a247fc40a5bdf69b0484532f530471a382750", - "sha256:3fc26e22840b77326a764ceb5f02ca2d342305fba08f002a8c1f139540cdfaad", - "sha256:5067ee7f2bce36b11d0e334abcd1ccf8c541fc0bbdaf57cdd511fdee53e879b6", - "sha256:52e7bee800ec869b4031093875279f1ff2ed12c1e2f74923e8f49c916afd1d3b", - "sha256:64760ba5331e3f1794d0bcaabc0d0c39e8c60bf67d09c93dc0e54189dfd7cfe5", - "sha256:765fa194a0f3372d83005ab83ab35d7c5526c4e22951e46059b8ac678b44fa5a", - "sha256:79473cf8a5cbc471979bd9378c9f425384980fcf2ab6534b18ed7d0d9843987d", - "sha256:896dd3a66959d3a5ddcfc140a53391f69ff1e8f25d93f0e2e7830c6de90ceb9d", - "sha256:89ed49784ba88c221756ff4d4755dbc03b3c8d2c5103f6d6b4f83a0fb1e85294", - "sha256:ac7e48f7e7261207d750fa7e55eac2d45f720027d5703cd9007e9b37bbb59ac0", - "sha256:ad7353f6ddf285aeadfaf79e5a6829110106ff8189391704c1d8801aa0bae45a", - "sha256:b0163a849b6f315bf52815e238bc2b2346604413fa7c1601eea84bcddb5fb9ac", - "sha256:b6c9b706316d7b5a137c35e14f4103e2115b088c412140fdbd5f87c73284df61", - "sha256:c2e5856248a416767322c8668ef1845ad46ee62629266f84a8f007a317141013", - "sha256:ca9f6784ea96b55ff41708b92c3f6aeaebde4c560308e5fbbd3173fbc466e94e", - "sha256:d1a5bd52d684e49a36582193e0b89ff267704cd4025abefb9e26803adeb3e5fb", - "sha256:d3971e2749a723e9084dd507584e2a2761f78ad2c638aa31e80bc7a15c9db4f9", - "sha256:d4ef6cc305394ed669d4d9eebf10d3a101059bdcf2669c366ec1d14e4fb227bd", - "sha256:d9e69ae01f99abe6ad646947bba8941e896cb3aa805be2597a0400e0764b5818" + "sha256:068147f32fa662c81aebab95c74679b401b12b57494872886eb5c1139250ec5d", + "sha256:06fc3cc7b6f6cca87bd56ec80a580c88f1da5306f505876a71c8cfa7050257dd", + "sha256:25c1d1f19729fb09d42e06b4bf9895212292cb27bb50229f5aa64d039ab29146", + "sha256:402852a0aea73833d982cabb6d0c3bb582c15483d29fb7085ef2c42bfa7e38d7", + "sha256:4e269dcd9b102c5a3d72be3c45d8ce20377b8076a43cbed6f660a1afe365e436", + "sha256:5419a127426084933076132d317911e3c6eb77568a1ce23c3ac1e12d111e61e0", + "sha256:554bec92ee7d1e9d10ded2f7e92a5d70c1f74ba9524947c0ba0c850c7b011828", + "sha256:5e89468fbd2fcd733b5899333bc54d0d06c80e04cd23d8c6f3e0542358c6060b", + "sha256:65535bc550b70bd6271984d9863a37741352b4aad6fb1b3344a54e6950249b55", + "sha256:6ab9516b85bebe7aa83f309bacc5f44a61eeb90d0b4ec125d2d003ce41932d36", + "sha256:6addc3b6d593cd980989261dc1cce38263c76954d758c3c94de51f1e010c9a50", + "sha256:728f2694fa743a996d7784a6194da430f197d5c58e2f4e278612b359f455e4a2", + "sha256:785e4056b5a8b28f05a533fab69febf5004458e20dad7e2e13a3120d8ecec75a", + "sha256:78cf5eefac2b52c10398a42765bfa981ce2372cbc0457e6bf9658f41ec3c41d8", + "sha256:7f836217000342d448e1c9a342e9163149e45d5b5eca76a30e84503a5a96cab0", + "sha256:8d41a46251bf0634e21fac50ffd643216ccecfaf3701a063257fe0b2be1b6548", + "sha256:984fe150f350a3c91e84de405fe49e688aa6092b3525f407a18b9646f6612320", + "sha256:9b24bcff7853ed18a63cfb0c2b008936a9554af24af2fb146e16d8e1aed75748", + "sha256:b1b35d9d3a65542ed2e9d90115dfd16bbc027b3f07ee3304fc83580f26e43249", + "sha256:b1b52c9e5f8aa2b802d48bd693190341fae201ea51c7a167d69fc48b60e8a959", + "sha256:bbf203f1a814007ce24bd4d51362991d5cb90ba0c177a9c08825f2cc304d871f", + "sha256:be243c7e2bfcf6cc4cb350c0d5cdf15ca6383bbcb2a8ef51d3c9411a9d4386f0", + "sha256:bfbe6ee19615b07a98b1d2287d6a6073f734735b49ee45b11324d85efc4d5cbd", + "sha256:c46837ea467ed1efea562bbeb543994c2d1f6e800785bd5a2c98bc096f5cb220", + "sha256:dfb4f4dd568de1b6af9f4cda334adf7d72cf5bc052516e1b2608b683375dd95c", + "sha256:ed7b00096790213e09eb11c97cc6e2b757f15f3d2f85833cd2d3ec3fe37c1722" ], - "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==38.0.1" + "version": "==38.0.3" }, "daphne": { "hashes": [ @@ -839,43 +846,43 @@ }, "pikepdf": { "hashes": [ - "sha256:053911bc19fbc987ff32e8e2836693480bef4c400785f700e8645729aecc7dae", - "sha256:0b10914b14667b7de19c9b27437cd798afee82690e16763965c7f7a2ab4da90a", - "sha256:0bed47afb90c78e2262e5b2e0d4722245b50c28bdaa317bdd39c4ef125d59a2c", - "sha256:0e51db2d246d277e3b11f3341b42c737deea60a49c3d8666388bff466fe1c4d0", - "sha256:3b9037377d9ca2b91c47b50ef9edb2fd295b0bf963ba14ee732da52006600677", - "sha256:475ef831d47e0aacd1bbfc366090c645bdc881bfdcf682f2a789860f645a1bf1", - "sha256:5233f8f1dee1bed95379c1b67af926725fe6d8ba210c587406f51a6bae651132", - "sha256:52fda5f8b730489a10cc492249465d52b4f190f7eb9b6c0cf80e49d5be3d8652", - "sha256:6129a5277f850ae6cdfd2cfff7e2c4a0b24618aee942a99763c84791dfbbd067", - "sha256:73281beedc1c234d50fe11f8beb55cc5ea2d43625ad7aa88dcdea54ef019939c", - "sha256:7e7ef427346a8324c32e9e2dbd6d10b0c9acaeb30d646223418206ff33594d7e", - "sha256:8338786c9912703dee8a501c1dd3b5e1065c22628cc4f781a548e378ae0f9f0c", - "sha256:8ba102fe535677c54c2e6cca65c9e3742ff7abb03934590a06c77a17c9e86827", - "sha256:91faf319bae1f7a9a0665b1622680296e6ec351497e8b3da1f7b83c8c2fbbc9c", - "sha256:93450025948474b656a6bef0f64c91f5d2f18b4234d7470c4bb8b77e8eb36dc4", - "sha256:972c6a21c9e49fc53a36b9550616b9240fc3291e07990db0e93d2ea4bfd7f5cd", - "sha256:9b403d7b24a09a090ebeb7760890c5386c515b86a6cc6d4f9c7b36eefe94b52f", - "sha256:9b94b0bb3adf6be2407aaca8693bb1589fa5021c019ac05b1a87db299feefebe", - "sha256:a0645e34902fe51205048e982f30e78e2b1fe767203988dd4b1395f6326cc4d9", - "sha256:a7e6f4ac418092a48dbd1809905edd5c6640f271c49981558a1c3da3753c0524", - "sha256:ae5aa1fd18373fd96b8ea6610d78d1c12a43e105291e45ceaaa54637e76a6929", - "sha256:b6066f3bcdef27e255be8f3b6e299ec4c04b50688872f6cabe8e27908574563c", - "sha256:ba4db2e76fe4292c3ea47e39acb72f417e7b31f4fc594c91426b88e6e01d4940", - "sha256:bb7d56298d74e307f0ace8d8e02eb9cd2a1421993542566eb605367aa4886d58", - "sha256:bf5b505b4ac50332eb550ae61cf64854f774f5ddb10339f5dd8b20cfa44fa8e9", - "sha256:c892bfd06b69ab26732daa53c2d85f864bff0a9422b0c03004cfb58797406b2a", - "sha256:c9c46bcae66c8ea181aa3fd961e98b46bc656e40cc33df9794c63a0c84d719b2", - "sha256:cff08868ee479ffbaa64fb425260ddce14bffbc21bdd2a3b3de941589abab741", - "sha256:dba7ad05626a0768708c1dfa11b28b8461c6750994159a06f2ac58e0045a9685", - "sha256:e089f720703d5e8c419634b08fad466d540d081005e41b6382afd7728d327029", - "sha256:f02c4f10a645f43bcde681b31d90f6313d8edce3480729cc6d78c5411f3e9772", - "sha256:f0ff1e4bfbafbeea902a0bfc23e8017443a3be485d02c92cd7dab9c16d50543c", - "sha256:f4539bc4a586ec8dce7ceba474be726ca64135c48ad61c47dfba98139a7aebfb", - "sha256:fa397d5ee36f357f1ba60103004c32befc9aa7e3143ef3a9fbf6e3686b2fed99" + "sha256:0207442d9b943efec7eb07ea5b3f138d90cc61429a3c3243902ac909cb508fb2", + "sha256:0709832cc49ef51f004975e6e9bdc6daee8a8d68de621d428f13c95a83952e7f", + "sha256:07448689cc4c1e249e26ae694a2060210948e61035356cca3a5b8baf3a6a147d", + "sha256:0bbf45e702bb0556d705e1a4b5da391921e024cc1e6823675f2ea200acec1199", + "sha256:1376f3f4b1c34ac089a644af2e499ca713e4e4ec17035362350c0ec78ca6286e", + "sha256:15725f1bf572abb9a675f61874da66dc22144e74f374f7e8d023558e8c9c3f38", + "sha256:18383d8e6a620c52974b75034ad99c423f80468a434b52de456bb74d5ab51360", + "sha256:1dedbb95bb2c67d6923c91cdcd5a92703d10e4c4825d85cd7b8b474039978741", + "sha256:2035b39d2e5c97b6d9ede632f514403888e3f47d2b1e8b69b98420766ccb898b", + "sha256:2dd952e678dfc523f2c481c3d0a29b9823f07024f73dea7e9c03d2ac6592a61c", + "sha256:3d06dabf16592bb7975e1124000212c3c3bab1e97ed3f7c6534ea92efe9b621a", + "sha256:40999c3f48e5d0259662f6f708694d3ace43b01b4a2a197cfed5cf230557b116", + "sha256:46c7c9a7128d1751eedbe769dbc6c0a7983eccded74fd7d1e236d83a50c9cc58", + "sha256:529d4d099eecbdaa3e06490a032954ce96feae2596c1ea22f961dbf791444a3c", + "sha256:5887799a29510b53c7015b05d7276ee2e0f0ff1d782c75c3a3d1d9f68013665e", + "sha256:5c2de883986ef25e2e9b8ded8e5c285cb390950742164ce1bf116158009cd9c9", + "sha256:62a8c05876b9c7af4cad0ba9a8f22c77775bcceb118c35d682735955f5485297", + "sha256:6df4510606546c9c995afe3f799c506fe90798602b0628affffb7e1516fa1062", + "sha256:746897cbfc0c200de6be428a4e92dee72d0e03e1ff00d56006ee94fb59be199d", + "sha256:801100d8b4b885a203e76bc7266296f909944d621e6a0ac480fa2a0a0e0b1bb4", + "sha256:823f8b1cbad1182709d81afa32c23ac37b9c8ed33bdbc2b41f674be9420dc108", + "sha256:94057ca79525ba5eb5cc9c42337364f0e9e5f239887c0457dffb4ba3e6ac0187", + "sha256:9b1ba16cc5eb243c5e684c220752358a8e1e28a4e02ecdf2c3d24646f29c623f", + "sha256:9c9d75bb77dfe9b6f8915bc5339cfb0db427c3cb7cd75aa419b1da3c82f122ed", + "sha256:a0b78071d5fcd6b2288da469e89c030475095349dd57d82f5c40c37600d02e14", + "sha256:a1679c7d5b374895b6196784a75b8122ca0bb9248f5d97cd5ed77c569e264e88", + "sha256:ab8d610ca732a6369479605817cc55ee6f62d5b105ffe7e3749c3785c383631e", + "sha256:aff2ce52f0ab4ea8a1fbe57b06982b9fa9f997dd6bbec4b141091a1e71145a63", + "sha256:bc9b625f5ed454f445bf5012682b24d334adc9f853d41e44cfee7c52ddf92666", + "sha256:e0e66d49f8a85a4e0f915d42471643a5020bcdbef02586e49328ed417c13326a", + "sha256:e3dbcecc145d46d37738a407e0ddcce7cfb76d3e116ab3ba9c80f4dd14e71a3d", + "sha256:e99a90279a8254fa149d56cd307f94908c7844b2b8b42b61d241259804e40643", + "sha256:efc497cd01c55c5dbdd8a81766e317f44f728b3ceb65d7b6c6a064772c60e1c7", + "sha256:f35cecdab44cb01377e93a60a475bf4437854d98cb94379fcd65c6daa1c9a37e" ], "index": "pypi", - "version": "==6.2.2" + "version": "==6.2.4" }, "pillow": { "hashes": [ @@ -1624,7 +1631,7 @@ "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" ], - "markers": "python_version >= '3.7'", + "markers": "python_version < '3.10'", "version": "==4.4.0" }, "tzdata": { @@ -1766,6 +1773,13 @@ ], "version": "==0.2.5" }, + "webencodings": { + "hashes": [ + "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", + "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" + ], + "version": "==0.5.1" + }, "websockets": { "hashes": [ "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41", @@ -2222,6 +2236,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.4.1" }, + "importlib-metadata": { + "hashes": [ + "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab", + "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43" + ], + "markers": "python_version < '3.10'", + "version": "==5.0.0" + }, "iniconfig": { "hashes": [ "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", @@ -2346,19 +2368,19 @@ }, "pathspec": { "hashes": [ - "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93", - "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d" + "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5", + "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0" ], "markers": "python_version >= '3.7'", - "version": "==0.10.1" + "version": "==0.10.2" }, "platformdirs": { "hashes": [ - "sha256:0cb405749187a194f444c25c82ef7225232f11564721eabffc6ec70df83b11cb", - "sha256:6e52c21afff35cb659c6e52d8b4d61b9bd544557180440538f255d9382c8cbe0" + "sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7", + "sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10" ], "markers": "python_version >= '3.7'", - "version": "==2.5.3" + "version": "==2.5.4" }, "pluggy": { "hashes": [ @@ -2673,7 +2695,7 @@ "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" ], - "markers": "python_version >= '3.7'", + "markers": "python_version < '3.10'", "version": "==4.4.0" }, "urllib3": { @@ -2686,11 +2708,19 @@ }, "virtualenv": { "hashes": [ - "sha256:186ca84254abcbde98180fd17092f9628c5fe742273c02724972a1d8a2035108", - "sha256:530b850b523c6449406dfba859d6345e48ef19b8439606c5d74d7d3c9e14d76e" + "sha256:8691e3ff9387f743e00f6bb20f70121f5e4f596cae754531f2b3b3a1b1ac696e", + "sha256:efd66b00386fdb7dbe4822d172303f40cd05e50e01740b19ea42425cbe653e29" ], "markers": "python_version >= '3.6'", - "version": "==20.16.6" + "version": "==20.16.7" + }, + "zipp": { + "hashes": [ + "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1", + "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8" + ], + "markers": "python_version < '3.9'", + "version": "==3.10.0" } } } From e3c1bde79334940bb70d8ed5235de85bbafc15ca Mon Sep 17 00:00:00 2001 From: phail Date: Sun, 20 Nov 2022 12:06:35 +0100 Subject: [PATCH 043/231] remove log mocking, replace pytest raises, use humanfriendly --- src/paperless_mail/parsers.py | 14 ++--- .../tests/samples/html.eml.html | 2 +- src/paperless_mail/tests/samples/html.eml.pdf | Bin 22907 -> 23054 bytes .../tests/samples/html.eml.pdf.webp | Bin 6012 -> 6098 bytes src/paperless_mail/tests/test_parsers.py | 53 ++++++++++-------- src/paperless_mail/tests/test_parsers_live.py | 37 +++++------- 6 files changed, 51 insertions(+), 55 deletions(-) diff --git a/src/paperless_mail/parsers.py b/src/paperless_mail/parsers.py index a845c3157..da0cf96b9 100644 --- a/src/paperless_mail/parsers.py +++ b/src/paperless_mail/parsers.py @@ -10,6 +10,7 @@ from django.conf import settings from documents.parsers import DocumentParser from documents.parsers import make_thumbnail_from_pdf from documents.parsers import ParseError +from humanfriendly import format_size from imap_tools import MailMessage from tika import parser @@ -125,10 +126,8 @@ class MailDocumentParser(DocumentParser): if len(mail.attachments) >= 1: att = [] for a in mail.attachments: - if a.size >= 1024 * 600: - att.append(f"{a.filename} ({(a.size / 1024 / 1024):.2f} MiB)") - else: - att.append(f"{a.filename} ({(a.size / 1024):.2f} KiB)") + att.append(f"{a.filename} ({format_size(a.size, binary=True)})") + self.text += f"Attachments: {', '.join(att)}\n\n" if mail.html != "": @@ -191,7 +190,7 @@ class MailDocumentParser(DocumentParser): return pdf_path @staticmethod - def mail_to_html(mail) -> StringIO: + def mail_to_html(mail: MailMessage) -> StringIO: data = {} def clean_html(text: str): @@ -228,10 +227,7 @@ class MailDocumentParser(DocumentParser): att = [] for a in mail.attachments: - if a.size >= 1024 * 600: - att.append(f"{a.filename} ({(a.size / 1024 / 1024):.2f} MiB)") - else: - att.append(f"{a.filename} ({(a.size / 1024):.2f} KiB)") + att.append(f"{a.filename} ({format_size(a.size, binary=True)})") data["attachments"] = clean_html(", ".join(att)) if data["attachments"] != "": data["attachments_label"] = "Attachments" diff --git a/src/paperless_mail/tests/samples/html.eml.html b/src/paperless_mail/tests/samples/html.eml.html index fbc4f9460..a73be6f95 100644 --- a/src/paperless_mail/tests/samples/html.eml.html +++ b/src/paperless_mail/tests/samples/html.eml.html @@ -30,7 +30,7 @@
Attachments
-
IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (0.59 MiB)
+
IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (600.24 KiB)
diff --git a/src/paperless_mail/tests/samples/html.eml.pdf b/src/paperless_mail/tests/samples/html.eml.pdf index 058988f66172a822ab2fcfd62daeb780a4332aab..de4aeb03840290f980bfac3e99d4b50c8264d785 100644 GIT binary patch delta 11640 zcmaiaWl$Ymv}F?9-Q6MB72x6ocPF@eaJjg2u%N+7aDqc{cL)x_65O2-Jh;Pr^JdvRT2f?_&d;$Xev=9L(7f%w=%W4unE*Ou1fB=LR1_N^m zfdAtV0^>?rd71Evk1xsP6+d9u-k^)wUC)>p9!^M93NFe~yJ%0Du>sLC^pW<>7@hz4 z)5<4~R{uI`@Zi@ug{$hhOmKdMs6lFA0zGP=Xm&J*@G4)lJ7JSpk_e6Z3)`_@PU$!o z!aRbBXit#}kVSMJVy1Y|-T0aVo8ln+IjUQz=ZnJtt)vU9r50gh3^Kq|Mx~M%DNcgn zpCXmr6BtZ0IUzB**YvH#Vn4Fcp7^BSt)+RseJOF$ZpH~VW^RMX|8qr+l}(kFQg^T1 z!dMONHKxH<%~Rd(!%AK>dg(^{a%B0#K;xkY`_BOTaW1|wy*W9GWV}hUX$fED%CxW$ z`6$~c5|u41ZT(R4%2;67Djq%GjV*44L>yzb2#KX(91j~K{lnKFY7Jqe0#$@p1?i`_ z{zzz%%og)#9ezcg4ZWp4nP8d_Og?kc3WK@u_zD)X+VX_8VFLDJyvf*V4(DYnCQ~ah zR_ZWY70JFYOf!fnSE&RyG*+fI-)9vVwIkpMev@g$Q3Gn;))@c;RCqTh=^gB*9-2m- zX_rSBpin*8mig}ReDloo`gU8w8#`&FNWnjQs6Xlw^RG4Zwn*>1QL`l#OFGgu z>oJX=YotPwv}LItF%&NfDF>z~?UG*;Ai+ga7&EpBli}k^s>u@!g{hh=+F(gNuL(MG zYhRCkIFb{zbrbj=l3Mn0w|eI)l}>zb_Mrlens;QnKTXeCu+S!pUAJKYyGlGmNO+xQ`z4i7kJ(!Sk2fvyM!&N}p z+q`P*1g-pOGstc4#^R64H6*pgoMzFqT=4HiKMrelReuSdu^5V_ncmf@2|dK z!ba#+6&s8%g{j)m8kA%M`pR73@act75lP^C{cF$3mmDau7ROyll;|{#aNRYUQM>1& zLo#xj-LK3+&v}n8*;k3r>Rgd5@epAG5cDLqS5$}sJTTs*J7PxQwSsRQ&zgFAsZ|iY z-A;shdLF_)YC3s(lvN4Lge+}?0RdXaI5t`;<2X=Wm6j|rlu0%sar~=oyk$NAWc1RxVup^Je z)GsB&DAmHJ>{j1rR#Jb7Ekl6nVnlBDhrq%&Gwo z!#~>aT^@hp;6ffkWQ&zqOZ=Pm?Ij>w1c|~vcHK$+8`Qu%!K*nlVB!S5NF|2C>%c1% z^`rNR<}&Af_wHi;NtO>@(Oj>CSuu`7g+^e5iz?1$xiN(s+ixkMRe0)o}1 zgxx=6c!nH=6R)n+a*w#b`#-;MX%|kBWpIA@&cf+sFu>~N6dJ#>PjzMbSXFnDb`j5e z&4OR1nd1-K_1=AtJx@{957!^~Ev6YE^?Gram;)|=m+*_@RG>WuEqi04AVR=JAs_Jz z0VzRpXD7w%DEq#NoPVEtih{~xsan(p7>x=w?x@Q&*NP!7xR{?RKsP^iL>dZhMkYZd3|7yyf$nA-@`*9?|NCx&%07_m(C|Sg* ztA1ip>>0ZqX3oQx!ruPz`hG1}RFk-ZfZ)_dEilWb$8timvADe>yH@#dCalCydfLbZ z*$ZRhRq3ER%Vzhdmq2l1Wr5J1w3|H5WE>`K$Pg|hGlnsL$QF`7n8Y%ar1LJLr!Bl- zUBw27&$ct6*{iyul94G1z!+jY)2()1x&=^ry`DUqo|#w!a-@7Q<-!WH>O>g{PoU;f zM+A%aL3$h9($9!=zvgP3qXNlte|5~$-`V-Qb*$OX-5s^eI$t*g&P@kxr$;=rydJ&f z7pCFe*ZPw%*@-7uxwn0F)$xpMFocnD>ih=~hwUw+lhS*Asl7_dwVygge zvff$`y&3J9^*-F_PAghJ#}}sVZ9yN>Dp(F7zY{uKBQj`8ki`?(&bD_?DbXP~E&suX z0Faog_IB0SUE7z%_N7>_>*JL9D{Jhregi-Iv9FFkA|4ui8Rt`{Qvc!>sxFz5X`Zm< zy2>^`5wcahv5&M5MHrJ=68&()SIPwN!r6_9HUgCfg#sI+Ir@0>=ovom$KE#}5$uwAfvXU@CDExS zQD>UZudo~?i`^a_c*z>cba}xs*@4p;#xc*mOs6}f$B*5x&2A`N(`iu<<-iOS%0(xs zFj$o*uY`ETMhp(?_r1G$;5SlLrS-V~{mLy$7~>U%-0YO*&>Z*-s`r9HkBr=fm|fy7 zZryOu^+8{Q{)?3c!UhM{3EgG$toNlC4;)Xm)H^bH<2%E!b*Zu2cVk28gn4b>2tGyj z$ehggD5ip$xfn=Q)ykxDUxV?1_x>7T?p1FGuLQ9kd>DD*A zr9Ej{frZqY6a2L@{NchnKdlaJ+$fLVeB{9A$}1LVIrv1 z>YX6IiR`t)22?}4^wz6pT-fje{rCA!WwA-hHp1;}oq|pb)`hUwu7aKKx{Qt(fAJ$=xf*tqQ2>YH18KQ|KA zQNJ`?25zT~F+ z$=&dc51ZR<{<~Q;0-yVQ{ZD$Q@1Y-wy>oFN=KD>sDEP}wZ1CsYb!~#vcNzN9CAJ3t%`UDBAPA3`DL3dD_U0~Pmbw1ex6^Hyq_0#6N+I?xLek~{Bn`XGd}jDvZz-zV z4NH6l)yv6I-imJQ0aCgHW_yX1n;O`Ptv#AUzcib=H>G7TcHiyElwhUW!&f9Q;|tfL%&z~YL@)~a zMnFmJ9F$1xU5-@L^adRMjxum?<0rp&Xm9UT;ASs_DSG&@J79)yOz4_AlpEiRh`l91 zcoFOkE3^$I zJi^O;2-;&r`2nXcvR44Ju3HUT^3O0Xb_mKsUpF0yb&&(Rw)+iqdD!d???u%IA^zp@ z)`+I2H(jvxMu2X8>&Iuw90MwI8kXgBdm?9#H%`uVsR#CT63)+`IKriLtFU zOKg9c_N*4Ef!sjzZzjaUSKySEEOKGA>yj^dzae>(@LQMiC3w8FL+A;bo$3i2v0Z$| zdh;}e_y8zI3{aNFK7UM6z&2+V@z*Zjp4Ak=&P%iFKm=&=?{zh*?_q z)p7Gcpopz*Av?((qo#q+MlG@>GZy5GKXUx*ceeujFK*r6RmL55AGdGPuUlM#uAlb( zd~c%b>TAg6mSPT+HRqx)^{lK!((v;oQGenYa$f^ymp+oU5>#9)NgXRx3oG;1nQk5p zz(z1qVt(3g_G9q%-4pxWaTvx0RpuqnuUZ?am*+NB6Dk+=GRO%ni1^m=hJr~)b+gN} z%fAfd?&O7G)@pv4?BmA`gI0qJW+(^v{56~|uXvSFGfUo*H>AE*tL+>U$H9yBF$kOSj@2U94;cHhN?R@6!qbxJ%7mF$Et% z3!mk;(MY%~)q|?$gU1w@T#$jIZ@kqf2bM22i%49I3$(J9{C@SJjf4Fv9E7;F%tm2} zply)UnNY-9eNPRK;Ys7b`z0cx*nF-negj}?$9kzBlYHWkPgc9A*U4fytU^;B-)m9l@EQl@iD^p)iN#`WnX_24^Vb6EP$E>nB3&KZ7d%y?ei9wcnmT^A#! zKk6mXx7~e|z@XcHAIRx}M@=Gy90%{BO5*|QTX;bWcu4Noj`cQWSts}u9!FIEiUOEp z80WHPv1VKPwrBc8nRO#dwcOgG%}S;#R=uOesq$X$J&07mGwHH(J7S0x)oaN$YT1^4hmfUS1Xx|>3+6i7Uv&4V=x zTxL2SO@x!>?RGW%b4|_W`JUlsXK`^c4K7_(YL7fte(ZIR(qtKUK8|1zl@Hur4+UTy zd!f1INJIq~MY8v)<;GR~3B570?g}j2zVg%d)sa&)%FvKpp+n5XJ7$aJY3{s)pvc>ce2y4D6*ghn+ zED&-_k*N#$m@yyH$alsK`NBCG@toS=c-}P(#f6qEYGRj1t5f7m(&(!#S{>b z$qkt5fs=%#x7E^R5^c%h#l3q*MQx+`ws---;~&DNV+=}*UE{4}>ofxp$5gWf z$-UK-97J#i4eA1btNfZY;68%;s_aeK}u_@hO=-8woE&9KUKfghuX1d zJ_p@Ulo_0Wz~6o> zbbS~+>H4)+3Sip_ui)pmQ|SjAa;mqSCBog>xWSY@3ZEXpMh~$>V8tYuRcHpjV2cr& zQyFytv!IH-q1K0rhMHS9i@NVB;bA2@0=DF^>iBsgPGLHBs2139My~x7ZDFM~91j2X zXsYwtDbp)=-E#$_h&UTI9Q!6nm%`t-QhS=EQx zAEHM>q|ttoW7FXMmv)a&_T*oY6R;khNE?eRo(VI$Lc6!)*ZUt6BbRIvh*1r|7r8YU zjD|M7{8^P305)Z~f+>b$pX< zo#R3p=R%sKjM{H*eJQ?x3fIGRE|KRj`!bJT_4w@H+Xbhn~p z#Y%1Y64ZEqV=?=WM%+@kl}B_WBO5l`ax#7zaS~)GVV2EGZPy@tLDb&Ku`!ozhg$pc z4c(4qzS}`~Qn=%Z@u*aBh<=Xvhv~ha0zg{w&^yh*FnHe&*l=}Y2x@4JZbvVxmR5>qcAqkG0fe?oV-C^-af#b2mL`Jeh?C3a1*8x!Xxdf&6 zLSSG5)7fN|?syI{616^Dp&pUmR92CkbL;#EU!1w6lgzkBpNjBr#ST2n2Jx;%a9kx{ zJH9<^Usq15T#n;d4cxQxR&^PhP6Z4Z{Wzl}soa=OB%7X8GeRCGY&uJ&m2Cg9ubCq2 z9i@@{$$Y)j3Ug;pQH6euIY0!1Y)B~HX3iMg6qW@!&;R_ko1*xM%Tl_1qJFT5#95@- z{ZyuScfRfcciDELj5MB7Mg=908>@&i0Kh_d8nN&&3y(hw)bw0XOB zSMw8fQVLdUpP<(36akc3WZ(GpOgPgxTEW4=_FEZOdU5$x2L+Wk)0p}d2qhDlba#Ei zV3TruSj1#=JV)kPKxP?JMF91w887$q&(C>v`8df(_=5C);YC+dxk3nMUybogY4?)D zV#K3nrqQUJ!tL>$)Bw?bw&Tg5JpT!PGNM#tlJ6RQghn{CMu$ahNm#hfb1NgvHDnG& z&F?w!%iv}6=dBo{VS;S?g{%?r()EY}lp1|JrAf<1zqvd=*Y03WIj$4jMT-uz+$(L- znWS>4B-%vv7co^!`Rjj8EK{;K%c@sd#i$xS>1jL5*&w*3xB;|pWFAynUv))vDP#>Q zvuqXR)7oa{O+^XM`@TlZqfLCK9FkZ-B(6&f3aZ#$2oEw?EM)A@OIF(EG=Wu*2&OHt zO|h|<`i4-CEqpn#i6{H5rX|R*$Vpyd8^0_;gP<@PgKz(q#~>j!(c^;=Y|TDMO3PB) zLEVxMozP+i8UjQM?BGh`D<+D#C3aiN?85Cz$^g2n&(uzi7pPFfEqhf$4{FF3<-&{=xuJ+Y0bn5AM zkt@_1=(N@CO=P@gHK~V=lZ&hATQZ07XB4@}*|5HZ6x{!|eMg@~KbA;5SzIs!uc+^~ z)qGdv$#Ja}>{#BKV1h0jQ*Zo{XuP2SZMSlOK1<9a#(jt_hCDpTih`yHR%3V^{myH7wwrLQFR)1yj;Z392HAKo41t`F%Owf~`hg z7Wv6^@b2aWiDP(`WBLw?Lt{=n*#0%75yrv%mK%?bYuT}<7kap~$EgIw>Kt{pN`BJ=B44_kr8=(_) zN{7o0R}7gr^WqcUGS<=Jg`f>TV~RXyyJ=XPZmHFNg=xWsE#!>4+JA}`??WyQGdbq}2Q=T_@%2a$^fQ>a;#`)UYZz}_Z$_h|y^{h}< zae8anfMeC5=eGHwSzgryktenM?t{ymhJC4g=zA+>Hg2g ziqF9ZoFxd?H!*R5d!mE(p$}XJ!@w0aaPs z3XAzp#ycc`wSJmv$6OHj9E)j&Z4WdlnCIWEs^A&_N$K4&<;_@xwem00JgQ$5+SYLI zDc;w1R(7hJ+Xxtat~_x_l_~o9&LQ1iKRIw2F8$5*>%F#BnRZjji`v(4Jy!b_E5WC` zUfBWFo8NeWX*9W|6($-j*^YYkjom%elz!`SO-@3B9z`OhK_7kqOSiip?XM1Xt89P4 zMHNV+g~{a6@0^@N+4N6JP|+N#B_tD@M18tCyYH+m;TniP(~grVu~nb7E{!DB4nHc3 zcb{w88GV>M(OMl|+k>@|TU*TKPgK+gC{lL6!r*h#>#!U7^tP;N+I>}{`ti7JZtZ+A zJJZPhX@2o;P@v5X*k7nP3AkGDlNG%`^m}4@<`cB`+EsDx^mqus)t*<+?aSrd%sV(GDODSYAAHw1^r50@x>D6g4p0Mp059vY(Cj*rn3iJAKu z?|EVZP(rgT#Ry7OXb~zq&}{7-W&G6X4YEaP@+lUh6JM}%Bd=D<;+|FAG3_?}^Gib} zs*p7ySH6v%vovIBE?}C--VYlNoKndcXIAh^D;<|Yo}XUGaHE`CyDrIikFgMNCG6MP zF;8tc#MaRD2w-wG?=`$^QX>0W*?N%_!izK^&$ia6SdFa1_XVctcHj5P@J5!D}%dOTm{IGDTugfsk6TNACYjjI+3!obYv-dF3X$+U7gz86HHs{}y z>uz2LQ5_~I1~FhI)_I_d&@@xdkGBU+B&;0>kvt3P^%6Q&1~_d%mlj7-%un%)KJR;O zXv>eAWGpo($I6sNvRDMjCrZ*dF=^BvLf*>weG#<-LY0|4%T!o)7CdH!z4%)_tMqjn z&F#K+0=*Msj;-ZI>rv=;5)k||{3wD?EH`*-3j7&AK7EnR(rWnOk#B9RqpqVSt$9zA z`Me+WVKBR7aq-XmsFeW)`Q7YT`XhuR8@g4@O%xW8E2FO47`S!r?1-*~ek;WMF~@z( zI6ee-^3mFF;W_T8u(a3sYP(GoUbChja{!ouf#zy+kT}g<=)QB$kF`)aEbK|suR5Yg zZn`JP;bqUxqDW^x_cFL#-}tqsJ-^3>qCDm$U1^!~`u2^< z0lD}AcQ<*0d8!>&YykvUvKHGdnjghsQuYR#nzAp>_CoM}N0SD{Dz-DHU#SIXqH@2p zZKf{On~1&X;H;K}Ot0dW?OjvRu{Jw{NK5OIFmp5^dD&#SlNwcP+!TyTB`Exa*X4JV zF+wb2YOlt!+vBn5zQ-alTwETZhjiD30D^Pv5%5C;(#aVtKguf$lviyoby3U_^p$*A z=OGNu`jD0%#uG8N+%__X+%_O*T@HSB!|2|WcDkA;UlDiJzL@ST#VPz$ z_^Fsn^|IJl0c)_{|IQhMW%ynUgJoxhmV>O*@o=+$OXt#Y*=>j00!Kt2-fa3b8OeQb z9C#HiMtp>KcPuAQCNK$O9iQ9-TKakYI#v-D7A%gb6F=K3>xux6SEN?leqVZ@Gn%O# zaqB3fOX_+Q`&6zEUSr85gZER%%+wt~O?Ut#q$)qy7-8k1QYXY!ku5PZx1&^XSRcG4 zeho|dbQUJ5u24xfAm4D=Hd0CY^1)>4|LhG*%L;Sj)3EXtFGxc z*Fp!%wvQ@XE*A(0hEW2)5P83{ou?C|{t_(V55kQ}5wC0e>af$HQFCQhHX`6tdV+Hmmi5o@-3RSf}&HZs)scJR3)Wlu8;UquiD~I}999kPX8#5N3DFZ3yctl3ohZ1GIee*h`)Du5H8FdAT3R?MnW0dlLIt7q+$k?4T9Ic{}%v zPiQVrMg9GmjCqpUjr_jKW>=mrdxG`452O(}C?Ndxw4^&9H}29~t3k{pcu=@e@%9A2 zTfj;905vv8+F{dhr^+mZR)0v{?C8?|>PO6&T5CM>=D6Ko(&C1LX-8<7Lal|PEge!gRANKi(zK1WK2VVl6 zF+uktx9IW3E6FG=Oo(Oo+T18pq?RIW*6Fg3&jZKWZV_47vsv4jRDKDCrXG1~8K->a z-Xy8&J9XZjX58nI#@`}qk*ZT5jf{-e^G#jU=cyI!{H(sI%Kh<+L*VwLk$x#P+WT%? zC02E=^SSWTC~LuI#=N{mXlTPy`} zZY4ZhXcD@Hh|XsPpnrzbgVlrm;3tw6zC5plJmcFEMTRB`6m%v;MTYn?k(l^{!a3B! z-l;HahHbM@Y(}^o;jx)vZ?m}9ONw4xu83M~(6JMj!?G#%Psi87*d3TJs3y31ou>n^ zzLzyPA$T9%?Cr`rW3IsJPVV%00ieyd?Hb+6$?|`RUWX=bLHG&+N^*M3M8Xf^p#}ZV zMe9V1{vS6GFh3ZS^z|(Z!2hok&_A=F|3-trd@#tralCwB@V{d`yga=Bj)D1k`2LE) zAh7=x1OBTd5Cp{g7YSGZ3jKF7gb(r;F$4@1_zMSx{cn>0g9F0*-x~)0kpsdD`imIC z&+|744DuHa3gY>jL;&*NN&ex0LU{jb1PX@o0ROHU`hSrh%ES9tcTgw~=&xLuz~3=G z*k6r61qA-HXy88`0fO@XEf>!}>)#|ipuhdW1NqBgARZ{>?_3!8U$KAm=i!I`RW*+Q z_%FG5d0~GUi5CX`OX~kQ%lxmR!Msp`e-VSgynIl8T8sbq9RAB7U_L19-^BmSIsfHg k2#Ei$_xaD9H0a;C5HJrPG>J=33Qd3)hR(z!tt#_B06v#`j{pDw delta 11483 zcmaKSWpEs8kfbfLn3P4 zAn?B^2@yVMoTOX;PG%qnH#Zk4D>sOlI|=u5H7*x3D~Ow$o0XK46UfXB{LdikKVZ_v z=L86L?j&ajE->Zff-w+kE?JD2SXs4bFwI|N=0;sTx93|lstKxw$AoC#%?cFNbSW)y zRpyjKKmSn-l;l^xM!;J^4C&*OCv)wk=PKi*(%QT1y|38kJod~sD}m{o=|d^%M;iJO zONMF9WTD8o9 zXl3YiqX?3nxpOA{9Az(RqO;JNa@fgkfs?skZc~Ib3VQ^wChMSH9PbTCB+u9m@oMiG zu}nw;fj55xpAeOeRGF!2U&t+cS3p}u3zPEHAS5*k{$0;VsVNHb{o zAGU_FH@S+Pb~h1vx3qp6Jrd!@9Mj=i34a;|;BfVjByVqRyJITnXNUW~!9vstJ~2dE zj1CitO|WVJzfyzzvsmOE|DG)TfH5ss-Gmb!c;V@wXc>w5%s1mpZpNcnZf)5u^AEh2 zqGrA{hr0EH`{LwB46~mFl#ZXhMVvSF>1}i`-L3?~5)^$vY|)7FA2pyOR2?F>TNcKN z)L9&bEH(-@xqg#e{UqPO#L4s{;cKs=UFXDAdQ;k)b8b*y1UCP*uF-0APV+A5KC1~4 zxN!}GjhvQ0ql-Pi5INnO^JbLq$8NdHQ7Omj7PqB~fklTvAv>iF$8f9iv6Wp-l_yf% znlnzWzwWwjQL3xE;VH^pXJIsN zvJvFhs9hbr^*rKB-IL;c!^=~#sX3)K;@%=Bsai1pIH?> zewh%Eu9cv^D;u*CZDvAchQewwSR3E=RN=z>Xi2>B^!A=Ub@9M!JYQE9@;S|o1vsh2<{9&r4Byp zKS@g3=Q|~vD|CTNcwGuppv&PgQIF$BF>FK1?E*AZ7o`n{2h%Q={6d+?baqv^5ffqL z5!v=p$kf%u{QXdNQT-wM*nR+NH(Dp$>pAK1%m&yE_QkFEc;!;;p6dli`+nr7C&9Bc zp%RecLBdMsa1>t7Y&*t*zz8opp8YqOy?9AG)N8LyWW6t*7p7O^iD9dPWIHw41$-;I&9?3O7E22q+A!JmZs}NaJHCKtgUE#cB0B11;Z7r!IP>%u#gp5!NT0xKdu~*8jbV*nhp^r24fcr?tELGf^QjBks2ciI{;B=a8nW_wLWf zY-Y1OKs0bD=DZiR+zp?-&)VvX)9UW}pYT?7F+FGt$A(MBcnZ&R8NMaftqaxJY}16C zBF+&CKWQ*)I3ii!uoP=XG?~eWsj@6FS)6|U8T4BMD&-kz#rc}u6jC4#oZdK2zEkWcB#JRoq2t7Ge)$YrsewxO*ZslwU&ZQmp9*T z2s15RNe%Mm#JK7qSijQsJ5l#lm)+mWoKxy6NeEMu17`)dmPN-0q=i&OEcFFZ$PFD( zd5#a(z>grRErxA!B{?#qw1n^lACh_K6P1Z|WJFtpG;%+-!TR982Wk1}XS;zWL0=BM zh4ySpWhBWuZ@M^lV%8LTJ422wlYVo;tHlDmeGMKdU;BKd z_$S$w-iVO?^sCV8Q<`zzSk}swre@XRSSV3826c+-6tVX!$ai-D5CrnSLRD3(;L4T; zg3-T0D2JFhD6S`zOnVKt1s0DU+EywG*^F?C1n{8^`Ri=K9;{8Bi^Z12i+YZy*bb|Z zv_gF+D;}M*bk-%NFWPzG3T*$>LTyTITIQ`9snw@Hi&QF&6cx)BSI=ED$_Fd+ad9B6Is4=;r<$4fr_53F; z6*k4~JGf;_{W<`btKNr)oXfSj1MT>%_Q)0%SN$T1usJ`n+OLAJxohXR9jCMnhC>EN z2cmHMc5k5&`cG|nvbS$wQglw`)4{Bd1$%H4>KWt2wQij$TJBzAhjDVZ_iVw2Epij? zU*d;}66)_cP9q~>MHoYdJ!|M=op8518wNg(mR-uUIBxEVU3Ehl@Dg6avC#DTBfpdy zv4rsx9&@$#8+o9$TL$Q{P)4?aBR4~|!yZM*=Xo~0D4(Cymqxa@k$JgnJ-RuNb(%E$ zE7Ge6Af~VbNZKCDjM&2D2;{b@kqP7!Z)AftRiLJ9t0Shwx?u?T?7scrDzD;*I^kB$ zG$QJ(uf$)dtO>VKF^qxEu?_iMrjMoJqN&C%tb0daPLETXBZXN;EtH}F_9RDBch;5q`MznEb+6SAVpj;AhA>`n9BW;C~P3=blVs?>a;pulsk+S zx$}O5S(EhrdtV?lpbJ(;vaNqs%rm-=4>?ZTuo7+`cM}a6rAb7ZVcb4Mt3q+yh&pV; z(UTULc=z&KN7rLFZQ7&}cm*OY5=Vtgc3-jI2t6!<5Z*^rm|@K#5RUMC3y{;-Tm$2z z%Mi`p{U;x7`%gL`v`>%gM(@q29zjAWlZ&44+_jfTRJ5O$YnNcl9hpLMsXu{GV#$yz z%;?b+H!NS&c6%BX7u^m!Y{{@1&wdB+6CXys?-O!Ut^IaI#q@_7xY-Q%k?VG6`oTPG zX%UX|Kx-hAD1LE>asO$hVtNR%gL~KcFl7hRr$IzsAv0|!IA>X+<_A)3%rpf|?RdOb zlG6CDV-gzcY>aUz-fYZtN2dO%eUQEPVFsL)9{NB%`C;NQY8$0UDWq~D#z3+TDK}ao zdW>-*7J5v4ch49Zcpctp*dhy(PaJg>9ylx_izb%Y6NB#R5^fzb{EixcgGSgJMT$s; zHAseO03Y)S=L=03Dl+ov=BA;f{@GhkQg&-Xo@dENVkNpOL9ZP z?t!XM5CWKrkh(;56tERr6 zLA1=IcwuJHkcqKKaKFW-;P; ziZbUcHD1bhMv?TeMkkVce^03yNRwVciN~i_Bww1OeN!M;;BrEXg7+Q4c2J=YP`F&Q z&w_mE6v1XQ^ZYy{F7vylBR7kyhugd=7)vamlE9>v5 zr&lg8N!$(yq2|lP^$ogy4}%w+p7g=Y(4kDo!c+}5ZX6aQ{kN&#B(D%RQ3z(+izmiZ zobj60_1UM>Xr+fzUrpi@#=kNRbE|`QwvYT7G{MjuWHgh^<}~JXW8FuJ@1X2gVxpDC z3UyjMUBTu%RVL(bTHgSe-0n$oox9<~w6GqlP61~Hw6{(CHU>8Lyc!5;Na&dXNx+}U!7fUooY>aI`)KA*gh3%2s zb%Mv+f`Qw(Prxmplf0@~aCD1tFlt0d#fuTEq&H`P=u&bR)hLABg>Cg4>?CTm%lf0O;t+IHe> zaM2s_RG7~}myjv}FAZkCym-=!uRfV_qsCGJ#ar#1gO0hmf9-U;$T~L0ehG{tMvz=& zO~cGdOP$_9s%_*XSz+TKLL?q7*!`RA^&n|n-_YnR>d= z;4``irEw(y4g7Q0Bh0?(Np5UgqfLV{WBcwrJPnnze?Wq&AbndIR2I4dUR&_BL-Um{ z_c(NNCyYgqGfoQjy@)ZwIE2DyY01hL*8Ww-dpF2-Xxe|G6wSlTmTaff>UE>c_tXE8 zt#5N~E5yVPrM}z%fiF#bFUMt5_T0n!ziBA1x~@phbGpHg=M3)^ z*83Po_qb+NX57vVx_hHv!LuV3o&AoxbXwO#t~b2uL*-KI8EE!0huiK{%@y9ae24z! zPD*%|99UJPO~Xz+U} zRpV{EIg3(Hy6?)`E5i|JNipd3O*dHQ@Vwg=w^?A+ZqMlG$gg$o1G8bJ5Da?Wf4_Ly z4D#Fa;lGkBlLx=u9hDZ=Uv7y<5f4HxT9G-cMi7RSo$RKVP*_4oToN=Q_}4Om794bl zTFI5%+jc~ZrF`30%b76}H;xp#wgufQl`T#BGZQ2WVw>Z{y71<385VhvxjUUcRjS06 zD#fBARHBZY3)cqPfH88#c$Y=+dRm=WyjiVf2js_VmhqgzF?rKOUF>&<3LM9!15L! zn2t&XZl)+PrjM@ZTf>d1`Te}?u$^-w?0wkTz8e>>`}H`Ik_)ZJfP<&ITlSOzdD};H zE9%_W-t;nCgda$T)sLTr!{91WjIU%IeV;03D2C}idte$t1uK@$Rkary!E264%#+1U znMto=GO{rW4TfVT-aO*@Wk3Dmj@Q;#e$wfX}TY-JsiW#u@$X7WDbhw$G4&Nrc zNx)m~E?NnyfoS36AYv#PdB-YYzV8-64JbjYR49JtJqVVLJfi$ESD9m}EP}g|6q5&) zlV;HB{M+QFR8x1IO~vEwXo^L);z;Fg_ujwL>QzAZ$_{s&)s@nkEL;JSNf69mQH|5JUxpWG8NhO_2-G31Nii`RN25ywHWIb-k1I~? z2yOvV?u_wc{`Mzj!BfHw0WJ+hg+5NM{L**aJQ6ti^AV~V?!lc1 zJCFm6f{G70toxfQLdbBj(urSX+aMTG>chj;Ipg6Xnx~af_BJ zkBz^Y|FA)?R1p}UJO3R};H$uchXqd4#~D@b$J9eUp}U{{GYAvWbbM~CvP{UKp*#LP zQmwV&6z`AMzDPFaoie7_Fu8UhAu^qD#=Q7B-9IgrS#}OR!oGxq6wlpF@+*l@B$dVZ zG3qj4Jm;**EI_6=bt+YZ*@-20*Y0K_O;WFWs-Iv0b$)7j4iEoZ#KG|q6B2}6j2ToB+Kr)8K6{;@uV-)&C$^q zdIu3tEazP~#N!<*s`5~*FyU8N#;=JOK+23qquZ!}bP_a8zLxNxW<2R5Q5KNb8Ap-V z0rPOna`1G=>B4XmH4{%0lE8?>qA1*}fb0p2;%h!pZXHS%)^g)~2zC+J7zma#_>opj zKa`9wCaycTNp2{I2Z#GdII}6$u>z3tpl#F;v+~csG`2F`3lS{w&h9x_Y_`o}wtsOD zy{=_Y4>qC&)cddJlW3KmPu>g+4};9yZ-?Fz)J#>Ae~zz-D71*it%3v1$_ubs7Og@` zk!m8fUs%0s^{)-xGx@UR62{UQl{$6{5@tzx#9A|BQ>f>TX8Ek({B*S?Ii)gVI8w~5 zhYF;rmIg}+o(8%hrA|^bw{8|dTQ>|fQa_aG?0a-+(q9)+EjWNt2?PCuhqtmE)k{lh z?=U8^<(mclcjYd2k6@m*>ezBQT|0vWbQ8d!#0aGTeebMXtmEL1rAZJu!Guh`%1*X6 zhwkH1;Mw7C@jBnQiC7F)b2;%rAVRu;sxh|FFe?`JRj z=boogf>#PpPhb3LS?to^w)01kiVfN&`~0)sYnso_vU2uZsKIivF;cvKo3|EtMiif)RiY(ntlET|M5v+$T? zi0NNZAw+h4;spog4Jiuz5^KvV5`?{_Du7}pFGxL!*7=F~A#!r#7HKa_ISp-(VUID? z2ce0mDLE=jL;JjCnjliN6hb*e`JKKfG9poOG0O1w|r<~X3*T>i0?Om#w6d*XICM9RInd+)6@ofYr$%Mz?%=gz# zNMKsv5`==Vu9K{jZOsp^O1=`l#x)gU9DlzU54MRKpSmjQZ%&JgYx$>_%X$bF0)G?@ zHZG=T_2dE=lKGoDH@goS|fA>GiSw})*>^ORT zqUKx577uwv{lL3YG@6kw3Qg2HJJ{r_G=c&j9Ym31x&AWz1z=$ZEro;vblattji`gN zAt~(aCepL-aJyW4?sq~Eb7%0)qUhtavG(H7kKB+YM`HD?iLlFKw_b;1o?c>!|D<*~ z?S`LWK)h1iKFsRr1fS|zSslcZ2&R5l&y4?usP!}G{=T3-p5BOW)&fC>p*BD>3#kBX zA5xrC83qVAT(WZyb26-NJ^7yQrKTOjDTR>j<_N@_4M6bp`;MY>eByJFzA-PqlDU5Y zM=08IwiZzv1bNzNpzV&0HTzjLj4Lm`ji-N6SOZUHOu9g-h9#i+XQxP$sw=<301Sp7 zdwY+PgZ5UeGcfzBWGFDqEl-E4M(GduO*t56&AAz~++5{F97pn{P%yj`m+7A3%~Eh- z>NktbDgBR=**iTXwh>vLqzTuF=vjrdVpuMDw~bQU-^bWkLh2#R2xfLZazh4Qn@j!D zBz(gxS0RI?dBc#wX-Fwe@LzYOH7HtQ>aAUnFPcSGfGuQ9}zMnHW{)*^WB&Nh8&^p#v z`>CiZ2!3zXLqd9c;J+SJYGiU`S*`b)+p-Ig8NpiuwH$sC_jlOby`lU8ZpDZXt+}YK z4kI)s{|#q4{X6^Hej|204pr^m2?C%szk?R8x)yjT!5^sTIKaZ))pNBXxMebb72Pib z^SCBKjWK4Fq)XQ+ft-H7bk^IMe zO&D&L7Cy6-p=aC&O@~?_U#G8h;I6e|Jl}MEJY35Io)ST3Jv)^9 z9z+XZ3Zm*|b)qs~BrxpIMVN~CvfH#5w>##D#*BayB1KiGj&4l_PTYzlwl$2{fOfC@ z!U7Y^E;ZSBbgR3mY>0CMBOvZyRiXRJV9Kx3+|v4T!M4gXnqquKUXpt3yrnEXX`szh zFBdCO7D2P)C!HutVo#-9f6A&R;gctDtQagu?OrBNv$yKD;OoKF>RzR-*=S^4dLDeR z$8Mmk;wTR7M}`Lneu5i-D?@(`ucFD4vs9QalrPmjY}IG0`t_6HXTdMXI7aUy$G%g^ zQg_gJPMfo&sAyNKS6s)ZvHhv1D+F<)+zKVk?{+KK<0m?hDIz`Rzc3CA8gO<=gKyhs z^pW3Oe5}svQ{SK~1)G5&1PY!r0k@oFVCA47P}*_IlrrH0Z}%4d zW7(9l@47!)agi#0(wM8+GplHN&Ah5Pb6v95n625pa+u(@aq!!q-wJ_%Go4o3Nr;<` z`&0?%Ve)IUEY6nV4wKhE0@y8I88IN4u`)_c1o!_uStXQX}TYVi5DIf@h`1pNGz zvS)s**9LaNfWr!a*J~w%c_#%86)i1npPp`eU~jdeg=i@CvE(Fwc9I3BfA zuj_bAOnBB+QNM57CQ&hUIdLQBm!(6e=h@06KUz8i$`20PEMEl<2Vp zC+U;Up_B~BCZVgF9IbMHfQ0Vs?(BCn55QaCJrIw-Ulc<#l5Aj!itqKW3HX!|PQCMUGp$*>YeP$CrigZu#QJ zDbDkmyfhyF3Mb{{?B0Tr(z@>8%gBwP22LtyuAS ztt~I(A7QR3FchP>ZsYsav>a)R;ezQsXFu~6g*dw&iVfG4BPlH`Nsg6k)yF-j-zJKS zeMhPj7xj4?iffhE`ZvnqA5&x2s-NP@^CIun3Ks0^duvMXc%?~lUozgR0MnwA-Wb|l zN^@N3Z{4J+#<4BJG1imq$57_2v9$7}P$p*6r>E!q`9aD5|2$3kO^irJrEu z0oqSer7j3dmHx_9bi7KV>eaKz{?yA$HAv2OJBNeLmn37N$3CN^u%S{tW>TzcjBBRN zUz>G^ZPJX>L`g9AhfxUB;iC{05HdsVu9HI5LWyp@wy2ES+JA3yHY1US7pxmbL!}V&!B~y9$Q+3y*kU3S{Szgj^Wf?%F&03j%9Eos-zV5XU3eb>(?Y}TL*SKV-R*5 zz248zV|l2Lyj8HemM;R2#7qgPbQ?(O6IjR%+Mn+x9SL~{Pzmohb(K)A!bF>Mix9fw=xA}|G(C9`-ZBIS1HNPr zG4g>?AHNON%Y9&<`4m5|v+lh#%ZQDB^G(6r(`n|MPTcDi?kPhYRqxz0xC`jAl1mpE zzv`x0>oF*vn#O+STPxI*Y`s3>G>2g>k2=3yE`&({=>7ancj$_09Um%5kDdN&sVIhF z!{(CP)v~!!=Ii6uH2?QIZ)d5ZBQFCp{moktRrhzc5jSrzmIRJhys1ieYw$1r1qTtvDq-`$eELA4jfZ#T^12S<4yHCH|1Sw z)B8zTJmg^Vb(>6k9b=z``@{-qQ6%jnTE=90YxwH@c0Og3G15ec*r8y@D3}Q8+vpr8nQ=gO%7Bs@0=epR0``2S1d1bmRm3MoL)tlt5AN?-Bu06s& zh=Xs6FgN&VWy$I;`Mz3`)$t5wQt=E6fB(8}*m9N&s}pF~5<#eXj$lywhEnQ`AGv5{ zO6@6)EU@b5b}BmR5y(C*1c?OtUoUF^d-(kWG9bQ{0Hslx`=jY-_J3RMeM$%vfBOO5 z@aZMH4wVlD3d|`WKziIkov77Di3xim&8Z$mM3 zJB7DFoY8;0C%9R~=0M%b92cY+nz}ZrTuFE$DXD_T*P1I`nV#N|6+abORQD38ZLJs# zS!+6$IeSvqmF<(#tISxBG8ueTc;SgQH!c(XV{kZd1KyC6D^b&Ee4d0K8<0COIF^cu z_L1(jwze%=RPIV40&a{fc-d{NI%(@n%I}ySa!YsCz{}4)s2--(-1|~VsJ(hghof@sk zxsrLW7p&GaZ*e0K^#A6tZ;&y@&2PnDpP2U#Or^Ob@ZS4ji4Cp>K%mcn?{>=W8^ zfUXEL844K+m+LSwv61eq{fzTwv=Jo&vjW)wfAQEj{-4PIr}585(Eq^$|6|8L*k8h|Tx@@f za0370u>sir7Wrq3>HiS z7dt!0UxUQX3HZzEf9Ch!Z342hg8uCwkR8MYA~pHX*Wteh1jxbqSMPuvoZSBwVFhpk g{ypie0B-ibFd*AMdoX*n#NfDq0C*}YaRrJ01GGG1O8@`> diff --git a/src/paperless_mail/tests/samples/html.eml.pdf.webp b/src/paperless_mail/tests/samples/html.eml.pdf.webp index b4481efd92e594f4fb8afeeedcc67d1df9e47db1..ab7cd85353078c6f493fc632404493639b719168 100644 GIT binary patch literal 6098 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
  • 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 Date: Sun, 20 Nov 2022 12:36:49 +0100 Subject: [PATCH 044/231] use html.escape instead of some self build functions --- src/paperless_mail/parsers.py | 8 ++------ src/paperless_mail/tests/test_parsers.py | 4 +++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/paperless_mail/parsers.py b/src/paperless_mail/parsers.py index da0cf96b9..c4ecaf861 100644 --- a/src/paperless_mail/parsers.py +++ b/src/paperless_mail/parsers.py @@ -1,5 +1,6 @@ import os import re +from html import escape from io import BytesIO from io import StringIO @@ -198,12 +199,7 @@ class MailDocumentParser(DocumentParser): text = "\n".join([str(e) for e in text]) if type(text) != str: text = str(text) - text = text.replace("&", "&") - text = text.replace("<", "<") - text = text.replace(">", ">") - text = text.replace(" ", "  ") - text = text.replace("'", "'") - text = text.replace('"', """) + text = escape(text) text = clean(text) text = linkify(text, parse_email=True) text = text.replace("\n", "
    ") diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py index 4123e1cc8..1a348b472 100644 --- a/src/paperless_mail/tests/test_parsers.py +++ b/src/paperless_mail/tests/test_parsers.py @@ -364,11 +364,13 @@ class TestParser(TestCase): def test_mail_to_html(self): mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml")) html_handle = self.parser.mail_to_html(mail) + html_received = html_handle.read() with open( os.path.join(self.SAMPLE_FILES, "html.eml.html"), ) as html_expected_handle: - self.assertHTMLEqual(html_expected_handle.read(), html_handle.read()) + html_expected = html_expected_handle.read() + self.assertHTMLEqual(html_expected, html_received) @mock.patch("paperless_mail.parsers.requests.post") @mock.patch("paperless_mail.parsers.MailDocumentParser.mail_to_html") From d132eba1431fd2c8a9dd57904cb019c26dbcc2e2 Mon Sep 17 00:00:00 2001 From: phail Date: Sun, 20 Nov 2022 12:48:03 +0100 Subject: [PATCH 045/231] optimize regex --- src/paperless_mail/parsers.py | 5 ++--- src/paperless_mail/tests/test_parsers.py | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/paperless_mail/parsers.py b/src/paperless_mail/parsers.py index c4ecaf861..902619fd7 100644 --- a/src/paperless_mail/parsers.py +++ b/src/paperless_mail/parsers.py @@ -105,9 +105,8 @@ class MailDocumentParser(DocumentParser): def parse(self, document_path, mime_type, file_name=None): def strip_text(text: str): - text = re.sub("\t", " ", text) - text = re.sub(" +", " ", text) - text = re.sub("(\n *)+", "\n", text) + text = re.sub(r"\s+", " ", text) + text = re.sub(r"(\n *)+", "\n", text) return text.strip() mail = self.get_parsed(document_path) diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py index 1a348b472..5cd614197 100644 --- a/src/paperless_mail/tests/test_parsers.py +++ b/src/paperless_mail/tests/test_parsers.py @@ -227,7 +227,7 @@ class TestParser(TestCase): @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf") def test_parse_html_eml(self, n, mock_tika_parse: mock.MagicMock): # Validate parsing returns the expected results - text_expected = "Some Text\nand an embedded image.\n\nSubject: HTML Message\n\nFrom: Name \n\nTo: someone@example.de\n\nAttachments: IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (600.24 KiB)\n\nHTML content: tika return" + text_expected = "Some Text and an embedded image.\n\nSubject: HTML Message\n\nFrom: Name \n\nTo: someone@example.de\n\nAttachments: IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (600.24 KiB)\n\nHTML content: tika return" mock_tika_parse.return_value = "tika return" self.parser.parse(os.path.join(self.SAMPLE_FILES, "html.eml"), "message/rfc822") From ebe21a01140aa5d492c34fc88be63cdfcc57b025 Mon Sep 17 00:00:00 2001 From: phail Date: Sun, 20 Nov 2022 14:22:30 +0100 Subject: [PATCH 046/231] eml parsing requires tika --- src/paperless_mail/apps.py | 4 +++- src/paperless_mail/parsers.py | 13 ++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/paperless_mail/apps.py b/src/paperless_mail/apps.py index fa6b1a267..719400e76 100644 --- a/src/paperless_mail/apps.py +++ b/src/paperless_mail/apps.py @@ -1,4 +1,5 @@ from django.apps import AppConfig +from django.conf import settings from django.utils.translation import gettext_lazy as _ from paperless_mail.signals import mail_consumer_declaration @@ -11,5 +12,6 @@ class PaperlessMailConfig(AppConfig): def ready(self): from documents.signals import document_consumer_declaration - document_consumer_declaration.connect(mail_consumer_declaration) + if settings.TIKA_ENABLED: + document_consumer_declaration.connect(mail_consumer_declaration) AppConfig.ready(self) diff --git a/src/paperless_mail/parsers.py b/src/paperless_mail/parsers.py index 902619fd7..b325b79d5 100644 --- a/src/paperless_mail/parsers.py +++ b/src/paperless_mail/parsers.py @@ -159,7 +159,12 @@ class MailDocumentParser(DocumentParser): pdf_collection.append(("1_mail.pdf", self.generate_pdf_from_mail(mail))) - if mail.html != "": + if mail.html == "": + with open(pdf_path, "wb") as file: + file.write(pdf_collection[0][1]) + file.close() + return pdf_path + else: pdf_collection.append( ( "2_html.pdf", @@ -167,12 +172,6 @@ class MailDocumentParser(DocumentParser): ), ) - if len(pdf_collection) == 1: - with open(pdf_path, "wb") as file: - file.write(pdf_collection[0][1]) - file.close() - return pdf_path - files = {} for name, content in pdf_collection: files[name] = (name, BytesIO(content)) From 1fa735eb23afe98d156b5ba6bf7560cc65397202 Mon Sep 17 00:00:00 2001 From: phail Date: Sun, 20 Nov 2022 15:44:43 +0100 Subject: [PATCH 047/231] use imagehash instead of bitwise hashing --- Pipfile | 1 + Pipfile.lock | 228 ++++++++++-------- src/paperless_mail/tests/test_parsers.py | 1 - src/paperless_mail/tests/test_parsers_live.py | 27 +-- 4 files changed, 144 insertions(+), 113 deletions(-) diff --git a/Pipfile b/Pipfile index 8b57e7f15..4b32ad01e 100644 --- a/Pipfile +++ b/Pipfile @@ -79,3 +79,4 @@ black = "*" pre-commit = "*" sphinx-autobuild = "*" myst-parser = "*" +imagehash = "*" diff --git a/Pipfile.lock b/Pipfile.lock index d40977c95..009cf83f9 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "a9410a1269e5129c9114fde990a0e4a5367931093c5b7290051c3602aab61557" + "sha256": "a49c31147e62885e2c962cd0b19f18169d73aa4b89f9e1b27f61c996be3e3ea4" }, "pipfile-spec": 6, "requires": {}, @@ -126,6 +126,7 @@ "sha256:fafbd82934d30f8a004f81e8f7a062e31413a23d444be8ee3326553915958c6d" ], "index": "pypi", + "markers": null, "version": "==5.2.7" }, "certifi": { @@ -548,6 +549,14 @@ "markers": "python_version >= '3.5'", "version": "==3.4" }, + "imagehash": { + "hashes": [ + "sha256:5ad9a5cde14fe255745a8245677293ac0d67f09c330986a351f34b614ba62fb5", + "sha256:7038d1b7f9e0585beb3dd8c0a956f02b95a346c0b5f24a9e8cc03ebadaf0aa70" + ], + "index": "pypi", + "version": "==4.3.1" + }, "imap-tools": { "hashes": [ "sha256:6f5572b2e747a81a607438e0ef61ff28f323f6697820493c8ca4467465baeb76", @@ -772,37 +781,37 @@ }, "numpy": { "hashes": [ - "sha256:0fe563fc8ed9dc4474cbf70742673fc4391d70f4363f917599a7fa99f042d5a8", - "sha256:12ac457b63ec8ded85d85c1e17d85efd3c2b0967ca39560b307a35a6703a4735", - "sha256:2341f4ab6dba0834b685cce16dad5f9b6606ea8a00e6da154f5dbded70fdc4dd", - "sha256:296d17aed51161dbad3c67ed6d164e51fcd18dbcd5dd4f9d0a9c6055dce30810", - "sha256:488a66cb667359534bc70028d653ba1cf307bae88eab5929cd707c761ff037db", - "sha256:4d52914c88b4930dafb6c48ba5115a96cbab40f45740239d9f4159c4ba779962", - "sha256:5e13030f8793e9ee42f9c7d5777465a560eb78fa7e11b1c053427f2ccab90c79", - "sha256:61be02e3bf810b60ab74e81d6d0d36246dbfb644a462458bb53b595791251911", - "sha256:7607b598217745cc40f751da38ffd03512d33ec06f3523fb0b5f82e09f6f676d", - "sha256:7a70a7d3ce4c0e9284e92285cba91a4a3f5214d87ee0e95928f3614a256a1488", - "sha256:7ab46e4e7ec63c8a5e6dbf5c1b9e1c92ba23a7ebecc86c336cb7bf3bd2fb10e5", - "sha256:8981d9b5619569899666170c7c9748920f4a5005bf79c72c07d08c8a035757b0", - "sha256:8c053d7557a8f022ec823196d242464b6955a7e7e5015b719e76003f63f82d0f", - "sha256:926db372bc4ac1edf81cfb6c59e2a881606b409ddc0d0920b988174b2e2a767f", - "sha256:95d79ada05005f6f4f337d3bb9de8a7774f259341c70bc88047a1f7b96a4bcb2", - "sha256:95de7dc7dc47a312f6feddd3da2500826defdccbc41608d0031276a24181a2c0", - "sha256:a0882323e0ca4245eb0a3d0a74f88ce581cc33aedcfa396e415e5bba7bf05f68", - "sha256:a8365b942f9c1a7d0f0dc974747d99dd0a0cdfc5949a33119caf05cb314682d3", - "sha256:a8aae2fb3180940011b4862b2dd3756616841c53db9734b27bb93813cd79fce6", - "sha256:c237129f0e732885c9a6076a537e974160482eab8f10db6292e92154d4c67d71", - "sha256:c67b833dbccefe97cdd3f52798d430b9d3430396af7cdb2a0c32954c3ef73894", - "sha256:ce03305dd694c4873b9429274fd41fc7eb4e0e4dea07e0af97a933b079a5814f", - "sha256:d331afac87c92373826af83d2b2b435f57b17a5c74e6268b79355b970626e329", - "sha256:dada341ebb79619fe00a291185bba370c9803b1e1d7051610e01ed809ef3a4ba", - "sha256:ed2cc92af0efad20198638c69bb0fc2870a58dabfba6eb722c933b48556c686c", - "sha256:f260da502d7441a45695199b4e7fd8ca87db659ba1c78f2bbf31f934fe76ae0e", - "sha256:f2f390aa4da44454db40a1f0201401f9036e8d578a25f01a6e237cea238337ef", - "sha256:f76025acc8e2114bb664294a07ede0727aa75d63a06d2fae96bf29a81747e4a7" + "sha256:01dd17cbb340bf0fc23981e52e1d18a9d4050792e8fb8363cecbf066a84b827d", + "sha256:06005a2ef6014e9956c09ba07654f9837d9e26696a0470e42beedadb78c11b07", + "sha256:09b7847f7e83ca37c6e627682f145856de331049013853f344f37b0c9690e3df", + "sha256:0aaee12d8883552fadfc41e96b4c82ee7d794949e2a7c3b3a7201e968c7ecab9", + "sha256:0cbe9848fad08baf71de1a39e12d1b6310f1d5b2d0ea4de051058e6e1076852d", + "sha256:1b1766d6f397c18153d40015ddfc79ddb715cabadc04d2d228d4e5a8bc4ded1a", + "sha256:33161613d2269025873025b33e879825ec7b1d831317e68f4f2f0f84ed14c719", + "sha256:5039f55555e1eab31124a5768898c9e22c25a65c1e0037f4d7c495a45778c9f2", + "sha256:522e26bbf6377e4d76403826ed689c295b0b238f46c28a7251ab94716da0b280", + "sha256:56e454c7833e94ec9769fa0f86e6ff8e42ee38ce0ce1fa4cbb747ea7e06d56aa", + "sha256:58f545efd1108e647604a1b5aa809591ccd2540f468a880bedb97247e72db387", + "sha256:5e05b1c973a9f858c74367553e236f287e749465f773328c8ef31abe18f691e1", + "sha256:7903ba8ab592b82014713c491f6c5d3a1cde5b4a3bf116404e08f5b52f6daf43", + "sha256:8969bfd28e85c81f3f94eb4a66bc2cf1dbdc5c18efc320af34bffc54d6b1e38f", + "sha256:92c8c1e89a1f5028a4c6d9e3ccbe311b6ba53694811269b992c0b224269e2398", + "sha256:9c88793f78fca17da0145455f0d7826bcb9f37da4764af27ac945488116efe63", + "sha256:a7ac231a08bb37f852849bbb387a20a57574a97cfc7b6cabb488a4fc8be176de", + "sha256:abdde9f795cf292fb9651ed48185503a2ff29be87770c3b8e2a14b0cd7aa16f8", + "sha256:af1da88f6bc3d2338ebbf0e22fe487821ea4d8e89053e25fa59d1d79786e7481", + "sha256:b2a9ab7c279c91974f756c84c365a669a887efa287365a8e2c418f8b3ba73fb0", + "sha256:bf837dc63ba5c06dc8797c398db1e223a466c7ece27a1f7b5232ba3466aafe3d", + "sha256:ca51fcfcc5f9354c45f400059e88bc09215fb71a48d3768fb80e357f3b457e1e", + "sha256:ce571367b6dfe60af04e04a1834ca2dc5f46004ac1cc756fb95319f64c095a96", + "sha256:d208a0f8729f3fb790ed18a003f3a57895b989b40ea4dce4717e9cf4af62c6bb", + "sha256:dbee87b469018961d1ad79b1a5d50c0ae850000b639bcb1b694e9981083243b6", + "sha256:e9f4c4e51567b616be64e05d517c79a8a22f3606499941d97bb76f2ca59f982d", + "sha256:f063b69b090c9d918f9df0a12116029e274daf0181df392839661c4c7ec9018a", + "sha256:f9a909a8bae284d46bbfdefbdd4a262ba19d3bc9921b1e76126b1d21c3c34135" ], "index": "pypi", - "version": "==1.23.4" + "version": "==1.23.5" }, "ocrmypdf": { "hashes": [ @@ -1107,6 +1116,37 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", "version": "==0.1.0.post0" }, + "pywavelets": { + "hashes": [ + "sha256:030670a213ee8fefa56f6387b0c8e7d970c7f7ad6850dc048bd7c89364771b9b", + "sha256:058b46434eac4c04dd89aeef6fa39e4b6496a951d78c500b6641fd5b2cc2f9f4", + "sha256:231b0e0b1cdc1112f4af3c24eea7bf181c418d37922a67670e9bf6cfa2d544d4", + "sha256:23bafd60350b2b868076d976bdd92f950b3944f119b4754b1d7ff22b7acbf6c6", + "sha256:3f19327f2129fb7977bc59b966b4974dfd72879c093e44a7287500a7032695de", + "sha256:47cac4fa25bed76a45bc781a293c26ac63e8eaae9eb8f9be961758d22b58649c", + "sha256:578af438a02a86b70f1975b546f68aaaf38f28fb082a61ceb799816049ed18aa", + "sha256:6437af3ddf083118c26d8f97ab43b0724b956c9f958e9ea788659f6a2834ba93", + "sha256:64c6bac6204327321db30b775060fbe8e8642316e6bff17f06b9f34936f88875", + "sha256:67a0d28a08909f21400cb09ff62ba94c064882ffd9e3a6b27880a111211d59bd", + "sha256:71ab30f51ee4470741bb55fc6b197b4a2b612232e30f6ac069106f0156342356", + "sha256:7231461d7a8eb3bdc7aa2d97d9f67ea5a9f8902522818e7e2ead9c2b3408eeb1", + "sha256:754fa5085768227c4f4a26c1e0c78bc509a266d9ebd0eb69a278be7e3ece943c", + "sha256:7ab8d9db0fe549ab2ee0bea61f614e658dd2df419d5b75fba47baa761e95f8f2", + "sha256:875d4d620eee655346e3589a16a73790cf9f8917abba062234439b594e706784", + "sha256:88aa5449e109d8f5e7f0adef85f7f73b1ab086102865be64421a3a3d02d277f4", + "sha256:91d3d393cffa634f0e550d88c0e3f217c96cfb9e32781f2960876f1808d9b45b", + "sha256:9cb5ca8d11d3f98e89e65796a2125be98424d22e5ada360a0dbabff659fca0fc", + "sha256:ab7da0a17822cd2f6545626946d3b82d1a8e106afc4b50e3387719ba01c7b966", + "sha256:ad987748f60418d5f4138db89d82ba0cb49b086e0cbb8fd5c3ed4a814cfb705e", + "sha256:d0e56cd7a53aed3cceca91a04d62feb3a0aca6725b1912d29546c26f6ea90426", + "sha256:d854411eb5ee9cb4bc5d0e66e3634aeb8f594210f6a1bed96dbed57ec70f181c", + "sha256:da7b9c006171be1f9ddb12cc6e0d3d703b95f7f43cb5e2c6f5f15d3233fcf202", + "sha256:daf0aa79842b571308d7c31a9c43bc99a30b6328e6aea3f50388cd8f69ba7dbc", + "sha256:de7cd61a88a982edfec01ea755b0740e94766e00a1ceceeafef3ed4c85c605cd" + ], + "markers": "python_version >= '3.8'", + "version": "==1.4.1" + }, "pyyaml": { "hashes": [ "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf", @@ -1265,6 +1305,7 @@ "sha256:ddf27071df4adf3821c4f2ca59d67525c3a82e5f268bed97b813cb4fabf87880" ], "index": "pypi", + "markers": null, "version": "==4.3.4" }, "regex": { @@ -1537,11 +1578,11 @@ }, "setuptools": { "hashes": [ - "sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31", - "sha256:e197a19aa8ec9722928f2206f8de752def0e4c9fc6953527360d1c36d94ddb2f" + "sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840", + "sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d" ], "markers": "python_version >= '3.7'", - "version": "==65.5.1" + "version": "==65.6.0" }, "six": { "hashes": [ @@ -1663,11 +1704,12 @@ "standard" ], "hashes": [ - "sha256:cc277f7e73435748e69e075a721841f7c4a95dba06d12a72fe9874acced16f6f", - "sha256:cf538f3018536edb1f4a826311137ab4944ed741d52aeb98846f52215de57f25" + "sha256:a4e12017b940247f836bc90b72e725d7dfd0c8ed1c51eb365f5ba30d9f5127d8", + "sha256:c3ed1598a5668208723f2bb49336f4509424ad198d6ab2615b7783db58d919fd" ], "index": "pypi", - "version": "==0.19.0" + "markers": null, + "version": "==0.20.0" }, "uvloop": { "hashes": [ @@ -1951,49 +1993,45 @@ }, "zope.interface": { "hashes": [ - "sha256:026e7da51147910435950a46c55159d68af319f6e909f14873d35d411f4961db", - "sha256:061a41a3f96f076686d7f1cb87f3deec6f0c9f0325dcc054ac7b504ae9bb0d82", - "sha256:0eda7f61da6606a28b5efa5d8ad79b4b5bb242488e53a58993b2ec46c924ffee", - "sha256:13a7c6e3df8aa453583412de5725bf761217d06f66ff4ed776d44fbcd13ec4e4", - "sha256:185f0faf6c3d8f2203e8755f7ca16b8964d97da0abde89c367177a04e36f2568", - "sha256:2204a9d545fdbe0d9b0bf4d5e2fc67e7977de59666f7131c1433fde292fc3b41", - "sha256:27c53aa2f46d42940ccdcb015fd525a42bf73f94acd886296794a41f229d5946", - "sha256:3c293c5c0e1cabe59c33e0d02fcee5c3eb365f79a20b8199a26ca784e406bd0d", - "sha256:3e42b1c3f4fd863323a8275c52c78681281a8f2e1790f0e869d911c1c7b25c46", - "sha256:3e5540b7d703774fd171b7a7dc2a3cb70e98fc273b8b260b1bf2f7d3928f125b", - "sha256:4477930451521ac7da97cc31d49f7b83086d5ae76e52baf16aac659053119f6d", - "sha256:475b6e371cdbeb024f2302e826222bdc202186531f6dc095e8986c034e4b7961", - "sha256:489c4c46fcbd9364f60ff0dcb93ec9026eca64b2f43dc3b05d0724092f205e27", - "sha256:509a8d39b64a5e8d473f3f3db981f3ca603d27d2bc023c482605c1b52ec15662", - "sha256:58331d2766e8e409360154d3178449d116220348d46386430097e63d02a1b6d2", - "sha256:59a96d499ff6faa9b85b1309f50bf3744eb786e24833f7b500cbb7052dc4ae29", - "sha256:6cb8f9a1db47017929634264b3fc7ea4c1a42a3e28d67a14f14aa7b71deaa0d2", - "sha256:6d678475fdeb11394dc9aaa5c564213a1567cc663082e0ee85d52f78d1fbaab2", - "sha256:72a93445937cc71f0b8372b0c9e7c185328e0db5e94d06383a1cb56705df1df4", - "sha256:76cf472c79d15dce5f438a4905a1309be57d2d01bc1de2de30bda61972a79ab4", - "sha256:7b4547a2f624a537e90fb99cec4d8b3b6be4af3f449c3477155aae65396724ad", - "sha256:7f2e4ebe0a000c5727ee04227cf0ff5ae612fe599f88d494216e695b1dac744d", - "sha256:8343536ea4ee15d6525e3e726bb49ffc3f2034f828a49237a36be96842c06e7c", - "sha256:8de7bde839d72d96e0c92e8d1fdb4862e89b8fc52514d14b101ca317d9bcf87c", - "sha256:90f611d4cdf82fb28837fe15c3940255755572a4edf4c72e2306dbce7dcb3092", - "sha256:9ad58724fabb429d1ebb6f334361f0a3b35f96be0e74bfca6f7de8530688b2df", - "sha256:a1393229c9c126dd1b4356338421e8882347347ab6fe3230cb7044edc813e424", - "sha256:a20fc9cccbda2a28e8db8cabf2f47fead7e9e49d317547af6bf86a7269e4b9a1", - "sha256:a69f6d8b639f2317ba54278b64fef51d8250ad2c87acac1408b9cc461e4d6bb6", - "sha256:a6f51ffbdcf865f140f55c484001415505f5e68eb0a9eab1d37d0743b503b423", - "sha256:c9552ee9e123b7997c7630fb95c466ee816d19e721c67e4da35351c5f4032726", - "sha256:cd423d49abcf0ebf02c29c3daffe246ff756addb891f8aab717b3a4e2e1fd675", - "sha256:d0587d238b7867544134f4dcca19328371b8fd03fc2c56d15786f410792d0a68", - "sha256:d1f2d91c9c6cd54d750fa34f18bd73c71b372d0e6d06843bc7a5f21f5fd66fe0", - "sha256:d2f2ec42fbc21e1af5f129ec295e29fee6f93563e6388656975caebc5f851561", - "sha256:d743b03a72fefed807a4512c079fb1aa5e7777036cc7a4b6ff79ae4650a14f73", - "sha256:dd4b9251e95020c3d5d104b528dbf53629d09c146ce9c8dfaaf8f619ae1cce35", - "sha256:e4988d94962f517f6da2d52337170b84856905b31b7dc504ed9c7b7e4bab2fc3", - "sha256:e6a923d2dec50f2b4d41ce198af3516517f2e458220942cf393839d2f9e22000", - "sha256:e8c8764226daad39004b7873c3880eb4860c594ff549ea47c045cdf313e1bad5" + "sha256:008b0b65c05993bb08912f644d140530e775cf1c62a072bf9340c2249e613c32", + "sha256:0217a9615531c83aeedb12e126611b1b1a3175013bbafe57c702ce40000eb9a0", + "sha256:0fb497c6b088818e3395e302e426850f8236d8d9f4ef5b2836feae812a8f699c", + "sha256:17ebf6e0b1d07ed009738016abf0d0a0f80388e009d0ac6e0ead26fc162b3b9c", + "sha256:311196634bb9333aa06f00fc94f59d3a9fddd2305c2c425d86e406ddc6f2260d", + "sha256:3218ab1a7748327e08ef83cca63eea7cf20ea7e2ebcb2522072896e5e2fceedf", + "sha256:404d1e284eda9e233c90128697c71acffd55e183d70628aa0bbb0e7a3084ed8b", + "sha256:4087e253bd3bbbc3e615ecd0b6dd03c4e6a1e46d152d3be6d2ad08fbad742dcc", + "sha256:40f4065745e2c2fa0dff0e7ccd7c166a8ac9748974f960cd39f63d2c19f9231f", + "sha256:5334e2ef60d3d9439c08baedaf8b84dc9bb9522d0dacbc10572ef5609ef8db6d", + "sha256:604cdba8f1983d0ab78edc29aa71c8df0ada06fb147cea436dc37093a0100a4e", + "sha256:6373d7eb813a143cb7795d3e42bd8ed857c82a90571567e681e1b3841a390d16", + "sha256:655796a906fa3ca67273011c9805c1e1baa047781fca80feeb710328cdbed87f", + "sha256:65c3c06afee96c654e590e046c4a24559e65b0a87dbff256cd4bd6f77e1a33f9", + "sha256:696f3d5493eae7359887da55c2afa05acc3db5fc625c49529e84bd9992313296", + "sha256:6e972493cdfe4ad0411fd9abfab7d4d800a7317a93928217f1a5de2bb0f0d87a", + "sha256:7579960be23d1fddecb53898035a0d112ac858c3554018ce615cefc03024e46d", + "sha256:765d703096ca47aa5d93044bf701b00bbce4d903a95b41fff7c3796e747b1f1d", + "sha256:7e66f60b0067a10dd289b29dceabd3d0e6d68be1504fc9d0bc209cf07f56d189", + "sha256:8a2ffadefd0e7206adc86e492ccc60395f7edb5680adedf17a7ee4205c530df4", + "sha256:959697ef2757406bff71467a09d940ca364e724c534efbf3786e86eee8591452", + "sha256:9d783213fab61832dbb10d385a319cb0e45451088abd45f95b5bb88ed0acca1a", + "sha256:a16025df73d24795a0bde05504911d306307c24a64187752685ff6ea23897cb0", + "sha256:a2ad597c8c9e038a5912ac3cf166f82926feff2f6e0dabdab956768de0a258f5", + "sha256:bfee1f3ff62143819499e348f5b8a7f3aa0259f9aca5e0ddae7391d059dce671", + "sha256:d169ccd0756c15bbb2f1acc012f5aab279dffc334d733ca0d9362c5beaebe88e", + "sha256:d514c269d1f9f5cd05ddfed15298d6c418129f3f064765295659798349c43e6f", + "sha256:d692374b578360d36568dd05efb8a5a67ab6d1878c29c582e37ddba80e66c396", + "sha256:dbaeb9cf0ea0b3bc4b36fae54a016933d64c6d52a94810a63c00f440ecb37dd7", + "sha256:dc26c8d44472e035d59d6f1177eb712888447f5799743da9c398b0339ed90b1b", + "sha256:e1574980b48c8c74f83578d1e77e701f8439a5d93f36a5a0af31337467c08fcf", + "sha256:e74a578172525c20d7223eac5f8ad187f10940dac06e40113d62f14f3adb1e8f", + "sha256:e945de62917acbf853ab968d8916290548df18dd62c739d862f359ecd25842a6", + "sha256:f0980d44b8aded808bec5059018d64692f0127f10510eca71f2f0ace8fb11188", + "sha256:f98d4bd7bbb15ca701d19b93263cc5edfd480c3475d163f137385f49e5b3a3a7", + "sha256:fb68d212efd057596dee9e6582daded9f8ef776538afdf5feceb3059df2d2e7b" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==5.5.1" + "version": "==5.5.2" } }, "develop": { @@ -2174,11 +2212,11 @@ }, "exceptiongroup": { "hashes": [ - "sha256:4d6c0aa6dd825810941c792f53d7b8d71da26f5e5f84f20f9508e8f2d33b140a", - "sha256:73866f7f842ede6cb1daa42c4af078e2035e5f7607f0e2c762cc51bb31bbe7b2" + "sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828", + "sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec" ], "markers": "python_version < '3.11'", - "version": "==1.0.1" + "version": "==1.0.4" }, "execnet": { "hashes": [ @@ -2198,11 +2236,11 @@ }, "faker": { "hashes": [ - "sha256:4a3465624515a6807e8aa7e8eeb85bdd86a2fa53de4e258892dd6be95362462e", - "sha256:b9dd2fd9a9ac68a4e0c5040cd9e9bfaa099fa8dd15bae5f01f224a45431818d5" + "sha256:0094fe3340ad73c490d3ffccc59cc171b161acfccccd52925c70970ba23e6d6b", + "sha256:43da04aae745018e8bded768e74c84423d9dc38e4c498a53439e749d90e20bc0" ], "markers": "python_version >= '3.7'", - "version": "==15.3.1" + "version": "==15.3.2" }, "filelock": { "hashes": [ @@ -2214,11 +2252,11 @@ }, "identify": { "hashes": [ - "sha256:48b7925fe122720088aeb7a6c34f17b27e706b72c61070f27fe3789094233440", - "sha256:7a214a10313b9489a0d61467db2856ae8d0b8306fc923e03a9effa53d8aedc58" + "sha256:906036344ca769539610436e40a684e170c3648b552194980bb7b617a8daeb9f", + "sha256:a390fb696e164dbddb047a0db26e57972ae52fbd037ae68797e5ae2f4492485d" ], "markers": "python_version >= '3.7'", - "version": "==2.5.8" + "version": "==2.5.9" }, "idna": { "hashes": [ @@ -2548,11 +2586,11 @@ }, "setuptools": { "hashes": [ - "sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31", - "sha256:e197a19aa8ec9722928f2206f8de752def0e4c9fc6953527360d1c36d94ddb2f" + "sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840", + "sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d" ], "markers": "python_version >= '3.7'", - "version": "==65.5.1" + "version": "==65.6.0" }, "six": { "hashes": [ @@ -2643,11 +2681,11 @@ }, "termcolor": { "hashes": [ - "sha256:91dd04fdf661b89d7169cefd35f609b19ca931eb033687eaa647cef1ff177c49", - "sha256:b80df54667ce4f48c03fe35df194f052dc27a541ebbf2544e4d6b47b5d6949c4" + "sha256:67cee2009adc6449c650f6bcf3bdeed00c8ba53a8cda5362733c53e0a39fb70b", + "sha256:fa852e957f97252205e105dd55bbc23b419a70fec0085708fc0515e399f304fd" ], "markers": "python_version >= '3.7'", - "version": "==2.1.0" + "version": "==2.1.1" }, "toml": { "hashes": [ @@ -2684,11 +2722,11 @@ }, "tox": { "hashes": [ - "sha256:89e4bc6df3854e9fc5582462e328dd3660d7d865ba625ae5881bbc63836a6324", - "sha256:d2c945f02a03d4501374a3d5430877380deb69b218b1df9b7f1d2f2a10befaf9" + "sha256:b2a920e35a668cc06942ffd1cf3a4fb221a4d909ca72191fb6d84b0b18a7be04", + "sha256:f52ca66eae115fcfef0e77ef81fd107133d295c97c52df337adedb8dfac6ab84" ], "index": "pypi", - "version": "==3.27.0" + "version": "==3.27.1" }, "typing-extensions": { "hashes": [ diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py index 5cd614197..892d1feb7 100644 --- a/src/paperless_mail/tests/test_parsers.py +++ b/src/paperless_mail/tests/test_parsers.py @@ -2,7 +2,6 @@ import datetime import os from unittest import mock -import pytest from django.test import TestCase from documents.parsers import ParseError from paperless_mail.parsers import MailDocumentParser diff --git a/src/paperless_mail/tests/test_parsers_live.py b/src/paperless_mail/tests/test_parsers_live.py index 9452a1186..ce3cfd3a3 100644 --- a/src/paperless_mail/tests/test_parsers_live.py +++ b/src/paperless_mail/tests/test_parsers_live.py @@ -1,4 +1,3 @@ -import hashlib import os from unittest import mock from urllib.error import HTTPError @@ -8,8 +7,10 @@ import pytest from django.test import TestCase from documents.parsers import ParseError from documents.parsers import run_convert +from imagehash import average_hash from paperless_mail.parsers import MailDocumentParser from pdfminer.high_level import extract_text +from PIL import Image class TestParserLive(TestCase): @@ -22,16 +23,8 @@ class TestParserLive(TestCase): self.parser.cleanup() @staticmethod - def hashfile(file): - buf_size = 65536 # An arbitrary (but fixed) buffer - sha256 = hashlib.sha256() - with open(file, "rb") as f: - while True: - data = f.read(buf_size) - if not data: - break - sha256.update(data) - return sha256.hexdigest() + def imagehash(file, hash_size=18): + return f"{average_hash(Image.open(file), hash_size)}" # Only run if convert is available @pytest.mark.skipif( @@ -53,8 +46,8 @@ class TestParserLive(TestCase): expected = os.path.join(self.SAMPLE_FILES, "simple_text.eml.pdf.webp") self.assertEqual( - self.hashfile(thumb), - self.hashfile(expected), + self.imagehash(thumb), + self.imagehash(expected), f"Created Thumbnail {thumb} differs from expected file {expected}", ) @@ -158,10 +151,10 @@ class TestParserLive(TestCase): logging_group=None, ) self.assertTrue(os.path.isfile(converted)) - thumb_hash = self.hashfile(converted) + thumb_hash = self.imagehash(converted) # The created pdf is not reproducible. But the converted image should always look the same. - expected_hash = self.hashfile( + expected_hash = self.imagehash( os.path.join(self.SAMPLE_FILES, "html.eml.pdf.webp"), ) self.assertEqual( @@ -244,10 +237,10 @@ class TestParserLive(TestCase): logging_group=None, ) self.assertTrue(os.path.isfile(converted)) - thumb_hash = self.hashfile(converted) + thumb_hash = self.imagehash(converted) # The created pdf is not reproducible. But the converted image should always look the same. - expected_hash = self.hashfile( + expected_hash = self.imagehash( os.path.join(self.SAMPLE_FILES, "sample.html.pdf.webp"), ) From df101f5e7a9eb97521d752e9755806a510e12d89 Mon Sep 17 00:00:00 2001 From: phail Date: Sun, 20 Nov 2022 16:09:46 +0100 Subject: [PATCH 048/231] split handle_message function --- src/paperless_mail/mail.py | 248 +++++++++++++++++++++---------------- 1 file changed, 142 insertions(+), 106 deletions(-) diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index 6f14f51ca..d4a6703c6 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -351,11 +351,15 @@ class MailAccountHandler(LoggingMixin): return total_processed_files def handle_message(self, message, rule: MailRule) -> int: + processed_elements = 0 + + # Skip Message handling when only attachments are to be processed but + # message doesn't have any. if ( not message.attachments and rule.consumption_scope == MailRule.ConsumptionScope.ATTACHMENTS_ONLY ): - return 0 + return processed_elements self.log( "debug", @@ -368,130 +372,162 @@ class MailAccountHandler(LoggingMixin): tag_ids = [tag.id for tag in rule.assign_tags.all()] doc_type = rule.assign_document_type - processed_attachments = 0 - if ( rule.consumption_scope == MailRule.ConsumptionScope.EML_ONLY or rule.consumption_scope == MailRule.ConsumptionScope.EVERYTHING ): - os.makedirs(settings.SCRATCH_DIR, exist_ok=True) - _, temp_filename = tempfile.mkstemp( - prefix="paperless-mail-", - dir=settings.SCRATCH_DIR, - suffix=".eml", + processed_elements += self.process_eml( + message, + rule, + correspondent, + tag_ids, + doc_type, ) - with open(temp_filename, "wb") as f: - # Move "From"-header to beginning of file - # TODO: This ugly workaround is needed because the parser is - # chosen only by the mime_type detected via magic - # (see documents/consumer.py "mime_type = magic.from_file") - # Unfortunately magic sometimes fails to detect the mime - # type of .eml files correctly as message/rfc822 and instead - # detects text/plain. - # This also effects direct file consumption of .eml files - # which are not treated with this workaround. - from_element = None - for i, header in enumerate(message.obj._headers): - if header[0] == "From": - from_element = i - if from_element: - new_headers = [message.obj._headers.pop(from_element)] - new_headers += message.obj._headers - message.obj._headers = new_headers - - f.write(message.obj.as_bytes()) - - self.log( - "info", - f"Rule {rule}: " - f"Consuming eml from mail " - f"{message.subject} from {message.from_}", - ) - - consume_file.delay( - path=temp_filename, - override_filename=pathvalidate.sanitize_filename( - message.subject + ".eml", - ), - override_title=message.subject, - override_correspondent_id=correspondent.id if correspondent else None, - override_document_type_id=doc_type.id if doc_type else None, - override_tag_ids=tag_ids, - ) - processed_attachments += 1 if ( rule.consumption_scope == MailRule.ConsumptionScope.ATTACHMENTS_ONLY or rule.consumption_scope == MailRule.ConsumptionScope.EVERYTHING ): - for att in message.attachments: + processed_elements += self.process_attachments( + message, + rule, + correspondent, + tag_ids, + doc_type, + ) - if ( - not att.content_disposition == "attachment" - and rule.attachment_type - == MailRule.AttachmentProcessing.ATTACHMENTS_ONLY + return processed_elements + + def process_attachments( + self, + message: MailMessage, + rule: MailRule, + correspondent, + tag_ids, + doc_type, + ): + processed_attachments = 0 + for att in message.attachments: + + if ( + not att.content_disposition == "attachment" + and rule.attachment_type + == MailRule.AttachmentProcessing.ATTACHMENTS_ONLY + ): + self.log( + "debug", + f"Rule {rule}: " + f"Skipping attachment {att.filename} " + f"with content disposition {att.content_disposition}", + ) + continue + + if rule.filter_attachment_filename: + # Force the filename and pattern to the lowercase + # as this is system dependent otherwise + if not fnmatch( + att.filename.lower(), + rule.filter_attachment_filename.lower(), ): - self.log( - "debug", - f"Rule {rule}: " - f"Skipping attachment {att.filename} " - f"with content disposition {att.content_disposition}", - ) continue - if rule.filter_attachment_filename: - # Force the filename and pattern to the lowercase - # as this is system dependent otherwise - if not fnmatch( - att.filename.lower(), - rule.filter_attachment_filename.lower(), - ): - continue + title = self.get_title(message, att, rule) - title = self.get_title(message, att, rule) + # don't trust the content type of the attachment. Could be + # generic application/octet-stream. + mime_type = magic.from_buffer(att.payload, mime=True) - # don't trust the content type of the attachment. Could be - # generic application/octet-stream. - mime_type = magic.from_buffer(att.payload, mime=True) + if is_mime_type_supported(mime_type): - if is_mime_type_supported(mime_type): + os.makedirs(settings.SCRATCH_DIR, exist_ok=True) + _, temp_filename = tempfile.mkstemp( + prefix="paperless-mail-", + dir=settings.SCRATCH_DIR, + ) + with open(temp_filename, "wb") as f: + f.write(att.payload) - os.makedirs(settings.SCRATCH_DIR, exist_ok=True) - _, temp_filename = tempfile.mkstemp( - prefix="paperless-mail-", - dir=settings.SCRATCH_DIR, - ) - with open(temp_filename, "wb") as f: - f.write(att.payload) + self.log( + "info", + f"Rule {rule}: " + f"Consuming attachment {att.filename} from mail " + f"{message.subject} from {message.from_}", + ) - self.log( - "info", - f"Rule {rule}: " - f"Consuming attachment {att.filename} from mail " - f"{message.subject} from {message.from_}", - ) + consume_file.delay( + path=temp_filename, + override_filename=pathvalidate.sanitize_filename( + att.filename, + ), + override_title=title, + override_correspondent_id=correspondent.id + if correspondent + else None, + override_document_type_id=doc_type.id if doc_type else None, + override_tag_ids=tag_ids, + ) - consume_file.delay( - path=temp_filename, - override_filename=pathvalidate.sanitize_filename( - att.filename, - ), - override_title=title, - override_correspondent_id=correspondent.id - if correspondent - else None, - override_document_type_id=doc_type.id if doc_type else None, - override_tag_ids=tag_ids, - ) + processed_attachments += 1 + else: + self.log( + "debug", + f"Rule {rule}: " + f"Skipping attachment {att.filename} " + f"since guessed mime type {mime_type} is not supported " + f"by paperless", + ) - processed_attachments += 1 - else: - self.log( - "debug", - f"Rule {rule}: " - f"Skipping attachment {att.filename} " - f"since guessed mime type {mime_type} is not supported " - f"by paperless", - ) + def process_eml( + self, + message: MailMessage, + rule: MailRule, + correspondent, + tag_ids, + doc_type, + ): + os.makedirs(settings.SCRATCH_DIR, exist_ok=True) + _, temp_filename = tempfile.mkstemp( + prefix="paperless-mail-", + dir=settings.SCRATCH_DIR, + suffix=".eml", + ) + with open(temp_filename, "wb") as f: + # Move "From"-header to beginning of file + # TODO: This ugly workaround is needed because the parser is + # chosen only by the mime_type detected via magic + # (see documents/consumer.py "mime_type = magic.from_file") + # Unfortunately magic sometimes fails to detect the mime + # type of .eml files correctly as message/rfc822 and instead + # detects text/plain. + # This also effects direct file consumption of .eml files + # which are not treated with this workaround. + from_element = None + for i, header in enumerate(message.obj._headers): + if header[0] == "From": + from_element = i + if from_element: + new_headers = [message.obj._headers.pop(from_element)] + new_headers += message.obj._headers + message.obj._headers = new_headers - return processed_attachments + f.write(message.obj.as_bytes()) + + self.log( + "info", + f"Rule {rule}: " + f"Consuming eml from mail " + f"{message.subject} from {message.from_}", + ) + + consume_file.delay( + path=temp_filename, + override_filename=pathvalidate.sanitize_filename( + message.subject + ".eml", + ), + override_title=message.subject, + override_correspondent_id=correspondent.id if correspondent else None, + override_document_type_id=doc_type.id if doc_type else None, + override_tag_ids=tag_ids, + ) + processed_elements = 1 + return processed_elements From 85c41b79be2033bdec5226c9687a153d7f4edc06 Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Sun, 20 Nov 2022 08:02:06 -0800 Subject: [PATCH 049/231] Adds the new packages without updating other dependencies --- Pipfile.lock | 560 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 338 insertions(+), 222 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 009cf83f9..74f3a6a86 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "a49c31147e62885e2c962cd0b19f18169d73aa4b89f9e1b27f61c996be3e3ea4" + "sha256": "548803b8c176073960d6fb5858949d1bb263b36f8811b2963d03a1a29ad65dd0" }, "pipfile-spec": 6, "requires": {}, @@ -126,7 +126,6 @@ "sha256:fafbd82934d30f8a004f81e8f7a062e31413a23d444be8ee3326553915958c6d" ], "index": "pypi", - "markers": null, "version": "==5.2.7" }, "certifi": { @@ -285,35 +284,36 @@ }, "cryptography": { "hashes": [ - "sha256:068147f32fa662c81aebab95c74679b401b12b57494872886eb5c1139250ec5d", - "sha256:06fc3cc7b6f6cca87bd56ec80a580c88f1da5306f505876a71c8cfa7050257dd", - "sha256:25c1d1f19729fb09d42e06b4bf9895212292cb27bb50229f5aa64d039ab29146", - "sha256:402852a0aea73833d982cabb6d0c3bb582c15483d29fb7085ef2c42bfa7e38d7", - "sha256:4e269dcd9b102c5a3d72be3c45d8ce20377b8076a43cbed6f660a1afe365e436", - "sha256:5419a127426084933076132d317911e3c6eb77568a1ce23c3ac1e12d111e61e0", - "sha256:554bec92ee7d1e9d10ded2f7e92a5d70c1f74ba9524947c0ba0c850c7b011828", - "sha256:5e89468fbd2fcd733b5899333bc54d0d06c80e04cd23d8c6f3e0542358c6060b", - "sha256:65535bc550b70bd6271984d9863a37741352b4aad6fb1b3344a54e6950249b55", - "sha256:6ab9516b85bebe7aa83f309bacc5f44a61eeb90d0b4ec125d2d003ce41932d36", - "sha256:6addc3b6d593cd980989261dc1cce38263c76954d758c3c94de51f1e010c9a50", - "sha256:728f2694fa743a996d7784a6194da430f197d5c58e2f4e278612b359f455e4a2", - "sha256:785e4056b5a8b28f05a533fab69febf5004458e20dad7e2e13a3120d8ecec75a", - "sha256:78cf5eefac2b52c10398a42765bfa981ce2372cbc0457e6bf9658f41ec3c41d8", - "sha256:7f836217000342d448e1c9a342e9163149e45d5b5eca76a30e84503a5a96cab0", - "sha256:8d41a46251bf0634e21fac50ffd643216ccecfaf3701a063257fe0b2be1b6548", - "sha256:984fe150f350a3c91e84de405fe49e688aa6092b3525f407a18b9646f6612320", - "sha256:9b24bcff7853ed18a63cfb0c2b008936a9554af24af2fb146e16d8e1aed75748", - "sha256:b1b35d9d3a65542ed2e9d90115dfd16bbc027b3f07ee3304fc83580f26e43249", - "sha256:b1b52c9e5f8aa2b802d48bd693190341fae201ea51c7a167d69fc48b60e8a959", - "sha256:bbf203f1a814007ce24bd4d51362991d5cb90ba0c177a9c08825f2cc304d871f", - "sha256:be243c7e2bfcf6cc4cb350c0d5cdf15ca6383bbcb2a8ef51d3c9411a9d4386f0", - "sha256:bfbe6ee19615b07a98b1d2287d6a6073f734735b49ee45b11324d85efc4d5cbd", - "sha256:c46837ea467ed1efea562bbeb543994c2d1f6e800785bd5a2c98bc096f5cb220", - "sha256:dfb4f4dd568de1b6af9f4cda334adf7d72cf5bc052516e1b2608b683375dd95c", - "sha256:ed7b00096790213e09eb11c97cc6e2b757f15f3d2f85833cd2d3ec3fe37c1722" + "sha256:0297ffc478bdd237f5ca3a7dc96fc0d315670bfa099c04dc3a4a2172008a405a", + "sha256:10d1f29d6292fc95acb597bacefd5b9e812099d75a6469004fd38ba5471a977f", + "sha256:16fa61e7481f4b77ef53991075de29fc5bacb582a1244046d2e8b4bb72ef66d0", + "sha256:194044c6b89a2f9f169df475cc167f6157eb9151cc69af8a2a163481d45cc407", + "sha256:1db3d807a14931fa317f96435695d9ec386be7b84b618cc61cfa5d08b0ae33d7", + "sha256:3261725c0ef84e7592597606f6583385fed2a5ec3909f43bc475ade9729a41d6", + "sha256:3b72c360427889b40f36dc214630e688c2fe03e16c162ef0aa41da7ab1455153", + "sha256:3e3a2599e640927089f932295a9a247fc40a5bdf69b0484532f530471a382750", + "sha256:3fc26e22840b77326a764ceb5f02ca2d342305fba08f002a8c1f139540cdfaad", + "sha256:5067ee7f2bce36b11d0e334abcd1ccf8c541fc0bbdaf57cdd511fdee53e879b6", + "sha256:52e7bee800ec869b4031093875279f1ff2ed12c1e2f74923e8f49c916afd1d3b", + "sha256:64760ba5331e3f1794d0bcaabc0d0c39e8c60bf67d09c93dc0e54189dfd7cfe5", + "sha256:765fa194a0f3372d83005ab83ab35d7c5526c4e22951e46059b8ac678b44fa5a", + "sha256:79473cf8a5cbc471979bd9378c9f425384980fcf2ab6534b18ed7d0d9843987d", + "sha256:896dd3a66959d3a5ddcfc140a53391f69ff1e8f25d93f0e2e7830c6de90ceb9d", + "sha256:89ed49784ba88c221756ff4d4755dbc03b3c8d2c5103f6d6b4f83a0fb1e85294", + "sha256:ac7e48f7e7261207d750fa7e55eac2d45f720027d5703cd9007e9b37bbb59ac0", + "sha256:ad7353f6ddf285aeadfaf79e5a6829110106ff8189391704c1d8801aa0bae45a", + "sha256:b0163a849b6f315bf52815e238bc2b2346604413fa7c1601eea84bcddb5fb9ac", + "sha256:b6c9b706316d7b5a137c35e14f4103e2115b088c412140fdbd5f87c73284df61", + "sha256:c2e5856248a416767322c8668ef1845ad46ee62629266f84a8f007a317141013", + "sha256:ca9f6784ea96b55ff41708b92c3f6aeaebde4c560308e5fbbd3173fbc466e94e", + "sha256:d1a5bd52d684e49a36582193e0b89ff267704cd4025abefb9e26803adeb3e5fb", + "sha256:d3971e2749a723e9084dd507584e2a2761f78ad2c638aa31e80bc7a15c9db4f9", + "sha256:d4ef6cc305394ed669d4d9eebf10d3a101059bdcf2669c366ec1d14e4fb227bd", + "sha256:d9e69ae01f99abe6ad646947bba8941e896cb3aa805be2597a0400e0764b5818" ], + "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==38.0.3" + "version": "==38.0.1" }, "daphne": { "hashes": [ @@ -549,14 +549,6 @@ "markers": "python_version >= '3.5'", "version": "==3.4" }, - "imagehash": { - "hashes": [ - "sha256:5ad9a5cde14fe255745a8245677293ac0d67f09c330986a351f34b614ba62fb5", - "sha256:7038d1b7f9e0585beb3dd8c0a956f02b95a346c0b5f24a9e8cc03ebadaf0aa70" - ], - "index": "pypi", - "version": "==4.3.1" - }, "imap-tools": { "hashes": [ "sha256:6f5572b2e747a81a607438e0ef61ff28f323f6697820493c8ca4467465baeb76", @@ -781,37 +773,37 @@ }, "numpy": { "hashes": [ - "sha256:01dd17cbb340bf0fc23981e52e1d18a9d4050792e8fb8363cecbf066a84b827d", - "sha256:06005a2ef6014e9956c09ba07654f9837d9e26696a0470e42beedadb78c11b07", - "sha256:09b7847f7e83ca37c6e627682f145856de331049013853f344f37b0c9690e3df", - "sha256:0aaee12d8883552fadfc41e96b4c82ee7d794949e2a7c3b3a7201e968c7ecab9", - "sha256:0cbe9848fad08baf71de1a39e12d1b6310f1d5b2d0ea4de051058e6e1076852d", - "sha256:1b1766d6f397c18153d40015ddfc79ddb715cabadc04d2d228d4e5a8bc4ded1a", - "sha256:33161613d2269025873025b33e879825ec7b1d831317e68f4f2f0f84ed14c719", - "sha256:5039f55555e1eab31124a5768898c9e22c25a65c1e0037f4d7c495a45778c9f2", - "sha256:522e26bbf6377e4d76403826ed689c295b0b238f46c28a7251ab94716da0b280", - "sha256:56e454c7833e94ec9769fa0f86e6ff8e42ee38ce0ce1fa4cbb747ea7e06d56aa", - "sha256:58f545efd1108e647604a1b5aa809591ccd2540f468a880bedb97247e72db387", - "sha256:5e05b1c973a9f858c74367553e236f287e749465f773328c8ef31abe18f691e1", - "sha256:7903ba8ab592b82014713c491f6c5d3a1cde5b4a3bf116404e08f5b52f6daf43", - "sha256:8969bfd28e85c81f3f94eb4a66bc2cf1dbdc5c18efc320af34bffc54d6b1e38f", - "sha256:92c8c1e89a1f5028a4c6d9e3ccbe311b6ba53694811269b992c0b224269e2398", - "sha256:9c88793f78fca17da0145455f0d7826bcb9f37da4764af27ac945488116efe63", - "sha256:a7ac231a08bb37f852849bbb387a20a57574a97cfc7b6cabb488a4fc8be176de", - "sha256:abdde9f795cf292fb9651ed48185503a2ff29be87770c3b8e2a14b0cd7aa16f8", - "sha256:af1da88f6bc3d2338ebbf0e22fe487821ea4d8e89053e25fa59d1d79786e7481", - "sha256:b2a9ab7c279c91974f756c84c365a669a887efa287365a8e2c418f8b3ba73fb0", - "sha256:bf837dc63ba5c06dc8797c398db1e223a466c7ece27a1f7b5232ba3466aafe3d", - "sha256:ca51fcfcc5f9354c45f400059e88bc09215fb71a48d3768fb80e357f3b457e1e", - "sha256:ce571367b6dfe60af04e04a1834ca2dc5f46004ac1cc756fb95319f64c095a96", - "sha256:d208a0f8729f3fb790ed18a003f3a57895b989b40ea4dce4717e9cf4af62c6bb", - "sha256:dbee87b469018961d1ad79b1a5d50c0ae850000b639bcb1b694e9981083243b6", - "sha256:e9f4c4e51567b616be64e05d517c79a8a22f3606499941d97bb76f2ca59f982d", - "sha256:f063b69b090c9d918f9df0a12116029e274daf0181df392839661c4c7ec9018a", - "sha256:f9a909a8bae284d46bbfdefbdd4a262ba19d3bc9921b1e76126b1d21c3c34135" + "sha256:0fe563fc8ed9dc4474cbf70742673fc4391d70f4363f917599a7fa99f042d5a8", + "sha256:12ac457b63ec8ded85d85c1e17d85efd3c2b0967ca39560b307a35a6703a4735", + "sha256:2341f4ab6dba0834b685cce16dad5f9b6606ea8a00e6da154f5dbded70fdc4dd", + "sha256:296d17aed51161dbad3c67ed6d164e51fcd18dbcd5dd4f9d0a9c6055dce30810", + "sha256:488a66cb667359534bc70028d653ba1cf307bae88eab5929cd707c761ff037db", + "sha256:4d52914c88b4930dafb6c48ba5115a96cbab40f45740239d9f4159c4ba779962", + "sha256:5e13030f8793e9ee42f9c7d5777465a560eb78fa7e11b1c053427f2ccab90c79", + "sha256:61be02e3bf810b60ab74e81d6d0d36246dbfb644a462458bb53b595791251911", + "sha256:7607b598217745cc40f751da38ffd03512d33ec06f3523fb0b5f82e09f6f676d", + "sha256:7a70a7d3ce4c0e9284e92285cba91a4a3f5214d87ee0e95928f3614a256a1488", + "sha256:7ab46e4e7ec63c8a5e6dbf5c1b9e1c92ba23a7ebecc86c336cb7bf3bd2fb10e5", + "sha256:8981d9b5619569899666170c7c9748920f4a5005bf79c72c07d08c8a035757b0", + "sha256:8c053d7557a8f022ec823196d242464b6955a7e7e5015b719e76003f63f82d0f", + "sha256:926db372bc4ac1edf81cfb6c59e2a881606b409ddc0d0920b988174b2e2a767f", + "sha256:95d79ada05005f6f4f337d3bb9de8a7774f259341c70bc88047a1f7b96a4bcb2", + "sha256:95de7dc7dc47a312f6feddd3da2500826defdccbc41608d0031276a24181a2c0", + "sha256:a0882323e0ca4245eb0a3d0a74f88ce581cc33aedcfa396e415e5bba7bf05f68", + "sha256:a8365b942f9c1a7d0f0dc974747d99dd0a0cdfc5949a33119caf05cb314682d3", + "sha256:a8aae2fb3180940011b4862b2dd3756616841c53db9734b27bb93813cd79fce6", + "sha256:c237129f0e732885c9a6076a537e974160482eab8f10db6292e92154d4c67d71", + "sha256:c67b833dbccefe97cdd3f52798d430b9d3430396af7cdb2a0c32954c3ef73894", + "sha256:ce03305dd694c4873b9429274fd41fc7eb4e0e4dea07e0af97a933b079a5814f", + "sha256:d331afac87c92373826af83d2b2b435f57b17a5c74e6268b79355b970626e329", + "sha256:dada341ebb79619fe00a291185bba370c9803b1e1d7051610e01ed809ef3a4ba", + "sha256:ed2cc92af0efad20198638c69bb0fc2870a58dabfba6eb722c933b48556c686c", + "sha256:f260da502d7441a45695199b4e7fd8ca87db659ba1c78f2bbf31f934fe76ae0e", + "sha256:f2f390aa4da44454db40a1f0201401f9036e8d578a25f01a6e237cea238337ef", + "sha256:f76025acc8e2114bb664294a07ede0727aa75d63a06d2fae96bf29a81747e4a7" ], "index": "pypi", - "version": "==1.23.5" + "version": "==1.23.4" }, "ocrmypdf": { "hashes": [ @@ -855,43 +847,43 @@ }, "pikepdf": { "hashes": [ - "sha256:0207442d9b943efec7eb07ea5b3f138d90cc61429a3c3243902ac909cb508fb2", - "sha256:0709832cc49ef51f004975e6e9bdc6daee8a8d68de621d428f13c95a83952e7f", - "sha256:07448689cc4c1e249e26ae694a2060210948e61035356cca3a5b8baf3a6a147d", - "sha256:0bbf45e702bb0556d705e1a4b5da391921e024cc1e6823675f2ea200acec1199", - "sha256:1376f3f4b1c34ac089a644af2e499ca713e4e4ec17035362350c0ec78ca6286e", - "sha256:15725f1bf572abb9a675f61874da66dc22144e74f374f7e8d023558e8c9c3f38", - "sha256:18383d8e6a620c52974b75034ad99c423f80468a434b52de456bb74d5ab51360", - "sha256:1dedbb95bb2c67d6923c91cdcd5a92703d10e4c4825d85cd7b8b474039978741", - "sha256:2035b39d2e5c97b6d9ede632f514403888e3f47d2b1e8b69b98420766ccb898b", - "sha256:2dd952e678dfc523f2c481c3d0a29b9823f07024f73dea7e9c03d2ac6592a61c", - "sha256:3d06dabf16592bb7975e1124000212c3c3bab1e97ed3f7c6534ea92efe9b621a", - "sha256:40999c3f48e5d0259662f6f708694d3ace43b01b4a2a197cfed5cf230557b116", - "sha256:46c7c9a7128d1751eedbe769dbc6c0a7983eccded74fd7d1e236d83a50c9cc58", - "sha256:529d4d099eecbdaa3e06490a032954ce96feae2596c1ea22f961dbf791444a3c", - "sha256:5887799a29510b53c7015b05d7276ee2e0f0ff1d782c75c3a3d1d9f68013665e", - "sha256:5c2de883986ef25e2e9b8ded8e5c285cb390950742164ce1bf116158009cd9c9", - "sha256:62a8c05876b9c7af4cad0ba9a8f22c77775bcceb118c35d682735955f5485297", - "sha256:6df4510606546c9c995afe3f799c506fe90798602b0628affffb7e1516fa1062", - "sha256:746897cbfc0c200de6be428a4e92dee72d0e03e1ff00d56006ee94fb59be199d", - "sha256:801100d8b4b885a203e76bc7266296f909944d621e6a0ac480fa2a0a0e0b1bb4", - "sha256:823f8b1cbad1182709d81afa32c23ac37b9c8ed33bdbc2b41f674be9420dc108", - "sha256:94057ca79525ba5eb5cc9c42337364f0e9e5f239887c0457dffb4ba3e6ac0187", - "sha256:9b1ba16cc5eb243c5e684c220752358a8e1e28a4e02ecdf2c3d24646f29c623f", - "sha256:9c9d75bb77dfe9b6f8915bc5339cfb0db427c3cb7cd75aa419b1da3c82f122ed", - "sha256:a0b78071d5fcd6b2288da469e89c030475095349dd57d82f5c40c37600d02e14", - "sha256:a1679c7d5b374895b6196784a75b8122ca0bb9248f5d97cd5ed77c569e264e88", - "sha256:ab8d610ca732a6369479605817cc55ee6f62d5b105ffe7e3749c3785c383631e", - "sha256:aff2ce52f0ab4ea8a1fbe57b06982b9fa9f997dd6bbec4b141091a1e71145a63", - "sha256:bc9b625f5ed454f445bf5012682b24d334adc9f853d41e44cfee7c52ddf92666", - "sha256:e0e66d49f8a85a4e0f915d42471643a5020bcdbef02586e49328ed417c13326a", - "sha256:e3dbcecc145d46d37738a407e0ddcce7cfb76d3e116ab3ba9c80f4dd14e71a3d", - "sha256:e99a90279a8254fa149d56cd307f94908c7844b2b8b42b61d241259804e40643", - "sha256:efc497cd01c55c5dbdd8a81766e317f44f728b3ceb65d7b6c6a064772c60e1c7", - "sha256:f35cecdab44cb01377e93a60a475bf4437854d98cb94379fcd65c6daa1c9a37e" + "sha256:053911bc19fbc987ff32e8e2836693480bef4c400785f700e8645729aecc7dae", + "sha256:0b10914b14667b7de19c9b27437cd798afee82690e16763965c7f7a2ab4da90a", + "sha256:0bed47afb90c78e2262e5b2e0d4722245b50c28bdaa317bdd39c4ef125d59a2c", + "sha256:0e51db2d246d277e3b11f3341b42c737deea60a49c3d8666388bff466fe1c4d0", + "sha256:3b9037377d9ca2b91c47b50ef9edb2fd295b0bf963ba14ee732da52006600677", + "sha256:475ef831d47e0aacd1bbfc366090c645bdc881bfdcf682f2a789860f645a1bf1", + "sha256:5233f8f1dee1bed95379c1b67af926725fe6d8ba210c587406f51a6bae651132", + "sha256:52fda5f8b730489a10cc492249465d52b4f190f7eb9b6c0cf80e49d5be3d8652", + "sha256:6129a5277f850ae6cdfd2cfff7e2c4a0b24618aee942a99763c84791dfbbd067", + "sha256:73281beedc1c234d50fe11f8beb55cc5ea2d43625ad7aa88dcdea54ef019939c", + "sha256:7e7ef427346a8324c32e9e2dbd6d10b0c9acaeb30d646223418206ff33594d7e", + "sha256:8338786c9912703dee8a501c1dd3b5e1065c22628cc4f781a548e378ae0f9f0c", + "sha256:8ba102fe535677c54c2e6cca65c9e3742ff7abb03934590a06c77a17c9e86827", + "sha256:91faf319bae1f7a9a0665b1622680296e6ec351497e8b3da1f7b83c8c2fbbc9c", + "sha256:93450025948474b656a6bef0f64c91f5d2f18b4234d7470c4bb8b77e8eb36dc4", + "sha256:972c6a21c9e49fc53a36b9550616b9240fc3291e07990db0e93d2ea4bfd7f5cd", + "sha256:9b403d7b24a09a090ebeb7760890c5386c515b86a6cc6d4f9c7b36eefe94b52f", + "sha256:9b94b0bb3adf6be2407aaca8693bb1589fa5021c019ac05b1a87db299feefebe", + "sha256:a0645e34902fe51205048e982f30e78e2b1fe767203988dd4b1395f6326cc4d9", + "sha256:a7e6f4ac418092a48dbd1809905edd5c6640f271c49981558a1c3da3753c0524", + "sha256:ae5aa1fd18373fd96b8ea6610d78d1c12a43e105291e45ceaaa54637e76a6929", + "sha256:b6066f3bcdef27e255be8f3b6e299ec4c04b50688872f6cabe8e27908574563c", + "sha256:ba4db2e76fe4292c3ea47e39acb72f417e7b31f4fc594c91426b88e6e01d4940", + "sha256:bb7d56298d74e307f0ace8d8e02eb9cd2a1421993542566eb605367aa4886d58", + "sha256:bf5b505b4ac50332eb550ae61cf64854f774f5ddb10339f5dd8b20cfa44fa8e9", + "sha256:c892bfd06b69ab26732daa53c2d85f864bff0a9422b0c03004cfb58797406b2a", + "sha256:c9c46bcae66c8ea181aa3fd961e98b46bc656e40cc33df9794c63a0c84d719b2", + "sha256:cff08868ee479ffbaa64fb425260ddce14bffbc21bdd2a3b3de941589abab741", + "sha256:dba7ad05626a0768708c1dfa11b28b8461c6750994159a06f2ac58e0045a9685", + "sha256:e089f720703d5e8c419634b08fad466d540d081005e41b6382afd7728d327029", + "sha256:f02c4f10a645f43bcde681b31d90f6313d8edce3480729cc6d78c5411f3e9772", + "sha256:f0ff1e4bfbafbeea902a0bfc23e8017443a3be485d02c92cd7dab9c16d50543c", + "sha256:f4539bc4a586ec8dce7ceba474be726ca64135c48ad61c47dfba98139a7aebfb", + "sha256:fa397d5ee36f357f1ba60103004c32befc9aa7e3143ef3a9fbf6e3686b2fed99" ], "index": "pypi", - "version": "==6.2.4" + "version": "==6.2.2" }, "pillow": { "hashes": [ @@ -1116,37 +1108,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", "version": "==0.1.0.post0" }, - "pywavelets": { - "hashes": [ - "sha256:030670a213ee8fefa56f6387b0c8e7d970c7f7ad6850dc048bd7c89364771b9b", - "sha256:058b46434eac4c04dd89aeef6fa39e4b6496a951d78c500b6641fd5b2cc2f9f4", - "sha256:231b0e0b1cdc1112f4af3c24eea7bf181c418d37922a67670e9bf6cfa2d544d4", - "sha256:23bafd60350b2b868076d976bdd92f950b3944f119b4754b1d7ff22b7acbf6c6", - "sha256:3f19327f2129fb7977bc59b966b4974dfd72879c093e44a7287500a7032695de", - "sha256:47cac4fa25bed76a45bc781a293c26ac63e8eaae9eb8f9be961758d22b58649c", - "sha256:578af438a02a86b70f1975b546f68aaaf38f28fb082a61ceb799816049ed18aa", - "sha256:6437af3ddf083118c26d8f97ab43b0724b956c9f958e9ea788659f6a2834ba93", - "sha256:64c6bac6204327321db30b775060fbe8e8642316e6bff17f06b9f34936f88875", - "sha256:67a0d28a08909f21400cb09ff62ba94c064882ffd9e3a6b27880a111211d59bd", - "sha256:71ab30f51ee4470741bb55fc6b197b4a2b612232e30f6ac069106f0156342356", - "sha256:7231461d7a8eb3bdc7aa2d97d9f67ea5a9f8902522818e7e2ead9c2b3408eeb1", - "sha256:754fa5085768227c4f4a26c1e0c78bc509a266d9ebd0eb69a278be7e3ece943c", - "sha256:7ab8d9db0fe549ab2ee0bea61f614e658dd2df419d5b75fba47baa761e95f8f2", - "sha256:875d4d620eee655346e3589a16a73790cf9f8917abba062234439b594e706784", - "sha256:88aa5449e109d8f5e7f0adef85f7f73b1ab086102865be64421a3a3d02d277f4", - "sha256:91d3d393cffa634f0e550d88c0e3f217c96cfb9e32781f2960876f1808d9b45b", - "sha256:9cb5ca8d11d3f98e89e65796a2125be98424d22e5ada360a0dbabff659fca0fc", - "sha256:ab7da0a17822cd2f6545626946d3b82d1a8e106afc4b50e3387719ba01c7b966", - "sha256:ad987748f60418d5f4138db89d82ba0cb49b086e0cbb8fd5c3ed4a814cfb705e", - "sha256:d0e56cd7a53aed3cceca91a04d62feb3a0aca6725b1912d29546c26f6ea90426", - "sha256:d854411eb5ee9cb4bc5d0e66e3634aeb8f594210f6a1bed96dbed57ec70f181c", - "sha256:da7b9c006171be1f9ddb12cc6e0d3d703b95f7f43cb5e2c6f5f15d3233fcf202", - "sha256:daf0aa79842b571308d7c31a9c43bc99a30b6328e6aea3f50388cd8f69ba7dbc", - "sha256:de7cd61a88a982edfec01ea755b0740e94766e00a1ceceeafef3ed4c85c605cd" - ], - "markers": "python_version >= '3.8'", - "version": "==1.4.1" - }, "pyyaml": { "hashes": [ "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf", @@ -1305,7 +1266,6 @@ "sha256:ddf27071df4adf3821c4f2ca59d67525c3a82e5f268bed97b813cb4fabf87880" ], "index": "pypi", - "markers": null, "version": "==4.3.4" }, "regex": { @@ -1578,11 +1538,11 @@ }, "setuptools": { "hashes": [ - "sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840", - "sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d" + "sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31", + "sha256:e197a19aa8ec9722928f2206f8de752def0e4c9fc6953527360d1c36d94ddb2f" ], "markers": "python_version >= '3.7'", - "version": "==65.6.0" + "version": "==65.5.1" }, "six": { "hashes": [ @@ -1672,7 +1632,7 @@ "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" ], - "markers": "python_version < '3.10'", + "markers": "python_version >= '3.7'", "version": "==4.4.0" }, "tzdata": { @@ -1704,12 +1664,11 @@ "standard" ], "hashes": [ - "sha256:a4e12017b940247f836bc90b72e725d7dfd0c8ed1c51eb365f5ba30d9f5127d8", - "sha256:c3ed1598a5668208723f2bb49336f4509424ad198d6ab2615b7783db58d919fd" + "sha256:cc277f7e73435748e69e075a721841f7c4a95dba06d12a72fe9874acced16f6f", + "sha256:cf538f3018536edb1f4a826311137ab4944ed741d52aeb98846f52215de57f25" ], "index": "pypi", - "markers": null, - "version": "==0.20.0" + "version": "==0.19.0" }, "uvloop": { "hashes": [ @@ -1993,45 +1952,49 @@ }, "zope.interface": { "hashes": [ - "sha256:008b0b65c05993bb08912f644d140530e775cf1c62a072bf9340c2249e613c32", - "sha256:0217a9615531c83aeedb12e126611b1b1a3175013bbafe57c702ce40000eb9a0", - "sha256:0fb497c6b088818e3395e302e426850f8236d8d9f4ef5b2836feae812a8f699c", - "sha256:17ebf6e0b1d07ed009738016abf0d0a0f80388e009d0ac6e0ead26fc162b3b9c", - "sha256:311196634bb9333aa06f00fc94f59d3a9fddd2305c2c425d86e406ddc6f2260d", - "sha256:3218ab1a7748327e08ef83cca63eea7cf20ea7e2ebcb2522072896e5e2fceedf", - "sha256:404d1e284eda9e233c90128697c71acffd55e183d70628aa0bbb0e7a3084ed8b", - "sha256:4087e253bd3bbbc3e615ecd0b6dd03c4e6a1e46d152d3be6d2ad08fbad742dcc", - "sha256:40f4065745e2c2fa0dff0e7ccd7c166a8ac9748974f960cd39f63d2c19f9231f", - "sha256:5334e2ef60d3d9439c08baedaf8b84dc9bb9522d0dacbc10572ef5609ef8db6d", - "sha256:604cdba8f1983d0ab78edc29aa71c8df0ada06fb147cea436dc37093a0100a4e", - "sha256:6373d7eb813a143cb7795d3e42bd8ed857c82a90571567e681e1b3841a390d16", - "sha256:655796a906fa3ca67273011c9805c1e1baa047781fca80feeb710328cdbed87f", - "sha256:65c3c06afee96c654e590e046c4a24559e65b0a87dbff256cd4bd6f77e1a33f9", - "sha256:696f3d5493eae7359887da55c2afa05acc3db5fc625c49529e84bd9992313296", - "sha256:6e972493cdfe4ad0411fd9abfab7d4d800a7317a93928217f1a5de2bb0f0d87a", - "sha256:7579960be23d1fddecb53898035a0d112ac858c3554018ce615cefc03024e46d", - "sha256:765d703096ca47aa5d93044bf701b00bbce4d903a95b41fff7c3796e747b1f1d", - "sha256:7e66f60b0067a10dd289b29dceabd3d0e6d68be1504fc9d0bc209cf07f56d189", - "sha256:8a2ffadefd0e7206adc86e492ccc60395f7edb5680adedf17a7ee4205c530df4", - "sha256:959697ef2757406bff71467a09d940ca364e724c534efbf3786e86eee8591452", - "sha256:9d783213fab61832dbb10d385a319cb0e45451088abd45f95b5bb88ed0acca1a", - "sha256:a16025df73d24795a0bde05504911d306307c24a64187752685ff6ea23897cb0", - "sha256:a2ad597c8c9e038a5912ac3cf166f82926feff2f6e0dabdab956768de0a258f5", - "sha256:bfee1f3ff62143819499e348f5b8a7f3aa0259f9aca5e0ddae7391d059dce671", - "sha256:d169ccd0756c15bbb2f1acc012f5aab279dffc334d733ca0d9362c5beaebe88e", - "sha256:d514c269d1f9f5cd05ddfed15298d6c418129f3f064765295659798349c43e6f", - "sha256:d692374b578360d36568dd05efb8a5a67ab6d1878c29c582e37ddba80e66c396", - "sha256:dbaeb9cf0ea0b3bc4b36fae54a016933d64c6d52a94810a63c00f440ecb37dd7", - "sha256:dc26c8d44472e035d59d6f1177eb712888447f5799743da9c398b0339ed90b1b", - "sha256:e1574980b48c8c74f83578d1e77e701f8439a5d93f36a5a0af31337467c08fcf", - "sha256:e74a578172525c20d7223eac5f8ad187f10940dac06e40113d62f14f3adb1e8f", - "sha256:e945de62917acbf853ab968d8916290548df18dd62c739d862f359ecd25842a6", - "sha256:f0980d44b8aded808bec5059018d64692f0127f10510eca71f2f0ace8fb11188", - "sha256:f98d4bd7bbb15ca701d19b93263cc5edfd480c3475d163f137385f49e5b3a3a7", - "sha256:fb68d212efd057596dee9e6582daded9f8ef776538afdf5feceb3059df2d2e7b" + "sha256:026e7da51147910435950a46c55159d68af319f6e909f14873d35d411f4961db", + "sha256:061a41a3f96f076686d7f1cb87f3deec6f0c9f0325dcc054ac7b504ae9bb0d82", + "sha256:0eda7f61da6606a28b5efa5d8ad79b4b5bb242488e53a58993b2ec46c924ffee", + "sha256:13a7c6e3df8aa453583412de5725bf761217d06f66ff4ed776d44fbcd13ec4e4", + "sha256:185f0faf6c3d8f2203e8755f7ca16b8964d97da0abde89c367177a04e36f2568", + "sha256:2204a9d545fdbe0d9b0bf4d5e2fc67e7977de59666f7131c1433fde292fc3b41", + "sha256:27c53aa2f46d42940ccdcb015fd525a42bf73f94acd886296794a41f229d5946", + "sha256:3c293c5c0e1cabe59c33e0d02fcee5c3eb365f79a20b8199a26ca784e406bd0d", + "sha256:3e42b1c3f4fd863323a8275c52c78681281a8f2e1790f0e869d911c1c7b25c46", + "sha256:3e5540b7d703774fd171b7a7dc2a3cb70e98fc273b8b260b1bf2f7d3928f125b", + "sha256:4477930451521ac7da97cc31d49f7b83086d5ae76e52baf16aac659053119f6d", + "sha256:475b6e371cdbeb024f2302e826222bdc202186531f6dc095e8986c034e4b7961", + "sha256:489c4c46fcbd9364f60ff0dcb93ec9026eca64b2f43dc3b05d0724092f205e27", + "sha256:509a8d39b64a5e8d473f3f3db981f3ca603d27d2bc023c482605c1b52ec15662", + "sha256:58331d2766e8e409360154d3178449d116220348d46386430097e63d02a1b6d2", + "sha256:59a96d499ff6faa9b85b1309f50bf3744eb786e24833f7b500cbb7052dc4ae29", + "sha256:6cb8f9a1db47017929634264b3fc7ea4c1a42a3e28d67a14f14aa7b71deaa0d2", + "sha256:6d678475fdeb11394dc9aaa5c564213a1567cc663082e0ee85d52f78d1fbaab2", + "sha256:72a93445937cc71f0b8372b0c9e7c185328e0db5e94d06383a1cb56705df1df4", + "sha256:76cf472c79d15dce5f438a4905a1309be57d2d01bc1de2de30bda61972a79ab4", + "sha256:7b4547a2f624a537e90fb99cec4d8b3b6be4af3f449c3477155aae65396724ad", + "sha256:7f2e4ebe0a000c5727ee04227cf0ff5ae612fe599f88d494216e695b1dac744d", + "sha256:8343536ea4ee15d6525e3e726bb49ffc3f2034f828a49237a36be96842c06e7c", + "sha256:8de7bde839d72d96e0c92e8d1fdb4862e89b8fc52514d14b101ca317d9bcf87c", + "sha256:90f611d4cdf82fb28837fe15c3940255755572a4edf4c72e2306dbce7dcb3092", + "sha256:9ad58724fabb429d1ebb6f334361f0a3b35f96be0e74bfca6f7de8530688b2df", + "sha256:a1393229c9c126dd1b4356338421e8882347347ab6fe3230cb7044edc813e424", + "sha256:a20fc9cccbda2a28e8db8cabf2f47fead7e9e49d317547af6bf86a7269e4b9a1", + "sha256:a69f6d8b639f2317ba54278b64fef51d8250ad2c87acac1408b9cc461e4d6bb6", + "sha256:a6f51ffbdcf865f140f55c484001415505f5e68eb0a9eab1d37d0743b503b423", + "sha256:c9552ee9e123b7997c7630fb95c466ee816d19e721c67e4da35351c5f4032726", + "sha256:cd423d49abcf0ebf02c29c3daffe246ff756addb891f8aab717b3a4e2e1fd675", + "sha256:d0587d238b7867544134f4dcca19328371b8fd03fc2c56d15786f410792d0a68", + "sha256:d1f2d91c9c6cd54d750fa34f18bd73c71b372d0e6d06843bc7a5f21f5fd66fe0", + "sha256:d2f2ec42fbc21e1af5f129ec295e29fee6f93563e6388656975caebc5f851561", + "sha256:d743b03a72fefed807a4512c079fb1aa5e7777036cc7a4b6ff79ae4650a14f73", + "sha256:dd4b9251e95020c3d5d104b528dbf53629d09c146ce9c8dfaaf8f619ae1cce35", + "sha256:e4988d94962f517f6da2d52337170b84856905b31b7dc504ed9c7b7e4bab2fc3", + "sha256:e6a923d2dec50f2b4d41ce198af3516517f2e458220942cf393839d2f9e22000", + "sha256:e8c8764226daad39004b7873c3880eb4860c594ff549ea47c045cdf313e1bad5" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==5.5.2" + "version": "==5.5.1" } }, "develop": { @@ -2212,11 +2175,11 @@ }, "exceptiongroup": { "hashes": [ - "sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828", - "sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec" + "sha256:4d6c0aa6dd825810941c792f53d7b8d71da26f5e5f84f20f9508e8f2d33b140a", + "sha256:73866f7f842ede6cb1daa42c4af078e2035e5f7607f0e2c762cc51bb31bbe7b2" ], "markers": "python_version < '3.11'", - "version": "==1.0.4" + "version": "==1.0.1" }, "execnet": { "hashes": [ @@ -2236,11 +2199,11 @@ }, "faker": { "hashes": [ - "sha256:0094fe3340ad73c490d3ffccc59cc171b161acfccccd52925c70970ba23e6d6b", - "sha256:43da04aae745018e8bded768e74c84423d9dc38e4c498a53439e749d90e20bc0" + "sha256:4a3465624515a6807e8aa7e8eeb85bdd86a2fa53de4e258892dd6be95362462e", + "sha256:b9dd2fd9a9ac68a4e0c5040cd9e9bfaa099fa8dd15bae5f01f224a45431818d5" ], "markers": "python_version >= '3.7'", - "version": "==15.3.2" + "version": "==15.3.1" }, "filelock": { "hashes": [ @@ -2252,11 +2215,11 @@ }, "identify": { "hashes": [ - "sha256:906036344ca769539610436e40a684e170c3648b552194980bb7b617a8daeb9f", - "sha256:a390fb696e164dbddb047a0db26e57972ae52fbd037ae68797e5ae2f4492485d" + "sha256:48b7925fe122720088aeb7a6c34f17b27e706b72c61070f27fe3789094233440", + "sha256:7a214a10313b9489a0d61467db2856ae8d0b8306fc923e03a9effa53d8aedc58" ], "markers": "python_version >= '3.7'", - "version": "==2.5.9" + "version": "==2.5.8" }, "idna": { "hashes": [ @@ -2266,6 +2229,14 @@ "markers": "python_version >= '3.5'", "version": "==3.4" }, + "imagehash": { + "hashes": [ + "sha256:5ad9a5cde14fe255745a8245677293ac0d67f09c330986a351f34b614ba62fb5", + "sha256:7038d1b7f9e0585beb3dd8c0a956f02b95a346c0b5f24a9e8cc03ebadaf0aa70" + ], + "index": "pypi", + "version": "==4.3.1" + }, "imagesize": { "hashes": [ "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", @@ -2274,14 +2245,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.4.1" }, - "importlib-metadata": { - "hashes": [ - "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab", - "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43" - ], - "markers": "python_version < '3.10'", - "version": "==5.0.0" - }, "iniconfig": { "hashes": [ "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", @@ -2396,6 +2359,40 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", "version": "==1.7.0" }, + "numpy": { + "hashes": [ + "sha256:0fe563fc8ed9dc4474cbf70742673fc4391d70f4363f917599a7fa99f042d5a8", + "sha256:12ac457b63ec8ded85d85c1e17d85efd3c2b0967ca39560b307a35a6703a4735", + "sha256:2341f4ab6dba0834b685cce16dad5f9b6606ea8a00e6da154f5dbded70fdc4dd", + "sha256:296d17aed51161dbad3c67ed6d164e51fcd18dbcd5dd4f9d0a9c6055dce30810", + "sha256:488a66cb667359534bc70028d653ba1cf307bae88eab5929cd707c761ff037db", + "sha256:4d52914c88b4930dafb6c48ba5115a96cbab40f45740239d9f4159c4ba779962", + "sha256:5e13030f8793e9ee42f9c7d5777465a560eb78fa7e11b1c053427f2ccab90c79", + "sha256:61be02e3bf810b60ab74e81d6d0d36246dbfb644a462458bb53b595791251911", + "sha256:7607b598217745cc40f751da38ffd03512d33ec06f3523fb0b5f82e09f6f676d", + "sha256:7a70a7d3ce4c0e9284e92285cba91a4a3f5214d87ee0e95928f3614a256a1488", + "sha256:7ab46e4e7ec63c8a5e6dbf5c1b9e1c92ba23a7ebecc86c336cb7bf3bd2fb10e5", + "sha256:8981d9b5619569899666170c7c9748920f4a5005bf79c72c07d08c8a035757b0", + "sha256:8c053d7557a8f022ec823196d242464b6955a7e7e5015b719e76003f63f82d0f", + "sha256:926db372bc4ac1edf81cfb6c59e2a881606b409ddc0d0920b988174b2e2a767f", + "sha256:95d79ada05005f6f4f337d3bb9de8a7774f259341c70bc88047a1f7b96a4bcb2", + "sha256:95de7dc7dc47a312f6feddd3da2500826defdccbc41608d0031276a24181a2c0", + "sha256:a0882323e0ca4245eb0a3d0a74f88ce581cc33aedcfa396e415e5bba7bf05f68", + "sha256:a8365b942f9c1a7d0f0dc974747d99dd0a0cdfc5949a33119caf05cb314682d3", + "sha256:a8aae2fb3180940011b4862b2dd3756616841c53db9734b27bb93813cd79fce6", + "sha256:c237129f0e732885c9a6076a537e974160482eab8f10db6292e92154d4c67d71", + "sha256:c67b833dbccefe97cdd3f52798d430b9d3430396af7cdb2a0c32954c3ef73894", + "sha256:ce03305dd694c4873b9429274fd41fc7eb4e0e4dea07e0af97a933b079a5814f", + "sha256:d331afac87c92373826af83d2b2b435f57b17a5c74e6268b79355b970626e329", + "sha256:dada341ebb79619fe00a291185bba370c9803b1e1d7051610e01ed809ef3a4ba", + "sha256:ed2cc92af0efad20198638c69bb0fc2870a58dabfba6eb722c933b48556c686c", + "sha256:f260da502d7441a45695199b4e7fd8ca87db659ba1c78f2bbf31f934fe76ae0e", + "sha256:f2f390aa4da44454db40a1f0201401f9036e8d578a25f01a6e237cea238337ef", + "sha256:f76025acc8e2114bb664294a07ede0727aa75d63a06d2fae96bf29a81747e4a7" + ], + "index": "pypi", + "version": "==1.23.4" + }, "packaging": { "hashes": [ "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", @@ -2406,19 +2403,86 @@ }, "pathspec": { "hashes": [ - "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5", - "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0" + "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93", + "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d" ], "markers": "python_version >= '3.7'", - "version": "==0.10.2" + "version": "==0.10.1" + }, + "pillow": { + "hashes": [ + "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040", + "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8", + "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65", + "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2", + "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627", + "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07", + "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef", + "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535", + "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c", + "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc", + "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3", + "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1", + "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c", + "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa", + "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32", + "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502", + "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4", + "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f", + "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812", + "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636", + "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20", + "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c", + "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91", + "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe", + "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b", + "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad", + "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9", + "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72", + "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4", + "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de", + "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29", + "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee", + "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c", + "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7", + "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11", + "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c", + "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c", + "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448", + "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b", + "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20", + "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228", + "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd", + "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699", + "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b", + "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2", + "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4", + "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c", + "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f", + "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2", + "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c", + "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3", + "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193", + "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48", + "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02", + "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8", + "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e", + "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f", + "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b", + "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74", + "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb", + "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0" + ], + "index": "pypi", + "version": "==9.3.0" }, "platformdirs": { "hashes": [ - "sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7", - "sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10" + "sha256:0cb405749187a194f444c25c82ef7225232f11564721eabffc6ec70df83b11cb", + "sha256:6e52c21afff35cb659c6e52d8b4d61b9bd544557180440538f255d9382c8cbe0" ], "markers": "python_version >= '3.7'", - "version": "==2.5.4" + "version": "==2.5.3" }, "pluggy": { "hashes": [ @@ -2531,6 +2595,37 @@ ], "version": "==2022.6" }, + "pywavelets": { + "hashes": [ + "sha256:030670a213ee8fefa56f6387b0c8e7d970c7f7ad6850dc048bd7c89364771b9b", + "sha256:058b46434eac4c04dd89aeef6fa39e4b6496a951d78c500b6641fd5b2cc2f9f4", + "sha256:231b0e0b1cdc1112f4af3c24eea7bf181c418d37922a67670e9bf6cfa2d544d4", + "sha256:23bafd60350b2b868076d976bdd92f950b3944f119b4754b1d7ff22b7acbf6c6", + "sha256:3f19327f2129fb7977bc59b966b4974dfd72879c093e44a7287500a7032695de", + "sha256:47cac4fa25bed76a45bc781a293c26ac63e8eaae9eb8f9be961758d22b58649c", + "sha256:578af438a02a86b70f1975b546f68aaaf38f28fb082a61ceb799816049ed18aa", + "sha256:6437af3ddf083118c26d8f97ab43b0724b956c9f958e9ea788659f6a2834ba93", + "sha256:64c6bac6204327321db30b775060fbe8e8642316e6bff17f06b9f34936f88875", + "sha256:67a0d28a08909f21400cb09ff62ba94c064882ffd9e3a6b27880a111211d59bd", + "sha256:71ab30f51ee4470741bb55fc6b197b4a2b612232e30f6ac069106f0156342356", + "sha256:7231461d7a8eb3bdc7aa2d97d9f67ea5a9f8902522818e7e2ead9c2b3408eeb1", + "sha256:754fa5085768227c4f4a26c1e0c78bc509a266d9ebd0eb69a278be7e3ece943c", + "sha256:7ab8d9db0fe549ab2ee0bea61f614e658dd2df419d5b75fba47baa761e95f8f2", + "sha256:875d4d620eee655346e3589a16a73790cf9f8917abba062234439b594e706784", + "sha256:88aa5449e109d8f5e7f0adef85f7f73b1ab086102865be64421a3a3d02d277f4", + "sha256:91d3d393cffa634f0e550d88c0e3f217c96cfb9e32781f2960876f1808d9b45b", + "sha256:9cb5ca8d11d3f98e89e65796a2125be98424d22e5ada360a0dbabff659fca0fc", + "sha256:ab7da0a17822cd2f6545626946d3b82d1a8e106afc4b50e3387719ba01c7b966", + "sha256:ad987748f60418d5f4138db89d82ba0cb49b086e0cbb8fd5c3ed4a814cfb705e", + "sha256:d0e56cd7a53aed3cceca91a04d62feb3a0aca6725b1912d29546c26f6ea90426", + "sha256:d854411eb5ee9cb4bc5d0e66e3634aeb8f594210f6a1bed96dbed57ec70f181c", + "sha256:da7b9c006171be1f9ddb12cc6e0d3d703b95f7f43cb5e2c6f5f15d3233fcf202", + "sha256:daf0aa79842b571308d7c31a9c43bc99a30b6328e6aea3f50388cd8f69ba7dbc", + "sha256:de7cd61a88a982edfec01ea755b0740e94766e00a1ceceeafef3ed4c85c605cd" + ], + "markers": "python_version >= '3.8'", + "version": "==1.4.1" + }, "pyyaml": { "hashes": [ "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf", @@ -2584,13 +2679,42 @@ "markers": "python_version >= '3.7' and python_version < '4'", "version": "==2.28.1" }, + "scipy": { + "hashes": [ + "sha256:02b567e722d62bddd4ac253dafb01ce7ed8742cf8031aea030a41414b86c1125", + "sha256:1166514aa3bbf04cb5941027c6e294a000bba0cf00f5cdac6c77f2dad479b434", + "sha256:1da52b45ce1a24a4a22db6c157c38b39885a990a566748fc904ec9f03ed8c6ba", + "sha256:23b22fbeef3807966ea42d8163322366dd89da9bebdc075da7034cee3a1441ca", + "sha256:28d2cab0c6ac5aa131cc5071a3a1d8e1366dad82288d9ec2ca44df78fb50e649", + "sha256:2ef0fbc8bcf102c1998c1f16f15befe7cffba90895d6e84861cd6c6a33fb54f6", + "sha256:3b69b90c9419884efeffaac2c38376d6ef566e6e730a231e15722b0ab58f0328", + "sha256:4b93ec6f4c3c4d041b26b5f179a6aab8f5045423117ae7a45ba9710301d7e462", + "sha256:4e53a55f6a4f22de01ffe1d2f016e30adedb67a699a310cdcac312806807ca81", + "sha256:6311e3ae9cc75f77c33076cb2794fb0606f14c8f1b1c9ff8ce6005ba2c283621", + "sha256:65b77f20202599c51eb2771d11a6b899b97989159b7975e9b5259594f1d35ef4", + "sha256:6cc6b33139eb63f30725d5f7fa175763dc2df6a8f38ddf8df971f7c345b652dc", + "sha256:70de2f11bf64ca9921fda018864c78af7147025e467ce9f4a11bc877266900a6", + "sha256:70ebc84134cf0c504ce6a5f12d6db92cb2a8a53a49437a6bb4edca0bc101f11c", + "sha256:83606129247e7610b58d0e1e93d2c5133959e9cf93555d3c27e536892f1ba1f2", + "sha256:93d07494a8900d55492401917a119948ed330b8c3f1d700e0b904a578f10ead4", + "sha256:9c4e3ae8a716c8b3151e16c05edb1daf4cb4d866caa385e861556aff41300c14", + "sha256:9dd4012ac599a1e7eb63c114d1eee1bcfc6dc75a29b589ff0ad0bb3d9412034f", + "sha256:9e3fb1b0e896f14a85aa9a28d5f755daaeeb54c897b746df7a55ccb02b340f33", + "sha256:a0aa8220b89b2e3748a2836fbfa116194378910f1a6e78e4675a095bcd2c762d", + "sha256:d3b3c8924252caaffc54d4a99f1360aeec001e61267595561089f8b5900821bb", + "sha256:e013aed00ed776d790be4cb32826adb72799c61e318676172495383ba4570aa4", + "sha256:f3e7a8867f307e3359cc0ed2c63b61a1e33a19080f92fe377bc7d49f646f2ec1" + ], + "index": "pypi", + "version": "==1.8.1" + }, "setuptools": { "hashes": [ - "sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840", - "sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d" + "sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31", + "sha256:e197a19aa8ec9722928f2206f8de752def0e4c9fc6953527360d1c36d94ddb2f" ], "markers": "python_version >= '3.7'", - "version": "==65.6.0" + "version": "==65.5.1" }, "six": { "hashes": [ @@ -2681,11 +2805,11 @@ }, "termcolor": { "hashes": [ - "sha256:67cee2009adc6449c650f6bcf3bdeed00c8ba53a8cda5362733c53e0a39fb70b", - "sha256:fa852e957f97252205e105dd55bbc23b419a70fec0085708fc0515e399f304fd" + "sha256:91dd04fdf661b89d7169cefd35f609b19ca931eb033687eaa647cef1ff177c49", + "sha256:b80df54667ce4f48c03fe35df194f052dc27a541ebbf2544e4d6b47b5d6949c4" ], "markers": "python_version >= '3.7'", - "version": "==2.1.1" + "version": "==2.1.0" }, "toml": { "hashes": [ @@ -2722,18 +2846,18 @@ }, "tox": { "hashes": [ - "sha256:b2a920e35a668cc06942ffd1cf3a4fb221a4d909ca72191fb6d84b0b18a7be04", - "sha256:f52ca66eae115fcfef0e77ef81fd107133d295c97c52df337adedb8dfac6ab84" + "sha256:89e4bc6df3854e9fc5582462e328dd3660d7d865ba625ae5881bbc63836a6324", + "sha256:d2c945f02a03d4501374a3d5430877380deb69b218b1df9b7f1d2f2a10befaf9" ], "index": "pypi", - "version": "==3.27.1" + "version": "==3.27.0" }, "typing-extensions": { "hashes": [ "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" ], - "markers": "python_version < '3.10'", + "markers": "python_version >= '3.7'", "version": "==4.4.0" }, "urllib3": { @@ -2746,19 +2870,11 @@ }, "virtualenv": { "hashes": [ - "sha256:8691e3ff9387f743e00f6bb20f70121f5e4f596cae754531f2b3b3a1b1ac696e", - "sha256:efd66b00386fdb7dbe4822d172303f40cd05e50e01740b19ea42425cbe653e29" + "sha256:186ca84254abcbde98180fd17092f9628c5fe742273c02724972a1d8a2035108", + "sha256:530b850b523c6449406dfba859d6345e48ef19b8439606c5d74d7d3c9e14d76e" ], "markers": "python_version >= '3.6'", - "version": "==20.16.7" - }, - "zipp": { - "hashes": [ - "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1", - "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8" - ], - "markers": "python_version < '3.9'", - "version": "==3.10.0" + "version": "==20.16.6" } } } From 538a4219bd951a03c403133087954ac64d4b53a2 Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Sun, 20 Nov 2022 09:10:44 -0800 Subject: [PATCH 050/231] Fixes missing return --- src/paperless_mail/mail.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index d4a6703c6..9ac03db6e 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -476,6 +476,7 @@ class MailAccountHandler(LoggingMixin): f"since guessed mime type {mime_type} is not supported " f"by paperless", ) + return processed_attachments def process_eml( self, From f6a70b85f4cff8d490884a2a11ba45f44c286a98 Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Sun, 20 Nov 2022 09:13:08 -0800 Subject: [PATCH 051/231] Use Django templating engine --- src/paperless_mail/parsers.py | 25 +++++++------------ .../email_msg_template.html} | 3 +++ .../{mail_template => templates}/input.css | 0 .../{mail_template => templates}/output.css | 0 .../package-lock.json | 0 .../{mail_template => templates}/package.json | 0 .../tailwind.config.js | 0 src/paperless_mail/tests/test_parsers.py | 5 ++-- 8 files changed, 15 insertions(+), 18 deletions(-) rename src/paperless_mail/{mail_template/index.html => templates/email_msg_template.html} (97%) rename src/paperless_mail/{mail_template => templates}/input.css (100%) rename src/paperless_mail/{mail_template => templates}/output.css (100%) rename src/paperless_mail/{mail_template => templates}/package-lock.json (100%) rename src/paperless_mail/{mail_template => templates}/package.json (100%) rename src/paperless_mail/{mail_template => templates}/tailwind.config.js (100%) diff --git a/src/paperless_mail/parsers.py b/src/paperless_mail/parsers.py index b325b79d5..c9c4e7e90 100644 --- a/src/paperless_mail/parsers.py +++ b/src/paperless_mail/parsers.py @@ -229,21 +229,14 @@ class MailDocumentParser(DocumentParser): data["date"] = clean_html(mail.date.astimezone().strftime("%Y-%m-%d %H:%M")) data["content"] = clean_html(mail.text.strip()) - html_file = os.path.join(os.path.dirname(__file__), "mail_template/index.html") - placeholder_pattern = re.compile(r"{{(.+)}}") - html = StringIO() - with open(html_file) as html_template_handle: - for line in html_template_handle.readlines(): - for placeholder in placeholder_pattern.findall(line): - line = re.sub( - "{{" + placeholder + "}}", - data.get(placeholder.strip(), ""), - line, - ) - html.write(line) - html.seek(0) + from django.template.loader import render_to_string + + rendered = render_to_string("email_msg_template.html", context=data) + + html.write(rendered) + html.seek(0) return html @@ -252,12 +245,12 @@ class MailDocumentParser(DocumentParser): url = self.gotenberg_server + "/forms/chromium/convert/html" self.log("info", "Converting mail to PDF") - css_file = os.path.join(os.path.dirname(__file__), "mail_template/output.css") + css_file = os.path.join(os.path.dirname(__file__), "templates/output.css") with open(css_file, "rb") as css_handle: files = { - "html": ("index.html", self.mail_to_html(mail)), + "html": ("email_msg_template.html", self.mail_to_html(mail)), "css": ("output.css", css_handle), } headers = {} @@ -302,7 +295,7 @@ class MailDocumentParser(DocumentParser): files.append((name_clean, BytesIO(a.payload))) html_clean = html_clean.replace(name_cid, name_clean) - files.append(("index.html", StringIO(html_clean))) + files.append(("email_msg_template.html", StringIO(html_clean))) return files diff --git a/src/paperless_mail/mail_template/index.html b/src/paperless_mail/templates/email_msg_template.html similarity index 97% rename from src/paperless_mail/mail_template/index.html rename to src/paperless_mail/templates/email_msg_template.html index d801f57ef..a22666957 100644 --- a/src/paperless_mail/mail_template/index.html +++ b/src/paperless_mail/templates/email_msg_template.html @@ -1,3 +1,4 @@ +{% autoescape off %} @@ -43,3 +44,5 @@ + +{% endautoescape %} diff --git a/src/paperless_mail/mail_template/input.css b/src/paperless_mail/templates/input.css similarity index 100% rename from src/paperless_mail/mail_template/input.css rename to src/paperless_mail/templates/input.css diff --git a/src/paperless_mail/mail_template/output.css b/src/paperless_mail/templates/output.css similarity index 100% rename from src/paperless_mail/mail_template/output.css rename to src/paperless_mail/templates/output.css diff --git a/src/paperless_mail/mail_template/package-lock.json b/src/paperless_mail/templates/package-lock.json similarity index 100% rename from src/paperless_mail/mail_template/package-lock.json rename to src/paperless_mail/templates/package-lock.json diff --git a/src/paperless_mail/mail_template/package.json b/src/paperless_mail/templates/package.json similarity index 100% rename from src/paperless_mail/mail_template/package.json rename to src/paperless_mail/templates/package.json diff --git a/src/paperless_mail/mail_template/tailwind.config.js b/src/paperless_mail/templates/tailwind.config.js similarity index 100% rename from src/paperless_mail/mail_template/tailwind.config.js rename to src/paperless_mail/templates/tailwind.config.js diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py index 892d1feb7..6de97b30e 100644 --- a/src/paperless_mail/tests/test_parsers.py +++ b/src/paperless_mail/tests/test_parsers.py @@ -369,6 +369,7 @@ class TestParser(TestCase): os.path.join(self.SAMPLE_FILES, "html.eml.html"), ) as html_expected_handle: html_expected = html_expected_handle.read() + self.assertHTMLEqual(html_expected, html_received) @mock.patch("paperless_mail.parsers.requests.post") @@ -436,7 +437,7 @@ class TestParser(TestCase): result = self.parser.transform_inline_html(html, attachments) resulting_html = result[-1][1].read() - self.assertTrue(result[-1][0] == "index.html") + self.assertTrue(result[-1][0] == "email_msg_template.html") self.assertTrue(result[0][0] in resulting_html) self.assertFalse(" Date: Sun, 20 Nov 2022 09:15:06 -0800 Subject: [PATCH 052/231] Fixes one more place which used manual size formatting --- src/paperless_mail/parsers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/paperless_mail/parsers.py b/src/paperless_mail/parsers.py index c9c4e7e90..bf67314cb 100644 --- a/src/paperless_mail/parsers.py +++ b/src/paperless_mail/parsers.py @@ -85,7 +85,8 @@ class MailDocumentParser(DocumentParser): "prefix": "", "key": "attachments", "value": ", ".join( - f"{attachment.filename}({(attachment.size / 1024):.2f} KiB)" + f"{attachment.filename}" + f"({format_size(attachment.size, binary=True)})" for attachment in mail.attachments ), }, From af8a6c3764659efa285b24ede4759aeb99eb6bcb Mon Sep 17 00:00:00 2001 From: phail Date: Sun, 20 Nov 2022 19:53:57 +0100 Subject: [PATCH 053/231] fix filenames --- src/paperless_mail/parsers.py | 4 ++-- src/paperless_mail/tests/test_parsers.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/paperless_mail/parsers.py b/src/paperless_mail/parsers.py index bf67314cb..8f8dd2d37 100644 --- a/src/paperless_mail/parsers.py +++ b/src/paperless_mail/parsers.py @@ -251,7 +251,7 @@ class MailDocumentParser(DocumentParser): with open(css_file, "rb") as css_handle: files = { - "html": ("email_msg_template.html", self.mail_to_html(mail)), + "html": ("index.html", self.mail_to_html(mail)), "css": ("output.css", css_handle), } headers = {} @@ -296,7 +296,7 @@ class MailDocumentParser(DocumentParser): files.append((name_clean, BytesIO(a.payload))) html_clean = html_clean.replace(name_cid, name_clean) - files.append(("email_msg_template.html", StringIO(html_clean))) + files.append(("index.html", StringIO(html_clean))) return files diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py index 6de97b30e..0d533b4f1 100644 --- a/src/paperless_mail/tests/test_parsers.py +++ b/src/paperless_mail/tests/test_parsers.py @@ -437,7 +437,7 @@ class TestParser(TestCase): result = self.parser.transform_inline_html(html, attachments) resulting_html = result[-1][1].read() - self.assertTrue(result[-1][0] == "email_msg_template.html") + self.assertTrue(result[-1][0] == "index.html") self.assertTrue(result[0][0] in resulting_html) self.assertFalse(" Date: Sun, 20 Nov 2022 20:12:41 +0100 Subject: [PATCH 054/231] minor test improvements --- src/paperless_mail/tests/test_parsers.py | 99 +++++++++++++----------- 1 file changed, 52 insertions(+), 47 deletions(-) diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py index 0d533b4f1..315e82a1a 100644 --- a/src/paperless_mail/tests/test_parsers.py +++ b/src/paperless_mail/tests/test_parsers.py @@ -92,125 +92,130 @@ class TestParser(TestCase): "message/rfc822", ) - self.assertTrue( - {"namespace": "", "prefix": "", "key": "attachments", "value": ""} - in metadata, + self.assertIn( + {"namespace": "", "prefix": "", "key": "attachments", "value": ""}, + metadata, ) - self.assertTrue( + self.assertIn( { "namespace": "", "prefix": "", "key": "date", "value": "2022-10-12 21:40:43 UTC+02:00", - } - in metadata, + }, + metadata, ) - self.assertTrue( + self.assertIn( { "namespace": "", "prefix": "header", "key": "content-language", "value": "en-US", - } - in metadata, + }, + metadata, ) - self.assertTrue( + self.assertIn( { "namespace": "", "prefix": "header", "key": "content-type", "value": "text/plain; charset=UTF-8; format=flowed", - } - in metadata, + }, + metadata, ) - self.assertTrue( + self.assertIn( { "namespace": "", "prefix": "header", "key": "date", "value": "Wed, 12 Oct 2022 21:40:43 +0200", - } - in metadata, + }, + metadata, ) - self.assertTrue( + self.assertIn( { "namespace": "", "prefix": "header", "key": "delivered-to", "value": "mail@someserver.de", - } - in metadata, + }, + metadata, ) - self.assertTrue( + self.assertIn( { "namespace": "", "prefix": "header", "key": "from", "value": "Some One ", - } - in metadata, + }, + metadata, ) - self.assertTrue( + self.assertIn( { "namespace": "", "prefix": "header", "key": "message-id", "value": "<6e99e34d-e20a-80c4-ea61-d8234b612be9@someserver.de>", - } - in metadata, + }, + metadata, ) - self.assertTrue( - {"namespace": "", "prefix": "header", "key": "mime-version", "value": "1.0"} - in metadata, + self.assertIn( + { + "namespace": "", + "prefix": "header", + "key": "mime-version", + "value": "1.0", + }, + metadata, ) - self.assertTrue( + self.assertIn( { "namespace": "", "prefix": "header", "key": "received", "value": "from mail.someserver.org ([::1])\n\tby e1acdba3bd07 with LMTP\n\tid KBKZGD2YR2NTCgQAjubtDA\n\t(envelope-from )\n\tfor ; Wed, 10 Oct 2022 11:40:46 +0200, from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 2BC9064C1616\n\tfor ; Wed, 12 Oct 2022 21:40:46 +0200 (CEST)", - } - in metadata, + }, + metadata, ) - self.assertTrue( + self.assertIn( { "namespace": "", "prefix": "header", "key": "return-path", "value": "", - } - in metadata, + }, + metadata, ) - self.assertTrue( + self.assertIn( { "namespace": "", "prefix": "header", "key": "subject", "value": "Simple Text Mail", - } - in metadata, + }, + metadata, ) - self.assertTrue( - {"namespace": "", "prefix": "header", "key": "to", "value": "some@one.de"} - in metadata, + self.assertIn( + {"namespace": "", "prefix": "header", "key": "to", "value": "some@one.de"}, + metadata, ) - self.assertTrue( + self.assertIn( { "namespace": "", "prefix": "header", "key": "user-agent", "value": "Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101\n Thunderbird/102.3.1", - } - in metadata, + }, + metadata, ) - self.assertTrue( + self.assertIn( { "namespace": "", "prefix": "header", "key": "x-last-tls-session-version", "value": "TLSv1.3", - } - in metadata, + }, + metadata, ) def test_parse_na(self): @@ -438,8 +443,8 @@ class TestParser(TestCase): resulting_html = result[-1][1].read() self.assertTrue(result[-1][0] == "index.html") - self.assertTrue(result[0][0] in resulting_html) - self.assertFalse(" Date: Sun, 20 Nov 2022 20:24:36 +0100 Subject: [PATCH 055/231] change order of elements in parsed Texts --- src/paperless_mail/parsers.py | 5 +++-- src/paperless_mail/tests/test_parsers.py | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/paperless_mail/parsers.py b/src/paperless_mail/parsers.py index 8f8dd2d37..d50217f2e 100644 --- a/src/paperless_mail/parsers.py +++ b/src/paperless_mail/parsers.py @@ -112,8 +112,7 @@ class MailDocumentParser(DocumentParser): mail = self.get_parsed(document_path) - self.text = f"{strip_text(mail.text)}\n\n" - self.text += f"Subject: {mail.subject}\n\n" + self.text = f"Subject: {mail.subject}\n\n" self.text += f"From: {mail.from_values.full}\n\n" self.text += f"To: {', '.join(address.full for address in mail.to_values)}\n\n" if len(mail.cc_values) >= 1: @@ -134,6 +133,8 @@ class MailDocumentParser(DocumentParser): if mail.html != "": self.text += "HTML content: " + strip_text(self.tika_parse(mail.html)) + self.text += f"\n\n{strip_text(mail.text)}" + self.date = mail.date self.archive_path = self.generate_pdf(document_path) diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py index 315e82a1a..6e47c70ed 100644 --- a/src/paperless_mail/tests/test_parsers.py +++ b/src/paperless_mail/tests/test_parsers.py @@ -231,7 +231,7 @@ class TestParser(TestCase): @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf") def test_parse_html_eml(self, n, mock_tika_parse: mock.MagicMock): # Validate parsing returns the expected results - text_expected = "Some Text and an embedded image.\n\nSubject: HTML Message\n\nFrom: Name \n\nTo: someone@example.de\n\nAttachments: IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (600.24 KiB)\n\nHTML content: tika return" + text_expected = "Subject: HTML Message\n\nFrom: Name \n\nTo: someone@example.de\n\nAttachments: IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (600.24 KiB)\n\nHTML content: tika return\n\nSome Text and an embedded image." mock_tika_parse.return_value = "tika return" self.parser.parse(os.path.join(self.SAMPLE_FILES, "html.eml"), "message/rfc822") @@ -258,7 +258,7 @@ class TestParser(TestCase): os.path.join(self.SAMPLE_FILES, "simple_text.eml"), "message/rfc822", ) - text_expected = "This is just a simple Text Mail.\n\nSubject: Simple Text Mail\n\nFrom: Some One \n\nTo: some@one.de\n\nCC: asdasd@æsdasd.de, asdadasdasdasda.asdasd@æsdasd.de\n\nBCC: fdf@fvf.de\n\n" + text_expected = "Subject: Simple Text Mail\n\nFrom: Some One \n\nTo: some@one.de\n\nCC: asdasd@æsdasd.de, asdadasdasdasda.asdasd@æsdasd.de\n\nBCC: fdf@fvf.de\n\n\n\nThis is just a simple Text Mail." self.assertEqual(text_expected, self.parser.text) self.assertEqual( datetime.datetime( From 0b1a16908fbbb88728301fa708d221a9138539ce Mon Sep 17 00:00:00 2001 From: phail Date: Sun, 20 Nov 2022 20:33:07 +0100 Subject: [PATCH 056/231] Include .eml reference in docs --- docs/configuration.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 32a302f0c..2523b0f5d 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -497,8 +497,10 @@ Tika settings Paperless can make use of `Tika `_ and `Gotenberg `_ for parsing and -converting "Office" documents (such as ".doc", ".xlsx" and ".odt"). If you -wish to use this, you must provide a Tika server and a Gotenberg server, +converting "Office" documents (such as ".doc", ".xlsx" and ".odt"). +Tika and Gotenberg are also needed to allow parsing of E-Mails (.eml). + +If you wish to use this, you must provide a Tika server and a Gotenberg server, configure their endpoints, and enable the feature. PAPERLESS_TIKA_ENABLED= From 00f39d8b581c358f2484680275222f6ad909758c Mon Sep 17 00:00:00 2001 From: phail Date: Sun, 20 Nov 2022 22:49:42 +0100 Subject: [PATCH 057/231] add test comments --- src/paperless_mail/tests/test_parsers.py | 206 +++++++++++++++++++++-- 1 file changed, 191 insertions(+), 15 deletions(-) diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py index 6e47c70ed..a2aab941e 100644 --- a/src/paperless_mail/tests/test_parsers.py +++ b/src/paperless_mail/tests/test_parsers.py @@ -16,7 +16,15 @@ class TestParser(TestCase): def tearDown(self) -> None: self.parser.cleanup() - def test_get_parsed(self): + def test_get_parsed_missing_file(self): + """ + GIVEN: + - Fresh parser + WHEN: + - A nonexistent file should be parsed + THEN: + - An Exception is thrown + """ # Check if exception is raised when parsing fails. self.assertRaises( ParseError, @@ -24,6 +32,15 @@ class TestParser(TestCase): os.path.join(self.SAMPLE_FILES, "na"), ) + def test_get_parsed_broken_file(self): + """ + GIVEN: + - Fresh parser + WHEN: + - A faulty file should be parsed + THEN: + - An Exception is thrown + """ # Check if exception is raised when the mail is faulty. self.assertRaises( ParseError, @@ -31,6 +48,15 @@ class TestParser(TestCase): os.path.join(self.SAMPLE_FILES, "broken.eml"), ) + def test_get_parsed_simple_text_mail(self): + """ + GIVEN: + - Fresh parser + WHEN: + - A .eml file should be parsed + THEN: + - The content of the mail should be available in the parse result. + """ # Parse Test file and check relevant content parsed1 = self.parser.get_parsed( os.path.join(self.SAMPLE_FILES, "simple_text.eml"), @@ -48,9 +74,22 @@ class TestParser(TestCase): self.assertEqual(parsed1.text, "This is just a simple Text Mail.\n") self.assertEqual(parsed1.to, ("some@one.de",)) + def test_get_parsed_reparse(self): + """ + GIVEN: + - An E-Mail was parsed + WHEN: + - Another .eml file should be parsed + THEN: + - The parser should not retry to parse and return the old results + """ + # Parse Test file and check relevant content + parsed1 = self.parser.get_parsed( + os.path.join(self.SAMPLE_FILES, "simple_text.eml"), + ) # Check if same parsed object as before is returned, even if another file is given. parsed2 = self.parser.get_parsed( - os.path.join(os.path.join(self.SAMPLE_FILES, "na")), + os.path.join(os.path.join(self.SAMPLE_FILES, "html.eml")), ) self.assertEqual(parsed1, parsed2) @@ -61,6 +100,14 @@ class TestParser(TestCase): mock_make_thumbnail_from_pdf: mock.MagicMock, mock_generate_pdf: mock.MagicMock, ): + """ + GIVEN: + - An E-Mail was parsed + WHEN: + - The Thumbnail is requested + THEN: + - The parser should call the functions which generate the thumbnail + """ mocked_return = "Passing the return value through.." mock_make_thumbnail_from_pdf.return_value = mocked_return @@ -81,11 +128,28 @@ class TestParser(TestCase): self.assertEqual(mocked_return, thumb) @mock.patch("documents.loggers.LoggingMixin.log") - def test_extract_metadata(self, m: mock.MagicMock): + def test_extract_metadata_fail(self, m: mock.MagicMock): + """ + GIVEN: + - Fresh start + WHEN: + - Metadata extraction is triggered for nonexistent file + THEN: + - A log warning should be generated + """ # Validate if warning is logged when parsing fails self.assertEqual([], self.parser.extract_metadata("na", "message/rfc822")) self.assertEqual("warning", m.call_args[0][0]) + def test_extract_metadata(self): + """ + GIVEN: + - Fresh start + WHEN: + - Metadata extraction is triggered + THEN: + - metadata is returned + """ # Validate Metadata parsing returns the expected results metadata = self.parser.extract_metadata( os.path.join(self.SAMPLE_FILES, "simple_text.eml"), @@ -219,6 +283,14 @@ class TestParser(TestCase): ) def test_parse_na(self): + """ + GIVEN: + - Fresh start + WHEN: + - parsing is attempted with nonexistent file + THEN: + - Exception is thrown + """ # Check if exception is raised when parsing fails. self.assertRaises( ParseError, @@ -230,6 +302,14 @@ class TestParser(TestCase): @mock.patch("paperless_mail.parsers.MailDocumentParser.tika_parse") @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf") def test_parse_html_eml(self, n, mock_tika_parse: mock.MagicMock): + """ + GIVEN: + - Fresh start + WHEN: + - parsing is done with html mail + THEN: + - Tika is called, parsed information from non html parts is available + """ # Validate parsing returns the expected results text_expected = "Subject: HTML Message\n\nFrom: Name \n\nTo: someone@example.de\n\nAttachments: IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (600.24 KiB)\n\nHTML content: tika return\n\nSome Text and an embedded image." mock_tika_parse.return_value = "tika return" @@ -252,6 +332,14 @@ class TestParser(TestCase): @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf") def test_parse_simple_eml(self, n): + """ + GIVEN: + - Fresh start + WHEN: + - parsing is done with non html mail + THEN: + - parsed information is available + """ # Validate parsing returns the expected results self.parser.parse( @@ -277,22 +365,51 @@ class TestParser(TestCase): self.assertTrue(os.path.isfile(self.parser.archive_path)) @mock.patch("paperless_mail.parsers.parser.from_buffer") - def test_tika_parse(self, mock_from_buffer: mock.MagicMock): - html = '

    Some Text

    ' - expected_text = "Some Text" - mock_from_buffer.return_value = {"content": expected_text} - + def test_tika_parse_unsuccessful(self, mock_from_buffer: mock.MagicMock): + """ + GIVEN: + - Fresh start + WHEN: + - tika parsing fails + THEN: + - the parser should return an empty string + """ # Check unsuccessful parsing mock_from_buffer.return_value = {"content": None} parsed = self.parser.tika_parse(None) self.assertEqual("", parsed) + @mock.patch("paperless_mail.parsers.parser.from_buffer") + def test_tika_parse(self, mock_from_buffer: mock.MagicMock): + """ + GIVEN: + - Fresh start + WHEN: + - tika parsing is called + THEN: + - a web request to tika shall be done and the reply es returned + """ + html = '

    Some Text

    ' + expected_text = "Some Text" + # Check successful parsing mock_from_buffer.return_value = {"content": expected_text} parsed = self.parser.tika_parse(html) self.assertEqual(expected_text, parsed.strip()) mock_from_buffer.assert_called_with(html, self.parser.tika_server) + @mock.patch("paperless_mail.parsers.parser.from_buffer") + def test_tika_parse_exception(self, mock_from_buffer: mock.MagicMock): + """ + GIVEN: + - Fresh start + WHEN: + - tika parsing is called and an exception is thrown on the request + THEN: + - a ParseError Exception is thrown + """ + html = '

    Some Text

    ' + # Check ParseError def my_side_effect(): raise Exception("Test") @@ -303,6 +420,14 @@ class TestParser(TestCase): @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_mail") @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_html") def test_generate_pdf_parse_error(self, m: mock.MagicMock, n: mock.MagicMock): + """ + GIVEN: + - Fresh start + WHEN: + - pdf generation is requested but gotenberg can not be reached + THEN: + - a ParseError Exception is thrown + """ m.return_value = b"" n.return_value = b"" @@ -314,6 +439,22 @@ class TestParser(TestCase): os.path.join(self.SAMPLE_FILES, "html.eml"), ) + def test_generate_pdf_exception(self): + """ + GIVEN: + - Fresh start + WHEN: + - pdf generation is requested but parsing throws an exception + THEN: + - a ParseError Exception is thrown + """ + # Check if exception is raised when the mail can not be parsed. + self.assertRaises( + ParseError, + self.parser.generate_pdf, + os.path.join(self.SAMPLE_FILES, "broken.eml"), + ) + @mock.patch("paperless_mail.parsers.requests.post") @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_mail") @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_html") @@ -323,13 +464,14 @@ class TestParser(TestCase): mock_generate_pdf_from_mail: mock.MagicMock, mock_post: mock.MagicMock, ): - # Check if exception is raised when the mail can not be parsed. - self.assertRaises( - ParseError, - self.parser.generate_pdf, - os.path.join(self.SAMPLE_FILES, "broken.eml"), - ) - + """ + GIVEN: + - Fresh start + WHEN: + - pdf generation is requested + THEN: + - gotenberg is called and the resulting file is returned + """ mock_generate_pdf_from_mail.return_value = b"Mail Return" mock_generate_pdf_from_html.return_value = b"HTML Return" @@ -366,6 +508,14 @@ class TestParser(TestCase): self.assertEqual(b"Content", file.read()) def test_mail_to_html(self): + """ + GIVEN: + - Fresh start + WHEN: + - conversion from eml to html is requested + THEN: + - html should be returned + """ mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml")) html_handle = self.parser.mail_to_html(mail) html_received = html_handle.read() @@ -384,6 +534,14 @@ class TestParser(TestCase): mock_mail_to_html: mock.MagicMock, mock_post: mock.MagicMock, ): + """ + GIVEN: + - Fresh start + WHEN: + - conversion of PDF from .eml is requested + THEN: + - gotenberg should be called with valid intermediary html files, the resulting pdf is returned + """ mock_response = mock.MagicMock() mock_response.content = b"Content" mock_post.return_value = mock_response @@ -425,6 +583,15 @@ class TestParser(TestCase): mock_response.raise_for_status.assert_called_once() def test_transform_inline_html(self): + """ + GIVEN: + - Fresh start + WHEN: + - transforming of html content from an email with an inline image attachment is requested + THEN: + - html is returned and sanitized + """ + class MailAttachmentMock: def __init__(self, payload, content_id): self.payload = payload @@ -448,6 +615,15 @@ class TestParser(TestCase): @mock.patch("paperless_mail.parsers.requests.post") def test_generate_pdf_from_html(self, mock_post: mock.MagicMock): + """ + GIVEN: + - Fresh start + WHEN: + - generating pdf from html with inline attachments is attempted + THEN: + - gotenberg is called with the correct parameters and the resulting pdf is returned + """ + class MailAttachmentMock: def __init__(self, payload, content_id): self.payload = payload From 4aa318598fd0dc6c5d4e08dd2a13e7bf614511ec Mon Sep 17 00:00:00 2001 From: phail Date: Sun, 20 Nov 2022 23:26:20 +0100 Subject: [PATCH 058/231] add test comments --- src/paperless_mail/tests/test_parsers.py | 15 +++ src/paperless_mail/tests/test_parsers_live.py | 121 +++++++++++++++--- 2 files changed, 120 insertions(+), 16 deletions(-) diff --git a/src/paperless_mail/tests/test_parsers.py b/src/paperless_mail/tests/test_parsers.py index a2aab941e..e02267970 100644 --- a/src/paperless_mail/tests/test_parsers.py +++ b/src/paperless_mail/tests/test_parsers.py @@ -417,6 +417,21 @@ class TestParser(TestCase): mock_from_buffer.side_effect = my_side_effect self.assertRaises(ParseError, self.parser.tika_parse, html) + def test_tika_parse_unreachable(self): + """ + GIVEN: + - Fresh start + WHEN: + - tika parsing is called but tika is not available + THEN: + - a ParseError Exception is thrown + """ + html = '

    Some Text

    ' + + # Check if exception is raised when Tika cannot be reached. + self.parser.tika_server = "" + self.assertRaises(ParseError, self.parser.tika_parse, html) + @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_mail") @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_html") def test_generate_pdf_parse_error(self, m: mock.MagicMock, n: mock.MagicMock): diff --git a/src/paperless_mail/tests/test_parsers_live.py b/src/paperless_mail/tests/test_parsers_live.py index ce3cfd3a3..9a9816f7d 100644 --- a/src/paperless_mail/tests/test_parsers_live.py +++ b/src/paperless_mail/tests/test_parsers_live.py @@ -33,6 +33,14 @@ class TestParserLive(TestCase): ) @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf") def test_get_thumbnail(self, mock_generate_pdf: mock.MagicMock): + """ + GIVEN: + - Fresh start + WHEN: + - The Thumbnail is requested + THEN: + - The returned thumbnail image file is as expected + """ mock_generate_pdf.return_value = os.path.join( self.SAMPLE_FILES, "simple_text.eml.pdf", @@ -55,26 +63,39 @@ class TestParserLive(TestCase): "TIKA_LIVE" not in os.environ, reason="No tika server", ) - def test_tika_parse(self): + def test_tika_parse_successful(self): + """ + GIVEN: + - Fresh start + WHEN: + - tika parsing is called + THEN: + - a web request to tika shall be done and the reply es returned + """ html = '

    Some Text

    ' expected_text = "Some Text" - tika_server_original = self.parser.tika_server - - # Check if exception is raised when Tika cannot be reached. - self.parser.tika_server = "" - self.assertRaises(ParseError, self.parser.tika_parse, html) - - # Check unsuccessful parsing - self.parser.tika_server = tika_server_original - - parsed = self.parser.tika_parse(None) - self.assertEqual("", parsed) - # Check successful parsing parsed = self.parser.tika_parse(html) self.assertEqual(expected_text, parsed.strip()) + @pytest.mark.skipif( + "TIKA_LIVE" not in os.environ, + reason="No tika server", + ) + def test_tika_parse_unsuccessful(self): + """ + GIVEN: + - Fresh start + WHEN: + - tika parsing fails + THEN: + - the parser should return an empty string + """ + # Check unsuccessful parsing + parsed = self.parser.tika_parse(None) + self.assertEqual("", parsed) + @pytest.mark.skipif( "GOTENBERG_LIVE" not in os.environ, reason="No gotenberg server", @@ -86,7 +107,14 @@ class TestParserLive(TestCase): mock_generate_pdf_from_html: mock.MagicMock, mock_generate_pdf_from_mail: mock.MagicMock, ): - + """ + GIVEN: + - Intermediary pdfs to be merged + WHEN: + - pdf generation is requested with html file requiring merging of pdfs + THEN: + - gotenberg is called to merge files and the resulting file is returned + """ with open(os.path.join(self.SAMPLE_FILES, "first.pdf"), "rb") as first: mock_generate_pdf_from_mail.return_value = first.read() @@ -107,6 +135,14 @@ class TestParserLive(TestCase): reason="No gotenberg server", ) def test_generate_pdf_from_mail_no_convert(self): + """ + GIVEN: + - Fresh start + WHEN: + - pdf generation from simple eml file is requested + THEN: + - gotenberg is called and the resulting file is returned and contains the expected text. + """ mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml")) pdf_path = os.path.join(self.parser.tempdir, "html.eml.pdf") @@ -128,6 +164,14 @@ class TestParserLive(TestCase): reason="PAPERLESS_TEST_SKIP_CONVERT set, skipping Test", ) def test_generate_pdf_from_mail(self): + """ + GIVEN: + - Fresh start + WHEN: + - pdf generation from simple eml file is requested + THEN: + - gotenberg is called and the resulting file is returned and look as expected. + """ mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml")) pdf_path = os.path.join(self.parser.tempdir, "html.eml.pdf") @@ -168,6 +212,15 @@ class TestParserLive(TestCase): reason="No gotenberg server", ) def test_generate_pdf_from_html_no_convert(self): + """ + GIVEN: + - Fresh start + WHEN: + - pdf generation from html eml file is requested + THEN: + - gotenberg is called and the resulting file is returned and contains the expected text. + """ + class MailAttachmentMock: def __init__(self, payload, content_id): self.payload = payload @@ -203,6 +256,15 @@ class TestParserLive(TestCase): reason="PAPERLESS_TEST_SKIP_CONVERT set, skipping Test", ) def test_generate_pdf_from_html(self): + """ + GIVEN: + - Fresh start + WHEN: + - pdf generation from html eml file is requested + THEN: + - gotenberg is called and the resulting file is returned and look as expected. + """ + class MailAttachmentMock: def __init__(self, payload, content_id): self.payload = payload @@ -255,10 +317,19 @@ class TestParserLive(TestCase): "GOTENBERG_LIVE" not in os.environ, reason="No gotenberg server", ) - def test_is_online_image_still_available(self): + def test_online_image_exception_on_not_available(self): + """ + GIVEN: + - Fresh start + WHEN: + - nonexistent image is requested + THEN: + - An exception shall be thrown + """ """ A public image is used in the html sample file. We have no control - whether this image stays online forever, so here we check if it is still there + whether this image stays online forever, so here we check if we can detect if is not + available anymore. """ # Start by Testing if nonexistent URL really throws an Exception @@ -268,5 +339,23 @@ class TestParserLive(TestCase): "https://upload.wikimedia.org/wikipedia/en/f/f7/nonexistent.png", ) + @pytest.mark.skipif( + "GOTENBERG_LIVE" not in os.environ, + reason="No gotenberg server", + ) + def test_is_online_image_still_available(self): + """ + GIVEN: + - Fresh start + WHEN: + - A public image used in the html sample file is requested + THEN: + - No exception shall be thrown + """ + """ + A public image is used in the html sample file. We have no control + whether this image stays online forever, so here we check if it is still there + """ + # Now check the URL used in samples/sample.html urlopen("https://upload.wikimedia.org/wikipedia/en/f/f7/RickRoll.png") From 3c48ce0225c027497aebb5cea733b8b7437c65fe Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 20 Nov 2022 00:06:00 -0800 Subject: [PATCH 059/231] option to truncate content on /documents endpoint --- .../document-card-large.component.ts | 5 ++++- src-ui/src/app/services/document-list-view.service.ts | 3 ++- src/documents/serialisers.py | 11 +++++++++++ src/documents/views.py | 2 ++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts index de6b94032..4ce1ef705 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts @@ -119,6 +119,9 @@ export class DocumentCardLargeComponent implements OnInit { } get contentTrimmed() { - return this.document.content.substr(0, 500) + return ( + this.document.content.substr(0, 500) + + (this.document.content.length > 500 ? '...' : '') + ) } } diff --git a/src-ui/src/app/services/document-list-view.service.ts b/src-ui/src/app/services/document-list-view.service.ts index 3eb036710..3c5dbca21 100644 --- a/src-ui/src/app/services/document-list-view.service.ts +++ b/src-ui/src/app/services/document-list-view.service.ts @@ -213,7 +213,8 @@ export class DocumentListViewService { this.currentPageSize, activeListViewState.sortField, activeListViewState.sortReverse, - activeListViewState.filterRules + activeListViewState.filterRules, + { truncate_content: true } ) .subscribe({ next: (result) => { diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index db282cacd..356dd0a69 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -234,6 +234,12 @@ class DocumentSerializer(DynamicFieldsModelSerializer): else: return None + def to_representation(self, instance): + doc = super().to_representation(instance) + if self.truncate_content: + doc["content"] = doc.get("content")[0:550] + return doc + def update(self, instance, validated_data): if "created_date" in validated_data and "created" not in validated_data: new_datetime = datetime.datetime.combine( @@ -247,6 +253,11 @@ class DocumentSerializer(DynamicFieldsModelSerializer): super().update(instance, validated_data) return instance + def __init__(self, *args, **kwargs): + self.truncate_content = kwargs.pop("truncate_content", False) + + super().__init__(*args, **kwargs) + class Meta: model = Document depth = 1 diff --git a/src/documents/views.py b/src/documents/views.py index 10225be6f..eb6f205c1 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -226,9 +226,11 @@ class DocumentViewSet( fields = fields_param.split(",") else: fields = None + truncate_content = self.request.query_params.get("truncate_content", "False") serializer_class = self.get_serializer_class() kwargs.setdefault("context", self.get_serializer_context()) kwargs.setdefault("fields", fields) + kwargs.setdefault("truncate_content", truncate_content.lower() in ["true", "1"]) return serializer_class(*args, **kwargs) def update(self, request, *args, **kwargs): From 2c1333a75f43fe807ca168dd4f093171175ee85e Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 22 Nov 2022 15:25:27 -0800 Subject: [PATCH 060/231] Dont use document data from /documents API call for edit --- .../saved-view-widget.component.html | 6 ++--- .../saved-view-widget.component.scss | 2 +- .../saved-view-widget.component.ts | 4 +++- .../document-detail.component.ts | 2 +- .../document-card-large.component.html | 2 +- .../document-card-large.component.ts | 6 +---- .../document-card-small.component.html | 2 +- .../document-card-small.component.ts | 4 +--- .../document-list.component.html | 2 +- .../app/services/open-documents.service.ts | 23 ++++--------------- 10 files changed, 18 insertions(+), 35 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html index 84ee1aabe..32ca3859e 100644 --- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -11,9 +11,9 @@ - - {{doc.created_date | customDate}} - {{doc.title | documentTitle}} + + {{doc.created_date | customDate}} + {{doc.title | documentTitle}} diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.scss b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.scss index 2edac1661..62bea686f 100644 --- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.scss +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.scss @@ -7,6 +7,6 @@ th:first-child { width: 25%; } -tbody tr { +tbody app-tag { cursor: pointer; } diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts index 65ea4de0b..5e30ff8cd 100644 --- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts @@ -72,7 +72,9 @@ export class SavedViewWidgetComponent implements OnInit, OnDestroy { } } - clickTag(tag: PaperlessTag) { + clickTag(tag: PaperlessTag, event: MouseEvent) { + event.preventDefault() + this.list.quickFilter([ { rule_type: FILTER_HAS_TAGS_ALL, value: tag.id.toString() }, ]) diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index 72f7b3613..557a0929f 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -184,7 +184,7 @@ export class DocumentDetailComponent this.openDocumentService.getOpenDocument(this.documentId) ) } else { - this.openDocumentService.openDocument(doc, false) + this.openDocumentService.openDocument(doc) this.updateComponent(doc) } diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 1b859f39b..80aedb7f2 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -37,7 +37,7 @@  More like this - +  Edit diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts index 4ce1ef705..512cb51ae 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts @@ -10,9 +10,6 @@ import { PaperlessDocument } from 'src/app/data/paperless-document' import { DocumentService } from 'src/app/services/rest/document.service' import { SettingsService } from 'src/app/services/settings.service' import { NgbPopover } from '@ng-bootstrap/ng-bootstrap' -import { OpenDocumentsService } from 'src/app/services/open-documents.service' -import { DocumentListViewService } from 'src/app/services/document-list-view.service' -import { FILTER_FULLTEXT_MORELIKE } from 'src/app/data/filter-rule-type' import { SETTINGS_KEYS } from 'src/app/data/paperless-uisettings' @Component({ @@ -26,8 +23,7 @@ import { SETTINGS_KEYS } from 'src/app/data/paperless-uisettings' export class DocumentCardLargeComponent implements OnInit { constructor( private documentService: DocumentService, - private settingsService: SettingsService, - public openDocumentsService: OpenDocumentsService + private settingsService: SettingsService ) {} @Input() diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index aec8d76ae..5e46ed7b4 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -67,7 +67,7 @@
  • - + diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts index 3f7fc7982..8e6ae33a6 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts @@ -11,7 +11,6 @@ import { PaperlessDocument } from 'src/app/data/paperless-document' import { DocumentService } from 'src/app/services/rest/document.service' import { SettingsService } from 'src/app/services/settings.service' import { NgbPopover } from '@ng-bootstrap/ng-bootstrap' -import { OpenDocumentsService } from 'src/app/services/open-documents.service' import { SETTINGS_KEYS } from 'src/app/data/paperless-uisettings' @Component({ @@ -25,8 +24,7 @@ import { SETTINGS_KEYS } from 'src/app/data/paperless-uisettings' export class DocumentCardSmallComponent implements OnInit { constructor( private documentService: DocumentService, - private settingsService: SettingsService, - public openDocumentsService: OpenDocumentsService + private settingsService: SettingsService ) {} @Input() diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index 9357813f6..892a0d3b2 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -179,7 +179,7 @@ - {{d.title | documentTitle}} + {{d.title | documentTitle}} diff --git a/src-ui/src/app/services/open-documents.service.ts b/src-ui/src/app/services/open-documents.service.ts index 8533166c3..a21523458 100644 --- a/src-ui/src/app/services/open-documents.service.ts +++ b/src-ui/src/app/services/open-documents.service.ts @@ -6,7 +6,6 @@ import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { ConfirmDialogComponent } from 'src/app/components/common/confirm-dialog/confirm-dialog.component' import { Observable, Subject, of } from 'rxjs' import { first } from 'rxjs/operators' -import { Router } from '@angular/router' @Injectable({ providedIn: 'root', @@ -16,8 +15,7 @@ export class OpenDocumentsService { constructor( private documentService: DocumentService, - private modalService: NgbModal, - private router: Router + private modalService: NgbModal ) { if (sessionStorage.getItem(OPEN_DOCUMENT_SERVICE.DOCUMENTS)) { try { @@ -57,39 +55,28 @@ export class OpenDocumentsService { return this.openDocuments.find((d) => d.id == id) } - openDocument( - doc: PaperlessDocument, - navigate: boolean = true - ): Observable { + openDocument(doc: PaperlessDocument): Observable { if (this.openDocuments.find((d) => d.id == doc.id) == null) { if (this.openDocuments.length == this.MAX_OPEN_DOCUMENTS) { // at max, ensure changes arent lost const docToRemove = this.openDocuments[this.MAX_OPEN_DOCUMENTS - 1] const closeObservable = this.closeDocument(docToRemove) closeObservable.pipe(first()).subscribe((closed) => { - if (closed) this.finishOpenDocument(doc, navigate) + if (closed) this.finishOpenDocument(doc) }) return closeObservable } else { // not at max - this.finishOpenDocument(doc, navigate) - } - } else { - // doc is open, just maybe navigate - if (navigate) { - this.router.navigate(['documents', doc.id]) + this.finishOpenDocument(doc) } } return of(true) } - private finishOpenDocument(doc: PaperlessDocument, navigate: boolean) { + private finishOpenDocument(doc: PaperlessDocument) { this.openDocuments.unshift(doc) this.dirtyDocuments.delete(doc.id) this.save() - if (navigate) { - this.router.navigate(['documents', doc.id]) - } } setDirty(doc: PaperlessDocument, dirty: boolean) { From fe2db4dbf7bbc21b287fd72cd124545160eaa7c0 Mon Sep 17 00:00:00 2001 From: phail Date: Wed, 30 Nov 2022 10:16:39 +0100 Subject: [PATCH 061/231] adapt compose file for eml parsing --- docker/compose/docker-compose.ci-test.yml | 5 ++++- docker/compose/docker-compose.mariadb-tika.yml | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docker/compose/docker-compose.ci-test.yml b/docker/compose/docker-compose.ci-test.yml index 87bc8b7f2..b1b8d2179 100644 --- a/docker/compose/docker-compose.ci-test.yml +++ b/docker/compose/docker-compose.ci-test.yml @@ -11,9 +11,12 @@ services: container_name: gotenberg network_mode: host restart: unless-stopped + # The gotenberg chromium route is used to convert .eml files. We do not + # want to allow external content like tracking pixels or even javascript. command: - "gotenberg" - - "--chromium-disable-routes=true" + - "--chromium-disable-javascript=true" + - "--chromium-allow-list=file:///tmp/.*" tika: image: ghcr.io/paperless-ngx/tika:latest hostname: tika diff --git a/docker/compose/docker-compose.mariadb-tika.yml b/docker/compose/docker-compose.mariadb-tika.yml index 22f69ba4f..4bbb390f0 100644 --- a/docker/compose/docker-compose.mariadb-tika.yml +++ b/docker/compose/docker-compose.mariadb-tika.yml @@ -87,9 +87,12 @@ services: gotenberg: image: docker.io/gotenberg/gotenberg:7.6 restart: unless-stopped + # The gotenberg chromium route is used to convert .eml files. We do not + # want to allow external content like tracking pixels or even javascript. command: - "gotenberg" - - "--chromium-disable-routes=true" + - "--chromium-disable-javascript=true" + - "--chromium-allow-list=file:///tmp/.*" tika: image: ghcr.io/paperless-ngx/tika:latest From c3331086d55661f9f1a973194cef951d2ccd05d9 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 8 Nov 2022 03:39:54 -0800 Subject: [PATCH 062/231] Basic data retrieval --- .../manage/settings/settings.component.html | 31 +++++ .../manage/settings/settings.component.ts | 116 ++++++++++++++++-- src-ui/src/app/data/paperless-mail-account.ts | 23 ++++ src-ui/src/app/data/paperless-mail-rule.ts | 66 ++++++++++ .../app/services/rest/mail-account.service.ts | 52 ++++++++ .../app/services/rest/mail-rule.service.ts | 50 ++++++++ src/documents/serialisers.py | 60 +++++++++ src/documents/views.py | 38 ++++++ src/paperless/urls.py | 4 + 9 files changed, 431 insertions(+), 9 deletions(-) create mode 100644 src-ui/src/app/data/paperless-mail-account.ts create mode 100644 src-ui/src/app/data/paperless-mail-rule.ts create mode 100644 src-ui/src/app/services/rest/mail-account.service.ts create mode 100644 src-ui/src/app/services/rest/mail-rule.service.ts diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 88bf34d36..9ba010c0e 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -216,6 +216,37 @@ + +
  • + Paperless Mail + + +

    Mail accounts

    +
    + +
    +
    + {{account.name}} +
    +
    + +
    No mail accounts defined.
    +
    + +

    Mail rules

    +
    + +
    +
    + {{rule.name}} +
    +
    + +
    No mail rules defined.
    +
    + +
    +
  • diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 51a401e49..c6ffc13db 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -29,6 +29,10 @@ import { SETTINGS_KEYS } from 'src/app/data/paperless-uisettings' import { ActivatedRoute } from '@angular/router' import { ViewportScroller } from '@angular/common' import { TourService } from 'ngx-ui-tour-ng-bootstrap' +import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account' +import { PaperlessMailRule } from 'src/app/data/paperless-mail-rule' +import { MailAccountService as MailAccountService } from 'src/app/services/rest/mail-account.service' +import { MailRuleService } from 'src/app/services/rest/mail-rule.service' @Component({ selector: 'app-settings', @@ -40,6 +44,9 @@ export class SettingsComponent { savedViewGroup = new FormGroup({}) + mailAccountGroup = new FormGroup({}) + mailRuleGroup = new FormGroup({}) + settingsForm = new FormGroup({ bulkEditConfirmationDialogs: new FormControl(null), bulkEditApplyOnClose: new FormControl(null), @@ -50,20 +57,28 @@ export class SettingsComponent darkModeInvertThumbs: new FormControl(null), themeColor: new FormControl(null), useNativePdfViewer: new FormControl(null), - savedViews: this.savedViewGroup, displayLanguage: new FormControl(null), dateLocale: new FormControl(null), dateFormat: new FormControl(null), + commentsEnabled: new FormControl(null), + updateCheckingEnabled: new FormControl(null), + notificationsConsumerNewDocument: new FormControl(null), notificationsConsumerSuccess: new FormControl(null), notificationsConsumerFailed: new FormControl(null), notificationsConsumerSuppressOnDashboard: new FormControl(null), - commentsEnabled: new FormControl(null), - updateCheckingEnabled: new FormControl(null), + + savedViews: this.savedViewGroup, + + mailAccounts: this.mailAccountGroup, + mailRules: this.mailRuleGroup, }) savedViews: PaperlessSavedView[] + mailAccounts: PaperlessMailAccount[] + mailRules: PaperlessMailRule[] + store: BehaviorSubject storeSub: Subscription isDirty$: Observable @@ -81,6 +96,8 @@ export class SettingsComponent constructor( public savedViewService: SavedViewService, + public mailAccountService: MailAccountService, + public mailRuleService: MailRuleService, private documentListViewService: DocumentListViewService, private toastService: ToastService, private settings: SettingsService, @@ -123,10 +140,13 @@ export class SettingsComponent useNativePdfViewer: this.settings.get( SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER ), - savedViews: {}, displayLanguage: this.settings.getLanguage(), dateLocale: this.settings.get(SETTINGS_KEYS.DATE_LOCALE), dateFormat: this.settings.get(SETTINGS_KEYS.DATE_FORMAT), + commentsEnabled: this.settings.get(SETTINGS_KEYS.COMMENTS_ENABLED), + updateCheckingEnabled: this.settings.get( + SETTINGS_KEYS.UPDATE_CHECKING_ENABLED + ), notificationsConsumerNewDocument: this.settings.get( SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT ), @@ -139,17 +159,25 @@ export class SettingsComponent notificationsConsumerSuppressOnDashboard: this.settings.get( SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD ), - commentsEnabled: this.settings.get(SETTINGS_KEYS.COMMENTS_ENABLED), - updateCheckingEnabled: this.settings.get( - SETTINGS_KEYS.UPDATE_CHECKING_ENABLED - ), + savedViews: {}, + mailAccounts: {}, + mailRules: {}, } } ngOnInit() { this.savedViewService.listAll().subscribe((r) => { this.savedViews = r.results - this.initialize() + + this.mailAccountService.listAll().subscribe((r) => { + this.mailAccounts = r.results + + this.mailRuleService.listAll().subscribe((r) => { + this.mailRules = r.results + + this.initialize() + }) + }) }) } @@ -176,6 +204,76 @@ export class SettingsComponent ) } + for (let account of this.mailAccounts) { + storeData.mailAccounts[account.id.toString()] = { + id: account.id, + name: account.name, + imap_server: account.imap_server, + imap_port: account.imap_port, + imap_security: account.imap_security, + username: account.username, + password: account.password, + character_set: account.character_set, + } + this.mailAccountGroup.addControl( + account.id.toString(), + new FormGroup({ + id: new FormControl(null), + name: new FormControl(null), + imap_server: new FormControl(null), + imap_port: new FormControl(null), + imap_security: new FormControl(null), + username: new FormControl(null), + password: new FormControl(null), + character_set: new FormControl(null), + }) + ) + } + + for (let rule of this.mailRules) { + storeData.mailRules[rule.id.toString()] = { + name: rule.name, + order: rule.order, + account: rule.account, + folder: rule.folder, + filter_from: rule.filter_from, + filter_subject: rule.filter_subject, + filter_body: rule.filter_body, + filter_attachment_filename: rule.filter_attachment_filename, + maximum_age: rule.maximum_age, + attachment_type: rule.attachment_type, + action: rule.action, + action_parameter: rule.action_parameter, + assign_title_from: rule.assign_title_from, + assign_tags: rule.assign_tags, + assign_document_type: rule.assign_document_type, + assign_correspondent_from: rule.assign_correspondent_from, + assign_correspondent: rule.assign_correspondent, + } + this.mailRuleGroup.addControl( + rule.id.toString(), + new FormGroup({ + name: new FormControl(null), + order: new FormControl(null), + account: new FormControl(null), + folder: new FormControl(null), + filter_from: new FormControl(null), + filter_subject: new FormControl(null), + filter_body: new FormControl(null), + filter_attachment_filename: new FormControl(null), + maximum_age: new FormControl(null), + attachment_type: new FormControl(null), + action: new FormControl(null), + action_parameter: new FormControl(null), + assign_title_from: new FormControl(null), + assign_tags: new FormControl(null), + assign_document_type: new FormControl(null), + assign_correspondent_from: new FormControl(null), + assign_correspondent: new FormControl(null), + }) + ) + } + this.store = new BehaviorSubject(storeData) this.storeSub = this.store.asObservable().subscribe((state) => { diff --git a/src-ui/src/app/data/paperless-mail-account.ts b/src-ui/src/app/data/paperless-mail-account.ts new file mode 100644 index 000000000..243caa9bd --- /dev/null +++ b/src-ui/src/app/data/paperless-mail-account.ts @@ -0,0 +1,23 @@ +import { ObjectWithId } from './object-with-id' + +export enum IMAPSecurity { + None = 0, + SSL = 1, + STARTTLS = 2, +} + +export interface PaperlessMailAccount extends ObjectWithId { + name: string + + imap_server: string + + imap_port: number + + imap_security: IMAPSecurity + + username: string + + password: string + + character_set?: string +} diff --git a/src-ui/src/app/data/paperless-mail-rule.ts b/src-ui/src/app/data/paperless-mail-rule.ts new file mode 100644 index 000000000..0b54619a6 --- /dev/null +++ b/src-ui/src/app/data/paperless-mail-rule.ts @@ -0,0 +1,66 @@ +import { ObjectWithId } from './object-with-id' +import { PaperlessCorrespondent } from './paperless-correspondent' +import { PaperlessDocumentType } from './paperless-document-type' +import { PaperlessMailAccount } from './paperless-mail-account' +import { PaperlessTag } from './paperless-tag' + +export enum MailFilterAttachmentType { + Attachments = 1, + Everything = 2, +} + +export enum MailAction { + Delete = 1, + Move = 2, + MarkRead = 3, + Flag = 4, + Tag = 5, +} + +export enum MailMetadataTitleOption { + FromSubject = 1, + FromFilename = 2, +} + +export enum MailMetadataCorrespondentOption { + FromNothing = 1, + FromEmail = 2, + FromName = 3, + FromCustom = 4, +} + +export interface PaperlessMailRule extends ObjectWithId { + name: string + + order: number + + account: PaperlessMailAccount + + folder: string + + filter_from: string + + filter_subject: string + + filter_body: string + + filter_attachment_filename: string + + maximum_age: number + + attachment_type: MailFilterAttachmentType + + action: MailAction + + action_parameter?: string + + assign_title_from: MailMetadataTitleOption + + assign_tags?: PaperlessTag[] + + assign_document_type?: PaperlessDocumentType + + assign_correspondent_from?: MailMetadataCorrespondentOption + + assign_correspondent?: PaperlessCorrespondent +} diff --git a/src-ui/src/app/services/rest/mail-account.service.ts b/src-ui/src/app/services/rest/mail-account.service.ts new file mode 100644 index 000000000..a4db86684 --- /dev/null +++ b/src-ui/src/app/services/rest/mail-account.service.ts @@ -0,0 +1,52 @@ +import { HttpClient } from '@angular/common/http' +import { Injectable } from '@angular/core' +import { combineLatest, Observable } from 'rxjs' +import { tap } from 'rxjs/operators' +import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account' +import { AbstractPaperlessService } from './abstract-paperless-service' + +@Injectable({ + providedIn: 'root', +}) +export class MailAccountService extends AbstractPaperlessService { + loading: boolean + + constructor(http: HttpClient) { + super(http, 'mail_accounts') + this.reload() + } + + private reload() { + this.loading = true + this.listAll().subscribe((r) => { + this.mailAccounts = r.results + this.loading = false + }) + } + + private mailAccounts: PaperlessMailAccount[] = [] + + get allAccounts() { + return this.mailAccounts + } + + create(o: PaperlessMailAccount) { + return super.create(o).pipe(tap(() => this.reload())) + } + + update(o: PaperlessMailAccount) { + return super.update(o).pipe(tap(() => this.reload())) + } + + patchMany( + objects: PaperlessMailAccount[] + ): Observable { + return combineLatest(objects.map((o) => super.patch(o))).pipe( + tap(() => this.reload()) + ) + } + + delete(o: PaperlessMailAccount) { + return super.delete(o).pipe(tap(() => this.reload())) + } +} diff --git a/src-ui/src/app/services/rest/mail-rule.service.ts b/src-ui/src/app/services/rest/mail-rule.service.ts new file mode 100644 index 000000000..4e7148496 --- /dev/null +++ b/src-ui/src/app/services/rest/mail-rule.service.ts @@ -0,0 +1,50 @@ +import { HttpClient } from '@angular/common/http' +import { Injectable } from '@angular/core' +import { combineLatest, Observable } from 'rxjs' +import { tap } from 'rxjs/operators' +import { PaperlessMailRule } from 'src/app/data/paperless-mail-rule' +import { AbstractPaperlessService } from './abstract-paperless-service' + +@Injectable({ + providedIn: 'root', +}) +export class MailRuleService extends AbstractPaperlessService { + loading: boolean + + constructor(http: HttpClient) { + super(http, 'mail_rules') + this.reload() + } + + private reload() { + this.loading = true + this.listAll().subscribe((r) => { + this.mailRules = r.results + this.loading = false + }) + } + + private mailRules: PaperlessMailRule[] = [] + + get allRules() { + return this.mailRules + } + + create(o: PaperlessMailRule) { + return super.create(o).pipe(tap(() => this.reload())) + } + + update(o: PaperlessMailRule) { + return super.update(o).pipe(tap(() => this.reload())) + } + + patchMany(objects: PaperlessMailRule[]): Observable { + return combineLatest(objects.map((o) => super.patch(o))).pipe( + tap(() => this.reload()) + ) + } + + delete(o: PaperlessMailRule) { + return super.delete(o).pipe(tap(() => this.reload())) + } +} diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index db282cacd..86e0f4a12 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -28,6 +28,8 @@ from .models import UiSettings from .models import PaperlessTask from .parsers import is_mime_type_supported +from paperless_mail.models import MailAccount, MailRule + # https://www.django-rest-framework.org/api-guide/serializers/#example class DynamicFieldsModelSerializer(serializers.ModelSerializer): @@ -688,3 +690,61 @@ class AcknowledgeTasksViewSerializer(serializers.Serializer): def validate_tasks(self, tasks): self._validate_task_id_list(tasks) return tasks + + +class MailAccountSerializer(serializers.ModelSerializer): + class Meta: + model = MailAccount + depth = 1 + fields = [ + "id", + "name", + "imap_server", + "imap_port", + "imap_security", + "username", + "password", + "character_set", + ] + + def update(self, instance, validated_data): + super().update(instance, validated_data) + return instance + + def create(self, validated_data): + mail_account = MailAccount.objects.create(**validated_data) + return mail_account + + +class MailRuleSerializer(serializers.ModelSerializer): + class Meta: + model = MailRule + depth = 1 + fields = [ + "id", + "name", + "account", + "folder", + "filter_from", + "filter_subject", + "filter_body", + "filter_attachment_filename", + "maximum_age", + "action", + "action_parameter", + "assign_title_from", + "assign_tags", + "assign_correspondent_from", + "assign_correspondent", + "assign_document_type", + "order", + "attachment_type", + ] + + def update(self, instance, validated_data): + super().update(instance, validated_data) + return instance + + def create(self, validated_data): + mail_rule = MailRule.objects.create(**validated_data) + return mail_rule diff --git a/src/documents/views.py b/src/documents/views.py index 10225be6f..f980805f2 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -33,6 +33,8 @@ from packaging import version as packaging_version from paperless import version from paperless.db import GnuPG from paperless.views import StandardPagination +from paperless_mail.models import MailAccount +from paperless_mail.models import MailRule from rest_framework import parsers from rest_framework.decorators import action from rest_framework.exceptions import NotFound @@ -81,6 +83,8 @@ from .serialisers import CorrespondentSerializer from .serialisers import DocumentListSerializer from .serialisers import DocumentSerializer from .serialisers import DocumentTypeSerializer +from .serialisers import MailAccountSerializer +from .serialisers import MailRuleSerializer from .serialisers import PostDocumentSerializer from .serialisers import SavedViewSerializer from .serialisers import StoragePathSerializer @@ -910,3 +914,37 @@ class AcknowledgeTasksView(GenericAPIView): return Response({"result": result}) except Exception: return HttpResponseBadRequest() + + +class MailAccountViewSet(ModelViewSet): + model = MailAccount + + queryset = MailAccount.objects.all() + serializer_class = MailAccountSerializer + pagination_class = StandardPagination + permission_classes = (IsAuthenticated,) + + # TODO: user-scoped + # def get_queryset(self): + # user = self.request.user + # return MailAccount.objects.filter(user=user) + + # def perform_create(self, serializer): + # serializer.save(user=self.request.user) + + +class MailRuleViewSet(ModelViewSet): + model = MailRule + + queryset = MailRule.objects.all() + serializer_class = MailRuleSerializer + pagination_class = StandardPagination + permission_classes = (IsAuthenticated,) + + # TODO: user-scoped + # def get_queryset(self): + # user = self.request.user + # return MailRule.objects.filter(user=user) + + # def perform_create(self, serializer): + # serializer.save(user=self.request.user) diff --git a/src/paperless/urls.py b/src/paperless/urls.py index 46309e1e6..afad7cb9f 100644 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -14,6 +14,8 @@ from documents.views import CorrespondentViewSet from documents.views import DocumentTypeViewSet from documents.views import IndexView from documents.views import LogViewSet +from documents.views import MailAccountViewSet +from documents.views import MailRuleViewSet from documents.views import PostDocumentView from documents.views import RemoteVersionView from documents.views import SavedViewViewSet @@ -39,6 +41,8 @@ api_router.register(r"tags", TagViewSet) api_router.register(r"saved_views", SavedViewViewSet) api_router.register(r"storage_paths", StoragePathViewSet) api_router.register(r"tasks", TasksViewSet, basename="tasks") +api_router.register(r"mail_accounts", MailAccountViewSet) +api_router.register(r"mail_rules", MailRuleViewSet) urlpatterns = [ From c41d1a78a86d1ac585ac03e424d733087ca3fe09 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 8 Nov 2022 10:53:41 -0800 Subject: [PATCH 063/231] remove unused toastService from edit dialogs and add confirmation --- .../correspondent-edit-dialog.component.ts | 9 ++---- .../document-type-edit-dialog.component.ts | 9 ++---- .../edit-dialog/edit-dialog.component.ts | 5 +-- .../tag-edit-dialog.component.ts | 9 ++---- .../management-list.component.ts | 32 ++++++++++++++++--- 5 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src-ui/src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts index 86be7414d..7361e5e4b 100644 --- a/src-ui/src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts @@ -5,7 +5,6 @@ import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit- import { DEFAULT_MATCHING_ALGORITHM } from 'src/app/data/matching-model' import { PaperlessCorrespondent } from 'src/app/data/paperless-correspondent' import { CorrespondentService } from 'src/app/services/rest/correspondent.service' -import { ToastService } from 'src/app/services/toast.service' @Component({ selector: 'app-correspondent-edit-dialog', @@ -13,12 +12,8 @@ import { ToastService } from 'src/app/services/toast.service' styleUrls: ['./correspondent-edit-dialog.component.scss'], }) export class CorrespondentEditDialogComponent extends EditDialogComponent { - constructor( - service: CorrespondentService, - activeModal: NgbActiveModal, - toastService: ToastService - ) { - super(service, activeModal, toastService) + constructor(service: CorrespondentService, activeModal: NgbActiveModal) { + super(service, activeModal) } getCreateTitle() { diff --git a/src-ui/src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts index bcd2363fd..d565e66e1 100644 --- a/src-ui/src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts @@ -5,7 +5,6 @@ import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit- import { DEFAULT_MATCHING_ALGORITHM } from 'src/app/data/matching-model' import { PaperlessDocumentType } from 'src/app/data/paperless-document-type' import { DocumentTypeService } from 'src/app/services/rest/document-type.service' -import { ToastService } from 'src/app/services/toast.service' @Component({ selector: 'app-document-type-edit-dialog', @@ -13,12 +12,8 @@ import { ToastService } from 'src/app/services/toast.service' styleUrls: ['./document-type-edit-dialog.component.scss'], }) export class DocumentTypeEditDialogComponent extends EditDialogComponent { - constructor( - service: DocumentTypeService, - activeModal: NgbActiveModal, - toastService: ToastService - ) { - super(service, activeModal, toastService) + constructor(service: DocumentTypeService, activeModal: NgbActiveModal) { + super(service, activeModal) } getCreateTitle() { diff --git a/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts index 92b16a93d..e87eed438 100644 --- a/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts @@ -2,11 +2,9 @@ import { Directive, EventEmitter, Input, OnInit, Output } from '@angular/core' import { FormGroup } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' import { Observable } from 'rxjs' -import { map } from 'rxjs/operators' import { MATCHING_ALGORITHMS, MATCH_AUTO } from 'src/app/data/matching-model' import { ObjectWithId } from 'src/app/data/object-with-id' import { AbstractPaperlessService } from 'src/app/services/rest/abstract-paperless-service' -import { ToastService } from 'src/app/services/toast.service' @Directive() export abstract class EditDialogComponent @@ -14,8 +12,7 @@ export abstract class EditDialogComponent { constructor( private service: AbstractPaperlessService, - private activeModal: NgbActiveModal, - private toastService: ToastService + private activeModal: NgbActiveModal ) {} @Input() diff --git a/src-ui/src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts index 18d476dfe..db106d990 100644 --- a/src-ui/src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts @@ -4,7 +4,6 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component' import { PaperlessTag } from 'src/app/data/paperless-tag' import { TagService } from 'src/app/services/rest/tag.service' -import { ToastService } from 'src/app/services/toast.service' import { randomColor } from 'src/app/utils/color' import { DEFAULT_MATCHING_ALGORITHM } from 'src/app/data/matching-model' @@ -14,12 +13,8 @@ import { DEFAULT_MATCHING_ALGORITHM } from 'src/app/data/matching-model' styleUrls: ['./tag-edit-dialog.component.scss'], }) export class TagEditDialogComponent extends EditDialogComponent { - constructor( - service: TagService, - activeModal: NgbActiveModal, - toastService: ToastService - ) { - super(service, activeModal, toastService) + constructor(service: TagService, activeModal: NgbActiveModal) { + super(service, activeModal) } getCreateTitle() { diff --git a/src-ui/src/app/components/manage/management-list/management-list.component.ts b/src-ui/src/app/components/manage/management-list/management-list.component.ts index 317cf6fee..d0864d6f5 100644 --- a/src-ui/src/app/components/manage/management-list/management-list.component.ts +++ b/src-ui/src/app/components/manage/management-list/management-list.component.ts @@ -120,8 +120,20 @@ export abstract class ManagementListComponent backdrop: 'static', }) activeModal.componentInstance.dialogMode = 'create' - activeModal.componentInstance.success.subscribe((o) => { - this.reloadData() + activeModal.componentInstance.success.subscribe({ + next: () => { + this.reloadData() + this.toastService.showInfo( + $localize`Successfully created ${this.typeName}.` + ) + }, + error: (e) => { + this.toastService.showInfo( + $localize`Error occurred while creating ${ + this.typeName + } : ${e.toString()}.` + ) + }, }) } @@ -131,8 +143,20 @@ export abstract class ManagementListComponent }) activeModal.componentInstance.object = object activeModal.componentInstance.dialogMode = 'edit' - activeModal.componentInstance.success.subscribe((o) => { - this.reloadData() + activeModal.componentInstance.success.subscribe({ + next: () => { + this.reloadData() + this.toastService.showInfo( + $localize`Successfully updated ${this.typeName}.` + ) + }, + error: (e) => { + this.toastService.showInfo( + $localize`Error occurred while saving ${ + this.typeName + } : ${e.toString()}.` + ) + }, }) } From 6f25917c86a5152ae1ec3988cd42f4dc7b76df66 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 8 Nov 2022 11:11:35 -0800 Subject: [PATCH 064/231] Mail account edit dialog --- src-ui/src/app/app.module.ts | 4 ++ .../mail-account-edit-dialog.component.html | 26 +++++++++++ .../mail-account-edit-dialog.component.scss | 0 .../mail-account-edit-dialog.component.ts | 45 ++++++++++++++++++ .../storage-path-edit-dialog.component.ts | 9 +--- .../input/password/password.component.html | 8 ++++ .../input/password/password.component.scss | 0 .../input/password/password.component.ts | 21 +++++++++ .../manage/settings/settings.component.html | 46 +++++++++++++------ .../manage/settings/settings.component.ts | 33 ++++++++++++- src-ui/src/app/data/paperless-mail-account.ts | 12 +++-- 11 files changed, 180 insertions(+), 24 deletions(-) create mode 100644 src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html create mode 100644 src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.scss create mode 100644 src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts create mode 100644 src-ui/src/app/components/common/input/password/password.component.html create mode 100644 src-ui/src/app/components/common/input/password/password.component.scss create mode 100644 src-ui/src/app/components/common/input/password/password.component.ts diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 3d0a7e3c7..4a65209b9 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -39,6 +39,7 @@ import { NgxFileDropModule } from 'ngx-file-drop' import { TextComponent } from './components/common/input/text/text.component' import { SelectComponent } from './components/common/input/select/select.component' import { CheckComponent } from './components/common/input/check/check.component' +import { PasswordComponent } from './components/common/input/password/password.component' import { SaveViewConfigDialogComponent } from './components/document-list/save-view-config-dialog/save-view-config-dialog.component' import { TagsComponent } from './components/common/input/tags/tags.component' import { SortableDirective } from './directives/sortable.directive' @@ -76,6 +77,7 @@ import { StoragePathEditDialogComponent } from './components/common/edit-dialog/ import { SettingsService } from './services/settings.service' import { TasksComponent } from './components/manage/tasks/tasks.component' import { TourNgBootstrapModule } from 'ngx-ui-tour-ng-bootstrap' +import { MailAccountEditDialogComponent } from './components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component' import localeBe from '@angular/common/locales/be' import localeCs from '@angular/common/locales/cs' @@ -142,6 +144,7 @@ function initializeApp(settings: SettingsService) { TagEditDialogComponent, DocumentTypeEditDialogComponent, StoragePathEditDialogComponent, + MailAccountEditDialogComponent, TagComponent, ClearableBadge, PageHeaderComponent, @@ -157,6 +160,7 @@ function initializeApp(settings: SettingsService) { TextComponent, SelectComponent, CheckComponent, + PasswordComponent, SaveViewConfigDialogComponent, TagsComponent, SortableDirective, diff --git a/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html new file mode 100644 index 000000000..807df18c5 --- /dev/null +++ b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html @@ -0,0 +1,26 @@ +
    + + + +
    diff --git a/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.scss b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts new file mode 100644 index 000000000..f4d395b03 --- /dev/null +++ b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts @@ -0,0 +1,45 @@ +import { Component } from '@angular/core' +import { FormControl, FormGroup } from '@angular/forms' +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component' +import { + IMAPSecurity, + IMAPSecurityLabels, + PaperlessMailAccount, +} from 'src/app/data/paperless-mail-account' +import { MailAccountService } from 'src/app/services/rest/mail-account.service' + +@Component({ + selector: 'app-mail-account-edit-dialog', + templateUrl: './mail-account-edit-dialog.component.html', + styleUrls: ['./mail-account-edit-dialog.component.scss'], +}) +export class MailAccountEditDialogComponent extends EditDialogComponent { + constructor(service: MailAccountService, activeModal: NgbActiveModal) { + super(service, activeModal) + } + + getCreateTitle() { + return $localize`Create new mail account` + } + + getEditTitle() { + return $localize`Edit mail account` + } + + getForm(): FormGroup { + return new FormGroup({ + name: new FormControl(null), + imap_server: new FormControl(null), + imap_port: new FormControl(null), + imap_security: new FormControl(IMAPSecurity.SSL), + username: new FormControl(null), + password: new FormControl(null), + character_set: new FormControl('UTF-8'), + }) + } + + get imapSecurityOptions() { + return IMAPSecurityLabels + } +} diff --git a/src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts index 011c15e73..1dfef00c5 100644 --- a/src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts @@ -5,7 +5,6 @@ import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit- import { DEFAULT_MATCHING_ALGORITHM } from 'src/app/data/matching-model' import { PaperlessStoragePath } from 'src/app/data/paperless-storage-path' import { StoragePathService } from 'src/app/services/rest/storage-path.service' -import { ToastService } from 'src/app/services/toast.service' @Component({ selector: 'app-storage-path-edit-dialog', @@ -13,12 +12,8 @@ import { ToastService } from 'src/app/services/toast.service' styleUrls: ['./storage-path-edit-dialog.component.scss'], }) export class StoragePathEditDialogComponent extends EditDialogComponent { - constructor( - service: StoragePathService, - activeModal: NgbActiveModal, - toastService: ToastService - ) { - super(service, activeModal, toastService) + constructor(service: StoragePathService, activeModal: NgbActiveModal) { + super(service, activeModal) } get pathHint() { diff --git a/src-ui/src/app/components/common/input/password/password.component.html b/src-ui/src/app/components/common/input/password/password.component.html new file mode 100644 index 000000000..57cdd6de8 --- /dev/null +++ b/src-ui/src/app/components/common/input/password/password.component.html @@ -0,0 +1,8 @@ +
    + + + +
    + {{error}} +
    +
    diff --git a/src-ui/src/app/components/common/input/password/password.component.scss b/src-ui/src/app/components/common/input/password/password.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src-ui/src/app/components/common/input/password/password.component.ts b/src-ui/src/app/components/common/input/password/password.component.ts new file mode 100644 index 000000000..3216dbed2 --- /dev/null +++ b/src-ui/src/app/components/common/input/password/password.component.ts @@ -0,0 +1,21 @@ +import { Component, forwardRef } from '@angular/core' +import { NG_VALUE_ACCESSOR } from '@angular/forms' +import { AbstractInputComponent } from '../abstract-input' + +@Component({ + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => PasswordComponent), + multi: true, + }, + ], + selector: 'app-input-password', + templateUrl: './password.component.html', + styleUrls: ['./password.component.scss'], +}) +export class PasswordComponent extends AbstractInputComponent { + constructor() { + super() + } +} diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 9ba010c0e..423002e83 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -222,28 +222,48 @@

    Mail accounts

    -
    +
      -
      -
      - {{account.name}} +
    • +
      +
      Name
      +
      Server
      +
       
      -
    • + + +
    • +
      +
      +
      {{account.imap_server}}
      +
      +
      +
    • No mail accounts defined.
      -
      +
    -

    Mail rules

    -
    +

    Mail rules

    +
      -
      -
      - {{rule.name}} +
    • +
      +
      Name
      +
      Account
      +
       
      -
    • + + +
    • +
      +
      +
      {{rule.account.name}}
      +
      +
      +
    • No mail rules defined.
      -
      +
    diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index c6ffc13db..d87ae2137 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -33,6 +33,8 @@ import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account' import { PaperlessMailRule } from 'src/app/data/paperless-mail-rule' import { MailAccountService as MailAccountService } from 'src/app/services/rest/mail-account.service' import { MailRuleService } from 'src/app/services/rest/mail-rule.service' +import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { MailAccountEditDialogComponent } from '../../common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component' @Component({ selector: 'app-settings', @@ -104,7 +106,8 @@ export class SettingsComponent @Inject(LOCALE_ID) public currentLocale: string, private viewportScroller: ViewportScroller, private activatedRoute: ActivatedRoute, - public readonly tourService: TourService + public readonly tourService: TourService, + private modalService: NgbModal ) { this.settings.settingsSaved.subscribe(() => { if (!this.savePending) this.initialize() @@ -470,4 +473,32 @@ export class SettingsComponent clearThemeColor() { this.settingsForm.get('themeColor').patchValue('') } + + editMailAccount(account: PaperlessMailAccount) { + console.log(account) + + var modal = this.modalService.open(MailAccountEditDialogComponent, { + backdrop: 'static', + size: 'xl', + }) + modal.componentInstance.dialogMode = 'edit' + modal.componentInstance.object = account + // modal.componentInstance.success + // .pipe( + // switchMap((newStoragePath) => { + // return this.storagePathService + // .listAll() + // .pipe(map((storagePaths) => ({ newStoragePath, storagePaths }))) + // }) + // ) + // .pipe(takeUntil(this.unsubscribeNotifier)) + // .subscribe(({ newStoragePath, storagePaths }) => { + // this.storagePaths = storagePaths.results + // this.documentForm.get('storage_path').setValue(newStoragePath.id) + // }) + } + + editMailRule(rule: PaperlessMailRule) { + console.log(rule) + } } diff --git a/src-ui/src/app/data/paperless-mail-account.ts b/src-ui/src/app/data/paperless-mail-account.ts index 243caa9bd..ea5c17a1b 100644 --- a/src-ui/src/app/data/paperless-mail-account.ts +++ b/src-ui/src/app/data/paperless-mail-account.ts @@ -1,11 +1,17 @@ import { ObjectWithId } from './object-with-id' export enum IMAPSecurity { - None = 0, - SSL = 1, - STARTTLS = 2, + None = 1, + SSL = 2, + STARTTLS = 3, } +export const IMAPSecurityLabels: Array<{ id: number; name: string }> = [ + { id: IMAPSecurity.None, name: $localize`No encryption` }, + { id: IMAPSecurity.SSL, name: $localize`SSL` }, + { id: IMAPSecurity.STARTTLS, name: $localize`STARTTLS` }, +] + export interface PaperlessMailAccount extends ObjectWithId { name: string From 9231df7a4a9e0a4df28b11a5c4bd34fbcf9defe3 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 8 Nov 2022 11:50:57 -0800 Subject: [PATCH 065/231] Mail rule edit dialog --- src-ui/src/app/app.module.ts | 4 +- .../mail-rule-edit-dialog.component.html | 37 +++++++ .../mail-rule-edit-dialog.component.scss | 0 .../mail-rule-edit-dialog.component.ts | 98 +++++++++++++++++++ .../common/input/tags/tags.component.html | 4 +- .../common/input/tags/tags.component.ts | 3 + .../manage/settings/settings.component.ts | 23 +++++ src-ui/src/app/data/paperless-mail-rule.ts | 67 +++++++++++++ src-ui/src/styles.scss | 10 +- 9 files changed, 239 insertions(+), 7 deletions(-) create mode 100644 src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html create mode 100644 src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.scss create mode 100644 src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 4a65209b9..ea366b968 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -78,6 +78,7 @@ import { SettingsService } from './services/settings.service' import { TasksComponent } from './components/manage/tasks/tasks.component' import { TourNgBootstrapModule } from 'ngx-ui-tour-ng-bootstrap' import { MailAccountEditDialogComponent } from './components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component' +import { MailRuleEditDialogComponent } from './components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component' import localeBe from '@angular/common/locales/be' import localeCs from '@angular/common/locales/cs' @@ -144,7 +145,6 @@ function initializeApp(settings: SettingsService) { TagEditDialogComponent, DocumentTypeEditDialogComponent, StoragePathEditDialogComponent, - MailAccountEditDialogComponent, TagComponent, ClearableBadge, PageHeaderComponent, @@ -184,6 +184,8 @@ function initializeApp(settings: SettingsService) { DocumentAsnComponent, DocumentCommentsComponent, TasksComponent, + MailAccountEditDialogComponent, + MailRuleEditDialogComponent, ], imports: [ BrowserModule, diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html new file mode 100644 index 000000000..0b7891e81 --- /dev/null +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html @@ -0,0 +1,37 @@ +
    + + + +
    diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.scss b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts new file mode 100644 index 000000000..c4faf86ab --- /dev/null +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts @@ -0,0 +1,98 @@ +import { Component } from '@angular/core' +import { FormControl, FormGroup } from '@angular/forms' +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { first } from 'rxjs' +import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component' +import { PaperlessCorrespondent } from 'src/app/data/paperless-correspondent' +import { PaperlessDocumentType } from 'src/app/data/paperless-document-type' +import { + MailAction, + MailActionOptions, + MailFilterAttachmentType, + MailFilterAttachmentTypeOptions, + MailMetadataCorrespondentOption, + MailMetadataCorrespondentOptionOptions, + MailMetadataTitleOption, + MailMetadataTitleOptionOptions, + PaperlessMailRule, +} from 'src/app/data/paperless-mail-rule' +import { CorrespondentService } from 'src/app/services/rest/correspondent.service' +import { DocumentTypeService } from 'src/app/services/rest/document-type.service' +import { MailRuleService } from 'src/app/services/rest/mail-rule.service' + +@Component({ + selector: 'app-mail-rule-edit-dialog', + templateUrl: './mail-rule-edit-dialog.component.html', + styleUrls: ['./mail-rule-edit-dialog.component.scss'], +}) +export class MailRuleEditDialogComponent extends EditDialogComponent { + correspondents: PaperlessCorrespondent[] + documentTypes: PaperlessDocumentType[] + + constructor( + service: MailRuleService, + activeModal: NgbActiveModal, + correspondentService: CorrespondentService, + documentTypeService: DocumentTypeService + ) { + super(service, activeModal) + + correspondentService + .listAll() + .pipe(first()) + .subscribe((result) => (this.correspondents = result.results)) + + documentTypeService + .listAll() + .pipe(first()) + .subscribe((result) => (this.documentTypes = result.results)) + } + + getCreateTitle() { + return $localize`Create new mail rule` + } + + getEditTitle() { + return $localize`Edit mail rule` + } + + getForm(): FormGroup { + return new FormGroup({ + name: new FormControl(null), + order: new FormControl(null), + account: new FormControl(null), + folder: new FormControl('INBOX'), + filter_from: new FormControl(null), + filter_subject: new FormControl(null), + filter_body: new FormControl(null), + filter_attachment_filename: new FormControl(null), + maximum_age: new FormControl(null), + attachment_type: new FormControl(MailFilterAttachmentType.Attachments), + action: new FormControl(MailAction.MarkRead), + action_parameter: new FormControl(null), + assign_title_from: new FormControl(MailMetadataTitleOption.FromSubject), + assign_tags: new FormControl(null), + assign_document_type: new FormControl(null), + assign_correspondent_from: new FormControl( + MailMetadataCorrespondentOption.FromNothing + ), + assign_correspondent: new FormControl(null), + }) + } + + get attachmentTypeOptions() { + return MailFilterAttachmentTypeOptions + } + + get actionOptions() { + return MailActionOptions + } + + get metadataTitleOptions() { + return MailMetadataTitleOptionOptions + } + + get metadataCorrespondentOptions() { + return MailMetadataCorrespondentOptionOptions + } +} diff --git a/src-ui/src/app/components/common/input/tags/tags.component.html b/src-ui/src/app/components/common/input/tags/tags.component.html index 77e25d88d..14de0f98a 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.html +++ b/src-ui/src/app/components/common/input/tags/tags.component.html @@ -7,7 +7,7 @@ [closeOnSelect]="false" [clearSearchOnAdd]="true" [hideSelected]="true" - [addTag]="createTagRef" + [addTag]="allowCreate ? createTagRef : false" addTagText="Add tag" i18n-addTagText (change)="onChange(value)" @@ -31,7 +31,7 @@ -
    {{account.imap_server}}
    -
    +
    +
    + + +
    +
    @@ -244,21 +249,26 @@

    Mail rules

    -
      +
        -
      • +
      • Name
        Account
        -
         
        +
        Actions
      • -
      • +
      • {{rule.account.name}}
        -
        +
        +
        + + +
        +
      • diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 6afc0d9c6..8efbb486e 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -36,6 +36,7 @@ import { MailRuleService } from 'src/app/services/rest/mail-rule.service' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { MailAccountEditDialogComponent } from '../../common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component' import { MailRuleEditDialogComponent } from '../../common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component' +import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component' @Component({ selector: 'app-settings', @@ -500,6 +501,21 @@ export class SettingsComponent // }) } + deleteMailAccount(account: PaperlessMailAccount) { + let modal = this.modalService.open(ConfirmDialogComponent, { + backdrop: 'static', + }) + modal.componentInstance.title = $localize`Confirm delete mail account` + modal.componentInstance.messageBold = $localize`This operation will permanently this mail account.` + modal.componentInstance.message = $localize`This operation cannot be undone.` + modal.componentInstance.btnClass = 'btn-danger' + modal.componentInstance.btnCaption = $localize`Proceed` + modal.componentInstance.confirmClicked.subscribe(() => { + modal.componentInstance.buttonsEnabled = false + this.mailAccountService.delete(account) + }) + } + editMailRule(rule: PaperlessMailRule) { console.log(rule) @@ -524,4 +540,19 @@ export class SettingsComponent // this.documentForm.get('storage_path').setValue(newStoragePath.id) // }) } + + deleteMailRule(rule: PaperlessMailRule) { + let modal = this.modalService.open(ConfirmDialogComponent, { + backdrop: 'static', + }) + modal.componentInstance.title = $localize`Confirm delete mail rule` + modal.componentInstance.messageBold = $localize`This operation will permanently this mail rule.` + modal.componentInstance.message = $localize`This operation cannot be undone.` + modal.componentInstance.btnClass = 'btn-danger' + modal.componentInstance.btnCaption = $localize`Proceed` + modal.componentInstance.confirmClicked.subscribe(() => { + modal.componentInstance.buttonsEnabled = false + this.mailRuleService.delete(rule) + }) + } } From 997bff4917d5ef8c9426d3751927b4afcf9d2e6f Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 9 Nov 2022 02:40:45 -0800 Subject: [PATCH 067/231] Update deprecated edit-dialog rxjs --- .../common/edit-dialog/edit-dialog.component.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts index e87eed438..9bf141e78 100644 --- a/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts @@ -92,16 +92,16 @@ export abstract class EditDialogComponent break } this.networkActive = true - serverResponse.subscribe( - (result) => { + serverResponse.subscribe({ + next: (result) => { this.activeModal.close() this.success.emit(result) }, - (error) => { + error: (error) => { this.error = error.error this.networkActive = false - } - ) + }, + }) } cancel() { From 18ad9bcbf2865f27ca8a04bc37b210c9c8c3eb86 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 8 Nov 2022 12:18:47 -0800 Subject: [PATCH 068/231] Working mail rule & account edit --- .../mail-rule-edit-dialog.component.html | 13 ++-- .../mail-rule-edit-dialog.component.ts | 9 +++ .../manage/settings/settings.component.html | 8 +-- .../manage/settings/settings.component.ts | 71 ++++++++++--------- src-ui/src/app/data/paperless-mail-rule.ts | 8 +-- src/documents/serialisers.py | 10 +++ 6 files changed, 72 insertions(+), 47 deletions(-) diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html index 0b7891e81..876b7b179 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html @@ -9,15 +9,16 @@
        - + - - - -
        -
        +
        +
        + + + +
        diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts index c4faf86ab..d820e3d5d 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts @@ -5,6 +5,7 @@ import { first } from 'rxjs' import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component' import { PaperlessCorrespondent } from 'src/app/data/paperless-correspondent' import { PaperlessDocumentType } from 'src/app/data/paperless-document-type' +import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account' import { MailAction, MailActionOptions, @@ -18,6 +19,7 @@ import { } from 'src/app/data/paperless-mail-rule' import { CorrespondentService } from 'src/app/services/rest/correspondent.service' import { DocumentTypeService } from 'src/app/services/rest/document-type.service' +import { MailAccountService } from 'src/app/services/rest/mail-account.service' import { MailRuleService } from 'src/app/services/rest/mail-rule.service' @Component({ @@ -26,17 +28,24 @@ import { MailRuleService } from 'src/app/services/rest/mail-rule.service' styleUrls: ['./mail-rule-edit-dialog.component.scss'], }) export class MailRuleEditDialogComponent extends EditDialogComponent { + accounts: PaperlessMailAccount[] correspondents: PaperlessCorrespondent[] documentTypes: PaperlessDocumentType[] constructor( service: MailRuleService, activeModal: NgbActiveModal, + accountService: MailAccountService, correspondentService: CorrespondentService, documentTypeService: DocumentTypeService ) { super(service, activeModal) + accountService + .listAll() + .pipe(first()) + .subscribe((result) => (this.accounts = result.results)) + correspondentService .listAll() .pipe(first()) diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 03cc9f02e..0aec87033 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -234,8 +234,8 @@
      • -
        -
        {{account.imap_server}}
        +
        +
        {{account.imap_server}}
        @@ -261,8 +261,8 @@
      • -
        -
        {{rule.account.name}}
        +
        +
        {{(mailAccountService.getCached(rule.account) | async)?.name}}
        diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 8efbb486e..818ad6b14 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -31,7 +31,7 @@ import { ViewportScroller } from '@angular/common' import { TourService } from 'ngx-ui-tour-ng-bootstrap' import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account' import { PaperlessMailRule } from 'src/app/data/paperless-mail-rule' -import { MailAccountService as MailAccountService } from 'src/app/services/rest/mail-account.service' +import { MailAccountService } from 'src/app/services/rest/mail-account.service' import { MailRuleService } from 'src/app/services/rest/mail-rule.service' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { MailAccountEditDialogComponent } from '../../common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component' @@ -477,28 +477,30 @@ export class SettingsComponent } editMailAccount(account: PaperlessMailAccount) { - console.log(account) - var modal = this.modalService.open(MailAccountEditDialogComponent, { backdrop: 'static', size: 'xl', }) modal.componentInstance.dialogMode = 'edit' modal.componentInstance.object = account - // TODO: saving - // modal.componentInstance.success - // .pipe( - // switchMap((newStoragePath) => { - // return this.storagePathService - // .listAll() - // .pipe(map((storagePaths) => ({ newStoragePath, storagePaths }))) - // }) - // ) - // .pipe(takeUntil(this.unsubscribeNotifier)) - // .subscribe(({ newStoragePath, storagePaths }) => { - // this.storagePaths = storagePaths.results - // this.documentForm.get('storage_path').setValue(newStoragePath.id) - // }) + modal.componentInstance.success + .pipe(takeUntil(this.unsubscribeNotifier)) + .subscribe({ + next: (newMailAccount) => { + this.toastService.showInfo( + $localize`Saved account "${newMailAccount.name}".` + ) + this.mailAccountService.listAll().subscribe((r) => { + this.mailAccounts = r.results + this.initialize() + }) + }, + error: (e) => { + this.toastService.showError( + $localize`Error saving account: ${e.toString()}.` + ) + }, + }) } deleteMailAccount(account: PaperlessMailAccount) { @@ -517,28 +519,31 @@ export class SettingsComponent } editMailRule(rule: PaperlessMailRule) { - console.log(rule) - var modal = this.modalService.open(MailRuleEditDialogComponent, { backdrop: 'static', size: 'xl', }) modal.componentInstance.dialogMode = 'edit' modal.componentInstance.object = rule - // TODO: saving - // modal.componentInstance.success - // .pipe( - // switchMap((newStoragePath) => { - // return this.storagePathService - // .listAll() - // .pipe(map((storagePaths) => ({ newStoragePath, storagePaths }))) - // }) - // ) - // .pipe(takeUntil(this.unsubscribeNotifier)) - // .subscribe(({ newStoragePath, storagePaths }) => { - // this.storagePaths = storagePaths.results - // this.documentForm.get('storage_path').setValue(newStoragePath.id) - // }) + modal.componentInstance.success + .pipe(takeUntil(this.unsubscribeNotifier)) + .subscribe({ + next: (newMailRule) => { + this.toastService.showInfo( + $localize`Saved rule "${newMailRule.name}".` + ) + this.mailRuleService.listAll().subscribe((r) => { + this.mailRules = r.results + + this.initialize() + }) + }, + error: (e) => { + this.toastService.showError( + $localize`Error saving rule: ${e.toString()}.` + ) + }, + }) } deleteMailRule(rule: PaperlessMailRule) { diff --git a/src-ui/src/app/data/paperless-mail-rule.ts b/src-ui/src/app/data/paperless-mail-rule.ts index 31d734739..0f0e417f8 100644 --- a/src-ui/src/app/data/paperless-mail-rule.ts +++ b/src-ui/src/app/data/paperless-mail-rule.ts @@ -101,7 +101,7 @@ export interface PaperlessMailRule extends ObjectWithId { order: number - account: PaperlessMailAccount + account: number // PaperlessMailAccount.id folder: string @@ -123,11 +123,11 @@ export interface PaperlessMailRule extends ObjectWithId { assign_title_from: MailMetadataTitleOption - assign_tags?: PaperlessTag[] + assign_tags?: number[] // PaperlessTag.id - assign_document_type?: PaperlessDocumentType + assign_document_type?: number // PaperlessDocumentType.id assign_correspondent_from?: MailMetadataCorrespondentOption - assign_correspondent?: PaperlessCorrespondent + assign_correspondent?: number // PaperlessCorrespondent.id } diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 86e0f4a12..d2fa10af9 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -716,7 +716,17 @@ class MailAccountSerializer(serializers.ModelSerializer): return mail_account +class AccountField(serializers.PrimaryKeyRelatedField): + def get_queryset(self): + return MailAccount.objects.all() + + class MailRuleSerializer(serializers.ModelSerializer): + account = AccountField(allow_null=True) + assign_correspondent = CorrespondentField(allow_null=True) + assign_tags = TagsField(many=True) + assign_document_type = DocumentTypeField(allow_null=True) + class Meta: model = MailRule depth = 1 From 2eb2d99a913f4b1dcb8a2d55393e5e96794cb17b Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 9 Nov 2022 03:43:57 -0800 Subject: [PATCH 069/231] Update frontend fixtures & tests for compatibility --- src-ui/cypress/e2e/settings/settings.cy.ts | 16 +++++-- .../fixtures/mail_accounts/mail_accounts.json | 27 +++++++++++ .../fixtures/mail_rules/mail_rules.json | 29 ++++++++++++ .../fixtures/saved_views/savedviews.json | 45 ++++++++++++++++++- 4 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 src-ui/cypress/fixtures/mail_accounts/mail_accounts.json create mode 100644 src-ui/cypress/fixtures/mail_rules/mail_rules.json diff --git a/src-ui/cypress/e2e/settings/settings.cy.ts b/src-ui/cypress/e2e/settings/settings.cy.ts index 0480e39ce..7752fdf61 100644 --- a/src-ui/cypress/e2e/settings/settings.cy.ts +++ b/src-ui/cypress/e2e/settings/settings.cy.ts @@ -35,6 +35,16 @@ describe('settings', () => { req.reply(response) } ).as('savedViews') + + cy.intercept('http://localhost:8000/api/mail_accounts/*', { + fixture: 'mail_accounts/mail_accounts.json', + }) + cy.intercept('http://localhost:8000/api/mail_rules/*', { + fixture: 'mail_rules/mail_rules.json', + }).as('mailRules') + cy.intercept('http://localhost:8000/api/tasks/', { + fixture: 'tasks/tasks.json', + }) }) cy.fixture('documents/documents.json').then((documentsJson) => { @@ -48,7 +58,7 @@ describe('settings', () => { cy.viewport(1024, 1600) cy.visit('/settings') - cy.wait('@savedViews') + cy.wait('@mailRules') }) it('should activate / deactivate save button when settings change and are saved', () => { @@ -64,7 +74,7 @@ describe('settings', () => { cy.contains('a', 'Dashboard').click() cy.contains('You have unsaved changes') cy.contains('button', 'Cancel').click() - cy.contains('button', 'Save').click().wait('@savedViews') + cy.contains('button', 'Save').click().wait('@savedViews').wait(2000) cy.contains('a', 'Dashboard').click() cy.contains('You have unsaved changes').should('not.exist') }) @@ -77,7 +87,7 @@ describe('settings', () => { }) it('should remove saved view from sidebar when unset', () => { - cy.contains('a', 'Saved views').click() + cy.contains('a', 'Saved views').click().wait(2000) cy.get('#show_in_sidebar_1').click() cy.contains('button', 'Save').click().wait('@savedViews') cy.contains('li', 'Inbox').should('not.exist') diff --git a/src-ui/cypress/fixtures/mail_accounts/mail_accounts.json b/src-ui/cypress/fixtures/mail_accounts/mail_accounts.json new file mode 100644 index 000000000..19c45b15a --- /dev/null +++ b/src-ui/cypress/fixtures/mail_accounts/mail_accounts.json @@ -0,0 +1,27 @@ +{ + "count": 2, + "next": null, + "previous": null, + "results": [ + { + "id": 1, + "name": "IMAP Server", + "imap_server": "imap.example.com", + "imap_port": 993, + "imap_security": 2, + "username": "inbox@example.com", + "password": "pass", + "character_set": "UTF-8" + }, + { + "id": 2, + "name": "Gmail", + "imap_server": "imap.gmail.com", + "imap_port": 993, + "imap_security": 2, + "username": "user@gmail.com", + "password": "pass", + "character_set": "UTF-8" + } + ] +} diff --git a/src-ui/cypress/fixtures/mail_rules/mail_rules.json b/src-ui/cypress/fixtures/mail_rules/mail_rules.json new file mode 100644 index 000000000..a2c59c5c6 --- /dev/null +++ b/src-ui/cypress/fixtures/mail_rules/mail_rules.json @@ -0,0 +1,29 @@ +{ + "count": 1, + "next": null, + "previous": null, + "results": [ + { + "id": 1, + "name": "Gmail", + "account": 2, + "folder": "INBOX", + "filter_from": null, + "filter_subject": "[paperless]", + "filter_body": null, + "filter_attachment_filename": null, + "maximum_age": 30, + "action": 3, + "action_parameter": null, + "assign_title_from": 1, + "assign_tags": [ + 9 + ], + "assign_correspondent_from": 1, + "assign_correspondent": 2, + "assign_document_type": null, + "order": 0, + "attachment_type": 2 + } + ] +} diff --git a/src-ui/cypress/fixtures/saved_views/savedviews.json b/src-ui/cypress/fixtures/saved_views/savedviews.json index 003bd900a..64afcf3dc 100644 --- a/src-ui/cypress/fixtures/saved_views/savedviews.json +++ b/src-ui/cypress/fixtures/saved_views/savedviews.json @@ -1 +1,44 @@ -{"count":3,"next":null,"previous":null,"results":[{"id":1,"name":"Inbox","show_on_dashboard":true,"show_in_sidebar":true,"sort_field":"created","sort_reverse":true,"filter_rules":[{"rule_type":6,"value":"18"}]},{"id":2,"name":"Recently Added","show_on_dashboard":true,"show_in_sidebar":false,"sort_field":"created","sort_reverse":true,"filter_rules":[]},{"id":11,"name":"Taxes","show_on_dashboard":false,"show_in_sidebar":true,"sort_field":"created","sort_reverse":true,"filter_rules":[{"rule_type":6,"value":"39"}]}]} +{ + "count": 3, + "next": null, + "previous": null, + "results": [ + { + "id": 1, + "name": "Inbox", + "show_on_dashboard": true, + "show_in_sidebar": true, + "sort_field": "created", + "sort_reverse": true, + "filter_rules": [ + { + "rule_type": 6, + "value": "18" + } + ] + }, + { + "id": 2, + "name": "Recently Added", + "show_on_dashboard": true, + "show_in_sidebar": false, + "sort_field": "created", + "sort_reverse": true, + "filter_rules": [] + }, + { + "id": 11, + "name": "Taxes", + "show_on_dashboard": false, + "show_in_sidebar": true, + "sort_field": "created", + "sort_reverse": true, + "filter_rules": [ + { + "rule_type": 6, + "value": "39" + } + ] + } + ] +} From 98cdf614a576618a96035ff7dcc93849199ea52d Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 9 Nov 2022 19:59:35 -0800 Subject: [PATCH 070/231] Mail form tweaks Include add button Include add button --- .../mail-account-edit-dialog.component.ts | 7 +- .../mail-rule-edit-dialog.component.html | 15 ++-- .../mail-rule-edit-dialog.component.ts | 75 +++++++++++++++++-- .../common/input/number/number.component.html | 2 +- .../common/input/number/number.component.ts | 5 +- .../manage/settings/settings.component.html | 49 +++++++----- .../manage/settings/settings.component.ts | 4 +- src-ui/src/app/data/paperless-mail-account.ts | 6 -- src-ui/src/app/data/paperless-mail-rule.ts | 71 ------------------ 9 files changed, 116 insertions(+), 118 deletions(-) diff --git a/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts index f4d395b03..98c897c89 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts @@ -4,7 +4,6 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component' import { IMAPSecurity, - IMAPSecurityLabels, PaperlessMailAccount, } from 'src/app/data/paperless-mail-account' import { MailAccountService } from 'src/app/services/rest/mail-account.service' @@ -40,6 +39,10 @@ export class MailAccountEditDialogComponent extends EditDialogComponent - - + +
        +

        Paperless will only process mails that match all of the filters specified below.

        - - - +
        + + - + - +
        diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts index d820e3d5d..b2d84d642 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts @@ -8,13 +8,9 @@ import { PaperlessDocumentType } from 'src/app/data/paperless-document-type' import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account' import { MailAction, - MailActionOptions, MailFilterAttachmentType, - MailFilterAttachmentTypeOptions, MailMetadataCorrespondentOption, - MailMetadataCorrespondentOptionOptions, MailMetadataTitleOption, - MailMetadataTitleOptionOptions, PaperlessMailRule, } from 'src/app/data/paperless-mail-rule' import { CorrespondentService } from 'src/app/services/rest/correspondent.service' @@ -89,19 +85,82 @@ export class MailRuleEditDialogComponent extends EditDialogComponent{{title}}
        - +
        {{error}} diff --git a/src-ui/src/app/components/common/input/number/number.component.ts b/src-ui/src/app/components/common/input/number/number.component.ts index cb29ff5e5..5ed861b5a 100644 --- a/src-ui/src/app/components/common/input/number/number.component.ts +++ b/src-ui/src/app/components/common/input/number/number.component.ts @@ -1,4 +1,4 @@ -import { Component, forwardRef } from '@angular/core' +import { Component, forwardRef, Input } from '@angular/core' import { NG_VALUE_ACCESSOR } from '@angular/forms' import { FILTER_ASN_ISNULL } from 'src/app/data/filter-rule-type' import { DocumentService } from 'src/app/services/rest/document.service' @@ -17,6 +17,9 @@ import { AbstractInputComponent } from '../abstract-input' styleUrls: ['./number.component.scss'], }) export class NumberComponent extends AbstractInputComponent { + @Input() + showAdd: boolean = true + constructor(private documentService: DocumentService) { super() } diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 0aec87033..1f0ada8ab 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -221,8 +221,12 @@ Paperless Mail -

        Mail accounts

        -
          + +

          + Mail accounts + +

          +
          • @@ -232,14 +236,15 @@
          • -
          • -
            -
            -
            {{account.imap_server}}
            -
            -
            - - +
          • +
            +
            +
            {{account.imap_server}}
            +
            +
            + + +
        @@ -248,8 +253,11 @@
        No mail accounts defined.
      -

      Mail rules

      -
        +

        + Mail rules + +

        +
        • @@ -259,14 +267,15 @@
        • -
        • -
          -
          -
          {{(mailAccountService.getCached(rule.account) | async)?.name}}
          -
          -
          - - +
        • +
          +
          +
          {{(mailAccountService.getCached(rule.account) | async)?.name}}
          +
          +
          + + +
    diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 818ad6b14..6f68f04df 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -481,7 +481,7 @@ export class SettingsComponent backdrop: 'static', size: 'xl', }) - modal.componentInstance.dialogMode = 'edit' + modal.componentInstance.dialogMode = account ? 'edit' : 'create' modal.componentInstance.object = account modal.componentInstance.success .pipe(takeUntil(this.unsubscribeNotifier)) @@ -523,7 +523,7 @@ export class SettingsComponent backdrop: 'static', size: 'xl', }) - modal.componentInstance.dialogMode = 'edit' + modal.componentInstance.dialogMode = rule ? 'edit' : 'create' modal.componentInstance.object = rule modal.componentInstance.success .pipe(takeUntil(this.unsubscribeNotifier)) diff --git a/src-ui/src/app/data/paperless-mail-account.ts b/src-ui/src/app/data/paperless-mail-account.ts index ea5c17a1b..9f875e783 100644 --- a/src-ui/src/app/data/paperless-mail-account.ts +++ b/src-ui/src/app/data/paperless-mail-account.ts @@ -6,12 +6,6 @@ export enum IMAPSecurity { STARTTLS = 3, } -export const IMAPSecurityLabels: Array<{ id: number; name: string }> = [ - { id: IMAPSecurity.None, name: $localize`No encryption` }, - { id: IMAPSecurity.SSL, name: $localize`SSL` }, - { id: IMAPSecurity.STARTTLS, name: $localize`STARTTLS` }, -] - export interface PaperlessMailAccount extends ObjectWithId { name: string diff --git a/src-ui/src/app/data/paperless-mail-rule.ts b/src-ui/src/app/data/paperless-mail-rule.ts index 0f0e417f8..ff6654a0b 100644 --- a/src-ui/src/app/data/paperless-mail-rule.ts +++ b/src-ui/src/app/data/paperless-mail-rule.ts @@ -1,28 +1,10 @@ import { ObjectWithId } from './object-with-id' -import { PaperlessCorrespondent } from './paperless-correspondent' -import { PaperlessDocumentType } from './paperless-document-type' -import { PaperlessMailAccount } from './paperless-mail-account' -import { PaperlessTag } from './paperless-tag' export enum MailFilterAttachmentType { Attachments = 1, Everything = 2, } -export const MailFilterAttachmentTypeOptions: Array<{ - id: number - name: string -}> = [ - { - id: MailFilterAttachmentType.Attachments, - name: $localize`Only process attachments.`, - }, - { - id: MailFilterAttachmentType.Everything, - name: $localize`Process all files, including 'inline' attachments.`, - }, -] - export enum MailAction { Delete = 1, Move = 2, @@ -31,42 +13,11 @@ export enum MailAction { Tag = 5, } -export const MailActionOptions: Array<{ id: number; name: string }> = [ - { id: MailAction.Delete, name: $localize`Delete` }, - { id: MailAction.Move, name: $localize`Move to specified folder` }, - { - id: MailAction.MarkRead, - name: $localize`Mark as read, don't process read mails`, - }, - { - id: MailAction.Flag, - name: $localize`Flag the mail, don't process flagged mails`, - }, - { - id: MailAction.Tag, - name: $localize`Tag the mail with specified tag, don't process tagged mails`, - }, -] - export enum MailMetadataTitleOption { FromSubject = 1, FromFilename = 2, } -export const MailMetadataTitleOptionOptions: Array<{ - id: number - name: string -}> = [ - { - id: MailMetadataTitleOption.FromSubject, - name: $localize`Use subject as title`, - }, - { - id: MailMetadataTitleOption.FromFilename, - name: $localize`Use attachment filename as title`, - }, -] - export enum MailMetadataCorrespondentOption { FromNothing = 1, FromEmail = 2, @@ -74,28 +25,6 @@ export enum MailMetadataCorrespondentOption { FromCustom = 4, } -export const MailMetadataCorrespondentOptionOptions: Array<{ - id: number - name: string -}> = [ - { - id: MailMetadataCorrespondentOption.FromNothing, - name: $localize`Do not assign a correspondent`, - }, - { - id: MailMetadataCorrespondentOption.FromEmail, - name: $localize`Use mail address`, - }, - { - id: MailMetadataCorrespondentOption.FromName, - name: $localize`Use name (or mail address if not available)`, - }, - { - id: MailMetadataCorrespondentOption.FromCustom, - name: $localize`Use correspondent selected below`, - }, -] - export interface PaperlessMailRule extends ObjectWithId { name: string From 40c8629aef6f0b971d17a190ad48e6c6680e4d30 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 10 Nov 2022 21:04:29 -0800 Subject: [PATCH 071/231] Update welcome tour, move admin button --- src-ui/src/app/app.component.ts | 10 +--------- .../app/components/app-frame/app-frame.component.html | 7 ------- .../components/manage/settings/settings.component.html | 9 +++++++-- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src-ui/src/app/app.component.ts b/src-ui/src/app/app.component.ts index b385498fb..9a6962ccf 100644 --- a/src-ui/src/app/app.component.ts +++ b/src-ui/src/app/app.component.ts @@ -191,21 +191,13 @@ export class AppComponent implements OnInit, OnDestroy { }, { anchorId: 'tour.settings', - content: $localize`Check out the settings for various tweaks to the web app or to toggle settings for saved views.`, + content: $localize`Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking.`, route: '/settings', enableBackdrop: true, prevBtnTitle, nextBtnTitle, endBtnTitle, }, - { - anchorId: 'tour.admin', - content: $localize`The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.`, - enableBackdrop: true, - prevBtnTitle, - nextBtnTitle, - endBtnTitle, - }, { anchorId: 'tour.outro', title: $localize`Thank you! 🙏`, diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index 589b95f4f..5115303d7 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -174,13 +174,6 @@  Settings -
    -
    No saved views defined.
    +
    No saved views defined.
    + +
    +
    +
    Loading...
    +
    diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 6f68f04df..7fed7561e 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -37,6 +37,15 @@ import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { MailAccountEditDialogComponent } from '../../common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component' import { MailRuleEditDialogComponent } from '../../common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component' import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component' +import { NgbNavChangeEvent } from '@ng-bootstrap/ng-bootstrap' + +enum SettingsNavIDs { + General = 1, + Notifications = 2, + SavedViews = 3, + Mail = 4, + UsersGroups = 5, +} @Component({ selector: 'app-settings', @@ -46,6 +55,9 @@ import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dial export class SettingsComponent implements OnInit, AfterViewInit, OnDestroy, DirtyComponent { + SettingsNavIDs = SettingsNavIDs + activeNavID: number + savedViewGroup = new FormGroup({}) mailAccountGroup = new FormGroup({}) @@ -171,19 +183,20 @@ export class SettingsComponent } ngOnInit() { - this.savedViewService.listAll().subscribe((r) => { - this.savedViews = r.results + this.initialize() + } - this.mailAccountService.listAll().subscribe((r) => { - this.mailAccounts = r.results - - this.mailRuleService.listAll().subscribe((r) => { - this.mailRules = r.results - - this.initialize() - }) + // Load tab contents 'on demand', either on mouseover or focusin (i.e. before click) or on nav change event + maybeInitializeTab(navIDorEvent: number | NgbNavChangeEvent): void { + const navID = + typeof navIDorEvent == 'number' ? navIDorEvent : navIDorEvent.nextId + // initialize saved views + if (navID == SettingsNavIDs.SavedViews && !this.savedViews) { + this.savedViewService.listAll().subscribe((r) => { + this.savedViews = r.results + this.initialize() }) - }) + } } initialize() { @@ -191,22 +204,24 @@ export class SettingsComponent let storeData = this.getCurrentSettings() - for (let view of this.savedViews) { - storeData.savedViews[view.id.toString()] = { - id: view.id, - name: view.name, - show_on_dashboard: view.show_on_dashboard, - show_in_sidebar: view.show_in_sidebar, + if (this.savedViews) { + for (let view of this.savedViews) { + storeData.savedViews[view.id.toString()] = { + id: view.id, + name: view.name, + show_on_dashboard: view.show_on_dashboard, + show_in_sidebar: view.show_in_sidebar, + } + this.savedViewGroup.addControl( + view.id.toString(), + new FormGroup({ + id: new FormControl(null), + name: new FormControl(null), + show_on_dashboard: new FormControl(null), + show_in_sidebar: new FormControl(null), + }) + ) } - this.savedViewGroup.addControl( - view.id.toString(), - new FormGroup({ - id: new FormControl(null), - name: new FormControl(null), - show_on_dashboard: new FormControl(null), - show_in_sidebar: new FormControl(null), - }) - ) } for (let account of this.mailAccounts) { From 4cb4d6adcd33c917c370fd480687fdcecf09230b Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 12 Nov 2022 15:15:59 -0800 Subject: [PATCH 073/231] update settings tests to not wait on data which is now on-demand --- src-ui/cypress/e2e/settings/settings.cy.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src-ui/cypress/e2e/settings/settings.cy.ts b/src-ui/cypress/e2e/settings/settings.cy.ts index 7752fdf61..aa59997d4 100644 --- a/src-ui/cypress/e2e/settings/settings.cy.ts +++ b/src-ui/cypress/e2e/settings/settings.cy.ts @@ -58,7 +58,6 @@ describe('settings', () => { cy.viewport(1024, 1600) cy.visit('/settings') - cy.wait('@mailRules') }) it('should activate / deactivate save button when settings change and are saved', () => { @@ -89,14 +88,14 @@ describe('settings', () => { it('should remove saved view from sidebar when unset', () => { cy.contains('a', 'Saved views').click().wait(2000) cy.get('#show_in_sidebar_1').click() - cy.contains('button', 'Save').click().wait('@savedViews') + cy.contains('button', 'Save').click().wait('@savedViews').wait(2000) cy.contains('li', 'Inbox').should('not.exist') }) it('should remove saved view from dashboard when unset', () => { cy.contains('a', 'Saved views').click() cy.get('#show_on_dashboard_1').click() - cy.contains('button', 'Save').click().wait('@savedViews') + cy.contains('button', 'Save').click().wait('@savedViews').wait(2000) cy.visit('/dashboard') cy.get('app-saved-view-widget').contains('Inbox').should('not.exist') }) From 52d3a8703c383d414298f8814a1bc3957ce89ec5 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 12 Nov 2022 15:14:58 -0800 Subject: [PATCH 074/231] Dynamically load mail rules / accounts settings --- .../manage/settings/settings.component.html | 50 +++--- .../manage/settings/settings.component.ts | 144 ++++++++++-------- .../app/services/rest/mail-account.service.ts | 1 - .../app/services/rest/mail-rule.service.ts | 1 - 4 files changed, 106 insertions(+), 90 deletions(-) diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index ca7c0e9f2..61aaf15d8 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -227,7 +227,7 @@ -
  • +
  • Mail @@ -238,13 +238,13 @@
      -
    • -
      -
      Name
      -
      Server
      -
      Actions
      -
      -
    • +
    • +
      +
      Name
      +
      Server
      +
      Actions
      +
      +
    • @@ -257,11 +257,10 @@
      - -
    • + -
      No mail accounts defined.
      -
    +
    No mail accounts defined.
    +

    Mail rules @@ -269,13 +268,13 @@

      -
    • -
      -
      Name
      -
      Account
      -
      Actions
      -
      -
    • +
    • +
      +
      Name
      +
      Account
      +
      Actions
      +
      +
    • @@ -288,11 +287,16 @@
      - -
    • + -
      No mail rules defined.
      -
    +
    No mail rules defined.
    + + + +
    +
    +
    Loading...
    +
  • diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 7fed7561e..fc072aeee 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -196,6 +196,18 @@ export class SettingsComponent this.savedViews = r.results this.initialize() }) + } else if ( + (navID == SettingsNavIDs.Mail && !this.mailAccounts) || + !this.mailRules + ) { + this.mailAccountService.listAll().subscribe((r) => { + this.mailAccounts = r.results + + this.mailRuleService.listAll().subscribe((r) => { + this.mailRules = r.results + this.initialize() + }) + }) } } @@ -224,74 +236,76 @@ export class SettingsComponent } } - for (let account of this.mailAccounts) { - storeData.mailAccounts[account.id.toString()] = { - id: account.id, - name: account.name, - imap_server: account.imap_server, - imap_port: account.imap_port, - imap_security: account.imap_security, - username: account.username, - password: account.password, - character_set: account.character_set, + if (this.mailAccounts && this.mailRules) { + for (let account of this.mailAccounts) { + storeData.mailAccounts[account.id.toString()] = { + id: account.id, + name: account.name, + imap_server: account.imap_server, + imap_port: account.imap_port, + imap_security: account.imap_security, + username: account.username, + password: account.password, + character_set: account.character_set, + } + this.mailAccountGroup.addControl( + account.id.toString(), + new FormGroup({ + id: new FormControl(null), + name: new FormControl(null), + imap_server: new FormControl(null), + imap_port: new FormControl(null), + imap_security: new FormControl(null), + username: new FormControl(null), + password: new FormControl(null), + character_set: new FormControl(null), + }) + ) } - this.mailAccountGroup.addControl( - account.id.toString(), - new FormGroup({ - id: new FormControl(null), - name: new FormControl(null), - imap_server: new FormControl(null), - imap_port: new FormControl(null), - imap_security: new FormControl(null), - username: new FormControl(null), - password: new FormControl(null), - character_set: new FormControl(null), - }) - ) - } - for (let rule of this.mailRules) { - storeData.mailRules[rule.id.toString()] = { - name: rule.name, - order: rule.order, - account: rule.account, - folder: rule.folder, - filter_from: rule.filter_from, - filter_subject: rule.filter_subject, - filter_body: rule.filter_body, - filter_attachment_filename: rule.filter_attachment_filename, - maximum_age: rule.maximum_age, - attachment_type: rule.attachment_type, - action: rule.action, - action_parameter: rule.action_parameter, - assign_title_from: rule.assign_title_from, - assign_tags: rule.assign_tags, - assign_document_type: rule.assign_document_type, - assign_correspondent_from: rule.assign_correspondent_from, - assign_correspondent: rule.assign_correspondent, + for (let rule of this.mailRules) { + storeData.mailRules[rule.id.toString()] = { + name: rule.name, + order: rule.order, + account: rule.account, + folder: rule.folder, + filter_from: rule.filter_from, + filter_subject: rule.filter_subject, + filter_body: rule.filter_body, + filter_attachment_filename: rule.filter_attachment_filename, + maximum_age: rule.maximum_age, + attachment_type: rule.attachment_type, + action: rule.action, + action_parameter: rule.action_parameter, + assign_title_from: rule.assign_title_from, + assign_tags: rule.assign_tags, + assign_document_type: rule.assign_document_type, + assign_correspondent_from: rule.assign_correspondent_from, + assign_correspondent: rule.assign_correspondent, + } + this.mailRuleGroup.addControl( + rule.id.toString(), + new FormGroup({ + name: new FormControl(null), + order: new FormControl(null), + account: new FormControl(null), + folder: new FormControl(null), + filter_from: new FormControl(null), + filter_subject: new FormControl(null), + filter_body: new FormControl(null), + filter_attachment_filename: new FormControl(null), + maximum_age: new FormControl(null), + attachment_type: new FormControl(null), + action: new FormControl(null), + action_parameter: new FormControl(null), + assign_title_from: new FormControl(null), + assign_tags: new FormControl(null), + assign_document_type: new FormControl(null), + assign_correspondent_from: new FormControl(null), + assign_correspondent: new FormControl(null), + }) + ) } - this.mailRuleGroup.addControl( - rule.id.toString(), - new FormGroup({ - name: new FormControl(null), - order: new FormControl(null), - account: new FormControl(null), - folder: new FormControl(null), - filter_from: new FormControl(null), - filter_subject: new FormControl(null), - filter_body: new FormControl(null), - filter_attachment_filename: new FormControl(null), - maximum_age: new FormControl(null), - attachment_type: new FormControl(null), - action: new FormControl(null), - action_parameter: new FormControl(null), - assign_title_from: new FormControl(null), - assign_tags: new FormControl(null), - assign_document_type: new FormControl(null), - assign_correspondent_from: new FormControl(null), - assign_correspondent: new FormControl(null), - }) - ) } this.store = new BehaviorSubject(storeData) diff --git a/src-ui/src/app/services/rest/mail-account.service.ts b/src-ui/src/app/services/rest/mail-account.service.ts index a4db86684..438aa8c90 100644 --- a/src-ui/src/app/services/rest/mail-account.service.ts +++ b/src-ui/src/app/services/rest/mail-account.service.ts @@ -13,7 +13,6 @@ export class MailAccountService extends AbstractPaperlessService constructor(http: HttpClient) { super(http, 'mail_rules') - this.reload() } private reload() { From ea1ea0816fbd4d17d9c62fe21e983f1fa62ca4d9 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 18 Nov 2022 14:10:17 -0800 Subject: [PATCH 075/231] Fix mail account / rule delete --- .../manage/settings/settings.component.ts | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index fc072aeee..fbb41b972 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -543,7 +543,22 @@ export class SettingsComponent modal.componentInstance.btnCaption = $localize`Proceed` modal.componentInstance.confirmClicked.subscribe(() => { modal.componentInstance.buttonsEnabled = false - this.mailAccountService.delete(account) + this.mailAccountService.delete(account).subscribe({ + next: () => { + modal.close() + this.toastService.showInfo($localize`Deleted mail account`) + this.mailAccountService.clearCache() + this.mailAccountService.listAll().subscribe((r) => { + this.mailAccounts = r.results + this.initialize() + }) + }, + error: (e) => { + this.toastService.showError( + $localize`Error deleting mail account: ${e.toString()}.` + ) + }, + }) }) } @@ -586,7 +601,22 @@ export class SettingsComponent modal.componentInstance.btnCaption = $localize`Proceed` modal.componentInstance.confirmClicked.subscribe(() => { modal.componentInstance.buttonsEnabled = false - this.mailRuleService.delete(rule) + this.mailRuleService.delete(rule).subscribe({ + next: () => { + modal.close() + this.toastService.showInfo($localize`Deleted mail rule`) + this.mailRuleService.clearCache() + this.mailRuleService.listAll().subscribe((r) => { + this.mailRules = r.results + this.initialize() + }) + }, + error: (e) => { + this.toastService.showError( + $localize`Error deleting mail rule: ${e.toString()}.` + ) + }, + }) }) } } From 284941444519e44b2d4322e0af2c9edd408d2b7a Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 18 Nov 2022 14:21:31 -0800 Subject: [PATCH 076/231] one-way imap password setting via API, ObfuscatedPasswordField --- src/documents/serialisers.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index d2fa10af9..cede116fe 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -692,7 +692,21 @@ class AcknowledgeTasksViewSerializer(serializers.Serializer): return tasks +class ObfuscatedPasswordField(serializers.Field): + """ + Sends *** string instead of password in the clear + """ + + def to_representation(self, value): + return re.sub(".", "*", value) + + def to_internal_value(self, data): + return data + + class MailAccountSerializer(serializers.ModelSerializer): + password = ObfuscatedPasswordField() + class Meta: model = MailAccount depth = 1 @@ -708,6 +722,9 @@ class MailAccountSerializer(serializers.ModelSerializer): ] def update(self, instance, validated_data): + if "password" in validated_data: + if len(validated_data.get("password").replace("*", "")) == 0: + validated_data.pop("password") super().update(instance, validated_data) return instance From 8c4f486fe984e1b5ebd19e314c49ae7277ae7178 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 18 Nov 2022 14:22:07 -0800 Subject: [PATCH 077/231] API mail rule & account tests and fix use of assign_tags --- .../mail-rule-edit-dialog.component.ts | 2 +- src/documents/serialisers.py | 17 +- src/documents/tests/test_api.py | 440 ++++++++++++++++++ 3 files changed, 454 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts index b2d84d642..22b5df542 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts @@ -76,7 +76,7 @@ export class MailRuleEditDialogComponent extends EditDialogComponent Date: Fri, 18 Nov 2022 17:11:15 -0800 Subject: [PATCH 078/231] Hide order parameter, fix imap port --- .../mail-account-edit-dialog.component.html | 2 +- .../mail-rule-edit-dialog.component.html | 1 - .../mail-rule-edit-dialog.component.ts | 1 - .../manage/settings/settings.component.html | 14 ++++++++++++-- .../manage/settings/settings.component.ts | 4 ++-- src-ui/src/app/data/paperless-mail-rule.ts | 2 -- src/documents/serialisers.py | 1 + 7 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html index 807df18c5..8164fca9a 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html +++ b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html @@ -9,7 +9,7 @@
    - +
    diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html index 3eb793ae2..dc4260ffd 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html @@ -8,7 +8,6 @@
    - diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts index 22b5df542..7644ed353 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts @@ -64,7 +64,6 @@ export class MailRuleEditDialogComponent extends EditDialogComponent

    Mail accounts - +

      @@ -264,7 +269,12 @@

      Mail rules - +

        diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index fbb41b972..3a146fb36 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -266,7 +266,6 @@ export class SettingsComponent for (let rule of this.mailRules) { storeData.mailRules[rule.id.toString()] = { name: rule.name, - order: rule.order, account: rule.account, folder: rule.folder, filter_from: rule.filter_from, @@ -287,7 +286,6 @@ export class SettingsComponent rule.id.toString(), new FormGroup({ name: new FormControl(null), - order: new FormControl(null), account: new FormControl(null), folder: new FormControl(null), filter_from: new FormControl(null), @@ -519,6 +517,7 @@ export class SettingsComponent this.toastService.showInfo( $localize`Saved account "${newMailAccount.name}".` ) + this.mailAccountService.clearCache() this.mailAccountService.listAll().subscribe((r) => { this.mailAccounts = r.results this.initialize() @@ -576,6 +575,7 @@ export class SettingsComponent this.toastService.showInfo( $localize`Saved rule "${newMailRule.name}".` ) + this.mailRuleService.clearCache() this.mailRuleService.listAll().subscribe((r) => { this.mailRules = r.results diff --git a/src-ui/src/app/data/paperless-mail-rule.ts b/src-ui/src/app/data/paperless-mail-rule.ts index ff6654a0b..9ff133dab 100644 --- a/src-ui/src/app/data/paperless-mail-rule.ts +++ b/src-ui/src/app/data/paperless-mail-rule.ts @@ -28,8 +28,6 @@ export enum MailMetadataCorrespondentOption { export interface PaperlessMailRule extends ObjectWithId { name: string - order: number - account: number // PaperlessMailAccount.id folder: string diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 6b78d1f89..44572e8fb 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -748,6 +748,7 @@ class MailRuleSerializer(serializers.ModelSerializer): assign_correspondent = CorrespondentField(allow_null=True, required=False) assign_tags = TagsField(many=True, allow_null=True, required=False) assign_document_type = DocumentTypeField(allow_null=True, required=False) + order = serializers.IntegerField(required=False) class Meta: model = MailRule From 14cf4f709521123fcb8c9472c5f6b3c663ffc5c8 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 18 Nov 2022 19:38:49 -0800 Subject: [PATCH 079/231] Update frontend strings --- src-ui/messages.xlf | 868 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 707 insertions(+), 161 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 5e451935a..da0fb042c 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -370,46 +370,39 @@ 185 - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - Thank you! 🙏 src/app/app.component.ts - 211 + 203 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Initiating upload... src/app/app.component.ts - 264 + 256 @@ -514,7 +507,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 @@ -631,22 +624,11 @@ 1 - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -657,68 +639,68 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 @@ -729,7 +711,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 @@ -843,6 +825,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -889,7 +879,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -963,6 +961,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -994,6 +1000,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1012,56 +1026,424 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 + + + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 @@ -1086,35 +1468,35 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 @@ -1146,14 +1528,14 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 @@ -1269,6 +1651,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1535,57 +1925,6 @@ 5 - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Download @@ -1855,7 +2194,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 @@ -1880,7 +2219,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 @@ -1943,6 +2282,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Proceed @@ -1954,6 +2301,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content. @@ -2053,7 +2408,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2315,6 +2678,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + View @@ -2675,7 +3046,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 @@ -2686,7 +3057,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 @@ -2877,18 +3248,46 @@ 39 + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 @@ -2897,7 +3296,7 @@ )"/> src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 @@ -2907,333 +3306,396 @@ 2 + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + General src/app/components/manage/settings/settings.component.html - 10 + 15 Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Display language src/app/components/manage/settings/settings.component.html - 17 + 22 You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 + + + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 @@ -3242,7 +3704,91 @@ )"/> src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 + + + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 From 4f9a31244b3916b7205388fcae46b2d59cca10f7 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 18 Nov 2022 20:23:40 -0800 Subject: [PATCH 080/231] Add settings routing --- src-ui/src/app/app-routing.module.ts | 5 +++ .../manage/settings/settings.component.html | 2 +- .../manage/settings/settings.component.ts | 40 ++++++++++++++----- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src-ui/src/app/app-routing.module.ts b/src-ui/src/app/app-routing.module.ts index 4dad24c51..084bc4a0b 100644 --- a/src-ui/src/app/app-routing.module.ts +++ b/src-ui/src/app/app-routing.module.ts @@ -47,6 +47,11 @@ const routes: Routes = [ component: SettingsComponent, canDeactivate: [DirtyFormGuard], }, + { + path: 'settings/:section', + component: SettingsComponent, + canDeactivate: [DirtyFormGuard], + }, { path: 'tasks', component: TasksComponent }, ], }, diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 138899713..0286e3561 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -10,7 +10,7 @@ -
    - + diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts index 7644ed353..3dcd7ce01 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts @@ -18,6 +18,70 @@ import { DocumentTypeService } from 'src/app/services/rest/document-type.service import { MailAccountService } from 'src/app/services/rest/mail-account.service' import { MailRuleService } from 'src/app/services/rest/mail-rule.service' +const ATTACHMENT_TYPE_OPTIONS = [ + { + id: MailFilterAttachmentType.Attachments, + name: $localize`Only process attachments.`, + }, + { + id: MailFilterAttachmentType.Everything, + name: $localize`Process all files, including 'inline' attachments.`, + }, +] + +const ACTION_OPTIONS = [ + { + id: MailAction.Delete, + name: $localize`Delete`, + }, + { + id: MailAction.Move, + name: $localize`Move to specified folder`, + }, + { + id: MailAction.MarkRead, + name: $localize`Mark as read, don't process read mails`, + }, + { + id: MailAction.Flag, + name: $localize`Flag the mail, don't process flagged mails`, + }, + { + id: MailAction.Tag, + name: $localize`Tag the mail with specified tag, don't process tagged mails`, + }, +] + +const METADATA_TITLE_OPTIONS = [ + { + id: MailMetadataTitleOption.FromSubject, + name: $localize`Use subject as title`, + }, + { + id: MailMetadataTitleOption.FromFilename, + name: $localize`Use attachment filename as title`, + }, +] + +const METADATA_CORRESPONDENT_OPTIONS = [ + { + id: MailMetadataCorrespondentOption.FromNothing, + name: $localize`Do not assign a correspondent`, + }, + { + id: MailMetadataCorrespondentOption.FromEmail, + name: $localize`Use mail address`, + }, + { + id: MailMetadataCorrespondentOption.FromName, + name: $localize`Use name (or mail address if not available)`, + }, + { + id: MailMetadataCorrespondentOption.FromCustom, + name: $localize`Use correspondent selected below`, + }, +] + @Component({ selector: 'app-mail-rule-edit-dialog', templateUrl: './mail-rule-edit-dialog.component.html', @@ -92,74 +156,18 @@ export class MailRuleEditDialogComponent extends EditDialogComponent Date: Mon, 28 Nov 2022 15:51:39 -0800 Subject: [PATCH 082/231] frontend mail rule validation Display non-field validation errors, hide action param field if not needed --- .../mail-rule-edit-dialog.component.html | 3 ++- .../mail-rule-edit-dialog.component.ts | 7 +++++++ src/documents/serialisers.py | 9 +++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html index ef9a5bc47..a8a476c28 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html @@ -22,7 +22,7 @@
    - + @@ -32,6 +32,7 @@
    diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts index 3dcd7ce01..126c4968f 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts @@ -155,6 +155,13 @@ export class MailRuleEditDialogComponent extends EditDialogComponent Date: Mon, 28 Nov 2022 12:53:20 -0800 Subject: [PATCH 083/231] Apply code suggestions from @stumpylog --- src/documents/serialisers.py | 2 +- src/documents/tests/test_api.py | 18 +----------------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 11a9cba39..2d1119dfb 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -735,7 +735,7 @@ class MailAccountSerializer(serializers.ModelSerializer): class AccountField(serializers.PrimaryKeyRelatedField): def get_queryset(self): - return MailAccount.objects.all() + return MailAccount.objects.all().order_by("-id") class MailRuleSerializer(serializers.ModelSerializer): diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 2c777f516..bdc729a36 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -2968,15 +2968,11 @@ class TestAPIMailAccounts(APITestCase): self.assertEqual(response.data["count"], 1) returned_account1 = response.data["results"][0] - from pprint import pprint - - pprint(returned_account1) - self.assertEqual(returned_account1["name"], account1.name) self.assertEqual(returned_account1["username"], account1.username) self.assertEqual( returned_account1["password"], - re.sub(".", "*", account1.password), + "*" * len(account1.password), ) self.assertEqual(returned_account1["imap_server"], account1.imap_server) self.assertEqual(returned_account1["imap_port"], account1.imap_port) @@ -3010,10 +3006,6 @@ class TestAPIMailAccounts(APITestCase): returned_account1 = MailAccount.objects.get(name="Email1") - from pprint import pprint - - pprint(returned_account1) - self.assertEqual(returned_account1.name, account1["name"]) self.assertEqual(returned_account1.username, account1["username"]) self.assertEqual(returned_account1.password, account1["password"]) @@ -3150,10 +3142,6 @@ class TestAPIMailRules(APITestCase): self.assertEqual(response.data["count"], 1) returned_rule1 = response.data["results"][0] - from pprint import pprint - - pprint(returned_rule1) - self.assertEqual(returned_rule1["name"], rule1.name) self.assertEqual(returned_rule1["account"], account1.pk) self.assertEqual(returned_rule1["folder"], rule1.folder) @@ -3239,10 +3227,6 @@ class TestAPIMailRules(APITestCase): self.assertEqual(response.data["count"], 1) returned_rule1 = response.data["results"][0] - from pprint import pprint - - pprint(returned_rule1) - self.assertEqual(returned_rule1["name"], rule1["name"]) self.assertEqual(returned_rule1["account"], account1.pk) self.assertEqual(returned_rule1["folder"], rule1["folder"]) From 5e5f56dc67c0ba6b516a9ec7e27ca3bf653df548 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 28 Nov 2022 20:39:03 -0800 Subject: [PATCH 084/231] Re-org where some of the new classes are found --- src/documents/serialisers.py | 106 ------- src/documents/tests/test_api.py | 424 -------------------------- src/documents/views.py | 4 +- src/paperless/urls.py | 4 +- src/paperless_mail/serialisers.py | 110 +++++++ src/paperless_mail/tests/test_api.py | 429 +++++++++++++++++++++++++++ src/paperless_mail/views.py | 41 +++ 7 files changed, 584 insertions(+), 534 deletions(-) create mode 100644 src/paperless_mail/serialisers.py create mode 100644 src/paperless_mail/tests/test_api.py create mode 100644 src/paperless_mail/views.py diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 2d1119dfb..db282cacd 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -28,8 +28,6 @@ from .models import UiSettings from .models import PaperlessTask from .parsers import is_mime_type_supported -from paperless_mail.models import MailAccount, MailRule - # https://www.django-rest-framework.org/api-guide/serializers/#example class DynamicFieldsModelSerializer(serializers.ModelSerializer): @@ -690,107 +688,3 @@ class AcknowledgeTasksViewSerializer(serializers.Serializer): def validate_tasks(self, tasks): self._validate_task_id_list(tasks) return tasks - - -class ObfuscatedPasswordField(serializers.Field): - """ - Sends *** string instead of password in the clear - """ - - def to_representation(self, value): - return re.sub(".", "*", value) - - def to_internal_value(self, data): - return data - - -class MailAccountSerializer(serializers.ModelSerializer): - password = ObfuscatedPasswordField() - - class Meta: - model = MailAccount - depth = 1 - fields = [ - "id", - "name", - "imap_server", - "imap_port", - "imap_security", - "username", - "password", - "character_set", - ] - - def update(self, instance, validated_data): - if "password" in validated_data: - if len(validated_data.get("password").replace("*", "")) == 0: - validated_data.pop("password") - super().update(instance, validated_data) - return instance - - def create(self, validated_data): - mail_account = MailAccount.objects.create(**validated_data) - return mail_account - - -class AccountField(serializers.PrimaryKeyRelatedField): - def get_queryset(self): - return MailAccount.objects.all().order_by("-id") - - -class MailRuleSerializer(serializers.ModelSerializer): - account = AccountField(required=True) - action_parameter = serializers.CharField( - allow_null=True, - required=False, - default="", - ) - assign_correspondent = CorrespondentField(allow_null=True, required=False) - assign_tags = TagsField(many=True, allow_null=True, required=False) - assign_document_type = DocumentTypeField(allow_null=True, required=False) - order = serializers.IntegerField(required=False) - - class Meta: - model = MailRule - depth = 1 - fields = [ - "id", - "name", - "account", - "folder", - "filter_from", - "filter_subject", - "filter_body", - "filter_attachment_filename", - "maximum_age", - "action", - "action_parameter", - "assign_title_from", - "assign_tags", - "assign_correspondent_from", - "assign_correspondent", - "assign_document_type", - "order", - "attachment_type", - ] - - def update(self, instance, validated_data): - super().update(instance, validated_data) - return instance - - def create(self, validated_data): - if "assign_tags" in validated_data: - assign_tags = validated_data.pop("assign_tags") - mail_rule = MailRule.objects.create(**validated_data) - if assign_tags: - mail_rule.assign_tags.set(assign_tags) - return mail_rule - - def validate(self, attrs): - if ( - attrs["action"] == MailRule.MailAction.TAG - or attrs["action"] == MailRule.MailAction.MOVE - ) and attrs["action_parameter"] is None: - raise serializers.ValidationError("An action parameter is required.") - - return attrs diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index bdc729a36..d876984bd 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -2,7 +2,6 @@ import datetime import io import json import os -import re import shutil import tempfile import urllib.request @@ -37,7 +36,6 @@ from documents.models import Comment from documents.models import StoragePath from documents.tests.utils import DirectoriesMixin from paperless import version -from paperless_mail.models import MailAccount, MailRule from rest_framework.test import APITestCase from whoosh.writing import AsyncWriter @@ -2931,425 +2929,3 @@ class TestTasks(APITestCase): returned_data = response.data[0] self.assertEqual(returned_data["task_file_name"], "anothertest.pdf") - - -class TestAPIMailAccounts(APITestCase): - ENDPOINT = "/api/mail_accounts/" - - def setUp(self): - super().setUp() - - self.user = User.objects.create_superuser(username="temp_admin") - self.client.force_authenticate(user=self.user) - - def test_get_mail_accounts(self): - """ - GIVEN: - - Configured mail accounts - WHEN: - - API call is made to get mail accounts - THEN: - - Configured mail accounts are provided - """ - - account1 = MailAccount.objects.create( - name="Email1", - username="username1", - password="password1", - imap_server="server.example.com", - imap_port=443, - imap_security=MailAccount.ImapSecurity.SSL, - character_set="UTF-8", - ) - - response = self.client.get(self.ENDPOINT) - - self.assertEqual(response.status_code, 200) - self.assertEqual(response.data["count"], 1) - returned_account1 = response.data["results"][0] - - self.assertEqual(returned_account1["name"], account1.name) - self.assertEqual(returned_account1["username"], account1.username) - self.assertEqual( - returned_account1["password"], - "*" * len(account1.password), - ) - self.assertEqual(returned_account1["imap_server"], account1.imap_server) - self.assertEqual(returned_account1["imap_port"], account1.imap_port) - self.assertEqual(returned_account1["imap_security"], account1.imap_security) - self.assertEqual(returned_account1["character_set"], account1.character_set) - - def test_create_mail_account(self): - """ - WHEN: - - API request is made to add a mail account - THEN: - - A new mail account is created - """ - - account1 = { - "name": "Email1", - "username": "username1", - "password": "password1", - "imap_server": "server.example.com", - "imap_port": 443, - "imap_security": MailAccount.ImapSecurity.SSL, - "character_set": "UTF-8", - } - - response = self.client.post( - self.ENDPOINT, - data=account1, - ) - - self.assertEqual(response.status_code, 201) - - returned_account1 = MailAccount.objects.get(name="Email1") - - self.assertEqual(returned_account1.name, account1["name"]) - self.assertEqual(returned_account1.username, account1["username"]) - self.assertEqual(returned_account1.password, account1["password"]) - self.assertEqual(returned_account1.imap_server, account1["imap_server"]) - self.assertEqual(returned_account1.imap_port, account1["imap_port"]) - self.assertEqual(returned_account1.imap_security, account1["imap_security"]) - self.assertEqual(returned_account1.character_set, account1["character_set"]) - - def test_delete_mail_account(self): - """ - GIVEN: - - Existing mail account - WHEN: - - API request is made to delete a mail account - THEN: - - Account is deleted - """ - - account1 = MailAccount.objects.create( - name="Email1", - username="username1", - password="password1", - imap_server="server.example.com", - imap_port=443, - imap_security=MailAccount.ImapSecurity.SSL, - character_set="UTF-8", - ) - - response = self.client.delete( - f"{self.ENDPOINT}{account1.pk}/", - ) - - self.assertEqual(response.status_code, 204) - - self.assertEqual(len(MailAccount.objects.all()), 0) - - def test_update_mail_account(self): - """ - GIVEN: - - Existing mail accounts - WHEN: - - API request is made to update mail account - THEN: - - The mail account is updated, password only updated if not '****' - """ - - account1 = MailAccount.objects.create( - name="Email1", - username="username1", - password="password1", - imap_server="server.example.com", - imap_port=443, - imap_security=MailAccount.ImapSecurity.SSL, - character_set="UTF-8", - ) - - response = self.client.patch( - f"{self.ENDPOINT}{account1.pk}/", - data={ - "name": "Updated Name 1", - "password": "******", - }, - ) - - self.assertEqual(response.status_code, 200) - - returned_account1 = MailAccount.objects.get(pk=account1.pk) - self.assertEqual(returned_account1.name, "Updated Name 1") - self.assertEqual(returned_account1.password, account1.password) - - response = self.client.patch( - f"{self.ENDPOINT}{account1.pk}/", - data={ - "name": "Updated Name 2", - "password": "123xyz", - }, - ) - - self.assertEqual(response.status_code, 200) - - returned_account2 = MailAccount.objects.get(pk=account1.pk) - self.assertEqual(returned_account2.name, "Updated Name 2") - self.assertEqual(returned_account2.password, "123xyz") - - -class TestAPIMailRules(APITestCase): - ENDPOINT = "/api/mail_rules/" - - def setUp(self): - super().setUp() - - self.user = User.objects.create_superuser(username="temp_admin") - self.client.force_authenticate(user=self.user) - - def test_get_mail_rules(self): - """ - GIVEN: - - Configured mail accounts and rules - WHEN: - - API call is made to get mail rules - THEN: - - Configured mail rules are provided - """ - - account1 = MailAccount.objects.create( - name="Email1", - username="username1", - password="password1", - imap_server="server.example.com", - imap_port=443, - imap_security=MailAccount.ImapSecurity.SSL, - character_set="UTF-8", - ) - - rule1 = MailRule.objects.create( - name="Rule1", - account=account1, - folder="INBOX", - filter_from="from@example.com", - filter_subject="subject", - filter_body="body", - filter_attachment_filename="file.pdf", - maximum_age=30, - action=MailRule.MailAction.MARK_READ, - assign_title_from=MailRule.TitleSource.FROM_SUBJECT, - assign_correspondent_from=MailRule.CorrespondentSource.FROM_NOTHING, - order=0, - attachment_type=MailRule.AttachmentProcessing.ATTACHMENTS_ONLY, - ) - - response = self.client.get(self.ENDPOINT) - - self.assertEqual(response.status_code, 200) - self.assertEqual(response.data["count"], 1) - returned_rule1 = response.data["results"][0] - - self.assertEqual(returned_rule1["name"], rule1.name) - self.assertEqual(returned_rule1["account"], account1.pk) - self.assertEqual(returned_rule1["folder"], rule1.folder) - self.assertEqual(returned_rule1["filter_from"], rule1.filter_from) - self.assertEqual(returned_rule1["filter_subject"], rule1.filter_subject) - self.assertEqual(returned_rule1["filter_body"], rule1.filter_body) - self.assertEqual( - returned_rule1["filter_attachment_filename"], - rule1.filter_attachment_filename, - ) - self.assertEqual(returned_rule1["maximum_age"], rule1.maximum_age) - self.assertEqual(returned_rule1["action"], rule1.action) - self.assertEqual(returned_rule1["assign_title_from"], rule1.assign_title_from) - self.assertEqual( - returned_rule1["assign_correspondent_from"], - rule1.assign_correspondent_from, - ) - self.assertEqual(returned_rule1["order"], rule1.order) - self.assertEqual(returned_rule1["attachment_type"], rule1.attachment_type) - - def test_create_mail_rule(self): - """ - GIVEN: - - Configured mail account exists - WHEN: - - API request is made to add a mail rule - THEN: - - A new mail rule is created - """ - - account1 = MailAccount.objects.create( - name="Email1", - username="username1", - password="password1", - imap_server="server.example.com", - imap_port=443, - imap_security=MailAccount.ImapSecurity.SSL, - character_set="UTF-8", - ) - - tag = Tag.objects.create( - name="t", - ) - - correspondent = Correspondent.objects.create( - name="c", - ) - - document_type = DocumentType.objects.create( - name="dt", - ) - - rule1 = { - "name": "Rule1", - "account": account1.pk, - "folder": "INBOX", - "filter_from": "from@example.com", - "filter_subject": "subject", - "filter_body": "body", - "filter_attachment_filename": "file.pdf", - "maximum_age": 30, - "action": MailRule.MailAction.MARK_READ, - "assign_title_from": MailRule.TitleSource.FROM_SUBJECT, - "assign_correspondent_from": MailRule.CorrespondentSource.FROM_NOTHING, - "order": 0, - "attachment_type": MailRule.AttachmentProcessing.ATTACHMENTS_ONLY, - "action_parameter": "parameter", - "assign_tags": [tag.pk], - "assign_correspondent": correspondent.pk, - "assign_document_type": document_type.pk, - } - - response = self.client.post( - self.ENDPOINT, - data=rule1, - ) - - self.assertEqual(response.status_code, 201) - - response = self.client.get(self.ENDPOINT) - - self.assertEqual(response.status_code, 200) - self.assertEqual(response.data["count"], 1) - returned_rule1 = response.data["results"][0] - - self.assertEqual(returned_rule1["name"], rule1["name"]) - self.assertEqual(returned_rule1["account"], account1.pk) - self.assertEqual(returned_rule1["folder"], rule1["folder"]) - self.assertEqual(returned_rule1["filter_from"], rule1["filter_from"]) - self.assertEqual(returned_rule1["filter_subject"], rule1["filter_subject"]) - self.assertEqual(returned_rule1["filter_body"], rule1["filter_body"]) - self.assertEqual( - returned_rule1["filter_attachment_filename"], - rule1["filter_attachment_filename"], - ) - self.assertEqual(returned_rule1["maximum_age"], rule1["maximum_age"]) - self.assertEqual(returned_rule1["action"], rule1["action"]) - self.assertEqual( - returned_rule1["assign_title_from"], - rule1["assign_title_from"], - ) - self.assertEqual( - returned_rule1["assign_correspondent_from"], - rule1["assign_correspondent_from"], - ) - self.assertEqual(returned_rule1["order"], rule1["order"]) - self.assertEqual(returned_rule1["attachment_type"], rule1["attachment_type"]) - self.assertEqual(returned_rule1["action_parameter"], rule1["action_parameter"]) - self.assertEqual( - returned_rule1["assign_correspondent"], - rule1["assign_correspondent"], - ) - self.assertEqual( - returned_rule1["assign_document_type"], - rule1["assign_document_type"], - ) - self.assertEqual(returned_rule1["assign_tags"], rule1["assign_tags"]) - - def test_delete_mail_rule(self): - """ - GIVEN: - - Existing mail rule - WHEN: - - API request is made to delete a mail rule - THEN: - - Rule is deleted - """ - - account1 = MailAccount.objects.create( - name="Email1", - username="username1", - password="password1", - imap_server="server.example.com", - imap_port=443, - imap_security=MailAccount.ImapSecurity.SSL, - character_set="UTF-8", - ) - - rule1 = MailRule.objects.create( - name="Rule1", - account=account1, - folder="INBOX", - filter_from="from@example.com", - filter_subject="subject", - filter_body="body", - filter_attachment_filename="file.pdf", - maximum_age=30, - action=MailRule.MailAction.MARK_READ, - assign_title_from=MailRule.TitleSource.FROM_SUBJECT, - assign_correspondent_from=MailRule.CorrespondentSource.FROM_NOTHING, - order=0, - attachment_type=MailRule.AttachmentProcessing.ATTACHMENTS_ONLY, - ) - - response = self.client.delete( - f"{self.ENDPOINT}{rule1.pk}/", - ) - - self.assertEqual(response.status_code, 204) - - self.assertEqual(len(MailRule.objects.all()), 0) - - def test_update_mail_rule(self): - """ - GIVEN: - - Existing mail rule - WHEN: - - API request is made to update mail rule - THEN: - - The mail rule is updated - """ - - account1 = MailAccount.objects.create( - name="Email1", - username="username1", - password="password1", - imap_server="server.example.com", - imap_port=443, - imap_security=MailAccount.ImapSecurity.SSL, - character_set="UTF-8", - ) - - rule1 = MailRule.objects.create( - name="Rule1", - account=account1, - folder="INBOX", - filter_from="from@example.com", - filter_subject="subject", - filter_body="body", - filter_attachment_filename="file.pdf", - maximum_age=30, - action=MailRule.MailAction.MARK_READ, - assign_title_from=MailRule.TitleSource.FROM_SUBJECT, - assign_correspondent_from=MailRule.CorrespondentSource.FROM_NOTHING, - order=0, - attachment_type=MailRule.AttachmentProcessing.ATTACHMENTS_ONLY, - ) - - response = self.client.patch( - f"{self.ENDPOINT}{rule1.pk}/", - data={ - "name": "Updated Name 1", - "action": MailRule.MailAction.DELETE, - }, - ) - - self.assertEqual(response.status_code, 200) - - returned_rule1 = MailRule.objects.get(pk=rule1.pk) - self.assertEqual(returned_rule1.name, "Updated Name 1") - self.assertEqual(returned_rule1.action, MailRule.MailAction.DELETE) diff --git a/src/documents/views.py b/src/documents/views.py index f980805f2..b0999ad37 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -35,6 +35,8 @@ from paperless.db import GnuPG from paperless.views import StandardPagination from paperless_mail.models import MailAccount from paperless_mail.models import MailRule +from paperless_mail.serialisers import MailAccountSerializer +from paperless_mail.serialisers import MailRuleSerializer from rest_framework import parsers from rest_framework.decorators import action from rest_framework.exceptions import NotFound @@ -83,8 +85,6 @@ from .serialisers import CorrespondentSerializer from .serialisers import DocumentListSerializer from .serialisers import DocumentSerializer from .serialisers import DocumentTypeSerializer -from .serialisers import MailAccountSerializer -from .serialisers import MailRuleSerializer from .serialisers import PostDocumentSerializer from .serialisers import SavedViewSerializer from .serialisers import StoragePathSerializer diff --git a/src/paperless/urls.py b/src/paperless/urls.py index afad7cb9f..8e8f4b404 100644 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -14,8 +14,6 @@ from documents.views import CorrespondentViewSet from documents.views import DocumentTypeViewSet from documents.views import IndexView from documents.views import LogViewSet -from documents.views import MailAccountViewSet -from documents.views import MailRuleViewSet from documents.views import PostDocumentView from documents.views import RemoteVersionView from documents.views import SavedViewViewSet @@ -29,6 +27,8 @@ from documents.views import UiSettingsView from documents.views import UnifiedSearchViewSet from paperless.consumers import StatusConsumer from paperless.views import FaviconView +from paperless_mail.views import MailAccountViewSet +from paperless_mail.views import MailRuleViewSet from rest_framework.authtoken import views from rest_framework.routers import DefaultRouter diff --git a/src/paperless_mail/serialisers.py b/src/paperless_mail/serialisers.py new file mode 100644 index 000000000..5944656a7 --- /dev/null +++ b/src/paperless_mail/serialisers.py @@ -0,0 +1,110 @@ +from documents.serialisers import CorrespondentField +from documents.serialisers import DocumentTypeField +from documents.serialisers import TagsField +from paperless_mail.models import MailAccount +from paperless_mail.models import MailRule +from rest_framework import serializers + + +class ObfuscatedPasswordField(serializers.Field): + """ + Sends *** string instead of password in the clear + """ + + def to_representation(self, value): + return "*" * len(value) + + def to_internal_value(self, data): + return data + + +class MailAccountSerializer(serializers.ModelSerializer): + password = ObfuscatedPasswordField() + + class Meta: + model = MailAccount + depth = 1 + fields = [ + "id", + "name", + "imap_server", + "imap_port", + "imap_security", + "username", + "password", + "character_set", + ] + + def update(self, instance, validated_data): + if "password" in validated_data: + if len(validated_data.get("password").replace("*", "")) == 0: + validated_data.pop("password") + super().update(instance, validated_data) + return instance + + def create(self, validated_data): + mail_account = MailAccount.objects.create(**validated_data) + return mail_account + + +class AccountField(serializers.PrimaryKeyRelatedField): + def get_queryset(self): + return MailAccount.objects.all().order_by("-id") + + +class MailRuleSerializer(serializers.ModelSerializer): + account = AccountField(required=True) + action_parameter = serializers.CharField( + allow_null=True, + required=False, + default="", + ) + assign_correspondent = CorrespondentField(allow_null=True, required=False) + assign_tags = TagsField(many=True, allow_null=True, required=False) + assign_document_type = DocumentTypeField(allow_null=True, required=False) + order = serializers.IntegerField(required=False) + + class Meta: + model = MailRule + depth = 1 + fields = [ + "id", + "name", + "account", + "folder", + "filter_from", + "filter_subject", + "filter_body", + "filter_attachment_filename", + "maximum_age", + "action", + "action_parameter", + "assign_title_from", + "assign_tags", + "assign_correspondent_from", + "assign_correspondent", + "assign_document_type", + "order", + "attachment_type", + ] + + def update(self, instance, validated_data): + super().update(instance, validated_data) + return instance + + def create(self, validated_data): + if "assign_tags" in validated_data: + assign_tags = validated_data.pop("assign_tags") + mail_rule = MailRule.objects.create(**validated_data) + if assign_tags: + mail_rule.assign_tags.set(assign_tags) + return mail_rule + + def validate(self, attrs): + if ( + attrs["action"] == MailRule.MailAction.TAG + or attrs["action"] == MailRule.MailAction.MOVE + ) and attrs["action_parameter"] is None: + raise serializers.ValidationError("An action parameter is required.") + + return attrs diff --git a/src/paperless_mail/tests/test_api.py b/src/paperless_mail/tests/test_api.py new file mode 100644 index 000000000..d20ab5c9a --- /dev/null +++ b/src/paperless_mail/tests/test_api.py @@ -0,0 +1,429 @@ +from django.contrib.auth.models import User +from documents.models import Correspondent +from documents.models import DocumentType +from documents.models import Tag +from paperless_mail.models import MailAccount +from paperless_mail.models import MailRule +from rest_framework.test import APITestCase + + +class TestAPIMailAccounts(APITestCase): + ENDPOINT = "/api/mail_accounts/" + + def setUp(self): + super().setUp() + + self.user = User.objects.create_superuser(username="temp_admin") + self.client.force_authenticate(user=self.user) + + def test_get_mail_accounts(self): + """ + GIVEN: + - Configured mail accounts + WHEN: + - API call is made to get mail accounts + THEN: + - Configured mail accounts are provided + """ + + account1 = MailAccount.objects.create( + name="Email1", + username="username1", + password="password1", + imap_server="server.example.com", + imap_port=443, + imap_security=MailAccount.ImapSecurity.SSL, + character_set="UTF-8", + ) + + response = self.client.get(self.ENDPOINT) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.data["count"], 1) + returned_account1 = response.data["results"][0] + + self.assertEqual(returned_account1["name"], account1.name) + self.assertEqual(returned_account1["username"], account1.username) + self.assertEqual( + returned_account1["password"], + "*" * len(account1.password), + ) + self.assertEqual(returned_account1["imap_server"], account1.imap_server) + self.assertEqual(returned_account1["imap_port"], account1.imap_port) + self.assertEqual(returned_account1["imap_security"], account1.imap_security) + self.assertEqual(returned_account1["character_set"], account1.character_set) + + def test_create_mail_account(self): + """ + WHEN: + - API request is made to add a mail account + THEN: + - A new mail account is created + """ + + account1 = { + "name": "Email1", + "username": "username1", + "password": "password1", + "imap_server": "server.example.com", + "imap_port": 443, + "imap_security": MailAccount.ImapSecurity.SSL, + "character_set": "UTF-8", + } + + response = self.client.post( + self.ENDPOINT, + data=account1, + ) + + self.assertEqual(response.status_code, 201) + + returned_account1 = MailAccount.objects.get(name="Email1") + + self.assertEqual(returned_account1.name, account1["name"]) + self.assertEqual(returned_account1.username, account1["username"]) + self.assertEqual(returned_account1.password, account1["password"]) + self.assertEqual(returned_account1.imap_server, account1["imap_server"]) + self.assertEqual(returned_account1.imap_port, account1["imap_port"]) + self.assertEqual(returned_account1.imap_security, account1["imap_security"]) + self.assertEqual(returned_account1.character_set, account1["character_set"]) + + def test_delete_mail_account(self): + """ + GIVEN: + - Existing mail account + WHEN: + - API request is made to delete a mail account + THEN: + - Account is deleted + """ + + account1 = MailAccount.objects.create( + name="Email1", + username="username1", + password="password1", + imap_server="server.example.com", + imap_port=443, + imap_security=MailAccount.ImapSecurity.SSL, + character_set="UTF-8", + ) + + response = self.client.delete( + f"{self.ENDPOINT}{account1.pk}/", + ) + + self.assertEqual(response.status_code, 204) + + self.assertEqual(len(MailAccount.objects.all()), 0) + + def test_update_mail_account(self): + """ + GIVEN: + - Existing mail accounts + WHEN: + - API request is made to update mail account + THEN: + - The mail account is updated, password only updated if not '****' + """ + + account1 = MailAccount.objects.create( + name="Email1", + username="username1", + password="password1", + imap_server="server.example.com", + imap_port=443, + imap_security=MailAccount.ImapSecurity.SSL, + character_set="UTF-8", + ) + + response = self.client.patch( + f"{self.ENDPOINT}{account1.pk}/", + data={ + "name": "Updated Name 1", + "password": "******", + }, + ) + + self.assertEqual(response.status_code, 200) + + returned_account1 = MailAccount.objects.get(pk=account1.pk) + self.assertEqual(returned_account1.name, "Updated Name 1") + self.assertEqual(returned_account1.password, account1.password) + + response = self.client.patch( + f"{self.ENDPOINT}{account1.pk}/", + data={ + "name": "Updated Name 2", + "password": "123xyz", + }, + ) + + self.assertEqual(response.status_code, 200) + + returned_account2 = MailAccount.objects.get(pk=account1.pk) + self.assertEqual(returned_account2.name, "Updated Name 2") + self.assertEqual(returned_account2.password, "123xyz") + + +class TestAPIMailRules(APITestCase): + ENDPOINT = "/api/mail_rules/" + + def setUp(self): + super().setUp() + + self.user = User.objects.create_superuser(username="temp_admin") + self.client.force_authenticate(user=self.user) + + def test_get_mail_rules(self): + """ + GIVEN: + - Configured mail accounts and rules + WHEN: + - API call is made to get mail rules + THEN: + - Configured mail rules are provided + """ + + account1 = MailAccount.objects.create( + name="Email1", + username="username1", + password="password1", + imap_server="server.example.com", + imap_port=443, + imap_security=MailAccount.ImapSecurity.SSL, + character_set="UTF-8", + ) + + rule1 = MailRule.objects.create( + name="Rule1", + account=account1, + folder="INBOX", + filter_from="from@example.com", + filter_subject="subject", + filter_body="body", + filter_attachment_filename="file.pdf", + maximum_age=30, + action=MailRule.MailAction.MARK_READ, + assign_title_from=MailRule.TitleSource.FROM_SUBJECT, + assign_correspondent_from=MailRule.CorrespondentSource.FROM_NOTHING, + order=0, + attachment_type=MailRule.AttachmentProcessing.ATTACHMENTS_ONLY, + ) + + response = self.client.get(self.ENDPOINT) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.data["count"], 1) + returned_rule1 = response.data["results"][0] + + self.assertEqual(returned_rule1["name"], rule1.name) + self.assertEqual(returned_rule1["account"], account1.pk) + self.assertEqual(returned_rule1["folder"], rule1.folder) + self.assertEqual(returned_rule1["filter_from"], rule1.filter_from) + self.assertEqual(returned_rule1["filter_subject"], rule1.filter_subject) + self.assertEqual(returned_rule1["filter_body"], rule1.filter_body) + self.assertEqual( + returned_rule1["filter_attachment_filename"], + rule1.filter_attachment_filename, + ) + self.assertEqual(returned_rule1["maximum_age"], rule1.maximum_age) + self.assertEqual(returned_rule1["action"], rule1.action) + self.assertEqual(returned_rule1["assign_title_from"], rule1.assign_title_from) + self.assertEqual( + returned_rule1["assign_correspondent_from"], + rule1.assign_correspondent_from, + ) + self.assertEqual(returned_rule1["order"], rule1.order) + self.assertEqual(returned_rule1["attachment_type"], rule1.attachment_type) + + def test_create_mail_rule(self): + """ + GIVEN: + - Configured mail account exists + WHEN: + - API request is made to add a mail rule + THEN: + - A new mail rule is created + """ + + account1 = MailAccount.objects.create( + name="Email1", + username="username1", + password="password1", + imap_server="server.example.com", + imap_port=443, + imap_security=MailAccount.ImapSecurity.SSL, + character_set="UTF-8", + ) + + tag = Tag.objects.create( + name="t", + ) + + correspondent = Correspondent.objects.create( + name="c", + ) + + document_type = DocumentType.objects.create( + name="dt", + ) + + rule1 = { + "name": "Rule1", + "account": account1.pk, + "folder": "INBOX", + "filter_from": "from@example.com", + "filter_subject": "subject", + "filter_body": "body", + "filter_attachment_filename": "file.pdf", + "maximum_age": 30, + "action": MailRule.MailAction.MARK_READ, + "assign_title_from": MailRule.TitleSource.FROM_SUBJECT, + "assign_correspondent_from": MailRule.CorrespondentSource.FROM_NOTHING, + "order": 0, + "attachment_type": MailRule.AttachmentProcessing.ATTACHMENTS_ONLY, + "action_parameter": "parameter", + "assign_tags": [tag.pk], + "assign_correspondent": correspondent.pk, + "assign_document_type": document_type.pk, + } + + response = self.client.post( + self.ENDPOINT, + data=rule1, + ) + + self.assertEqual(response.status_code, 201) + + response = self.client.get(self.ENDPOINT) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.data["count"], 1) + returned_rule1 = response.data["results"][0] + + self.assertEqual(returned_rule1["name"], rule1["name"]) + self.assertEqual(returned_rule1["account"], account1.pk) + self.assertEqual(returned_rule1["folder"], rule1["folder"]) + self.assertEqual(returned_rule1["filter_from"], rule1["filter_from"]) + self.assertEqual(returned_rule1["filter_subject"], rule1["filter_subject"]) + self.assertEqual(returned_rule1["filter_body"], rule1["filter_body"]) + self.assertEqual( + returned_rule1["filter_attachment_filename"], + rule1["filter_attachment_filename"], + ) + self.assertEqual(returned_rule1["maximum_age"], rule1["maximum_age"]) + self.assertEqual(returned_rule1["action"], rule1["action"]) + self.assertEqual( + returned_rule1["assign_title_from"], + rule1["assign_title_from"], + ) + self.assertEqual( + returned_rule1["assign_correspondent_from"], + rule1["assign_correspondent_from"], + ) + self.assertEqual(returned_rule1["order"], rule1["order"]) + self.assertEqual(returned_rule1["attachment_type"], rule1["attachment_type"]) + self.assertEqual(returned_rule1["action_parameter"], rule1["action_parameter"]) + self.assertEqual( + returned_rule1["assign_correspondent"], + rule1["assign_correspondent"], + ) + self.assertEqual( + returned_rule1["assign_document_type"], + rule1["assign_document_type"], + ) + self.assertEqual(returned_rule1["assign_tags"], rule1["assign_tags"]) + + def test_delete_mail_rule(self): + """ + GIVEN: + - Existing mail rule + WHEN: + - API request is made to delete a mail rule + THEN: + - Rule is deleted + """ + + account1 = MailAccount.objects.create( + name="Email1", + username="username1", + password="password1", + imap_server="server.example.com", + imap_port=443, + imap_security=MailAccount.ImapSecurity.SSL, + character_set="UTF-8", + ) + + rule1 = MailRule.objects.create( + name="Rule1", + account=account1, + folder="INBOX", + filter_from="from@example.com", + filter_subject="subject", + filter_body="body", + filter_attachment_filename="file.pdf", + maximum_age=30, + action=MailRule.MailAction.MARK_READ, + assign_title_from=MailRule.TitleSource.FROM_SUBJECT, + assign_correspondent_from=MailRule.CorrespondentSource.FROM_NOTHING, + order=0, + attachment_type=MailRule.AttachmentProcessing.ATTACHMENTS_ONLY, + ) + + response = self.client.delete( + f"{self.ENDPOINT}{rule1.pk}/", + ) + + self.assertEqual(response.status_code, 204) + + self.assertEqual(len(MailRule.objects.all()), 0) + + def test_update_mail_rule(self): + """ + GIVEN: + - Existing mail rule + WHEN: + - API request is made to update mail rule + THEN: + - The mail rule is updated + """ + + account1 = MailAccount.objects.create( + name="Email1", + username="username1", + password="password1", + imap_server="server.example.com", + imap_port=443, + imap_security=MailAccount.ImapSecurity.SSL, + character_set="UTF-8", + ) + + rule1 = MailRule.objects.create( + name="Rule1", + account=account1, + folder="INBOX", + filter_from="from@example.com", + filter_subject="subject", + filter_body="body", + filter_attachment_filename="file.pdf", + maximum_age=30, + action=MailRule.MailAction.MARK_READ, + assign_title_from=MailRule.TitleSource.FROM_SUBJECT, + assign_correspondent_from=MailRule.CorrespondentSource.FROM_NOTHING, + order=0, + attachment_type=MailRule.AttachmentProcessing.ATTACHMENTS_ONLY, + ) + + response = self.client.patch( + f"{self.ENDPOINT}{rule1.pk}/", + data={ + "name": "Updated Name 1", + "action": MailRule.MailAction.DELETE, + }, + ) + + self.assertEqual(response.status_code, 200) + + returned_rule1 = MailRule.objects.get(pk=rule1.pk) + self.assertEqual(returned_rule1.name, "Updated Name 1") + self.assertEqual(returned_rule1.action, MailRule.MailAction.DELETE) diff --git a/src/paperless_mail/views.py b/src/paperless_mail/views.py new file mode 100644 index 000000000..b91487f1f --- /dev/null +++ b/src/paperless_mail/views.py @@ -0,0 +1,41 @@ +from paperless.views import StandardPagination +from paperless_mail.models import MailAccount +from paperless_mail.models import MailRule +from paperless_mail.serialisers import MailAccountSerializer +from paperless_mail.serialisers import MailRuleSerializer +from rest_framework.permissions import IsAuthenticated +from rest_framework.viewsets import ModelViewSet + + +class MailAccountViewSet(ModelViewSet): + model = MailAccount + + queryset = MailAccount.objects.all() + serializer_class = MailAccountSerializer + pagination_class = StandardPagination + permission_classes = (IsAuthenticated,) + + # TODO: user-scoped + # def get_queryset(self): + # user = self.request.user + # return MailAccount.objects.filter(user=user) + + # def perform_create(self, serializer): + # serializer.save(user=self.request.user) + + +class MailRuleViewSet(ModelViewSet): + model = MailRule + + queryset = MailRule.objects.all() + serializer_class = MailRuleSerializer + pagination_class = StandardPagination + permission_classes = (IsAuthenticated,) + + # TODO: user-scoped + # def get_queryset(self): + # user = self.request.user + # return MailRule.objects.filter(user=user) + + # def perform_create(self, serializer): + # serializer.save(user=self.request.user) From 4f876db5d1d1407a8660aa1c58322fc8e36701e2 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 28 Nov 2022 21:38:52 -0800 Subject: [PATCH 085/231] prevent loss of unsaved changes to settings on tab nav --- .../manage/settings/settings.component.ts | 24 +++++++++++++++---- src-ui/src/app/guards/dirty-form.guard.ts | 1 - 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 1c51c90b2..2d23874fd 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -206,7 +206,16 @@ export class SettingsComponent SettingsNavIDs ).find(([navIDkey, navIDValue]) => navIDValue == navChangeEvent.nextId) if (foundNavIDkey) - this.router.navigate(['settings', foundNavIDkey.toLowerCase()]) + // if its dirty we need to wait for confirmation + this.router + .navigate(['settings', foundNavIDkey.toLowerCase()]) + .then((navigated) => { + if (!navigated && this.isDirty) { + this.activeNavID = navChangeEvent.activeId + } else if (navigated && this.isDirty) { + this.initialize() + } + }) } // Load tab contents 'on demand', either on mouseover or focusin (i.e. before click) or called from nav change event @@ -214,7 +223,7 @@ export class SettingsComponent if (navID == SettingsNavIDs.SavedViews && !this.savedViews) { this.savedViewService.listAll().subscribe((r) => { this.savedViews = r.results - this.initialize() + this.initialize(false) }) } else if ( navID == SettingsNavIDs.Mail && @@ -225,15 +234,17 @@ export class SettingsComponent this.mailRuleService.listAll().subscribe((r) => { this.mailRules = r.results - this.initialize() + this.initialize(false) }) }) } } - initialize() { + initialize(resetSettings: boolean = true) { this.unsubscribeNotifier.next(true) + const currentFormValue = this.settingsForm.value + let storeData = this.getCurrentSettings() if (this.savedViews) { @@ -352,6 +363,11 @@ export class SettingsComponent this.settingsForm.get('themeColor').value ) }) + + if (!resetSettings && currentFormValue) { + // prevents loss of unsaved changes + this.settingsForm.patchValue(currentFormValue) + } } ngOnDestroy() { diff --git a/src-ui/src/app/guards/dirty-form.guard.ts b/src-ui/src/app/guards/dirty-form.guard.ts index 1205f3b0e..e20f1a848 100644 --- a/src-ui/src/app/guards/dirty-form.guard.ts +++ b/src-ui/src/app/guards/dirty-form.guard.ts @@ -1,7 +1,6 @@ import { Injectable } from '@angular/core' import { DirtyCheckGuard } from '@ngneat/dirty-check-forms' import { Observable, Subject } from 'rxjs' -import { map } from 'rxjs/operators' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { ConfirmDialogComponent } from 'src/app/components/common/confirm-dialog/confirm-dialog.component' From ce9f604d81820a4fba83ec38e5f58e6317165814 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 3 Dec 2022 09:29:34 -0800 Subject: [PATCH 086/231] Explicit default ordering for rule / account views --- src/documents/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/documents/views.py b/src/documents/views.py index b0999ad37..3b2075e25 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -919,7 +919,7 @@ class AcknowledgeTasksView(GenericAPIView): class MailAccountViewSet(ModelViewSet): model = MailAccount - queryset = MailAccount.objects.all() + queryset = MailAccount.objects.all().order_by("pk") serializer_class = MailAccountSerializer pagination_class = StandardPagination permission_classes = (IsAuthenticated,) @@ -936,7 +936,7 @@ class MailAccountViewSet(ModelViewSet): class MailRuleViewSet(ModelViewSet): model = MailRule - queryset = MailRule.objects.all() + queryset = MailRule.objects.all().order_by("pk") serializer_class = MailRuleSerializer pagination_class = StandardPagination permission_classes = (IsAuthenticated,) From 2704bcb979d7fa6b357f008413394f24dc950cc0 Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Sun, 4 Dec 2022 13:06:18 -0800 Subject: [PATCH 087/231] Resets to -dev versioning --- src-ui/src/environments/environment.prod.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 67a236090..41330145b 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -5,7 +5,7 @@ export const environment = { apiBaseUrl: document.baseURI + 'api/', apiVersion: '2', appTitle: 'Paperless-ngx', - version: '1.10.2', + version: '1.10.2-dev', webSocketHost: window.location.host, webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:', webSocketBaseUrl: base_url.pathname + 'ws/', From 4b31e5d0b46639c5cb68005149e2e2f0dc13ca94 Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Sun, 4 Dec 2022 14:00:59 -0800 Subject: [PATCH 088/231] Fixes my broken formatting --- docs/configuration.md | 18 +++++++++--------- docs/troubleshooting.md | 14 +++++++------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 93eaead36..bcde72e5f 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -607,17 +607,17 @@ services: PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 - # ... + # ... gotenberg: - image: gotenberg/gotenberg:7.6 - restart: unless-stopped - # The gotenberg chromium route is used to convert .eml files. We do not - # want to allow external content like tracking pixels or even javascript. - command: - - "gotenberg" - - "--chromium-disable-javascript=true" - - "--chromium-allow-list=file:///tmp/.*" + image: gotenberg/gotenberg:7.6 + restart: unless-stopped + # The gotenberg chromium route is used to convert .eml files. We do not + # want to allow external content like tracking pixels or even javascript. + command: + - 'gotenberg' + - '--chromium-disable-javascript=true' + - '--chromium-allow-list=file:///tmp/.*' tika: image: ghcr.io/paperless-ngx/tika:latest diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index 329de94db..f522058a5 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -125,13 +125,13 @@ using docker-compose, this is achieved by the following configuration change in the `docker-compose.yml` file: ```yaml - # The gotenberg chromium route is used to convert .eml files. We do not - # want to allow external content like tracking pixels or even javascript. - command: - - "gotenberg" - - "--chromium-disable-javascript=true" - - "--chromium-allow-list=file:///tmp/.*" - - "--api-timeout=60" +# The gotenberg chromium route is used to convert .eml files. We do not +# want to allow external content like tracking pixels or even javascript. +command: + - 'gotenberg' + - '--chromium-disable-javascript=true' + - '--chromium-allow-list=file:///tmp/.*' + - '--api-timeout=60' ``` ## Permission denied errors in the consumption directory From 049dc17902c11456323e3a68327963dfd3cd5f1c Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Sun, 4 Dec 2022 16:33:07 -0800 Subject: [PATCH 089/231] Moves where the mail views live and puts the ordering on those --- src/documents/views.py | 38 ------------------------------------- src/paperless_mail/views.py | 4 ++-- 2 files changed, 2 insertions(+), 40 deletions(-) diff --git a/src/documents/views.py b/src/documents/views.py index 3b2075e25..10225be6f 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -33,10 +33,6 @@ from packaging import version as packaging_version from paperless import version from paperless.db import GnuPG from paperless.views import StandardPagination -from paperless_mail.models import MailAccount -from paperless_mail.models import MailRule -from paperless_mail.serialisers import MailAccountSerializer -from paperless_mail.serialisers import MailRuleSerializer from rest_framework import parsers from rest_framework.decorators import action from rest_framework.exceptions import NotFound @@ -914,37 +910,3 @@ class AcknowledgeTasksView(GenericAPIView): return Response({"result": result}) except Exception: return HttpResponseBadRequest() - - -class MailAccountViewSet(ModelViewSet): - model = MailAccount - - queryset = MailAccount.objects.all().order_by("pk") - serializer_class = MailAccountSerializer - pagination_class = StandardPagination - permission_classes = (IsAuthenticated,) - - # TODO: user-scoped - # def get_queryset(self): - # user = self.request.user - # return MailAccount.objects.filter(user=user) - - # def perform_create(self, serializer): - # serializer.save(user=self.request.user) - - -class MailRuleViewSet(ModelViewSet): - model = MailRule - - queryset = MailRule.objects.all().order_by("pk") - serializer_class = MailRuleSerializer - pagination_class = StandardPagination - permission_classes = (IsAuthenticated,) - - # TODO: user-scoped - # def get_queryset(self): - # user = self.request.user - # return MailRule.objects.filter(user=user) - - # def perform_create(self, serializer): - # serializer.save(user=self.request.user) diff --git a/src/paperless_mail/views.py b/src/paperless_mail/views.py index b91487f1f..d86240c7c 100644 --- a/src/paperless_mail/views.py +++ b/src/paperless_mail/views.py @@ -10,7 +10,7 @@ from rest_framework.viewsets import ModelViewSet class MailAccountViewSet(ModelViewSet): model = MailAccount - queryset = MailAccount.objects.all() + queryset = MailAccount.objects.all().order_by("pk") serializer_class = MailAccountSerializer pagination_class = StandardPagination permission_classes = (IsAuthenticated,) @@ -27,7 +27,7 @@ class MailAccountViewSet(ModelViewSet): class MailRuleViewSet(ModelViewSet): model = MailRule - queryset = MailRule.objects.all() + queryset = MailRule.objects.all().order_by("pk") serializer_class = MailRuleSerializer pagination_class = StandardPagination permission_classes = (IsAuthenticated,) From a6b7beaf6bdbdc8565d8423c4bf3a63b06546634 Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Sat, 19 Nov 2022 18:29:27 -0800 Subject: [PATCH 090/231] Adds option to allow a user to export directory to a zipfile --- .../management/commands/document_exporter.py | 46 +++++++++++++++- .../tests/test_management_exporter.py | 55 +++++++++++++++++++ 2 files changed, 99 insertions(+), 2 deletions(-) diff --git a/src/documents/management/commands/document_exporter.py b/src/documents/management/commands/document_exporter.py index 0e99e7b7d..07b4643f2 100644 --- a/src/documents/management/commands/document_exporter.py +++ b/src/documents/management/commands/document_exporter.py @@ -2,6 +2,7 @@ import hashlib import json import os import shutil +import tempfile import time import tqdm @@ -12,6 +13,7 @@ from django.core import serializers from django.core.management.base import BaseCommand from django.core.management.base import CommandError from django.db import transaction +from django.utils import timezone from documents.models import Comment from documents.models import Correspondent from documents.models import Document @@ -76,6 +78,7 @@ class Command(BaseCommand): "do not belong to the current export, such as files from " "deleted documents.", ) + parser.add_argument( "--no-progress-bar", default=False, @@ -83,6 +86,14 @@ class Command(BaseCommand): help="If set, the progress bar will not be shown", ) + parser.add_argument( + "-z", + "--zip", + default=False, + action="store_true", + help="Export the documents to a zip file in the given directory", + ) + def __init__(self, *args, **kwargs): BaseCommand.__init__(self, *args, **kwargs) self.target = None @@ -98,6 +109,19 @@ class Command(BaseCommand): self.compare_checksums = options["compare_checksums"] self.use_filename_format = options["use_filename_format"] self.delete = options["delete"] + zip_export: bool = options["zip"] + + # If zipping, save the original target for later and + # get a temporary directory for the target + temp_dir = None + original_target = None + if zip_export: + original_target = self.target + temp_dir = tempfile.TemporaryDirectory( + dir=settings.SCRATCH_DIR, + prefix="paperless-export", + ) + self.target = temp_dir.name if not os.path.exists(self.target): raise CommandError("That path doesn't exist") @@ -105,8 +129,26 @@ class Command(BaseCommand): if not os.access(self.target, os.W_OK): raise CommandError("That path doesn't appear to be writable") - with FileLock(settings.MEDIA_LOCK): - self.dump(options["no_progress_bar"]) + try: + with FileLock(settings.MEDIA_LOCK): + self.dump(options["no_progress_bar"]) + + # We've written everything to the temporary directory in this case, + # now make an archive in the original target, with all files stored + if zip_export: + shutil.make_archive( + os.path.join( + original_target, + f"export-{timezone.localdate().isoformat()}", + ), + format="zip", + root_dir=temp_dir.name, + ) + + finally: + # Always cleanup the temporary directory, if one was created + if zip_export and temp_dir is not None: + temp_dir.cleanup() def dump(self, progress_bar_disable=False): # 1. Take a snapshot of what files exist in the current export folder diff --git a/src/documents/tests/test_management_exporter.py b/src/documents/tests/test_management_exporter.py index fa7567f05..fd9c9366d 100644 --- a/src/documents/tests/test_management_exporter.py +++ b/src/documents/tests/test_management_exporter.py @@ -5,10 +5,12 @@ import shutil import tempfile from pathlib import Path from unittest import mock +from zipfile import ZipFile from django.core.management import call_command from django.test import override_settings from django.test import TestCase +from django.utils import timezone from documents.management.commands import document_exporter from documents.models import Comment from documents.models import Correspondent @@ -365,3 +367,56 @@ class TestExportImport(DirectoriesMixin, TestCase): mime_type="application/pdf", ) self.assertRaises(FileNotFoundError, call_command, "document_exporter", target) + + @override_settings(PASSPHRASE="test") + def test_export_zipped(self): + shutil.rmtree(os.path.join(self.dirs.media_dir, "documents")) + shutil.copytree( + os.path.join(os.path.dirname(__file__), "samples", "documents"), + os.path.join(self.dirs.media_dir, "documents"), + ) + + args = ["document_exporter", self.target, "--zip"] + + call_command(*args) + + expected_file = os.path.join( + self.target, + f"export-{timezone.localdate().isoformat()}.zip", + ) + + self.assertTrue(os.path.isfile(expected_file)) + + with ZipFile(expected_file) as zip: + self.assertEqual(len(zip.namelist()), 11) + self.assertIn("manifest.json", zip.namelist()) + self.assertIn("version.json", zip.namelist()) + + @override_settings(PASSPHRASE="test") + def test_export_zipped_format(self): + shutil.rmtree(os.path.join(self.dirs.media_dir, "documents")) + shutil.copytree( + os.path.join(os.path.dirname(__file__), "samples", "documents"), + os.path.join(self.dirs.media_dir, "documents"), + ) + + args = ["document_exporter", self.target, "--zip", "--use-filename-format"] + + with override_settings( + FILENAME_FORMAT="{created_year}/{correspondent}/{title}", + ): + call_command(*args) + + expected_file = os.path.join( + self.target, + f"export-{timezone.localdate().isoformat()}.zip", + ) + + self.assertTrue(os.path.isfile(expected_file)) + + with ZipFile(expected_file) as zip: + print(zip.namelist()) + # Extras are from the directories, which also appear in the listing + self.assertEqual(len(zip.namelist()), 14) + self.assertIn("manifest.json", zip.namelist()) + self.assertIn("version.json", zip.namelist()) From 538249b26c1ccc5fd121b3fd259a3418ac863f48 Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Sun, 4 Dec 2022 16:50:11 -0800 Subject: [PATCH 091/231] Adds documentation --- docs/administration.md | 4 ++++ .../tests/test_management_exporter.py | 20 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/docs/administration.md b/docs/administration.md index a8009c85e..db29f3268 100644 --- a/docs/administration.md +++ b/docs/administration.md @@ -233,6 +233,7 @@ optional arguments: -c, --compare-checksums -f, --use-filename-format -d, --delete +-z --zip ``` `target` is a folder to which the data gets written. This includes @@ -258,6 +259,9 @@ current export such as files from deleted documents, specify `--delete`. Be careful when pointing paperless to a directory that already contains other files. +If `-z` or `--zip` is provided, the export will be a zipfile +in the target directory, named according to the current date. + The filenames generated by this command follow the format `[date created] [correspondent] [title].[extension]`. If you want paperless to use `PAPERLESS_FILENAME_FORMAT` for exported filenames diff --git a/src/documents/tests/test_management_exporter.py b/src/documents/tests/test_management_exporter.py index fd9c9366d..a24b292d7 100644 --- a/src/documents/tests/test_management_exporter.py +++ b/src/documents/tests/test_management_exporter.py @@ -370,6 +370,15 @@ class TestExportImport(DirectoriesMixin, TestCase): @override_settings(PASSPHRASE="test") def test_export_zipped(self): + """ + GIVEN: + - Request to export documents to zipfile + WHEN: + - Documents are exported + THEN: + - Zipfile is created + - Zipfile contains exported files + """ shutil.rmtree(os.path.join(self.dirs.media_dir, "documents")) shutil.copytree( os.path.join(os.path.dirname(__file__), "samples", "documents"), @@ -394,6 +403,16 @@ class TestExportImport(DirectoriesMixin, TestCase): @override_settings(PASSPHRASE="test") def test_export_zipped_format(self): + """ + GIVEN: + - Request to export documents to zipfile + - Export is following filename formatting + WHEN: + - Documents are exported + THEN: + - Zipfile is created + - Zipfile contains exported files + """ shutil.rmtree(os.path.join(self.dirs.media_dir, "documents")) shutil.copytree( os.path.join(os.path.dirname(__file__), "samples", "documents"), @@ -415,7 +434,6 @@ class TestExportImport(DirectoriesMixin, TestCase): self.assertTrue(os.path.isfile(expected_file)) with ZipFile(expected_file) as zip: - print(zip.namelist()) # Extras are from the directories, which also appear in the listing self.assertEqual(len(zip.namelist()), 14) self.assertIn("manifest.json", zip.namelist()) From d470de3576d95250b20c145b2d3f7af4d27eacd4 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:36:54 -0800 Subject: [PATCH 092/231] New translations messages.xlf (German) [ci skip] --- src-ui/src/locale/messages.de_DE.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index f85e13d67..1cc39508f 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -423,27 +423,19 @@ Die Dateiaufgaben zeigen Ihnen Dokumente, die verarbeitet wurden, auf Verarbeitung warten oder während der Verarbeitung fehlgeschlagen sind. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Hier finden Sie verschiedene globale Einstellungen für die Anwendung und können die gespeicherten Ansichten verwalten. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - Der Adminbereich enthält erweiterte Steuerelemente sowie die Einstellungen für das automatische Abrufen von E-Mails. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Vielen Dank! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 Es gibt noch <em>erheblich</em> mehr Funktionen und Informationen, die nicht in der Tour abgedeckt wurden, nach der Tour sollten Sie jedoch direkt loslegen können. Schauen Sie sich die Dokumentation an oder besuchen Sie das Projekt auf GitHub um mehr zu erfahren oder Probleme zu melden. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Im Namen jedes Beitragenden zu diesem von der Gemeinschaft unterstützten Projekt, sagen wir, Danke, dass Sie Paperless-ngx benutzen! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Beginne Upload... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Gespeicherte Ansichten @@ -708,23 +700,11 @@ Protokoll - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Administration - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Dokumentation @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Eine Idee vorschlagen @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 ist verfügbar. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Zum Anzeigen klicken. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx kann automatisch auf Updates überprüfen @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 Wie funktioniert das? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Aktualisierung verfügbar @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 Ein Fehler ist beim Speichern der Einstellungen aufgetreten. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Speichern @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Neuen Korrespondenten erstellen @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Korrespondenten bearbeiten @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Neuen Dokumenttyp erstellen @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Dokumenttyp bearbeiten @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Neues Element erstellen @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Element bearbeiten @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Konnte Element nicht speichern: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Löschen + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 z. B. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 oder benutzen Sie Schrägstriche, um bspw. Verzeichnisse hinzuzufügen @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Erstelle neuen Speicherpfad @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Speicherpfad bearbeiten @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Neues Tag erstellen @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Tag bearbeiten @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ von - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Löschen - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Kommentare @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Löschen bestätigen @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Diese Aktion kann nicht rückgängig gemacht werden. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Fortfahren @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Bearbeiten @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 In Seitenleiste zeigen @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Auf Startseite zeigen @@ -3171,11 +3583,43 @@ Automatisch + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Möchten Sie das Dokument "" wirklich löschen? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Assoziierte Dokumente werden nicht gelöscht. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Fehler beim Löschen des Elements: @@ -3203,11 +3647,19 @@ Tour beginnen + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Allgemein @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Erscheinungsbild @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Anzeigesprache @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Nachdem Sie eine neue Sprache ausgewählt haben, müssen Sie die Seite neu laden. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Datumsanzeige @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Datumsformat @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Kurz: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Mittel: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Lang: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Dokumente pro Seite @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Dokumenteditor @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Benutze PDF-Betrachter des Web Browsers @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Der integrierte PDF-Betrachter des Web-Browsers ist in der Regel schneller bei der Anzeige besonders großer Dokumente, funktioniert aber nicht in allen Browsern. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Seitenleiste @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Benutze Seitenleiste (nur Icons) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Dunkler Modus @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Benutze Systemeinstellungen @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Dunklen Modus aktivieren @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Miniaturbilder im dunklen Modus invertieren @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Designfarbe @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Zurücksetzen @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Überprüfung auf Updates @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Die Überprüfung auf Updates funktioniert über Anfragen an die öffentliche Github API um zu Ermitteln, ob eine neue Version verfügbar ist. Das eigentliche Update der Anwendung muss weiterhin per Hand durchgeführt werden. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 Die Anwendung sammelt oder speichert hierbei keinerlei Daten. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Automatische Überprüfung auf Updates aktivieren @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Beachten Sie, dass für Benutzer von Containern von Drittanbietern, z.B. linuxserver.io diese Benachrichtigung aktueller sein kann, als die Version des Drittanbieters. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Massenbearbeitung @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Bestätigungsdialoge anzeigen @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Beim Löschen von Dokumenten wird immer nach einer Bestätigung gefragt. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Anwenden beim Schließen @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Kommentare aktivieren @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Benachrichtigungen @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Dokumentverarbeitung @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Benachrichtigungen anzeigen, wenn neue Dokumente erkannt werden @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Benachrichtigungen anzeigen, wenn die Dokumentenverarbeitung erfolgreich abgeschlossen wurde @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Benachrichtigungen anzeigen, wenn die Verarbeitung des Dokuments fehlschlägt @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Unterdrücke Benachrichtigungen auf der Startseite @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Dadurch werden alle Benachrichtigungen über die Dokumentenverarbeitung auf der Startseite unterdrückt. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Erscheint auf @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Keine gespeicherten Ansichten vorhanden. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Gespeicherte Ansicht "" gelöscht. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Einstellungen gespeichert @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Einstellungen wurden erfolgreich gespeichert. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Einstellungen wurden erfolgreich gespeichert. Neuladen ist erforderlich, um einige Änderungen zu übernehmen. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Jetzt neuladen @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Benutze Systemsprache @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Benutze Datumsformat der Anzeigesprache @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Fehler beim Speichern der Einstellungen auf dem Server: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From d480620be9de086b9179bd3e93e29b4f8892b86f Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:36:55 -0800 Subject: [PATCH 093/231] New translations messages.xlf (Polish) [ci skip] --- src-ui/src/locale/messages.pl_PL.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.pl_PL.xlf b/src-ui/src/locale/messages.pl_PL.xlf index 2d66f5758..1973df424 100644 --- a/src-ui/src/locale/messages.pl_PL.xlf +++ b/src-ui/src/locale/messages.pl_PL.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Rozpoczęcie wysyłania... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Zapisane widoki @@ -708,23 +700,11 @@ Logi - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Administracja - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Dokumentacja @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Zaproponuj pomysł @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 jest dostępny. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Kliknij, aby zobaczyć. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Aktualizacja jest dostępna @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 Wystąpił błąd podczas zapisywania ustawień. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Zapisz @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Dodaj nowego nadawcę @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Edytuj nadawcę @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Utwórz nowy dokument @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Edytuj typ dokumentu @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Utwórz nowy element @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Edytuj element @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Nie można zapisać elementu: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Usuń + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 np. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 lub użyj ukośników, aby dodać katalogi, np. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Utwórz nową ścieżkę przechowywania @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Edytuj ścieżkę przechowywania @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Utwórz tag @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Edytuj tag @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ z - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Usuń - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comments @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Potwierdź usunięcie @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Ta czynność nie może być cofnięta. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Proceed @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Edytuj @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Pokaż w panelu bocznym @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Pokaż na pulpicie @@ -3171,11 +3583,43 @@ Automatyczny + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Czy na pewno chcesz usunąć tag ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Powiązane dokumenty nie będą usunięte. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Błąd podczas usuwania elementu: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Ogólne @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Wygląd @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Język @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Musisz przeładować stronę po wybraniu nowego języka. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Wyświetlanie daty @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Format daty @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Krótki: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Średni: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Długi: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Ilość elementów na stronie @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Edytor dokumentów @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Wyświetl PDF przez wbudowaną przeglądarkę @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Zazwyczaj działa szybciej przy wyświetlaniu dużych dokumentów w formacie PDF, ale może nie działać na niektórych przeglądarkach. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Tryb ciemny @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Użyj ustawień systemowych @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Użyj ciemnego motywu @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Odwróć kolory miniaturki w trybie ciemnym @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Kolor Motywu @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Anuluj @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Masowa edycja @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Używaj dialogów potwierdzenia @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Usuwanie dokumentów zawsze będzie wymagało potwierdzenia. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Zamknięcie zapisuje zmiany @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Enable comments @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Powiadomienia @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Przetwarzanie dokumentów @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Pokaż powiadomienia, gdy zostaną wykryte nowe dokumenty @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Pokaż powiadomienia, gdy przetwarzanie dokumentu zakończy się pomyślnie @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Pokaż powiadomienia, gdy przetwarzanie dokumentu nie powiedzie się @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Wyłącz powiadomienia na pulpicie @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Wyłącz pokazywanie wszystkich wiadomości o statusie przetwarzania dokumentów na pulpicie. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Wyświetlanie @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Nie zdefiniowano zapisanych widoków. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Zapisany widok "" został usunięty. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Ustawienia zostały zapisane @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Ustawienia zapisane pomyślnie. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Ustawienia zostały pomyślnie zapisane. Przeładowanie jest wymagane do zastosowania zmian. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Załaduj ponownie @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Użyj języka systemowego @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Użyj formatu daty według wyświetlanego języka @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Błąd podczas zapisywania ustawień na serwerze: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From af5116522916f8495c341571c2229312644375ee Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:36:57 -0800 Subject: [PATCH 094/231] New translations messages.xlf (Luxembourgish) [ci skip] --- src-ui/src/locale/messages.lb_LU.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.lb_LU.xlf b/src-ui/src/locale/messages.lb_LU.xlf index 2b138390c..c42288865 100644 --- a/src-ui/src/locale/messages.lb_LU.xlf +++ b/src-ui/src/locale/messages.lb_LU.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Merci! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Upload fänkt un... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Gespäichert Usiichten @@ -708,23 +700,11 @@ Protokoller - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Administratioun - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Dokumentatioun @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Eng Iddi virschloen @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 ass disponibel. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Klicke fir unzeweisen. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Update disponibel @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 An error occurred while saving settings. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Späicheren @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Neie Korrespondent erstellen @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Korrespondent editéieren @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Neien Dokumententyp erstellen @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Dokumententyp änneren @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Neit Element erstellen @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Element beaarbechten @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Element konnt net gespäichert ginn: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Läschen + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 z. B. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 or use slashes to add directories e.g. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Create new storage path @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Späicherpfad änneren @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Nei Etikett erstellen @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Etikett editéieren @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ vu(n) - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Läschen - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Kommentaren @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Läsche bestätegen @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Dës Operatioun kann net réckgängeg gemaach ginn. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Weider @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Editéieren @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 An der Säiteleescht uweisen @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Op der Startsäit uweisen @@ -3171,11 +3583,43 @@ Automatesch + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Do you really want to delete the ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Assoziéiert Dokumenter ginn net geläscht. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Error while deleting element: @@ -3203,11 +3647,19 @@ Tour starten + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Allgemeng @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Ausgesinn @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Sprooch vum Interface @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Nodeem s eng nei Sprooch gewielt gouf muss d'Säit nei geluede ginn. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Uweise vum Datum @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Datumsformat @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Kuerz: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Mëttel: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Laang: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Elementer pro Säit @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Dokumenteneditor @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 PDF-Betruechter vum Web-Browser notzen @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Dëst ass normalerweis méi séier fir grouss PDF-Dokumenter, mee kéint op verschiddene Browseren net goen. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Saiteläischt @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Schmuel Saiteläischt benotzen (nëmmen Ikonen) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Nuetsmodus @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Systemastellungen notzen @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Nuetsmodus aktivéieren @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Virschaubiller an Nuetsmodus invertéieren @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Designfaarf @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Zrécksetzen @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Aktualiséierungs Kontroll @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Aktualiséierungs Kontroll aschalten @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Massebeaarbechtung @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Bestätegungsmessagë weisen @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Beim Läsche vun Dokumenter gëtt ëmmer no enger Bestätegung gefrot. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Späichere beim Zoumaachen @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Kommentaren erlaben @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Notifikatiounen @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Dokumenteveraarbechtung @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Notifikatiounen uweise wann nei Dokumenter detektéiert ginn @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Notifikatiounen uweise wann d'Dokumentveraarbechtung erfollegräich ofgeschloss ass @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Notifikatiounen uweise wann d'Dokumenteveraarbechtung feelschléit @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Notifikatiounen op der Startsäit ënnerdrécken @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Doduerch ginn all Messagen iwwer Dokumenteveraarbechtung op der Startsäit ënnerdréckt. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Erschéngt op @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Keng gespäichert Usiicht definéiert. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Gespäichert Usiicht "" geläscht. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Astellunge gespäichert @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Astellungen erfollegräich gespäichert. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Astellungen erfollegräich gespäichert. Nei lueden ass néideg fir verschidden Ännerungen ze applizéieren. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Elo nei lueden @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Systemsprooch benotzen @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Datumsformat vun der Sprooch vum Interface notzen @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Error while storing settings on server: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From cd6e37c520b12432d3c14b46546ed27caba700dc Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:36:58 -0800 Subject: [PATCH 095/231] New translations messages.xlf (Croatian) [ci skip] --- src-ui/src/locale/messages.hr_HR.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.hr_HR.xlf b/src-ui/src/locale/messages.hr_HR.xlf index c09ac3644..843e769f3 100644 --- a/src-ui/src/locale/messages.hr_HR.xlf +++ b/src-ui/src/locale/messages.hr_HR.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Pokretanje prijenosa... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Spremljeni prikazi @@ -708,23 +700,11 @@ Zapisnici - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Administrator - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Dokumentacija @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Predloži ideju @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 je dostupno. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Klikni za prikaz. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Dostupno ažuriranje @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 An error occurred while saving settings. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Spremi @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Stvori novog dopisnika @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Preuredi dopisnika @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Stvori novu vrstu dokumenta @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Preuredi vrstu dokumenta @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Stvori novu stavku @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Uredi stavku @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Nije moguće spremiti element: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Delete + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 npr. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 ili koristite kose crte za dodavanje imenika, npr. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Stvori novu putanju pohrane @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Uredi putanju pohrane @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Izradi novu oznaku @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Preuredi oznaku @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ of - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Delete - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comments @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Confirm delete @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + This operation cannot be undone. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Proceed @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Edit @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Show in sidebar @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Show on dashboard @@ -3171,11 +3583,43 @@ Automatic + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Do you really want to delete the ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Associated documents will not be deleted. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Error while deleting element: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 General @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Appearance @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Display language @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 You need to reload the page after applying a new language. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Date display @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Date format @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Short: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Medium: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Long: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Items per page @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Document editor @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Use PDF viewer provided by the browser @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 This is usually faster for displaying large PDF documents, but it might not work on some browsers. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Dark mode @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Use system settings @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Enable dark mode @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Invert thumbnails in dark mode @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Theme Color @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Reset @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Bulk editing @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Show confirmation dialogs @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Deleting documents will always ask for confirmation. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Apply on close @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Enable comments @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Notifications @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Document processing @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Show notifications when new documents are detected @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Show notifications when document processing completes successfully @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Show notifications when document processing fails @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Suppress notifications on dashboard @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 This will suppress all messages about document processing status on the dashboard. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Appears on @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 No saved views defined. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Saved view "" deleted. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Settings saved @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Settings were saved successfully. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Settings were saved successfully. Reload is required to apply some changes. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Reload now @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Use system language @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Use date format of display language @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Error while storing settings on server: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From a5834393b3dc6dfa172e8483b67855238fd357ec Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:36:59 -0800 Subject: [PATCH 096/231] New translations messages.xlf (Portuguese, Brazilian) [ci skip] --- src-ui/src/locale/messages.pt_BR.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index ca224f1b2..ab799a4a6 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Initiating upload... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Visualizações @@ -708,23 +700,11 @@ Logs - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Admin - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Documentação @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Sugerir uma idéia @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 is available. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Click to view. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Update available @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 An error occurred while saving settings. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Salvar @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Criar novo correspondente @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Editar correspondente @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Criar novo tipo de documento @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Editar tipo de documento @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Criar novo item @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Editar item @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Não podemos salvar elemento: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Excluir + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 e.g. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 or use slashes to add directories e.g. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Create new storage path @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Edit storage path @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Criar nova etiqueta @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Editar etiqueta @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ de - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Excluir - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comments @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Confirmar exclusão @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Essa operação não pode ser revertida. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Proceed @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Editar @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Mostrar na navegação lateral @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Exibir no painel de controle @@ -3171,11 +3583,43 @@ Automático + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Do you really want to delete the ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Documentos associados não serão excluidos. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Error while deleting element: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 General @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Aparência @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Linguagem de exibição @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Você precisar recarregar a página depois de escolher uma nova linguagem. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Exibição de data @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Formato de data @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Curto: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Médio: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Longo: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Itens por página @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Editor de documentos @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Usar visualizador de PDF do navegador @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Isso é geralmente mais rápido para exibir grandes documentos PDF, mas poderá não funcionar em alguns navegadores. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Modo noturno @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Usar configurações do sistema @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Habilitar modo noturno @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Inverter imagens em modo noturno @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Theme Color @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Reset @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Edição em massa @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Mostrar janelas de confirmação @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Ao excluir um documento, sempre será pedido uma confirmação. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Aplicar ao fechar @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Enable comments @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Notificações @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Processamento de documentos @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Exibir notificações quando novos documentos forem detectados @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Exibir notificações quando o processamento de um documento concluir com sucesso @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Exibir notificações quando o processamento de um documento falhar @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Não exibir notificações no painel de controle @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Isso esconderá todas as mensagens sobre o status de processamento de documentos no painel de controle. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Aparece em @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Nenhuma visualização definida. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Visualização "" excluída. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Settings saved @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Settings were saved successfully. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Settings were saved successfully. Reload is required to apply some changes. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Reload now @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Usar linguagem do sistema @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Usar formato de data da linguagem de exibição @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Error while storing settings on server: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From 5a3affe8c0a89604e900206d6ca3fe9e90f2fb8a Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:01 -0800 Subject: [PATCH 097/231] New translations messages.xlf (Chinese Simplified) [ci skip] --- src-ui/src/locale/messages.zh_CN.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.zh_CN.xlf b/src-ui/src/locale/messages.zh_CN.xlf index 83d55672f..4c47f8e90 100644 --- a/src-ui/src/locale/messages.zh_CN.xlf +++ b/src-ui/src/locale/messages.zh_CN.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 正在初始化上传... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 保存视图 @@ -708,23 +700,11 @@ 日志 - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - 后台管理 - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 帮助文档 @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 提出建议 @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 可用 @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 点击查看 @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 有可用更新 @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 保存设置时发生错误。 @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 保存 @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 创建新的联系人 @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 编辑联系人 @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 创建新文档类型 @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 编辑文档类型 @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 创建新项目 @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 编辑项目 @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 无法保存元素: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + 删除 + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 例如: @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 或者使用斜线来添加目录,例如 @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 创建新的存储路径 @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 编辑存储位置 @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 创建新标签 @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 编辑标签 @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - 删除 - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comments @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 确认删除 @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + 此操作无法撤消。 @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + 继续操作 @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + 编辑 @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 在侧边栏显示 @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 在仪表板上显示 @@ -3171,11 +3583,43 @@ 自动 + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 您真的想要删除 吗? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 已关联的文档将不会被删除。 @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 删除元素时出错: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 通用 @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 外观 @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 显示语言 @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 您需要在应用新语言后重新加载页面。 @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 日期显示 @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 日期格式 @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 短: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 中: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 长: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 每页显示 @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 文档编辑器 @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 使用浏览器提供的 PDF 查看器 @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 显示大型的 PDF 文档通常更快,但在某些浏览器上可能无法使用。 @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 深色模式 @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 使用系统设置 @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 启用深色模式 @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 在深色模式下反转缩略图 @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 主题颜色 @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 重置 @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 批量编辑 @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 显示确认对话框 @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 删除文档时总是需要确认。 @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 关闭时应用 @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Enable comments @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 通知 @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 文档处理 @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 检测到新文档时显示通知 @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 文件处理成功完成时显示通知 @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 文件处理失败时显示通知 @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 禁用在仪表盘上的通知 @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 这将禁止仪表盘上所有有关文件处理状态的消息。 @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 出现于 @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 未定义保存的视图。 + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 保存的视图已删除。 @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 设置已保存 @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 设置保存成功 @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 设置已成功保存。需要重新加载以应用某些更改。 @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 立即重载 @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 使用系统语言 @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 使用显示语言的日期格式 @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 在服务器上存储设置时出错: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From bf2fac93932fd9cb222c8f4a30900994777b90f8 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:02 -0800 Subject: [PATCH 098/231] New translations messages.xlf (Turkish) [ci skip] --- src-ui/src/locale/messages.tr_TR.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.tr_TR.xlf b/src-ui/src/locale/messages.tr_TR.xlf index 719914c4a..1ad55efd4 100644 --- a/src-ui/src/locale/messages.tr_TR.xlf +++ b/src-ui/src/locale/messages.tr_TR.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Initiating upload... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Kaydedilen görünümler @@ -708,23 +700,11 @@ Günlükler - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Yönetici - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Dokümantasyon @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 Github @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Bir fikir öner @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 is available. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Görüntülemek için tıklayın. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Güncelleme mevcut @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 An error occurred while saving settings. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Kaydet @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Yeni bir muhabir oluşturun @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Muhabiri düzenleyin @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Yeni belge türü oluştur @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Belge türünü düzenle @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Yeni Öğe Oluştur @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Öğeyi Düzenle @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 olan öğeyi kayıt edemiyorum + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Sil + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 ör. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 or use slashes to add directories e.g. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Create new storage path @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Edit storage path @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Yeni etiket oluştur @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Etiketi düzenle @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ / - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Sil - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comments @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Silmeyi onayla @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Bu işlem geri alınamaz. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Devam et @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Düzenle @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Kenar çubuğunda göster @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Kontrol paneli'nde göster @@ -3171,11 +3583,43 @@ Otomatik + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Do you really want to delete the ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 İlişkilendirilmiş belgeler silinmeyecektir. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Error while deleting element: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Genel @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Görünüm @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Uygulama dili @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Yeni bir dil uyguladıktan sonra sayfayı yeniden yüklemeniz gerekir. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Tarih Gösterimi @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Tarih formatı @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Kısa: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Orta: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Uzun: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Sayfa başına öğe @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Belge düzenleyici @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Tarayıcı tarafından sağlanan PDF görüntüleyiciyi kullan @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Bu genellikle büyük PDF belgelerini görüntülemek için daha hızlıdır, ancak bazı tarayıcılarda çalışmayabilir. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Karanlık modu @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Sistem ayarlarını kullan @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Karanlık modu etkinleştir @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Karanlık modunda küçük resimleri tersine çevir @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Theme Color @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Sıfırla @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Toplu düzenlemec @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Onaylama iletişim kutuları göster @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Belgeleri silmek her zaman onay ister. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Kapanışta uygula @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Enable comments @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Bildirimler @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Belge işleme @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Yeni belge bulunduğunda bildirimi göster @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Belge işleme başarıyla tamamlandığında bildirimleri göster @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Belge işleme başarız tamamlandığında bildirimleri göster @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Kontrol panodaki bildirimleri bastır @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Bu, kontrol panodaki belge işleme durumuyla ilgili tüm iletileri bastırır. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Görünür @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Kaydedilmiş görünüm tanımlanmadı. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 adlı görünüm silindi. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Settings saved @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Settings were saved successfully. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Settings were saved successfully. Reload is required to apply some changes. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Şimdi yenile @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Sistem dilini kullan @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Görüntüleme dilinin tarih formatını kullan @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Error while storing settings on server: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From 5b76b45e33414a22be1b8b0c0bba8c015fe4426f Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:04 -0800 Subject: [PATCH 099/231] New translations messages.xlf (Swedish) [ci skip] --- src-ui/src/locale/messages.sv_SE.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.sv_SE.xlf b/src-ui/src/locale/messages.sv_SE.xlf index e8f6af14e..24c2ad0c9 100644 --- a/src-ui/src/locale/messages.sv_SE.xlf +++ b/src-ui/src/locale/messages.sv_SE.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Initiating upload... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Sparade vyer @@ -708,23 +700,11 @@ Loggar - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Admin - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Dokumentation @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Föreslå en idé @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 is available. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Click to view. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Update available @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 An error occurred while saving settings. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Spara @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Skapa ny korrespondent @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Senaste korrespondent @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Skapa ny dokumenttyp @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Redigera dokumenttyp @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Skapa nytt objekt @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Redigera objekt @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Kunde inte spara element: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Radera + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 e.g. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 or use slashes to add directories e.g. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Create new storage path @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Edit storage path @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Skapa ny tagg @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Redigera tag @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ av - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Radera - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comments @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Bekräfta borttagning @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Den här åtgärden kan inte ångras. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Proceed @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Redigera @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Visa i sidofältet @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Visa på instrumentpanelen @@ -3171,11 +3583,43 @@ Automatisk + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Do you really want to delete the ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Kopplade dokument kommer inte att raderas. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Error while deleting element: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 General @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Utseende @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Visningsspråk @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Du måste ladda om sidan efter att du ställt in ett nytt språk. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Visning av datum @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Datumformat @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Kort: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Medium: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Lång: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Objekt per sida @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Redigerare för dokument @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Använd PDF-läsaren som tillhandahålls av webbläsaren @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Detta är oftast snabbare för att visa stora PDF-dokument, men det kanske inte fungerar på vissa webbläsare. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Mörkt läge @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Använd systeminställningar @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Aktivera mörkt läge @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Invertera miniatyrer i mörkt läge @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Theme Color @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Reset @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Massändring @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Visa bekräftelsedialoger @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Radering av dokument kommer alltid att be om bekräftelse. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Tillämpa vid stängning @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Enable comments @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Notifieringar @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Dokument bearbetas @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Visa notifieringar när nya dokument upptäcks @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Visa notifieringar när dokumentbehandlingen är klar @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Visa aviseringar när dokumentbehandling misslyckas @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Förhindra aviseringar på instrumentpanelen @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Detta kommer att förhindra alla meddelanden om status för dokumenthantering på instrumentpanelen. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Visas på @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Inga sparade vyer har definierats. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Sparad vy "" borttagen. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Settings saved @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Settings were saved successfully. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Settings were saved successfully. Reload is required to apply some changes. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Reload now @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Använd systemspråk @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Använd datumformat för visningsspråk @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Error while storing settings on server: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From 201b77189a5aa56cfbd55c3ffe5f8253a09fbe0a Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:05 -0800 Subject: [PATCH 100/231] New translations messages.xlf (Slovenian) [ci skip] --- src-ui/src/locale/messages.sl_SI.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.sl_SI.xlf b/src-ui/src/locale/messages.sl_SI.xlf index 547da3daf..41d1362e8 100644 --- a/src-ui/src/locale/messages.sl_SI.xlf +++ b/src-ui/src/locale/messages.sl_SI.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Začetek nalaganja... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Shranjeni pogledi @@ -708,23 +700,11 @@ Dnevniki - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Skrbnik - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Dokumentacija @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Podaj predlog @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 je na voljo. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Klikni za ogled. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Posodobitev na voljo @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 Prišlo je do napake ob shranjevanju nastavitev. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Shrani @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Ustvarite novega dopisnika @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Uredi dopisnika @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Ustvarite novo vrsto dokumenta @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Uredite vrsto dokumenta @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Ustvari nov element @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Uredi vnos @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Elementa ni bilo mogoče shraniti: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Izbriši + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 npr. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 ali uporabljaj slash za dodajanje map npr. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Ustvari novo pot shrambe @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Uredi pot shrambe @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Ustvari novo oznako @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Uredi oznako @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ od - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Izbriši - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Komentarji @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Potrdi brisanje @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Te operacije ni mogoče razveljaviti. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Nadaljuj @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Uredi @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Prikaži v stranski vrstici @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Prikaži na pregledni plošči @@ -3171,11 +3583,43 @@ Samodejno + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Ali res želite izbrisati ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Povezani dokumenti ne bodo izbrisani. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Napaka pri brisanju elementa: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Splošno @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Izgled @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Jezik prikaza @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Po uporabi novega jezika morate osvežiti stran. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Prikaz datuma @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Oblika datuma @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Kratka: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Srednja: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Dolga: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Elementov na stran @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Urejevalnik dokumentov @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Uporabite pregledovalnik PDF, ki ga ponuja brskalnik @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 To je običajno hitrejše za prikazovanje velikih dokumentov PDF, vendar morda ne bo delovalo v nekaterih brskalnikih. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Temni način @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Uporabite sistemske nastavitve @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Omogoči temni način @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Invertirajte sličice v temnem načinu @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Barve teme @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Ponastavi @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Množično urejanje @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Pokaži potrditvena okna @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Brisanje dokumentov bo vedno zahtevalo potrditev. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Potrdite ob zaprtju @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Omogoči komentarje @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Obvestila @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Obdelava dokumentov @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Pokaži obvestila, ko so zaznani novi dokumenti @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Pokaži obvestila, ko se obdelava dokumenta uspešno zaključi @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Pokaži obvestila, ko obdelava dokumenta ne uspe @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Preprečite obvestila na pregledni strani @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 S tem bodo na plošči prekinjena vsa sporočila o stanju obdelave dokumentov. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Pojavi se na @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Ni določenih shranjenih pogledov. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Shranjen pogled "" je izbrisan. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Nastavitve shranjene @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Nastavitve uspešno shranjene. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Nastavitve so bile uspešno shranjene. Za uveljavitev nekaterih sprememb je potreben ponovni zagon. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Ponovno zaženi @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Uporabi sistemski jezik @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Uporabite obliko datuma prikaznega jezika @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Napaka pri shranjevanju nastavitev na strežnik: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From 85cfd7610dc3df47db30f7e0bf4e5c9f164004ac Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:06 -0800 Subject: [PATCH 101/231] New translations messages.xlf (Russian) [ci skip] --- src-ui/src/locale/messages.ru_RU.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index acd343eff..91366291e 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Initiating upload... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Представления @@ -708,23 +700,11 @@ Логи - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Администрирование - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Документация @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Предложить идею @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 доступно. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Нажмите для просмотра. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Доступно обновление @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 Произошла ошибка при сохранении настроек. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Сохранить @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Создать нового корреспондента @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Редактировать корреспондента @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Создать новый тип документа @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Редактировать тип документа @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Создать новый объект @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Редактировать объект @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Не могу сохранить элемент: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Удалить + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 напр. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 или используйте слэши для добавления каталогов, например. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Создать новый путь хранения @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Редактировать путь хранения @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Создать новый тег @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Редактировать тег @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ из - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Удалить - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Комментарии @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Подтвердите удаление @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Эту операцию нельзя отменить. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Proceed @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Редактировать @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Показать в боковой панели @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Показать на главной @@ -3171,11 +3583,43 @@ Автоматически + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Вы действительно хотите удалить "? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Связанные документы не будут удалены. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Возникла ошибка при удалении элемента: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Общие @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Вид @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Язык интерфейса @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Вы должны перезагрузить страница, после применения нового языка. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Дата @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Формат даты @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Краткий: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Средний: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Длинный: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Элементов на странице @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Редактор документов @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Использовать просмотрщик PDF встроенный в браузер @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Это, обычно, более быстрый способ отображения больших PDF документов, но он может не работать в некоторых браузерах. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Тёмный режим @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Использовать системные настройки @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Включить тёмный режим @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Инвертировать эскизы при включенном тёмном режиме @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Цветовая тема @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Сбросить @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Массовое редактирование @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Показывать диалоги подтверждения @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Удаление документов всегда будет требовать подтверждения. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Применить при закрытии @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Включить комментарии @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Уведомления @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Обработка документа @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Показывать уведомления при обнаружении новых документов @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Показывать уведомления, когда обработка документа успешна @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Показывать уведомления, когда обработка документа не удалась @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Спрятать уведомления на главной @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Это отключит все сообщения о статусе обработки документов на главной. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Появляется на @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Нет сохраненных представлений. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Сохраненное представление "" удалено. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Сохранено @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Настройки успешно сохранены. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Настройки успешно сохранены. Для применения некоторых изменений необходимо перезагрузить. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Перезагрузить @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Использовать язык системы @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Использовать формат даты, соответствующий языку @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Ошибка при хранении настроек на сервере: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From 531d3f03f9ca5bfb4d9105bf1faaed6769f3d51f Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:08 -0800 Subject: [PATCH 102/231] New translations messages.xlf (Portuguese) [ci skip] --- src-ui/src/locale/messages.pt_PT.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index 7f2c5c668..cc0013f4e 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Obrigado! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 A iniciar o carregamento... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Visualizações @@ -708,23 +700,11 @@ Registos - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Administrador - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Documentação @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 Github @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Sugerir uma ideia @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 está disponível. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Clique para ver. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 Como é que isto funciona? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Atualização disponível @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 An error occurred while saving settings. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Salvar @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Criar novo correspondente @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Editar correspondente @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Criar novo tipo de documento @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Editar tipo de documento @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Criar novo item @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Editar item @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Não foi possível guardar elemento: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Apagar + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 e.g. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 or use slashes to add directories e.g. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Create new storage path @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Edit storage path @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Criar uma nova etiqueta @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Editar etiqueta @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ de - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Apagar - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comments @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Confirmar eliminação @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Esta operação não pode ser revertida. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Proceed @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Editar @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Mostrar na barra lateral @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Exibir no dashboard @@ -3171,11 +3583,43 @@ Automático + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Tem a certeza que pretende apagar ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Documentos associados não serão apagados. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Erro ao eliminar elemento: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Geral @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Aparência @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Linguagem de exibição @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Tem de recarregar a página depois de escolher uma nova linguagem. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Exibição de data @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Formato de data @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Curto: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Médio: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Longo: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Itens por página @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Editor de documentos @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Usar visualizador de PDF do navegador @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Isso é geralmente mais rápido para exibir grandes documentos PDF, mas poderá não funcionar em alguns navegadores. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Modo noturno @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Usar configurações do sistema @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Habilitar modo noturno @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Inverter miniaturas no modo escuro @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Cor do Tema @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Repor @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Edição em massa @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Mostrar janelas de confirmação @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Ao excluir um documento, sempre será pedido uma confirmação. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Aplicar ao fechar @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Enable comments @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Notificações @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Processamento de documentos @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Exibir notificações quando novos documentos forem detectados @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Exibir notificações quando o processamento de um documento concluir com sucesso @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Mostrar notificações quando o processamento de um documento falhar @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Não mostrar notificações no dashboard @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Isso esconderá todas as mensagens sobre o status de processamento de documentos no painel de controle. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Aparece em @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Nenhuma vista gravada definida. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Visualização "" apagada. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Settings saved @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Settings were saved successfully. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Settings were saved successfully. Reload is required to apply some changes. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Reload now @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Usar linguagem do sistema @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Usar formato de data da linguagem de exibição @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Erro ao armazenar configurações no servidor: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From 46f310603bc475de15de57cdab454363dc8f407a Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:09 -0800 Subject: [PATCH 103/231] New translations messages.xlf (Norwegian) [ci skip] --- src-ui/src/locale/messages.no_NO.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.no_NO.xlf b/src-ui/src/locale/messages.no_NO.xlf index 74c4267f3..8cc6283ec 100644 --- a/src-ui/src/locale/messages.no_NO.xlf +++ b/src-ui/src/locale/messages.no_NO.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Starter opplasting... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Lagrede visninger @@ -708,23 +700,11 @@ Logger - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Admin - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Dokumentasjon @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Foreslå en idé @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 er tilgjengelig. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Klikk for å se. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Oppdatering er tilgjengelig @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 Det oppstod en feil under lagring av innstillingene. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Lagre @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Opprett ny korrespondent @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Rediger korrespondent @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Opprett ny dokumenttype @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Rediger dokumenttype @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 + Opprett produkt @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Rediger produkt @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Kunne ikke lagre elementet: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Slett + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 f.eks. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 eller bruk skråstreker for å legge til kataloger, f.eks. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Lag ny lagringssti @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Redigere lagringssti @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Opprett ny tagg @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Rediger Tag @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ of - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Slett - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comments @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Bekreft sletting @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Denne handlingen kan ikke angres. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Fortsett @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Rediger @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Vis i sidestolpen @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Vis på dashbordet @@ -3171,11 +3583,43 @@ Automatisk + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Ønsker du virkelig å slette dokumentet "? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Tilknyttede dokumenter vil ikke bli slettet. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Feil under sletting av element: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Generelt @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Utseende @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Visningsspråk @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 You need to reload the page after applying a new language. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Dato visning @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Datoformat @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Short: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Medium: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Long: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Items per page @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Dokument editor @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Use PDF viewer provided by the browser @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 This is usually faster for displaying large PDF documents, but it might not work on some browsers. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Dark mode @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Use system settings @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Aktiver mørk modus @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Invert thumbnails in dark mode @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Temafarge @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Tilbakestill @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Bulk redigering @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Show confirmation dialogs @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Deleting documents will always ask for confirmation. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Bruk ved lukking @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Enable comments @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Varsler @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Document processing @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Show notifications when new documents are detected @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Show notifications when document processing completes successfully @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Show notifications when document processing fails @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Suppress notifications on dashboard @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 This will suppress all messages about document processing status on the dashboard. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Vises på @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Ingen lagrede visninger definert. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Saved view "" deleted. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Settings saved @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Innstillingene ble lagret. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Settings were saved successfully. Reload is required to apply some changes. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Oppfrisk nå @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Bruk systemspråk @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Bruk datoformat for visningsspråk @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Error while storing settings on server: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From f35f33539a8c5d8ff1a8a09a27df8e0acd2eccec Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:10 -0800 Subject: [PATCH 104/231] New translations messages.xlf (Romanian) [ci skip] --- src-ui/src/locale/messages.ro_RO.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index 43c2e28fc..caa2e63fd 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Initiating upload... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Vizualizări @@ -708,23 +700,11 @@ Jurnale - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Administrator - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Documentație @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Sugestii @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 is available. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Click to view. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Update available @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 An error occurred while saving settings. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Salvează @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Creare corespondent nou @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Modifică un corespondent @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Crează un nou tip de document @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Modifică un tip de document @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Crează articol nou @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Modifică articol @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Nu s-a putut salva elementul: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Șterge + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 e.g. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 or use slashes to add directories e.g. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Create new storage path @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Edit storage path @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Crează o etichetă nouă @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Modifică o etichetă @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ din - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Șterge - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comments @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Confirmă ștergerea @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Această operațiune este ireversibilă. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Proceed @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Editează @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Afișează in bara laterala @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Afișează pe tabloul de bord @@ -3171,11 +3583,43 @@ Automat + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Do you really want to delete the ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Documentele asociate nu vor fi șterse. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Error while deleting element: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 General @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Afișare @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Limba de afișare @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Trebuie să reîncărcați pagina după aplicarea unei noi limbi. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Afișarea datei @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Formatul datei @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Scurt: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Mediu: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Lung: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Articole pe pagina @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Editor de documente @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Utilizați vizualizatorul PDF furnizat de browser @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Această opțiune este mai rapidă pentru PDF-uri mari, dar nu este compatibilă cu toate browserele. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Mod întunecat @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Folosește setările sistemului @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Activează modul întunecat @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Inversează miniaturile în modul întunecat @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Theme Color @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Reset @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Editare în bloc @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Afișare dialoguri de confirmare @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Ștergerea documentelor va necesita întotdeauna confirmare. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Aplică la ieșire @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Enable comments @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Notificări @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Procesarea documentelor @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Arată notificări atunci când sunt detectate documente noi @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Arată notificări atunci când procesarea documentului se termină cu succes @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Arată notificări atunci când procesarea documentului eșuează @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Ascunde notificările pe tabloul de bord @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Această setare va opri mesajele despre procesarea documentelor pe tabloul de bord. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Apare pe @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Nu sunt definite vizualizări. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Vizualizarea "" a fost ștearsă. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Settings saved @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Settings were saved successfully. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Settings were saved successfully. Reload is required to apply some changes. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Reload now @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Utilizați limba sistemului @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Folosiți formatul datei corespunzător limbii de afișare @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Error while storing settings on server: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From 52f58316572271371c93ddeeb306b9f6a04b70a6 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:11 -0800 Subject: [PATCH 105/231] New translations messages.xlf (Dutch) [ci skip] --- src-ui/src/locale/messages.nl_NL.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 40387ebd2..776c1eb46 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Bedankt! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Upload starten... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Opgeslagen views @@ -708,23 +700,11 @@ Logbestanden - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Beheer - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Handleiding @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Ideeënbus @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 is beschikbaar. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Klik om te bekijken. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Update beschikbaar @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 An error occurred while saving settings. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Opslaan @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Nieuwe correspondent maken @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Correspondent bewerken @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Nieuw documenttype maken @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Documenttype bewerken @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Maak nieuw item @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Item bewerken @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Kon het element niet opslaan: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Verwijderen + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 bijv. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 of gebruik slashes om mappen toe te voegen, bijv. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Nieuw opslag pad maken @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Opslag pad bewerken @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Nieuw label aanmaken @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Etiket bewerken @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ van - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Verwijderen - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comments @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Bevestig het verwijderen @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Deze actie kan niet ongedaan worden gemaakt. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Proceed @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Bewerk @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Toon in de zijbalk @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Toon op het dashboard @@ -3171,11 +3583,43 @@ Automatisch + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Do you really want to delete the ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Gekoppelde documenten zullen niet worden verwijderd. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Error while deleting element: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Algemeen @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Uiterlijk @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Taal @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 De pagina moet herladen worden nadat een andere taal werd gekozen. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Datumweergave @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Datumopmaak @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Kort: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Medium: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Lang: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Resultaten per pagina @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Documentbewerker @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Gebruik de PDF lezer ingebouwd in uw browser @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Dit is gewoonlijk sneller om grote PDF's te tonen, maar werkt niet bij elke browser. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Nachtmodus @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Gebruik systeeminstellingen @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Gebruik nachtmodus @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Toon negatief van voorbeeldweergave in nachtmodus @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Theme Color @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Resetten @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Massabewerking @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Toon dialoogvenster ter bevestiging @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Er zal altijd om bevestiging gevraagd worden voor het verwijderen van documenten. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Toepassen bij het sluiten @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Enable comments @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Meldingen @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Verwerking van documenten @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Toon meldingen wanneer nieuwe documenten worden gedetecteerd @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Toon een melding wanneer documenten met succes zijn verwerkt @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Toon meldingen wanneer het verwerken van documenten faalt @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Onderdruk meldingen op het dashboard @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Dit verbergt alle statusberichten op het dashboard die met het verwerken van documenten te maken hebben. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Komt voor bij @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Geen opgeslagen views gedefinieerd. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Opgeslagen view "" verwijderd. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Instellingen opgeslagen @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Instellingen zijn succesvol opgeslagen. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Settings were saved successfully. Reload is required to apply some changes. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Reload now @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Gebruik de systeemtaal @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Datumopmaak van weergavetaal gebruiken @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Error while storing settings on server: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From eac21f773fd54ebdd8354cab419bd3fc03136c50 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:13 -0800 Subject: [PATCH 106/231] New translations messages.xlf (Italian) [ci skip] --- src-ui/src/locale/messages.it_IT.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index 32ce62de0..b8a9a741b 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -423,27 +423,19 @@ Le Attività File mostrano i documenti che sono stati consumati, sono in attesa di esserlo, o possano aver portato a un fallimento durante l'Attività. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Controlla le impostazioni per varie modifiche all'app web o per attivare o disattivare le impostazioni per le viste salvate. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - L'area di Amministrazione contiene impostazioni più avanzate e per il recupero automatico delle e-mail. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Grazie! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 Ci sono <em>tonnellate</em> di caratteristiche e informazioni che non abbiamo coperto qui, ma questo dovrebbe essere abbastanza per cominciare. Consulta la documentazione o visita il progetto su GitHub per saperne di più o per segnalare problemi. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Infine, a nome di ogni collaboratore di questo progetto supportato dalla comunità, grazie per utilizzare Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Avvio caricamento... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Viste salvate @@ -708,23 +700,11 @@ Log - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Amministratore - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Documentazione @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Suggerisci un'idea @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 è disponibile. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Clicca per visualizzare. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx può controllare automaticamente la presenza di aggiornamenti @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 Come funziona? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Aggiornamento disponibile @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 Si è verificato un errore durante il salvataggio delle impostazioni. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Salva @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Crea nuovo corrispondente @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Modifica corrispondente @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Crea nuovo tipo di documento @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Modifica tipo di documento @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Crea nuovo elemento @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Modifica elemento @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Non è possibile salvare l'elemento: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Elimina + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 ad es. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 o usa slash per aggiungere directory, ad es. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Crea un nuovo percorso di archiviazione @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Modifica percorso di archiviazione @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Crea nuovo tag @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Modifica tag @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ di - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Elimina - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Commenti @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Conferma eliminazione @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Questa operazione non può essere annullata. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Procedi @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Modifica @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Mostra nella barra laterale @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Mostra nella dashboard @@ -3171,11 +3583,43 @@ Automatico + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Vuoi davvero eliminare "? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 I documenti associati non verranno eliminati. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Errore durante l'eliminazione dell'elemento: @@ -3203,11 +3647,19 @@ Inizia tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Generale @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Aspetto @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Lingua @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Riavviare la pagina dopo avere impostato la nuova lingua. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Visualizzazione data @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Formato data @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Breve: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Media: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Lunga: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Elementi per pagina @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Editor dei documenti @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Usa il visualizzatore PDF fornito dal browser @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Di solito è più rapido nel visualizzare documenti PDF grandi, ma potrebbe non funzionare su tutti i browser. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Barra laterale @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Usa barra laterale 'snella' (solo icone) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Modalità notte @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Usa impostazioni di sistema @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Abilita modalità notte @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Inverti anteptime in modalità notte @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Colore del tema @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Reimposta @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Controllo aggiornamento @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Il controllo degli aggiornamenti funziona controllando l'ultima versione rilasciata tramite le API GitHub pubbliche for the pubbliche per determinare se sia disponibile una versione più recente. L'aggiornamento effettivo dell'app deve comunque essere eseguito manualmente. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 L'app non raccoglie in alcun modo alcun dato di tracciamento. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Abilita controllo aggiornamenti @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Nota che per gli utenti di container di terze parti, ad esempio linuxserver.io, questa notifica può essere 'più avanti' della versione corrente di terze parti. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Modifica in blocco @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Mostra dialoghi di conferma @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Verrà sempre chiesta una conferma prima di eliminare documenti. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Applica in chiusura @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Abilita i commenti @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Notifiche @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Elaborazione del documento @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Notifica quando vengono trovati nuovi documenti @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Notifica quando l'elaborazione del documento viene completata con successo. @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Notifica quando l'elaborazione del documento fallisce @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Non mostrare notifiche nella dashboard @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Verranno interrotte tutte le notifiche nella dashboard riguardo lo stato dell'elaborazione dei documenti. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Appare in @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Nessuna vista salvata. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 La vista "" è stata eliminata. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Impostazioni salvate @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Impostazioni salvate con successo. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Impostazioni salvate con successo. È necessario ricaricare per applicare alcune modifiche. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Ricarica ora @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Usa lingua di sistema @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Usa il formato data della lingua @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Errore durante il salvataggio delle impostazioni sul server: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From 80495d42decd5f408c5acb1febc33016b1725631 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:14 -0800 Subject: [PATCH 107/231] New translations messages.xlf (Hebrew) [ci skip] --- src-ui/src/locale/messages.he_IL.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.he_IL.xlf b/src-ui/src/locale/messages.he_IL.xlf index 7a74488ec..b8da94703 100644 --- a/src-ui/src/locale/messages.he_IL.xlf +++ b/src-ui/src/locale/messages.he_IL.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 מאתחל העלאה... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 תצוגות שמורות @@ -708,23 +700,11 @@ יומני רישום - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - מנהל - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 תיעוד @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 הצעה רעיון @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 זמין. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 לחץ להצגה. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 קיים עדכון @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 An error occurred while saving settings. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 שמור @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 הוסף מכותב חדש @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 ערוך מכותב @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 הוסף סוג מסמך חדש @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 ערוך סוג מסמך @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 יצירת פריט חדש @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 עריכת פריט @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 לא ניתן לשמור את האלמנט: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + מחק + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 לדוג' @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 או השתמשו באלכסונים כדי להוסיף ספריות, לדוג' @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 צור נתיב אכסון חדש @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 ערוך נתיב אכסון @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 צור תגית חדשה @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 עריכת תגית @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ מתוך - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - מחק - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comments @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 אישור מחיקה @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + This operation cannot be undone. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Proceed @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Edit @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 הצג בסרגל צידי @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 הצג בדשבורד @@ -3171,11 +3583,43 @@ אוטומטי + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 בטוח שברצנך למחוק את ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 מסמכים נלווים לא יימחקו. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 שגיאה במחיקת האלמנט: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 כללי @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 מראה @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 שפת תצוגה @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 עליך לטעון מחדש את הדף לאחר החלת שפה חדשה. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 תצוגת תאריך @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 תבנית תאריך @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 קצר: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 בינוני: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 ארוך: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 פריטים בעמוד @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 עורך מסמך @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 השתמש במציג PDF המובנה בדפדפן @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 זה בדרך כלל מהיר יותר עבור הצגת מסמכי PDF גדולים, אך ייתכן שהוא לא יעבוד בדפדפנים מסוימים. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 מצב לילה @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 השתמש בהגדרות המערכת @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 אפשר מצב לילה @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Invert thumbnails in dark mode @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Theme Color @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Reset @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Bulk editing @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Show confirmation dialogs @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Deleting documents will always ask for confirmation. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Apply on close @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Enable comments @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Notifications @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Document processing @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Show notifications when new documents are detected @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Show notifications when document processing completes successfully @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Show notifications when document processing fails @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Suppress notifications on dashboard @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 This will suppress all messages about document processing status on the dashboard. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Appears on @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 No saved views defined. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Saved view "" deleted. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Settings saved @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Settings were saved successfully. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Settings were saved successfully. Reload is required to apply some changes. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Reload now @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Use system language @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Use date format of display language @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Error while storing settings on server: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From d6bbf2cc8d325870b54288f96ffc9ed266b65fe1 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:15 -0800 Subject: [PATCH 108/231] New translations messages.xlf (Finnish) [ci skip] --- src-ui/src/locale/messages.fi_FI.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.fi_FI.xlf b/src-ui/src/locale/messages.fi_FI.xlf index 1329f5db2..8ff78e6eb 100644 --- a/src-ui/src/locale/messages.fi_FI.xlf +++ b/src-ui/src/locale/messages.fi_FI.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Aloittaa latausta... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Tallennetut näkymät @@ -708,23 +700,11 @@ Lokit - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Ylläpito - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Dokumentaatio @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Ehdota ideaa @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 on saatavilla. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Näytä klikkaamalla. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Päivitys saatavilla @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 Virhe tallennettaessa asetuksia. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Tallenna @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Luo uusi yhteyshenkilö @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Muokkaa yhteyshenkilöä @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Luo uusi asiakirjatyyppi @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Muokkaa asiakirjatyyppiä @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Luo uusi @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Muokkaa @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Elementtiä ei voitu tallentaa: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Poista + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 esim. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 tai käytä kauttaviivoja lisätäksesi hakemistoja, esim. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Luo uusi tallennuspolku @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Muokkaa tallennustilan polkua @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Luo uusi tägi @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Muokkaa tagia @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ sivusta - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Poista - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Kommentit @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Vahvista poisto @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Toimintoa ei voi peruuttaa. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Jatka @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Muokkaa @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Näytä sivupalkissa @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Näytä Dashboardissa @@ -3171,11 +3583,43 @@ Automaattinen + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Haluatko varmasti poistaa "? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Liittyviä asiakirjoja ei poisteta. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Virhe poistettaessa elementtiä: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Yleiset @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Ulkoasu @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Näyttökieli @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Sinun täytyy ladata sivu uudelleen uuden kielen käyttöönoton jälkeen. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Päivämäärän näyttö @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Päivämäärän esitystapa @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Lyhyt: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Keskipitkä: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Pitkä: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Kohteita sivulla @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Asiakirjan muokkain @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Käytä selaimen PDF-katselinta @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Tämä on yleensä nopeampi suurten PDF-asiakirjojen näyttämiseen, mutta se ei välttämättä toimi joissakin selaimissa. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Tumma tila @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Käytä järjestelmän asetuksia @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Käytä tummaa tilaa @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Käännä pikkukuvat pimeässä tilassa @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Teeman väri @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Nollaa @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Massamuokkaus @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Näytä vahvistukset @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Asiakirjojen poistaminen pyytää aina vahvistusta. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Tallenna suljettaessa @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Ota kommentit käyttöön @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Ilmoitukset @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Asiakirjan käsittely @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Näytä ilmoitukset kun uusia asiakirjoja havaitaan @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Näytä ilmoitukset, kun asiakirjan käsittely valmistuu onnistuneesti @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Näytä ilmoitukset kun asiakirjan käsittely epäonnistuu @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Älä näytä ilmoituksia hallintapaneelissa @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Tämä estää hallintapaneelissa kaikki viestit, jotka koskevat asiakirjojen käsittelyn tilaa. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Esiintyy @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Tallennettuja näkymiä ei ole määritelty. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Tallennettu näkymä "" poistettu. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Asetukset tallennettu @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Asetukset tallennettiin onnistuneesti. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Asetukset on tallennettu onnistuneesti. Uudelleenlataus vaaditaan joidenkin muutosten käyttöönottamiseksi. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Lataa uudelleen @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Käytä järjestelmän kieltä @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Käytä näyttökielen päivämäärämuotoa @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Virhe tallennettaessa asetuksia palvelimelle: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From fd0759bf6fd5c48d3c7f4c582bc230af96b530e5 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:17 -0800 Subject: [PATCH 109/231] New translations messages.xlf (Danish) [ci skip] --- src-ui/src/locale/messages.da_DK.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.da_DK.xlf b/src-ui/src/locale/messages.da_DK.xlf index 9d1b527b4..c653277b2 100644 --- a/src-ui/src/locale/messages.da_DK.xlf +++ b/src-ui/src/locale/messages.da_DK.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Uploader... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Gemte visninger @@ -708,23 +700,11 @@ Logninger - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Admin - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Dokumentation @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Foreslå en idé @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 er tilgængelig. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Klik for at se. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Opdatering tilgængelig @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 An error occurred while saving settings. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Gem @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Opret ny korrespondent @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Redigér korrespondent @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Opret ny dokumenttype @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Redigér dokumenttype @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Opret nyt element @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Redigér element @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Kunne ikke gemme element: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Slet + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 e.g. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 or use slashes to add directories e.g. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Create new storage path @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Edit storage path @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Opret ny etiket @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Redigér etiket @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ af - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Slet - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comments @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Bekræft sletning @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Denne handling kan ikke fortrydes. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Proceed @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Redigér @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Vis i sidebjælke @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Vis på betjeningspanel @@ -3171,11 +3583,43 @@ Automatisk + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Er du sikker på, at du vil slette etiketten "? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Tilknyttede dokumenter vil ikke blive slettet. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Error while deleting element: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Generelt @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Udseende @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Visningssprog @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Du skal genindlæse siden efter at have valgt et nyt sprog. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Dato visning @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Datoformat @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Kort: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Mellem: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Lang: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Elementer pr. side @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Dokument editor @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Benyt PDF-fremviser leveret af browseren @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Dette er normalt hurtigere til visning af store PDF-dokumenter, men det virker måske ikke på nogle browsere. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Mørk tilstand @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Brug systemindstillinger @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Aktivér mørk tilstand @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Invertér miniaturebilleder i mørk tilstand @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Temafarve @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Reset @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Masse redigering @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Vis bekræftelsesdialoger @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Sletning af dokumenter vil altid anmode om bekræftelse. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Anvend ved lukning @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Enable comments @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Notifikationer @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Dokumentbehandling @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Vis notifikationer når nye dokumenter registreres @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Vis notifikationer når dokumentbehandling er fuldført @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Vis notifikationer når dokumentbehandling fejler @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Undertryk notifikationer på betjeningspanelet @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Dette vil undertrykke alle meddelelser om dokumentbehandlingsstatus på betjeningspanelet. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Vises på @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Ingen gemte visninger. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Gemt visning "" slettet. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Settings saved @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Settings were saved successfully. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Settings were saved successfully. Reload is required to apply some changes. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Reload now @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Benyt systemsprog @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Benyt datoformat for visningssprog @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Error while storing settings on server: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From 7bf1e246166803ad1fb21482d3cc6c4c167a41bd Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:18 -0800 Subject: [PATCH 110/231] New translations messages.xlf (Czech) [ci skip] --- src-ui/src/locale/messages.cs_CZ.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.cs_CZ.xlf b/src-ui/src/locale/messages.cs_CZ.xlf index 6b58c8f8d..7066793b2 100644 --- a/src-ui/src/locale/messages.cs_CZ.xlf +++ b/src-ui/src/locale/messages.cs_CZ.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Initiating upload... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Uložené pohledy @@ -708,23 +700,11 @@ Záznamy - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Admin - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Dokumentace @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Navrhnout úpravu @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 is available. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Click to view. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Update available @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 An error occurred while saving settings. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Uložit @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Vytvořit nového korespondenta @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Upravit korespondenta @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Vytvořit nový typ dokumentu @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Upravit typ dokumentu @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Vytvořit novou položku @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Upravit položku @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Nelze uložit prvek: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Odstranit + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 e.g. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 or use slashes to add directories e.g. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Create new storage path @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Edit storage path @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Vytvořit nový štítek @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Upravit štítek @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ z - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Odstranit - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comments @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Potvrdit smazání @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Tuto operaci nelze vrátit zpět. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Proceed @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Upravit @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Zobrazit na postranním panelu @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Zobrazit na nástěnce @@ -3171,11 +3583,43 @@ Automatický + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Do you really want to delete the ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Přidružené dokumenty nebudou smazány. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Error while deleting element: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 General @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Vzhled @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Jazyk zobrazení @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Po aplikaci nového jazyka je třeba stránku znovu načíst. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Zobrazení data @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Formát data @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Krátký: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Střední: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Dlouhý: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Počet položek na stránku @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Editor dokumentů @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Použít prohlížeč PDF webového prohlížeče @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 To je obvykle rychlejší při zobrazování velkých PDF dokumentů, ale nemusí fungovat na některých prohlížečích. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Tmavý motiv @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Použít systémové nastavení @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Zapnout tmavý režim @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Invertovat náhledy v tmavém režimu @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Theme Color @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Reset @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Hromadné úpravy @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Zobrazit potvrzovací dialogy @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Smazání dokumentů bude vždy vyžadovat potvrzení. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Aplikovat při zavření @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Enable comments @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Oznámení @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Zpracovávání dokumentu @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Zobrazit oznámení, když jsou zjištěny nové dokumenty @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Zobrazit oznámení při úspěšném dokončení zpracování dokumentu @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Zobrazit oznámení, když zpracování dokumentu selže @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Potlačit oznámení na nástěnce @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Toto potlačí všechny zprávy o stavu zpracování dokumentu na nástěnce. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Výskyt @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Nejsou definovány žádné uložené pohledy. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Uložený pohled "" odstraněn. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Settings saved @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Settings were saved successfully. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Settings were saved successfully. Reload is required to apply some changes. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Reload now @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Použít systémový jazyk @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Použít formát data zobrazeného jazyka @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Error while storing settings on server: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From 4e2724237300e2f5f5520501485ee0fae6d4cec7 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:19 -0800 Subject: [PATCH 111/231] New translations messages.xlf (Belarusian) [ci skip] --- src-ui/src/locale/messages.be_BY.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.be_BY.xlf b/src-ui/src/locale/messages.be_BY.xlf index 1ef5ec4ef..f03231872 100644 --- a/src-ui/src/locale/messages.be_BY.xlf +++ b/src-ui/src/locale/messages.be_BY.xlf @@ -423,27 +423,19 @@ Файлавыя задачы паказваюць вам дакументы, якія былі спажыты, чакаюць або пацярпелі збой падчас працэсу. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Праверце налады для розных налад вэб-праграмы або каб пераключыць налады для захаваных відаў. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - Вобласць адміністратара змяшчае больш пашыраныя элементы кіравання, а таксама налады для аўтаматычнага атрымання электроннай пошты. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Дзякуй! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 Ёсць <em>тоны</em> дадатковыя магчымасці і інфармацыя, якую мы тут не разглядалі, але гэта дапаможа вам пачаць. Праверце дакументацыю або наведайце праект на GitHub, каб даведацца больш або паведаміць аб праблемах. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Нарэшце, ад імя кожнага ўдзельніка гэтага праекта, які падтрымліваецца супольнасцю, дзякуй за выкарыстанне Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Пачатак загрузкі... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Захаваныя выгляды @@ -708,23 +700,11 @@ Логі - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Кіраўнік - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Дакументацыя @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Прапанаваць ідэю @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 даступна. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Націсніце, каб убачыць. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx можа аўтаматычна правяраць наяўнасць абнаўленняў @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 Як гэта працуе? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Даступна абнаўленне @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 Адбылася памылка пры захаванні налад. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Захаваць @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Стварыць новага карэспандэнта @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Рэдагаваць карэспандэнта @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Стварыць новы тып дакумента @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Рэдагаваць тып дакумента @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Стварыць новы элемент @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Рэдагаваць элемент @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Немагчыма захаваць элемент: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Выдаліць + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 напр. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 або выкарыстоўвайце касыя рысы, каб дадаць каталогі, напр. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Стварыць новы шлях захоўвання @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Рэдагаваць шлях захоўвання @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Стварыць новы тэг @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Рэдагаваць тэг @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ з - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Выдаліць - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Каментарыі @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Пацвердзіце выдаленне @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Гэтую аперацыю нельга адмяніць. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Працягнуць @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Рэдагаваць @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Паказаць у бакавой панэлі @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Паказаць на панэлі @@ -3171,11 +3583,43 @@ Аўтаматычна + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Вы сапраўды хочаце выдаліць "? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Звязаныя дакументы не будуць выдалены. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Памылка пры выдаленні элемента: @@ -3203,11 +3647,19 @@ Пачаць тур + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Асноўныя @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Знешні выгляд @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Мова інтэрфейсу @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Вам трэба перазагрузіць старонку пасля прымянення новай мовы. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Адлюстраванне даты @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Фармат даты @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Кароткі: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Сярэдні: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Доўгі: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Элементаў на старонцы @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Рэдактар дакументаў @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Выкарыстоўваць прагляднік PDF убудаваны ў браўзэр @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Звычайна гэта хутчэй для адлюстравання вялікіх дакументаў PDF, але можа не працаваць у некаторых браўзерах. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Бакавая панэль @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Выкарыстоўвайце 'тонкую' бакавую панэль (толькі значкі) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Цёмны рэжым @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Выкарыстоўваць сістэмныя налады @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Уключыць цёмны рэжым @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Інверціраваць мініяцюры ў цёмным рэжыме @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Колер тэмы @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Скінуць @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Праверка абнаўленняў @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Праверка абнаўленняў працуе шляхам пінгавання агульнадаступнага Github API для апошняга выпуску, каб вызначыць, ці даступная новая версія. Фактычнае абнаўленне праграмы па-ранейшаму павінна выконвацца ўручную. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 Прыкладанне ніякім чынам не збірае даныя для адсочвання. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Уключыць праверку абнаўленняў @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Звярніце ўвагу, што для карыстальнікаў старонніх кантэйнераў, напр. linuxserver.io гэта апавяшчэнне можа быць "апярэджаннем" бягучага старонняга выпуску. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Масавае рэдагаванне @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Паказаць дыялогавыя акно пацверджання @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Пры выдаленні дакументаў заўсёды будзе запытвацца пацверджанне. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Ужыць пры зачыненні @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Уключыць каментары @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Апавяшчэнні @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Апрацоўка дакумента @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Паказваць апавяшчэнні пры выяўленні новых дакументаў @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Паказваць апавяшчэнні, калі апрацоўка дакумента завершана паспяхова @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Паказваць апавяшчэнні, калі апрацоўка дакумента няўдалая @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Схаваць апавяшчэння на галоўнай панэлі @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Гэта адключыць усе паведамленні аб статуце апрацоўкі дакументаў на галоўнай панэлі. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 З'яўляецца на @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Няма захаваных праглядаў. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Захаваны выгляд "" выдалены. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Налады захаваны @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Налады былі паспяхова захаваны. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Налады былі паспяхова захаваны. Каб прымяніць некаторыя змены, патрабуецца перазагрузка. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Перазагрузіць зараз @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Выкарыстоўваць мову сістэмы @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Выкарыстоўваць фармат даты мовы адлюстравання @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Памылка пры захаванні налад на серверы: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From de5e9c95ec2d78e1452f9ff59dc3d0b99581d2aa Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:21 -0800 Subject: [PATCH 112/231] New translations messages.xlf (Arabic) [ci skip] --- src-ui/src/locale/messages.ar_SA.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.ar_SA.xlf b/src-ui/src/locale/messages.ar_SA.xlf index 99f471165..75293bdff 100644 --- a/src-ui/src/locale/messages.ar_SA.xlf +++ b/src-ui/src/locale/messages.ar_SA.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 شكراً لك! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 بدء التحميل... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 طرق العرض المحفوظة @@ -708,23 +700,11 @@ السجلات - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - المسئول - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 الوثائق @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 اقترح فكرة @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 is available. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Click to view. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Update available @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 An error occurred while saving settings. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 حفظ @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Create new correspondent @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Edit correspondent @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 إنشاء نوع مستند جديد @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 تحرير نوع المستند @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 إنشاء عنصر جديد @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 تعديل عنصر @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Could not save element: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Delete + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 e.g. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 or use slashes to add directories e.g. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Create new storage path @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Edit storage path @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Create new tag @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Edit tag @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ من - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Delete - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comments @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 تأكيد الحذف @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + This operation cannot be undone. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Proceed @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + تحرير @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Show in sidebar @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Show on dashboard @@ -3171,11 +3583,43 @@ Automatic + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Do you really want to delete the ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Associated documents will not be deleted. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Error while deleting element: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 General @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 المظهر @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 لغة العرض @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 You need to reload the page after applying a new language. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Date display @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Date format @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Short: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Medium: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Long: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Items per page @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Document editor @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Use PDF viewer provided by the browser @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 This is usually faster for displaying large PDF documents, but it might not work on some browsers. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Dark mode @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Use system settings @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Enable dark mode @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Invert thumbnails in dark mode @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Theme Color @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Reset @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Bulk editing @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Show confirmation dialogs @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Deleting documents will always ask for confirmation. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Apply on close @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Enable comments @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 الإشعارات @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Document processing @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Show notifications when new documents are detected @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Show notifications when document processing completes successfully @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Show notifications when document processing fails @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Suppress notifications on dashboard @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 This will suppress all messages about document processing status on the dashboard. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Appears on @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 No saved views defined. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Saved view "" deleted. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Settings saved @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Settings were saved successfully. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Settings were saved successfully. Reload is required to apply some changes. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Reload now @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 استخدم لغة النظام @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 استخدم تنسيق تاريخ لغة العرض @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Error while storing settings on server: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From c597da495cb3f97922f7c1ec9fee86e935ff77f4 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:22 -0800 Subject: [PATCH 113/231] New translations messages.xlf (Spanish) [ci skip] --- src-ui/src/locale/messages.es_ES.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index 98ddc6f52..3b5af6a3b 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -423,27 +423,19 @@ File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Thank you! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Iniciando subida... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Vistas guardadas @@ -708,23 +700,11 @@ Logs - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Administrar - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Documentación @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Sugerir una idea @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 está disponible. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Haz clic para ver. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx can automatically check for updates @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 How does this work? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Actualización disponible @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 Se produjo un error al guardar la configuración. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Salvar @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Crear nuevo interlocutor @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Editar interlocutor @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Crear nuevo tipo de documento @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Editar tipo de documento @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Crear nuevo elemento @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Editar elemento @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 No se pudo guardar el elemento: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Borrar + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 por ejemplo. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 o utilice barras para añadir directorios p.ej. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Crear nueva ruta de almacenamiento @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Editar ruta de almacenamiento @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Crear nueva etiqueta @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Editar etiqueta @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ de - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Borrar - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Comentarios @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Confirmar borrado @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Esta operación no se puede deshacer. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Continuar @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Editar @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Mostrar barra lateral @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Mostrar en el panel de control @@ -3171,11 +3583,43 @@ Automático + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 ¿Estás seguro de que quieres eliminar ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Los documentos asociados no serán borrados. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Error borrando el elemento: @@ -3203,11 +3647,19 @@ Start tour + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 General @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Apariencia @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Idioma @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Necesitas recargar la página tras aplicar el nuevo idioma. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Formato de fechas @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Formato de fechas @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Corto: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Medio: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Largo: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Elementos por página @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Editor de documentos @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Usar el visor PDF proporcionado por el navegador @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Habitualmente esto es mas rápido para mostrar archivos PDF largos, pero puede no funcionar en algunos navegadores. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Sidebar @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Use 'slim' sidebar (icons only) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Modo oscuro @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Usar ajustes del sistema @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Habilitar modo oscuro @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Invertir miniaturas en modo oscuro @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Color del tema @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Reiniciar @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Update checking @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 No tracking data is collected by the app in any way. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Enable update checking @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Editor multiple @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Mostrar diálogos de confirmación @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Borrar los documentos siempre pedirá confirmación. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Aplicar al cerrar @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Activar comentarios @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Notificaciones @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Procesado de documentos @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Mostrar notificaciones cuando nuevos documentos sean borrados @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Mostrar notificaciones cuando el procesado se complete satisfactoriamente @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Mostrar notificaciones cuando el procesado falle @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 No mostrar notificaciones en el panel de control @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Esto suprimirá todos los mensajes de estado de procesamiento en el panel de control. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Aparece en @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 No hay ninguna vista guardada definida + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Vista guardada "" borrada. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Configuración guardada @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 La configuración se ha guardado correctamente. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 La configuración se ha guardado con éxito. Es necesario recargar para aplicar algunos cambios. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Recargar ahora @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Usar idioma del sistema @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Usar formato de fechas del idioma seleccionado @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Error al almacenar la configuración en el servidor: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From eff6f2fb01a69e8fda0574ede7d22c6500cd95dd Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:23 -0800 Subject: [PATCH 114/231] New translations messages.xlf (French) [ci skip] --- src-ui/src/locale/messages.fr_FR.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index 118cb5abb..bd47081e9 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -423,27 +423,19 @@ Les tâches de fichiers vous montrent les documents qui ont été consommés, sont en attente d'être traité ou peuvent avoir échoué au cours du processus. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Consultez les paramètres pour les diverses améliorations apportées à l'application Web ou pour activer les paramètres pour les vues enregistrées. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - La zone Admin contient des contrôles plus avancés ainsi que les paramètres pour la récupération automatique des e-mails. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Merci ! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 Il y a <em>des tonnes</em> de fonctionnalités et d'informations supplémentaires que nous n'avons pas couvertes ici, mais cela devrait vous aider à démarrer. Consultez la documentation ou visitez le projet sur GitHub pour en savoir plus ou pour rapporter des problèmes. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Enfin, au nom de chaque contributeur à ce projet soutenu par la communauté, merci d'utiliser Paperless-ngx ! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Début du téléversement... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Vues enregistrées @@ -708,23 +700,11 @@ Journaux - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Administration - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Documentation @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Suggérer une idée @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 est disponible. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Cliquer pour visualiser. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx peut automatiquement vérifier la disponibilité des mises à jour @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 Comment ça fonctionne ? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Mise à jour disponible @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 Une erreur est survenue lors de la sauvegarde des paramètres. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Enregistrer @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Créer un nouveau correspondant @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Éditer le correspondant @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Créer un nouveau type de document @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Éditer le type de document @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Créer un nouvel élément @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Éditer l'élément @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Impossible d'enregistrer l'élément : + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Supprimer + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 par ex. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 ou utilisez des barres obliques pour ajouter des répertoires, comme @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Créer un nouveau chemin de stockage @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Modifier le chemin de stockage @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Créer une nouvelle étiquette @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Éditer l'étiquette @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ sur - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Supprimer - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Commentaires @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Confirmer la suppression @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Cette action est irréversible. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Continuer @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Éditer @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Montrer dans la barre latérale @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Montrer sur le tableau de bord @@ -3171,11 +3583,43 @@ Automatique + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Voulez-vous vraiment supprimer l'étiquette "" ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Les documents associés ne seront pas supprimés. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Une erreur s'est produite lors de la suppression de l'élément : @@ -3203,11 +3647,19 @@ Commencer la visite  + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Général @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Affichage @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Langue d'affichage @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Vous devez recharger la page après avoir sélectionné une nouvelle langue. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Affichage de la date @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Format de date @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Court : @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Moyen : @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Long : @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Éléments par page @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Visionneuse de documents @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Utiliser la visionneuse PDF fournie par le navigateur @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Cette option est généralement plus rapide pour l'affichage de grands documents PDF, mais elle peut ne pas fonctionner sur certains navigateurs. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Barre latérale @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Utiliser la barre latérale 'slim' (icônes seulement) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Mode sombre @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Utiliser les paramètres du système @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Activer le mode sombre @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Inverser les vignettes en mode sombre @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Couleur du thème @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Réinitialiser @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Vérification de Mises à Jour @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 La vérification des mises à jour fonctionne en faisant un ping sur l'API publique Github pour la dernière version afin de déterminer si une nouvelle version est disponible. La mise à jour réelle de l'application doit toujours être effectuée manuellement. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 Aucune donnée de suivi n'est collectée par l'application. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Activer les vérifications de mises à jour @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Notez que pour les utilisateurs de conteneurs tiers par exemple linuxserver.io, cette notification peut être 'en avance' de la version tierce actuelle. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Édition en masse @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Afficher les messages de confirmation @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 La suppression de documents requiert toujours une confirmation. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Appliquer lors de la fermeture @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Activer les commentaires @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Notifications @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Traitement de documents @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Afficher des notifications lorsque de nouveaux documents sont détectés @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Afficher des notifications lorsque le traitement des documents se termine avec succès @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Afficher des notifications en cas d'échec du traitement des documents @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Supprimer les notifications du tableau de bord @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Cela supprimera tous les messages liés au traitement de documents sur le tableau de bord. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Apparaît sur @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Aucune vue sauvegardée n'est définie. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Vue "" supprimée. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Paramètres enregistrés @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Les paramètres ont été enregistrés avec succès. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Les paramètres ont été enregistrés avec succès. Un rechargement est nécessaire pour appliquer certains changements. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Recharger maintenant @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Utiliser la langue du système @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Utiliser le format de date de la langue d'affichage @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Une erreur s'est produite lors de l'enregistrement des paramètres sur le serveur : + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From 9e295ddf4f18a04bd7dc3178d476f9b4b4789261 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:37:25 -0800 Subject: [PATCH 115/231] New translations messages.xlf (Serbian (Latin)) [ci skip] --- src-ui/src/locale/messages.sr_CS.xlf | 942 ++++++++++++++++++++++----- 1 file changed, 777 insertions(+), 165 deletions(-) diff --git a/src-ui/src/locale/messages.sr_CS.xlf b/src-ui/src/locale/messages.sr_CS.xlf index 233c59373..4bcbcb611 100644 --- a/src-ui/src/locale/messages.sr_CS.xlf +++ b/src-ui/src/locale/messages.sr_CS.xlf @@ -423,27 +423,19 @@ Obrada dokumenata vam prikazuje dokumenta koja su obrađena, čekaju da budu obrađena ili možda nisu uspešno obrađena. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts 194 - Proverite podešavanja za različita podešavanja veb aplikacije ili da biste uključili podešavanja za sačuvane poglede. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 203 - - Administracija sadrži naprednije kontrole, kao i podešavanja za automatsko preuzimanje e-pošte. + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. Thank you! 🙏 src/app/app.component.ts - 211 + 203 Hvala vam! 🙏 @@ -451,7 +443,7 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 213 + 205 Ima <em>tona</em> više funkcija i informacija koje ovde nismo pokrili, ali ovo bi trebalo da vas pokrene. Pogledajte dokumentaciju ili posetite projekat na GitHub-u da biste saznali više ili prijavili probleme. @@ -459,7 +451,7 @@ Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 215 + 207 Na kraju, u ime svih koji doprinose ovom projektu koji podržava zajednica, hvala vam što koristite Paperless-ngx! @@ -467,7 +459,7 @@ Initiating upload... src/app/app.component.ts - 264 + 256 Pokretanje otpremanja... @@ -580,7 +572,7 @@ src/app/components/manage/settings/settings.component.html - 184 + 189 Sačuvani pogledi @@ -708,23 +700,11 @@ Logovi - - Admin - - src/app/components/app-frame/app-frame.component.html - 178 - - - src/app/components/app-frame/app-frame.component.html - 181 - - Administracija - Info src/app/components/app-frame/app-frame.component.html - 187 + 180 src/app/components/manage/tasks/tasks.component.html @@ -736,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 191 + 184 src/app/components/app-frame/app-frame.component.html - 194 + 187 Dokumentacija @@ -748,11 +728,11 @@ GitHub src/app/components/app-frame/app-frame.component.html - 199 + 192 src/app/components/app-frame/app-frame.component.html - 202 + 195 GitHub @@ -760,11 +740,11 @@ Suggest an idea src/app/components/app-frame/app-frame.component.html - 204 + 197 src/app/components/app-frame/app-frame.component.html - 208 + 201 Predložite ideju @@ -772,7 +752,7 @@ is available. src/app/components/app-frame/app-frame.component.html - 217 + 210 je dostupno. @@ -780,7 +760,7 @@ Click to view. src/app/components/app-frame/app-frame.component.html - 217 + 210 Klik za prеglеd. @@ -788,7 +768,7 @@ Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 221 + 214 Paperless-ngx može automatski da proveri da li postoje ažuriranja @@ -796,7 +776,7 @@ How does this work? src/app/components/app-frame/app-frame.component.html - 228,230 + 221,223 Kako ovo radi? @@ -804,7 +784,7 @@ Update available src/app/components/app-frame/app-frame.component.html - 239 + 232 Dostupno jе ažuriranjе @@ -816,7 +796,7 @@ src/app/components/manage/settings/settings.component.ts - 326 + 476 Došlo je do greške prilikom čuvanja podešavanja. @@ -942,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -988,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -1066,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 35 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1098,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1116,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 Sačuvaj @@ -1124,7 +1136,7 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 Krairaj novog korespodenta @@ -1132,7 +1144,7 @@ Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 Izmeni korespodenta @@ -1140,7 +1152,7 @@ Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 Kreiraj novi tip dokumenta @@ -1148,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 Uredi tip dokumenta @@ -1156,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 Kreiraj novu stavku @@ -1164,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 Izmeni stavku @@ -1172,10 +1184,422 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 Nije moguće sačuvati elelement: + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + IMAP Server + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + IMAP Port + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + IMAP Security + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + Username + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + Password + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + Character Set + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 22 + + Create new mail account + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 26 + + Edit mail account + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 43 + + No encryption + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 44 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 45 + + STARTTLS + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + Account + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Folder + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + Maximum age (days) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + Attachment type + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 17 + + Paperless will only process mails that match all of the filters specified below. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Filter from + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + Filter subject + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + Filter body + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Filter attachment filename + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 24 + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action parameter + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + Assign title from + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 28 + + Assign document type + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + Assign correspondent from + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + Assign correspondent + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 57 + + Create new mail rule + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 61 + + Edit mail rule + + + Only process attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 98 + + Only process attachments. + + + Process all files, including 'inline' attachments. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 102 + + Process all files, including 'inline' attachments. + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 111 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 97 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + Obriši + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 115 + + Move to specified folder + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 119 + + Mark as read, don't process read mails + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 123 + + Flag the mail, don't process flagged mails + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 127 + + Tag the mail with specified tag, don't process tagged mails + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 136 + + Use subject as title + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 140 + + Use attachment filename as title + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 149 + + Do not assign a correspondent + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 153 + + Use mail address + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 157 + + Use name (or mail address if not available) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 161 + + Use correspondent selected below + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -1200,7 +1624,7 @@ e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 npr. @@ -1208,7 +1632,7 @@ or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 ili koristite kose crte za dodavanje direktorijuma, npr. @@ -1216,7 +1640,7 @@ See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 Pogledaj <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">dokumentaciju</a> za kompletnu listu. @@ -1224,7 +1648,7 @@ Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 Kreiraj novu putanju skladišta @@ -1232,7 +1656,7 @@ Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 Izmeni putanju skladišta @@ -1268,7 +1692,7 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 Kreiraj novu oznaku @@ -1276,7 +1700,7 @@ Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 Izmeni oznaku @@ -1404,6 +1828,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1701,58 +2133,6 @@ od - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Obriši - Download @@ -2049,7 +2429,7 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 Komentari @@ -2077,7 +2457,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 Potvrdi brisanje @@ -2147,6 +2527,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 389 + + src/app/components/manage/settings/settings.component.ts + 560 + + + src/app/components/manage/settings/settings.component.ts + 619 + Ovu radnju nije moguće opozvati. @@ -2159,6 +2547,14 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 391 + + src/app/components/manage/settings/settings.component.ts + 562 + + + src/app/components/manage/settings/settings.component.ts + 621 + Nastavi @@ -2265,7 +2661,15 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html @@ -2545,6 +2949,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + Izmeni @@ -2951,7 +3363,7 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 Prikaži u bočnoj traci @@ -2963,7 +3375,7 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 Prikaži na kontrolnoj tabli @@ -3171,11 +3583,43 @@ Automatski + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + Successfully created . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + Error occurred while creating : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + Successfully updated . + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + Error occurred while saving : . + Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 Da li stvarno želite da obrišete ? @@ -3183,7 +3627,7 @@ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 Povezani dokumenti neće biti obrisani. @@ -3191,7 +3635,7 @@ Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 Greška prilikom brisanja elementa: @@ -3203,11 +3647,19 @@ Započni obilazak + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + Open Django Admin + General src/app/components/manage/settings/settings.component.html - 10 + 15 Opšta @@ -3215,7 +3667,7 @@ Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 Izglеd @@ -3223,7 +3675,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 Jezik prikaza @@ -3231,7 +3683,7 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 Morate ponovo da učitati stranicu nakon što primenite novi jezik. @@ -3239,7 +3691,7 @@ Date display src/app/components/manage/settings/settings.component.html - 32 + 37 Prikaz datuma @@ -3247,7 +3699,7 @@ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 Format datuma @@ -3255,7 +3707,7 @@ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 Kratak: @@ -3263,7 +3715,7 @@ Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 Srednji: @@ -3271,7 +3723,7 @@ Long: src/app/components/manage/settings/settings.component.html - 59 + 64 Dugačak: @@ -3279,7 +3731,7 @@ Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 Stavki po stranici @@ -3287,7 +3739,7 @@ Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 Dokument editor @@ -3295,7 +3747,7 @@ Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 Koristite PDF pregledač koji obezbeđuje brauzer @@ -3303,7 +3755,7 @@ This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 Ovo je obično brže za prikazivanje velikih PDF dokumenata, ali možda neće raditi u nekim pretraživačima. @@ -3311,7 +3763,7 @@ Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 Bočna traka @@ -3319,7 +3771,7 @@ Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 Koristi 'tanku' bočnu traku (samo ikone) @@ -3327,7 +3779,7 @@ Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 Tamni režim @@ -3335,7 +3787,7 @@ Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 Koristi sistemska podešavanja @@ -3343,7 +3795,7 @@ Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 Omogući tamni režim @@ -3351,7 +3803,7 @@ Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 Okrenite sličice u tamnom režimu @@ -3359,7 +3811,7 @@ Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 Boja teme @@ -3367,7 +3819,7 @@ Reset src/app/components/manage/settings/settings.component.html - 125 + 130 Resetuj @@ -3375,7 +3827,7 @@ Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 Provera ažuriranja @@ -3383,7 +3835,7 @@ Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 Provera ažuriranja funkcioniše pingovanjem javnog Github API za najnovije izdanje da bi se utvrdilo da li je nova verzija dostupna. Stvarno ažuriranje aplikacije i dalje mora da se obavlja ručno. @@ -3391,7 +3843,7 @@ No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 Aplikacija ni na koji način ne prikuplja podatke o praćenju. @@ -3399,7 +3851,7 @@ Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 Omogućite proveru ažuriranja @@ -3407,7 +3859,7 @@ Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 Imajte na umu da za korisnike kontejnera treće strane, npr. linuxserver.io ovo obaveštenje može biti 'ispred' trenutnog izdanja treće strane. @@ -3415,7 +3867,7 @@ Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 Grupno uređivanje @@ -3423,7 +3875,7 @@ Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 Prikaži dijaloge za potvrdu @@ -3431,7 +3883,7 @@ Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 Brisanje dokumenata će uvek tražiti potvrdu. @@ -3439,7 +3891,7 @@ Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 Primeni pri zatvaranju @@ -3447,7 +3899,7 @@ Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 Omogući komentare @@ -3455,7 +3907,7 @@ Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 Obaveštenja @@ -3463,7 +3915,7 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 Procesiranje dokumenata @@ -3471,7 +3923,7 @@ Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 Prikaži obaveštenja kada se otkriju novi dokumenti @@ -3479,7 +3931,7 @@ Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 Prikaži obaveštenja kada se obrada dokumenta uspešno završi @@ -3487,7 +3939,7 @@ Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 Prikaži obaveštenja kada obrada dokumenta ne uspe @@ -3495,7 +3947,7 @@ Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 Poništi obaveštenja na kontrolnoj tabli @@ -3503,7 +3955,7 @@ This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 Ovo će potisnuti sve poruke o statusu obrade dokumenta na kontrolnoj tabli. @@ -3511,7 +3963,7 @@ Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 Pojavljuje se na @@ -3519,15 +3971,79 @@ No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 Nema definisanih sačuvanih pogleda. + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + Mail + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + Mail accounts + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + Add Account + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + Server + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + No mail accounts defined. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + Mail rules + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + Add Rule + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + No mail rules defined. + Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 367 Sačuvan pogled "" je obrisan. @@ -3535,7 +4051,7 @@ Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 460 Podešavanja su sačuvana @@ -3543,7 +4059,7 @@ Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 461 Podešavanja su uspešno sačuvana. @@ -3551,7 +4067,7 @@ Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 465 Podešavanja su uspešno sačuvana. Potrebno je ponovno učitavanje da biste primenili neke promene. @@ -3559,7 +4075,7 @@ Reload now src/app/components/manage/settings/settings.component.ts - 316 + 466 Sad ponovo učitaj @@ -3567,7 +4083,7 @@ Use system language src/app/components/manage/settings/settings.component.ts - 334 + 484 Koristi sistemski jezik @@ -3575,7 +4091,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 491 Koristi format datuma jezika prikaza @@ -3583,10 +4099,106 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 511,513 Greška pri čuvanju podešavanja na serveru: + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 538 + + Saved account "". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 548 + + Error saving account: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 558 + + Confirm delete mail account + + + This operation will permanently this mail account. + + src/app/components/manage/settings/settings.component.ts + 559 + + This operation will permanently this mail account. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 568 + + Deleted mail account + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 577 + + Error deleting mail account: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 596 + + Saved rule "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 607 + + Error saving rule: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 617 + + Confirm delete mail rule + + + This operation will permanently this mail rule. + + src/app/components/manage/settings/settings.component.ts + 618 + + This operation will permanently this mail rule. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 627 + + Deleted mail rule + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 636 + + Error deleting mail rule: . + storage path From 3bc4d7dad74d1b05d8cceb1b22b77eb3f8631e6a Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Mon, 5 Dec 2022 03:26:20 -0800 Subject: [PATCH 116/231] New translations messages.xlf (Italian) [ci skip] --- src-ui/src/locale/messages.it_IT.xlf | 140 +++++++++++++-------------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index b8a9a741b..568a0d384 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -429,7 +429,7 @@ src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. + Controlla le impostazioni per svariate modifiche all'app web, per attivare o disattivare le impostazioni per le viste salvate o impostare il filtraggio delle email. Thank you! 🙏 @@ -1194,7 +1194,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 11 - IMAP Server + Server IMAP IMAP Port @@ -1202,7 +1202,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 12 - IMAP Port + Porta IMAP IMAP Security @@ -1210,7 +1210,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 13 - IMAP Security + Sicurezza IMAP Username @@ -1218,7 +1218,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 16 - Username + Nome utente Password @@ -1226,7 +1226,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 17 - Password + Password Character Set @@ -1234,7 +1234,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 18 - Character Set + Set di Caratteri Create new mail account @@ -1242,7 +1242,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 22 - Create new mail account + Crea un nuovo account email Edit mail account @@ -1250,7 +1250,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 26 - Edit mail account + Modifica account email No encryption @@ -1258,7 +1258,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 43 - No encryption + Nessuna crittografia SSL @@ -1266,7 +1266,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 44 - SSL + SSL STARTTLS @@ -1274,7 +1274,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 45 - STARTTLS + STARTTLS Account @@ -1286,7 +1286,7 @@ src/app/components/manage/settings/settings.component.html 284 - Account + Profilo Folder @@ -1294,7 +1294,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 12 - Folder + Cartella Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. @@ -1302,7 +1302,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 12 - Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + Le sottocartelle devono essere separate da un delimitatore, solitamente da un punto ('.') o da uno slash ('/'), ma variano a seconda del server di posta. Maximum age (days) @@ -1310,7 +1310,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 13 - Maximum age (days) + Età massima (giorni) Attachment type @@ -1318,7 +1318,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 14 - Attachment type + Tipo di allegato Paperless will only process mails that match all of the filters specified below. @@ -1326,7 +1326,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 17 - Paperless will only process mails that match all of the filters specified below. + Paperless elaborerà solo messaggi che corrispondono a all o i filtri specificati qui sotto. Filter from @@ -1334,7 +1334,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 18 - Filter from + Filtra da Filter subject @@ -1342,7 +1342,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 19 - Filter subject + Filtro oggetto Filter body @@ -1350,7 +1350,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 20 - Filter body + Filtro corpo messaggio Filter attachment filename @@ -1358,7 +1358,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 21 - Filter attachment filename + Filtro nome allegato Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. @@ -1366,7 +1366,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 21 - Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + Elabora esclusivamente i documenti che corrispondono completamente a questo nome. Puoi usare wildcard come *.pdf o *fattura*. Non fa differenza fra maiuscole e minuscole. Action @@ -1374,7 +1374,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 24 - Action + Azione Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. @@ -1382,7 +1382,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 24 - Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + L'azione viene eseguita solo quando i documenti vengono elaborati dalle email. Le email senza allegati non vengolo toccate. Action parameter @@ -1390,7 +1390,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 25 - Action parameter + Azione parametro Assign title from @@ -1398,7 +1398,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 26 - Assign title from + Assegna tittolo da Assign document type @@ -1406,7 +1406,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 28 - Assign document type + Assegna tipo di documento Assign correspondent from @@ -1414,7 +1414,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 29 - Assign correspondent from + Assegna corrispondente da Assign correspondent @@ -1422,7 +1422,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 30 - Assign correspondent + Assegna corrispondente Create new mail rule @@ -1430,7 +1430,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 57 - Create new mail rule + Crea nuova regola email Edit mail rule @@ -1438,7 +1438,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 61 - Edit mail rule + Modifica regola email Only process attachments. @@ -1446,7 +1446,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 98 - Only process attachments. + Elabora solo gli allegati. Process all files, including 'inline' attachments. @@ -1454,7 +1454,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 102 - Process all files, including 'inline' attachments. + Elabora tutti i file, inclusi gli allegati nel corpo. Delete @@ -1526,7 +1526,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 115 - Move to specified folder + Sposta nella cartella selezionata Mark as read, don't process read mails @@ -1534,7 +1534,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 119 - Mark as read, don't process read mails + Segna come letto, non elaborare le email lette Flag the mail, don't process flagged mails @@ -1542,7 +1542,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 123 - Flag the mail, don't process flagged mails + Contrassegna la email, non elaborare le email contrassegnate Tag the mail with specified tag, don't process tagged mails @@ -1550,7 +1550,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 127 - Tag the mail with specified tag, don't process tagged mails + Etichetta la posta con il tag specificato, non processare le email etichettate Use subject as title @@ -1558,7 +1558,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 136 - Use subject as title + Usa oggetto come titolo Use attachment filename as title @@ -1566,7 +1566,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 140 - Use attachment filename as title + Usa il nome dell'allegato come titolo Do not assign a correspondent @@ -1574,7 +1574,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 149 - Do not assign a correspondent + Non assegnare un corrispondente Use mail address @@ -1582,7 +1582,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 153 - Use mail address + Usa indirizzo email Use name (or mail address if not available) @@ -1590,7 +1590,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 157 - Use name (or mail address if not available) + Usa nome (o indirizzo email se non disponibile) Use correspondent selected below @@ -1598,7 +1598,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 161 - Use correspondent selected below + Usa il corrispondente selezionato qui sotto Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. @@ -2047,7 +2047,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 5 - More detail on how to use and configure Paperless-ngx is always available in the documentation. + Maggiori informazioni su come usare e configurare Paperless-ngx sono disponibili nella documentazione. Thanks for being a part of the Paperless-ngx community! @@ -3589,7 +3589,7 @@ src/app/components/manage/management-list/management-list.component.ts 127 - Successfully created . + è stato creato con successo. Error occurred while creating : . @@ -3597,7 +3597,7 @@ src/app/components/manage/management-list/management-list.component.ts 132,134 - Error occurred while creating : . + Si è verificato un errore durante la creazione di : . Successfully updated . @@ -3605,7 +3605,7 @@ src/app/components/manage/management-list/management-list.component.ts 150 - Successfully updated . + è stato aggiornato con successo. Error occurred while saving : . @@ -3613,7 +3613,7 @@ src/app/components/manage/management-list/management-list.component.ts 155,157 - Error occurred while saving : . + Si è verificato un errore durante il salvataggio di : . Do you really want to delete the ? @@ -3653,7 +3653,7 @@ src/app/components/manage/settings/settings.component.html 4 - Open Django Admin + Apri Admin Django General @@ -3981,7 +3981,7 @@ src/app/components/manage/settings/settings.component.html 231 - Mail + E-Mail Mail accounts @@ -3989,7 +3989,7 @@ src/app/components/manage/settings/settings.component.html 236 - Mail accounts + Account email Add Account @@ -3997,7 +3997,7 @@ src/app/components/manage/settings/settings.component.html 241 - Add Account + Aggiungi Account Server @@ -4005,7 +4005,7 @@ src/app/components/manage/settings/settings.component.html 249 - Server + Server No mail accounts defined. @@ -4013,7 +4013,7 @@ src/app/components/manage/settings/settings.component.html 267 - No mail accounts defined. + Nessun account e-mail definito. Mail rules @@ -4021,7 +4021,7 @@ src/app/components/manage/settings/settings.component.html 271 - Mail rules + Regole email Add Rule @@ -4029,7 +4029,7 @@ src/app/components/manage/settings/settings.component.html 276 - Add Rule + Aggiungi regola No mail rules defined. @@ -4037,7 +4037,7 @@ src/app/components/manage/settings/settings.component.html 302 - No mail rules defined. + Nessuna regola email definita. Saved view "" deleted. @@ -4109,7 +4109,7 @@ src/app/components/manage/settings/settings.component.ts 538 - Saved account "". + Account "" salvato. Error saving account: . @@ -4117,7 +4117,7 @@ src/app/components/manage/settings/settings.component.ts 548 - Error saving account: . + Errore durante il salvataggio dell'account:. Confirm delete mail account @@ -4125,7 +4125,7 @@ src/app/components/manage/settings/settings.component.ts 558 - Confirm delete mail account + Conferma eliminazione dell'account email This operation will permanently this mail account. @@ -4133,7 +4133,7 @@ src/app/components/manage/settings/settings.component.ts 559 - This operation will permanently this mail account. + Questa operazione eliminerà definitivamente questo account email. Deleted mail account @@ -4141,7 +4141,7 @@ src/app/components/manage/settings/settings.component.ts 568 - Deleted mail account + Account email eliminato Error deleting mail account: . @@ -4149,7 +4149,7 @@ src/app/components/manage/settings/settings.component.ts 577 - Error deleting mail account: . + Errore durante l'eliminazione dell'account email: . Saved rule "". @@ -4157,7 +4157,7 @@ src/app/components/manage/settings/settings.component.ts 596 - Saved rule "". + Regola "" salvata. Error saving rule: . @@ -4165,7 +4165,7 @@ src/app/components/manage/settings/settings.component.ts 607 - Error saving rule: . + Errore durante il salvataggio della regola: . Confirm delete mail rule @@ -4173,7 +4173,7 @@ src/app/components/manage/settings/settings.component.ts 617 - Confirm delete mail rule + Conferma eliminazione della regola email This operation will permanently this mail rule. @@ -4181,7 +4181,7 @@ src/app/components/manage/settings/settings.component.ts 618 - This operation will permanently this mail rule. + Questa operazione eliminerà definitivamente questa regola email. Deleted mail rule @@ -4189,7 +4189,7 @@ src/app/components/manage/settings/settings.component.ts 627 - Deleted mail rule + Regola email eliminata Error deleting mail rule: . @@ -4197,7 +4197,7 @@ src/app/components/manage/settings/settings.component.ts 636 - Error deleting mail rule: . + Errore durante l'eliminazione della regola email: . storage path From 6db1e36e14e4b71f5d5f3459aadae91fef6d4d19 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Mon, 5 Dec 2022 03:26:21 -0800 Subject: [PATCH 117/231] New translations django.po (Italian) [ci skip] --- src/locale/it_IT/LC_MESSAGES/django.po | 32 +++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index 92c0790a5..91691bf1c 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-09 21:50+0000\n" -"PO-Revision-Date: 2022-11-12 10:50\n" +"PO-Revision-Date: 2022-12-05 11:26\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -400,51 +400,51 @@ msgstr "ID Attività" #: documents/models.py:537 msgid "Celery ID for the Task that was run" -msgstr "" +msgstr "Celery ID per l'attività che è stata eseguita" #: documents/models.py:542 msgid "Acknowledged" -msgstr "" +msgstr "Accettato" #: documents/models.py:543 msgid "If the task is acknowledged via the frontend or API" -msgstr "" +msgstr "Se l'attività è accettata tramite il frontend o API" #: documents/models.py:549 documents/models.py:556 msgid "Task Name" -msgstr "" +msgstr "Nome attività" #: documents/models.py:550 msgid "Name of the file which the Task was run for" -msgstr "" +msgstr "Nome del file per il quale è stata eseguita l'attività" #: documents/models.py:557 msgid "Name of the Task which was run" -msgstr "" +msgstr "Nome dell'attività che è stata eseguita" #: documents/models.py:562 msgid "Task Positional Arguments" -msgstr "" +msgstr "Positional Arguments dell'attività" #: documents/models.py:564 msgid "JSON representation of the positional arguments used with the task" -msgstr "" +msgstr "Rappresentazione JSON dei named arguments utilizzati con l'attività" #: documents/models.py:569 msgid "Task Named Arguments" -msgstr "" +msgstr "Named Arguments dell'attività" #: documents/models.py:571 msgid "JSON representation of the named arguments used with the task" -msgstr "" +msgstr "Rappresentazione JSON dei named arguments utilizzati con l'attività" #: documents/models.py:578 msgid "Task State" -msgstr "" +msgstr "Stato attività" #: documents/models.py:579 msgid "Current state of the task being run" -msgstr "" +msgstr "Stato attuale dell'attività in esecuzione" #: documents/models.py:584 msgid "Created DateTime" @@ -472,15 +472,15 @@ msgstr "" #: documents/models.py:602 msgid "Result Data" -msgstr "" +msgstr "Dati Risultanti" #: documents/models.py:604 msgid "The data returned by the task" -msgstr "" +msgstr "I dati restituiti dall'attività" #: documents/models.py:613 msgid "Comment for the document" -msgstr "" +msgstr "Commento per il documento" #: documents/models.py:642 msgid "comment" From 826503802a438c96696d2ad6c3346891399d6f8a Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Mon, 5 Dec 2022 21:48:39 -0800 Subject: [PATCH 118/231] New translations messages.xlf (German) [ci skip] --- src-ui/src/locale/messages.de_DE.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 1cc39508f..17dd2c7b9 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -3401,7 +3401,7 @@ src/app/components/manage/correspondent-list/correspondent-list.component.ts 33 - korrespondenten + Korrespondent correspondents From 14784d58328d776452f1f658f476235b4f6c9eb6 Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:23:35 -0800 Subject: [PATCH 119/231] Adds the same backoff/retry logic to the other live tests --- src/paperless_mail/tests/test_parsers_live.py | 65 +++++++++++++++++-- 1 file changed, 60 insertions(+), 5 deletions(-) diff --git a/src/paperless_mail/tests/test_parsers_live.py b/src/paperless_mail/tests/test_parsers_live.py index 9a9816f7d..39c3adda5 100644 --- a/src/paperless_mail/tests/test_parsers_live.py +++ b/src/paperless_mail/tests/test_parsers_live.py @@ -1,4 +1,5 @@ import os +import time from unittest import mock from urllib.error import HTTPError from urllib.request import urlopen @@ -26,6 +27,47 @@ class TestParserLive(TestCase): def imagehash(file, hash_size=18): return f"{average_hash(Image.open(file), hash_size)}" + def util_call_with_backoff(self, method_or_callable, args): + """ + For whatever reason, the image started during the test pipeline likes to + segfault sometimes, when run with the exact files that usually pass. + + So, this function will retry the parsing up to 3 times, with larger backoff + periods between each attempt, in hopes the issue resolves itself during + one attempt to parse. + + This will wait the following: + - Attempt 1 - 20s following failure + - Attempt 2 - 40s following failure + - Attempt 3 - 80s following failure + + """ + result = None + succeeded = False + retry_time = 20.0 + retry_count = 0 + max_retry_count = 3 + + while retry_count < max_retry_count and not succeeded: + try: + result = method_or_callable(*args) + + succeeded = True + except Exception as e: + print(f"{e} during try #{retry_count}", flush=True) + + retry_count = retry_count + 1 + + time.sleep(retry_time) + retry_time = retry_time * 2.0 + + self.assertTrue( + succeeded, + "Continued Tika server errors after multiple retries", + ) + + return result + # Only run if convert is available @pytest.mark.skipif( "PAPERLESS_TEST_SKIP_CONVERT" in os.environ, @@ -121,7 +163,10 @@ class TestParserLive(TestCase): with open(os.path.join(self.SAMPLE_FILES, "second.pdf"), "rb") as second: mock_generate_pdf_from_html.return_value = second.read() - pdf_path = self.parser.generate_pdf(os.path.join(self.SAMPLE_FILES, "html.eml")) + pdf_path = self.util_call_with_backoff( + self.parser.generate_pdf, + os.path.join(self.SAMPLE_FILES, "html.eml"), + ) self.assertTrue(os.path.isfile(pdf_path)) extracted = extract_text(pdf_path) @@ -148,7 +193,9 @@ class TestParserLive(TestCase): pdf_path = os.path.join(self.parser.tempdir, "html.eml.pdf") with open(pdf_path, "wb") as file: - file.write(self.parser.generate_pdf_from_mail(mail)) + file.write( + self.util_call_with_backoff(self.parser.generate_pdf_from_mail, mail), + ) extracted = extract_text(pdf_path) expected = extract_text(os.path.join(self.SAMPLE_FILES, "html.eml.pdf")) @@ -177,7 +224,9 @@ class TestParserLive(TestCase): pdf_path = os.path.join(self.parser.tempdir, "html.eml.pdf") with open(pdf_path, "wb") as file: - file.write(self.parser.generate_pdf_from_mail(mail)) + file.write( + self.util_call_with_backoff(self.parser.generate_pdf_from_mail, mail), + ) converted = os.path.join( self.parser.tempdir, @@ -235,7 +284,10 @@ class TestParserLive(TestCase): attachments = [ MailAttachmentMock(png, "part1.pNdUSz0s.D3NqVtPg@example.de"), ] - result = self.parser.generate_pdf_from_html(html, attachments) + result = self.util_call_with_backoff( + self.parser.generate_pdf_from_html, + [html, attachments], + ) pdf_path = os.path.join(self.parser.tempdir, "sample.html.pdf") @@ -279,7 +331,10 @@ class TestParserLive(TestCase): attachments = [ MailAttachmentMock(png, "part1.pNdUSz0s.D3NqVtPg@example.de"), ] - result = self.parser.generate_pdf_from_html(html, attachments) + result = self.util_call_with_backoff( + self.parser.generate_pdf_from_html, + [html, attachments], + ) pdf_path = os.path.join(self.parser.tempdir, "sample.html.pdf") From 3f6e3a2750020fc3f2f1b436b418b3b21758c83a Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:36:50 -0800 Subject: [PATCH 120/231] Fixes args handling --- src/paperless_mail/tests/test_parsers_live.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/paperless_mail/tests/test_parsers_live.py b/src/paperless_mail/tests/test_parsers_live.py index 39c3adda5..264f99316 100644 --- a/src/paperless_mail/tests/test_parsers_live.py +++ b/src/paperless_mail/tests/test_parsers_live.py @@ -165,7 +165,7 @@ class TestParserLive(TestCase): pdf_path = self.util_call_with_backoff( self.parser.generate_pdf, - os.path.join(self.SAMPLE_FILES, "html.eml"), + [os.path.join(self.SAMPLE_FILES, "html.eml")], ) self.assertTrue(os.path.isfile(pdf_path)) @@ -194,7 +194,7 @@ class TestParserLive(TestCase): with open(pdf_path, "wb") as file: file.write( - self.util_call_with_backoff(self.parser.generate_pdf_from_mail, mail), + self.util_call_with_backoff(self.parser.generate_pdf_from_mail, [mail]), ) extracted = extract_text(pdf_path) @@ -225,7 +225,7 @@ class TestParserLive(TestCase): with open(pdf_path, "wb") as file: file.write( - self.util_call_with_backoff(self.parser.generate_pdf_from_mail, mail), + self.util_call_with_backoff(self.parser.generate_pdf_from_mail, [mail]), ) converted = os.path.join( From 2b2e518dead4fcab09b14b6ee954423d24d7c58e Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Wed, 7 Dec 2022 06:36:32 -0800 Subject: [PATCH 121/231] New translations django.po (Arabic) [ci skip] --- src/locale/ar_SA/LC_MESSAGES/django.po | 878 +++++++++++++++++++++++++ 1 file changed, 878 insertions(+) create mode 100644 src/locale/ar_SA/LC_MESSAGES/django.po diff --git a/src/locale/ar_SA/LC_MESSAGES/django.po b/src/locale/ar_SA/LC_MESSAGES/django.po new file mode 100644 index 000000000..eb5a9a06f --- /dev/null +++ b/src/locale/ar_SA/LC_MESSAGES/django.po @@ -0,0 +1,878 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ngx\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-09 21:50+0000\n" +"PO-Revision-Date: 2022-12-07 14:36\n" +"Last-Translator: \n" +"Language-Team: Arabic\n" +"Language: ar_SA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"X-Crowdin-Project: paperless-ngx\n" +"X-Crowdin-Project-ID: 500308\n" +"X-Crowdin-Language: ar\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 14\n" + +#: documents/apps.py:9 +msgid "Documents" +msgstr "المستندات" + +#: documents/models.py:32 +msgid "Any word" +msgstr "أي كلمة" + +#: documents/models.py:33 +msgid "All words" +msgstr "كل الكلمات" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "" + +#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16 +#: paperless_mail/models.py:80 +msgid "name" +msgstr "" + +#: documents/models.py:42 +msgid "match" +msgstr "" + +#: documents/models.py:45 +msgid "matching algorithm" +msgstr "" + +#: documents/models.py:50 +msgid "is insensitive" +msgstr "" + +#: documents/models.py:63 documents/models.py:118 +msgid "correspondent" +msgstr "" + +#: documents/models.py:64 +msgid "correspondents" +msgstr "" + +#: documents/models.py:69 +msgid "color" +msgstr "" + +#: documents/models.py:72 +msgid "is inbox tag" +msgstr "" + +#: documents/models.py:75 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "" + +#: documents/models.py:81 +msgid "tag" +msgstr "" + +#: documents/models.py:82 documents/models.py:156 +msgid "tags" +msgstr "" + +#: documents/models.py:87 documents/models.py:138 +msgid "document type" +msgstr "" + +#: documents/models.py:88 +msgid "document types" +msgstr "" + +#: documents/models.py:93 +msgid "path" +msgstr "" + +#: documents/models.py:99 documents/models.py:127 +msgid "storage path" +msgstr "" + +#: documents/models.py:100 +msgid "storage paths" +msgstr "" + +#: documents/models.py:108 +msgid "Unencrypted" +msgstr "" + +#: documents/models.py:109 +msgid "Encrypted with GNU Privacy Guard" +msgstr "" + +#: documents/models.py:130 +msgid "title" +msgstr "" + +#: documents/models.py:142 documents/models.py:611 +msgid "content" +msgstr "" + +#: documents/models.py:145 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "" + +#: documents/models.py:150 +msgid "mime type" +msgstr "" + +#: documents/models.py:160 +msgid "checksum" +msgstr "" + +#: documents/models.py:164 +msgid "The checksum of the original document." +msgstr "" + +#: documents/models.py:168 +msgid "archive checksum" +msgstr "" + +#: documents/models.py:173 +msgid "The checksum of the archived document." +msgstr "" + +#: documents/models.py:176 documents/models.py:348 documents/models.py:617 +msgid "created" +msgstr "" + +#: documents/models.py:179 +msgid "modified" +msgstr "" + +#: documents/models.py:186 +msgid "storage type" +msgstr "" + +#: documents/models.py:194 +msgid "added" +msgstr "" + +#: documents/models.py:201 +msgid "filename" +msgstr "" + +#: documents/models.py:207 +msgid "Current filename in storage" +msgstr "" + +#: documents/models.py:211 +msgid "archive filename" +msgstr "" + +#: documents/models.py:217 +msgid "Current archive filename in storage" +msgstr "" + +#: documents/models.py:221 +msgid "original filename" +msgstr "" + +#: documents/models.py:227 +msgid "The original name of the file when it was uploaded" +msgstr "" + +#: documents/models.py:231 +msgid "archive serial number" +msgstr "" + +#: documents/models.py:237 +msgid "The position of this document in your physical document archive." +msgstr "" + +#: documents/models.py:243 documents/models.py:628 +msgid "document" +msgstr "" + +#: documents/models.py:244 +msgid "documents" +msgstr "" + +#: documents/models.py:331 +msgid "debug" +msgstr "" + +#: documents/models.py:332 +msgid "information" +msgstr "" + +#: documents/models.py:333 +msgid "warning" +msgstr "" + +#: documents/models.py:334 +msgid "error" +msgstr "" + +#: documents/models.py:335 +msgid "critical" +msgstr "" + +#: documents/models.py:338 +msgid "group" +msgstr "" + +#: documents/models.py:340 +msgid "message" +msgstr "" + +#: documents/models.py:343 +msgid "level" +msgstr "" + +#: documents/models.py:352 +msgid "log" +msgstr "" + +#: documents/models.py:353 +msgid "logs" +msgstr "" + +#: documents/models.py:363 documents/models.py:419 +msgid "saved view" +msgstr "" + +#: documents/models.py:364 +msgid "saved views" +msgstr "" + +#: documents/models.py:366 documents/models.py:637 +msgid "user" +msgstr "" + +#: documents/models.py:370 +msgid "show on dashboard" +msgstr "" + +#: documents/models.py:373 +msgid "show in sidebar" +msgstr "" + +#: documents/models.py:377 +msgid "sort field" +msgstr "" + +#: documents/models.py:382 +msgid "sort reverse" +msgstr "" + +#: documents/models.py:387 +msgid "title contains" +msgstr "" + +#: documents/models.py:388 +msgid "content contains" +msgstr "" + +#: documents/models.py:389 +msgid "ASN is" +msgstr "" + +#: documents/models.py:390 +msgid "correspondent is" +msgstr "" + +#: documents/models.py:391 +msgid "document type is" +msgstr "" + +#: documents/models.py:392 +msgid "is in inbox" +msgstr "" + +#: documents/models.py:393 +msgid "has tag" +msgstr "" + +#: documents/models.py:394 +msgid "has any tag" +msgstr "" + +#: documents/models.py:395 +msgid "created before" +msgstr "" + +#: documents/models.py:396 +msgid "created after" +msgstr "" + +#: documents/models.py:397 +msgid "created year is" +msgstr "" + +#: documents/models.py:398 +msgid "created month is" +msgstr "" + +#: documents/models.py:399 +msgid "created day is" +msgstr "" + +#: documents/models.py:400 +msgid "added before" +msgstr "" + +#: documents/models.py:401 +msgid "added after" +msgstr "" + +#: documents/models.py:402 +msgid "modified before" +msgstr "" + +#: documents/models.py:403 +msgid "modified after" +msgstr "" + +#: documents/models.py:404 +msgid "does not have tag" +msgstr "" + +#: documents/models.py:405 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:406 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:407 +msgid "fulltext query" +msgstr "" + +#: documents/models.py:408 +msgid "more like this" +msgstr "" + +#: documents/models.py:409 +msgid "has tags in" +msgstr "" + +#: documents/models.py:410 +msgid "ASN greater than" +msgstr "" + +#: documents/models.py:411 +msgid "ASN less than" +msgstr "" + +#: documents/models.py:412 +msgid "storage path is" +msgstr "" + +#: documents/models.py:422 +msgid "rule type" +msgstr "" + +#: documents/models.py:424 +msgid "value" +msgstr "" + +#: documents/models.py:427 +msgid "filter rule" +msgstr "" + +#: documents/models.py:428 +msgid "filter rules" +msgstr "" + +#: documents/models.py:536 +msgid "Task ID" +msgstr "" + +#: documents/models.py:537 +msgid "Celery ID for the Task that was run" +msgstr "" + +#: documents/models.py:542 +msgid "Acknowledged" +msgstr "" + +#: documents/models.py:543 +msgid "If the task is acknowledged via the frontend or API" +msgstr "" + +#: documents/models.py:549 documents/models.py:556 +msgid "Task Name" +msgstr "" + +#: documents/models.py:550 +msgid "Name of the file which the Task was run for" +msgstr "" + +#: documents/models.py:557 +msgid "Name of the Task which was run" +msgstr "" + +#: documents/models.py:562 +msgid "Task Positional Arguments" +msgstr "" + +#: documents/models.py:564 +msgid "JSON representation of the positional arguments used with the task" +msgstr "" + +#: documents/models.py:569 +msgid "Task Named Arguments" +msgstr "" + +#: documents/models.py:571 +msgid "JSON representation of the named arguments used with the task" +msgstr "" + +#: documents/models.py:578 +msgid "Task State" +msgstr "" + +#: documents/models.py:579 +msgid "Current state of the task being run" +msgstr "" + +#: documents/models.py:584 +msgid "Created DateTime" +msgstr "" + +#: documents/models.py:585 +msgid "Datetime field when the task result was created in UTC" +msgstr "" + +#: documents/models.py:590 +msgid "Started DateTime" +msgstr "" + +#: documents/models.py:591 +msgid "Datetime field when the task was started in UTC" +msgstr "" + +#: documents/models.py:596 +msgid "Completed DateTime" +msgstr "" + +#: documents/models.py:597 +msgid "Datetime field when the task was completed in UTC" +msgstr "" + +#: documents/models.py:602 +msgid "Result Data" +msgstr "" + +#: documents/models.py:604 +msgid "The data returned by the task" +msgstr "" + +#: documents/models.py:613 +msgid "Comment for the document" +msgstr "" + +#: documents/models.py:642 +msgid "comment" +msgstr "" + +#: documents/models.py:643 +msgid "comments" +msgstr "" + +#: documents/serialisers.py:72 +#, python-format +msgid "Invalid regular expression: %(error)s" +msgstr "" + +#: documents/serialisers.py:193 +msgid "Invalid color." +msgstr "" + +#: documents/serialisers.py:518 +#, python-format +msgid "File type %(type)s not supported" +msgstr "" + +#: documents/serialisers.py:599 +msgid "Invalid variable detected." +msgstr "" + +#: documents/templates/index.html:78 +msgid "Paperless-ngx is loading..." +msgstr "" + +#: documents/templates/index.html:79 +msgid "Still here?! Hmm, something might be wrong." +msgstr "" + +#: documents/templates/index.html:79 +msgid "Here's a link to the docs." +msgstr "" + +#: documents/templates/registration/logged_out.html:14 +msgid "Paperless-ngx signed out" +msgstr "" + +#: documents/templates/registration/logged_out.html:59 +msgid "You have been successfully logged out. Bye!" +msgstr "" + +#: documents/templates/registration/logged_out.html:60 +msgid "Sign in again" +msgstr "" + +#: documents/templates/registration/login.html:15 +msgid "Paperless-ngx sign in" +msgstr "" + +#: documents/templates/registration/login.html:61 +msgid "Please sign in." +msgstr "" + +#: documents/templates/registration/login.html:64 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: documents/templates/registration/login.html:67 +msgid "Username" +msgstr "" + +#: documents/templates/registration/login.html:68 +msgid "Password" +msgstr "" + +#: documents/templates/registration/login.html:73 +msgid "Sign in" +msgstr "" + +#: paperless/settings.py:378 +msgid "English (US)" +msgstr "" + +#: paperless/settings.py:379 +msgid "Belarusian" +msgstr "" + +#: paperless/settings.py:380 +msgid "Czech" +msgstr "" + +#: paperless/settings.py:381 +msgid "Danish" +msgstr "" + +#: paperless/settings.py:382 +msgid "German" +msgstr "" + +#: paperless/settings.py:383 +msgid "English (GB)" +msgstr "" + +#: paperless/settings.py:384 +msgid "Spanish" +msgstr "الإسبانية" + +#: paperless/settings.py:385 +msgid "French" +msgstr "" + +#: paperless/settings.py:386 +msgid "Italian" +msgstr "" + +#: paperless/settings.py:387 +msgid "Luxembourgish" +msgstr "" + +#: paperless/settings.py:388 +msgid "Dutch" +msgstr "" + +#: paperless/settings.py:389 +msgid "Polish" +msgstr "البولندية" + +#: paperless/settings.py:390 +msgid "Portuguese (Brazil)" +msgstr "" + +#: paperless/settings.py:391 +msgid "Portuguese" +msgstr "البرتغالية" + +#: paperless/settings.py:392 +msgid "Romanian" +msgstr "" + +#: paperless/settings.py:393 +msgid "Russian" +msgstr "الروسية" + +#: paperless/settings.py:394 +msgid "Slovenian" +msgstr "" + +#: paperless/settings.py:395 +msgid "Serbian" +msgstr "" + +#: paperless/settings.py:396 +msgid "Swedish" +msgstr "السويدية" + +#: paperless/settings.py:397 +msgid "Turkish" +msgstr "" + +#: paperless/settings.py:398 +msgid "Chinese Simplified" +msgstr "" + +#: paperless/urls.py:161 +msgid "Paperless-ngx administration" +msgstr "" + +#: paperless_mail/admin.py:29 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:30 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:47 +msgid "Filter" +msgstr "" + +#: paperless_mail/admin.py:50 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "" + +#: paperless_mail/admin.py:64 +msgid "Actions" +msgstr "" + +#: paperless_mail/admin.py:67 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "" + +#: paperless_mail/admin.py:75 +msgid "Metadata" +msgstr "" + +#: paperless_mail/admin.py:78 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "" + +#: paperless_mail/apps.py:8 +msgid "Paperless mail" +msgstr "" + +#: paperless_mail/models.py:8 +msgid "mail account" +msgstr "" + +#: paperless_mail/models.py:9 +msgid "mail accounts" +msgstr "" + +#: paperless_mail/models.py:12 +msgid "No encryption" +msgstr "" + +#: paperless_mail/models.py:13 +msgid "Use SSL" +msgstr "" + +#: paperless_mail/models.py:14 +msgid "Use STARTTLS" +msgstr "" + +#: paperless_mail/models.py:18 +msgid "IMAP server" +msgstr "" + +#: paperless_mail/models.py:21 +msgid "IMAP port" +msgstr "" + +#: paperless_mail/models.py:25 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "" + +#: paperless_mail/models.py:31 +msgid "IMAP security" +msgstr "" + +#: paperless_mail/models.py:36 +msgid "username" +msgstr "" + +#: paperless_mail/models.py:38 +msgid "password" +msgstr "" + +#: paperless_mail/models.py:41 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:45 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:56 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:60 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:61 +msgid "Process all files, including 'inline' attachments." +msgstr "" + +#: paperless_mail/models.py:64 +msgid "Delete" +msgstr "" + +#: paperless_mail/models.py:65 +msgid "Move to specified folder" +msgstr "" + +#: paperless_mail/models.py:66 +msgid "Mark as read, don't process read mails" +msgstr "" + +#: paperless_mail/models.py:67 +msgid "Flag the mail, don't process flagged mails" +msgstr "" + +#: paperless_mail/models.py:68 +msgid "Tag the mail with specified tag, don't process tagged mails" +msgstr "" + +#: paperless_mail/models.py:71 +msgid "Use subject as title" +msgstr "" + +#: paperless_mail/models.py:72 +msgid "Use attachment filename as title" +msgstr "" + +#: paperless_mail/models.py:75 +msgid "Do not assign a correspondent" +msgstr "" + +#: paperless_mail/models.py:76 +msgid "Use mail address" +msgstr "" + +#: paperless_mail/models.py:77 +msgid "Use name (or mail address if not available)" +msgstr "" + +#: paperless_mail/models.py:78 +msgid "Use correspondent selected below" +msgstr "" + +#: paperless_mail/models.py:82 +msgid "order" +msgstr "" + +#: paperless_mail/models.py:88 +msgid "account" +msgstr "" + +#: paperless_mail/models.py:92 +msgid "folder" +msgstr "" + +#: paperless_mail/models.py:96 +msgid "Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server." +msgstr "" + +#: paperless_mail/models.py:102 +msgid "filter from" +msgstr "" + +#: paperless_mail/models.py:108 +msgid "filter subject" +msgstr "" + +#: paperless_mail/models.py:114 +msgid "filter body" +msgstr "" + +#: paperless_mail/models.py:121 +msgid "filter attachment filename" +msgstr "" + +#: paperless_mail/models.py:126 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" + +#: paperless_mail/models.py:133 +msgid "maximum age" +msgstr "" + +#: paperless_mail/models.py:135 +msgid "Specified in days." +msgstr "" + +#: paperless_mail/models.py:139 +msgid "attachment type" +msgstr "" + +#: paperless_mail/models.py:143 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "" + +#: paperless_mail/models.py:149 +msgid "action" +msgstr "" + +#: paperless_mail/models.py:155 +msgid "action parameter" +msgstr "" + +#: paperless_mail/models.py:160 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:168 +msgid "assign title from" +msgstr "" + +#: paperless_mail/models.py:176 +msgid "assign this tag" +msgstr "" + +#: paperless_mail/models.py:184 +msgid "assign this document type" +msgstr "" + +#: paperless_mail/models.py:188 +msgid "assign correspondent from" +msgstr "" + +#: paperless_mail/models.py:198 +msgid "assign this correspondent" +msgstr "" + From f17b541a5ba31b6b7304d4ba0209611346cd3256 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Wed, 7 Dec 2022 07:39:37 -0800 Subject: [PATCH 122/231] New translations django.po (Arabic) [ci skip] --- src/locale/ar_SA/LC_MESSAGES/django.po | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/locale/ar_SA/LC_MESSAGES/django.po b/src/locale/ar_SA/LC_MESSAGES/django.po index eb5a9a06f..22cddf31a 100644 --- a/src/locale/ar_SA/LC_MESSAGES/django.po +++ b/src/locale/ar_SA/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-09 21:50+0000\n" -"PO-Revision-Date: 2022-12-07 14:36\n" +"PO-Revision-Date: 2022-12-07 15:39\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -31,48 +31,48 @@ msgstr "كل الكلمات" #: documents/models.py:34 msgid "Exact match" -msgstr "" +msgstr "تطابق تام" #: documents/models.py:35 msgid "Regular expression" -msgstr "" +msgstr "التعابير النظامية" #: documents/models.py:36 msgid "Fuzzy word" -msgstr "" +msgstr "كلمة غير واضحة" #: documents/models.py:37 msgid "Automatic" -msgstr "" +msgstr "تلقائي" #: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16 #: paperless_mail/models.py:80 msgid "name" -msgstr "" +msgstr "اسم" #: documents/models.py:42 msgid "match" -msgstr "" +msgstr "تطابق" #: documents/models.py:45 msgid "matching algorithm" -msgstr "" +msgstr "خوارزمية مطابقة" #: documents/models.py:50 msgid "is insensitive" -msgstr "" +msgstr "غير حساس" #: documents/models.py:63 documents/models.py:118 msgid "correspondent" -msgstr "" +msgstr "مراسل" #: documents/models.py:64 msgid "correspondents" -msgstr "" +msgstr "مراسلون" #: documents/models.py:69 msgid "color" -msgstr "" +msgstr "لون" #: documents/models.py:72 msgid "is inbox tag" From 8da3ae2c539266d96c8885964f07bf34c69d73c4 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Fri, 2 Dec 2022 12:02:56 -0800 Subject: [PATCH 123/231] Bakes the NLTK data into the image (~60mb) --- Dockerfile | 4 ++++ docker/docker-entrypoint.sh | 30 ------------------------------ src/paperless/settings.py | 2 +- 3 files changed, 5 insertions(+), 31 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2cb25c0c3..a1f577243 100644 --- a/Dockerfile +++ b/Dockerfile @@ -228,6 +228,10 @@ RUN set -eux \ && python3 -m pip install --no-cache-dir --upgrade wheel \ && echo "Installing Python requirements" \ && python3 -m pip install --default-timeout=1000 --no-cache-dir --requirement requirements.txt \ + && echo "Installing NLTK data" \ + && python3 -W ignore::RuntimeWarning -m nltk.downloader -d "/usr/local/share/nltk_data" snowball_data \ + && python3 -W ignore::RuntimeWarning -m nltk.downloader -d "/usr/local/share/nltk_data" stopwords \ + && python3 -W ignore::RuntimeWarning -m nltk.downloader -d "/usr/local/share/nltk_data" punkt \ && echo "Cleaning up image" \ && apt-get -y purge ${BUILD_PACKAGES} \ && apt-get -y autoremove --purge \ diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 74e080671..00be59add 100755 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -53,30 +53,6 @@ map_folders() { export CONSUME_DIR="${PAPERLESS_CONSUMPTION_DIR:-/usr/src/paperless/consume}" } -nltk_data () { - # Store the NLTK data outside the Docker container - local -r nltk_data_dir="${DATA_DIR}/nltk" - local -r truthy_things=("yes y 1 t true") - - # If not set, or it looks truthy - if [[ -z "${PAPERLESS_ENABLE_NLTK}" ]] || [[ "${truthy_things[*]}" =~ ${PAPERLESS_ENABLE_NLTK,} ]]; then - - # Download or update the snowball stemmer data - python3 -W ignore::RuntimeWarning -m nltk.downloader -d "${nltk_data_dir}" snowball_data - - # Download or update the stopwords corpus - python3 -W ignore::RuntimeWarning -m nltk.downloader -d "${nltk_data_dir}" stopwords - - # Download or update the punkt tokenizer data - python3 -W ignore::RuntimeWarning -m nltk.downloader -d "${nltk_data_dir}" punkt - - else - echo "Skipping NLTK data download" - - fi - -} - custom_container_init() { # Mostly borrowed from the LinuxServer.io base image # https://github.com/linuxserver/docker-baseimage-ubuntu/tree/bionic/root/etc/cont-init.d @@ -157,8 +133,6 @@ initialize() { echo "Creating directory ${tmp_dir}" mkdir -p "${tmp_dir}" - nltk_data - set +e echo "Adjusting permissions of paperless files. This may take a while." chown -R paperless:paperless ${tmp_dir} @@ -191,10 +165,6 @@ install_languages() { for lang in "${langs[@]}"; do pkg="tesseract-ocr-$lang" - # English is installed by default - #if [[ "$lang" == "eng" ]]; then - # continue - #fi if dpkg -s "$pkg" &>/dev/null; then echo "Package $pkg already installed!" diff --git a/src/paperless/settings.py b/src/paperless/settings.py index c11e43489..40c7a5c3b 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -123,7 +123,7 @@ THUMBNAIL_DIR = os.path.join(MEDIA_ROOT, "documents", "thumbnails") DATA_DIR = __get_path("PAPERLESS_DATA_DIR", os.path.join(BASE_DIR, "..", "data")) -NLTK_DIR = os.path.join(DATA_DIR, "nltk") +NLTK_DIR = __get_path("PAPERLESS_NLTK_DIR", "/usr/local/share/nltk_data") TRASH_DIR = os.getenv("PAPERLESS_TRASH_DIR") From 95257d57238533b9e516e56c04746c8e9b89c03b Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Fri, 2 Dec 2022 19:21:19 -0800 Subject: [PATCH 124/231] Documents the configuration for NLTK related settings --- docs/configuration.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/configuration.md b/docs/configuration.md index bcde72e5f..d52663f5f 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -170,6 +170,15 @@ details. Defaults to "`PAPERLESS_DATA_DIR`/log/". +`PAPERLESS_NLTK_DIR=` + +: This is where paperless will search for the data required for NLTK +processing, if you are using it. If you are using the Docker image, +this should not be changed, as the data is included in the image +already. + +Defaults to `/usr/local/share/nltk_data` + ## Logging `PAPERLESS_LOGROTATE_MAX_SIZE=` @@ -698,6 +707,16 @@ for details on how to set it. Defaults to UTC. +`PAPERLESS_ENABLE_NLTK=` + +: Enables or disables the advanced natural language processing +used during automatic classification. If disabled, paperless will +still preform some basic text pre-processing before matching. + +See also `PAPERLESS_NLTK_DIR`. + + Defaults to 1. + ## Polling {#polling} `PAPERLESS_CONSUMER_POLLING=` From 45a13523d4ed10dc8e4fcc22a867862b0de645e5 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Mon, 5 Dec 2022 15:37:22 -0800 Subject: [PATCH 125/231] Note the previous location and that it can be safely deleted if not in use --- docs/configuration.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/configuration.md b/docs/configuration.md index d52663f5f..488a6f11f 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -177,6 +177,10 @@ processing, if you are using it. If you are using the Docker image, this should not be changed, as the data is included in the image already. +Previously, the location defaulted to `PAPERLESS_DATA_DIR/nltk`. +Unless you are using this in a bare metal install or other setup, +this folder is no longer needed and can be removed manually. + Defaults to `/usr/local/share/nltk_data` ## Logging From 33e413af65fd14e05e48260b03a1dfb132a9b90d Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Wed, 7 Dec 2022 09:49:36 -0800 Subject: [PATCH 126/231] New translations django.po (Arabic) [ci skip] --- src/locale/ar_SA/LC_MESSAGES/django.po | 76 +++++++++++++------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/src/locale/ar_SA/LC_MESSAGES/django.po b/src/locale/ar_SA/LC_MESSAGES/django.po index 22cddf31a..4c8d4100c 100644 --- a/src/locale/ar_SA/LC_MESSAGES/django.po +++ b/src/locale/ar_SA/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-09 21:50+0000\n" -"PO-Revision-Date: 2022-12-07 15:39\n" +"PO-Revision-Date: 2022-12-07 17:49\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -84,139 +84,139 @@ msgstr "" #: documents/models.py:81 msgid "tag" -msgstr "" +msgstr "وسم" #: documents/models.py:82 documents/models.py:156 msgid "tags" -msgstr "" +msgstr "وسوم" #: documents/models.py:87 documents/models.py:138 msgid "document type" -msgstr "" +msgstr "نوع المستند" #: documents/models.py:88 msgid "document types" -msgstr "" +msgstr "أنواع المستندات" #: documents/models.py:93 msgid "path" -msgstr "" +msgstr "مسار" #: documents/models.py:99 documents/models.py:127 msgid "storage path" -msgstr "" +msgstr "مسار التخزين" #: documents/models.py:100 msgid "storage paths" -msgstr "" +msgstr "مسارات التخزين" #: documents/models.py:108 msgid "Unencrypted" -msgstr "" +msgstr "دون تشفير" #: documents/models.py:109 msgid "Encrypted with GNU Privacy Guard" -msgstr "" +msgstr "مشفر باستخدام حارس خصوصية غنو" #: documents/models.py:130 msgid "title" -msgstr "" +msgstr "عنوان" #: documents/models.py:142 documents/models.py:611 msgid "content" -msgstr "" +msgstr "محتوى" #: documents/models.py:145 msgid "The raw, text-only data of the document. This field is primarily used for searching." -msgstr "" +msgstr "الخام, فقط النص من المستند. يستخدم هذا الحقل أساسا للبحث." #: documents/models.py:150 msgid "mime type" -msgstr "" +msgstr "MIME type" #: documents/models.py:160 msgid "checksum" -msgstr "" +msgstr "بصمة الملف" #: documents/models.py:164 msgid "The checksum of the original document." -msgstr "" +msgstr "بصمة الملف للمستند الأصلي." #: documents/models.py:168 msgid "archive checksum" -msgstr "" +msgstr "بصمة الملف للربيدة" #: documents/models.py:173 msgid "The checksum of the archived document." -msgstr "" +msgstr "بصمة الملف للمستند الربيدة." #: documents/models.py:176 documents/models.py:348 documents/models.py:617 msgid "created" -msgstr "" +msgstr "أُنشئ" #: documents/models.py:179 msgid "modified" -msgstr "" +msgstr "مُعدّل" #: documents/models.py:186 msgid "storage type" -msgstr "" +msgstr "نوع التخزين" #: documents/models.py:194 msgid "added" -msgstr "" +msgstr "أضيف" #: documents/models.py:201 msgid "filename" -msgstr "" +msgstr "اسم الملف" #: documents/models.py:207 msgid "Current filename in storage" -msgstr "" +msgstr "اسم الملف الحالي في التخزين" #: documents/models.py:211 msgid "archive filename" -msgstr "" +msgstr "اسم الربيدة" #: documents/models.py:217 msgid "Current archive filename in storage" -msgstr "" +msgstr "اسم ملف الربيدة الحالي في التخزين" #: documents/models.py:221 msgid "original filename" -msgstr "" +msgstr "اسم الملف الأصلي" #: documents/models.py:227 msgid "The original name of the file when it was uploaded" -msgstr "" +msgstr "اسم الملف الأصلي عند تحميله" #: documents/models.py:231 msgid "archive serial number" -msgstr "" +msgstr "الرقم التسلسلي للربيدة" #: documents/models.py:237 msgid "The position of this document in your physical document archive." -msgstr "" +msgstr "موقع هذا المستند في ربيدة المستند الفيزيائي." #: documents/models.py:243 documents/models.py:628 msgid "document" -msgstr "" +msgstr "مستند" #: documents/models.py:244 msgid "documents" -msgstr "" +msgstr "المستندات" #: documents/models.py:331 msgid "debug" -msgstr "" +msgstr "تصحيح الأخطاء" #: documents/models.py:332 msgid "information" -msgstr "" +msgstr "معلومات" #: documents/models.py:333 msgid "warning" -msgstr "" +msgstr "تحذير" #: documents/models.py:334 msgid "error" @@ -412,15 +412,15 @@ msgstr "" #: documents/models.py:549 documents/models.py:556 msgid "Task Name" -msgstr "" +msgstr "اسم المهمة" #: documents/models.py:550 msgid "Name of the file which the Task was run for" -msgstr "" +msgstr "اسم الملف الذي وكل بالمهمة" #: documents/models.py:557 msgid "Name of the Task which was run" -msgstr "" +msgstr "اسم المهمة التي كانت تعمل" #: documents/models.py:562 msgid "Task Positional Arguments" From 700d58058cd200f8727bdf03201eadc8bd7c7618 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Fri, 2 Dec 2022 07:49:15 -0800 Subject: [PATCH 127/231] Updates to qpdf 11.2 and bulk updates the rest of the deps --- .build-config.json | 2 +- Pipfile | 19 +- Pipfile.lock | 753 +++++++++++++++++++++++---------------------- 3 files changed, 396 insertions(+), 378 deletions(-) diff --git a/.build-config.json b/.build-config.json index c16ce62b5..0b97bbbcd 100644 --- a/.build-config.json +++ b/.build-config.json @@ -1,6 +1,6 @@ { "qpdf": { - "version": "11.1.1" + "version": "11.2.0" }, "jbig2enc": { "version": "0.29", diff --git a/Pipfile b/Pipfile index e7702898a..58307af2d 100644 --- a/Pipfile +++ b/Pipfile @@ -30,8 +30,6 @@ psycopg2 = "*" rapidfuzz = "*" redis = {extras = ["hiredis"], version = "*"} scikit-learn = "~=1.1" -# Pin this until piwheels is building 1.9 (see https://www.piwheels.org/project/scipy/) -scipy = "==1.8.1" numpy = "*" whitenoise = "~=6.2" watchdog = "~=2.1" @@ -43,9 +41,6 @@ tika = "*" # TODO: This will sadly also install daphne+dependencies, # which an ASGI server we don't need. Adds about 15MB image size. channels = "~=3.0" -# Locked version until https://github.com/django/channels_redis/issues/332 -# is resolved -channels-redis = "==3.4.1" uvicorn = {extras = ["standard"], version = "*"} concurrent-log-handler = "*" "pdfminer.six" = "*" @@ -61,9 +56,21 @@ nltk = "*" pdf2image = "*" flower = "*" bleach = "*" -# https://www.piwheels.org/project/cryptography/ last built version + +# +# Packages locked due to issues (try to check if these are fixed in a release every so often) +# + +# Pin this until piwheels is building 1.9 (see https://www.piwheels.org/project/scipy/) +scipy = "==1.8.1" + +# Newer versions aren't builting yet (see https://www.piwheels.org/project/cryptography/) cryptography = "==38.0.1" +# Locked version until https://github.com/django/channels_redis/issues/332 +# is resolved +channels-redis = "==3.4.1" + [dev-packages] coveralls = "*" factory-boy = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 844668913..cef4674fe 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -326,11 +326,11 @@ }, "dateparser": { "hashes": [ - "sha256:711f7eef6d431225bec56c00e386af3f6a47083276253375bdae1ae6c8d23d4a", - "sha256:ae7a7de30f26983d09fff802c1f9d35d54e1c11d7ab52ae904a1f3fc037ecba5" + "sha256:4431159799b63d8acec5d7d844c5e06edf3d1b0eb2bda6d4cac87134ddddd01c", + "sha256:73ec6e44a133c54076ecf9f9dc0fbe3dd4831f154f977ff06f53114d57c5425e" ], "index": "pypi", - "version": "==1.1.3" + "version": "==1.1.4" }, "deprecated": { "hashes": [ @@ -552,11 +552,11 @@ }, "imap-tools": { "hashes": [ - "sha256:6f5572b2e747a81a607438e0ef61ff28f323f6697820493c8ca4467465baeb76", - "sha256:9e2658f267311051e04d437aca06d5b4c7c091fc4f411f7d13ca610e0cead5cb" + "sha256:12844f210b13c522c87c46b4daef37745283f0e857b574756270f9579bd532f8", + "sha256:dc8684580468a722f9e5c00073eb72ce58cb8c888f391a7eec15f88a9001254f" ], "index": "pypi", - "version": "==0.57.0" + "version": "==1.0.0" }, "img2pdf": { "hashes": [ @@ -774,37 +774,37 @@ }, "numpy": { "hashes": [ - "sha256:0fe563fc8ed9dc4474cbf70742673fc4391d70f4363f917599a7fa99f042d5a8", - "sha256:12ac457b63ec8ded85d85c1e17d85efd3c2b0967ca39560b307a35a6703a4735", - "sha256:2341f4ab6dba0834b685cce16dad5f9b6606ea8a00e6da154f5dbded70fdc4dd", - "sha256:296d17aed51161dbad3c67ed6d164e51fcd18dbcd5dd4f9d0a9c6055dce30810", - "sha256:488a66cb667359534bc70028d653ba1cf307bae88eab5929cd707c761ff037db", - "sha256:4d52914c88b4930dafb6c48ba5115a96cbab40f45740239d9f4159c4ba779962", - "sha256:5e13030f8793e9ee42f9c7d5777465a560eb78fa7e11b1c053427f2ccab90c79", - "sha256:61be02e3bf810b60ab74e81d6d0d36246dbfb644a462458bb53b595791251911", - "sha256:7607b598217745cc40f751da38ffd03512d33ec06f3523fb0b5f82e09f6f676d", - "sha256:7a70a7d3ce4c0e9284e92285cba91a4a3f5214d87ee0e95928f3614a256a1488", - "sha256:7ab46e4e7ec63c8a5e6dbf5c1b9e1c92ba23a7ebecc86c336cb7bf3bd2fb10e5", - "sha256:8981d9b5619569899666170c7c9748920f4a5005bf79c72c07d08c8a035757b0", - "sha256:8c053d7557a8f022ec823196d242464b6955a7e7e5015b719e76003f63f82d0f", - "sha256:926db372bc4ac1edf81cfb6c59e2a881606b409ddc0d0920b988174b2e2a767f", - "sha256:95d79ada05005f6f4f337d3bb9de8a7774f259341c70bc88047a1f7b96a4bcb2", - "sha256:95de7dc7dc47a312f6feddd3da2500826defdccbc41608d0031276a24181a2c0", - "sha256:a0882323e0ca4245eb0a3d0a74f88ce581cc33aedcfa396e415e5bba7bf05f68", - "sha256:a8365b942f9c1a7d0f0dc974747d99dd0a0cdfc5949a33119caf05cb314682d3", - "sha256:a8aae2fb3180940011b4862b2dd3756616841c53db9734b27bb93813cd79fce6", - "sha256:c237129f0e732885c9a6076a537e974160482eab8f10db6292e92154d4c67d71", - "sha256:c67b833dbccefe97cdd3f52798d430b9d3430396af7cdb2a0c32954c3ef73894", - "sha256:ce03305dd694c4873b9429274fd41fc7eb4e0e4dea07e0af97a933b079a5814f", - "sha256:d331afac87c92373826af83d2b2b435f57b17a5c74e6268b79355b970626e329", - "sha256:dada341ebb79619fe00a291185bba370c9803b1e1d7051610e01ed809ef3a4ba", - "sha256:ed2cc92af0efad20198638c69bb0fc2870a58dabfba6eb722c933b48556c686c", - "sha256:f260da502d7441a45695199b4e7fd8ca87db659ba1c78f2bbf31f934fe76ae0e", - "sha256:f2f390aa4da44454db40a1f0201401f9036e8d578a25f01a6e237cea238337ef", - "sha256:f76025acc8e2114bb664294a07ede0727aa75d63a06d2fae96bf29a81747e4a7" + "sha256:01dd17cbb340bf0fc23981e52e1d18a9d4050792e8fb8363cecbf066a84b827d", + "sha256:06005a2ef6014e9956c09ba07654f9837d9e26696a0470e42beedadb78c11b07", + "sha256:09b7847f7e83ca37c6e627682f145856de331049013853f344f37b0c9690e3df", + "sha256:0aaee12d8883552fadfc41e96b4c82ee7d794949e2a7c3b3a7201e968c7ecab9", + "sha256:0cbe9848fad08baf71de1a39e12d1b6310f1d5b2d0ea4de051058e6e1076852d", + "sha256:1b1766d6f397c18153d40015ddfc79ddb715cabadc04d2d228d4e5a8bc4ded1a", + "sha256:33161613d2269025873025b33e879825ec7b1d831317e68f4f2f0f84ed14c719", + "sha256:5039f55555e1eab31124a5768898c9e22c25a65c1e0037f4d7c495a45778c9f2", + "sha256:522e26bbf6377e4d76403826ed689c295b0b238f46c28a7251ab94716da0b280", + "sha256:56e454c7833e94ec9769fa0f86e6ff8e42ee38ce0ce1fa4cbb747ea7e06d56aa", + "sha256:58f545efd1108e647604a1b5aa809591ccd2540f468a880bedb97247e72db387", + "sha256:5e05b1c973a9f858c74367553e236f287e749465f773328c8ef31abe18f691e1", + "sha256:7903ba8ab592b82014713c491f6c5d3a1cde5b4a3bf116404e08f5b52f6daf43", + "sha256:8969bfd28e85c81f3f94eb4a66bc2cf1dbdc5c18efc320af34bffc54d6b1e38f", + "sha256:92c8c1e89a1f5028a4c6d9e3ccbe311b6ba53694811269b992c0b224269e2398", + "sha256:9c88793f78fca17da0145455f0d7826bcb9f37da4764af27ac945488116efe63", + "sha256:a7ac231a08bb37f852849bbb387a20a57574a97cfc7b6cabb488a4fc8be176de", + "sha256:abdde9f795cf292fb9651ed48185503a2ff29be87770c3b8e2a14b0cd7aa16f8", + "sha256:af1da88f6bc3d2338ebbf0e22fe487821ea4d8e89053e25fa59d1d79786e7481", + "sha256:b2a9ab7c279c91974f756c84c365a669a887efa287365a8e2c418f8b3ba73fb0", + "sha256:bf837dc63ba5c06dc8797c398db1e223a466c7ece27a1f7b5232ba3466aafe3d", + "sha256:ca51fcfcc5f9354c45f400059e88bc09215fb71a48d3768fb80e357f3b457e1e", + "sha256:ce571367b6dfe60af04e04a1834ca2dc5f46004ac1cc756fb95319f64c095a96", + "sha256:d208a0f8729f3fb790ed18a003f3a57895b989b40ea4dce4717e9cf4af62c6bb", + "sha256:dbee87b469018961d1ad79b1a5d50c0ae850000b639bcb1b694e9981083243b6", + "sha256:e9f4c4e51567b616be64e05d517c79a8a22f3606499941d97bb76f2ca59f982d", + "sha256:f063b69b090c9d918f9df0a12116029e274daf0181df392839661c4c7ec9018a", + "sha256:f9a909a8bae284d46bbfdefbdd4a262ba19d3bc9921b1e76126b1d21c3c34135" ], "index": "pypi", - "version": "==1.23.4" + "version": "==1.23.5" }, "ocrmypdf": { "hashes": [ @@ -848,43 +848,43 @@ }, "pikepdf": { "hashes": [ - "sha256:053911bc19fbc987ff32e8e2836693480bef4c400785f700e8645729aecc7dae", - "sha256:0b10914b14667b7de19c9b27437cd798afee82690e16763965c7f7a2ab4da90a", - "sha256:0bed47afb90c78e2262e5b2e0d4722245b50c28bdaa317bdd39c4ef125d59a2c", - "sha256:0e51db2d246d277e3b11f3341b42c737deea60a49c3d8666388bff466fe1c4d0", - "sha256:3b9037377d9ca2b91c47b50ef9edb2fd295b0bf963ba14ee732da52006600677", - "sha256:475ef831d47e0aacd1bbfc366090c645bdc881bfdcf682f2a789860f645a1bf1", - "sha256:5233f8f1dee1bed95379c1b67af926725fe6d8ba210c587406f51a6bae651132", - "sha256:52fda5f8b730489a10cc492249465d52b4f190f7eb9b6c0cf80e49d5be3d8652", - "sha256:6129a5277f850ae6cdfd2cfff7e2c4a0b24618aee942a99763c84791dfbbd067", - "sha256:73281beedc1c234d50fe11f8beb55cc5ea2d43625ad7aa88dcdea54ef019939c", - "sha256:7e7ef427346a8324c32e9e2dbd6d10b0c9acaeb30d646223418206ff33594d7e", - "sha256:8338786c9912703dee8a501c1dd3b5e1065c22628cc4f781a548e378ae0f9f0c", - "sha256:8ba102fe535677c54c2e6cca65c9e3742ff7abb03934590a06c77a17c9e86827", - "sha256:91faf319bae1f7a9a0665b1622680296e6ec351497e8b3da1f7b83c8c2fbbc9c", - "sha256:93450025948474b656a6bef0f64c91f5d2f18b4234d7470c4bb8b77e8eb36dc4", - "sha256:972c6a21c9e49fc53a36b9550616b9240fc3291e07990db0e93d2ea4bfd7f5cd", - "sha256:9b403d7b24a09a090ebeb7760890c5386c515b86a6cc6d4f9c7b36eefe94b52f", - "sha256:9b94b0bb3adf6be2407aaca8693bb1589fa5021c019ac05b1a87db299feefebe", - "sha256:a0645e34902fe51205048e982f30e78e2b1fe767203988dd4b1395f6326cc4d9", - "sha256:a7e6f4ac418092a48dbd1809905edd5c6640f271c49981558a1c3da3753c0524", - "sha256:ae5aa1fd18373fd96b8ea6610d78d1c12a43e105291e45ceaaa54637e76a6929", - "sha256:b6066f3bcdef27e255be8f3b6e299ec4c04b50688872f6cabe8e27908574563c", - "sha256:ba4db2e76fe4292c3ea47e39acb72f417e7b31f4fc594c91426b88e6e01d4940", - "sha256:bb7d56298d74e307f0ace8d8e02eb9cd2a1421993542566eb605367aa4886d58", - "sha256:bf5b505b4ac50332eb550ae61cf64854f774f5ddb10339f5dd8b20cfa44fa8e9", - "sha256:c892bfd06b69ab26732daa53c2d85f864bff0a9422b0c03004cfb58797406b2a", - "sha256:c9c46bcae66c8ea181aa3fd961e98b46bc656e40cc33df9794c63a0c84d719b2", - "sha256:cff08868ee479ffbaa64fb425260ddce14bffbc21bdd2a3b3de941589abab741", - "sha256:dba7ad05626a0768708c1dfa11b28b8461c6750994159a06f2ac58e0045a9685", - "sha256:e089f720703d5e8c419634b08fad466d540d081005e41b6382afd7728d327029", - "sha256:f02c4f10a645f43bcde681b31d90f6313d8edce3480729cc6d78c5411f3e9772", - "sha256:f0ff1e4bfbafbeea902a0bfc23e8017443a3be485d02c92cd7dab9c16d50543c", - "sha256:f4539bc4a586ec8dce7ceba474be726ca64135c48ad61c47dfba98139a7aebfb", - "sha256:fa397d5ee36f357f1ba60103004c32befc9aa7e3143ef3a9fbf6e3686b2fed99" + "sha256:08ca2566c3ddcb633bbfb90c9e2b7134f222ab48f642f056c266fd69a4c0844e", + "sha256:15eff12d7b5dc4eeeb9fbe5148d5e93cdc9f632a352d7df5191409837cdada6f", + "sha256:24717a49cab8cf0ccb360ae38fefe4b09e23d394086ef6da740071165a2542d8", + "sha256:2c1a3a1ae0d787a6819ffb9d456b0ccbf2b8d48ad8b0748f765a6a306b92184b", + "sha256:2c653bc771cc6065642f5a734ecb771ff16b5412cf05a5c3435072ac01f84fbe", + "sha256:2e9c9cc68bc123b88007b321a494ab054c3ce378ee2f77bba1b90c8bdaaad59e", + "sha256:32a7775f8b2117e72fa101427edf4526f0886e785146a7bfdf2a877d27f94dbf", + "sha256:4675c743ac873d8a1ff9d06c1d5fab15e9ca66aa1abf73fcbca4b86c976b214e", + "sha256:4800fd878876d9a780e2d1125e971d680a0de466440bd6bcbc54ac7cfb925fd6", + "sha256:5b1c975d02e75aa8a0e09679ed23f85b6eddf91ac7c85189dc18f1ef8599ce70", + "sha256:5b295d9579081ab46ce7bb463eccbc62e0c60cbe546f29c0a9135abd5cf76a24", + "sha256:5f040aa7d9327b6d9087848dc8e35d2b8515bf17a04e2bdb20f8c51931810213", + "sha256:62d724e37a2f004f63615513d3f877334e679dd43b6c55cdfe9b8af56ff52400", + "sha256:6452fa9d10b15bb60b2343b7ac08123e0c5b87f852250538d32bf556f09b8c3a", + "sha256:66679ee6b364b3b9659a72697e053554e2f4c231371173745b59114f00a821e5", + "sha256:6b21fde29bd006cb0889e05a0407f0825b5650ae22272ba70720fc68a2e44a0e", + "sha256:788df6789df19a381976f6644b78a65da92c5d4fd45714682a1cffb0cd3ff410", + "sha256:7a6de8d04df3dc4f37ddbdfdbecdb4c3d20d479699260902ec06fa531cbfbae6", + "sha256:80a4546f59bb38121c20fc37305a388b8f9d561c6bbcc77a3415afdd8a7ab16d", + "sha256:856e527970fa2516858662906173004568a38f95b46ef95c8231c529f3e71581", + "sha256:8874d4d38b2da71837352576c5ec10c03b2a7976124b95721564d8c456c9824b", + "sha256:913437609c3e5b9109a2fe1100f52bdcead4e56e8c83ca8a9c3b520cd7720016", + "sha256:91fd023805733163927ae04b16d48374f04f03f204f2cfa45d442b052314de83", + "sha256:9d9fe5e3fbd54a45fe7678c08d24c1e8347a1e48adcb4f32c6c25ef380f056ca", + "sha256:a98fcebb4303b8b2f5cde0d56f2406a53e74a9ad4bc1e1bc12bdc2b3dd4def1f", + "sha256:aa7d3831fa016634f2ead255717644ba2dddf462117b8558b783ac2ba94583bb", + "sha256:ae0ba99841d80107becaec6ed067b63c455f51a9bb83b0e88efd3a098753735b", + "sha256:b77e2e134315d25dd004b4ffbd2d5032352da164b21bc3bd92768379610fa2b5", + "sha256:c5a2710aacb1fa25edd77feba51dcadf85a9b735f2190e8b45edf0e1e79b5d1d", + "sha256:c768e55caf96024218866a5b5f95fdded2ef001b2d5463d1c89e57d07bdab928", + "sha256:d57a35b3ed3f8ef98aa528d4981d1376ccc1ba64ab937f2ac2ed0aadee1d5911", + "sha256:e35110f69406e5b9cf6330d16106877372f6aa955fdc1a920d53babcd6a5ae3d", + "sha256:e3ff858d504312ea07519121d3ecdf1b5bc40541f957d2b85d271a2ca6284b70", + "sha256:f721cd86d8ddf0624306fcd1fed3e086387fcb2e32baeafbd1ba92a7c40c5563" ], "index": "pypi", - "version": "==6.2.2" + "version": "==6.2.5" }, "pillow": { "hashes": [ @@ -979,11 +979,11 @@ }, "prompt-toolkit": { "hashes": [ - "sha256:24becda58d49ceac4dc26232eb179ef2b21f133fecda7eed6018d341766ed76e", - "sha256:e7f2129cba4ff3b3656bbdda0e74ee00d2f874a8bcdb9dd16f5fec7b3e173cae" + "sha256:535c29c31216c77302877d5120aef6c94ff573748a5b5ca5b1b1f76f5e700c73", + "sha256:ced598b222f6f4029c0800cefaa6a17373fb580cd093223003475ce32805c35b" ], "markers": "python_full_version >= '3.6.2'", - "version": "==3.0.32" + "version": "==3.0.33" }, "psycopg2": { "hashes": [ @@ -1165,189 +1165,203 @@ }, "rapidfuzz": { "hashes": [ - "sha256:026f6ecd8948e168a89fc015ef34b6bcb200f30ac33f1480554d722181b38bea", - "sha256:0c324d82871fe50471f7ba38a21c3e68167e868f541f57ac0ef23c053bbef6e6", - "sha256:0f186b3a32d78af7a805584a7e1c2fdf6f6fd62939936e4f3df869158c147a55", - "sha256:12ece1a4d024297afa4b76d2ce71c2c65fc7eaa487a9ae9f6e17c160253cfd23", - "sha256:13e175b1643306558a3d7604789c4a8c217a64406fe82bf1a9e52efb5dea53ae", - "sha256:1c67007161655c59e13bba130a2db29d7c9e5c81bcecb8846a3dd7386065eb24", - "sha256:1e1dd1a328464dd2ae70f0e31ec403593fbb1b254bab7ac9f0cd08ba71c797d0", - "sha256:1f363bf95d79dbafa8eac17697965e02e74da6f21b231b3fb808b2185bfed337", - "sha256:2345656b30d7e18d18a4df5b765e4059111860a69bf3a36608a7d625e92567e6", - "sha256:26e4b7f7941b92546a9b06ed75b40b5d7ceace8f3074d06cb3369349388d700d", - "sha256:27bbdee91718019e251d315c6e9b03aa5b7663b90e4228ac1ddb0a567ff3634b", - "sha256:2b491f2fac36718247070c3343f53aadbbe8684f3e0cf3b6cce1bd099e1d05cb", - "sha256:2c66f3b8e93cdc3063ffd7224cad84951834d9434ffd27fa3fabad2e942ddab7", - "sha256:31370273787dca851e2df6f32f1ec8c61f86e9bbeb1cc42787020b6dfff952fd", - "sha256:343fe1fcbbf55c994b22962bfb46f6b6903faeac5a2671b2f0fa5e3664de3e66", - "sha256:3479a2fd88504cc41eb707650e81fd7ce864f2418fee24f7224775b539536b39", - "sha256:352c920e166e838bc560014885ba979df656938fcc29a12c73ff06dc76b150d8", - "sha256:378554acdcf8370cc5c777b1312921a2a670f68888e999ea1305599c55b67f5d", - "sha256:37a9a8f5737b8e429291148be67d2dd8ba779a69a87ad95d2785bb3d80fd1df7", - "sha256:3a4e87aae287d757d9c5b045c819c985b02b38dea3f75630cc24d53826e640be", - "sha256:3aacc4eb58d6bccf6ec571619bee35861d4103961b9873d9b0829d347ca8a63e", - "sha256:3f93a6740fef239a8aca6521cc1891d448664115b53528a3dd7f95c1781a5fa6", - "sha256:41610c3a9be4febcbcac2b69b2f45d0da33e39d1194e5ffa3dd3a104d5a67a70", - "sha256:4291a8c02d32aa6ebdffe63cf91abc2846383de95ae04a275f036c4e7a27f9ba", - "sha256:47b5b227dc0bd53530dda55f344e1b24087fa99bb1bd7fceb6f5a2b1e2831ad4", - "sha256:4b785ffbc16795fca27c9e899993df7721d886249061689c48dbfe60fa7d02a1", - "sha256:4e5afd5477332ceeb960e2002d5bb0b04ad00b40037a0ab1de9916041badcf00", - "sha256:54fe1835f96c1033cdb7e4677497e784704c81d028c962d2222239ded93d978b", - "sha256:580f32cda7f911fef8266c7d811e580c18734cd12308d099b9975b914f33fcaf", - "sha256:5c065a83883af2a9a0303b6c06844a700af0db97ff6dc894324f656ad8efe405", - "sha256:68f2e23eec59fc77bef164157889a2f7fb9800c47d615c58ee3809e2be3c8509", - "sha256:6a4053d5b62cedec83ff67d55e50da35f7736bed0a3b2af51fa6143f5fef3785", - "sha256:6b68b6a12411cfacca16ace22d42ae8e9946315d79f49c6c97089789c235e795", - "sha256:6bee1065d55edfeabdb98211bb673cb44a8b118cded42d743f7d59c07b05a80d", - "sha256:773c60a5368a361253efea194552ff9ed6879756f6feb71b61b514723f8cb726", - "sha256:791d90aa1c68b5485f6340a8dc485aba7e9bcb729572449174ded0692e7e7ad0", - "sha256:7adb4327453c1550f51d6ba13d718a84091f82230c1d0daca6db628e57d0fa5a", - "sha256:80073e897af0669f496d23899583b5c2f0decc2ec06aa7c36a3b8fb16eda5e0e", - "sha256:83b1e8aca6c3fad058d8a2b7653b7496df0c4aca903d589bb0e4184868290767", - "sha256:83ff31d33c1391a0a6b23273b7f839dc8f7b5fb75ddca59ce4f334b83ca822bb", - "sha256:84fd3cfc1cb872019e60a3844b1deedb176de0b9ded11bf30147137ac65185f5", - "sha256:8d4f94b408c9f9218d61e8af55e43c8102f813eea2cf82de10906b032ddcb9aa", - "sha256:8d6d5ab0f12f2d7ae6aad77af67ae6253b6c1d54c320484f1acd2fce38b39ac2", - "sha256:8d9d081cd8e0110661c8a3e728d7b491a903bb54d34de40b17d19144563bd5f6", - "sha256:8f0574d5d97722cfaf51b7dd667c8c836fa9fdf5a7d8158a787b98ee2788f6c5", - "sha256:8f09a16ae84b1decb9df9a7e393ec84a0b2a11da6356c3eedcf86da8cabe3071", - "sha256:91c049f7591d9e9f8bcc3c556c0c4b448223f564ad04511a8719d28f5d38daed", - "sha256:94d8c65f48665f82064bea8a48ff185409a309ba396f5aec3a846831cbe36e6d", - "sha256:98be3e873c8f9d90a982891b2b061521ba4e5e49552ba2d3c1b0806dd5677f88", - "sha256:9a740ddd3f7725c80e500f16b1b02b83a58b47164c0f3ddd9379208629c8c4b5", - "sha256:9abdffc590ef08d27dfd14d32e571f4a0f5f797f433f00c5faf4cf56ab62792a", - "sha256:a0ec73e6d3ad9442cfb5b94c137cf4241fff2860d81a9ee8be8c3d987bb400c0", - "sha256:a181b6ef9b480b56b29bdc58dc50c198e93d33398d2f8e57da05cbddb095bd9e", - "sha256:a2eeee09ff716c8ff75942c1b93f0bca129590499f1127cbeb1b5cefbdc0c3d5", - "sha256:a599cc5cec196c0776faf65b74ac957354bd036f878905a16be9e20884870d02", - "sha256:aa96955f2878116239db55506fe825f574651a8893d07a83de7b3c76a2f0386e", - "sha256:ac6a8a34f858f3862798383f51012788df6be823e2874fa426667a4da94ded7e", - "sha256:ac95981911559c842e1e4532e2f89ca255531db1d87257e5e69cd8c0c0d585fc", - "sha256:ad78fb90540dc752b532345065146371acd3804a917c31fdd8a337951da9def2", - "sha256:aee5dce78e157e503269121ad6f886acab4b1ab3e3956bcdf0549d54596eab57", - "sha256:b27c3e2b1789a635b9df1d74838ae032dc2dbc596ece5d89f9de2c37ba0a6dfe", - "sha256:b4162b96d0908cb0ca218513eab559e9a77c8a1d9705c9133813634d9db27f4f", - "sha256:b4df886481ca27a6d53d30a73625fb86dd308cf7d6d99d32e0dfbfcc8e8a75b9", - "sha256:b51d45cb9ed81669206e338413ba224c06a8900ab0cc9106f4750ac73dc687bb", - "sha256:b6a0617ba60f81a8df3b9ddca09f591a0a0c8269402169825fcd50daa03e5c25", - "sha256:ba2a8fbd21079093118c40e8e80068750c1619a5988e54220ea0929de48e7d65", - "sha256:ba3f47a5b82de7304ae08e2a111ccc90a6ea06ecc3f25d7870d08be0973c94cb", - "sha256:c40acbadc965e72f1b44b3c665a59ec78a5e959757e52520bf73687c84ce6854", - "sha256:cb4bd75518838b141dab8fe663de988c4d08502999068dc0b3949d43bd86ace6", - "sha256:ce40c2a68fe28e05a4f66229c11885ef928086fbcd2eff086decdacfe5254da9", - "sha256:d6cb51a8459e7160366c6c7b31e8f9a671f7d617591c0ad305f2697707061da2", - "sha256:da5b7f35fc824cff36a2baa62486d5b427bf0fd7714c19704b5a7df82c2950b4", - "sha256:daf5e4f6b048c225a494c941a21463a0d397c39a080db8fece9b3136297ed240", - "sha256:dbad2b7dad98b854a468d2c6a0b11464f68ce841428aded2f24f201a17a144eb", - "sha256:dd268701bf930bbb2d12f6f7f75c681e16fee646ea1663d258e825bf919ca7a1", - "sha256:de707808f1997574014d9ba87c2d9f8a619688d615520e3dce958bf4398514c7", - "sha256:de8ec700127b645b0e2e28e694a2bba6dcb6a305ef080ad312f3086d47fb6973", - "sha256:deaf26cc23cfbf90650993108de888533635b981a7157a0234b4753527ac6e5c", - "sha256:e038e187270cbb987cf7c5d4b574fce7a32bc3d9593e9346d129874a7dc08dc3", - "sha256:e1e569953a2abe945f116a6c22b71e8fc02d7c27068af2af40990115f25c93e4", - "sha256:e39ae60598ed533f513db6d0370755685666024ab187a144fc688dd16cfa2d33", - "sha256:e49f412fe58c793af61b04fb5536534dfc95000b6c2bf0bfa42fcf7eb1453d42", - "sha256:e8d71f1611431c445ced872b303cd61f215551a11df0c7171e5993bed84867d5", - "sha256:ed0f99e0037b7f9f7117493e8723851c9eece4629906b2d5da21d3ef124149a2", - "sha256:eead76c172ba08d49ea621016cf84031fff1ee33d7db751d7003e491e55e66af", - "sha256:f5d07dca69bf5a9f1e1cd5756ded6c197a27e8d8f2d8a3d99565add37a3bd1ec", - "sha256:f5d93e77881497f76e77056feea4c375732d27151151273d6e4cb8a1defbf17a", - "sha256:f7cfc25d8143a7570f5e4c9da072a1e1c335d81a6926eb10c1fd3f637fa3c022", - "sha256:fb896fafa206db4d55f4412135c3ae28fbc56b8afc476970d0c5f29d2ce50948" + "sha256:01a12f6afc5d339774ea674e821821eb4ec007479b66632a155709b60e70a809", + "sha256:063cd9e81b0b49374186aa357e3ac196ac7a26f006590724eb1f1034b40cd6de", + "sha256:1028697f5c6b0e0bf9a0a4497ac61f35dd7e02d513f8359110102a661b67a7ac", + "sha256:10400e0896f68ae6d7e6644ebf1bc8dc2006ac369fde5352bdbe10465e1bbea0", + "sha256:11745d85ebe028c6dc773028a6da8705f499beb71f09b69477c2e1a47411d0bd", + "sha256:11bb0cbbb77721339c86e0779a73a5878b401607503321fd9ae338e2526873e5", + "sha256:120d954eba295cdee334d319f3c35c5dee439d5a709cff01112325d5c6bb017b", + "sha256:16bf1cce7d0038289b34e1cfba92686c54e866e0697a3b8e68423f8ec8a22805", + "sha256:179927453ab594b117c8ca7ce1de8ff456cd45a636c8bd5bfece8daddb66eb39", + "sha256:1a35b3addcd170e58ad170f3b11678d6e8467ac0bd8c8c1493259c1e35b61e95", + "sha256:1b7a86dc041be2904291bc66047ea94814a258dcb2ef7c424ccee8049daf7d1f", + "sha256:1ccaec24cce386f3207288d6bb30b00e2ac586e30c298a24db63f37d6dd2aa42", + "sha256:1e2be097a878e673e2ec0df345943aba4b58781245d298cc192d88741dcaeb6c", + "sha256:2615f2cf97ead0890662eca39e8973a8b9230d6ca7d20f4e602aa8ee1d4a4da0", + "sha256:27f633a6d7c87005766ee23c7beb6c41705045d72b232e2f8bf1496d1b58267e", + "sha256:2f677f95076b92c0042887a136e641c01667332e0a16b19155f3d4026311ddb2", + "sha256:3044abd371698aeba51e1e149baa8228293991d1b56a1bec3f676960a9f2d019", + "sha256:30741f77db0079e8af5c42e6e7b564d491dabfc1e9d40f52d5ed4c1c197502df", + "sha256:3905cc8cb5e2dd40985f30c5e2356af92b8c945bfb2441a3bf1b5b31bc793c49", + "sha256:43abe1c771e1b7caf3e1c230951e0d0ec966a02af55ebdb55b8a11e83b33b3d9", + "sha256:4a22e5f762a3869bf25d88c6ea1ae99e4227660814650b17df537eee9dd7fc2f", + "sha256:4a7c850771f981a31f0c6826f9f5cec98e7f6efae1611adcb6ba7dccb935a85f", + "sha256:5314094d06c5e9b5046d619c3742b8d4c7c7b69360f9e1c21c15b083fa1ac098", + "sha256:5376126ff87379f4b63226106ca49d7f13a09749e1f016ad24a4549032c06b9a", + "sha256:5a27eeb401f90be74bff43f74ade235e94b13af99e39a7210fa1ff224fb70956", + "sha256:5d567fa4592f7138d1bc6565bf1a3b459337b439671aaabc10ee7c59b794605e", + "sha256:5fa1cb29b9ceb12559cb5cd68b4a06536373ca20c5611111ef008eecee8bf1a5", + "sha256:602098d423ebdd7babe3002a39068ed714b8f77c1694abbe29dfc8bac5e19e6a", + "sha256:61dd2c8ef4b564dccba1af7d560653d2c0b18eeed64d0d0386bf47cfc0416a7c", + "sha256:65190371f7a1bf8a66279801ef3a411dd50ee8670cd646a17c4a2a8d86cbbdf8", + "sha256:65c6b917b289989026cd86c66a1db97d8728e82149487ab8f264b347f36fcabb", + "sha256:6d83b98342aeb3c2ace9416f2f3112ad9a4773ecd38de1314afa6a5afbb09e83", + "sha256:6ddf120cf7862e9889b8a24530439528a92bfa0aca822d10ebf8c72c1e887d8a", + "sha256:6e5de3acb7ba3b24fc4ce45f21c1ac02ed52f88131916b393a65018e3a413a51", + "sha256:7283fbbe32824e1f029296683f2982f3def2637cf1e1870b2669fced4d7591e2", + "sha256:755b292271c55d2ed96ba7e1043dccf7f505c1688a40a824cc55874b1ddbed17", + "sha256:7624bcd56d28c59c3a58beb546d761540b5d57bde6f34ff098e4136366734523", + "sha256:79c4b7a5b61a53019eada388d279b976289a333e8e49da00c58227f7319d9ec8", + "sha256:79f621648bc4e2a51217feabdbde9202206f100381008d2730f37313420ca76c", + "sha256:7af0c851a754d715e921fad1c027a6f75b3681bf0ec8732172b0648c61830ded", + "sha256:7d3205ace3e018bcf40a706da89cbf81521f8e10402080e90b0e88643c2235ef", + "sha256:7eeb2f8ec443aa1aaca02d9e2705482506f90ad77a95b117e11b66b2cd965ef7", + "sha256:805014161362eb9fd7119c5921ef4c8a4f4181004e5ca8ca735219e95fe84aeb", + "sha256:805c8d3d7c0a7b9115b4a00042221d539081fc36d4cc034aac0ef04c4311b21e", + "sha256:8104e2a3b3400bc7dd965e67e1d1902fe234a03116c6a4a012504156ce884d37", + "sha256:821bf713af7763e1dae60b5b5758db904ad353199867e203cf38ea263f4f54e3", + "sha256:82b36669f3287ac2bc2ea9493f3ba3d038c448e0c101cad39cb91283481d8482", + "sha256:85ca97e74c10d45dfa3e7b0568343bd7272de5da3ba028146dfccb0534f7a2e4", + "sha256:85fe357e99bcce4ce337b510fd27fa9efae2df758773cd983b5c2645636b8659", + "sha256:894a8e4d3e0014ccbca4de7cf8b20e77965a2d20ff74b4456ce3672c9590324d", + "sha256:8abdb50bd6ddc7cdbf591ba00e7a69f2e42e1936cf27f48b80d66ed9123912e0", + "sha256:8bae2444921cab38ecf8f42d60863f8263a30a8930bf24c82ec587b364bd816f", + "sha256:936f23e2b9cebbcd39c0760bc9d7d974aa94cd7cbd8e8581b2aaafd4582fd05a", + "sha256:971fdb684df048a8e3348b44fab9afe5cdf33f8db63300dbfd9ead87b0cfe733", + "sha256:97bc1969f535e1db324b6798074534405a510c53505525fb05974f34fedef42f", + "sha256:995c46570e703c1f11524e82ba5fcbdd38a8b462fa13e42ce53d4d2310512fa5", + "sha256:a60eb9dda0c1f47eb78914c9bbc1bbb49d0a32427c11779a98faf5f8429f9f7f", + "sha256:ab85c6a9a701c3d25367624b38ba97241a77932263191ac55d8041d2a2435c09", + "sha256:ad539e28021d489b113c3c0f15775efd72bff4d87cf3adb9f669bf86270eaefb", + "sha256:b19939ef72c37e893d00400fb4205e344d5dfb3dc5aad7871cd0b0f346117576", + "sha256:b39aa709f37e20d03e37cc2f7c25f3e69d565a5446c4f22915a0b2365b7991ff", + "sha256:bb409d9449ca1027d0dea3a754f84fb783b44bfa256f3e4972e5aeaec8502a1d", + "sha256:bc257865914ce11d4c5685033314245c55501c8a337331ae9cc6207e67eac20d", + "sha256:bef9072fa8308a5721b63c169abe074fa46e4f1f56cdd4d23820fd9a4385e470", + "sha256:c734d54b5fbdcfea605f7365dedb7083e7499d394fbd03378d663b398e9790ad", + "sha256:c7e110790d8400846488b7f3cc06bda0a638033af8f0994ea1b2c78af4af988b", + "sha256:c87f3d04d90dec2b6d802c589f9ddbe8bc27d060af848e0ff4dfb78def9be49e", + "sha256:c882cc197d8dab88f4226dd77101bdcf04be281c8a007991cf1ba81fde086598", + "sha256:c9a0b1a5ab19c58ef4a111587e37ccb725e3da629d4291499d91a893e82acbe3", + "sha256:d211283a01927baa336c326de02d4642c5cfc90a5f031311304a76481f48a6a0", + "sha256:d2db790ba8317fea823221089260687ef382758a32564b8b12c3e6c54be292c8", + "sha256:d592166beedfa9e0383f913c1562a933bae9aa49380d70aaa65c100cc63dec20", + "sha256:d93ab6ac3dae43fe2a4192a33521aae332826b9643089a0600eb4160d5a7b044", + "sha256:d9ff479a7c92012fd9778c1184f8ccb40f196a86704c337a5d3920f47ca4aa24", + "sha256:e00a9123e7dc1975e5f9b06fa4e764ba579549b32de559b94460f32b2ba1791c", + "sha256:e027a2dfd3c12115af44ae8eddf077e67b5a04cef5a46a2942c1b4e4c422fcd8", + "sha256:e0da28db21654a28512c290eb5f210f933504e879d9afb70e7561add4e5a44a7", + "sha256:e26e69cf9a9c81a19b4846dc23f3ef3dfe1cf8d8525474e646dd51a21f94b634", + "sha256:e7487e9caeaafce8eeea1376b2380cfd0108ba8edeec95de30cfde12cd282e06", + "sha256:ebb449658b8baf639c06af520b9d68ca476622d6764f3856c2b34fed05c51617", + "sha256:ebc38e20e8c67cc82687a68d006a9e4ce2924b6c8ec8d156475dba95fa7a7eb6", + "sha256:ebdd360f7e9cc30ddbd54f094e1255c981ade8af3ce0a51bf56857eef047e90f", + "sha256:ef61d5d7dc0e1e70a71777dd08333f1f90700f279588d320bdd7a1c47e7f4d13", + "sha256:f119d57ca994813ea8715c8f694b724a0a18b9dd53263955d83bc38e48dc2482", + "sha256:f19960c240488790c932af7fbd6191ce1d990820d9a0ef100da3dcfa88fd9595", + "sha256:f32a4541667003cfa4d2abfdb19579231653d73bf97d50af298b17be1541dd08", + "sha256:f8a94f18224678eca6989206ec7432d75d1250e7a85a167cb96aeade4f40ad71", + "sha256:f90c5075fb8971e10b1287cff38ce5556d398132a938d407cb89e213d25d62e5", + "sha256:ff8afee5e8da945e81632989457851ac76ea1ef0668797b886bb37071929a64b" ], "index": "pypi", - "version": "==2.13.2" + "version": "==2.13.3" }, "redis": { "extras": [ "hiredis" ], "hashes": [ - "sha256:a52d5694c9eb4292770084fa8c863f79367ca19884b329ab574d5cb2036b3e54", - "sha256:ddf27071df4adf3821c4f2ca59d67525c3a82e5f268bed97b813cb4fabf87880" + "sha256:7b8c87d19c45d3f1271b124858d2a5c13160c4e74d4835e28273400fa34d5228", + "sha256:cae3ee5d1f57d8caf534cd8764edf3163c77e073bdd74b6f54a87ffafdc5e7d9" ], "index": "pypi", - "version": "==4.3.4" + "version": "==4.4.0" }, "regex": { "hashes": [ - "sha256:0008650041531d0eadecc96a73d37c2dc4821cf51b0766e374cb4f1ddc4e1c14", - "sha256:03299b0bcaa7824eb7c0ebd7ef1e3663302d1b533653bfe9dc7e595d453e2ae9", - "sha256:06b1df01cf2aef3a9790858af524ae2588762c8a90e784ba00d003f045306204", - "sha256:09b4b6ccc61d4119342b26246ddd5a04accdeebe36bdfe865ad87a0784efd77f", - "sha256:0be0c34a39e5d04a62fd5342f0886d0e57592a4f4993b3f9d257c1f688b19737", - "sha256:0d96eec8550fd2fd26f8e675f6d8b61b159482ad8ffa26991b894ed5ee19038b", - "sha256:0eb0e2845e81bdea92b8281a3969632686502565abf4a0b9e4ab1471c863d8f3", - "sha256:13bbf0c9453c6d16e5867bda7f6c0c7cff1decf96c5498318bb87f8136d2abd4", - "sha256:17e51ad1e6131c496b58d317bc9abec71f44eb1957d32629d06013a21bc99cac", - "sha256:1977bb64264815d3ef016625adc9df90e6d0e27e76260280c63eca993e3f455f", - "sha256:1e30762ddddb22f7f14c4f59c34d3addabc789216d813b0f3e2788d7bcf0cf29", - "sha256:1e73652057473ad3e6934944af090852a02590c349357b79182c1b681da2c772", - "sha256:20e6a27959f162f979165e496add0d7d56d7038237092d1aba20b46de79158f1", - "sha256:286ff9ec2709d56ae7517040be0d6c502642517ce9937ab6d89b1e7d0904f863", - "sha256:297c42ede2c81f0cb6f34ea60b5cf6dc965d97fa6936c11fc3286019231f0d66", - "sha256:320c2f4106962ecea0f33d8d31b985d3c185757c49c1fb735501515f963715ed", - "sha256:35ed2f3c918a00b109157428abfc4e8d1ffabc37c8f9abc5939ebd1e95dabc47", - "sha256:3d146e5591cb67c5e836229a04723a30af795ef9b70a0bbd913572e14b7b940f", - "sha256:42bb37e2b2d25d958c25903f6125a41aaaa1ed49ca62c103331f24b8a459142f", - "sha256:42d6007722d46bd2c95cce700181570b56edc0dcbadbfe7855ec26c3f2d7e008", - "sha256:43eba5c46208deedec833663201752e865feddc840433285fbadee07b84b464d", - "sha256:452519bc4c973e961b1620c815ea6dd8944a12d68e71002be5a7aff0a8361571", - "sha256:4b9c16a807b17b17c4fa3a1d8c242467237be67ba92ad24ff51425329e7ae3d0", - "sha256:5510932596a0f33399b7fff1bd61c59c977f2b8ee987b36539ba97eb3513584a", - "sha256:55820bc631684172b9b56a991d217ec7c2e580d956591dc2144985113980f5a3", - "sha256:57484d39447f94967e83e56db1b1108c68918c44ab519b8ecfc34b790ca52bf7", - "sha256:58ba41e462653eaf68fc4a84ec4d350b26a98d030be1ab24aba1adcc78ffe447", - "sha256:5bc5f921be39ccb65fdda741e04b2555917a4bced24b4df14eddc7569be3b493", - "sha256:5dcc4168536c8f68654f014a3db49b6b4a26b226f735708be2054314ed4964f4", - "sha256:5f92a7cdc6a0ae2abd184e8dfd6ef2279989d24c85d2c85d0423206284103ede", - "sha256:67250b36edfa714ba62dc62d3f238e86db1065fccb538278804790f578253640", - "sha256:6df070a986fc064d865c381aecf0aaff914178fdf6874da2f2387e82d93cc5bd", - "sha256:729aa8ca624c42f309397c5fc9e21db90bf7e2fdd872461aabdbada33de9063c", - "sha256:72bc3a5effa5974be6d965ed8301ac1e869bc18425c8a8fac179fbe7876e3aee", - "sha256:74d86e8924835f863c34e646392ef39039405f6ce52956d8af16497af4064a30", - "sha256:79e5af1ff258bc0fe0bdd6f69bc4ae33935a898e3cbefbbccf22e88a27fa053b", - "sha256:7b103dffb9f6a47ed7ffdf352b78cfe058b1777617371226c1894e1be443afec", - "sha256:83f03f0bd88c12e63ca2d024adeee75234d69808b341e88343b0232329e1f1a1", - "sha256:86d7a68fa53688e1f612c3246044157117403c7ce19ebab7d02daf45bd63913e", - "sha256:878c626cbca3b649e14e972c14539a01191d79e58934e3f3ef4a9e17f90277f8", - "sha256:878f5d649ba1db9f52cc4ef491f7dba2d061cdc48dd444c54260eebc0b1729b9", - "sha256:87bc01226cd288f0bd9a4f9f07bf6827134dc97a96c22e2d28628e824c8de231", - "sha256:8babb2b5751105dc0aef2a2e539f4ba391e738c62038d8cb331c710f6b0f3da7", - "sha256:91e0f7e7be77250b808a5f46d90bf0032527d3c032b2131b63dee54753a4d729", - "sha256:9557545c10d52c845f270b665b52a6a972884725aa5cf12777374e18f2ea8960", - "sha256:9ccb0a4ab926016867260c24c192d9df9586e834f5db83dfa2c8fffb3a6e5056", - "sha256:9d828c5987d543d052b53c579a01a52d96b86f937b1777bbfe11ef2728929357", - "sha256:9efa41d1527b366c88f265a227b20bcec65bda879962e3fc8a2aee11e81266d7", - "sha256:aaf5317c961d93c1a200b9370fb1c6b6836cc7144fef3e5a951326912bf1f5a3", - "sha256:ab69b4fe09e296261377d209068d52402fb85ef89dc78a9ac4a29a895f4e24a7", - "sha256:ad397bc7d51d69cb07ef89e44243f971a04ce1dca9bf24c992c362406c0c6573", - "sha256:ae17fc8103f3b63345709d3e9654a274eee1c6072592aec32b026efd401931d0", - "sha256:af4d8cc28e4c7a2f6a9fed544228c567340f8258b6d7ea815b62a72817bbd178", - "sha256:b22ff939a8856a44f4822da38ef4868bd3a9ade22bb6d9062b36957c850e404f", - "sha256:b549d851f91a4efb3e65498bd4249b1447ab6035a9972f7fc215eb1f59328834", - "sha256:be319f4eb400ee567b722e9ea63d5b2bb31464e3cf1b016502e3ee2de4f86f5c", - "sha256:c0446b2871335d5a5e9fcf1462f954586b09a845832263db95059dcd01442015", - "sha256:c68d2c04f7701a418ec2e5631b7f3552efc32f6bcc1739369c6eeb1af55f62e0", - "sha256:c87ac58b9baaf50b6c1b81a18d20eda7e2883aa9a4fb4f1ca70f2e443bfcdc57", - "sha256:caa2734ada16a44ae57b229d45091f06e30a9a52ace76d7574546ab23008c635", - "sha256:cb34c2d66355fb70ae47b5595aafd7218e59bb9c00ad8cc3abd1406ca5874f07", - "sha256:cb3652bbe6720786b9137862205986f3ae54a09dec8499a995ed58292bdf77c2", - "sha256:cf668f26604e9f7aee9f8eaae4ca07a948168af90b96be97a4b7fa902a6d2ac1", - "sha256:d326ff80ed531bf2507cba93011c30fff2dd51454c85f55df0f59f2030b1687b", - "sha256:d6c2441538e4fadd4291c8420853431a229fcbefc1bf521810fbc2629d8ae8c2", - "sha256:d6ecfd1970b3380a569d7b3ecc5dd70dba295897418ed9e31ec3c16a5ab099a5", - "sha256:e5602a9b5074dcacc113bba4d2f011d2748f50e3201c8139ac5b68cf2a76bd8b", - "sha256:ef806f684f17dbd6263d72a54ad4073af42b42effa3eb42b877e750c24c76f86", - "sha256:f3356afbb301ec34a500b8ba8b47cba0b44ed4641c306e1dd981a08b416170b5", - "sha256:f6f7ee2289176cb1d2c59a24f50900f8b9580259fa9f1a739432242e7d254f93", - "sha256:f7e8f1ee28e0a05831c92dc1c0c1c94af5289963b7cf09eca5b5e3ce4f8c91b0", - "sha256:f8169ec628880bdbca67082a9196e2106060a4a5cbd486ac51881a4df805a36f", - "sha256:fbc88d3ba402b5d041d204ec2449c4078898f89c4a6e6f0ed1c1a510ef1e221d", - "sha256:fbd3fe37353c62fd0eb19fb76f78aa693716262bcd5f9c14bb9e5aca4b3f0dc4" + "sha256:052b670fafbe30966bbe5d025e90b2a491f85dfe5b2583a163b5e60a85a321ad", + "sha256:0653d012b3bf45f194e5e6a41df9258811ac8fc395579fa82958a8b76286bea4", + "sha256:0a069c8483466806ab94ea9068c34b200b8bfc66b6762f45a831c4baaa9e8cdd", + "sha256:0cf0da36a212978be2c2e2e2d04bdff46f850108fccc1851332bcae51c8907cc", + "sha256:131d4be09bea7ce2577f9623e415cab287a3c8e0624f778c1d955ec7c281bd4d", + "sha256:144486e029793a733e43b2e37df16a16df4ceb62102636ff3db6033994711066", + "sha256:1ddf14031a3882f684b8642cb74eea3af93a2be68893901b2b387c5fd92a03ec", + "sha256:1eba476b1b242620c266edf6325b443a2e22b633217a9835a52d8da2b5c051f9", + "sha256:20f61c9944f0be2dc2b75689ba409938c14876c19d02f7585af4460b6a21403e", + "sha256:22960019a842777a9fa5134c2364efaed5fbf9610ddc5c904bd3a400973b0eb8", + "sha256:22e7ebc231d28393dfdc19b185d97e14a0f178bedd78e85aad660e93b646604e", + "sha256:23cbb932cc53a86ebde0fb72e7e645f9a5eec1a5af7aa9ce333e46286caef783", + "sha256:29c04741b9ae13d1e94cf93fca257730b97ce6ea64cfe1eba11cf9ac4e85afb6", + "sha256:2bde29cc44fa81c0a0c8686992c3080b37c488df167a371500b2a43ce9f026d1", + "sha256:2cdc55ca07b4e70dda898d2ab7150ecf17c990076d3acd7a5f3b25cb23a69f1c", + "sha256:370f6e97d02bf2dd20d7468ce4f38e173a124e769762d00beadec3bc2f4b3bc4", + "sha256:395161bbdbd04a8333b9ff9763a05e9ceb4fe210e3c7690f5e68cedd3d65d8e1", + "sha256:44136355e2f5e06bf6b23d337a75386371ba742ffa771440b85bed367c1318d1", + "sha256:44a6c2f6374e0033873e9ed577a54a3602b4f609867794c1a3ebba65e4c93ee7", + "sha256:4919899577ba37f505aaebdf6e7dc812d55e8f097331312db7f1aab18767cce8", + "sha256:4b4b1fe58cd102d75ef0552cf17242705ce0759f9695334a56644ad2d83903fe", + "sha256:4bdd56ee719a8f751cf5a593476a441c4e56c9b64dc1f0f30902858c4ef8771d", + "sha256:4bf41b8b0a80708f7e0384519795e80dcb44d7199a35d52c15cc674d10b3081b", + "sha256:4cac3405d8dda8bc6ed499557625585544dd5cbf32072dcc72b5a176cb1271c8", + "sha256:4fe7fda2fe7c8890d454f2cbc91d6c01baf206fbc96d89a80241a02985118c0c", + "sha256:50921c140561d3db2ab9f5b11c5184846cde686bb5a9dc64cae442926e86f3af", + "sha256:5217c25229b6a85049416a5c1e6451e9060a1edcf988641e309dbe3ab26d3e49", + "sha256:5352bea8a8f84b89d45ccc503f390a6be77917932b1c98c4cdc3565137acc714", + "sha256:542e3e306d1669b25936b64917285cdffcd4f5c6f0247636fec037187bd93542", + "sha256:543883e3496c8b6d58bd036c99486c3c8387c2fc01f7a342b760c1ea3158a318", + "sha256:586b36ebda81e6c1a9c5a5d0bfdc236399ba6595e1397842fd4a45648c30f35e", + "sha256:597f899f4ed42a38df7b0e46714880fb4e19a25c2f66e5c908805466721760f5", + "sha256:5a260758454580f11dd8743fa98319bb046037dfab4f7828008909d0aa5292bc", + "sha256:5aefb84a301327ad115e9d346c8e2760009131d9d4b4c6b213648d02e2abe144", + "sha256:5e6a5567078b3eaed93558842346c9d678e116ab0135e22eb72db8325e90b453", + "sha256:5ff525698de226c0ca743bfa71fc6b378cda2ddcf0d22d7c37b1cc925c9650a5", + "sha256:61edbca89aa3f5ef7ecac8c23d975fe7261c12665f1d90a6b1af527bba86ce61", + "sha256:659175b2144d199560d99a8d13b2228b85e6019b6e09e556209dfb8c37b78a11", + "sha256:6a9a19bea8495bb419dc5d38c4519567781cd8d571c72efc6aa959473d10221a", + "sha256:6b30bddd61d2a3261f025ad0f9ee2586988c6a00c780a2fb0a92cea2aa702c54", + "sha256:6ffd55b5aedc6f25fd8d9f905c9376ca44fcf768673ffb9d160dd6f409bfda73", + "sha256:702d8fc6f25bbf412ee706bd73019da5e44a8400861dfff7ff31eb5b4a1276dc", + "sha256:74bcab50a13960f2a610cdcd066e25f1fd59e23b69637c92ad470784a51b1347", + "sha256:75f591b2055523fc02a4bbe598aa867df9e953255f0b7f7715d2a36a9c30065c", + "sha256:763b64853b0a8f4f9cfb41a76a4a85a9bcda7fdda5cb057016e7706fde928e66", + "sha256:76c598ca73ec73a2f568e2a72ba46c3b6c8690ad9a07092b18e48ceb936e9f0c", + "sha256:78d680ef3e4d405f36f0d6d1ea54e740366f061645930072d39bca16a10d8c93", + "sha256:7b280948d00bd3973c1998f92e22aa3ecb76682e3a4255f33e1020bd32adf443", + "sha256:7db345956ecce0c99b97b042b4ca7326feeec6b75facd8390af73b18e2650ffc", + "sha256:7dbdce0c534bbf52274b94768b3498abdf675a691fec5f751b6057b3030f34c1", + "sha256:7ef6b5942e6bfc5706301a18a62300c60db9af7f6368042227ccb7eeb22d0892", + "sha256:7f5a3ffc731494f1a57bd91c47dc483a1e10048131ffb52d901bfe2beb6102e8", + "sha256:8a45b6514861916c429e6059a55cf7db74670eaed2052a648e3e4d04f070e001", + "sha256:8ad241da7fac963d7573cc67a064c57c58766b62a9a20c452ca1f21050868dfa", + "sha256:8b0886885f7323beea6f552c28bff62cbe0983b9fbb94126531693ea6c5ebb90", + "sha256:8ca88da1bd78990b536c4a7765f719803eb4f8f9971cc22d6ca965c10a7f2c4c", + "sha256:8e0caeff18b96ea90fc0eb6e3bdb2b10ab5b01a95128dfeccb64a7238decf5f0", + "sha256:957403a978e10fb3ca42572a23e6f7badff39aa1ce2f4ade68ee452dc6807692", + "sha256:9af69f6746120998cd9c355e9c3c6aec7dff70d47247188feb4f829502be8ab4", + "sha256:9c94f7cc91ab16b36ba5ce476f1904c91d6c92441f01cd61a8e2729442d6fcf5", + "sha256:a37d51fa9a00d265cf73f3de3930fa9c41548177ba4f0faf76e61d512c774690", + "sha256:a3a98921da9a1bf8457aeee6a551948a83601689e5ecdd736894ea9bbec77e83", + "sha256:a3c1ebd4ed8e76e886507c9eddb1a891673686c813adf889b864a17fafcf6d66", + "sha256:a5f9505efd574d1e5b4a76ac9dd92a12acb2b309551e9aa874c13c11caefbe4f", + "sha256:a8ff454ef0bb061e37df03557afda9d785c905dab15584860f982e88be73015f", + "sha256:a9d0b68ac1743964755ae2d89772c7e6fb0118acd4d0b7464eaf3921c6b49dd4", + "sha256:aa62a07ac93b7cb6b7d0389d8ef57ffc321d78f60c037b19dfa78d6b17c928ee", + "sha256:ac741bf78b9bb432e2d314439275235f41656e189856b11fb4e774d9f7246d81", + "sha256:ae1e96785696b543394a4e3f15f3f225d44f3c55dafe3f206493031419fedf95", + "sha256:b683e5fd7f74fb66e89a1ed16076dbab3f8e9f34c18b1979ded614fe10cdc4d9", + "sha256:b7a8b43ee64ca8f4befa2bea4083f7c52c92864d8518244bfa6e88c751fa8fff", + "sha256:b8e38472739028e5f2c3a4aded0ab7eadc447f0d84f310c7a8bb697ec417229e", + "sha256:bfff48c7bd23c6e2aec6454aaf6edc44444b229e94743b34bdcdda2e35126cf5", + "sha256:c14b63c9d7bab795d17392c7c1f9aaabbffd4cf4387725a0ac69109fb3b550c6", + "sha256:c27cc1e4b197092e50ddbf0118c788d9977f3f8f35bfbbd3e76c1846a3443df7", + "sha256:c28d3309ebd6d6b2cf82969b5179bed5fefe6142c70f354ece94324fa11bf6a1", + "sha256:c670f4773f2f6f1957ff8a3962c7dd12e4be54d05839b216cb7fd70b5a1df394", + "sha256:ce6910b56b700bea7be82c54ddf2e0ed792a577dfaa4a76b9af07d550af435c6", + "sha256:d0213671691e341f6849bf33cd9fad21f7b1cb88b89e024f33370733fec58742", + "sha256:d03fe67b2325cb3f09be029fd5da8df9e6974f0cde2c2ac6a79d2634e791dd57", + "sha256:d0e5af9a9effb88535a472e19169e09ce750c3d442fb222254a276d77808620b", + "sha256:d243b36fbf3d73c25e48014961e83c19c9cc92530516ce3c43050ea6276a2ab7", + "sha256:d26166acf62f731f50bdd885b04b38828436d74e8e362bfcb8df221d868b5d9b", + "sha256:d403d781b0e06d2922435ce3b8d2376579f0c217ae491e273bab8d092727d244", + "sha256:d8716f82502997b3d0895d1c64c3b834181b1eaca28f3f6336a71777e437c2af", + "sha256:e4f781ffedd17b0b834c8731b75cce2639d5a8afe961c1e58ee7f1f20b3af185", + "sha256:e613a98ead2005c4ce037c7b061f2409a1a4e45099edb0ef3200ee26ed2a69a8", + "sha256:ef4163770525257876f10e8ece1cf25b71468316f61451ded1a6f44273eedeb5" ], "markers": "python_version >= '3.6'", - "version": "==2022.3.2" + "version": "==2022.10.31" }, "reportlab": { "hashes": [ @@ -1539,11 +1553,11 @@ }, "setuptools": { "hashes": [ - "sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31", - "sha256:e197a19aa8ec9722928f2206f8de752def0e4c9fc6953527360d1c36d94ddb2f" + "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54", + "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75" ], "markers": "python_version >= '3.7'", - "version": "==65.5.1" + "version": "==65.6.3" }, "six": { "hashes": [ @@ -1638,11 +1652,11 @@ }, "tzdata": { "hashes": [ - "sha256:04a680bdc5b15750c39c12a448885a51134a27ec9af83667663f0b3a1bf3f342", - "sha256:91f11db4503385928c15598c98573e3af07e7229181bee5375bd30f1695ddcae" + "sha256:2b88858b0e3120792a3c0635c23daf36a7d7eeeca657c323da299d2094402a0d", + "sha256:fe5f866eddd8b96e9fcba978f8e503c909b19ea7efda11e52e39494bad3a7bfa" ], "markers": "python_version >= '3.6'", - "version": "==2022.6" + "version": "==2022.7" }, "tzlocal": { "hashes": [ @@ -1654,22 +1668,22 @@ }, "urllib3": { "hashes": [ - "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e", - "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" + "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc", + "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' and python_version < '4'", - "version": "==1.26.12" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==1.26.13" }, "uvicorn": { "extras": [ "standard" ], "hashes": [ - "sha256:cc277f7e73435748e69e075a721841f7c4a95dba06d12a72fe9874acced16f6f", - "sha256:cf538f3018536edb1f4a826311137ab4944ed741d52aeb98846f52215de57f25" + "sha256:a4e12017b940247f836bc90b72e725d7dfd0c8ed1c51eb365f5ba30d9f5127d8", + "sha256:c3ed1598a5668208723f2bb49336f4509424ad198d6ab2615b7783db58d919fd" ], "index": "pypi", - "version": "==0.19.0" + "version": "==0.20.0" }, "uvloop": { "hashes": [ @@ -1945,57 +1959,53 @@ }, "zipp": { "hashes": [ - "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1", - "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8" + "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa", + "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766" ], "markers": "python_version < '3.9'", - "version": "==3.10.0" + "version": "==3.11.0" }, "zope.interface": { "hashes": [ - "sha256:026e7da51147910435950a46c55159d68af319f6e909f14873d35d411f4961db", - "sha256:061a41a3f96f076686d7f1cb87f3deec6f0c9f0325dcc054ac7b504ae9bb0d82", - "sha256:0eda7f61da6606a28b5efa5d8ad79b4b5bb242488e53a58993b2ec46c924ffee", - "sha256:13a7c6e3df8aa453583412de5725bf761217d06f66ff4ed776d44fbcd13ec4e4", - "sha256:185f0faf6c3d8f2203e8755f7ca16b8964d97da0abde89c367177a04e36f2568", - "sha256:2204a9d545fdbe0d9b0bf4d5e2fc67e7977de59666f7131c1433fde292fc3b41", - "sha256:27c53aa2f46d42940ccdcb015fd525a42bf73f94acd886296794a41f229d5946", - "sha256:3c293c5c0e1cabe59c33e0d02fcee5c3eb365f79a20b8199a26ca784e406bd0d", - "sha256:3e42b1c3f4fd863323a8275c52c78681281a8f2e1790f0e869d911c1c7b25c46", - "sha256:3e5540b7d703774fd171b7a7dc2a3cb70e98fc273b8b260b1bf2f7d3928f125b", - "sha256:4477930451521ac7da97cc31d49f7b83086d5ae76e52baf16aac659053119f6d", - "sha256:475b6e371cdbeb024f2302e826222bdc202186531f6dc095e8986c034e4b7961", - "sha256:489c4c46fcbd9364f60ff0dcb93ec9026eca64b2f43dc3b05d0724092f205e27", - "sha256:509a8d39b64a5e8d473f3f3db981f3ca603d27d2bc023c482605c1b52ec15662", - "sha256:58331d2766e8e409360154d3178449d116220348d46386430097e63d02a1b6d2", - "sha256:59a96d499ff6faa9b85b1309f50bf3744eb786e24833f7b500cbb7052dc4ae29", - "sha256:6cb8f9a1db47017929634264b3fc7ea4c1a42a3e28d67a14f14aa7b71deaa0d2", - "sha256:6d678475fdeb11394dc9aaa5c564213a1567cc663082e0ee85d52f78d1fbaab2", - "sha256:72a93445937cc71f0b8372b0c9e7c185328e0db5e94d06383a1cb56705df1df4", - "sha256:76cf472c79d15dce5f438a4905a1309be57d2d01bc1de2de30bda61972a79ab4", - "sha256:7b4547a2f624a537e90fb99cec4d8b3b6be4af3f449c3477155aae65396724ad", - "sha256:7f2e4ebe0a000c5727ee04227cf0ff5ae612fe599f88d494216e695b1dac744d", - "sha256:8343536ea4ee15d6525e3e726bb49ffc3f2034f828a49237a36be96842c06e7c", - "sha256:8de7bde839d72d96e0c92e8d1fdb4862e89b8fc52514d14b101ca317d9bcf87c", - "sha256:90f611d4cdf82fb28837fe15c3940255755572a4edf4c72e2306dbce7dcb3092", - "sha256:9ad58724fabb429d1ebb6f334361f0a3b35f96be0e74bfca6f7de8530688b2df", - "sha256:a1393229c9c126dd1b4356338421e8882347347ab6fe3230cb7044edc813e424", - "sha256:a20fc9cccbda2a28e8db8cabf2f47fead7e9e49d317547af6bf86a7269e4b9a1", - "sha256:a69f6d8b639f2317ba54278b64fef51d8250ad2c87acac1408b9cc461e4d6bb6", - "sha256:a6f51ffbdcf865f140f55c484001415505f5e68eb0a9eab1d37d0743b503b423", - "sha256:c9552ee9e123b7997c7630fb95c466ee816d19e721c67e4da35351c5f4032726", - "sha256:cd423d49abcf0ebf02c29c3daffe246ff756addb891f8aab717b3a4e2e1fd675", - "sha256:d0587d238b7867544134f4dcca19328371b8fd03fc2c56d15786f410792d0a68", - "sha256:d1f2d91c9c6cd54d750fa34f18bd73c71b372d0e6d06843bc7a5f21f5fd66fe0", - "sha256:d2f2ec42fbc21e1af5f129ec295e29fee6f93563e6388656975caebc5f851561", - "sha256:d743b03a72fefed807a4512c079fb1aa5e7777036cc7a4b6ff79ae4650a14f73", - "sha256:dd4b9251e95020c3d5d104b528dbf53629d09c146ce9c8dfaaf8f619ae1cce35", - "sha256:e4988d94962f517f6da2d52337170b84856905b31b7dc504ed9c7b7e4bab2fc3", - "sha256:e6a923d2dec50f2b4d41ce198af3516517f2e458220942cf393839d2f9e22000", - "sha256:e8c8764226daad39004b7873c3880eb4860c594ff549ea47c045cdf313e1bad5" + "sha256:008b0b65c05993bb08912f644d140530e775cf1c62a072bf9340c2249e613c32", + "sha256:0217a9615531c83aeedb12e126611b1b1a3175013bbafe57c702ce40000eb9a0", + "sha256:0fb497c6b088818e3395e302e426850f8236d8d9f4ef5b2836feae812a8f699c", + "sha256:17ebf6e0b1d07ed009738016abf0d0a0f80388e009d0ac6e0ead26fc162b3b9c", + "sha256:311196634bb9333aa06f00fc94f59d3a9fddd2305c2c425d86e406ddc6f2260d", + "sha256:3218ab1a7748327e08ef83cca63eea7cf20ea7e2ebcb2522072896e5e2fceedf", + "sha256:404d1e284eda9e233c90128697c71acffd55e183d70628aa0bbb0e7a3084ed8b", + "sha256:4087e253bd3bbbc3e615ecd0b6dd03c4e6a1e46d152d3be6d2ad08fbad742dcc", + "sha256:40f4065745e2c2fa0dff0e7ccd7c166a8ac9748974f960cd39f63d2c19f9231f", + "sha256:5334e2ef60d3d9439c08baedaf8b84dc9bb9522d0dacbc10572ef5609ef8db6d", + "sha256:604cdba8f1983d0ab78edc29aa71c8df0ada06fb147cea436dc37093a0100a4e", + "sha256:6373d7eb813a143cb7795d3e42bd8ed857c82a90571567e681e1b3841a390d16", + "sha256:655796a906fa3ca67273011c9805c1e1baa047781fca80feeb710328cdbed87f", + "sha256:65c3c06afee96c654e590e046c4a24559e65b0a87dbff256cd4bd6f77e1a33f9", + "sha256:696f3d5493eae7359887da55c2afa05acc3db5fc625c49529e84bd9992313296", + "sha256:6e972493cdfe4ad0411fd9abfab7d4d800a7317a93928217f1a5de2bb0f0d87a", + "sha256:7579960be23d1fddecb53898035a0d112ac858c3554018ce615cefc03024e46d", + "sha256:765d703096ca47aa5d93044bf701b00bbce4d903a95b41fff7c3796e747b1f1d", + "sha256:7e66f60b0067a10dd289b29dceabd3d0e6d68be1504fc9d0bc209cf07f56d189", + "sha256:8a2ffadefd0e7206adc86e492ccc60395f7edb5680adedf17a7ee4205c530df4", + "sha256:959697ef2757406bff71467a09d940ca364e724c534efbf3786e86eee8591452", + "sha256:9d783213fab61832dbb10d385a319cb0e45451088abd45f95b5bb88ed0acca1a", + "sha256:a16025df73d24795a0bde05504911d306307c24a64187752685ff6ea23897cb0", + "sha256:a2ad597c8c9e038a5912ac3cf166f82926feff2f6e0dabdab956768de0a258f5", + "sha256:bfee1f3ff62143819499e348f5b8a7f3aa0259f9aca5e0ddae7391d059dce671", + "sha256:d169ccd0756c15bbb2f1acc012f5aab279dffc334d733ca0d9362c5beaebe88e", + "sha256:d514c269d1f9f5cd05ddfed15298d6c418129f3f064765295659798349c43e6f", + "sha256:d692374b578360d36568dd05efb8a5a67ab6d1878c29c582e37ddba80e66c396", + "sha256:dbaeb9cf0ea0b3bc4b36fae54a016933d64c6d52a94810a63c00f440ecb37dd7", + "sha256:dc26c8d44472e035d59d6f1177eb712888447f5799743da9c398b0339ed90b1b", + "sha256:e1574980b48c8c74f83578d1e77e701f8439a5d93f36a5a0af31337467c08fcf", + "sha256:e74a578172525c20d7223eac5f8ad187f10940dac06e40113d62f14f3adb1e8f", + "sha256:e945de62917acbf853ab968d8916290548df18dd62c739d862f359ecd25842a6", + "sha256:f0980d44b8aded808bec5059018d64692f0127f10510eca71f2f0ace8fb11188", + "sha256:f98d4bd7bbb15ca701d19b93263cc5edfd480c3475d163f137385f49e5b3a3a7", + "sha256:fb68d212efd057596dee9e6582daded9f8ef776538afdf5feceb3059df2d2e7b" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==5.5.1" + "version": "==5.5.2" } }, "develop": { @@ -2169,19 +2179,19 @@ }, "docutils": { "hashes": [ - "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125", - "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61" + "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6", + "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==0.17.1" + "markers": "python_version >= '3.7'", + "version": "==0.19" }, "exceptiongroup": { "hashes": [ - "sha256:4d6c0aa6dd825810941c792f53d7b8d71da26f5e5f84f20f9508e8f2d33b140a", - "sha256:73866f7f842ede6cb1daa42c4af078e2035e5f7607f0e2c762cc51bb31bbe7b2" + "sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828", + "sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec" ], "markers": "python_version < '3.11'", - "version": "==1.0.1" + "version": "==1.0.4" }, "execnet": { "hashes": [ @@ -2201,11 +2211,11 @@ }, "faker": { "hashes": [ - "sha256:4a3465624515a6807e8aa7e8eeb85bdd86a2fa53de4e258892dd6be95362462e", - "sha256:b9dd2fd9a9ac68a4e0c5040cd9e9bfaa099fa8dd15bae5f01f224a45431818d5" + "sha256:2d5443724f640ce07658ca8ca8bbd40d26b58914e63eec6549727869aa67e2cc", + "sha256:c2a2ff9dd8dfd991109b517ab98d5cb465e857acb45f6b643a0e284a9eb2cc76" ], "markers": "python_version >= '3.7'", - "version": "==15.3.1" + "version": "==15.3.4" }, "filelock": { "hashes": [ @@ -2224,11 +2234,11 @@ }, "identify": { "hashes": [ - "sha256:48b7925fe122720088aeb7a6c34f17b27e706b72c61070f27fe3789094233440", - "sha256:7a214a10313b9489a0d61467db2856ae8d0b8306fc923e03a9effa53d8aedc58" + "sha256:906036344ca769539610436e40a684e170c3648b552194980bb7b617a8daeb9f", + "sha256:a390fb696e164dbddb047a0db26e57972ae52fbd037ae68797e5ae2f4492485d" ], "markers": "python_version >= '3.7'", - "version": "==2.5.8" + "version": "==2.5.9" }, "idna": { "hashes": [ @@ -2418,37 +2428,37 @@ }, "numpy": { "hashes": [ - "sha256:0fe563fc8ed9dc4474cbf70742673fc4391d70f4363f917599a7fa99f042d5a8", - "sha256:12ac457b63ec8ded85d85c1e17d85efd3c2b0967ca39560b307a35a6703a4735", - "sha256:2341f4ab6dba0834b685cce16dad5f9b6606ea8a00e6da154f5dbded70fdc4dd", - "sha256:296d17aed51161dbad3c67ed6d164e51fcd18dbcd5dd4f9d0a9c6055dce30810", - "sha256:488a66cb667359534bc70028d653ba1cf307bae88eab5929cd707c761ff037db", - "sha256:4d52914c88b4930dafb6c48ba5115a96cbab40f45740239d9f4159c4ba779962", - "sha256:5e13030f8793e9ee42f9c7d5777465a560eb78fa7e11b1c053427f2ccab90c79", - "sha256:61be02e3bf810b60ab74e81d6d0d36246dbfb644a462458bb53b595791251911", - "sha256:7607b598217745cc40f751da38ffd03512d33ec06f3523fb0b5f82e09f6f676d", - "sha256:7a70a7d3ce4c0e9284e92285cba91a4a3f5214d87ee0e95928f3614a256a1488", - "sha256:7ab46e4e7ec63c8a5e6dbf5c1b9e1c92ba23a7ebecc86c336cb7bf3bd2fb10e5", - "sha256:8981d9b5619569899666170c7c9748920f4a5005bf79c72c07d08c8a035757b0", - "sha256:8c053d7557a8f022ec823196d242464b6955a7e7e5015b719e76003f63f82d0f", - "sha256:926db372bc4ac1edf81cfb6c59e2a881606b409ddc0d0920b988174b2e2a767f", - "sha256:95d79ada05005f6f4f337d3bb9de8a7774f259341c70bc88047a1f7b96a4bcb2", - "sha256:95de7dc7dc47a312f6feddd3da2500826defdccbc41608d0031276a24181a2c0", - "sha256:a0882323e0ca4245eb0a3d0a74f88ce581cc33aedcfa396e415e5bba7bf05f68", - "sha256:a8365b942f9c1a7d0f0dc974747d99dd0a0cdfc5949a33119caf05cb314682d3", - "sha256:a8aae2fb3180940011b4862b2dd3756616841c53db9734b27bb93813cd79fce6", - "sha256:c237129f0e732885c9a6076a537e974160482eab8f10db6292e92154d4c67d71", - "sha256:c67b833dbccefe97cdd3f52798d430b9d3430396af7cdb2a0c32954c3ef73894", - "sha256:ce03305dd694c4873b9429274fd41fc7eb4e0e4dea07e0af97a933b079a5814f", - "sha256:d331afac87c92373826af83d2b2b435f57b17a5c74e6268b79355b970626e329", - "sha256:dada341ebb79619fe00a291185bba370c9803b1e1d7051610e01ed809ef3a4ba", - "sha256:ed2cc92af0efad20198638c69bb0fc2870a58dabfba6eb722c933b48556c686c", - "sha256:f260da502d7441a45695199b4e7fd8ca87db659ba1c78f2bbf31f934fe76ae0e", - "sha256:f2f390aa4da44454db40a1f0201401f9036e8d578a25f01a6e237cea238337ef", - "sha256:f76025acc8e2114bb664294a07ede0727aa75d63a06d2fae96bf29a81747e4a7" + "sha256:01dd17cbb340bf0fc23981e52e1d18a9d4050792e8fb8363cecbf066a84b827d", + "sha256:06005a2ef6014e9956c09ba07654f9837d9e26696a0470e42beedadb78c11b07", + "sha256:09b7847f7e83ca37c6e627682f145856de331049013853f344f37b0c9690e3df", + "sha256:0aaee12d8883552fadfc41e96b4c82ee7d794949e2a7c3b3a7201e968c7ecab9", + "sha256:0cbe9848fad08baf71de1a39e12d1b6310f1d5b2d0ea4de051058e6e1076852d", + "sha256:1b1766d6f397c18153d40015ddfc79ddb715cabadc04d2d228d4e5a8bc4ded1a", + "sha256:33161613d2269025873025b33e879825ec7b1d831317e68f4f2f0f84ed14c719", + "sha256:5039f55555e1eab31124a5768898c9e22c25a65c1e0037f4d7c495a45778c9f2", + "sha256:522e26bbf6377e4d76403826ed689c295b0b238f46c28a7251ab94716da0b280", + "sha256:56e454c7833e94ec9769fa0f86e6ff8e42ee38ce0ce1fa4cbb747ea7e06d56aa", + "sha256:58f545efd1108e647604a1b5aa809591ccd2540f468a880bedb97247e72db387", + "sha256:5e05b1c973a9f858c74367553e236f287e749465f773328c8ef31abe18f691e1", + "sha256:7903ba8ab592b82014713c491f6c5d3a1cde5b4a3bf116404e08f5b52f6daf43", + "sha256:8969bfd28e85c81f3f94eb4a66bc2cf1dbdc5c18efc320af34bffc54d6b1e38f", + "sha256:92c8c1e89a1f5028a4c6d9e3ccbe311b6ba53694811269b992c0b224269e2398", + "sha256:9c88793f78fca17da0145455f0d7826bcb9f37da4764af27ac945488116efe63", + "sha256:a7ac231a08bb37f852849bbb387a20a57574a97cfc7b6cabb488a4fc8be176de", + "sha256:abdde9f795cf292fb9651ed48185503a2ff29be87770c3b8e2a14b0cd7aa16f8", + "sha256:af1da88f6bc3d2338ebbf0e22fe487821ea4d8e89053e25fa59d1d79786e7481", + "sha256:b2a9ab7c279c91974f756c84c365a669a887efa287365a8e2c418f8b3ba73fb0", + "sha256:bf837dc63ba5c06dc8797c398db1e223a466c7ece27a1f7b5232ba3466aafe3d", + "sha256:ca51fcfcc5f9354c45f400059e88bc09215fb71a48d3768fb80e357f3b457e1e", + "sha256:ce571367b6dfe60af04e04a1834ca2dc5f46004ac1cc756fb95319f64c095a96", + "sha256:d208a0f8729f3fb790ed18a003f3a57895b989b40ea4dce4717e9cf4af62c6bb", + "sha256:dbee87b469018961d1ad79b1a5d50c0ae850000b639bcb1b694e9981083243b6", + "sha256:e9f4c4e51567b616be64e05d517c79a8a22f3606499941d97bb76f2ca59f982d", + "sha256:f063b69b090c9d918f9df0a12116029e274daf0181df392839661c4c7ec9018a", + "sha256:f9a909a8bae284d46bbfdefbdd4a262ba19d3bc9921b1e76126b1d21c3c34135" ], "index": "pypi", - "version": "==1.23.4" + "version": "==1.23.5" }, "packaging": { "hashes": [ @@ -2460,11 +2470,11 @@ }, "pathspec": { "hashes": [ - "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93", - "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d" + "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5", + "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0" ], "markers": "python_version >= '3.7'", - "version": "==0.10.1" + "version": "==0.10.2" }, "pillow": { "hashes": [ @@ -2535,11 +2545,11 @@ }, "platformdirs": { "hashes": [ - "sha256:0cb405749187a194f444c25c82ef7225232f11564721eabffc6ec70df83b11cb", - "sha256:6e52c21afff35cb659c6e52d8b4d61b9bd544557180440538f255d9382c8cbe0" + "sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7", + "sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10" ], "markers": "python_version >= '3.7'", - "version": "==2.5.3" + "version": "==2.5.4" }, "pluggy": { "hashes": [ @@ -2567,11 +2577,11 @@ }, "pycodestyle": { "hashes": [ - "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785", - "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b" + "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053", + "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610" ], "index": "pypi", - "version": "==2.9.1" + "version": "==2.10.0" }, "pygments": { "hashes": [ @@ -2639,11 +2649,11 @@ }, "pytest-xdist": { "hashes": [ - "sha256:688da9b814370e891ba5de650c9327d1a9d861721a524eb917e620eec3e90291", - "sha256:9feb9a18e1790696ea23e1434fa73b325ed4998b0e9fcb221f16fd1945e6df1b" + "sha256:40fdb8f3544921c5dfcd486ac080ce22870e71d82ced6d2e78fa97c2addd480c", + "sha256:70a76f191d8a1d2d6be69fc440cdf85f3e4c03c08b520fd5dc5d338d6cf07d89" ], "index": "pypi", - "version": "==3.0.2" + "version": "==3.1.0" }, "python-dateutil": { "hashes": [ @@ -2783,11 +2793,11 @@ }, "setuptools": { "hashes": [ - "sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31", - "sha256:e197a19aa8ec9722928f2206f8de752def0e4c9fc6953527360d1c36d94ddb2f" + "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54", + "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75" ], "markers": "python_version >= '3.7'", - "version": "==65.5.1" + "version": "==65.6.3" }, "six": { "hashes": [ @@ -2809,6 +2819,7 @@ "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d", "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5" ], + "markers": "python_version >= '3.6'", "version": "==5.3.0" }, "sphinx-autobuild": { @@ -2877,11 +2888,11 @@ }, "termcolor": { "hashes": [ - "sha256:91dd04fdf661b89d7169cefd35f609b19ca931eb033687eaa647cef1ff177c49", - "sha256:b80df54667ce4f48c03fe35df194f052dc27a541ebbf2544e4d6b47b5d6949c4" + "sha256:67cee2009adc6449c650f6bcf3bdeed00c8ba53a8cda5362733c53e0a39fb70b", + "sha256:fa852e957f97252205e105dd55bbc23b419a70fec0085708fc0515e399f304fd" ], "markers": "python_version >= '3.7'", - "version": "==2.1.0" + "version": "==2.1.1" }, "toml": { "hashes": [ @@ -2918,11 +2929,11 @@ }, "tox": { "hashes": [ - "sha256:89e4bc6df3854e9fc5582462e328dd3660d7d865ba625ae5881bbc63836a6324", - "sha256:d2c945f02a03d4501374a3d5430877380deb69b218b1df9b7f1d2f2a10befaf9" + "sha256:b2a920e35a668cc06942ffd1cf3a4fb221a4d909ca72191fb6d84b0b18a7be04", + "sha256:f52ca66eae115fcfef0e77ef81fd107133d295c97c52df337adedb8dfac6ab84" ], "index": "pypi", - "version": "==3.27.0" + "version": "==3.27.1" }, "typing-extensions": { "hashes": [ @@ -2934,19 +2945,19 @@ }, "urllib3": { "hashes": [ - "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e", - "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" + "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc", + "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' and python_version < '4'", - "version": "==1.26.12" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==1.26.13" }, "virtualenv": { "hashes": [ - "sha256:186ca84254abcbde98180fd17092f9628c5fe742273c02724972a1d8a2035108", - "sha256:530b850b523c6449406dfba859d6345e48ef19b8439606c5d74d7d3c9e14d76e" + "sha256:40a7e06a98728fd5769e1af6fd1a706005b4bb7e16176a272ed4292473180389", + "sha256:7d6a8d55b2f73b617f684ee40fd85740f062e1f2e379412cb1879c7136f05902" ], "markers": "python_version >= '3.6'", - "version": "==20.16.6" + "version": "==20.17.0" }, "watchdog": { "hashes": [ @@ -2981,11 +2992,11 @@ }, "zipp": { "hashes": [ - "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1", - "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8" + "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa", + "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766" ], "markers": "python_version < '3.9'", - "version": "==3.10.0" + "version": "==3.11.0" } } } From cea6720c1aab9a649216b62ed1dc60d31e5779b2 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Tue, 6 Dec 2022 08:25:40 -0800 Subject: [PATCH 128/231] Updates the pre-commit hook versions --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index eb45f7224..b4e7d002e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,7 +5,7 @@ repos: # General hooks - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.3.0 + rev: v4.4.0 hooks: - id: check-docstring-first - id: check-json @@ -53,7 +53,7 @@ repos: - id: add-trailing-comma exclude: "(migrations)" - repo: https://github.com/PyCQA/flake8 - rev: 5.0.4 + rev: 6.0.0 hooks: - id: flake8 files: ^src/ @@ -64,7 +64,7 @@ repos: hooks: - id: black - repo: https://github.com/asottile/pyupgrade - rev: v3.2.2 + rev: v3.3.0 hooks: - id: pyupgrade exclude: "(migrations)" From c02bd66b3fd576ed3472e7c32c5eeef729b96b26 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Thu, 8 Dec 2022 03:15:18 -0800 Subject: [PATCH 129/231] New translations django.po (Arabic) [ci skip] --- src/locale/ar_SA/LC_MESSAGES/django.po | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/locale/ar_SA/LC_MESSAGES/django.po b/src/locale/ar_SA/LC_MESSAGES/django.po index 4c8d4100c..d717d88b2 100644 --- a/src/locale/ar_SA/LC_MESSAGES/django.po +++ b/src/locale/ar_SA/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-09 21:50+0000\n" -"PO-Revision-Date: 2022-12-07 17:49\n" +"PO-Revision-Date: 2022-12-08 11:15\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -220,31 +220,31 @@ msgstr "تحذير" #: documents/models.py:334 msgid "error" -msgstr "" +msgstr "خطأ" #: documents/models.py:335 msgid "critical" -msgstr "" +msgstr "الحرجة" #: documents/models.py:338 msgid "group" -msgstr "" +msgstr "مجموعة" #: documents/models.py:340 msgid "message" -msgstr "" +msgstr "رسالة" #: documents/models.py:343 msgid "level" -msgstr "" +msgstr "المستوى" #: documents/models.py:352 msgid "log" -msgstr "" +msgstr "سجل" #: documents/models.py:353 msgid "logs" -msgstr "" +msgstr "السجلات" #: documents/models.py:363 documents/models.py:419 msgid "saved view" From 80a126e838464de3297b4a26ff0236d6a9622961 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Thu, 8 Dec 2022 04:23:05 -0800 Subject: [PATCH 130/231] New translations django.po (Arabic) [ci skip] --- src/locale/ar_SA/LC_MESSAGES/django.po | 130 ++++++++++++------------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/src/locale/ar_SA/LC_MESSAGES/django.po b/src/locale/ar_SA/LC_MESSAGES/django.po index d717d88b2..e1484c3a5 100644 --- a/src/locale/ar_SA/LC_MESSAGES/django.po +++ b/src/locale/ar_SA/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-09 21:50+0000\n" -"PO-Revision-Date: 2022-12-08 11:15\n" +"PO-Revision-Date: 2022-12-08 12:23\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -248,155 +248,155 @@ msgstr "السجلات" #: documents/models.py:363 documents/models.py:419 msgid "saved view" -msgstr "" +msgstr "العرض المحفوظ" #: documents/models.py:364 msgid "saved views" -msgstr "" +msgstr "العروض المحفوظة" #: documents/models.py:366 documents/models.py:637 msgid "user" -msgstr "" +msgstr "المستخدم" #: documents/models.py:370 msgid "show on dashboard" -msgstr "" +msgstr "عرض على لوحة البيانات" #: documents/models.py:373 msgid "show in sidebar" -msgstr "" +msgstr "عرض على الشريط الجانبي" #: documents/models.py:377 msgid "sort field" -msgstr "" +msgstr "فرز الحقل" #: documents/models.py:382 msgid "sort reverse" -msgstr "" +msgstr "فرز بالعكس" #: documents/models.py:387 msgid "title contains" -msgstr "" +msgstr "العنوان يحتوي" #: documents/models.py:388 msgid "content contains" -msgstr "" +msgstr "المحتوى يحتوي" #: documents/models.py:389 msgid "ASN is" -msgstr "" +msgstr "ASN هو" #: documents/models.py:390 msgid "correspondent is" -msgstr "" +msgstr "المراسل هو" #: documents/models.py:391 msgid "document type is" -msgstr "" +msgstr "نوع المستند" #: documents/models.py:392 msgid "is in inbox" -msgstr "" +msgstr "موجود في علبة الوارد" #: documents/models.py:393 msgid "has tag" -msgstr "" +msgstr "لديه وسم" #: documents/models.py:394 msgid "has any tag" -msgstr "" +msgstr "لديه أي وسم" #: documents/models.py:395 msgid "created before" -msgstr "" +msgstr "أنشئت قبل" #: documents/models.py:396 msgid "created after" -msgstr "" +msgstr "أنشئت بعد" #: documents/models.py:397 msgid "created year is" -msgstr "" +msgstr "أنشئت سنة" #: documents/models.py:398 msgid "created month is" -msgstr "" +msgstr "أنشئت شهر" #: documents/models.py:399 msgid "created day is" -msgstr "" +msgstr "أنشئت يوم" #: documents/models.py:400 msgid "added before" -msgstr "" +msgstr "أضيف قبل" #: documents/models.py:401 msgid "added after" -msgstr "" +msgstr "أضيف بعد" #: documents/models.py:402 msgid "modified before" -msgstr "" +msgstr "عُدِّل قبل" #: documents/models.py:403 msgid "modified after" -msgstr "" +msgstr "عُدِّل بعد" #: documents/models.py:404 msgid "does not have tag" -msgstr "" +msgstr "ليس لديه وسم" #: documents/models.py:405 msgid "does not have ASN" -msgstr "" +msgstr "ليس لديه ASN" #: documents/models.py:406 msgid "title or content contains" -msgstr "" +msgstr "العنوان أو المحتوى يحتوي" #: documents/models.py:407 msgid "fulltext query" -msgstr "" +msgstr "استعلام كامل النص" #: documents/models.py:408 msgid "more like this" -msgstr "" +msgstr "أخرى مثلها" #: documents/models.py:409 msgid "has tags in" -msgstr "" +msgstr "لديه وسوم في" #: documents/models.py:410 msgid "ASN greater than" -msgstr "" +msgstr "ASN أكبر من" #: documents/models.py:411 msgid "ASN less than" -msgstr "" +msgstr "ASN أقل من" #: documents/models.py:412 msgid "storage path is" -msgstr "" +msgstr "مسار التخزين" #: documents/models.py:422 msgid "rule type" -msgstr "" +msgstr "نوع القاعدة" #: documents/models.py:424 msgid "value" -msgstr "" +msgstr "قيمة" #: documents/models.py:427 msgid "filter rule" -msgstr "" +msgstr "تصفية القاعدة" #: documents/models.py:428 msgid "filter rules" -msgstr "" +msgstr "تصفية القواعد" #: documents/models.py:536 msgid "Task ID" -msgstr "" +msgstr "الرمز التعريفي للمهمة" #: documents/models.py:537 msgid "Celery ID for the Task that was run" @@ -404,11 +404,11 @@ msgstr "" #: documents/models.py:542 msgid "Acknowledged" -msgstr "" +msgstr "مُعترف" #: documents/models.py:543 msgid "If the task is acknowledged via the frontend or API" -msgstr "" +msgstr "إذا عرف على المهمة عبر الواجهة الأمامية أو API" #: documents/models.py:549 documents/models.py:556 msgid "Task Name" @@ -634,99 +634,99 @@ msgstr "السويدية" #: paperless/settings.py:397 msgid "Turkish" -msgstr "" +msgstr "التركية" #: paperless/settings.py:398 msgid "Chinese Simplified" -msgstr "" +msgstr "الصينية المبسطة" #: paperless/urls.py:161 msgid "Paperless-ngx administration" -msgstr "" +msgstr "Paperless-ngx الإدارة" #: paperless_mail/admin.py:29 msgid "Authentication" -msgstr "" +msgstr "المصادقة" #: paperless_mail/admin.py:30 msgid "Advanced settings" -msgstr "" +msgstr "الإعدادات المتقدمة" #: paperless_mail/admin.py:47 msgid "Filter" -msgstr "" +msgstr "تصفية" #: paperless_mail/admin.py:50 msgid "Paperless will only process mails that match ALL of the filters given below." -msgstr "" +msgstr "Paperless يقوم فقط بمعالجة البُرُد التي تتطابق جميع التصفيات المقدمة أدناه." #: paperless_mail/admin.py:64 msgid "Actions" -msgstr "" +msgstr "إجراءات" #: paperless_mail/admin.py:67 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." -msgstr "" +msgstr "الإجراء المطبق على البريد. ينفذ هذا الإجراء فقط عندما تستهلك المستندات من البريد. ستبقى البُرٌد التي لا تحتوي على مرفقات ستبقى كما هي." #: paperless_mail/admin.py:75 msgid "Metadata" -msgstr "" +msgstr "البيانات الوصفية" #: paperless_mail/admin.py:78 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." -msgstr "" +msgstr "تعيين بيانات التعريف للمستندات المستهلكة من هذه القاعدة تِلْقائيًا. إذا لم تعين الوسوم أو الأنواع أو المراسلين هنا، سيظل paperless يعالج جميع قواعد المطابقة التي حددتها." #: paperless_mail/apps.py:8 msgid "Paperless mail" -msgstr "" +msgstr "بريد paperless" #: paperless_mail/models.py:8 msgid "mail account" -msgstr "" +msgstr "حساب البريد" #: paperless_mail/models.py:9 msgid "mail accounts" -msgstr "" +msgstr "حساب البُرُد" #: paperless_mail/models.py:12 msgid "No encryption" -msgstr "" +msgstr "دون تشفير" #: paperless_mail/models.py:13 msgid "Use SSL" -msgstr "" +msgstr "أستخدم SSL" #: paperless_mail/models.py:14 msgid "Use STARTTLS" -msgstr "" +msgstr "أستخدم STARTTLS" #: paperless_mail/models.py:18 msgid "IMAP server" -msgstr "" +msgstr "خادم IMAP" #: paperless_mail/models.py:21 msgid "IMAP port" -msgstr "" +msgstr "منفذ IMAP" #: paperless_mail/models.py:25 msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." -msgstr "" +msgstr "عادة ما يكون 143 للغير مشفر و اتصالات STARTTLS و 993 للاتصالات SSL." #: paperless_mail/models.py:31 msgid "IMAP security" -msgstr "" +msgstr "أمان IMAP" #: paperless_mail/models.py:36 msgid "username" -msgstr "" +msgstr "اسم المستخدم" #: paperless_mail/models.py:38 msgid "password" -msgstr "" +msgstr "كلمة المرور" #: paperless_mail/models.py:41 msgid "character set" -msgstr "" +msgstr "نوع ترميز المحارف" #: paperless_mail/models.py:45 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." From ee4d25567cfb1d95289aae5bc0d1a617f9769c74 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Thu, 8 Dec 2022 06:25:04 -0800 Subject: [PATCH 131/231] New translations messages.xlf (Arabic) [ci skip] --- src-ui/src/locale/messages.ar_SA.xlf | 138 +++++++++++++-------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/src-ui/src/locale/messages.ar_SA.xlf b/src-ui/src/locale/messages.ar_SA.xlf index 75293bdff..39cd3cf3b 100644 --- a/src-ui/src/locale/messages.ar_SA.xlf +++ b/src-ui/src/locale/messages.ar_SA.xlf @@ -778,7 +778,7 @@ src/app/components/app-frame/app-frame.component.html 221,223 - How does this work? + كيف يعمل هذا؟ Update available @@ -786,7 +786,7 @@ src/app/components/app-frame/app-frame.component.html 232 - Update available + يتوفر تحديث An error occurred while saving settings. @@ -798,7 +798,7 @@ src/app/components/manage/settings/settings.component.ts 476 - An error occurred while saving settings. + حدث خطأ في أثناء حفظ الإعدادات. An error occurred while saving update checking settings. @@ -806,7 +806,7 @@ src/app/components/app-frame/app-frame.component.ts 216 - An error occurred while saving update checking settings. + حدث خطأ في أثناء حفظ إعدادات التحقق من التحديث. Clear @@ -822,7 +822,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.html 47 - Clear + تنظيف Cancel @@ -830,7 +830,7 @@ src/app/components/common/confirm-dialog/confirm-dialog.component.html 12 - Cancel + إلغاء Confirmation @@ -838,7 +838,7 @@ src/app/components/common/confirm-dialog/confirm-dialog.component.ts 20 - Confirmation + تأكيد Confirm @@ -862,7 +862,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 344 - Confirm + أكّد After @@ -870,7 +870,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.html 19 - After + بعد Before @@ -878,7 +878,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.html 42 - Before + قبل Last 7 days @@ -886,7 +886,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.ts 43 - Last 7 days + آخر ٧ أيام Last month @@ -894,7 +894,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.ts 47 - Last month + آخر شهر Last 3 months @@ -902,7 +902,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.ts 51 - Last 3 months + آخر ٣ أشهر Last year @@ -910,7 +910,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.ts 55 - Last year + العام الماضي Name @@ -1010,7 +1010,7 @@ src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html 13 - Matching algorithm + مطابقة الخوارزمية Matching pattern @@ -1030,7 +1030,7 @@ src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html 14 - Matching pattern + مطابقة النمط Case insensitive @@ -1050,7 +1050,7 @@ src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html 15 - Case insensitive + حالة غير حساسة Cancel @@ -1090,7 +1090,7 @@ src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html 18 - Cancel + إلغاء Save @@ -1138,7 +1138,7 @@ src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts 20 - Create new correspondent + إنشاء مراسل جديد Edit correspondent @@ -1146,7 +1146,7 @@ src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts 24 - Edit correspondent + تعديل المراسل Create new document type @@ -1186,7 +1186,7 @@ src/app/components/common/edit-dialog/edit-dialog.component.ts 57 - Could not save element: + تعذر حفظ العنصر: IMAP Server @@ -1194,7 +1194,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 11 - IMAP Server + خادم IMAP IMAP Port @@ -1202,7 +1202,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 12 - IMAP Port + منفذ IMAP IMAP Security @@ -1210,7 +1210,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 13 - IMAP Security + أمان IMAP Username @@ -1218,7 +1218,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 16 - Username + اسم المستخدم Password @@ -1226,7 +1226,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 17 - Password + كلمة المرور Character Set @@ -1234,7 +1234,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 18 - Character Set + نوع ترميز المحارف Create new mail account @@ -1242,7 +1242,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 22 - Create new mail account + إنشاء حساب بريد جديد Edit mail account @@ -1250,7 +1250,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 26 - Edit mail account + تعديل حساب البريد No encryption @@ -1258,7 +1258,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 43 - No encryption + دون تشفير SSL @@ -1266,7 +1266,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 44 - SSL + SSL STARTTLS @@ -1274,7 +1274,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 45 - STARTTLS + STARTTLS Account @@ -1286,7 +1286,7 @@ src/app/components/manage/settings/settings.component.html 284 - Account + الحساب Folder @@ -1294,7 +1294,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 12 - Folder + مجلد Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. @@ -1302,7 +1302,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 12 - Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + يجب فصل المجلدات الفرعية باستخدام محدد، غالبا نقطة ('.') أو خط مائل ('/')، لكنها تختلف حسب خادم البريد. Maximum age (days) @@ -1310,7 +1310,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 13 - Maximum age (days) + العمر الأقصى (الأيام) Attachment type @@ -1318,7 +1318,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 14 - Attachment type + نوع المرفق Paperless will only process mails that match all of the filters specified below. @@ -1326,7 +1326,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 17 - Paperless will only process mails that match all of the filters specified below. + Paperless سيعالج فقط الرسائل التي تطابق جميع التصفيات المحددة أدناه. Filter from @@ -1334,7 +1334,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 18 - Filter from + تصفية من Filter subject @@ -1342,7 +1342,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 19 - Filter subject + تصفية الموضوع Filter body @@ -1350,7 +1350,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 20 - Filter body + تصفية الجسم Filter attachment filename @@ -1358,7 +1358,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 21 - Filter attachment filename + تصفية اسم الملف المرفق Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. @@ -1366,7 +1366,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 21 - Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + فقط المستندات التي تتطابق تماما مع اسم هذا الملف إذا تم تحديدها. المحارف البديلة مثل *.pdf أو *الفواتير* مسموح بها. لأنها غير حساسة. Action @@ -1374,7 +1374,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 24 - Action + إجراء Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. @@ -1382,7 +1382,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 24 - Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + الإجراء المطبق على البريد. ينفذ هذا الإجراء فقط عندما تستهلك المستندات من البريد. ستبقى البُرٌد التي لا تحتوي على مرفقات ستبقى كما هي. Action parameter @@ -1390,7 +1390,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 25 - Action parameter + إجراء العامل Assign title from @@ -1398,7 +1398,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 26 - Assign title from + تعيين العنوان من Assign document type @@ -1406,7 +1406,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 28 - Assign document type + تعيين نوع المستند Assign correspondent from @@ -1414,7 +1414,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 29 - Assign correspondent from + تعيين مراسل من Assign correspondent @@ -1422,7 +1422,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 30 - Assign correspondent + تعيين مراسل Create new mail rule @@ -1430,7 +1430,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 57 - Create new mail rule + إنشاء قاعدة بريد جديدة Edit mail rule @@ -1438,7 +1438,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 61 - Edit mail rule + تعديل قاعدة البريد Only process attachments. @@ -1446,7 +1446,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 98 - Only process attachments. + معالجة المرفقات فقط. Process all files, including 'inline' attachments. @@ -1454,7 +1454,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 102 - Process all files, including 'inline' attachments. + معالجة جميع الملفات، بما في ذلك المرفقات المضمنة. Delete @@ -1518,7 +1518,7 @@ src/app/components/manage/settings/settings.component.html 296 - Delete + حذف Move to specified folder @@ -1526,7 +1526,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 115 - Move to specified folder + نقل إلى مجلد محدد Mark as read, don't process read mails @@ -1534,7 +1534,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 119 - Mark as read, don't process read mails + وضع علامة كمقروءة، لا تعالج الرسائل المقروءة Flag the mail, don't process flagged mails @@ -1542,7 +1542,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 123 - Flag the mail, don't process flagged mails + علم الرسالة، لا تعالج الرسائل المعلمة Tag the mail with specified tag, don't process tagged mails @@ -1550,7 +1550,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 127 - Tag the mail with specified tag, don't process tagged mails + وسم الرسالة بوسم محدد، لا تعالج الرسائل الموسومة Use subject as title @@ -1558,7 +1558,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 136 - Use subject as title + استخدم الموضوع كعنوان Use attachment filename as title @@ -1566,7 +1566,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 140 - Use attachment filename as title + استخدم اسم الملف المرفق كعنوان Do not assign a correspondent @@ -1574,7 +1574,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 149 - Do not assign a correspondent + لا تعيّن مراسل Use mail address @@ -2291,7 +2291,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html 49 - Storage path + مسار التخزين Default @@ -2299,7 +2299,7 @@ src/app/components/document-detail/document-detail.component.html 84 - Default + الافتراضي Content @@ -2319,7 +2319,7 @@ src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts 17 - Metadata + البيانات الوصفية Date modified @@ -2351,7 +2351,7 @@ src/app/components/document-detail/document-detail.component.html 118 - Original filename + اسم الملف الأصلي Original MD5 checksum @@ -2419,7 +2419,7 @@ src/app/components/document-detail/document-detail.component.html 203 - Enter Password + أدخل كلمة المرور Comments @@ -2431,7 +2431,7 @@ src/app/components/manage/settings/settings.component.html 159 - Comments + التعليقات Discard @@ -2503,7 +2503,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 387 - Redo OCR confirm + إعادة تأكيد OCR This operation will permanently redo OCR for this document. From 70960f86ba4b150550a781d7b33729d9040f271b Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Thu, 8 Dec 2022 06:25:05 -0800 Subject: [PATCH 132/231] New translations django.po (Arabic) [ci skip] --- src/locale/ar_SA/LC_MESSAGES/django.po | 148 ++++++++++++------------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/src/locale/ar_SA/LC_MESSAGES/django.po b/src/locale/ar_SA/LC_MESSAGES/django.po index e1484c3a5..e68e65e92 100644 --- a/src/locale/ar_SA/LC_MESSAGES/django.po +++ b/src/locale/ar_SA/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-09 21:50+0000\n" -"PO-Revision-Date: 2022-12-08 12:23\n" +"PO-Revision-Date: 2022-12-08 14:25\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -76,11 +76,11 @@ msgstr "لون" #: documents/models.py:72 msgid "is inbox tag" -msgstr "" +msgstr "سمة علبة الوارد" #: documents/models.py:75 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." -msgstr "" +msgstr "ضع علامة على هذه السمة كعلامة سمة علبة الوارد: سيتم وضع سمة على جميع المستندات المستهلكة حديثا مع وسوم صندوق الواردات." #: documents/models.py:81 msgid "tag" @@ -400,7 +400,7 @@ msgstr "الرمز التعريفي للمهمة" #: documents/models.py:537 msgid "Celery ID for the Task that was run" -msgstr "" +msgstr "رمز المعرف للمهمة التي كانت تعمل" #: documents/models.py:542 msgid "Acknowledged" @@ -440,145 +440,145 @@ msgstr "" #: documents/models.py:578 msgid "Task State" -msgstr "" +msgstr "حالة المهمة" #: documents/models.py:579 msgid "Current state of the task being run" -msgstr "" +msgstr "الحالة الراهنة للمهمة قيد العمل" #: documents/models.py:584 msgid "Created DateTime" -msgstr "" +msgstr "تاريخ و وقت الإنشاء" #: documents/models.py:585 msgid "Datetime field when the task result was created in UTC" -msgstr "" +msgstr "حقل التاريخ والوقت عند إنشاء نتيجة المهمة في UTC" #: documents/models.py:590 msgid "Started DateTime" -msgstr "" +msgstr "تاريخ و وقت البداية" #: documents/models.py:591 msgid "Datetime field when the task was started in UTC" -msgstr "" +msgstr "حقل التاريخ والوقت عند بدء المهمة في UTC" #: documents/models.py:596 msgid "Completed DateTime" -msgstr "" +msgstr "التاريخ و الوقت المكتمل" #: documents/models.py:597 msgid "Datetime field when the task was completed in UTC" -msgstr "" +msgstr "حقل التاريخ و الوقت عند اكتمال المهمة في UTC" #: documents/models.py:602 msgid "Result Data" -msgstr "" +msgstr "نتائج البيانات" #: documents/models.py:604 msgid "The data returned by the task" -msgstr "" +msgstr "البيانات المستردة من قبل المهمة" #: documents/models.py:613 msgid "Comment for the document" -msgstr "" +msgstr "التعليق على المستند" #: documents/models.py:642 msgid "comment" -msgstr "" +msgstr "تعليق" #: documents/models.py:643 msgid "comments" -msgstr "" +msgstr "التعليقات" #: documents/serialisers.py:72 #, python-format msgid "Invalid regular expression: %(error)s" -msgstr "" +msgstr "التعبير النظامي خاطىء: %(error)s" #: documents/serialisers.py:193 msgid "Invalid color." -msgstr "" +msgstr "لون خاطئ." #: documents/serialisers.py:518 #, python-format msgid "File type %(type)s not supported" -msgstr "" +msgstr "نوع الملف %(type)s غير مدعوم" #: documents/serialisers.py:599 msgid "Invalid variable detected." -msgstr "" +msgstr "اكتشاف متغير خاطئ." #: documents/templates/index.html:78 msgid "Paperless-ngx is loading..." -msgstr "" +msgstr "تحميل Paperless-ngx..." #: documents/templates/index.html:79 msgid "Still here?! Hmm, something might be wrong." -msgstr "" +msgstr "مازلت هنا؟! همم، قد يكون هناك خطأ ما." #: documents/templates/index.html:79 msgid "Here's a link to the docs." -msgstr "" +msgstr "إليك رابط المستندات." #: documents/templates/registration/logged_out.html:14 msgid "Paperless-ngx signed out" -msgstr "" +msgstr "تسجيل الخروج Paperless-ngx" #: documents/templates/registration/logged_out.html:59 msgid "You have been successfully logged out. Bye!" -msgstr "" +msgstr "تم تسجيل خروجك بنجاح. مع السلامة!" #: documents/templates/registration/logged_out.html:60 msgid "Sign in again" -msgstr "" +msgstr "تسجيل الدخول مرة أخرى" #: documents/templates/registration/login.html:15 msgid "Paperless-ngx sign in" -msgstr "" +msgstr "تسجيل الدخول Paperless-ngx" #: documents/templates/registration/login.html:61 msgid "Please sign in." -msgstr "" +msgstr "الرجاء تسجيل الدخول." #: documents/templates/registration/login.html:64 msgid "Your username and password didn't match. Please try again." -msgstr "" +msgstr "اسم المستخدم وكلمة المرور غير متطابقين. حاول مرة أخرى." #: documents/templates/registration/login.html:67 msgid "Username" -msgstr "" +msgstr "اسم المستخدم" #: documents/templates/registration/login.html:68 msgid "Password" -msgstr "" +msgstr "كلمة المرور" #: documents/templates/registration/login.html:73 msgid "Sign in" -msgstr "" +msgstr "تسجيل الدخول" #: paperless/settings.py:378 msgid "English (US)" -msgstr "" +msgstr "الإنجليزية (الولايات المتحدة)" #: paperless/settings.py:379 msgid "Belarusian" -msgstr "" +msgstr "البيلاروسية" #: paperless/settings.py:380 msgid "Czech" -msgstr "" +msgstr "التشيكية" #: paperless/settings.py:381 msgid "Danish" -msgstr "" +msgstr "الدانماركية" #: paperless/settings.py:382 msgid "German" -msgstr "" +msgstr "الألمانية" #: paperless/settings.py:383 msgid "English (GB)" -msgstr "" +msgstr "الإنجليزية (المملكة المتحدة)" #: paperless/settings.py:384 msgid "Spanish" @@ -586,19 +586,19 @@ msgstr "الإسبانية" #: paperless/settings.py:385 msgid "French" -msgstr "" +msgstr "الفرنسية" #: paperless/settings.py:386 msgid "Italian" -msgstr "" +msgstr "الإيطالية" #: paperless/settings.py:387 msgid "Luxembourgish" -msgstr "" +msgstr "اللوكسمبرجية" #: paperless/settings.py:388 msgid "Dutch" -msgstr "" +msgstr "الهولندية" #: paperless/settings.py:389 msgid "Polish" @@ -606,7 +606,7 @@ msgstr "البولندية" #: paperless/settings.py:390 msgid "Portuguese (Brazil)" -msgstr "" +msgstr "البرتغالية (البرازيل)" #: paperless/settings.py:391 msgid "Portuguese" @@ -614,7 +614,7 @@ msgstr "البرتغالية" #: paperless/settings.py:392 msgid "Romanian" -msgstr "" +msgstr "الرومانية" #: paperless/settings.py:393 msgid "Russian" @@ -622,11 +622,11 @@ msgstr "الروسية" #: paperless/settings.py:394 msgid "Slovenian" -msgstr "" +msgstr "السلوفانية" #: paperless/settings.py:395 msgid "Serbian" -msgstr "" +msgstr "الصربية" #: paperless/settings.py:396 msgid "Swedish" @@ -694,11 +694,11 @@ msgstr "دون تشفير" #: paperless_mail/models.py:13 msgid "Use SSL" -msgstr "أستخدم SSL" +msgstr "استخدم SSL" #: paperless_mail/models.py:14 msgid "Use STARTTLS" -msgstr "أستخدم STARTTLS" +msgstr "استخدم STARTTLS" #: paperless_mail/models.py:18 msgid "IMAP server" @@ -730,91 +730,91 @@ msgstr "نوع ترميز المحارف" #: paperless_mail/models.py:45 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." -msgstr "" +msgstr "ترميز المحارف المستخدمة عند التواصل مع خادم البريد، مثل 'UTF-8' أو 'US-ASCII'." #: paperless_mail/models.py:56 msgid "mail rule" -msgstr "" +msgstr "قاعدة البريد" #: paperless_mail/models.py:57 msgid "mail rules" -msgstr "" +msgstr "قواعد البريد" #: paperless_mail/models.py:60 msgid "Only process attachments." -msgstr "" +msgstr "معالجة المرفقات فقط." #: paperless_mail/models.py:61 msgid "Process all files, including 'inline' attachments." -msgstr "" +msgstr "معالجة جميع الملفات، بما في ذلك المرفقات المضمنة." #: paperless_mail/models.py:64 msgid "Delete" -msgstr "" +msgstr "حذف" #: paperless_mail/models.py:65 msgid "Move to specified folder" -msgstr "" +msgstr "نقل إلى مجلد محدد" #: paperless_mail/models.py:66 msgid "Mark as read, don't process read mails" -msgstr "" +msgstr "وضع علامة كمقروءة، لا تعالج الرسائل المقروءة" #: paperless_mail/models.py:67 msgid "Flag the mail, don't process flagged mails" -msgstr "" +msgstr "علم الرسالة، لا تعالج الرسائل المعلمة" #: paperless_mail/models.py:68 msgid "Tag the mail with specified tag, don't process tagged mails" -msgstr "" +msgstr "وسم الرسالة بوسم محدد، لا تعالج الرسائل الموسومة" #: paperless_mail/models.py:71 msgid "Use subject as title" -msgstr "" +msgstr "استخدم الموضوع كعنوان" #: paperless_mail/models.py:72 msgid "Use attachment filename as title" -msgstr "" +msgstr "استخدم اسم الملف المرفق كعنوان" #: paperless_mail/models.py:75 msgid "Do not assign a correspondent" -msgstr "" +msgstr "لا تعيّن مراسل" #: paperless_mail/models.py:76 msgid "Use mail address" -msgstr "" +msgstr "استخدم عنوان البريد" #: paperless_mail/models.py:77 msgid "Use name (or mail address if not available)" -msgstr "" +msgstr "استخدم الاسم (أو عنوان البريد إذا لم يكن متاحا)" #: paperless_mail/models.py:78 msgid "Use correspondent selected below" -msgstr "" +msgstr "استخدم المراسل المحدد أدناه" #: paperless_mail/models.py:82 msgid "order" -msgstr "" +msgstr "الطلب" #: paperless_mail/models.py:88 msgid "account" -msgstr "" +msgstr "الحساب" #: paperless_mail/models.py:92 msgid "folder" -msgstr "" +msgstr "مجلد" #: paperless_mail/models.py:96 msgid "Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server." -msgstr "" +msgstr "يجب فصل المجلدات الفرعية باستخدام محدد، غالبا نقطة ('.') أو خط مائل ('/')، لكنها تختلف حسب خادم البريد." #: paperless_mail/models.py:102 msgid "filter from" -msgstr "" +msgstr "تصفية من" #: paperless_mail/models.py:108 msgid "filter subject" -msgstr "" +msgstr "تصفية الموضوع" #: paperless_mail/models.py:114 msgid "filter body" @@ -822,15 +822,15 @@ msgstr "" #: paperless_mail/models.py:121 msgid "filter attachment filename" -msgstr "" +msgstr "تصفية اسم الملف المرفق" #: paperless_mail/models.py:126 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "" +msgstr "فقط المستندات التي تتطابق تماما مع اسم هذا الملف إذا تم تحديدها. المحارف البديلة مثل *.pdf أو *الفواتير* مسموح بها. لأنها غير حساسة." #: paperless_mail/models.py:133 msgid "maximum age" -msgstr "" +msgstr "أقصى عُمُر" #: paperless_mail/models.py:135 msgid "Specified in days." From 2b5e6f7a9d586fbad3a10ee0534b3e9997f97685 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Thu, 8 Dec 2022 07:24:26 -0800 Subject: [PATCH 133/231] New translations messages.xlf (Arabic) [ci skip] --- src-ui/src/locale/messages.ar_SA.xlf | 72 ++++++++++++++-------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/src-ui/src/locale/messages.ar_SA.xlf b/src-ui/src/locale/messages.ar_SA.xlf index 39cd3cf3b..60bee8346 100644 --- a/src-ui/src/locale/messages.ar_SA.xlf +++ b/src-ui/src/locale/messages.ar_SA.xlf @@ -2511,7 +2511,7 @@ src/app/components/document-detail/document-detail.component.ts 483 - This operation will permanently redo OCR for this document. + هذه العملية ستعيد بشكل دائم OCR لهذا المستند. This operation cannot be undone. @@ -2535,7 +2535,7 @@ src/app/components/manage/settings/settings.component.ts 619 - This operation cannot be undone. + لا يمكن التراجع عن هذه العملية. Proceed @@ -2555,7 +2555,7 @@ src/app/components/manage/settings/settings.component.ts 621 - Proceed + متابعة Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content. @@ -2563,7 +2563,7 @@ src/app/components/document-detail/document-detail.component.ts 494 - Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content. + إعادة تشغيل OCR ستبدأ في الخلفية. إغلاق وإعادة فتح أو إعادة تحميل هذا المستند بعد اكتمال العملية لمشاهدة محتوى جديد. Error executing operation: @@ -2571,7 +2571,7 @@ src/app/components/document-detail/document-detail.component.ts 505,507 - Error executing operation: + خطأ في تنفيذ العملية: Select: @@ -2579,7 +2579,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html 10 - Select: + تحديد: Edit: @@ -2587,7 +2587,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html 27 - Edit: + تعديل: Filter tags @@ -2599,7 +2599,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html 28 - Filter tags + تصفية الوسوم Filter correspondents @@ -2611,7 +2611,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html 36 - Filter correspondents + تصفية المراسلين Filter document types @@ -2623,7 +2623,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html 43 - Filter document types + تصفية نوع الوثائق Filter storage paths @@ -2635,7 +2635,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html 50 - Filter storage paths + تصفية مسارات التخزين Actions @@ -2675,7 +2675,7 @@ src/app/components/manage/tasks/tasks.component.html 44 - Actions + إجراءات Download Preparing download... @@ -2683,7 +2683,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html 78,82 - Download Preparing download... + تنزيل تحضير التنزيل... Download originals Preparing download... @@ -2691,7 +2691,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html 84,88 - Download originals Preparing download... + تنزيل الأصلية تحضير التنزيل... Error executing bulk operation: @@ -2699,7 +2699,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 103,105 - Error executing bulk operation: + خطأ في تنفيذ العملية الشاملة: "" @@ -2711,7 +2711,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 177 - "" + "" "" and "" @@ -2720,7 +2720,7 @@ 173 This is for messages like 'modify "tag1" and "tag2"' - "" and "" + "" و "" and "" @@ -2729,7 +2729,7 @@ 181,183 this is for messages like 'modify "tag1", "tag2" and "tag3"' - and "" + و"" Confirm tags assignment @@ -2737,7 +2737,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 198 - Confirm tags assignment + تأكيد تعيين الوسوم This operation will add the tag "" to selected document(s). @@ -2745,7 +2745,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 204 - This operation will add the tag "" to selected document(s). + هذه العملية ستضيف الوسم "" إلى مستند (مستندات) مختارة. This operation will add the tags to selected document(s). @@ -2753,7 +2753,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 209,211 - This operation will add the tags to selected document(s). + هذه العملية ستضيف الوسوم "" إلى مستند (مستندات) مختارة. This operation will remove the tag "" from selected document(s). @@ -2761,7 +2761,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 217 - This operation will remove the tag "" from selected document(s). + هذه العملية ستزيل الوسم "" من المستند (المستندات) المختارة. This operation will remove the tags from selected document(s). @@ -2769,7 +2769,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 222,224 - This operation will remove the tags from selected document(s). + هذه العملية ستزيل الوسوم "" من المستند (المستندات) المختارة. This operation will add the tags and remove the tags on selected document(s). @@ -2777,7 +2777,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 226,230 - This operation will add the tags and remove the tags on selected document(s). + هذه العملية سوف تضيف الوسوم وتزيل الوسوم في مستند(مستندات) مختارة. Confirm correspondent assignment @@ -2785,7 +2785,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 265 - Confirm correspondent assignment + تأكيد تعيين المراسل This operation will assign the correspondent "" to selected document(s). @@ -2793,7 +2793,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 267 - This operation will assign the correspondent "" to selected document(s). + هذه العملية ستعين المراسل"" إلى مستند (مستندات) مختارة. This operation will remove the correspondent from selected document(s). @@ -2801,7 +2801,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 269 - This operation will remove the correspondent from selected document(s). + هذه العملية ستزيل المراسل من مستند (مستندات) مختارة. Confirm document type assignment @@ -2809,7 +2809,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 301 - Confirm document type assignment + تأكيد تعيين نوع المستند This operation will assign the document type "" to selected document(s). @@ -2817,7 +2817,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 303 - This operation will assign the document type "" to selected document(s). + العملية ستعين نوع المستند "" إلى مستند (مستندات) مختارة. This operation will remove the document type from selected document(s). @@ -2825,7 +2825,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 305 - This operation will remove the document type from selected document(s). + هذه العملية ستزيل نوع المستند من مستند (المستندات) مختارة. Confirm storage path assignment @@ -2833,7 +2833,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 337 - Confirm storage path assignment + تأكيد تعيين مسار التخزين This operation will assign the storage path "" to selected document(s). @@ -2841,7 +2841,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 339 - This operation will assign the storage path "" to selected document(s). + هذه العملية ستعين مسار التخزين "" إلى مستند (مستندات) مختارة. This operation will remove the storage path from selected document(s). @@ -2849,7 +2849,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 341 - This operation will remove the storage path from selected document(s). + هذه العملية ستزيل مسار التخزين من المستند(المستندات) المختارة. Delete confirm @@ -2857,7 +2857,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 362 - Delete confirm + تأكيد الحذف This operation will permanently delete selected document(s). @@ -2865,7 +2865,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 363 - This operation will permanently delete selected document(s). + هذه العملية ستحذف بشكل دائم المستند(المستندات) المختارة. Delete document(s) @@ -2873,7 +2873,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 366 - Delete document(s) + حذف المستند(المستندات) This operation will permanently redo OCR for selected document(s). From 272e87b741d1e4c89d64722a6e847184a1060f53 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Thu, 8 Dec 2022 09:18:25 -0800 Subject: [PATCH 134/231] New translations messages.xlf (Arabic) [ci skip] --- src-ui/src/locale/messages.ar_SA.xlf | 282 +++++++++++++-------------- 1 file changed, 141 insertions(+), 141 deletions(-) diff --git a/src-ui/src/locale/messages.ar_SA.xlf b/src-ui/src/locale/messages.ar_SA.xlf index 60bee8346..343e3f652 100644 --- a/src-ui/src/locale/messages.ar_SA.xlf +++ b/src-ui/src/locale/messages.ar_SA.xlf @@ -17,7 +17,7 @@ 178,186 Currently selected slide number read by screen reader - Slide of + الشريحة من Previous @@ -155,7 +155,7 @@ node_modules/src/progressbar/progressbar.ts 30,33 - + HH @@ -163,7 +163,7 @@ node_modules/src/timepicker/timepicker.ts 230,231 - HH + HH Hours @@ -179,7 +179,7 @@ node_modules/src/timepicker/timepicker.ts 280,282 - MM + MM Minutes @@ -195,7 +195,7 @@ node_modules/src/timepicker/timepicker.ts 328,329 - Increment hours + زيادة الساعات Decrement hours @@ -203,7 +203,7 @@ node_modules/src/timepicker/timepicker.ts 350,356 - Decrement hours + إنقاص الساعات Increment minutes @@ -211,7 +211,7 @@ node_modules/src/timepicker/timepicker.ts 383,384 - Increment minutes + زيادة الدقائق Decrement minutes @@ -219,7 +219,7 @@ node_modules/src/timepicker/timepicker.ts 412,416 - Decrement minutes + إنقاص الدقائق SS @@ -227,7 +227,7 @@ node_modules/src/timepicker/timepicker.ts 429 - SS + SS Seconds @@ -243,7 +243,7 @@ node_modules/src/timepicker/timepicker.ts 429 - Increment seconds + زيادة الثواني Decrement seconds @@ -251,7 +251,7 @@ node_modules/src/timepicker/timepicker.ts 429 - Decrement seconds + إنقاص الثواني @@ -337,7 +337,7 @@ src/app/app.component.ts 114 - Document is being processed by paperless. + المستند يتم معالجته من paperless. Prev @@ -345,7 +345,7 @@ src/app/app.component.ts 119 - Prev + السابق Next @@ -357,7 +357,7 @@ src/app/components/document-detail/document-detail.component.html 55 - Next + التالي End @@ -365,7 +365,7 @@ src/app/app.component.ts 121 - End + النهاية The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some. @@ -373,7 +373,7 @@ src/app/app.component.ts 126 - The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some. + يمكن استخدام لوحة التحكم لعرض العروض المحفوظة، مثل 'علبة الوارد'. بواسطة الإعدادات يمكنك تفعيلها > المشاهدات المحفوظة بمجرد إنشاء بعضها. Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms. @@ -381,7 +381,7 @@ src/app/app.component.ts 136 - Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms. + سحب وإسقاط المستندات هنا للبدء في تحميلها أو وضعها في المجلد المستهلك. يمكنك أيضًا سحب وإسقاط المستندات في أي مكان على جميع الصفحات الأخرى من تطبيق الويب. بمجرد ذلك، سيبدأ Paperless-ngx في تدريب خوارزميات تعلم الآلات. The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar. @@ -389,7 +389,7 @@ src/app/app.component.ts 145 - The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar. + تظهر قائمة المستندات جميع مستنداتك وتسمح بالتصفية والتحرير بالجملة. وهناك ثلاث أنماط مختلفة للعرض: القائمة والبطاقات الصغيرة والبطاقات الكبيرة، وفي الشريط الجانبي قائمة بالمستندات المفتوحة حاليا للتحرير. The filtering tools allow you to quickly find documents using various searches, dates, tags, etc. @@ -397,7 +397,7 @@ src/app/app.component.ts 157 - The filtering tools allow you to quickly find documents using various searches, dates, tags, etc. + أدوات التصفية تسمح لك بالعثور بسرعة على المستندات باستخدام مختلف عمليات البحث والتواريخ والوسوم وما إلى ذلك. Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar. @@ -405,7 +405,7 @@ src/app/app.component.ts 167 - Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar. + يمكن حفظ أي مزيج من التصفيات مثل "عرض" يمكنك عرضه بعد ذلك على لوحة التحكم / أو الشريط الجانبي. Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view. @@ -413,7 +413,7 @@ src/app/app.component.ts 176 - Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view. + يمكن إدارة جميع الوسوم والمراسلين وأنواع الوثائق ومسارات التخزين باستخدام هذه الصفحات. ويمكن أيضا إنشاؤها من نعديل عرض المستند. File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. @@ -421,7 +421,7 @@ src/app/app.component.ts 185 - File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. + ملف المهام يظهر لك المستندات المستهلكة، أو تنتظر أن تكون، أو يكون أخفق في أثناء العملية. Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. @@ -429,7 +429,7 @@ src/app/app.component.ts 194 - Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. + تحقق من إعدادات التعديلات المختلفة على تطبيق الويب، أو تبديل إعدادات العروض المحفوظة أو إعداد التحقق من البريد الإلكتروني. Thank you! 🙏 @@ -445,7 +445,7 @@ src/app/app.component.ts 205 - There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. + هناك <em>أطنان</em> المزيد من الميزات والمعلومات التي لم نغطيها هنا، ولكن يجب يكون هذا كافيا لك للبداية. تحقق من المستندات أو زيارة المشروع على GitHub لمعرفة المزيد أو للإبلاغ عن المشكلات. Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! @@ -453,7 +453,7 @@ src/app/app.component.ts 207 - Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! + أخيرا، بالنيابة عن كل مساهم في هذا المشروع المدعوم من المجتمع، شكرا لك على استخدام Paperless-ngx! Initiating upload... @@ -486,7 +486,7 @@ src/app/components/app-frame/app-frame.component.html 39 - Logged in as + تسجيل الدخول باسم Settings @@ -614,7 +614,7 @@ src/app/components/app-frame/app-frame.component.html 131 - Correspondents + مراسلون Tags @@ -662,7 +662,7 @@ src/app/components/app-frame/app-frame.component.html 152 - Storage paths + مسارات التخزين File Tasks @@ -674,7 +674,7 @@ src/app/components/manage/tasks/tasks.component.html 1 - File Tasks + ملف المهام File Tasks @@ -682,7 +682,7 @@ src/app/components/app-frame/app-frame.component.html 160 - File Tasks + ملف المهام Logs @@ -734,7 +734,7 @@ src/app/components/app-frame/app-frame.component.html 195 - GitHub + Github Suggest an idea @@ -754,7 +754,7 @@ src/app/components/app-frame/app-frame.component.html 210 - is available. + متوفر. Click to view. @@ -762,7 +762,7 @@ src/app/components/app-frame/app-frame.component.html 210 - Click to view. + انقر للعرض. Paperless-ngx can automatically check for updates @@ -770,7 +770,7 @@ src/app/components/app-frame/app-frame.component.html 214 - Paperless-ngx can automatically check for updates + Paperless-ngx يتحقق تلقائياً من وجود تحديثات How does this work? @@ -1582,7 +1582,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 153 - Use mail address + استخدم عنوان البريد Use name (or mail address if not available) @@ -1590,7 +1590,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 157 - Use name (or mail address if not available) + استخدم الاسم (أو عنوان البريد إذا لم يكن متاحا) Use correspondent selected below @@ -1852,7 +1852,7 @@ src/app/components/dashboard/dashboard.component.ts 18 - Hello , welcome to Paperless-ngx + أهلا , مرحبا بك في Paperless-ngx Welcome to Paperless-ngx @@ -1860,7 +1860,7 @@ src/app/components/dashboard/dashboard.component.ts 20 - Welcome to Paperless-ngx + مرحبا بك في Paperless-ngx Show all @@ -1872,7 +1872,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html 27 - Show all + عرض الكل Created @@ -1928,7 +1928,7 @@ src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html 1 - Statistics + الإحصائيات Documents in inbox: @@ -1936,7 +1936,7 @@ src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html 3 - Documents in inbox: + المستندات في علبة الواردة: Total documents: @@ -1944,7 +1944,7 @@ src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html 4 - Total documents: + إجمالي المستندات: Upload new documents @@ -1952,7 +1952,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html 1 - Upload new documents + تحميل مستندات جديدة Dismiss completed @@ -1961,7 +1961,7 @@ 4 This button dismisses all status messages about processed documents on the dashboard (failed and successful) - Dismiss completed + اكتمل الرفض Drop documents here or @@ -1969,7 +1969,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html 13 - Drop documents here or + أسقط المستندات هنا أو Browse files @@ -1977,7 +1977,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html 13 - Browse files + تصفح الملفات {VAR_PLURAL, plural, =1 {One more document} other { more documents}} @@ -1986,7 +1986,7 @@ 25 This is shown as a summary line when there are more than 5 document in the processing pipeline. - {VAR_PLURAL, plural, =1 {One more document} other { more documents}} + {VAR_PLURAL, plural, zero {} one { المزيد من المستندات} two { المزيد من المستندات} few { المزيد من المستندات} many { المزيد من المستندات}=1 {مستند واحد آخر} other { المزيد من المستندات}} Processing: @@ -1994,7 +1994,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts 37 - Processing: + المعالجة: Failed: @@ -2002,7 +2002,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts 40 - Failed: + فشل: Added: @@ -2010,7 +2010,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts 43 - Added: + أضيف: , @@ -2031,7 +2031,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 3 - Paperless-ngx is running! + يعمل Paperless-ngx! You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below. @@ -2039,7 +2039,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 4 - You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below. + أنت على استعداد لبدء تحميل المستندات! استكشف الميزات المختلفة لتطبيق الويب هذا بمفردك، أو بدء جولة سريعة باستخدام الزر أدناه. More detail on how to use and configure Paperless-ngx is always available in the documentation. @@ -2047,7 +2047,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 5 - More detail on how to use and configure Paperless-ngx is always available in the documentation. + المزيد من التفاصيل حول كيفية استخدام وتهيئة Paperless-ngx متوفرة دائماً في المستندات. Thanks for being a part of the Paperless-ngx community! @@ -2055,7 +2055,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 8 - Thanks for being a part of the Paperless-ngx community! + شكرًا لك لكونك جزءًا من مجتمع Paperless-ngx! Start the tour @@ -2063,7 +2063,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 9 - Start the tour + بدء الجولة Searching document with asn @@ -2881,7 +2881,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 388 - This operation will permanently redo OCR for selected document(s). + هذه العملية ستعيد بشكل دائم OCR لي المستند(المستندات) المختارة. Filter by correspondent @@ -2893,7 +2893,7 @@ src/app/components/document-list/document-list.component.html 178 - Filter by correspondent + تصفية حسب المراسل Filter by tag @@ -2905,7 +2905,7 @@ src/app/components/document-list/document-list.component.html 183 - Filter by tag + تصفية حسب الوسم Edit @@ -2965,7 +2965,7 @@ src/app/components/document-list/document-card-large/document-card-large.component.html 50 - View + عرض Filter by document type @@ -2977,7 +2977,7 @@ src/app/components/document-list/document-list.component.html 187 - Filter by document type + تصفية حسب نوع المستند Filter by storage path @@ -2989,7 +2989,7 @@ src/app/components/document-list/document-list.component.html 192 - Filter by storage path + تصفية حسب مسار التخزين Created: @@ -3001,7 +3001,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 48 - Created: + أنشئ: Added: @@ -3225,7 +3225,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 94,96 - Correspondent: + مراسل: Without correspondent @@ -3241,7 +3241,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 103,105 - Type: + نوع: Without document type @@ -3257,7 +3257,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 111,113 - Tag: + وسم: Without any tag @@ -3273,7 +3273,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 121 - Title: + العنوان: ASN: @@ -3281,7 +3281,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 124 - ASN: + ASN: Title & content @@ -3289,7 +3289,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 156 - Title & content + العنوان & المحتوى Advanced search @@ -3297,7 +3297,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 161 - Advanced search + بحث متقدم More like @@ -3305,7 +3305,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 167 - More like + أكثر مثله equals @@ -3313,7 +3313,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 186 - equals + يساوي is empty @@ -3321,7 +3321,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 190 - is empty + فارغ is not empty @@ -3329,7 +3329,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 194 - is not empty + غير فارغ greater than @@ -3337,7 +3337,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 198 - greater than + أكبر من less than @@ -3345,7 +3345,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 202 - less than + أقل من Save current view @@ -3353,7 +3353,7 @@ src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html 3 - Save current view + حفظ العرض الحالي Show in sidebar @@ -3365,7 +3365,7 @@ src/app/components/manage/settings/settings.component.html 208 - Show in sidebar + عرض على الشريط الجانبي Show on dashboard @@ -3377,7 +3377,7 @@ src/app/components/manage/settings/settings.component.html 204 - Show on dashboard + عرض على لوحة التحكم Filter rules error occurred while saving this view @@ -3385,7 +3385,7 @@ src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html 12 - Filter rules error occurred while saving this view + حدث خطأ في قواعد التصنيف في أثناء حفظ هذا العرض The error returned was @@ -3393,7 +3393,7 @@ src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html 13 - The error returned was + الخطأ الذي أرجع كان correspondent @@ -3401,7 +3401,7 @@ src/app/components/manage/correspondent-list/correspondent-list.component.ts 33 - correspondent + مراسل correspondents @@ -3409,7 +3409,7 @@ src/app/components/manage/correspondent-list/correspondent-list.component.ts 34 - correspondents + مراسلون Last used @@ -3417,7 +3417,7 @@ src/app/components/manage/correspondent-list/correspondent-list.component.ts 38 - Last used + آخر استخدام Do you really want to delete the correspondent ""? @@ -3425,7 +3425,7 @@ src/app/components/manage/correspondent-list/correspondent-list.component.ts 48 - Do you really want to delete the correspondent ""? + هل تريد حقاً حذف المراسل" document type @@ -3433,7 +3433,7 @@ src/app/components/manage/document-type-list/document-type-list.component.ts 30 - document type + نوع المستند document types @@ -3441,7 +3441,7 @@ src/app/components/manage/document-type-list/document-type-list.component.ts 31 - document types + أنواع المستندات Do you really want to delete the document type ""? @@ -3549,7 +3549,7 @@ src/app/components/manage/management-list/management-list.component.html 44 - Filter Documents + تصفية المستندات {VAR_PLURAL, plural, =1 {One } other { total }} @@ -3569,7 +3569,7 @@ src/app/components/manage/management-list/management-list.component.html 74 - {VAR_PLURAL, plural, =1 {One } other { total }} + {VAR_PLURAL, plural, zero {} one { مجموع } two { مجموع } few { مجموع } many { مجموع }=1 {واحد } other { مجموع }} Automatic @@ -3581,7 +3581,7 @@ src/app/data/matching-model.ts 39 - Automatic + تلقائي Successfully created . @@ -3589,7 +3589,7 @@ src/app/components/manage/management-list/management-list.component.ts 127 - Successfully created . + أنشئ بنجاح . Error occurred while creating : . @@ -3597,7 +3597,7 @@ src/app/components/manage/management-list/management-list.component.ts 132,134 - Error occurred while creating : . + حدث خطأ في أثناء إنشاء : . Successfully updated . @@ -3605,7 +3605,7 @@ src/app/components/manage/management-list/management-list.component.ts 150 - Successfully updated . + حدث بنجاح. Error occurred while saving : . @@ -3645,7 +3645,7 @@ src/app/components/manage/settings/settings.component.html 2 - Start tour + بدء جولة Open Django Admin @@ -3653,7 +3653,7 @@ src/app/components/manage/settings/settings.component.html 4 - Open Django Admin + فتح مسؤول Django General @@ -3661,7 +3661,7 @@ src/app/components/manage/settings/settings.component.html 15 - General + عام Appearance @@ -3685,7 +3685,7 @@ src/app/components/manage/settings/settings.component.html 30 - You need to reload the page after applying a new language. + يجب إعادة تحميل الصفحة بعد تطبيق لغة جديدة. Date display @@ -3693,7 +3693,7 @@ src/app/components/manage/settings/settings.component.html 37 - Date display + عرض التاريخ Date format @@ -3701,7 +3701,7 @@ src/app/components/manage/settings/settings.component.html 50 - Date format + تنسيق التاريخ Short: @@ -3709,7 +3709,7 @@ src/app/components/manage/settings/settings.component.html 56 - Short: + قصير: Medium: @@ -3717,7 +3717,7 @@ src/app/components/manage/settings/settings.component.html 60 - Medium: + متوسط: Long: @@ -3725,7 +3725,7 @@ src/app/components/manage/settings/settings.component.html 64 - Long: + طويل: Items per page @@ -3733,7 +3733,7 @@ src/app/components/manage/settings/settings.component.html 72 - Items per page + العناصر لكل صفحة Document editor @@ -3741,7 +3741,7 @@ src/app/components/manage/settings/settings.component.html 88 - Document editor + محرر المستند Use PDF viewer provided by the browser @@ -3749,7 +3749,7 @@ src/app/components/manage/settings/settings.component.html 92 - Use PDF viewer provided by the browser + استخدم عارض PDF المقدم من المتصفح This is usually faster for displaying large PDF documents, but it might not work on some browsers. @@ -3757,7 +3757,7 @@ src/app/components/manage/settings/settings.component.html 92 - This is usually faster for displaying large PDF documents, but it might not work on some browsers. + عادة ما يكون هذا أسرع لعرض مستندات PDF الكبيرة، ولكن قد لا يعمل على بعض المتصفحات. Sidebar @@ -3765,7 +3765,7 @@ src/app/components/manage/settings/settings.component.html 99 - Sidebar + الشريط الجانبي Use 'slim' sidebar (icons only) @@ -3773,7 +3773,7 @@ src/app/components/manage/settings/settings.component.html 103 - Use 'slim' sidebar (icons only) + استخدم الشريط الجانبي 'نحيف' (الأيقونات فقط) Dark mode @@ -3781,7 +3781,7 @@ src/app/components/manage/settings/settings.component.html 110 - Dark mode + الوضع المظلم Use system settings @@ -3789,7 +3789,7 @@ src/app/components/manage/settings/settings.component.html 113 - Use system settings + استخدم إعدادات النظام Enable dark mode @@ -3797,7 +3797,7 @@ src/app/components/manage/settings/settings.component.html 114 - Enable dark mode + تفعيل الوضع المظلم Invert thumbnails in dark mode @@ -3805,7 +3805,7 @@ src/app/components/manage/settings/settings.component.html 115 - Invert thumbnails in dark mode + عكس الصور المصغرة في الوضع المظلم Theme Color @@ -3813,7 +3813,7 @@ src/app/components/manage/settings/settings.component.html 121 - Theme Color + لون السمة Reset @@ -3821,7 +3821,7 @@ src/app/components/manage/settings/settings.component.html 130 - Reset + إعادة تعيين Update checking @@ -3829,7 +3829,7 @@ src/app/components/manage/settings/settings.component.html 135 - Update checking + التحقق من التحديث Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3845,7 +3845,7 @@ src/app/components/manage/settings/settings.component.html 144 - No tracking data is collected by the app in any way. + لا يتم جمع أي بيانات تتبع بواسطة التطبيق بأي طريقة. Enable update checking @@ -3853,7 +3853,7 @@ src/app/components/manage/settings/settings.component.html 146 - Enable update checking + تمكين التحقق من التحديث Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3861,7 +3861,7 @@ src/app/components/manage/settings/settings.component.html 146 - Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. + لاحظ أنه بالنسبة لمستخدمي حاويات الطرف الثالث، مثل linuxserver.io قد يكون هذا الإشعار "أمام" من الإصدار الحالي من طرف ثالث. Bulk editing @@ -3869,7 +3869,7 @@ src/app/components/manage/settings/settings.component.html 150 - Bulk editing + تعديل متعدد Show confirmation dialogs @@ -3877,7 +3877,7 @@ src/app/components/manage/settings/settings.component.html 154 - Show confirmation dialogs + إظهار تأكيد الحِوَارات Deleting documents will always ask for confirmation. @@ -3885,7 +3885,7 @@ src/app/components/manage/settings/settings.component.html 154 - Deleting documents will always ask for confirmation. + حذف المستندات سيطلب التأكيد دائما. Apply on close @@ -3893,7 +3893,7 @@ src/app/components/manage/settings/settings.component.html 155 - Apply on close + تطبيق عند الإغلاق Enable comments @@ -3901,7 +3901,7 @@ src/app/components/manage/settings/settings.component.html 163 - Enable comments + تمكين التعليقات Notifications @@ -3917,7 +3917,7 @@ src/app/components/manage/settings/settings.component.html 174 - Document processing + معالجة المستندات Show notifications when new documents are detected @@ -3925,7 +3925,7 @@ src/app/components/manage/settings/settings.component.html 178 - Show notifications when new documents are detected + إظهار الإشعارات عند وجود مستندات جديدة Show notifications when document processing completes successfully @@ -3933,7 +3933,7 @@ src/app/components/manage/settings/settings.component.html 179 - Show notifications when document processing completes successfully + إظهار الإشعارات عند اكتمال معالجة المستندات بنجاح Show notifications when document processing fails @@ -3941,7 +3941,7 @@ src/app/components/manage/settings/settings.component.html 180 - Show notifications when document processing fails + إظهار الإشعارات عند فشل معالجة المستندات Suppress notifications on dashboard @@ -3949,7 +3949,7 @@ src/app/components/manage/settings/settings.component.html 181 - Suppress notifications on dashboard + منع الإشعارات في لوحة التحكم This will suppress all messages about document processing status on the dashboard. @@ -3957,7 +3957,7 @@ src/app/components/manage/settings/settings.component.html 181 - This will suppress all messages about document processing status on the dashboard. + سيؤدي هذا إلى إلغاء جميع الرسائل حول حالة معالجة المستندات في لوحة التحكم. Appears on @@ -3965,7 +3965,7 @@ src/app/components/manage/settings/settings.component.html 201 - Appears on + يظهر في No saved views defined. @@ -3973,7 +3973,7 @@ src/app/components/manage/settings/settings.component.html 218 - No saved views defined. + لا توجد آراء محفوظة. Mail @@ -3981,7 +3981,7 @@ src/app/components/manage/settings/settings.component.html 231 - Mail + البريد Mail accounts @@ -3989,7 +3989,7 @@ src/app/components/manage/settings/settings.component.html 236 - Mail accounts + حسابات البريد Add Account @@ -3997,7 +3997,7 @@ src/app/components/manage/settings/settings.component.html 241 - Add Account + إضافة حساب Server @@ -4005,7 +4005,7 @@ src/app/components/manage/settings/settings.component.html 249 - Server + خادم No mail accounts defined. @@ -4013,7 +4013,7 @@ src/app/components/manage/settings/settings.component.html 267 - No mail accounts defined. + لا توجد حسابات بريدية. Mail rules @@ -4021,7 +4021,7 @@ src/app/components/manage/settings/settings.component.html 271 - Mail rules + قواعد البريد Add Rule @@ -4029,7 +4029,7 @@ src/app/components/manage/settings/settings.component.html 276 - Add Rule + إضافة قاعدة No mail rules defined. @@ -4037,7 +4037,7 @@ src/app/components/manage/settings/settings.component.html 302 - No mail rules defined. + لا توجد قواعد للبريد. Saved view "" deleted. @@ -4045,7 +4045,7 @@ src/app/components/manage/settings/settings.component.ts 367 - Saved view "" deleted. + العرض المحفوظ "" مُسح. Settings saved @@ -4053,7 +4053,7 @@ src/app/components/manage/settings/settings.component.ts 460 - Settings saved + الإعدادات حُفظت Settings were saved successfully. @@ -4061,7 +4061,7 @@ src/app/components/manage/settings/settings.component.ts 461 - Settings were saved successfully. + حُفظت الإعدادات بنجاح. Settings were saved successfully. Reload is required to apply some changes. From 493f6173da7ffe7ac0ccab5b1f2ccbf79dd0c3ba Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Thu, 8 Dec 2022 09:18:26 -0800 Subject: [PATCH 135/231] New translations django.po (Arabic) [ci skip] --- src/locale/ar_SA/LC_MESSAGES/django.po | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/locale/ar_SA/LC_MESSAGES/django.po b/src/locale/ar_SA/LC_MESSAGES/django.po index e68e65e92..8eefb8930 100644 --- a/src/locale/ar_SA/LC_MESSAGES/django.po +++ b/src/locale/ar_SA/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-09 21:50+0000\n" -"PO-Revision-Date: 2022-12-08 14:25\n" +"PO-Revision-Date: 2022-12-08 17:18\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -260,7 +260,7 @@ msgstr "المستخدم" #: documents/models.py:370 msgid "show on dashboard" -msgstr "عرض على لوحة البيانات" +msgstr "عرض على لوحة التحكم" #: documents/models.py:373 msgid "show in sidebar" @@ -818,7 +818,7 @@ msgstr "تصفية الموضوع" #: paperless_mail/models.py:114 msgid "filter body" -msgstr "" +msgstr "تصفية الجسم" #: paperless_mail/models.py:121 msgid "filter attachment filename" @@ -834,23 +834,23 @@ msgstr "أقصى عُمُر" #: paperless_mail/models.py:135 msgid "Specified in days." -msgstr "" +msgstr "محدد بالأيام." #: paperless_mail/models.py:139 msgid "attachment type" -msgstr "" +msgstr "نوع المرفق" #: paperless_mail/models.py:143 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." -msgstr "" +msgstr "تتضمن المرفقات المضمنة صورا مضمنة، لذا من الأفضل دمج هذا الخِيار مع تصفية اسم الملف." #: paperless_mail/models.py:149 msgid "action" -msgstr "" +msgstr "إجراء" #: paperless_mail/models.py:155 msgid "action parameter" -msgstr "" +msgstr "إجراء العامل" #: paperless_mail/models.py:160 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." @@ -858,21 +858,21 @@ msgstr "" #: paperless_mail/models.py:168 msgid "assign title from" -msgstr "" +msgstr "تعيين العنوان من" #: paperless_mail/models.py:176 msgid "assign this tag" -msgstr "" +msgstr "تعيين هذا الوسم" #: paperless_mail/models.py:184 msgid "assign this document type" -msgstr "" +msgstr "تعيين نوع هذا المستند" #: paperless_mail/models.py:188 msgid "assign correspondent from" -msgstr "" +msgstr "تعيين مراسل من" #: paperless_mail/models.py:198 msgid "assign this correspondent" -msgstr "" +msgstr "تعيين هذا المراسل" From 37d3a624b77117c8ab86f704922ba4b9dbe9566c Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Thu, 8 Dec 2022 10:32:55 -0800 Subject: [PATCH 136/231] New translations messages.xlf (Arabic) [ci skip] --- src-ui/src/locale/messages.ar_SA.xlf | 202 +++++++++++++-------------- 1 file changed, 101 insertions(+), 101 deletions(-) diff --git a/src-ui/src/locale/messages.ar_SA.xlf b/src-ui/src/locale/messages.ar_SA.xlf index 343e3f652..d607e48aa 100644 --- a/src-ui/src/locale/messages.ar_SA.xlf +++ b/src-ui/src/locale/messages.ar_SA.xlf @@ -1618,7 +1618,7 @@ src/app/components/manage/storage-path-list/storage-path-list.component.ts 35 - Path + مسار e.g. @@ -1626,7 +1626,7 @@ src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts 21 - e.g. + مثال. or use slashes to add directories e.g. @@ -1634,7 +1634,7 @@ src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts 23 - or use slashes to add directories e.g. + أو استخدم الخطوط المائلة لإضافة مجلدات مثل. See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. @@ -1642,7 +1642,7 @@ src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts 25 - See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. + راجع المستندات <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"></a> للاطلاع على القائمة الكاملة. Create new storage path @@ -1650,7 +1650,7 @@ src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts 30 - Create new storage path + إنشاء مسار تخزين جديد Edit storage path @@ -1658,7 +1658,7 @@ src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts 34 - Edit storage path + تعديل مسار التخزين Color @@ -1694,7 +1694,7 @@ src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts 21 - Create new tag + إنشاء وسم جديد Edit tag @@ -1702,7 +1702,7 @@ src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts 25 - Edit tag + تعديل الوسم All @@ -1714,7 +1714,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html 20 - All + الكل Any @@ -1722,7 +1722,7 @@ src/app/components/common/filterable-dropdown/filterable-dropdown.component.html 18 - Any + أي Apply @@ -1730,7 +1730,7 @@ src/app/components/common/filterable-dropdown/filterable-dropdown.component.html 32 - Apply + تطبيق Click again to exclude items. @@ -1738,7 +1738,7 @@ src/app/components/common/filterable-dropdown/filterable-dropdown.component.html 38 - Click again to exclude items. + انقر مرة أخرى لاستبعاد العناصر. Not assigned @@ -1747,7 +1747,7 @@ 261 Filter drop down element to filter for documents with no correspondent/type/tag assigned - Not assigned + غير معين Invalid date. @@ -1771,7 +1771,7 @@ src/app/components/common/input/tags/tags.component.html 42 - Suggestions: + الاقتراحات: Add item @@ -1780,7 +1780,7 @@ 11 Used for both types, correspondents, storage paths - Add item + إضافة عنصر Add tag @@ -1788,7 +1788,7 @@ src/app/components/common/input/tags/tags.component.html 11 - Add tag + إضافة وسم Select @@ -1844,7 +1844,7 @@ src/app/components/manage/tasks/tasks.component.html 27 - Loading... + تحميل... Hello , welcome to Paperless-ngx @@ -2023,7 +2023,7 @@ 179 this string is used to separate processing, failed and added on the file upload widget - , + , Paperless-ngx is running! @@ -2071,7 +2071,7 @@ src/app/components/document-asn/document-asn.component.html 1 - Searching document with asn + البحث عن المستند باستخدام asn Enter comment @@ -2079,7 +2079,7 @@ src/app/components/document-comments/document-comments.component.html 4 - Enter comment + أدخل تعليق Please enter a comment. @@ -2087,7 +2087,7 @@ src/app/components/document-comments/document-comments.component.html 5,7 - Please enter a comment. + الرجاء إدخال تعليق. Add comment @@ -2095,7 +2095,7 @@ src/app/components/document-comments/document-comments.component.html 11 - Add comment + إضافة تعليق Error saving comment: @@ -2103,7 +2103,7 @@ src/app/components/document-comments/document-comments.component.ts 68 - Error saving comment: + خطأ في حفظ التعليق: Error deleting comment: @@ -2111,7 +2111,7 @@ src/app/components/document-comments/document-comments.component.ts 83 - Error deleting comment: + خطأ في حذف التعليق: Page @@ -2167,7 +2167,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html 90 - Redo OCR + إعادة OCR More like this @@ -2199,7 +2199,7 @@ src/app/components/document-detail/document-detail.component.html 50 - Previous + السابق Details @@ -2247,7 +2247,7 @@ src/app/services/rest/document.service.ts 19 - Correspondent + مراسل Document type @@ -3013,7 +3013,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 49 - Added: + أضيف: Modified: @@ -3025,7 +3025,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 50 - Modified: + معدل: Score: @@ -3033,7 +3033,7 @@ src/app/components/document-list/document-card-large/document-card-large.component.html 98 - Score: + النقاط: Toggle tag filter @@ -3041,7 +3041,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 14 - Toggle tag filter + تبديل تصفية الوسم Toggle correspondent filter @@ -3049,7 +3049,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 24 - Toggle correspondent filter + تبديل تصفية المراسل Toggle document type filter @@ -3057,7 +3057,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 31 - Toggle document type filter + تبديل تصفية نوع المستند Toggle storage path filter @@ -3065,7 +3065,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 38 - Toggle storage path filter + تبديل تصفية مسار التخزين Select none @@ -3113,7 +3113,7 @@ src/app/components/document-list/document-list.component.html 75 - Save "" + حفظ "" Save as... @@ -3129,7 +3129,7 @@ src/app/components/document-list/document-list.component.html 95 - {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} + {VAR_PLURAL, plural, zero {} one {تم اختياره من مستندات} two {تم اختياره من مستندات} few {تم اختياره من مستندات} many {تم اختياره من مستندات}=1 {تم اختيار لمستند واحد} other {تم اختياره من مستندات}} {VAR_PLURAL, plural, =1 {One document} other { documents}} @@ -3137,7 +3137,7 @@ src/app/components/document-list/document-list.component.html 97 - {VAR_PLURAL, plural, =1 {One document} other { documents}} + {VAR_PLURAL, plural, zero {} one { المزيد من المستندات} two { المزيد من المستندات} few { المزيد من المستندات} many { المزيد من المستندات}=1 {مستند واحد آخر} other { المزيد من المستندات}} (filtered) @@ -3153,7 +3153,7 @@ src/app/components/document-list/document-list.component.html 110 - Error while loading documents + خطأ في أثناء تحميل المستندات ASN @@ -3169,7 +3169,7 @@ src/app/services/rest/document.service.ts 18 - ASN + ASN Added @@ -3193,7 +3193,7 @@ src/app/components/document-list/document-list.component.html 182 - Edit document + تعديل المستند View "" saved successfully. @@ -3201,7 +3201,7 @@ src/app/components/document-list/document-list.component.ts 196 - View "" saved successfully. + عرض "" حفظ بنجاح. View "" created successfully. @@ -3209,7 +3209,7 @@ src/app/components/document-list/document-list.component.ts 237 - View "" created successfully. + عرض "" أنشئ بنجاح. Reset filters @@ -3217,7 +3217,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html 78 - Reset filters + إعادة تعيين التصفيات Correspondent: @@ -3613,7 +3613,7 @@ src/app/components/manage/management-list/management-list.component.ts 155,157 - Error occurred while saving : . + حدث خطأ في أثناء حفظ : . Do you really want to delete the ? @@ -3621,7 +3621,7 @@ src/app/components/manage/management-list/management-list.component.ts 164 - Do you really want to delete the ? + هل تريد حقاً حذف ؟ Associated documents will not be deleted. @@ -3629,7 +3629,7 @@ src/app/components/manage/management-list/management-list.component.ts 179 - Associated documents will not be deleted. + لن تحذف المستندات المرتبطة بها. Error while deleting element: @@ -3637,7 +3637,7 @@ src/app/components/manage/management-list/management-list.component.ts 192,194 - Error while deleting element: + حدث خطأ في أثناء حذف العنصر: Start tour @@ -4069,7 +4069,7 @@ src/app/components/manage/settings/settings.component.ts 465 - Settings were saved successfully. Reload is required to apply some changes. + حفظت الإعدادات بنجاح. إعادة تحميل مطلوب لتطبيق بعض التغييرات. Reload now @@ -4077,7 +4077,7 @@ src/app/components/manage/settings/settings.component.ts 466 - Reload now + إعادة تحميل الآن Use system language @@ -4101,7 +4101,7 @@ src/app/components/manage/settings/settings.component.ts 511,513 - Error while storing settings on server: + خطأ في أثناء حفظ الإعدادات على الخادم: Saved account "". @@ -4109,7 +4109,7 @@ src/app/components/manage/settings/settings.component.ts 538 - Saved account "". + حفظ الحساب"". Error saving account: . @@ -4117,7 +4117,7 @@ src/app/components/manage/settings/settings.component.ts 548 - Error saving account: . + خطأ في حفظ الحساب: . Confirm delete mail account @@ -4125,7 +4125,7 @@ src/app/components/manage/settings/settings.component.ts 558 - Confirm delete mail account + تأكيد حذف حساب البريد This operation will permanently this mail account. @@ -4133,7 +4133,7 @@ src/app/components/manage/settings/settings.component.ts 559 - This operation will permanently this mail account. + هذه العملية ستحصل بشكل دائم على حساب البريد هذا. Deleted mail account @@ -4141,7 +4141,7 @@ src/app/components/manage/settings/settings.component.ts 568 - Deleted mail account + تم حذف حساب البريد Error deleting mail account: . @@ -4149,7 +4149,7 @@ src/app/components/manage/settings/settings.component.ts 577 - Error deleting mail account: . + خطأ في حذف حساب البريد: . Saved rule "". @@ -4157,7 +4157,7 @@ src/app/components/manage/settings/settings.component.ts 596 - Saved rule "". + قاعدة محفوظة "". Error saving rule: . @@ -4165,7 +4165,7 @@ src/app/components/manage/settings/settings.component.ts 607 - Error saving rule: . + خطأ في حفظ القاعدة: . Confirm delete mail rule @@ -4173,7 +4173,7 @@ src/app/components/manage/settings/settings.component.ts 617 - Confirm delete mail rule + تأكيد حذف حساب البريد This operation will permanently this mail rule. @@ -4181,7 +4181,7 @@ src/app/components/manage/settings/settings.component.ts 618 - This operation will permanently this mail rule. + هذه العملية ستحصل بشكل دائم على حساب البريد هذا. Deleted mail rule @@ -4189,7 +4189,7 @@ src/app/components/manage/settings/settings.component.ts 627 - Deleted mail rule + تم حذف قاعدة البريد Error deleting mail rule: . @@ -4197,7 +4197,7 @@ src/app/components/manage/settings/settings.component.ts 636 - Error deleting mail rule: . + خطأ في حذف قاعدة البريد: . storage path @@ -4205,7 +4205,7 @@ src/app/components/manage/storage-path-list/storage-path-list.component.ts 30 - storage path + مسار التخزين storage paths @@ -4213,7 +4213,7 @@ src/app/components/manage/storage-path-list/storage-path-list.component.ts 31 - storage paths + مسارات التخزين Do you really want to delete the storage path ""? @@ -4221,7 +4221,7 @@ src/app/components/manage/storage-path-list/storage-path-list.component.ts 45 - Do you really want to delete the storage path ""? + هل تريد حقاً حذف مسار التخزين " tag @@ -4229,7 +4229,7 @@ src/app/components/manage/tag-list/tag-list.component.ts 30 - tag + وسم tags @@ -4237,7 +4237,7 @@ src/app/components/manage/tag-list/tag-list.component.ts 31 - tags + وسوم Do you really want to delete the tag ""? @@ -4253,7 +4253,7 @@ src/app/components/manage/tasks/tasks.component.html 6 - Clear selection + إزالة التحديد @@ -4263,7 +4263,7 @@ src/app/components/manage/tasks/tasks.component.html 11 - + Refresh @@ -4271,7 +4271,7 @@ src/app/components/manage/tasks/tasks.component.html 20 - Refresh + تحديث Results @@ -4279,7 +4279,7 @@ src/app/components/manage/tasks/tasks.component.html 42 - Results + النتائج click for full output @@ -4299,7 +4299,7 @@ src/app/components/manage/tasks/tasks.component.ts 56 - Dismiss + رفض Open Document @@ -4307,7 +4307,7 @@ src/app/components/manage/tasks/tasks.component.html 86 - Open Document + فتح مستند Failed  @@ -4691,7 +4691,7 @@ src/app/services/open-documents.service.ts 118 - You have unsaved changes to the document + لديك تغييرات في المستند غير محفوظة Are you sure you want to close this document? @@ -4699,7 +4699,7 @@ src/app/services/open-documents.service.ts 122 - Are you sure you want to close this document? + هل أنت متيقِّن من إغلاق هذا المستند؟ Close document @@ -4707,7 +4707,7 @@ src/app/services/open-documents.service.ts 124 - Close document + إغلاق المستند Are you sure you want to close all documents? @@ -4715,7 +4715,7 @@ src/app/services/open-documents.service.ts 145 - Are you sure you want to close all documents? + هل أنت متيقِّن من إغلاق كافة المستندات؟ Close documents @@ -4723,7 +4723,7 @@ src/app/services/open-documents.service.ts 147 - Close documents + إغلاق المستندات Modified @@ -4748,7 +4748,7 @@ src/app/services/settings.service.ts 145 - English (US) + الإنجليزية (الولايات المتحدة) Belarusian @@ -4756,7 +4756,7 @@ src/app/services/settings.service.ts 151 - Belarusian + البيلاروسية Czech @@ -4764,7 +4764,7 @@ src/app/services/settings.service.ts 157 - Czech + التشيكية Danish @@ -4772,7 +4772,7 @@ src/app/services/settings.service.ts 163 - Danish + الدانماركية German @@ -4780,7 +4780,7 @@ src/app/services/settings.service.ts 169 - German + الألمانية English (GB) @@ -4788,7 +4788,7 @@ src/app/services/settings.service.ts 175 - English (GB) + الإنجليزية (المملكة المتحدة) Spanish @@ -4804,7 +4804,7 @@ src/app/services/settings.service.ts 187 - French + الفرنسية Italian @@ -4812,7 +4812,7 @@ src/app/services/settings.service.ts 193 - Italian + الإيطالية Luxembourgish @@ -4820,7 +4820,7 @@ src/app/services/settings.service.ts 199 - Luxembourgish + اللوكسمبرجية Dutch @@ -4828,7 +4828,7 @@ src/app/services/settings.service.ts 205 - Dutch + الهولندية Polish @@ -4844,7 +4844,7 @@ src/app/services/settings.service.ts 217 - Portuguese (Brazil) + البرتغالية (البرازيل) Portuguese @@ -4860,7 +4860,7 @@ src/app/services/settings.service.ts 229 - Romanian + الرومانية Russian @@ -4876,7 +4876,7 @@ src/app/services/settings.service.ts 241 - Slovenian + السلوفانية Serbian @@ -4884,7 +4884,7 @@ src/app/services/settings.service.ts 247 - Serbian + الصربية Swedish @@ -4900,7 +4900,7 @@ src/app/services/settings.service.ts 259 - Turkish + التركية Chinese Simplified @@ -4908,7 +4908,7 @@ src/app/services/settings.service.ts 265 - Chinese Simplified + الصينية المبسطة ISO 8601 @@ -4916,7 +4916,7 @@ src/app/services/settings.service.ts 282 - ISO 8601 + ISO 8601 Successfully completed one-time migratration of settings to the database! @@ -4924,7 +4924,7 @@ src/app/services/settings.service.ts 393 - Successfully completed one-time migratration of settings to the database! + تم بنجاح ترحيل الإعدادات مرة واحدة إلى قاعدة البيانات! Unable to migrate settings to the database, please try saving manually. @@ -4932,7 +4932,7 @@ src/app/services/settings.service.ts 394 - Unable to migrate settings to the database, please try saving manually. + غير قادر على ترحيل الإعدادات إلى قاعدة البيانات، الرجاء محاولة الحفظ يدوياً. Error @@ -4956,7 +4956,7 @@ src/app/services/upload-documents.service.ts 31 - Connecting... + الاتصال... Uploading... @@ -4964,7 +4964,7 @@ src/app/services/upload-documents.service.ts 43 - Uploading... + التحميل... Upload complete, waiting... @@ -4972,7 +4972,7 @@ src/app/services/upload-documents.service.ts 46 - Upload complete, waiting... + اكتمل الرفع، انتظر... HTTP error: @@ -4980,7 +4980,7 @@ src/app/services/upload-documents.service.ts 62 - HTTP error: + خطأ HTTP: From ff4a8b37bd63cbef012273ebb5a852157179e035 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Thu, 8 Dec 2022 12:30:20 -0800 Subject: [PATCH 137/231] Install all wheels in the dir instead of specific names --- Dockerfile | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index a1f577243..32598c483 100644 --- a/Dockerfile +++ b/Dockerfile @@ -45,7 +45,7 @@ COPY Pipfile* ./ RUN set -eux \ && echo "Installing pipenv" \ - && python3 -m pip install --no-cache-dir --upgrade pipenv \ + && python3 -m pip install --no-cache-dir --upgrade pipenv==2022.10.12 \ && echo "Generating requirement.txt" \ && pipenv requirements > requirements.txt @@ -197,11 +197,7 @@ RUN --mount=type=bind,from=qpdf-builder,target=/qpdf \ && apt-get install --yes --no-install-recommends /qpdf/usr/src/qpdf/libqpdf29_*.deb \ && apt-get install --yes --no-install-recommends /qpdf/usr/src/qpdf/qpdf_*.deb \ && echo "Installing pikepdf and dependencies" \ - && python3 -m pip install --no-cache-dir /pikepdf/usr/src/wheels/pyparsing*.whl \ - && python3 -m pip install --no-cache-dir /pikepdf/usr/src/wheels/packaging*.whl \ - && python3 -m pip install --no-cache-dir /pikepdf/usr/src/wheels/lxml*.whl \ - && python3 -m pip install --no-cache-dir /pikepdf/usr/src/wheels/Pillow*.whl \ - && python3 -m pip install --no-cache-dir /pikepdf/usr/src/wheels/pikepdf*.whl \ + && python3 -m pip install --no-cache-dir /pikepdf/usr/src/wheels/*.whl \ && python3 -m pip list \ && echo "Installing psycopg2" \ && python3 -m pip install --no-cache-dir /psycopg2/usr/src/wheels/psycopg2*.whl \ From 54bb1ae27de20c274056d656dc667e3ff827b65a Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Sat, 19 Nov 2022 17:37:32 -0800 Subject: [PATCH 138/231] Adds an optional API field to follow the filenaming format when creating a bulk download zip --- src/documents/bulk_download.py | 37 ++++++-- src/documents/models.py | 3 + src/documents/serialisers.py | 4 + src/documents/tests/test_api.py | 145 ++++++++++++++++++++++++++++++-- src/documents/views.py | 3 +- 5 files changed, 181 insertions(+), 11 deletions(-) diff --git a/src/documents/bulk_download.py b/src/documents/bulk_download.py index 6beefa23b..87d97afcc 100644 --- a/src/documents/bulk_download.py +++ b/src/documents/bulk_download.py @@ -1,18 +1,29 @@ +import os from zipfile import ZipFile from documents.models import Document class BulkArchiveStrategy: - def __init__(self, zipf: ZipFile): + def __init__(self, zipf: ZipFile, follow_formatting: bool = False): self.zipf = zipf + if follow_formatting: + self.make_unique_filename = self._formatted_filepath + else: + self.make_unique_filename = self._filename_only - def make_unique_filename( + def _filename_only( self, doc: Document, archive: bool = False, folder: str = "", ): + """ + Constructs a unique name for the given document to be used inside the + zip file. + + The filename might not be unique enough, so a counter is appended if needed + """ counter = 0 while True: filename = folder + doc.get_public_filename(archive, counter) @@ -21,6 +32,25 @@ class BulkArchiveStrategy: else: return filename + def _formatted_filepath( + self, + doc: Document, + archive: bool = False, + folder: str = "", + ): + """ + Constructs a full file path for the given document to be used inside + the zipfile. + + The path is already unique, as handled when a document is consumed or updated + """ + if archive and doc.has_archive_version: + in_archive_path = os.path.join(folder, doc.archive_filename) + else: + in_archive_path = os.path.join(folder, doc.filename) + + return in_archive_path + def add_document(self, doc: Document): raise NotImplementedError() # pragma: no cover @@ -31,9 +61,6 @@ class OriginalsOnlyStrategy(BulkArchiveStrategy): class ArchiveOnlyStrategy(BulkArchiveStrategy): - def __init__(self, zipf): - super().__init__(zipf) - def add_document(self, doc: Document): if doc.has_archive_version: self.zipf.write( diff --git a/src/documents/models.py b/src/documents/models.py index c1b9c88bc..1ee6dfedb 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -287,6 +287,9 @@ class Document(models.Model): return open(self.archive_path, "rb") def get_public_filename(self, archive=False, counter=0, suffix=None) -> str: + """ + Returns a sanitized filename for the document, not including any paths. + """ result = str(self) if counter: diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index db282cacd..3e6ec4390 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -551,6 +551,10 @@ class BulkDownloadSerializer(DocumentListSerializer): default="none", ) + follow_formatting = serializers.BooleanField( + default=False, + ) + def validate_compression(self, compression): import zipfile diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index d876984bd..a7e2be53f 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -2329,6 +2329,9 @@ class TestBulkEdit(DirectoriesMixin, APITestCase): class TestBulkDownload(DirectoriesMixin, APITestCase): + + ENDPOINT = "/api/documents/bulk_download/" + def setUp(self): super().setUp() @@ -2379,7 +2382,7 @@ class TestBulkDownload(DirectoriesMixin, APITestCase): def test_download_originals(self): response = self.client.post( - "/api/documents/bulk_download/", + self.ENDPOINT, json.dumps( {"documents": [self.doc2.id, self.doc3.id], "content": "originals"}, ), @@ -2402,7 +2405,7 @@ class TestBulkDownload(DirectoriesMixin, APITestCase): def test_download_default(self): response = self.client.post( - "/api/documents/bulk_download/", + self.ENDPOINT, json.dumps({"documents": [self.doc2.id, self.doc3.id]}), content_type="application/json", ) @@ -2423,7 +2426,7 @@ class TestBulkDownload(DirectoriesMixin, APITestCase): def test_download_both(self): response = self.client.post( - "/api/documents/bulk_download/", + self.ENDPOINT, json.dumps({"documents": [self.doc2.id, self.doc3.id], "content": "both"}), content_type="application/json", ) @@ -2457,7 +2460,7 @@ class TestBulkDownload(DirectoriesMixin, APITestCase): def test_filename_clashes(self): response = self.client.post( - "/api/documents/bulk_download/", + self.ENDPOINT, json.dumps({"documents": [self.doc2.id, self.doc2b.id]}), content_type="application/json", ) @@ -2479,13 +2482,145 @@ class TestBulkDownload(DirectoriesMixin, APITestCase): def test_compression(self): response = self.client.post( - "/api/documents/bulk_download/", + self.ENDPOINT, json.dumps( {"documents": [self.doc2.id, self.doc2b.id], "compression": "lzma"}, ), content_type="application/json", ) + @override_settings(FILENAME_FORMAT="{correspondent}/{title}") + def test_formatted_download_originals(self): + + c = Correspondent.objects.create(name="test") + c2 = Correspondent.objects.create(name="a space name") + + self.doc2.correspondent = c + self.doc2.title = "This is Doc 2" + self.doc2.save() + + self.doc3.correspondent = c2 + self.doc3.title = "Title 2 - Doc 3" + self.doc3.save() + + response = self.client.post( + self.ENDPOINT, + json.dumps( + { + "documents": [self.doc2.id, self.doc3.id], + "content": "originals", + "follow_formatting": True, + }, + ), + content_type="application/json", + ) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response["Content-Type"], "application/zip") + + with zipfile.ZipFile(io.BytesIO(response.content)) as zipf: + self.assertEqual(len(zipf.filelist), 2) + self.assertIn("a space name/Title 2 - Doc 3.jpg", zipf.namelist()) + self.assertIn("test/This is Doc 2.pdf", zipf.namelist()) + + with self.doc2.source_file as f: + self.assertEqual(f.read(), zipf.read("test/This is Doc 2.pdf")) + + with self.doc3.source_file as f: + self.assertEqual( + f.read(), + zipf.read("a space name/Title 2 - Doc 3.jpg"), + ) + + @override_settings(FILENAME_FORMAT="somewhere/{title}") + def test_formatted_download_archive(self): + + self.doc2.title = "This is Doc 2" + self.doc2.save() + + self.doc3.title = "Title 2 - Doc 3" + self.doc3.save() + print(self.doc3.archive_path) + print(self.doc3.archive_filename) + + response = self.client.post( + self.ENDPOINT, + json.dumps( + { + "documents": [self.doc2.id, self.doc3.id], + "follow_formatting": True, + }, + ), + content_type="application/json", + ) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response["Content-Type"], "application/zip") + + with zipfile.ZipFile(io.BytesIO(response.content)) as zipf: + self.assertEqual(len(zipf.filelist), 2) + self.assertIn("somewhere/This is Doc 2.pdf", zipf.namelist()) + self.assertIn("somewhere/Title 2 - Doc 3.pdf", zipf.namelist()) + + with self.doc2.source_file as f: + self.assertEqual(f.read(), zipf.read("somewhere/This is Doc 2.pdf")) + + with self.doc3.archive_file as f: + self.assertEqual(f.read(), zipf.read("somewhere/Title 2 - Doc 3.pdf")) + + @override_settings(FILENAME_FORMAT="{document_type}/{title}") + def test_formatted_download_both(self): + + dc1 = DocumentType.objects.create(name="bill") + dc2 = DocumentType.objects.create(name="statement") + + self.doc2.document_type = dc1 + self.doc2.title = "This is Doc 2" + self.doc2.save() + + self.doc3.document_type = dc2 + self.doc3.title = "Title 2 - Doc 3" + self.doc3.save() + + response = self.client.post( + self.ENDPOINT, + json.dumps( + { + "documents": [self.doc2.id, self.doc3.id], + "content": "both", + "follow_formatting": True, + }, + ), + content_type="application/json", + ) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response["Content-Type"], "application/zip") + + with zipfile.ZipFile(io.BytesIO(response.content)) as zipf: + self.assertEqual(len(zipf.filelist), 3) + self.assertIn("originals/bill/This is Doc 2.pdf", zipf.namelist()) + self.assertIn("archive/statement/Title 2 - Doc 3.pdf", zipf.namelist()) + self.assertIn("originals/statement/Title 2 - Doc 3.jpg", zipf.namelist()) + + with self.doc2.source_file as f: + self.assertEqual( + f.read(), + zipf.read("originals/bill/This is Doc 2.pdf"), + ) + + with self.doc3.archive_file as f: + self.assertEqual( + f.read(), + zipf.read("archive/statement/Title 2 - Doc 3.pdf"), + ) + + with self.doc3.source_file as f: + self.assertEqual( + f.read(), + zipf.read("originals/statement/Title 2 - Doc 3.jpg"), + ) + class TestApiAuth(DirectoriesMixin, APITestCase): def test_auth_required(self): diff --git a/src/documents/views.py b/src/documents/views.py index 10225be6f..ce82cbfaa 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -745,6 +745,7 @@ class BulkDownloadView(GenericAPIView): ids = serializer.validated_data.get("documents") compression = serializer.validated_data.get("compression") content = serializer.validated_data.get("content") + follow_filename_format = serializer.validated_data.get("follow_formatting") os.makedirs(settings.SCRATCH_DIR, exist_ok=True) temp = tempfile.NamedTemporaryFile( @@ -761,7 +762,7 @@ class BulkDownloadView(GenericAPIView): strategy_class = ArchiveOnlyStrategy with zipfile.ZipFile(temp.name, "w", compression) as zipf: - strategy = strategy_class(zipf) + strategy = strategy_class(zipf, follow_filename_format) for id in ids: doc = Document.objects.get(id=id) strategy.add_document(doc) From 812df3782a7f5aacd2391ccdf553abd53c688d8c Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Sat, 19 Nov 2022 17:47:18 -0800 Subject: [PATCH 139/231] Documents the test conditions --- src/documents/tests/test_api.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index a7e2be53f..c9d8aefc2 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -2491,6 +2491,15 @@ class TestBulkDownload(DirectoriesMixin, APITestCase): @override_settings(FILENAME_FORMAT="{correspondent}/{title}") def test_formatted_download_originals(self): + """ + GIVEN: + - Defined file naming format + WHEN: + - Bulk download request for original documents + - Bulk download request requests to follow format + THEN: + - Files defined in resulting zipfile are formatted + """ c = Correspondent.objects.create(name="test") c2 = Correspondent.objects.create(name="a space name") @@ -2534,6 +2543,15 @@ class TestBulkDownload(DirectoriesMixin, APITestCase): @override_settings(FILENAME_FORMAT="somewhere/{title}") def test_formatted_download_archive(self): + """ + GIVEN: + - Defined file naming format + WHEN: + - Bulk download request for archive documents + - Bulk download request requests to follow format + THEN: + - Files defined in resulting zipfile are formatted + """ self.doc2.title = "This is Doc 2" self.doc2.save() @@ -2570,6 +2588,15 @@ class TestBulkDownload(DirectoriesMixin, APITestCase): @override_settings(FILENAME_FORMAT="{document_type}/{title}") def test_formatted_download_both(self): + """ + GIVEN: + - Defined file naming format + WHEN: + - Bulk download request for original documents and archive documents + - Bulk download request requests to follow format + THEN: + - Files defined in resulting zipfile are formatted + """ dc1 = DocumentType.objects.create(name="bill") dc2 = DocumentType.objects.create(name="statement") From 48ef8eca80a385623449b4110f2de6a51b8a4059 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 4 Dec 2022 23:09:19 -0800 Subject: [PATCH 140/231] Add bulk download options dropdown --- .../bulk-editor/bulk-editor.component.html | 66 ++++++--- .../bulk-editor/bulk-editor.component.scss | 7 + .../bulk-editor/bulk-editor.component.ts | 133 +++++++++++++----- .../src/app/services/rest/document.service.ts | 12 +- src-ui/src/theme.scss | 6 +- 5 files changed, 171 insertions(+), 53 deletions(-) diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html index 04069d997..d8345fd81 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html +++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html @@ -66,7 +66,6 @@
    -
    - -
    +
    - +
    + +
    + +
    + +

    Include:

    +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    + +
    +
    +
    + +
    + +
    diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.scss b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.scss index e69de29bb..939f2c790 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.scss +++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.scss @@ -0,0 +1,7 @@ +.dropdown-toggle-split { + --bs-border-radius: .25rem; +} + +.dropdown-menu{ + --bs-dropdown-min-width: 12rem; +} diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts index 7c2ca6e55..dbfb9d2f0 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts +++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts @@ -25,6 +25,8 @@ import { saveAs } from 'file-saver' import { StoragePathService } from 'src/app/services/rest/storage-path.service' import { PaperlessStoragePath } from 'src/app/data/paperless-storage-path' import { SETTINGS_KEYS } from 'src/app/data/paperless-uisettings' +import { FormControl, FormGroup } from '@angular/forms' +import { first, Subject, takeUntil } from 'rxjs' @Component({ selector: 'app-bulk-editor', @@ -43,6 +45,14 @@ export class BulkEditorComponent { storagePathsSelectionModel = new FilterableDropdownSelectionModel() awaitingDownload: boolean + unsubscribeNotifier: Subject = new Subject() + + downloadForm = new FormGroup({ + downloadFileTypeArchive: new FormControl(true), + downloadFileTypeOriginals: new FormControl(false), + downloadUseFormatting: new FormControl(false), + }) + constructor( private documentTypeService: DocumentTypeService, private tagService: TagService, @@ -66,16 +76,46 @@ export class BulkEditorComponent { ngOnInit() { this.tagService .listAll() + .pipe(first()) .subscribe((result) => (this.tags = result.results)) this.correspondentService .listAll() + .pipe(first()) .subscribe((result) => (this.correspondents = result.results)) this.documentTypeService .listAll() + .pipe(first()) .subscribe((result) => (this.documentTypes = result.results)) this.storagePathService .listAll() + .pipe(first()) .subscribe((result) => (this.storagePaths = result.results)) + + this.downloadForm + .get('downloadFileTypeArchive') + .valueChanges.pipe(takeUntil(this.unsubscribeNotifier)) + .subscribe((newValue) => { + if (!newValue) { + this.downloadForm + .get('downloadFileTypeOriginals') + .patchValue(true, { emitEvent: false }) + } + }) + this.downloadForm + .get('downloadFileTypeOriginals') + .valueChanges.pipe(takeUntil(this.unsubscribeNotifier)) + .subscribe((newValue) => { + if (!newValue) { + this.downloadForm + .get('downloadFileTypeArchive') + .patchValue(true, { emitEvent: false }) + } + }) + } + + ngOnDestroy(): void { + this.unsubscribeNotifier.next(this) + this.unsubscribeNotifier.complete() } private executeBulkOperation(modal, method: string, args) { @@ -84,8 +124,9 @@ export class BulkEditorComponent { } this.documentService .bulkEdit(Array.from(this.list.selected), method, args) - .subscribe( - (response) => { + .pipe(first()) + .subscribe({ + next: () => { this.list.reload() this.list.reduceSelectionToFilter() this.list.selected.forEach((id) => { @@ -95,7 +136,7 @@ export class BulkEditorComponent { modal.close() } }, - (error) => { + error: (error) => { if (modal) { modal.componentInstance.buttonsEnabled = true } @@ -104,8 +145,8 @@ export class BulkEditorComponent { error.error )}` ) - } - ) + }, + }) } private applySelectionData( @@ -126,6 +167,7 @@ export class BulkEditorComponent { openTagsDropdown() { this.documentService .getSelectionData(Array.from(this.list.selected)) + .pipe(first()) .subscribe((s) => { this.applySelectionData(s.selected_tags, this.tagSelectionModel) }) @@ -134,6 +176,7 @@ export class BulkEditorComponent { openDocumentTypeDropdown() { this.documentService .getSelectionData(Array.from(this.list.selected)) + .pipe(first()) .subscribe((s) => { this.applySelectionData( s.selected_document_types, @@ -145,6 +188,7 @@ export class BulkEditorComponent { openCorrespondentDropdown() { this.documentService .getSelectionData(Array.from(this.list.selected)) + .pipe(first()) .subscribe((s) => { this.applySelectionData( s.selected_correspondents, @@ -156,6 +200,7 @@ export class BulkEditorComponent { openStoragePathDropdown() { this.documentService .getSelectionData(Array.from(this.list.selected)) + .pipe(first()) .subscribe((s) => { this.applySelectionData( s.selected_storage_paths, @@ -232,12 +277,14 @@ export class BulkEditorComponent { modal.componentInstance.btnClass = 'btn-warning' modal.componentInstance.btnCaption = $localize`Confirm` - modal.componentInstance.confirmClicked.subscribe(() => { - this.executeBulkOperation(modal, 'modify_tags', { - add_tags: changedTags.itemsToAdd.map((t) => t.id), - remove_tags: changedTags.itemsToRemove.map((t) => t.id), + modal.componentInstance.confirmClicked + .pipe(takeUntil(this.unsubscribeNotifier)) + .subscribe(() => { + this.executeBulkOperation(modal, 'modify_tags', { + add_tags: changedTags.itemsToAdd.map((t) => t.id), + remove_tags: changedTags.itemsToRemove.map((t) => t.id), + }) }) - }) } else { this.executeBulkOperation(null, 'modify_tags', { add_tags: changedTags.itemsToAdd.map((t) => t.id), @@ -270,11 +317,13 @@ export class BulkEditorComponent { } modal.componentInstance.btnClass = 'btn-warning' modal.componentInstance.btnCaption = $localize`Confirm` - modal.componentInstance.confirmClicked.subscribe(() => { - this.executeBulkOperation(modal, 'set_correspondent', { - correspondent: correspondent ? correspondent.id : null, + modal.componentInstance.confirmClicked + .pipe(takeUntil(this.unsubscribeNotifier)) + .subscribe(() => { + this.executeBulkOperation(modal, 'set_correspondent', { + correspondent: correspondent ? correspondent.id : null, + }) }) - }) } else { this.executeBulkOperation(null, 'set_correspondent', { correspondent: correspondent ? correspondent.id : null, @@ -306,11 +355,13 @@ export class BulkEditorComponent { } modal.componentInstance.btnClass = 'btn-warning' modal.componentInstance.btnCaption = $localize`Confirm` - modal.componentInstance.confirmClicked.subscribe(() => { - this.executeBulkOperation(modal, 'set_document_type', { - document_type: documentType ? documentType.id : null, + modal.componentInstance.confirmClicked + .pipe(takeUntil(this.unsubscribeNotifier)) + .subscribe(() => { + this.executeBulkOperation(modal, 'set_document_type', { + document_type: documentType ? documentType.id : null, + }) }) - }) } else { this.executeBulkOperation(null, 'set_document_type', { document_type: documentType ? documentType.id : null, @@ -342,11 +393,13 @@ export class BulkEditorComponent { } modal.componentInstance.btnClass = 'btn-warning' modal.componentInstance.btnCaption = $localize`Confirm` - modal.componentInstance.confirmClicked.subscribe(() => { - this.executeBulkOperation(modal, 'set_storage_path', { - storage_path: storagePath ? storagePath.id : null, + modal.componentInstance.confirmClicked + .pipe(takeUntil(this.unsubscribeNotifier)) + .subscribe(() => { + this.executeBulkOperation(modal, 'set_storage_path', { + storage_path: storagePath ? storagePath.id : null, + }) }) - }) } else { this.executeBulkOperation(null, 'set_storage_path', { storage_path: storagePath ? storagePath.id : null, @@ -364,16 +417,30 @@ export class BulkEditorComponent { modal.componentInstance.message = $localize`This operation cannot be undone.` modal.componentInstance.btnClass = 'btn-danger' modal.componentInstance.btnCaption = $localize`Delete document(s)` - modal.componentInstance.confirmClicked.subscribe(() => { - modal.componentInstance.buttonsEnabled = false - this.executeBulkOperation(modal, 'delete', {}) - }) + modal.componentInstance.confirmClicked + .pipe(takeUntil(this.unsubscribeNotifier)) + .subscribe(() => { + modal.componentInstance.buttonsEnabled = false + this.executeBulkOperation(modal, 'delete', {}) + }) } - downloadSelected(content = 'archive') { + downloadSelected() { this.awaitingDownload = true + let downloadFileType: string = + this.downloadForm.get('downloadFileTypeArchive').value && + this.downloadForm.get('downloadFileTypeOriginals').value + ? 'both' + : this.downloadForm.get('downloadFileTypeArchive').value + ? 'archive' + : 'originals' this.documentService - .bulkDownload(Array.from(this.list.selected), content) + .bulkDownload( + Array.from(this.list.selected), + downloadFileType, + this.downloadForm.get('downloadUseFormatting').value + ) + .pipe(first()) .subscribe((result: any) => { saveAs(result, 'documents.zip') this.awaitingDownload = false @@ -389,9 +456,11 @@ export class BulkEditorComponent { modal.componentInstance.message = $localize`This operation cannot be undone.` modal.componentInstance.btnClass = 'btn-danger' modal.componentInstance.btnCaption = $localize`Proceed` - modal.componentInstance.confirmClicked.subscribe(() => { - modal.componentInstance.buttonsEnabled = false - this.executeBulkOperation(modal, 'redo_ocr', {}) - }) + modal.componentInstance.confirmClicked + .pipe(takeUntil(this.unsubscribeNotifier)) + .subscribe(() => { + modal.componentInstance.buttonsEnabled = false + this.executeBulkOperation(modal, 'redo_ocr', {}) + }) } } diff --git a/src-ui/src/app/services/rest/document.service.ts b/src-ui/src/app/services/rest/document.service.ts index 8e4d8eee9..4e7e97110 100644 --- a/src-ui/src/app/services/rest/document.service.ts +++ b/src-ui/src/app/services/rest/document.service.ts @@ -174,10 +174,18 @@ export class DocumentService extends AbstractPaperlessService ) } - bulkDownload(ids: number[], content = 'both') { + bulkDownload( + ids: number[], + content = 'both', + useFilenameFormatting: boolean = false + ) { return this.http.post( this.getResourceUrl(null, 'bulk_download'), - { documents: ids, content: content }, + { + documents: ids, + content: content, + follow_formatting: useFilenameFormatting, + }, { responseType: 'blob' } ) } diff --git a/src-ui/src/theme.scss b/src-ui/src/theme.scss index 77260a882..a6273eaba 100644 --- a/src-ui/src/theme.scss +++ b/src-ui/src/theme.scss @@ -203,9 +203,13 @@ $form-check-radio-checked-bg-image-dark: url("data:image/svg+xml,documentation. + لاحظ أن تحرير مسار لا يطبق التغييرات على الملفات المخزنة حتى تقوم بتشغيل أداة 'document_renamer'. انظر إلى المستندات. Path @@ -3837,7 +3837,7 @@ src/app/components/manage/settings/settings.component.html 139,142 - Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. + تحديث التحقق يعمل بأرسال إشارات الى العام Github API للحصول على أحدث إصدار لتحديد ما إذا كان الإصدار الجديد متاحا. لا يزال يتعين إجراء التحديث الفعلي للتطبيق يدويا. No tracking data is collected by the app in any way. @@ -4323,7 +4323,7 @@ src/app/components/manage/tasks/tasks.component.html 109 - Complete  + مكتمل  Started  @@ -4331,7 +4331,7 @@ src/app/components/manage/tasks/tasks.component.html 115 - Started  + بدأ  Queued  @@ -4339,7 +4339,7 @@ src/app/components/manage/tasks/tasks.component.html 121 - Queued  + الانتظار  Dismiss selected @@ -4347,7 +4347,7 @@ src/app/components/manage/tasks/tasks.component.ts 22 - Dismiss selected + تحديد الرفض Dismiss all @@ -4359,7 +4359,7 @@ src/app/components/manage/tasks/tasks.component.ts 54 - Dismiss all + رفض الجميع Confirm Dismiss All @@ -4367,7 +4367,7 @@ src/app/components/manage/tasks/tasks.component.ts 52 - Confirm Dismiss All + تأكيد رفض الكل tasks? @@ -4375,7 +4375,7 @@ src/app/components/manage/tasks/tasks.component.ts 54 - tasks? + مهام؟ 404 Not Found @@ -4383,7 +4383,7 @@ src/app/components/not-found/not-found.component.html 7 - 404 Not Found + 404 غير متوفر Any word @@ -4391,7 +4391,7 @@ src/app/data/matching-model.ts 14 - Any word + أي كلمة Any: Document contains any of these words (space separated) @@ -4399,7 +4399,7 @@ src/app/data/matching-model.ts 15 - Any: Document contains any of these words (space separated) + أي: مستند يحوي أي من هذه الكلمات (فراغ فاصل) All words @@ -4407,7 +4407,7 @@ src/app/data/matching-model.ts 19 - All words + كل الكلمات All: Document contains all of these words (space separated) @@ -4415,7 +4415,7 @@ src/app/data/matching-model.ts 20 - All: Document contains all of these words (space separated) + أي: مستند يحوي كل هذه الكلمات (فراغ فاصل) Exact match @@ -4423,7 +4423,7 @@ src/app/data/matching-model.ts 24 - Exact match + تطابق تام Exact: Document contains this string @@ -4431,7 +4431,7 @@ src/app/data/matching-model.ts 25 - Exact: Document contains this string + بالضبط: المستند يحتوي على هذه الكلمة Regular expression @@ -4439,7 +4439,7 @@ src/app/data/matching-model.ts 29 - Regular expression + التعابير النظامية Regular expression: Document matches this regular expression @@ -4447,7 +4447,7 @@ src/app/data/matching-model.ts 30 - Regular expression: Document matches this regular expression + التعابير النظامية: المستند يطابق هذا التعبير النظامي Fuzzy word @@ -4455,7 +4455,7 @@ src/app/data/matching-model.ts 34 - Fuzzy word + كلمة غامضة Fuzzy: Document contains a word similar to this word @@ -4463,7 +4463,7 @@ src/app/data/matching-model.ts 35 - Fuzzy: Document contains a word similar to this word + غامض: المستند يحوي كلمة مشابهة لهذه الكلمة Auto: Learn matching automatically @@ -4471,7 +4471,7 @@ src/app/data/matching-model.ts 40 - Auto: Learn matching automatically + تلقائياً: تعلم المطابقة تلقائيًا Warning: You have unsaved changes to your document(s). @@ -4479,7 +4479,7 @@ src/app/guards/dirty-doc.guard.ts 17 - Warning: You have unsaved changes to your document(s). + تحذير: لديك تغييرات غير محفوظة للمستند(المستندات). Unsaved Changes @@ -4499,7 +4499,7 @@ src/app/services/open-documents.service.ts 143 - Unsaved Changes + لم تحفظ تغييرات You have unsaved changes. @@ -4511,7 +4511,7 @@ src/app/services/open-documents.service.ts 144 - You have unsaved changes. + لديك تغييرات لم تحفظ. Are you sure you want to leave? @@ -4519,7 +4519,7 @@ src/app/guards/dirty-form.guard.ts 20 - Are you sure you want to leave? + متيقِّن من المغادرة؟ Leave page @@ -4527,7 +4527,7 @@ src/app/guards/dirty-form.guard.ts 22 - Leave page + غادر الصفحة You have unsaved changes to the saved view @@ -4535,7 +4535,7 @@ src/app/guards/dirty-saved-view.guard.ts 26 - You have unsaved changes to the saved view + لديك تغييرات غير محفوظة في العرض المحفوظ Are you sure you want to close this saved view? @@ -4543,7 +4543,7 @@ src/app/guards/dirty-saved-view.guard.ts 30 - Are you sure you want to close this saved view? + متيقِّن من إغلاق هذا العرض المحفوظ؟ Save and close @@ -4551,7 +4551,7 @@ src/app/guards/dirty-saved-view.guard.ts 34 - Save and close + حفظ و إغلاق (no title) From 6fdc17cc721496e250cedf47fb8ea591c3ce8fb4 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Thu, 8 Dec 2022 21:57:29 -0800 Subject: [PATCH 143/231] New translations django.po (Arabic) [ci skip] --- src/locale/ar_SA/LC_MESSAGES/django.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/locale/ar_SA/LC_MESSAGES/django.po b/src/locale/ar_SA/LC_MESSAGES/django.po index 8eefb8930..99d37c767 100644 --- a/src/locale/ar_SA/LC_MESSAGES/django.po +++ b/src/locale/ar_SA/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-09 21:50+0000\n" -"PO-Revision-Date: 2022-12-08 17:18\n" +"PO-Revision-Date: 2022-12-09 05:57\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -424,19 +424,19 @@ msgstr "اسم المهمة التي كانت تعمل" #: documents/models.py:562 msgid "Task Positional Arguments" -msgstr "" +msgstr "مهمة المعاملات الموضعية" #: documents/models.py:564 msgid "JSON representation of the positional arguments used with the task" -msgstr "" +msgstr "تمثيل JSON للمعاملات الموضعية المستخدمة في المهمة" #: documents/models.py:569 msgid "Task Named Arguments" -msgstr "" +msgstr "مهمة المعامل المسمى" #: documents/models.py:571 msgid "JSON representation of the named arguments used with the task" -msgstr "" +msgstr "تمثيل JSON للمعاملات المسمية المستخدمة في المهمة" #: documents/models.py:578 msgid "Task State" @@ -854,7 +854,7 @@ msgstr "إجراء العامل" #: paperless_mail/models.py:160 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "" +msgstr "معامل إضافي للإجراء المحدد أعلاه، مثال: المجلد المستهدف للانتقال إلى إجراء مجلد. يجب أن تكون المجلدات الفرعية مفصولة بنقاط." #: paperless_mail/models.py:168 msgid "assign title from" From bc40607c514b9e764e22b0730f55dc5d446aac6b Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Thu, 8 Dec 2022 23:39:46 -0800 Subject: [PATCH 144/231] New translations messages.xlf (Arabic) [ci skip] --- src-ui/src/locale/messages.ar_SA.xlf | 48 ++++++++++++++-------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src-ui/src/locale/messages.ar_SA.xlf b/src-ui/src/locale/messages.ar_SA.xlf index 38c866584..05359fb5a 100644 --- a/src-ui/src/locale/messages.ar_SA.xlf +++ b/src-ui/src/locale/messages.ar_SA.xlf @@ -397,7 +397,7 @@ src/app/app.component.ts 157 - أدوات التصفية تسمح لك بالعثور بسرعة على المستندات باستخدام مختلف عمليات البحث والتواريخ والوسوم وما إلى ذلك. + أدوات التصفية تسمح لك بالعثور بسرعة على المستندات باستخدام مختلف عمليات البحث والتواريخ والعلامات وما إلى ذلك. Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar. @@ -413,7 +413,7 @@ src/app/app.component.ts 176 - يمكن إدارة جميع الوسوم والمراسلين وأنواع الوثائق ومسارات التخزين باستخدام هذه الصفحات. ويمكن أيضا إنشاؤها من نعديل عرض المستند. + يمكن إدارة جميع العلامات والمراسلين وأنواع الوثائق ومسارات التخزين باستخدام هذه الصفحات. ويمكن أيضا إنشاؤها من تعديل عرض المستند. File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. @@ -1390,7 +1390,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 25 - إجراء العامل + إجراء المعامل Assign title from @@ -1550,7 +1550,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 127 - وسم الرسالة بوسم محدد، لا تعالج الرسائل الموسومة + علم الرسالة بعلامة محددة، لا تعالج الرسائل المُعلمة Use subject as title @@ -1694,7 +1694,7 @@ src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts 21 - إنشاء وسم جديد + إنشاء علامة جديدة Edit tag @@ -1702,7 +1702,7 @@ src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts 25 - تعديل الوسم + تعديل العلامة All @@ -1788,7 +1788,7 @@ src/app/components/common/input/tags/tags.component.html 11 - إضافة وسم + إضافة علامة Select @@ -2599,7 +2599,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html 28 - تصفية الوسوم + تصفية العلامات Filter correspondents @@ -2737,7 +2737,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 198 - تأكيد تعيين الوسوم + تأكيد تعيين العلامات This operation will add the tag "" to selected document(s). @@ -2745,7 +2745,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 204 - هذه العملية ستضيف الوسم "" إلى مستند (مستندات) مختارة. + هذه العملية ستضيف العلامة "" إلى مستند (مستندات) مختارة. This operation will add the tags to selected document(s). @@ -2753,7 +2753,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 209,211 - هذه العملية ستضيف الوسوم "" إلى مستند (مستندات) مختارة. + هذه العملية ستضيف العلامات إلى مستند (مستندات) مختارة. This operation will remove the tag "" from selected document(s). @@ -2761,7 +2761,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 217 - هذه العملية ستزيل الوسم "" من المستند (المستندات) المختارة. + هذه العملية ستزيل العلامة"" من المستند (المستندات) المختارة. This operation will remove the tags from selected document(s). @@ -2769,7 +2769,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 222,224 - هذه العملية ستزيل الوسوم "" من المستند (المستندات) المختارة. + هذه العملية ستزيل العلامات من المستند (المستندات) المختارة. This operation will add the tags and remove the tags on selected document(s). @@ -2777,7 +2777,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 226,230 - هذه العملية سوف تضيف الوسوم وتزيل الوسوم في مستند(مستندات) مختارة. + هذه العملية سوف تضيف العلامات وتزيل العلامات في مستند(مستندات) مختارة. Confirm correspondent assignment @@ -2905,7 +2905,7 @@ src/app/components/document-list/document-list.component.html 183 - تصفية حسب الوسم + تصفية حسب العلامة Edit @@ -3041,7 +3041,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 14 - تبديل تصفية الوسم + تبديل تصفية العلامة Toggle correspondent filter @@ -3257,7 +3257,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 111,113 - وسم: + علامة: Without any tag @@ -4229,7 +4229,7 @@ src/app/components/manage/tag-list/tag-list.component.ts 30 - وسم + علامة tags @@ -4237,7 +4237,7 @@ src/app/components/manage/tag-list/tag-list.component.ts 31 - وسوم + علامات Do you really want to delete the tag ""? @@ -4287,7 +4287,7 @@ src/app/components/manage/tasks/tasks.component.html 66 - click for full output + انقر لمشاهدة كامل الإخراج Dismiss @@ -4600,7 +4600,7 @@ 17 Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation - Pre-consume script does not exist. + البرنامَج النصي قبل-الاستهلاك غير موجود. Error while executing pre-consume script. @@ -4609,7 +4609,7 @@ 18 Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation - Error while executing pre-consume script. + حدث خطأ في أثناء تنفيذ البرنامَج النصي قبل-الاستهلاك. Post-consume script does not exist. @@ -4618,7 +4618,7 @@ 19 Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation - Post-consume script does not exist. + البرنامَج النصي بعد-الاستهلاك غير موجود. Error while executing post-consume script. @@ -4627,7 +4627,7 @@ 20 Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation - Error while executing post-consume script. + حدث خطأ في أثناء تنفيذ البرنامَج النصي بعد-الاستهلاك. Received new file. From 534704693b674fa03f057e2c3b77e808ebea7493 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Thu, 8 Dec 2022 23:39:47 -0800 Subject: [PATCH 145/231] New translations django.po (Arabic) [ci skip] --- src/locale/ar_SA/LC_MESSAGES/django.po | 34 +++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/locale/ar_SA/LC_MESSAGES/django.po b/src/locale/ar_SA/LC_MESSAGES/django.po index 99d37c767..e5c1b7f36 100644 --- a/src/locale/ar_SA/LC_MESSAGES/django.po +++ b/src/locale/ar_SA/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-09 21:50+0000\n" -"PO-Revision-Date: 2022-12-09 05:57\n" +"PO-Revision-Date: 2022-12-09 07:39\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -39,7 +39,7 @@ msgstr "التعابير النظامية" #: documents/models.py:36 msgid "Fuzzy word" -msgstr "كلمة غير واضحة" +msgstr "كلمة غامضة" #: documents/models.py:37 msgid "Automatic" @@ -76,19 +76,19 @@ msgstr "لون" #: documents/models.py:72 msgid "is inbox tag" -msgstr "سمة علبة الوارد" +msgstr "علامة علبة الوارد" #: documents/models.py:75 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." -msgstr "ضع علامة على هذه السمة كعلامة سمة علبة الوارد: سيتم وضع سمة على جميع المستندات المستهلكة حديثا مع وسوم صندوق الواردات." +msgstr "ضع علامة على هذه السمة كعلامة علبة الوارد: سيتم وضع علامة على جميع المستندات المستهلكة حديثا مع علامات صندوق الواردات." #: documents/models.py:81 msgid "tag" -msgstr "وسم" +msgstr "علامة" #: documents/models.py:82 documents/models.py:156 msgid "tags" -msgstr "وسوم" +msgstr "علامات" #: documents/models.py:87 documents/models.py:138 msgid "document type" @@ -300,7 +300,7 @@ msgstr "موجود في علبة الوارد" #: documents/models.py:393 msgid "has tag" -msgstr "لديه وسم" +msgstr "لديه علامة" #: documents/models.py:394 msgid "has any tag" @@ -344,7 +344,7 @@ msgstr "عُدِّل بعد" #: documents/models.py:404 msgid "does not have tag" -msgstr "ليس لديه وسم" +msgstr "ليس لديه علامة" #: documents/models.py:405 msgid "does not have ASN" @@ -364,7 +364,7 @@ msgstr "أخرى مثلها" #: documents/models.py:409 msgid "has tags in" -msgstr "لديه وسوم في" +msgstr "لديه علامات في" #: documents/models.py:410 msgid "ASN greater than" @@ -424,19 +424,19 @@ msgstr "اسم المهمة التي كانت تعمل" #: documents/models.py:562 msgid "Task Positional Arguments" -msgstr "مهمة المعاملات الموضعية" +msgstr "مهمة قيمة المعاملات الموضعية" #: documents/models.py:564 msgid "JSON representation of the positional arguments used with the task" -msgstr "تمثيل JSON للمعاملات الموضعية المستخدمة في المهمة" +msgstr "تمثيل JSON لقيمة المعاملات الموضعية المستخدمة في المهمة" #: documents/models.py:569 msgid "Task Named Arguments" -msgstr "مهمة المعامل المسمى" +msgstr "مهمة قيمة المعامل المسمى" #: documents/models.py:571 msgid "JSON representation of the named arguments used with the task" -msgstr "تمثيل JSON للمعاملات المسمية المستخدمة في المهمة" +msgstr "تمثيل JSON لقيمة المعاملات المسمية المستخدمة في المهمة" #: documents/models.py:578 msgid "Task State" @@ -674,7 +674,7 @@ msgstr "البيانات الوصفية" #: paperless_mail/admin.py:78 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." -msgstr "تعيين بيانات التعريف للمستندات المستهلكة من هذه القاعدة تِلْقائيًا. إذا لم تعين الوسوم أو الأنواع أو المراسلين هنا، سيظل paperless يعالج جميع قواعد المطابقة التي حددتها." +msgstr "تعيين بيانات التعريف للمستندات المستهلكة من هذه القاعدة تِلْقائيًا. إذا لم تعين العلامات أو الأنواع أو المراسلين هنا، سيظل paperless يعالج جميع قواعد المطابقة التي حددتها." #: paperless_mail/apps.py:8 msgid "Paperless mail" @@ -766,7 +766,7 @@ msgstr "علم الرسالة، لا تعالج الرسائل المعلمة" #: paperless_mail/models.py:68 msgid "Tag the mail with specified tag, don't process tagged mails" -msgstr "وسم الرسالة بوسم محدد، لا تعالج الرسائل الموسومة" +msgstr "علم الرسالة بعلامة محددة، لا تعالج الرسائل المُعلمة" #: paperless_mail/models.py:71 msgid "Use subject as title" @@ -850,7 +850,7 @@ msgstr "إجراء" #: paperless_mail/models.py:155 msgid "action parameter" -msgstr "إجراء العامل" +msgstr "إجراء المعامل" #: paperless_mail/models.py:160 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." @@ -862,7 +862,7 @@ msgstr "تعيين العنوان من" #: paperless_mail/models.py:176 msgid "assign this tag" -msgstr "تعيين هذا الوسم" +msgstr "تعيين هذه العلامة" #: paperless_mail/models.py:184 msgid "assign this document type" From 8a9e564dac58990d2dd6c150762cfbbdd3d6465d Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Fri, 9 Dec 2022 03:24:52 -0800 Subject: [PATCH 146/231] New translations messages.xlf (Arabic) [ci skip] --- src-ui/src/locale/messages.ar_SA.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.ar_SA.xlf b/src-ui/src/locale/messages.ar_SA.xlf index 05359fb5a..c970736ba 100644 --- a/src-ui/src/locale/messages.ar_SA.xlf +++ b/src-ui/src/locale/messages.ar_SA.xlf @@ -582,7 +582,7 @@ src/app/components/app-frame/app-frame.component.html 99 - فتح مستندات + فتح المستندات Close all From 31e8c44c18a574ee5171783f676122020d58a28e Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Sun, 11 Dec 2022 11:46:22 -0800 Subject: [PATCH 147/231] New translations messages.xlf (Dutch) [ci skip] --- src-ui/src/locale/messages.nl_NL.xlf | 96 ++++++++++++++-------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 776c1eb46..b91c523cb 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -17,7 +17,7 @@ 178,186 Currently selected slide number read by screen reader - Slide of + Dia van Previous @@ -155,7 +155,7 @@ node_modules/src/progressbar/progressbar.ts 30,33 - + HH @@ -345,7 +345,7 @@ src/app/app.component.ts 119 - Prev + Vorige Next @@ -365,7 +365,7 @@ src/app/app.component.ts 121 - End + Einde The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some. @@ -373,7 +373,7 @@ src/app/app.component.ts 126 - The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some. + Het dashboard kan worden gebruikt om opgeslagen weergaven te tonen, zoals een 'Inbox'. Deze instellingen zijn te vinden onder instellingen > opgeslagen weergaven zodra u er een hebt aangemaakt. Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms. @@ -778,7 +778,7 @@ src/app/components/app-frame/app-frame.component.html 221,223 - How does this work? + Hoe werkt dit? Update available @@ -798,7 +798,7 @@ src/app/components/manage/settings/settings.component.ts 476 - An error occurred while saving settings. + Er is een fout opgetreden bij het opslaan van de instellingen. An error occurred while saving update checking settings. @@ -1194,7 +1194,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 11 - IMAP Server + IMAP Server IMAP Port @@ -1202,7 +1202,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 12 - IMAP Port + IMAP Poort IMAP Security @@ -1210,7 +1210,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 13 - IMAP Security + IMAP Beveiliging Username @@ -1218,7 +1218,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 16 - Username + Gebruikersnaam Password @@ -1226,7 +1226,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 17 - Password + Wachtwoord Character Set @@ -1242,7 +1242,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 22 - Create new mail account + Nieuwe mail account aanmaken Edit mail account @@ -1250,7 +1250,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 26 - Edit mail account + Mail account bewerken No encryption @@ -1258,7 +1258,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 43 - No encryption + Geen versleuteling SSL @@ -1266,7 +1266,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 44 - SSL + SSL STARTTLS @@ -1274,7 +1274,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts 45 - STARTTLS + STARTTLS Account @@ -1286,7 +1286,7 @@ src/app/components/manage/settings/settings.component.html 284 - Account + Account Folder @@ -1294,7 +1294,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 12 - Folder + Map Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. @@ -1302,7 +1302,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 12 - Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + Submappen moeten gescheiden worden door een scheidingsteken, vaak een punt ('.') of slash ('/'), maar het varieert per mailserver. Maximum age (days) @@ -1310,7 +1310,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 13 - Maximum age (days) + Maximale leeftijd (dagen) Attachment type @@ -1318,7 +1318,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 14 - Attachment type + Type bijlage Paperless will only process mails that match all of the filters specified below. @@ -1326,7 +1326,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 17 - Paperless will only process mails that match all of the filters specified below. + Paperless zal alleen mails verwerken die overeenkomen met alle van de hieronder opgegeven filters. Filter from @@ -1334,7 +1334,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 18 - Filter from + Filter afzender Filter subject @@ -1342,7 +1342,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 19 - Filter subject + Filter onderwerp Filter body @@ -1350,7 +1350,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 20 - Filter body + Filter inhoud Filter attachment filename @@ -1358,7 +1358,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 21 - Filter attachment filename + Filter bestandsnaam van bijlage Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. @@ -1366,7 +1366,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 21 - Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + Alleen documenten verwerken die volledig overeenkomen met deze bestandsnaam indien aangegeven. Je kunt jokertekens gebruiken, zoals *.pdf of *factuur*. Dit is niet hoofdlettergevoelig. Action @@ -1374,7 +1374,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 24 - Action + Actie Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. @@ -1382,7 +1382,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 24 - Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + Deze actie wordt alleen uitgevoerd wanneer documenten verwerkt worden uit de mail. Mails zonder bijlage worden genegeerd. Action parameter @@ -1390,7 +1390,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 25 - Action parameter + Actie parameter Assign title from @@ -1398,7 +1398,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 26 - Assign title from + Wijs titel toe van Assign document type @@ -1406,7 +1406,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 28 - Assign document type + Wijs documenttype toe Assign correspondent from @@ -2683,7 +2683,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html 78,82 - Download Preparing download... + Download Voorbereiden van download... Download originals Preparing download... @@ -2691,7 +2691,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html 84,88 - Download originals Preparing download... + Download originelen Voorbereiden van download... Error executing bulk operation: @@ -2699,7 +2699,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 103,105 - Error executing bulk operation: + Fout bij het uitvoeren van een batch operatie: "" @@ -3645,7 +3645,7 @@ src/app/components/manage/settings/settings.component.html 2 - Start tour + Rondleiding starten Open Django Admin @@ -3653,7 +3653,7 @@ src/app/components/manage/settings/settings.component.html 4 - Open Django Admin + Open Django Admin General @@ -3765,7 +3765,7 @@ src/app/components/manage/settings/settings.component.html 99 - Sidebar + Zijbalk Use 'slim' sidebar (icons only) @@ -3773,7 +3773,7 @@ src/app/components/manage/settings/settings.component.html 103 - Use 'slim' sidebar (icons only) + Gebruik 'dunne' zijbalk (alleen pictogrammen) Dark mode @@ -3813,7 +3813,7 @@ src/app/components/manage/settings/settings.component.html 121 - Theme Color + Thema kleur Reset @@ -3829,7 +3829,7 @@ src/app/components/manage/settings/settings.component.html 135 - Update checking + Update controleren Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. @@ -3853,7 +3853,7 @@ src/app/components/manage/settings/settings.component.html 146 - Enable update checking + Updatecontroles inschakelen Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. @@ -3901,7 +3901,7 @@ src/app/components/manage/settings/settings.component.html 163 - Enable comments + Opmerkingen inschakelen Notifications @@ -4125,7 +4125,7 @@ src/app/components/manage/settings/settings.component.ts 558 - Confirm delete mail account + Bevestig e-mail account verwijderen This operation will permanently this mail account. @@ -4253,7 +4253,7 @@ src/app/components/manage/tasks/tasks.component.html 6 - Clear selection + Selectie wissen @@ -4271,7 +4271,7 @@ src/app/components/manage/tasks/tasks.component.html 20 - Refresh + Vernieuw Results @@ -4299,7 +4299,7 @@ src/app/components/manage/tasks/tasks.component.ts 56 - Dismiss + Afwijzen Open Document From b0625cdced9c79f5a3d8931060ba65faadb0e733 Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Thu, 8 Dec 2022 18:39:14 -0800 Subject: [PATCH 148/231] Updates runners to Ubuntu 22.04, locks pipenv to 2022.11.30, reduces number of image cleans run --- .github/workflows/ci.yml | 24 +++++++++---------- .github/workflows/cleanup-tags.yml | 7 +----- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/installer-library.yml | 2 +- .github/workflows/project-actions.yml | 4 ++-- .github/workflows/release-chart.yml | 2 +- .../workflows/reusable-workflow-builder.yml | 2 +- Dockerfile | 2 +- 8 files changed, 20 insertions(+), 25 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 23ace6a3a..6a12189a5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ on: jobs: pre-commit: name: Linting Checks - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Checkout repository @@ -34,7 +34,7 @@ jobs: documentation: name: "Build Documentation" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: - pre-commit steps: @@ -44,7 +44,7 @@ jobs: - name: Install pipenv run: | - pipx install pipenv==2022.10.12 + pipx install pipenv==2022.11.30 - name: Set up Python uses: actions/setup-python@v4 @@ -73,7 +73,7 @@ jobs: documentation-deploy: name: "Deploy Documentation" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 if: github.event_name == 'push' && github.ref == 'refs/heads/main' needs: - documentation @@ -92,7 +92,7 @@ jobs: tests-backend: name: "Tests (${{ matrix.python-version }})" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: - pre-commit strategy: @@ -124,7 +124,7 @@ jobs: - name: Install pipenv run: | - pipx install pipenv==2022.10.12 + pipx install pipenv==2022.11.30 - name: Set up Python uses: actions/setup-python@v4 @@ -181,7 +181,7 @@ jobs: tests-frontend: name: "Tests Frontend" - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: - pre-commit strategy: @@ -201,7 +201,7 @@ jobs: prepare-docker-build: name: Prepare Docker Pipeline Data if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/beta' || contains(github.ref, 'beta.rc') || startsWith(github.ref, 'refs/tags/v')) - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 # If the push triggered the installer library workflow, wait for it to # complete here. This ensures the required versions for the final # image have been built, while not waiting at all if the versions haven't changed @@ -278,7 +278,7 @@ jobs: # build and push image to docker hub. build-docker-image: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 concurrency: group: ${{ github.workflow }}-build-docker-image-${{ github.ref_name }} cancel-in-progress: true @@ -383,7 +383,7 @@ jobs: build-release: needs: - build-docker-image - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout @@ -462,7 +462,7 @@ jobs: path: dist/paperless-ngx.tar.xz publish-release: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 outputs: prerelease: ${{ steps.get_version.outputs.prerelease }} changelog: ${{ steps.create-release.outputs.body }} @@ -511,7 +511,7 @@ jobs: asset_content_type: application/x-xz append-changelog: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: - publish-release if: needs.publish-release.outputs.prerelease == 'false' diff --git a/.github/workflows/cleanup-tags.yml b/.github/workflows/cleanup-tags.yml index 2b63b3000..4a5deeb9c 100644 --- a/.github/workflows/cleanup-tags.yml +++ b/.github/workflows/cleanup-tags.yml @@ -6,12 +6,7 @@ name: Cleanup Image Tags on: - schedule: - - cron: '0 0 * * SAT' delete: - pull_request: - types: - - closed push: paths: - ".github/workflows/cleanup-tags.yml" @@ -26,7 +21,7 @@ concurrency: jobs: cleanup-images: name: Cleanup Image Tags for ${{ matrix.primary-name }} - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 strategy: matrix: include: diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index c742807e9..e1c6eebb8 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -23,7 +23,7 @@ on: jobs: analyze: name: Analyze - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 permissions: actions: read contents: read diff --git a/.github/workflows/installer-library.yml b/.github/workflows/installer-library.yml index f761b0315..33e81a3d1 100644 --- a/.github/workflows/installer-library.yml +++ b/.github/workflows/installer-library.yml @@ -34,7 +34,7 @@ concurrency: jobs: prepare-docker-build: name: Prepare Docker Image Version Data - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Set ghcr repository name diff --git a/.github/workflows/project-actions.yml b/.github/workflows/project-actions.yml index 2d3e4549e..717b3c2d3 100644 --- a/.github/workflows/project-actions.yml +++ b/.github/workflows/project-actions.yml @@ -24,7 +24,7 @@ env: jobs: issue_opened_or_reopened: name: issue_opened_or_reopened - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 if: github.event_name == 'issues' && (github.event.action == 'opened' || github.event.action == 'reopened') steps: - name: Add issue to project and set status to ${{ env.todo }} @@ -37,7 +37,7 @@ jobs: status_value: ${{ env.todo }} # Target status pr_opened_or_reopened: name: pr_opened_or_reopened - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 permissions: # write permission is required for autolabeler pull-requests: write diff --git a/.github/workflows/release-chart.yml b/.github/workflows/release-chart.yml index 9e21850ca..a82ac4ed8 100644 --- a/.github/workflows/release-chart.yml +++ b/.github/workflows/release-chart.yml @@ -9,7 +9,7 @@ on: jobs: release_chart: name: "Release Chart" - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v3 diff --git a/.github/workflows/reusable-workflow-builder.yml b/.github/workflows/reusable-workflow-builder.yml index ba1358e56..37d51b122 100644 --- a/.github/workflows/reusable-workflow-builder.yml +++ b/.github/workflows/reusable-workflow-builder.yml @@ -21,7 +21,7 @@ concurrency: jobs: build-image: name: Build ${{ fromJSON(inputs.build-json).name }} @ ${{ fromJSON(inputs.build-json).version }} - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Checkout diff --git a/Dockerfile b/Dockerfile index 32598c483..28764aef3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -45,7 +45,7 @@ COPY Pipfile* ./ RUN set -eux \ && echo "Installing pipenv" \ - && python3 -m pip install --no-cache-dir --upgrade pipenv==2022.10.12 \ + && python3 -m pip install --no-cache-dir --upgrade pipenv==2022.11.30 \ && echo "Generating requirement.txt" \ && pipenv requirements > requirements.txt From 97d6503fefc5737028637c39a2c1f33dd1e12904 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Tue, 22 Nov 2022 09:59:59 -0800 Subject: [PATCH 149/231] Switches task serialization over to pickle format --- ...remove_paperlesstask_task_args_and_more.py | 21 ++++ src/documents/models.py | 14 --- src/documents/signals/handlers.py | 26 ++--- src/documents/tests/test_api.py | 12 --- src/documents/tests/test_task_signals.py | 101 +++++++++++++----- src/paperless/settings.py | 4 + 6 files changed, 109 insertions(+), 69 deletions(-) create mode 100644 src/documents/migrations/1028_remove_paperlesstask_task_args_and_more.py diff --git a/src/documents/migrations/1028_remove_paperlesstask_task_args_and_more.py b/src/documents/migrations/1028_remove_paperlesstask_task_args_and_more.py new file mode 100644 index 000000000..83f3eadfa --- /dev/null +++ b/src/documents/migrations/1028_remove_paperlesstask_task_args_and_more.py @@ -0,0 +1,21 @@ +# Generated by Django 4.1.3 on 2022-11-22 17:50 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("documents", "1027_remove_paperlesstask_attempted_task_and_more"), + ] + + operations = [ + migrations.RemoveField( + model_name="paperlesstask", + name="task_args", + ), + migrations.RemoveField( + model_name="paperlesstask", + name="task_kwargs", + ), + ] diff --git a/src/documents/models.py b/src/documents/models.py index 1ee6dfedb..a59340e5b 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -560,20 +560,6 @@ class PaperlessTask(models.Model): help_text=_("Name of the Task which was run"), ) - task_args = models.JSONField( - null=True, - verbose_name=_("Task Positional Arguments"), - help_text=_( - "JSON representation of the positional arguments used with the task", - ), - ) - task_kwargs = models.JSONField( - null=True, - verbose_name=_("Task Named Arguments"), - help_text=_( - "JSON representation of the named arguments used with the task", - ), - ) status = models.CharField( max_length=30, default=states.PENDING, diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index c28ea8e2b..4c2554f02 100644 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -1,7 +1,6 @@ import logging import os import shutil -from ast import literal_eval from pathlib import Path from celery import states @@ -521,25 +520,24 @@ def add_to_index(sender, document, **kwargs): def before_task_publish_handler(sender=None, headers=None, body=None, **kwargs): """ Creates the PaperlessTask object in a pending state. This is sent before - the task reaches the broker, but + the task reaches the broker, but before it begins executing on a worker. https://docs.celeryq.dev/en/stable/userguide/signals.html#before-task-publish + https://docs.celeryq.dev/en/stable/internals/protocol.html#version-2 + """ if "task" not in headers or headers["task"] != "documents.tasks.consume_file": # Assumption: this is only ever a v2 message return try: - task_file_name = "" - if headers["kwargsrepr"] is not None: - task_kwargs = literal_eval(headers["kwargsrepr"]) - if "override_filename" in task_kwargs: - task_file_name = task_kwargs["override_filename"] - else: - task_kwargs = None + task_args = body[0] + task_kwargs = body[1] - task_args = literal_eval(headers["argsrepr"]) + task_file_name = "" + if "override_filename" in task_kwargs: + task_file_name = task_kwargs["override_filename"] # Nothing was found, report the task first argument if not len(task_file_name): @@ -552,8 +550,6 @@ def before_task_publish_handler(sender=None, headers=None, body=None, **kwargs): status=states.PENDING, task_file_name=task_file_name, task_name=headers["task"], - task_args=task_args, - task_kwargs=task_kwargs, result=None, date_created=timezone.now(), date_started=None, @@ -562,7 +558,7 @@ def before_task_publish_handler(sender=None, headers=None, body=None, **kwargs): except Exception as e: # pragma: no cover # Don't let an exception in the signal handlers prevent # a document from being consumed. - logger.error(f"Creating PaperlessTask failed: {e}") + logger.error(f"Creating PaperlessTask failed: {e}", exc_info=True) @task_prerun.connect @@ -584,7 +580,7 @@ def task_prerun_handler(sender=None, task_id=None, task=None, **kwargs): except Exception as e: # pragma: no cover # Don't let an exception in the signal handlers prevent # a document from being consumed. - logger.error(f"Setting PaperlessTask started failed: {e}") + logger.error(f"Setting PaperlessTask started failed: {e}", exc_info=True) @task_postrun.connect @@ -607,4 +603,4 @@ def task_postrun_handler( except Exception as e: # pragma: no cover # Don't let an exception in the signal handlers prevent # a document from being consumed. - logger.error(f"Updating PaperlessTask failed: {e}") + logger.error(f"Updating PaperlessTask failed: {e}", exc_info=True) diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index c9d8aefc2..0f890249c 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -3043,16 +3043,6 @@ class TestTasks(APITestCase): task_file_name="test.pdf", task_name="documents.tasks.some_task", status=celery.states.SUCCESS, - task_args=("/tmp/paperless/paperless-upload-5iq7skzc",), - task_kwargs={ - "override_filename": "test.pdf", - "override_title": None, - "override_correspondent_id": None, - "override_document_type_id": None, - "override_tag_ids": None, - "task_id": "466e8fe7-7193-4698-9fff-72f0340e2082", - "override_created": None, - }, ) response = self.client.get(self.ENDPOINT) @@ -3079,8 +3069,6 @@ class TestTasks(APITestCase): task_file_name="anothertest.pdf", task_name="documents.tasks.some_task", status=celery.states.SUCCESS, - task_args=("/consume/anothertest.pdf",), - task_kwargs={"override_tag_ids": None}, ) response = self.client.get(self.ENDPOINT) diff --git a/src/documents/tests/test_task_signals.py b/src/documents/tests/test_task_signals.py index 8aafc1f12..e21879802 100644 --- a/src/documents/tests/test_task_signals.py +++ b/src/documents/tests/test_task_signals.py @@ -28,6 +28,14 @@ class TestTaskSignalHandler(DirectoriesMixin, TestCase): "ignore_result": False, } + BODY_CONSUME = ( + # args + ("/consume/hello-999.pdf",), + # kwargs + {"override_tag_ids": None}, + {"callbacks": None, "errbacks": None, "chain": None, "chord": None}, + ) + HEADERS_WEB_UI = { "lang": "py", "task": "documents.tasks.consume_file", @@ -47,64 +55,90 @@ class TestTaskSignalHandler(DirectoriesMixin, TestCase): "ignore_result": False, } - def util_call_before_task_publish_handler(self, headers_to_use): + BODY_WEB_UI = ( + # args + ("/tmp/paperless/paperless-upload-st9lmbvx",), + # kwargs + { + "override_filename": "statement.pdf", + "override_title": None, + "override_correspondent_id": None, + "override_document_type_id": None, + "override_tag_ids": None, + "task_id": "f5622ca9-3707-4ed0-b418-9680b912572f", + "override_created": None, + }, + {"callbacks": None, "errbacks": None, "chain": None, "chord": None}, + ) + + def util_call_before_task_publish_handler(self, headers_to_use, body_to_use): + """ + Simple utility to call the pre-run handle and ensure it created a single task + instance + """ self.assertEqual(PaperlessTask.objects.all().count(), 0) - before_task_publish_handler(headers=headers_to_use) + before_task_publish_handler(headers=headers_to_use, body=body_to_use) self.assertEqual(PaperlessTask.objects.all().count(), 1) def test_before_task_publish_handler_consume(self): """ GIVEN: - - A celery task completed with an exception + - A celery task is started via the consume folder WHEN: - - API call is made to get tasks + - Task before publish handler is called THEN: - - The returned result is the exception info + - The task is created and marked as pending """ - self.util_call_before_task_publish_handler(headers_to_use=self.HEADERS_CONSUME) + self.util_call_before_task_publish_handler( + headers_to_use=self.HEADERS_CONSUME, + body_to_use=self.BODY_CONSUME, + ) task = PaperlessTask.objects.get() self.assertIsNotNone(task) self.assertEqual(self.HEADERS_CONSUME["id"], task.task_id) - self.assertListEqual(["/consume/hello-999.pdf"], task.task_args) - self.assertDictEqual({"override_tag_ids": None}, task.task_kwargs) self.assertEqual("hello-999.pdf", task.task_file_name) self.assertEqual("documents.tasks.consume_file", task.task_name) self.assertEqual(celery.states.PENDING, task.status) def test_before_task_publish_handler_webui(self): - - self.util_call_before_task_publish_handler(headers_to_use=self.HEADERS_WEB_UI) + """ + GIVEN: + - A celery task is started via the web ui + WHEN: + - Task before publish handler is called + THEN: + - The task is created and marked as pending + """ + self.util_call_before_task_publish_handler( + headers_to_use=self.HEADERS_WEB_UI, + body_to_use=self.BODY_WEB_UI, + ) task = PaperlessTask.objects.get() self.assertIsNotNone(task) self.assertEqual(self.HEADERS_WEB_UI["id"], task.task_id) - self.assertListEqual( - ["/tmp/paperless/paperless-upload-st9lmbvx"], - task.task_args, - ) - self.assertDictEqual( - { - "override_filename": "statement.pdf", - "override_title": None, - "override_correspondent_id": None, - "override_document_type_id": None, - "override_tag_ids": None, - "task_id": "f5622ca9-3707-4ed0-b418-9680b912572f", - "override_created": None, - }, - task.task_kwargs, - ) self.assertEqual("statement.pdf", task.task_file_name) self.assertEqual("documents.tasks.consume_file", task.task_name) self.assertEqual(celery.states.PENDING, task.status) def test_task_prerun_handler(self): - self.util_call_before_task_publish_handler(headers_to_use=self.HEADERS_CONSUME) + """ + GIVEN: + - A celery task is started via the consume folder + WHEN: + - Task starts execution + THEN: + - The task is marked as started + """ + self.util_call_before_task_publish_handler( + headers_to_use=self.HEADERS_CONSUME, + body_to_use=self.BODY_CONSUME, + ) task_prerun_handler(task_id=self.HEADERS_CONSUME["id"]) @@ -113,7 +147,18 @@ class TestTaskSignalHandler(DirectoriesMixin, TestCase): self.assertEqual(celery.states.STARTED, task.status) def test_task_postrun_handler(self): - self.util_call_before_task_publish_handler(headers_to_use=self.HEADERS_CONSUME) + """ + GIVEN: + - A celery task is started via the consume folder + WHEN: + - Task finished execution + THEN: + - The task is marked as started + """ + self.util_call_before_task_publish_handler( + headers_to_use=self.HEADERS_CONSUME, + body_to_use=self.BODY_CONSUME, + ) task_postrun_handler( task_id=self.HEADERS_CONSUME["id"], diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 40c7a5c3b..0bdec4745 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -526,6 +526,10 @@ CELERY_RESULT_EXTENDED = True CELERY_RESULT_BACKEND = "django-db" CELERY_CACHE_BACKEND = "default" +# This allows types to stay types through a .delay +CELERY_TASK_SERIALIZER = "pickle" +CELERY_ACCEPT_CONTENT = ["application/x-python-serialize"] + CELERY_BEAT_SCHEDULE = { # Every ten minutes "Check all e-mail accounts": { From ce38e4ae081b9afb5be49bfdc56a67f7b5237c17 Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Wed, 7 Dec 2022 19:25:53 -0800 Subject: [PATCH 150/231] Actually no need for pickle anyway --- src/paperless/settings.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 0bdec4745..db26ba3b3 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -526,9 +526,6 @@ CELERY_RESULT_EXTENDED = True CELERY_RESULT_BACKEND = "django-db" CELERY_CACHE_BACKEND = "default" -# This allows types to stay types through a .delay -CELERY_TASK_SERIALIZER = "pickle" -CELERY_ACCEPT_CONTENT = ["application/x-python-serialize"] CELERY_BEAT_SCHEDULE = { # Every ten minutes From b6dd36a439b3b8a2e101f8dd24367e20b8c39663 Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Thu, 8 Dec 2022 18:48:43 -0800 Subject: [PATCH 151/231] Notes a TODO for a later library release to remove a workaround --- src/documents/tasks.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/documents/tasks.py b/src/documents/tasks.py index f5bad665a..b5dc264fb 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -101,6 +101,8 @@ def consume_file( # Celery converts this to a string, but everything expects a datetime # Long term solution is to not use JSON for the serializer but pickle instead + # TODO: This will be resolved in kombu 5.3, expected with celery 5.3 + # More types will be retained through JSON encode/decode if override_created is not None and isinstance(override_created, str): try: override_created = datetime.fromisoformat(override_created) From 1551052cdebba00544a0c1449825555d2dd6f8a0 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Tue, 13 Dec 2022 07:48:33 -0800 Subject: [PATCH 152/231] Add piwheels as additional URL for downloading pre-built wheels --- docker-builders/Dockerfile.pikepdf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-builders/Dockerfile.pikepdf b/docker-builders/Dockerfile.pikepdf index 2594f71f5..b94173fab 100644 --- a/docker-builders/Dockerfile.pikepdf +++ b/docker-builders/Dockerfile.pikepdf @@ -77,6 +77,8 @@ RUN set -eux \ && python3 -m pip wheel \ # Build the package at the required version pikepdf==${PIKEPDF_VERSION} \ + # Look to piwheels for additional pre-built wheels + --extra-index-url https://www.piwheels.org/simple \ # Output the *.whl into this directory --wheel-dir wheels \ # Do not use a binary packge for the package being built From 6a023507e2d1eaa6b30bcb90f20c9b03b23e460f Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 14 Dec 2022 23:22:11 -0800 Subject: [PATCH 153/231] fix search bar position with slim sidebar [ci skip] --- .../src/app/components/app-frame/app-frame.component.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.scss b/src-ui/src/app/components/app-frame/app-frame.component.scss index 0bd96f33e..fb6fa44cb 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.scss +++ b/src-ui/src/app/components/app-frame/app-frame.component.scss @@ -220,6 +220,12 @@ main { font-size: 1rem; } +@media screen and (min-width: 768px) { + .navbar-brand.slim { + max-width: 50px; + } +} + .dropdown.show .dropdown-toggle, .dropdown-toggle:hover { opacity: 0.7; From 2a3b8f5a7feacf9e94b3813c35536e6687eda2ef Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Translation Bot [bot]" <99855517+paperless-l10n@users.noreply.github.com> Date: Thu, 15 Dec 2022 07:04:25 -0800 Subject: [PATCH 154/231] New translations messages.xlf (German) [ci skip] --- src-ui/src/locale/messages.de_DE.xlf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 17dd2c7b9..db9cb5576 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -1218,7 +1218,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 16 - Username + Benutzername Password @@ -1226,7 +1226,7 @@ src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html 17 - Password + Kennwort Character Set From bae715cd34d2d196d95173c8f5fcd6a6b05eeffb Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Tue, 13 Dec 2022 12:31:20 -0800 Subject: [PATCH 155/231] Changes the qpdf building to be cross compiled instead of emulated --- .github/workflows/installer-library.yml | 1 + .../workflows/reusable-workflow-builder.yml | 6 +- Dockerfile | 10 +- docker-builders/Dockerfile.pikepdf | 10 +- docker-builders/Dockerfile.psycopg2 | 2 + docker-builders/Dockerfile.qpdf | 178 ++++++++++++++---- 6 files changed, 168 insertions(+), 39 deletions(-) diff --git a/.github/workflows/installer-library.yml b/.github/workflows/installer-library.yml index 33e81a3d1..ac241b598 100644 --- a/.github/workflows/installer-library.yml +++ b/.github/workflows/installer-library.yml @@ -127,6 +127,7 @@ jobs: uses: ./.github/workflows/reusable-workflow-builder.yml with: dockerfile: ./docker-builders/Dockerfile.qpdf + build-platforms: linux/amd64 build-json: ${{ needs.prepare-docker-build.outputs.qpdf-json }} build-args: | QPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).version }} diff --git a/.github/workflows/reusable-workflow-builder.yml b/.github/workflows/reusable-workflow-builder.yml index 37d51b122..340c87713 100644 --- a/.github/workflows/reusable-workflow-builder.yml +++ b/.github/workflows/reusable-workflow-builder.yml @@ -13,6 +13,10 @@ on: required: false default: "" type: string + build-platforms: + required: false + default: linux/amd64,linux/arm64,linux/arm/v7 + type: string concurrency: group: ${{ github.workflow }}-${{ fromJSON(inputs.build-json).name }}-${{ fromJSON(inputs.build-json).version }} @@ -46,7 +50,7 @@ jobs: context: . file: ${{ inputs.dockerfile }} tags: ${{ fromJSON(inputs.build-json).image_tag }} - platforms: linux/amd64,linux/arm64,linux/arm/v7 + platforms: ${{ inputs.build-platforms }} build-args: ${{ inputs.build-args }} push: true cache-from: type=registry,ref=${{ fromJSON(inputs.build-json).cache_tag }} diff --git a/Dockerfile b/Dockerfile index 28764aef3..11915937a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -58,6 +58,12 @@ LABEL org.opencontainers.image.url="https://github.com/paperless-ngx/paperless-n LABEL org.opencontainers.image.licenses="GPL-3.0-only" ARG DEBIAN_FRONTEND=noninteractive +# Buildx provided +ARG TARGETARCH +ARG TARGETVARIANT + +# Workflow provided +ARG QPDF_VERSION # # Begin installation and configuration @@ -194,8 +200,8 @@ RUN --mount=type=bind,from=qpdf-builder,target=/qpdf \ --mount=type=bind,from=pikepdf-builder,target=/pikepdf \ set -eux \ && echo "Installing qpdf" \ - && apt-get install --yes --no-install-recommends /qpdf/usr/src/qpdf/libqpdf29_*.deb \ - && apt-get install --yes --no-install-recommends /qpdf/usr/src/qpdf/qpdf_*.deb \ + && apt-get install --yes --no-install-recommends /qpdf/usr/src/qpdf/${QPDF_VERSION}/${TARGETARCH}${TARGETVARIANT}/libqpdf29_*.deb \ + && apt-get install --yes --no-install-recommends /qpdf/usr/src/qpdf/${QPDF_VERSION}/${TARGETARCH}${TARGETVARIANT}/qpdf_*.deb \ && echo "Installing pikepdf and dependencies" \ && python3 -m pip install --no-cache-dir /pikepdf/usr/src/wheels/*.whl \ && python3 -m pip list \ diff --git a/docker-builders/Dockerfile.pikepdf b/docker-builders/Dockerfile.pikepdf index b94173fab..0331576ba 100644 --- a/docker-builders/Dockerfile.pikepdf +++ b/docker-builders/Dockerfile.pikepdf @@ -16,7 +16,13 @@ FROM python:3.9-slim-bullseye as main LABEL org.opencontainers.image.description="A intermediate image with pikepdf wheel built" +# Buildx provided +ARG TARGETARCH +ARG TARGETVARIANT + ARG DEBIAN_FRONTEND=noninteractive +# Workflow provided +ARG QPDF_VERSION ARG PIKEPDF_VERSION # These are not used, but will still bust the cache if one changes # Otherwise, the main image will try to build thing (and fail) @@ -54,7 +60,7 @@ ARG BUILD_PACKAGES="\ WORKDIR /usr/src -COPY --from=qpdf-builder /usr/src/qpdf/*.deb ./ +COPY --from=qpdf-builder /usr/src/qpdf/${QPDF_VERSION}/${TARGETARCH}${TARGETVARIANT}/*.deb ./ # As this is an base image for a multi-stage final image # the added size of the install is basically irrelevant @@ -88,6 +94,8 @@ RUN set -eux \ # Don't cache build files --no-cache-dir \ && ls -ahl wheels \ + && echo "Gathering package data" \ + && dpkg-query -f '${Package;-40}${Version}\n' -W > ./wheels/pkg-list.txt \ && echo "Cleaning up image" \ && apt-get -y purge ${BUILD_PACKAGES} \ && apt-get -y autoremove --purge \ diff --git a/docker-builders/Dockerfile.psycopg2 b/docker-builders/Dockerfile.psycopg2 index 56bc7a1b2..8fcf5264b 100644 --- a/docker-builders/Dockerfile.psycopg2 +++ b/docker-builders/Dockerfile.psycopg2 @@ -42,6 +42,8 @@ RUN set -eux \ # Don't cache build files --no-cache-dir \ && ls -ahl wheels/ \ + && echo "Gathering package data" \ + && dpkg-query -f '${Package;-40}${Version}\n' -W > ./wheels/pkg-list.txt \ && echo "Cleaning up image" \ && apt-get -y purge ${BUILD_PACKAGES} \ && apt-get -y autoremove --purge \ diff --git a/docker-builders/Dockerfile.qpdf b/docker-builders/Dockerfile.qpdf index de27b2d5d..3ad11d8b1 100644 --- a/docker-builders/Dockerfile.qpdf +++ b/docker-builders/Dockerfile.qpdf @@ -1,48 +1,156 @@ -# This Dockerfile compiles the jbig2enc library -# Inputs: -# - QPDF_VERSION - the version of qpdf to build a .deb. -# Must be present as a deb-src in bookworm +# +# Stage: pre-build +# Purpose: +# - Installs common packages +# - Sets common environment variables related to dpkg +# - Aquires the qpdf source from bookwork +# Useful Links: +# - https://qpdf.readthedocs.io/en/stable/installation.html#system-requirements +# - https://wiki.debian.org/Multiarch/HOWTO +# - https://wiki.debian.org/CrossCompiling +# -FROM debian:bullseye-slim as main +FROM debian:bullseye-slim as pre-build -LABEL org.opencontainers.image.description="A intermediate image with qpdf built" - -ARG DEBIAN_FRONTEND=noninteractive -# This must match to pikepdf's minimum at least ARG QPDF_VERSION -ARG BUILD_PACKAGES="\ - build-essential \ - debhelper \ +ARG COMMON_BUILD_PACKAGES="\ + cmake \ + debhelper\ debian-keyring \ devscripts \ - equivs \ - libtool \ - # https://qpdf.readthedocs.io/en/stable/installation.html#system-requirements - libjpeg62-turbo-dev \ - libgnutls28-dev \ + dpkg-dev \ + equivs \ packaging-dev \ - cmake \ - zlib1g-dev" + libtool" + +ENV DEB_BUILD_OPTIONS="terse nocheck nodoc parallel=2" WORKDIR /usr/src RUN set -eux \ - && echo "Installing build tools" \ + && echo "Installing common packages" \ && apt-get update --quiet \ - && apt-get install --yes --quiet --no-install-recommends $BUILD_PACKAGES \ - && echo "Getting qpdf src" \ + && apt-get install --yes --quiet --no-install-recommends ${COMMON_BUILD_PACKAGES} \ + && echo "Getting qpdf source" \ && echo "deb-src http://deb.debian.org/debian/ bookworm main" > /etc/apt/sources.list.d/bookworm-src.list \ - && apt-get update \ - && mkdir qpdf \ - && cd qpdf \ - && apt-get source --yes --quiet qpdf=${QPDF_VERSION}-1/bookworm \ - && echo "Building qpdf" \ - && cd qpdf-$QPDF_VERSION \ - && export DEB_BUILD_OPTIONS="terse nocheck nodoc parallel=2" \ - && dpkg-buildpackage --build=binary --unsigned-source --unsigned-changes --post-clean \ - && ls -ahl ../*.deb \ - && echo "Cleaning up image" \ - && apt-get -y purge ${BUILD_PACKAGES} \ - && apt-get -y autoremove --purge \ - && rm -rf /var/lib/apt/lists/* + && apt-get update --quiet \ + && apt-get source --yes --quiet qpdf=${QPDF_VERSION}-1/bookworm + +# +# Stage: amd64-builder +# Purpose: Builds qpdf for x86_64 (native build) +# +FROM pre-build as amd64-builder + +ARG AMD64_BUILD_PACKAGES="\ + build-essential \ + libjpeg62-turbo-dev:amd64 \ + libgnutls28-dev:amd64 \ + zlib1g-dev:amd64" + +WORKDIR /usr/src/qpdf-${QPDF_VERSION} + +RUN set -eux \ + && echo "Beginning amd64" \ + && echo "Install amd64 packages" \ + && apt-get update --quiet \ + && apt-get install --yes --quiet --no-install-recommends ${AMD64_BUILD_PACKAGES} \ + && echo "Building amd64" \ + && dpkg-buildpackage --build=binary --unsigned-source --unsigned-changes --post-clean \ + && echo "Removing debug files" \ + && rm -f ../libqpdf29-dbgsym* \ + && rm -f ../qpdf-dbgsym* \ + && echo "Gathering package data" \ + && dpkg-query -f '${Package;-40}${Version}\n' -W > ../pkg-list.txt +# +# Stage: armhf-builder +# Purpose: +# - Sets armhf specific environment +# - Builds qpdf for armhf (cross compile) +# +FROM pre-build as armhf-builder + +ARG ARMHF_PACKAGES="\ + crossbuild-essential-armhf \ + libjpeg62-turbo-dev:armhf \ + libgnutls28-dev:armhf \ + zlib1g-dev:armhf" + +WORKDIR /usr/src/qpdf-${QPDF_VERSION} + +ENV CXX="/usr/bin/arm-linux-gnueabihf-g++" \ + CC="/usr/bin/arm-linux-gnueabihf-gcc" + +RUN set -eux \ + && echo "Beginning armhf" \ + && echo "Install armhf packages" \ + && dpkg --add-architecture armhf \ + && apt-get update --quiet \ + && apt-get install --yes --quiet --no-install-recommends ${ARMHF_PACKAGES} \ + && echo "Building armhf" \ + && dpkg-buildpackage --build=binary --unsigned-source --unsigned-changes --post-clean --host-arch armhf \ + && echo "Removing debug files" \ + && rm -f ../libqpdf29-dbgsym* \ + && rm -f ../qpdf-dbgsym* \ + && echo "Gathering package data" \ + && dpkg-query -f '${Package;-40}${Version}\n' -W > ../pkg-list.txt + +# +# Stage: aarch64-builder +# Purpose: +# - Sets aarch64 specific environment +# - Builds qpdf for aarch64 (cross compile) +# +FROM pre-build as aarch64-builder + +ARG ARM64_PACKAGES="\ + crossbuild-essential-arm64 \ + libjpeg62-turbo-dev:arm64 \ + libgnutls28-dev:arm64 \ + zlib1g-dev:arm64" + +ENV CXX="/usr/bin/aarch64-linux-gnu-g++" \ + CC="/usr/bin/aarch64-linux-gnu-gcc" + +WORKDIR /usr/src/qpdf-${QPDF_VERSION} + +RUN set -eux \ + && echo "Beginning arm64" \ + && echo "Install arm64 packages" \ + && dpkg --add-architecture arm64 \ + && apt-get update --quiet \ + && apt-get install --yes --quiet --no-install-recommends ${ARM64_PACKAGES} \ + && echo "Building arm64" \ + && dpkg-buildpackage --build=binary --unsigned-source --unsigned-changes --post-clean --host-arch arm64 \ + && echo "Removing debug files" \ + && rm -f ../libqpdf29-dbgsym* \ + && rm -f ../qpdf-dbgsym* \ + && echo "Gathering package data" \ + && dpkg-query -f '${Package;-40}${Version}\n' -W > ../pkg-list.txt + +# +# Stage: package +# Purpose: Holds the compiled .deb files in arch/variant specific folders +# +FROM alpine:3.17 as package + +LABEL org.opencontainers.image.description="A image with qpdf installers stored in architecture & version specific folders" + +ARG QPDF_VERSION + +WORKDIR /usr/src/qpdf/${QPDF_VERSION}/amd64 + +COPY --from=amd64-builder /usr/src/*.deb ./ +COPY --from=amd64-builder /usr/src/pkg-list.txt ./ + +# Note this is ${TARGETARCH}${TARGETVARIANT} for armv7 +WORKDIR /usr/src/qpdf/${QPDF_VERSION}/armv7 + +COPY --from=armhf-builder /usr/src/*.deb ./ +COPY --from=armhf-builder /usr/src/pkg-list.txt ./ + +WORKDIR /usr/src/qpdf/${QPDF_VERSION}/arm64 + +COPY --from=aarch64-builder /usr/src/*.deb ./ +COPY --from=aarch64-builder /usr/src/pkg-list.txt ./ From ebaaa3a1e890364057170002df0e7a6913ec8fa4 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Wed, 14 Dec 2022 09:07:25 -0800 Subject: [PATCH 156/231] Adds a basic admin view for tasks --- src/documents/admin.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/documents/admin.py b/src/documents/admin.py index 6fa06c49b..bbe56bbd6 100644 --- a/src/documents/admin.py +++ b/src/documents/admin.py @@ -3,6 +3,7 @@ from django.contrib import admin from .models import Correspondent from .models import Document from .models import DocumentType +from .models import PaperlessTask from .models import SavedView from .models import SavedViewFilterRule from .models import StoragePath @@ -112,9 +113,27 @@ class StoragePathAdmin(admin.ModelAdmin): list_editable = ("path", "match", "matching_algorithm") +class TaskAdmin(admin.ModelAdmin): + + list_display = ("task_id", "task_file_name", "task_name", "date_done", "status") + list_filter = ("status", "date_done", "task_file_name", "task_name") + search_fields = ("task_name", "task_id", "status") + readonly_fields = ( + "task_id", + "task_file_name", + "task_name", + "status", + "date_created", + "date_started", + "date_done", + "result", + ) + + admin.site.register(Correspondent, CorrespondentAdmin) admin.site.register(Tag, TagAdmin) admin.site.register(DocumentType, DocumentTypeAdmin) admin.site.register(Document, DocumentAdmin) admin.site.register(SavedView, SavedViewAdmin) admin.site.register(StoragePath, StoragePathAdmin) +admin.site.register(PaperlessTask, TaskAdmin) From 554bba839e53615457139f291de130ad52067701 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Wed, 14 Dec 2022 13:39:07 -0800 Subject: [PATCH 157/231] Skip running system checks before migrate, then run them directly after instead --- docker/docker-prepare.sh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/docker/docker-prepare.sh b/docker/docker-prepare.sh index c3a01ec8d..e7203fd8d 100755 --- a/docker/docker-prepare.sh +++ b/docker/docker-prepare.sh @@ -20,7 +20,6 @@ wait_for_postgres() { exit 1 else echo "Attempt $attempt_num failed! Trying again in 5 seconds..." - fi attempt_num=$(("$attempt_num" + 1)) @@ -67,10 +66,16 @@ migrations() { # of the current container starts. flock 200 echo "Apply database migrations..." - python3 manage.py migrate + python3 manage.py migrate --skip-checks --no-input ) 200>"${DATA_DIR}/migration_lock" } +django_checks() { + # Explicitly run the Django system checks + echo "Running Django checks" + python3 manage.py check +} + search_index() { local -r index_version=1 @@ -100,6 +105,8 @@ do_work() { migrations + django_checks + search_index superuser From feec36939bef6b4b735417cffb8533cf18c5fa33 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Thu, 8 Dec 2022 15:34:33 -0800 Subject: [PATCH 158/231] Improves the manual image building so it now properly gets cache manifests using buildx --- build-docker-image.sh | 78 +++++++++++++++++++++++++++++++------------ 1 file changed, 56 insertions(+), 22 deletions(-) diff --git a/build-docker-image.sh b/build-docker-image.sh index c43c9886b..7ae00066b 100755 --- a/build-docker-image.sh +++ b/build-docker-image.sh @@ -10,9 +10,9 @@ # Example Usage: # ./build-docker-image.sh Dockerfile -t paperless-ngx:my-awesome-feature -set -eux +set -eu -if ! command -v jq; then +if ! command -v jq &> /dev/null ; then echo "jq required" exit 1 elif [ ! -f "$1" ]; then @@ -20,28 +20,62 @@ elif [ ! -f "$1" ]; then exit 1 fi -# Parse what we can from Pipfile.lock -pikepdf_version=$(jq ".default.pikepdf.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') -psycopg2_version=$(jq ".default.psycopg2.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') -pillow_version=$(jq ".default.pillow.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') -lxml_version=$(jq ".default.lxml.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') -# Read this from the other config file -qpdf_version=$(jq ".qpdf.version" .build-config.json | sed 's/"//g') -jbig2enc_version=$(jq ".jbig2enc.version" .build-config.json | sed 's/"//g') # Get the branch name (used for caching) branch_name=$(git rev-parse --abbrev-ref HEAD) -# https://docs.docker.com/develop/develop-images/build_enhancements/ -# Required to use cache-from -export DOCKER_BUILDKIT=1 +# Parse eithe Pipfile.lock or the .build-config.json +jbig2enc_version=$(jq ".jbig2enc.version" .build-config.json | sed 's/"//g') +qpdf_version=$(jq ".qpdf.version" .build-config.json | sed 's/"//g') +psycopg2_version=$(jq ".default.psycopg2.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') +pikepdf_version=$(jq ".default.pikepdf.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') +pillow_version=$(jq ".default.pillow.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') +lxml_version=$(jq ".default.lxml.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') -docker build --file "$1" \ +base_filename="$(basename -- "${1}")" +build_args_str="" +cache_from_str="" + +case "${base_filename}" in + + *.jbig2enc) + build_args_str="--build-arg JBIG2ENC_VERSION=${jbig2enc_version}" + cache_from_str="--cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/jbig2enc:${jbig2enc_version}" + ;; + + *.psycopg2) + build_args_str="--build-arg PSYCOPG2_VERSION=${psycopg2_version}" + cache_from_str="--cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/psycopg2:${psycopg2_version}" + ;; + + *.qpdf) + build_args_str="--build-arg QPDF_VERSION=${qpdf_version}" + cache_from_str="--cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/qpdf:${qpdf_version}" + ;; + + *.pikepdf) + build_args_str="--build-arg QPDF_VERSION=${qpdf_version} --build-arg PIKEPDF_VERSION=${pikepdf_version} --build-arg PILLOW_VERSION=${pillow_version} --build-arg LXML_VERSION=${lxml_version}" + cache_from_str="--cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/pikepdf:${pikepdf_version}" + ;; + + Dockerfile) + build_args_str="--build-arg QPDF_VERSION=${qpdf_version} --build-arg PIKEPDF_VERSION=${pikepdf_version} --build-arg PSYCOPG2_VERSION=${psycopg2_version} --build-arg JBIG2ENC_VERSION=${jbig2enc_version}" + cache_from_str="--cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/app:${branch_name} --cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/app:dev" + ;; + + *) + echo "Unable to match ${base_filename}" + exit 1 + ;; +esac + +read -r -a build_args_arr <<< "${build_args_str}" +read -r -a cache_from_arr <<< "${cache_from_str}" + +set -eux + +docker buildx build --file "${1}" \ --progress=plain \ - --cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/app:"${branch_name}" \ - --cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/app:dev \ - --build-arg JBIG2ENC_VERSION="${jbig2enc_version}" \ - --build-arg QPDF_VERSION="${qpdf_version}" \ - --build-arg PIKEPDF_VERSION="${pikepdf_version}" \ - --build-arg PILLOW_VERSION="${pillow_version}" \ - --build-arg LXML_VERSION="${lxml_version}" \ - --build-arg PSYCOPG2_VERSION="${psycopg2_version}" "${@:2}" . + --output=type=docker \ + "${cache_from_arr[@]}" \ + "${build_args_arr[@]}" \ + "${@:2}" . From 551a7e606c433c7fcc5e221b939f1f4f61567af3 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 15 Dec 2022 22:23:10 -0800 Subject: [PATCH 159/231] Migrate to eslint --- src-ui/.eslintrc.json | 51 + src-ui/angular.json | 371 ++--- src-ui/package-lock.json | 3239 +++++++++++++++++++++++++++++++------- src-ui/package.json | 10 +- src-ui/tslint.json | 152 -- 5 files changed, 2940 insertions(+), 883 deletions(-) create mode 100644 src-ui/.eslintrc.json delete mode 100644 src-ui/tslint.json diff --git a/src-ui/.eslintrc.json b/src-ui/.eslintrc.json new file mode 100644 index 000000000..b036bf6ad --- /dev/null +++ b/src-ui/.eslintrc.json @@ -0,0 +1,51 @@ +{ + "root": true, + "ignorePatterns": [ + "projects/**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "tsconfig.json", + "e2e/tsconfig.json" + ], + "createDefaultProgram": true + }, + "extends": [ + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "app", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "app", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "extends": [ + "plugin:@angular-eslint/template/recommended" + ], + "rules": {} + } + ] +} diff --git a/src-ui/angular.json b/src-ui/angular.json index 0bdd84de4..1fba4c429 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -1,179 +1,196 @@ { - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "paperless-ui": { - "projectType": "application", - "schematics": { - "@schematics/angular:component": { - "style": "scss" - } - }, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "i18n": { - "sourceLocale": "en-US", - "locales": { - "be-BY": "src/locale/messages.be_BY.xlf", - "cs-CZ": "src/locale/messages.cs_CZ.xlf", - "da-DK": "src/locale/messages.da_DK.xlf", - "de-DE": "src/locale/messages.de_DE.xlf", - "en-GB": "src/locale/messages.en_GB.xlf", - "es-ES": "src/locale/messages.es_ES.xlf", - "fr-FR": "src/locale/messages.fr_FR.xlf", - "it-IT": "src/locale/messages.it_IT.xlf", - "lb-LU": "src/locale/messages.lb_LU.xlf", - "nl-NL": "src/locale/messages.nl_NL.xlf", - "pl-PL": "src/locale/messages.pl_PL.xlf", - "pt-BR": "src/locale/messages.pt_BR.xlf", - "pt-PT": "src/locale/messages.pt_PT.xlf", - "ro-RO": "src/locale/messages.ro_RO.xlf", - "ru-RU": "src/locale/messages.ru_RU.xlf", - "sl-SI": "src/locale/messages.sl_SI.xlf", - "sr-CS": "src/locale/messages.sr_CS.xlf", - "sv-SE": "src/locale/messages.sv_SE.xlf", - "tr-TR": "src/locale/messages.tr_TR.xlf", - "zh-CN": "src/locale/messages.zh_CN.xlf" - } - }, - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "dist/paperless-ui", - "outputHashing": "none", - "index": "src/index.html", - "main": "src/main.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.app.json", - "localize": true, - "assets": [ - "src/favicon.ico", - "src/apple-touch-icon.png", - "src/assets", - "src/manifest.webmanifest", { - "glob": "pdf.worker.min.js", - "input": "node_modules/pdfjs-dist/build/", - "output": "/assets/js/" - } - ], - "styles": [ - "src/styles.scss" - ], - "scripts": [], - "allowedCommonJsDependencies": [ - "ng2-pdf-viewer" - ], - "vendorChunk": true, - "extractLicenses": false, - "buildOptimizer": false, - "sourceMap": true, - "optimization": false, - "namedChunks": true - }, - "configurations": { - "production": { - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "outputPath": "../src/documents/static/frontend/", - "optimization": true, - "outputHashing": "none", - "sourceMap": false, - "namedChunks": false, - "extractLicenses": true, - "vendorChunk": false, - "buildOptimizer": true, - "budgets": [ - { - "type": "initial", - "maximumWarning": "2mb", - "maximumError": "5mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "6kb", - "maximumError": "10kb" - } - ] - }, - "en-US": { - "localize": ["en-US"] - } - }, - "defaultConfiguration": "" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "options": { - "browserTarget": "paperless-ui:build:en-US" - }, - "configurations": { - "production": { - "browserTarget": "paperless-ui:build:production" - } - } - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "browserTarget": "paperless-ui:build" - } - }, - "test": { - "builder": "@angular-builders/jest:run", - "options": { - "tsConfig": "tsconfig.spec.json", - "assets": [ - "src/favicon.ico", - "src/apple-touch-icon.png", - "src/assets", - "src/manifest.webmanifest" - ], - "styles": [ - "src/styles.scss" - ], - "scripts": [] - } - }, - "e2e": { - "builder": "@cypress/schematic:cypress", - "options": { - "devServerTarget": "paperless-ui:serve", - "watch": true, - "headless": false - }, - "configurations": { - "production": { - "devServerTarget": "paperless-ui:serve:production" - } - } - }, - "cypress-run": { - "builder": "@cypress/schematic:cypress", - "options": { - "devServerTarget": "paperless-ui:serve" - }, - "configurations": { - "production": { - "devServerTarget": "paperless-ui:serve:production" - } - } - }, - "cypress-open": { - "builder": "@cypress/schematic:cypress", - "options": { - "watch": true, - "headless": false - } - } - } - } - }, - "defaultProject": "paperless-ui" + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "paperless-ui": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "i18n": { + "sourceLocale": "en-US", + "locales": { + "be-BY": "src/locale/messages.be_BY.xlf", + "cs-CZ": "src/locale/messages.cs_CZ.xlf", + "da-DK": "src/locale/messages.da_DK.xlf", + "de-DE": "src/locale/messages.de_DE.xlf", + "en-GB": "src/locale/messages.en_GB.xlf", + "es-ES": "src/locale/messages.es_ES.xlf", + "fr-FR": "src/locale/messages.fr_FR.xlf", + "it-IT": "src/locale/messages.it_IT.xlf", + "lb-LU": "src/locale/messages.lb_LU.xlf", + "nl-NL": "src/locale/messages.nl_NL.xlf", + "pl-PL": "src/locale/messages.pl_PL.xlf", + "pt-BR": "src/locale/messages.pt_BR.xlf", + "pt-PT": "src/locale/messages.pt_PT.xlf", + "ro-RO": "src/locale/messages.ro_RO.xlf", + "ru-RU": "src/locale/messages.ru_RU.xlf", + "sl-SI": "src/locale/messages.sl_SI.xlf", + "sr-CS": "src/locale/messages.sr_CS.xlf", + "sv-SE": "src/locale/messages.sv_SE.xlf", + "tr-TR": "src/locale/messages.tr_TR.xlf", + "zh-CN": "src/locale/messages.zh_CN.xlf" + } + }, + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/paperless-ui", + "outputHashing": "none", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "localize": true, + "assets": [ + "src/favicon.ico", + "src/apple-touch-icon.png", + "src/assets", + "src/manifest.webmanifest", + { + "glob": "pdf.worker.min.js", + "input": "node_modules/pdfjs-dist/build/", + "output": "/assets/js/" + } + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [], + "allowedCommonJsDependencies": [ + "ng2-pdf-viewer" + ], + "vendorChunk": true, + "extractLicenses": false, + "buildOptimizer": false, + "sourceMap": true, + "optimization": false, + "namedChunks": true + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputPath": "../src/documents/static/frontend/", + "optimization": true, + "outputHashing": "none", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kb", + "maximumError": "10kb" + } + ] + }, + "en-US": { + "localize": [ + "en-US" + ] + } + }, + "defaultConfiguration": "" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "paperless-ui:build:en-US" + }, + "configurations": { + "production": { + "browserTarget": "paperless-ui:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "paperless-ui:build" + } + }, + "test": { + "builder": "@angular-builders/jest:run", + "options": { + "tsConfig": "tsconfig.spec.json", + "assets": [ + "src/favicon.ico", + "src/apple-touch-icon.png", + "src/assets", + "src/manifest.webmanifest" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + } + }, + "e2e": { + "builder": "@cypress/schematic:cypress", + "options": { + "devServerTarget": "paperless-ui:serve", + "watch": true, + "headless": false + }, + "configurations": { + "production": { + "devServerTarget": "paperless-ui:serve:production" + } + } + }, + "cypress-run": { + "builder": "@cypress/schematic:cypress", + "options": { + "devServerTarget": "paperless-ui:serve" + }, + "configurations": { + "production": { + "devServerTarget": "paperless-ui:serve:production" + } + } + }, + "cypress-open": { + "builder": "@cypress/schematic:cypress", + "options": { + "watch": true, + "headless": false + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "src/**/*.ts", + "src/**/*.html" + ] + } + } + } + } + }, + "defaultProject": "paperless-ui", + "cli": { + "schematicCollections": [ + "@angular-eslint/schematics" + ] + } } diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index da26a6790..20310b23d 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -35,17 +35,23 @@ "devDependencies": { "@angular-builders/jest": "14.1.0", "@angular-devkit/build-angular": "~14.2.7", + "@angular-eslint/builder": "14.4.0", + "@angular-eslint/eslint-plugin": "14.4.0", + "@angular-eslint/eslint-plugin-template": "14.4.0", + "@angular-eslint/schematics": "14.4.0", + "@angular-eslint/template-parser": "14.4.0", "@angular/cli": "~14.2.7", "@angular/compiler-cli": "~14.2.8", "@types/jest": "28.1.6", "@types/node": "^18.7.23", - "codelyzer": "^6.0.2", + "@typescript-eslint/eslint-plugin": "5.43.0", + "@typescript-eslint/parser": "5.43.0", "concurrently": "7.4.0", + "eslint": "^8.28.0", "jest": "28.1.3", "jest-environment-jsdom": "^29.2.2", "jest-preset-angular": "^12.2.3", "ts-node": "~10.9.1", - "tslint": "~6.1.3", "typescript": "~4.8.4", "wait-on": "~6.0.1" }, @@ -585,6 +591,138 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "devOptional": true }, + "node_modules/@angular-eslint/builder": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-14.4.0.tgz", + "integrity": "sha512-AhAUFvSg0urtb6Lsowvuxwu6DMXUy0BPwrnfNOBGjRt9vG7F9kgXXAsm5DnIS0GNy/mLZ9mSfa86fv++1e0KUA==", + "dev": true, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/bundled-angular-compiler": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-14.4.0.tgz", + "integrity": "sha512-KMHPHd24s0HVvAP/DxSSqhYBWhwW8FgS/r0Uwv8eWpsIdc/z/Chd2ush2SgPchmmquAXTgOZsbEY7ZmW+XkJfQ==", + "dev": true + }, + "node_modules/@angular-eslint/eslint-plugin": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-14.4.0.tgz", + "integrity": "sha512-2rZQ4mt7tEUW+lI5jjuj3HWaT4VQtWTG6+LDnmuUmx76m8hqQ7NvFUpOcNDofu5KbEVBP+oF2DA6wjoZOIuSOA==", + "dev": true, + "dependencies": { + "@angular-eslint/utils": "14.4.0", + "@typescript-eslint/utils": "5.43.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-14.4.0.tgz", + "integrity": "sha512-d3GM/EU2iWzr+BrITwO4gBf9WfDfuOdTjfinV/zN84oXMFaK2ENo+IP6OEsD9hh36rdPps+m2gFGDdx+rTzBpg==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "14.4.0", + "@angular-eslint/utils": "14.4.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "aria-query": "5.1.3", + "axobject-query": "3.1.1" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/axobject-query": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@angular-eslint/schematics": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-14.4.0.tgz", + "integrity": "sha512-BrGkPug+CZQWOfmNRsJDrEtYJcxvzF/kLlV7RjvIN9Ky5TjUiJVCeafl3VY6COSY32tjlh2GvBdl1AQKWWovbA==", + "dev": true, + "dependencies": { + "@angular-eslint/eslint-plugin": "14.4.0", + "@angular-eslint/eslint-plugin-template": "14.4.0", + "ignore": "5.2.0", + "strip-json-comments": "3.1.1", + "tmp": "0.2.1" + }, + "peerDependencies": { + "@angular/cli": ">= 14.0.0 < 15.0.0" + } + }, + "node_modules/@angular-eslint/schematics/node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@angular-eslint/template-parser": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-14.4.0.tgz", + "integrity": "sha512-zq888KpQB0YTEK26mkKcT4fs8LDWWT1oAEXU8DrXhvkikS8XavTSHOWJye/bVZR4oJRFCF5YTJV75DEMcGNIpQ==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "14.4.0", + "eslint-scope": "^7.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/template-parser/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@angular-eslint/utils": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-14.4.0.tgz", + "integrity": "sha512-dPHklAVfh+JfueDfXre9Xooq7p5bFyKO2Z6y1agYeofAgHCPIJOPx2AhtFPrOtsc4VXFFiyE9XbowlXh4ogoKQ==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "14.4.0", + "@typescript-eslint/utils": "5.43.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "typescript": "*" + } + }, "node_modules/@angular/cli": { "version": "14.2.10", "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.10.tgz", @@ -2978,6 +3116,118 @@ "node": ">=12" } }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -2999,6 +3249,61 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -4383,6 +4688,12 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "node_modules/@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -4468,6 +4779,285 @@ "@types/node": "*" } }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@typescript-eslint/type-utils/node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.43.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -4688,6 +5278,15 @@ "acorn": "^8" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", @@ -4875,15 +5474,6 @@ "node": ">= 8" } }, - "node_modules/app-root-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", - "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", - "dev": true, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", @@ -4944,22 +5534,21 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw==", - "dev": true, - "dependencies": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" - } - }, "node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -4978,12 +5567,6 @@ "node": ">=0.8" } }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -5047,6 +5630,18 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -5071,15 +5666,6 @@ "follow-redirects": "^1.14.7" } }, - "node_modules/axobject-query": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", - "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", - "dev": true, - "dependencies": { - "ast-types-flow": "0.0.7" - } - }, "node_modules/babel-jest": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", @@ -5631,15 +6217,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/builtins": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", @@ -5960,86 +6537,6 @@ "node": ">= 0.12.0" } }, - "node_modules/codelyzer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.2.tgz", - "integrity": "sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g==", - "dev": true, - "dependencies": { - "@angular/compiler": "9.0.0", - "@angular/core": "9.0.0", - "app-root-path": "^3.0.0", - "aria-query": "^3.0.0", - "axobject-query": "2.0.2", - "css-selector-tokenizer": "^0.7.1", - "cssauron": "^1.4.0", - "damerau-levenshtein": "^1.0.4", - "rxjs": "^6.5.3", - "semver-dsl": "^1.0.1", - "source-map": "^0.5.7", - "sprintf-js": "^1.1.2", - "tslib": "^1.10.0", - "zone.js": "~0.10.3" - }, - "peerDependencies": { - "@angular/compiler": ">=2.3.1 <13.0.0 || ^12.0.0-next || ^12.1.0-next || ^12.2.0-next", - "@angular/core": ">=2.3.1 <13.0.0 || ^12.0.0-next || ^12.1.0-next || ^12.2.0-next", - "tslint": "^5.0.0 || ^6.0.0" - } - }, - "node_modules/codelyzer/node_modules/@angular/compiler": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", - "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", - "dev": true, - "peerDependencies": { - "tslib": "^1.10.0" - } - }, - "node_modules/codelyzer/node_modules/@angular/core": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", - "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", - "dev": true, - "peerDependencies": { - "rxjs": "^6.5.3", - "tslib": "^1.10.0", - "zone.js": "~0.10.2" - } - }, - "node_modules/codelyzer/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/codelyzer/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/codelyzer/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/codelyzer/node_modules/zone.js": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", - "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", - "dev": true - }, "node_modules/collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", @@ -6631,16 +7128,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -6653,15 +7140,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cssauron": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", - "integrity": "sha512-Ht70DcFBh+/ekjVrYS2PlDMdSQEl3OFNmjK6lcn49HptBgilXf/Zwg4uFh9Xn0pX3Q8YOkSjIFOfK2osvdqpBw==", - "dev": true, - "dependencies": { - "through": "X.X.X" - } - }, "node_modules/cssdb": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.2.0.tgz", @@ -6865,12 +7343,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -6944,6 +7416,38 @@ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, + "node_modules/deep-equal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.1.0.tgz", + "integrity": "sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -7036,6 +7540,22 @@ "node": ">=8" } }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -7141,6 +7661,18 @@ "node": ">=6" } }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -7370,6 +7902,31 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -7799,6 +8356,62 @@ "node": ">=0.10.0" } }, + "node_modules/eslint": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz", + "integrity": "sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -7821,6 +8434,352 @@ "node": ">=4.0" } }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -7834,6 +8793,18 @@ "node": ">=4" } }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -8142,12 +9113,6 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "node_modules/fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true - }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -8202,6 +9167,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/file-saver": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", @@ -8281,6 +9258,25 @@ "node": ">=8" } }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "node_modules/follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", @@ -8301,6 +9297,15 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -8412,6 +9417,15 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "devOptional": true }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gauge": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", @@ -8589,12 +9603,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "devOptional": true }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -8613,6 +9645,15 @@ "node": ">= 0.4.0" } }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -8621,6 +9662,18 @@ "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -8633,6 +9686,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -9160,12 +10228,40 @@ "node": ">= 10" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -9177,6 +10273,34 @@ "node": ">=8" } }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-ci": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", @@ -9201,6 +10325,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -9283,6 +10422,15 @@ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "devOptional": true }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -9291,11 +10439,26 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "optional": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -9330,6 +10493,31 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -9342,6 +10530,55 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -9360,6 +10597,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-what": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", @@ -11756,6 +13015,16 @@ "@sideway/pinpoint": "^2.0.0" } }, + "node_modules/js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -11916,6 +13185,12 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "devOptional": true }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -12236,6 +13511,12 @@ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -12825,6 +14106,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/needle": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", @@ -13300,6 +14587,49 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -14863,6 +16193,35 @@ "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", "dev": true }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, "node_modules/regexpu-core": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", @@ -15340,24 +16699,6 @@ "node": ">=10" } }, - "node_modules/semver-dsl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", - "integrity": "sha512-e8BOaTo007E3dMuQQTnPdalbKTABKNS7UxoBIDnwOqRa+QwMrCPjynB8zAlPF6xlqUfdLPPLIJ13hJNmhtq8Ng==", - "dev": true, - "dependencies": { - "semver": "^5.3.0" - } - }, - "node_modules/semver-dsl/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -15856,12 +17197,6 @@ "wbuf": "^1.7.3" } }, - "node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - }, "node_modules/sshpk": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", @@ -16428,7 +17763,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "optional": true, + "devOptional": true, "dependencies": { "rimraf": "^3.0.0" }, @@ -16595,124 +17930,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, - "node_modules/tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" - } - }, - "node_modules/tslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/tslint/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tslint/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/tslint/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/tslint/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -17449,6 +18666,57 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -18057,6 +19325,116 @@ } } }, + "@angular-eslint/builder": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-14.4.0.tgz", + "integrity": "sha512-AhAUFvSg0urtb6Lsowvuxwu6DMXUy0BPwrnfNOBGjRt9vG7F9kgXXAsm5DnIS0GNy/mLZ9mSfa86fv++1e0KUA==", + "dev": true, + "requires": {} + }, + "@angular-eslint/bundled-angular-compiler": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-14.4.0.tgz", + "integrity": "sha512-KMHPHd24s0HVvAP/DxSSqhYBWhwW8FgS/r0Uwv8eWpsIdc/z/Chd2ush2SgPchmmquAXTgOZsbEY7ZmW+XkJfQ==", + "dev": true + }, + "@angular-eslint/eslint-plugin": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-14.4.0.tgz", + "integrity": "sha512-2rZQ4mt7tEUW+lI5jjuj3HWaT4VQtWTG6+LDnmuUmx76m8hqQ7NvFUpOcNDofu5KbEVBP+oF2DA6wjoZOIuSOA==", + "dev": true, + "requires": { + "@angular-eslint/utils": "14.4.0", + "@typescript-eslint/utils": "5.43.0" + } + }, + "@angular-eslint/eslint-plugin-template": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-14.4.0.tgz", + "integrity": "sha512-d3GM/EU2iWzr+BrITwO4gBf9WfDfuOdTjfinV/zN84oXMFaK2ENo+IP6OEsD9hh36rdPps+m2gFGDdx+rTzBpg==", + "dev": true, + "requires": { + "@angular-eslint/bundled-angular-compiler": "14.4.0", + "@angular-eslint/utils": "14.4.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "aria-query": "5.1.3", + "axobject-query": "3.1.1" + }, + "dependencies": { + "aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "requires": { + "deep-equal": "^2.0.5" + } + }, + "axobject-query": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dev": true, + "requires": { + "deep-equal": "^2.0.5" + } + } + } + }, + "@angular-eslint/schematics": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-14.4.0.tgz", + "integrity": "sha512-BrGkPug+CZQWOfmNRsJDrEtYJcxvzF/kLlV7RjvIN9Ky5TjUiJVCeafl3VY6COSY32tjlh2GvBdl1AQKWWovbA==", + "dev": true, + "requires": { + "@angular-eslint/eslint-plugin": "14.4.0", + "@angular-eslint/eslint-plugin-template": "14.4.0", + "ignore": "5.2.0", + "strip-json-comments": "3.1.1", + "tmp": "0.2.1" + }, + "dependencies": { + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + } + } + }, + "@angular-eslint/template-parser": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-14.4.0.tgz", + "integrity": "sha512-zq888KpQB0YTEK26mkKcT4fs8LDWWT1oAEXU8DrXhvkikS8XavTSHOWJye/bVZR4oJRFCF5YTJV75DEMcGNIpQ==", + "dev": true, + "requires": { + "@angular-eslint/bundled-angular-compiler": "14.4.0", + "eslint-scope": "^7.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + } + } + }, + "@angular-eslint/utils": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-14.4.0.tgz", + "integrity": "sha512-dPHklAVfh+JfueDfXre9Xooq7p5bFyKO2Z6y1agYeofAgHCPIJOPx2AhtFPrOtsc4VXFFiyE9XbowlXh4ogoKQ==", + "dev": true, + "requires": { + "@angular-eslint/bundled-angular-compiler": "14.4.0", + "@typescript-eslint/utils": "5.43.0" + } + }, "@angular/cli": { "version": "14.2.10", "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.10.tgz", @@ -19661,6 +21039,92 @@ "dev": true, "optional": true }, + "@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "globals": { + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, "@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -19682,6 +21146,50 @@ "@hapi/hoek": "^9.0.0" } }, + "@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -20789,6 +22297,12 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -20874,6 +22388,175 @@ "@types/node": "*" } }, + "@typescript-eslint/eslint-plugin": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "@typescript-eslint/types": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "eslint-visitor-keys": "^3.3.0" + } + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -21083,6 +22766,13 @@ "dev": true, "requires": {} }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, "acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", @@ -21215,12 +22905,6 @@ "picomatch": "^2.0.4" } }, - "app-root-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", - "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", - "dev": true - }, "aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", @@ -21266,22 +22950,18 @@ } } }, - "aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw==", - "dev": true, - "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" - } - }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, "asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -21297,12 +22977,6 @@ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "optional": true }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -21341,6 +23015,12 @@ "postcss-value-parser": "^4.2.0" } }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -21362,15 +23042,6 @@ "follow-redirects": "^1.14.7" } }, - "axobject-query": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", - "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", - "dev": true, - "requires": { - "ast-types-flow": "0.0.7" - } - }, "babel-jest": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", @@ -21776,12 +23447,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", - "dev": true - }, "builtins": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", @@ -22009,71 +23674,6 @@ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true }, - "codelyzer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.2.tgz", - "integrity": "sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g==", - "dev": true, - "requires": { - "@angular/compiler": "9.0.0", - "@angular/core": "9.0.0", - "app-root-path": "^3.0.0", - "aria-query": "^3.0.0", - "axobject-query": "2.0.2", - "css-selector-tokenizer": "^0.7.1", - "cssauron": "^1.4.0", - "damerau-levenshtein": "^1.0.4", - "rxjs": "^6.5.3", - "semver-dsl": "^1.0.1", - "source-map": "^0.5.7", - "sprintf-js": "^1.1.2", - "tslib": "^1.10.0", - "zone.js": "~0.10.3" - }, - "dependencies": { - "@angular/compiler": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", - "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", - "dev": true, - "requires": {} - }, - "@angular/core": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", - "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", - "dev": true, - "requires": {} - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "zone.js": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", - "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", - "dev": true - } - } - }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", @@ -22518,31 +24118,12 @@ "nth-check": "^2.0.1" } }, - "css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, "css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true }, - "cssauron": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", - "integrity": "sha512-Ht70DcFBh+/ekjVrYS2PlDMdSQEl3OFNmjK6lcn49HptBgilXf/Zwg4uFh9Xn0pX3Q8YOkSjIFOfK2osvdqpBw==", - "dev": true, - "requires": { - "through": "X.X.X" - } - }, "cssdb": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.2.0.tgz", @@ -22702,12 +24283,6 @@ } } }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -22760,6 +24335,37 @@ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, + "deep-equal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.1.0.tgz", + "integrity": "sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.8" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -22827,6 +24433,16 @@ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "devOptional": true }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -22904,6 +24520,15 @@ "@leichtgewicht/ip-codec": "^2.0.1" } }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -23084,6 +24709,30 @@ "is-arrayish": "^0.2.1" } }, + "es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -23304,6 +24953,263 @@ } } }, + "eslint": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz", + "integrity": "sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -23322,12 +25228,55 @@ } } }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, "esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -23578,12 +25527,6 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true - }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -23629,6 +25572,15 @@ "escape-string-regexp": "^1.0.5" } }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, "file-saver": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", @@ -23695,12 +25647,37 @@ "path-exists": "^4.0.0" } }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "dev": true }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -23780,6 +25757,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "devOptional": true }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, "gauge": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", @@ -23911,12 +25894,27 @@ "slash": "^4.0.0" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "devOptional": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -23932,17 +25930,41 @@ "function-bind": "^1.1.1" } }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -24352,12 +26374,31 @@ "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", "dev": true }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -24366,6 +26407,22 @@ "binary-extensions": "^2.0.0" } }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, "is-ci": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", @@ -24384,6 +26441,15 @@ "has": "^1.0.3" } }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -24436,16 +26502,31 @@ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "devOptional": true }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "optional": true + "devOptional": true }, "is-plain-obj": { "version": "3.0.0", @@ -24468,12 +26549,59 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "devOptional": true }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -24486,6 +26614,22 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "devOptional": true }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "is-what": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", @@ -26280,6 +28424,12 @@ "@sideway/pinpoint": "^2.0.0" } }, + "js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -26404,6 +28554,12 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "devOptional": true }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -26635,6 +28791,12 @@ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -27072,6 +29234,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "needle": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", @@ -27431,6 +29599,34 @@ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -28499,6 +30695,23 @@ "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", "dev": true }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, "regexpu-core": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", @@ -28840,23 +31053,6 @@ } } }, - "semver-dsl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", - "integrity": "sha512-e8BOaTo007E3dMuQQTnPdalbKTABKNS7UxoBIDnwOqRa+QwMrCPjynB8zAlPF6xlqUfdLPPLIJ13hJNmhtq8Ng==", - "dev": true, - "requires": { - "semver": "^5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -29268,12 +31464,6 @@ "wbuf": "^1.7.3" } }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - }, "sshpk": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", @@ -29683,7 +31873,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "optional": true, + "devOptional": true, "requires": { "rimraf": "^3.0.0" } @@ -29780,100 +31970,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, - "tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -30407,6 +32503,45 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", diff --git a/src-ui/package.json b/src-ui/package.json index d45868d83..0eeb9867b 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -40,17 +40,23 @@ "devDependencies": { "@angular-builders/jest": "14.1.0", "@angular-devkit/build-angular": "~14.2.7", + "@angular-eslint/builder": "14.4.0", + "@angular-eslint/eslint-plugin": "14.4.0", + "@angular-eslint/eslint-plugin-template": "14.4.0", + "@angular-eslint/schematics": "14.4.0", + "@angular-eslint/template-parser": "14.4.0", "@angular/cli": "~14.2.7", "@angular/compiler-cli": "~14.2.8", "@types/jest": "28.1.6", "@types/node": "^18.7.23", - "codelyzer": "^6.0.2", + "@typescript-eslint/eslint-plugin": "5.43.0", + "@typescript-eslint/parser": "5.43.0", "concurrently": "7.4.0", + "eslint": "^8.28.0", "jest": "28.1.3", "jest-environment-jsdom": "^29.2.2", "jest-preset-angular": "^12.2.3", "ts-node": "~10.9.1", - "tslint": "~6.1.3", "typescript": "~4.8.4", "wait-on": "~6.0.1" }, diff --git a/src-ui/tslint.json b/src-ui/tslint.json deleted file mode 100644 index 277c8eba0..000000000 --- a/src-ui/tslint.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "extends": "tslint:recommended", - "rulesDirectory": [ - "codelyzer" - ], - "rules": { - "align": { - "options": [ - "parameters", - "statements" - ] - }, - "array-type": false, - "arrow-return-shorthand": true, - "curly": true, - "deprecation": { - "severity": "warning" - }, - "eofline": true, - "import-blacklist": [ - true, - "rxjs/Rx" - ], - "import-spacing": true, - "indent": { - "options": [ - "spaces" - ] - }, - "max-classes-per-file": false, - "max-line-length": [ - true, - 140 - ], - "member-ordering": [ - true, - { - "order": [ - "static-field", - "instance-field", - "static-method", - "instance-method" - ] - } - ], - "no-console": [ - true, - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-empty": false, - "no-inferrable-types": [ - true, - "ignore-params" - ], - "no-non-null-assertion": true, - "no-redundant-jsdoc": true, - "no-switch-case-fall-through": true, - "no-var-requires": false, - "object-literal-key-quotes": [ - true, - "as-needed" - ], - "quotemark": [ - true, - "single" - ], - "semicolon": { - "options": [ - "always" - ] - }, - "space-before-function-paren": { - "options": { - "anonymous": "never", - "asyncArrow": "always", - "constructor": "never", - "method": "never", - "named": "never" - } - }, - "typedef": [ - true, - "call-signature" - ], - "typedef-whitespace": { - "options": [ - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - }, - { - "call-signature": "onespace", - "index-signature": "onespace", - "parameter": "onespace", - "property-declaration": "onespace", - "variable-declaration": "onespace" - } - ] - }, - "variable-name": { - "options": [ - "ban-keywords", - "check-format", - "allow-pascal-case" - ] - }, - "whitespace": { - "options": [ - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type", - "check-typecast" - ] - }, - "component-class-suffix": true, - "contextual-lifecycle": true, - "directive-class-suffix": true, - "no-conflicting-lifecycle": true, - "no-host-metadata-property": true, - "no-input-rename": true, - "no-inputs-metadata-property": true, - "no-output-native": true, - "no-output-on-prefix": true, - "no-output-rename": true, - "no-outputs-metadata-property": true, - "template-banana-in-box": true, - "template-no-negated-async": true, - "use-lifecycle-interface": true, - "use-pipe-transform-interface": true, - "directive-selector": [ - true, - "attribute", - "app", - "camelCase" - ], - "component-selector": [ - true, - "element", - "app", - "kebab-case" - ] - } -} From 5bf5710d39e4e878a6e3fff67406ce1d6d6fc7db Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 15 Dec 2022 22:48:16 -0800 Subject: [PATCH 160/231] lint frontend --- src-ui/src/app/app.module.ts | 4 +-- .../clearable-badge.component.ts | 2 +- .../edit-dialog/edit-dialog.component.ts | 4 +-- .../storage-path-edit-dialog.component.html | 2 +- .../filterable-dropdown.component.ts | 4 +-- .../select-dialog/select-dialog.component.ts | 6 ++-- .../components/common/tag/tag.component.ts | 6 ++-- .../statistics-widget.component.html | 2 +- .../upload-file-widget.component.ts | 9 ++--- .../welcome-widget.component.ts | 6 ++-- .../widget-frame/widget-frame.component.ts | 6 ++-- .../document-detail.component.html | 18 +++++----- .../metadata-collapse.component.ts | 6 ++-- .../bulk-editor/bulk-editor.component.ts | 4 +-- .../document-card-large.component.ts | 5 +-- .../document-card-small.component.ts | 5 +-- .../document-list.component.html | 24 ++++++------- .../filter-editor.component.html | 6 ++-- .../management-list.component.html | 8 ++--- .../manage/settings/settings.component.html | 10 +++--- .../manage/tasks/tasks.component.html | 12 +++---- .../not-found/not-found.component.ts | 6 ++-- .../src/app/directives/sortable.directive.ts | 35 ++++++++++++------- 23 files changed, 90 insertions(+), 100 deletions(-) diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index ea366b968..70939b928 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -24,7 +24,7 @@ import { CorrespondentEditDialogComponent } from './components/common/edit-dialo import { TagEditDialogComponent } from './components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component' import { DocumentTypeEditDialogComponent } from './components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component' import { TagComponent } from './components/common/tag/tag.component' -import { ClearableBadge } from './components/common/clearable-badge/clearable-badge.component' +import { ClearableBadgeComponent } from './components/common/clearable-badge/clearable-badge.component' import { PageHeaderComponent } from './components/common/page-header/page-header.component' import { AppFrameComponent } from './components/app-frame/app-frame.component' import { ToastsComponent } from './components/common/toasts/toasts.component' @@ -146,7 +146,7 @@ function initializeApp(settings: SettingsService) { DocumentTypeEditDialogComponent, StoragePathEditDialogComponent, TagComponent, - ClearableBadge, + ClearableBadgeComponent, PageHeaderComponent, AppFrameComponent, ToastsComponent, diff --git a/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.ts b/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.ts index 93f63d4d8..0f0b7d64f 100644 --- a/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.ts +++ b/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.ts @@ -5,7 +5,7 @@ import { Component, Input, Output, EventEmitter } from '@angular/core' templateUrl: './clearable-badge.component.html', styleUrls: ['./clearable-badge.component.scss'], }) -export class ClearableBadge { +export class ClearableBadgeComponent { constructor() {} @Input() diff --git a/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts index 9bf141e78..07c3dfbd8 100644 --- a/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts @@ -22,7 +22,7 @@ export abstract class EditDialogComponent object: T @Output() - success = new EventEmitter() + succeeded = new EventEmitter() networkActive = false @@ -95,7 +95,7 @@ export abstract class EditDialogComponent serverResponse.subscribe({ next: (result) => { this.activeModal.close() - this.success.emit(result) + this.succeeded.emit(result) }, error: (error) => { this.error = error.error diff --git a/src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html index 280c101a6..c5cfe3647 100644 --- a/src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html +++ b/src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html @@ -6,7 +6,7 @@