From 5a65c4448d57cadd2dc270db229b0b69b4a459c5 Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 15:14:34 +0000 Subject: [PATCH 01/14] Auto translate strings --- src-ui/messages.xlf | 74 ++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 6da8b403f..3cc8d0094 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -379,11 +379,11 @@ src/app/components/app-frame/app-frame.component.html - 272 + 273 src/app/components/app-frame/app-frame.component.html - 274 + 275 @@ -724,11 +724,11 @@ src/app/components/app-frame/app-frame.component.html - 307 + 308 src/app/components/app-frame/app-frame.component.html - 310 + 311 @@ -1135,11 +1135,11 @@ src/app/components/app-frame/app-frame.component.html - 232 + 233 src/app/components/app-frame/app-frame.component.html - 234 + 235 src/app/components/manage/saved-views/saved-views.component.html @@ -1696,7 +1696,7 @@ src/app/components/app-frame/app-frame.component.html - 203 + 204 src/app/components/common/input/tags/tags.component.ts @@ -1801,11 +1801,11 @@ src/app/components/app-frame/app-frame.component.html - 295 + 296 src/app/components/app-frame/app-frame.component.html - 297 + 298 @@ -2513,11 +2513,11 @@ src/app/components/app-frame/app-frame.component.html - 255 + 256 src/app/components/app-frame/app-frame.component.html - 258 + 259 @@ -2870,11 +2870,11 @@ src/app/components/app-frame/app-frame.component.html - 286 + 287 src/app/components/app-frame/app-frame.component.html - 288 + 289 @@ -3211,11 +3211,11 @@ src/app/components/app-frame/app-frame.component.html - 316 + 317 src/app/components/app-frame/app-frame.component.html - 319 + 320 @@ -3240,36 +3240,36 @@ Close all src/app/components/app-frame/app-frame.component.html - 162 + 163 src/app/components/app-frame/app-frame.component.html - 164 + 165 Manage src/app/components/app-frame/app-frame.component.html - 173 + 174 Attributes src/app/components/app-frame/app-frame.component.html - 180 + 181 src/app/components/app-frame/app-frame.component.html - 182 + 183 Correspondents src/app/components/app-frame/app-frame.component.html - 208 + 209 src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html @@ -3288,7 +3288,7 @@ Document types src/app/components/app-frame/app-frame.component.html - 213 + 214 src/app/components/manage/document-attributes/document-attributes.component.ts @@ -3299,7 +3299,7 @@ Storage paths src/app/components/app-frame/app-frame.component.html - 218 + 219 src/app/components/manage/document-attributes/document-attributes.component.ts @@ -3310,7 +3310,7 @@ Custom fields src/app/components/app-frame/app-frame.component.html - 223 + 224 src/app/components/document-list/bulk-editor/bulk-editor.component.html @@ -3329,11 +3329,11 @@ Workflows src/app/components/app-frame/app-frame.component.html - 241 + 242 src/app/components/app-frame/app-frame.component.html - 243 + 244 src/app/components/manage/workflows/workflows.component.html @@ -3344,71 +3344,71 @@ Mail src/app/components/app-frame/app-frame.component.html - 248 + 249 src/app/components/app-frame/app-frame.component.html - 251 + 252 Administration src/app/components/app-frame/app-frame.component.html - 266 + 267 Configuration src/app/components/app-frame/app-frame.component.html - 279 + 280 src/app/components/app-frame/app-frame.component.html - 281 + 282 GitHub src/app/components/app-frame/app-frame.component.html - 326 + 327 is available. src/app/components/app-frame/app-frame.component.html - 335,336 + 336,337 Click to view. src/app/components/app-frame/app-frame.component.html - 336 + 337 Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 340 + 341 How does this work? src/app/components/app-frame/app-frame.component.html - 347,349 + 348,350 Update available src/app/components/app-frame/app-frame.component.html - 360 + 361 From 697e262b5d48c90a47d27c12316ed64e0a55084b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 15:37:35 +0000 Subject: [PATCH 02/14] docker(deps): Bump astral-sh/uv (#13070) Bumps [astral-sh/uv](https://github.com/astral-sh/uv) from 0.11.19-python3.12-trixie-slim to 0.11.28-python3.12-trixie-slim. - [Release notes](https://github.com/astral-sh/uv/releases) - [Changelog](https://github.com/astral-sh/uv/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/uv/compare/0.11.19...0.11.28) --- updated-dependencies: - dependency-name: astral-sh/uv dependency-version: 0.11.26-python3.12-trixie-slim dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b44b50c17..2fdce08b1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,7 +30,7 @@ RUN set -eux \ # Purpose: Installs s6-overlay and rootfs # Comments: # - Don't leave anything extra in here either -FROM ghcr.io/astral-sh/uv:0.11.19-python3.12-trixie-slim AS s6-overlay-base +FROM ghcr.io/astral-sh/uv:0.11.28-python3.12-trixie-slim AS s6-overlay-base WORKDIR /usr/src/s6 From 2135572adb6cc398b15c0c27f7893539a49d30bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 15:55:33 +0000 Subject: [PATCH 03/14] docker-compose(deps): bump nginx in /docker/compose (#13065) Bumps nginx from 1.31.1-alpine to 1.31.2-alpine. --- updated-dependencies: - dependency-name: nginx dependency-version: 1.31.2-alpine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docker/compose/docker-compose.ci-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/compose/docker-compose.ci-test.yml b/docker/compose/docker-compose.ci-test.yml index 8bbe169e8..b90ac9be3 100644 --- a/docker/compose/docker-compose.ci-test.yml +++ b/docker/compose/docker-compose.ci-test.yml @@ -35,7 +35,7 @@ services: - "3143:3143" # IMAP restart: unless-stopped nginx: - image: docker.io/nginx:1.31.1-alpine + image: docker.io/nginx:1.31.2-alpine hostname: nginx container_name: nginx ports: From c0589a9ce9b16ff34697256c2ea0ace7ddda6b0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 09:09:30 -0700 Subject: [PATCH 04/14] docker-compose(deps): bump gotenberg/gotenberg in /docker/compose (#13066) Bumps gotenberg/gotenberg from 8.33 to 8.34. --- updated-dependencies: - dependency-name: gotenberg/gotenberg dependency-version: '8.34' dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docker/compose/docker-compose.ci-test.yml | 2 +- docker/compose/docker-compose.mariadb-tika.yml | 2 +- docker/compose/docker-compose.postgres-tika.yml | 2 +- docker/compose/docker-compose.sqlite-tika.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docker/compose/docker-compose.ci-test.yml b/docker/compose/docker-compose.ci-test.yml index b90ac9be3..1e3ec847a 100644 --- a/docker/compose/docker-compose.ci-test.yml +++ b/docker/compose/docker-compose.ci-test.yml @@ -4,7 +4,7 @@ # correct networking for the tests services: gotenberg: - image: docker.io/gotenberg/gotenberg:8.33 + image: docker.io/gotenberg/gotenberg:8.34 hostname: gotenberg container_name: gotenberg network_mode: host diff --git a/docker/compose/docker-compose.mariadb-tika.yml b/docker/compose/docker-compose.mariadb-tika.yml index 54c7c1811..53f691707 100644 --- a/docker/compose/docker-compose.mariadb-tika.yml +++ b/docker/compose/docker-compose.mariadb-tika.yml @@ -72,7 +72,7 @@ services: PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 gotenberg: - image: docker.io/gotenberg/gotenberg:8.33 + image: docker.io/gotenberg/gotenberg:8.34 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. diff --git a/docker/compose/docker-compose.postgres-tika.yml b/docker/compose/docker-compose.postgres-tika.yml index 754264afc..1bf90d5ae 100644 --- a/docker/compose/docker-compose.postgres-tika.yml +++ b/docker/compose/docker-compose.postgres-tika.yml @@ -67,7 +67,7 @@ services: PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 gotenberg: - image: docker.io/gotenberg/gotenberg:8.33 + image: docker.io/gotenberg/gotenberg:8.34 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. diff --git a/docker/compose/docker-compose.sqlite-tika.yml b/docker/compose/docker-compose.sqlite-tika.yml index e8143216d..130cdf81a 100644 --- a/docker/compose/docker-compose.sqlite-tika.yml +++ b/docker/compose/docker-compose.sqlite-tika.yml @@ -56,7 +56,7 @@ services: PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 gotenberg: - image: docker.io/gotenberg/gotenberg:8.33 + image: docker.io/gotenberg/gotenberg:8.34 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. From e2cf3633fec7b711130cec68350b97437fb93646 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 09:23:10 -0700 Subject: [PATCH 05/14] docker-compose(deps): bump greenmail/standalone in /docker/compose (#13067) Bumps greenmail/standalone from 2.1.8 to 2.1.9. --- updated-dependencies: - dependency-name: greenmail/standalone dependency-version: 2.1.9 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docker/compose/docker-compose.ci-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/compose/docker-compose.ci-test.yml b/docker/compose/docker-compose.ci-test.yml index 1e3ec847a..1004a4c14 100644 --- a/docker/compose/docker-compose.ci-test.yml +++ b/docker/compose/docker-compose.ci-test.yml @@ -24,7 +24,7 @@ services: network_mode: host restart: unless-stopped greenmail: - image: docker.io/greenmail/standalone:2.1.8 + image: docker.io/greenmail/standalone:2.1.9 hostname: greenmail container_name: greenmail environment: From 735c3b073a254ea86b88b7fcde670b82b8034a1b Mon Sep 17 00:00:00 2001 From: Albert Mikaelyan Date: Wed, 15 Jul 2026 10:19:22 -0700 Subject: [PATCH 06/14] Fix: allow setting any UID and GID when running rootless (#13090) --- Dockerfile | 4 ++++ docs/setup.md | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 2fdce08b1..929d205b2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -238,6 +238,10 @@ RUN set -eux \ && chown --from root:root --changes --recursive paperless:paperless /usr/src/paperless \ && echo "Making fontconfig cache writable for arbitrary container UIDs" \ && chmod 1777 /var/cache/fontconfig \ + && echo "Making /run world-writable for rootless operation" \ + && chmod 1777 /run \ + && echo "Removing setuid from s6-overlay-suexec for rootless compat" \ + && chmod u-s /command/s6-overlay-suexec \ && echo "Collecting static files" \ && PAPERLESS_SECRET_KEY=build-time-dummy s6-setuidgid paperless python3 manage.py collectstatic --clear --no-input --link \ && PAPERLESS_SECRET_KEY=build-time-dummy s6-setuidgid paperless python3 manage.py compilemessages \ diff --git a/docs/setup.md b/docs/setup.md index 9420ba40b..f58313ddd 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -142,7 +142,7 @@ a [superuser](usage.md#superusers) account. It is not possible to run the container rootless if additional languages are specified via `PAPERLESS_OCR_LANGUAGES`. -If you want to run Paperless as a rootless container, set `user:` in `docker-compose.yml` to the UID and GID of your host user (use `id -u` and `id -g` to find these values). The container process starts directly as that user with no internal privilege remapping: +If you want to run Paperless as a rootless container, set `user:` in `docker-compose.yml` to the UID and GID of your host user (use `id -u` and `id -g` to find these values). The container process starts directly as that user with no internal privilege remapping. Any UID and GID is supported: ```yaml webserver: From f0d934259c2496c1122ec4eba948ee3569a6b79d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Wed, 15 Jul 2026 22:43:16 +0200 Subject: [PATCH 07/14] Fix: scope ProcessedMail UID deduplication by IMAP UIDVALIDITY (#12839) --- src/paperless_mail/mail.py | 41 +++- .../0004_processedmail_uid_validity.py | 22 ++ src/paperless_mail/models.py | 8 + src/paperless_mail/tests/test_mail.py | 221 ++++++++++++++++++ 4 files changed, 290 insertions(+), 2 deletions(-) create mode 100644 src/paperless_mail/migrations/0004_processedmail_uid_validity.py diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index acdc72703..56bde624a 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -18,6 +18,7 @@ from celery import shared_task from celery.canvas import Signature from django.conf import settings from django.db import DatabaseError +from django.db.models import Q from django.utils import timezone from django.utils.timezone import is_naive from django.utils.timezone import make_aware @@ -245,6 +246,7 @@ def apply_mail_action( message_uid: str, message_subject: str, message_date: datetime.datetime, + uid_validity: str | None = None, ) -> None: """ This shared task applies the mail action of a particular mail rule to the @@ -286,6 +288,7 @@ def apply_mail_action( rule=rule, folder=rule.folder, uid=message_uid, + uid_validity=uid_validity, subject=message_subject, received=message_date, status="SUCCESS", @@ -297,6 +300,7 @@ def apply_mail_action( rule=rule, folder=rule.folder, uid=message_uid, + uid_validity=uid_validity, subject=message_subject, received=message_date, status="FAILED", @@ -314,6 +318,7 @@ def error_callback( message_uid: str, message_subject: str, message_date: datetime.datetime, + uid_validity: str | None = None, ) -> None: """ A shared task that is called whenever something goes wrong during @@ -325,6 +330,7 @@ def error_callback( rule=rule, folder=rule.folder, uid=message_uid, + uid_validity=uid_validity, subject=message_subject, received=make_aware(message_date) if is_naive(message_date) else message_date, status="FAILED", @@ -337,6 +343,7 @@ def queue_consumption_tasks( consume_tasks: list[Signature], rule: MailRule, message: MailMessage, + uid_validity: str | None, ) -> None: """ Queue a list of consumption tasks (Signatures for the consume_file shared @@ -348,6 +355,7 @@ def queue_consumption_tasks( message_uid=message.uid, message_subject=message.subject, message_date=message.date, + uid_validity=uid_validity, ) chord(header=consume_tasks, body=mail_action_task).on_error( error_callback.s( @@ -355,6 +363,7 @@ def queue_consumption_tasks( message_uid=message.uid, message_subject=message.subject, message_date=message.date, + uid_validity=uid_validity, ), ).delay() @@ -460,6 +469,7 @@ class MailAccountHandler(LoggingMixin): super().__init__() self.renew_logging_group() self._init_preprocessors() + self._current_uid_validity: str | None = None def _init_preprocessors(self) -> None: self._message_preprocessors: list[MailMessagePreprocessor] = [] @@ -510,6 +520,21 @@ class MailAccountHandler(LoggingMixin): "Unknown title selector.", ) # pragma: no cover + def _get_uid_validity(self, M: MailBox, folder: str) -> str | None: + try: + uid_validity = M.folder.status(folder, ["UIDVALIDITY"]).get("UIDVALIDITY") + if uid_validity is not None: + return str(uid_validity) + except errors.MailboxFolderStatusError as e: + self.log.warning( + f"Server does not support retrieving UIDVALIDITY for folder {folder}: {e}", + ) + except Exception as e: + self.log.warning( + f"Unable to retrieve UIDVALIDITY for folder {folder}: {e}", + ) + return None + def _get_correspondent( self, message: MailMessage, @@ -647,6 +672,8 @@ class MailAccountHandler(LoggingMixin): f"does not exist in account {rule.account}", ) from err + self._current_uid_validity = self._get_uid_validity(M, rule.folder) + criterias = make_criterias(rule, supports_gmail_labels=supports_gmail_labels) self.log.debug( @@ -687,11 +714,17 @@ class MailAccountHandler(LoggingMixin): ) continue - if ProcessedMail.objects.filter( + already_processed = ProcessedMail.objects.filter( rule=rule, uid=message.uid, folder=rule.folder, - ).exists(): + ) + if self._current_uid_validity is not None: + already_processed = already_processed.filter( + Q(uid_validity=self._current_uid_validity) + | Q(uid_validity__isnull=True), + ) + if already_processed.exists(): self.log.debug( f"Skipping mail '{message.uid}' subject '{message.subject}' from '{message.from_}', already processed.", ) @@ -921,6 +954,7 @@ class MailAccountHandler(LoggingMixin): consume_tasks=consume_tasks, rule=rule, message=message, + uid_validity=self._current_uid_validity, ) else: # No files to consume, just mark as processed if it wasn't by .eml processing @@ -928,11 +962,13 @@ class MailAccountHandler(LoggingMixin): rule=rule, uid=message.uid, folder=rule.folder, + uid_validity=self._current_uid_validity, ).exists(): ProcessedMail.objects.create( rule=rule, folder=rule.folder, uid=message.uid, + uid_validity=self._current_uid_validity, subject=message.subject, received=make_aware(message.date) if is_naive(message.date) @@ -1009,6 +1045,7 @@ class MailAccountHandler(LoggingMixin): consume_tasks=[consume_task], rule=rule, message=message, + uid_validity=self._current_uid_validity, ) processed_elements = 1 diff --git a/src/paperless_mail/migrations/0004_processedmail_uid_validity.py b/src/paperless_mail/migrations/0004_processedmail_uid_validity.py new file mode 100644 index 000000000..b2f4bf575 --- /dev/null +++ b/src/paperless_mail/migrations/0004_processedmail_uid_validity.py @@ -0,0 +1,22 @@ +from django.db import migrations +from django.db import models + + +class Migration(migrations.Migration): + dependencies = [ + ("paperless_mail", "0003_mailrule_stop_processing"), + ] + + operations = [ + migrations.AddField( + model_name="processedmail", + name="uid_validity", + field=models.CharField( + blank=True, + editable=False, + max_length=64, + null=True, + verbose_name="uid validity", + ), + ), + ] diff --git a/src/paperless_mail/models.py b/src/paperless_mail/models.py index c4dd3eaa6..81aced3d2 100644 --- a/src/paperless_mail/models.py +++ b/src/paperless_mail/models.py @@ -338,6 +338,14 @@ class ProcessedMail(document_models.ModelWithOwner): editable=False, ) + uid_validity = models.CharField( + _("uid validity"), + null=True, + blank=True, + max_length=64, + editable=False, + ) + subject = models.CharField( _("subject"), null=False, diff --git a/src/paperless_mail/tests/test_mail.py b/src/paperless_mail/tests/test_mail.py index 96802fa49..269ec6472 100644 --- a/src/paperless_mail/tests/test_mail.py +++ b/src/paperless_mail/tests/test_mail.py @@ -54,12 +54,16 @@ class _AttachmentDef: class BogusFolderManager: current_folder = "INBOX" + uidvalidity = "1" def set(self, new_folder) -> None: if new_folder not in ["INBOX", "spam"]: raise MailboxFolderSelectError(None, "uhm") self.current_folder = new_folder + def status(self, folder, options): + return {"UIDVALIDITY": self.uidvalidity} + class BogusClient: def __init__(self, messages) -> None: @@ -944,6 +948,223 @@ class TestMail( self.assertEqual(self.mailMocker._queue_consumption_tasks_mock.call_count, 1) + def test_handle_mail_account_skips_mail_already_processed_in_same_uidvalidity( + self, + ) -> None: + """ + GIVEN: + - A ProcessedMail row recorded under the mailbox's current UIDVALIDITY + WHEN: + - A mail with the same UID is fetched from the same UIDVALIDITY epoch + THEN: + - The mail is skipped as a duplicate. + """ + account = MailAccount.objects.create( + name="test", + imap_server="", + username="admin", + password="secret", + ) + rule = MailRule.objects.create( + name="testrule", + account=account, + action=MailRule.MailAction.DELETE, + ) + + message = self.mailMocker.messageBuilder.create_message() + self.mailMocker.bogus_mailbox.messages = [message] + self.mailMocker.bogus_mailbox.updateClient() + + self.mailMocker.bogus_mailbox.folder.uidvalidity = "SAME" + ProcessedMail.objects.create( + rule=rule, + folder=rule.folder, + uid=message.uid, + uid_validity="SAME", + subject="Previously processed mail", + status="SUCCESS", + received=timezone.make_aware(timezone.datetime(2023, 1, 1, 12, 0, 0)), + ) + + self.mail_account_handler.handle_mail_account(account) + + self.assertEqual(self.mailMocker._queue_consumption_tasks_mock.call_count, 0) + + def test_handle_mail_account_processes_mail_after_uidvalidity_change( + self, + ) -> None: + """ + GIVEN: + - A ProcessedMail row recorded under a previous UIDVALIDITY epoch + WHEN: + - A mail with the same UID is fetched after UIDVALIDITY has changed + THEN: + - The mail is processed, not skipped as a duplicate. + """ + account = MailAccount.objects.create( + name="test", + imap_server="", + username="admin", + password="secret", + ) + rule = MailRule.objects.create( + name="testrule", + account=account, + action=MailRule.MailAction.DELETE, + ) + + message = self.mailMocker.messageBuilder.create_message() + self.mailMocker.bogus_mailbox.messages = [message] + self.mailMocker.bogus_mailbox.updateClient() + + self.mailMocker.bogus_mailbox.folder.uidvalidity = "NEW" + ProcessedMail.objects.create( + rule=rule, + folder=rule.folder, + uid=message.uid, + uid_validity="OLD", + subject="Previously processed mail", + status="SUCCESS", + received=timezone.make_aware(timezone.datetime(2023, 1, 1, 12, 0, 0)), + ) + + self.mail_account_handler.handle_mail_account(account) + + self.assertEqual(self.mailMocker._queue_consumption_tasks_mock.call_count, 1) + + def test_handle_mail_account_skips_mail_processed_before_uidvalidity_tracking( + self, + ) -> None: + """ + GIVEN: + - A ProcessedMail row recorded before UIDVALIDITY tracking existed + (uid_validity is NULL) + WHEN: + - A mail with the same UID is fetched + THEN: + - The mail is skipped as a duplicate, to avoid re-ingesting all + previously processed mail after upgrading. + """ + account = MailAccount.objects.create( + name="test", + imap_server="", + username="admin", + password="secret", + ) + rule = MailRule.objects.create( + name="testrule", + account=account, + action=MailRule.MailAction.DELETE, + ) + + message = self.mailMocker.messageBuilder.create_message() + self.mailMocker.bogus_mailbox.messages = [message] + self.mailMocker.bogus_mailbox.updateClient() + + ProcessedMail.objects.create( + rule=rule, + folder=rule.folder, + uid=message.uid, + uid_validity=None, + subject="Previously processed mail", + status="SUCCESS", + received=timezone.make_aware(timezone.datetime(2023, 1, 1, 12, 0, 0)), + ) + + self.mail_account_handler.handle_mail_account(account) + + self.assertEqual(self.mailMocker._queue_consumption_tasks_mock.call_count, 0) + + def test_handle_mail_account_processes_mail_when_uidvalidity_unavailable( + self, + ) -> None: + """ + GIVEN: + - The mail server fails to report a UIDVALIDITY for the folder + WHEN: + - A mail account is processed + THEN: + - The failure is logged and the rule still processes the mail, + instead of the whole rule being disabled. + """ + account = MailAccount.objects.create( + name="test", + imap_server="", + username="admin", + password="secret", + ) + _ = MailRule.objects.create( + name="testrule", + account=account, + action=MailRule.MailAction.DELETE, + ) + + message = self.mailMocker.messageBuilder.create_message() + self.mailMocker.bogus_mailbox.messages = [message] + self.mailMocker.bogus_mailbox.updateClient() + + self.mailMocker.bogus_mailbox.folder.status = mock.MagicMock( + side_effect=errors.MailboxFolderStatusError(("NO", [b"unsupported"]), "OK"), + ) + + with self.assertLogs("paperless_mail", level="WARNING") as cm: + self.mail_account_handler.handle_mail_account(account) + + self.assertEqual(self.mailMocker._queue_consumption_tasks_mock.call_count, 1) + self.assertEqual(len(cm.output), 1) + self.assertIn( + "Server does not support retrieving UIDVALIDITY", + cm.output[0], + ) + + def test_handle_mail_account_skips_mail_when_uidvalidity_unavailable_but_prior_record_exists( + self, + ) -> None: + """ + GIVEN: + - A ProcessedMail row recorded with a real uid_validity value + - The mail server fails to report UIDVALIDITY (MailboxFolderStatusError), + so _get_uid_validity returns None + WHEN: + - A mail with the same UID is fetched + THEN: + - The mail is skipped as already-processed rather than re-ingested, + falling back to (rule, uid, folder) matching. + """ + account = MailAccount.objects.create( + name="test", + imap_server="", + username="admin", + password="secret", + ) + rule = MailRule.objects.create( + name="testrule", + account=account, + action=MailRule.MailAction.DELETE, + ) + + message = self.mailMocker.messageBuilder.create_message() + self.mailMocker.bogus_mailbox.messages = [message] + self.mailMocker.bogus_mailbox.updateClient() + + ProcessedMail.objects.create( + rule=rule, + folder=rule.folder, + uid=message.uid, + uid_validity="REAL_VALIDITY", + subject="Previously processed mail", + status="SUCCESS", + received=timezone.make_aware(timezone.datetime(2023, 1, 1, 12, 0, 0)), + ) + + self.mailMocker.bogus_mailbox.folder.status = mock.MagicMock( + side_effect=errors.MailboxFolderStatusError(("NO", [b"unsupported"]), "OK"), + ) + + self.mail_account_handler.handle_mail_account(account) + + self.assertEqual(self.mailMocker._queue_consumption_tasks_mock.call_count, 0) + @pytest.mark.flaky(reruns=4) def test_handle_mail_account_flag(self) -> None: account = MailAccount.objects.create( From 2de2dfdb81049d083c66ad591d1316ad3850817d Mon Sep 17 00:00:00 2001 From: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 20:45:19 +0000 Subject: [PATCH 08/14] Auto translate strings --- src/locale/en_US/LC_MESSAGES/django.po | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index f45406b16..dff2d995a 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-11 23:04+0000\n" +"POT-Creation-Date: 2026-07-15 20:44+0000\n" "PO-Revision-Date: 2022-02-17 04:17\n" "Last-Translator: \n" "Language-Team: English\n" @@ -2433,21 +2433,25 @@ msgid "uid" msgstr "" #: paperless_mail/models.py:342 -msgid "subject" +msgid "uid validity" msgstr "" #: paperless_mail/models.py:350 +msgid "subject" +msgstr "" + +#: paperless_mail/models.py:358 msgid "received" msgstr "" -#: paperless_mail/models.py:357 +#: paperless_mail/models.py:365 msgid "processed" msgstr "" -#: paperless_mail/models.py:363 +#: paperless_mail/models.py:371 msgid "status" msgstr "" -#: paperless_mail/models.py:371 +#: paperless_mail/models.py:379 msgid "error" msgstr "" From 5428ea5caad78a37f88f0cc044e83a33f27e5fac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 21:04:28 +0000 Subject: [PATCH 09/14] Chore(deps-dev): Bump the development group with 2 updates (#13068) Signed-off-by: dependabot[bot] --- pyproject.toml | 4 ++-- uv.lock | 64 +++++++++++++++++++++++++------------------------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7a96a264a..4a4aba713 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -101,11 +101,11 @@ dev = [ { include-group = "testing" }, ] docs = [ - "zensical>=0.0.43", + "zensical>=0.0.47", ] lint = [ "prek~=0.3.10", - "ruff~=0.15.15", + "ruff~=0.15.20", ] testing = [ "daphne", diff --git a/uv.lock b/uv.lock index 1f0520aac..5833bced2 100644 --- a/uv.lock +++ b/uv.lock @@ -3102,14 +3102,14 @@ dev = [ { name = "pytest-rerunfailures", specifier = "~=16.1" }, { name = "pytest-sugar" }, { name = "pytest-xdist", specifier = "~=3.8.0" }, - { name = "ruff", specifier = "~=0.15.15" }, + { name = "ruff", specifier = "~=0.15.20" }, { name = "time-machine", specifier = ">=2.13" }, - { name = "zensical", specifier = ">=0.0.43" }, + { name = "zensical", specifier = ">=0.0.47" }, ] -docs = [{ name = "zensical", specifier = ">=0.0.43" }] +docs = [{ name = "zensical", specifier = ">=0.0.47" }] lint = [ { name = "prek", specifier = "~=0.3.10" }, - { name = "ruff", specifier = "~=0.15.15" }, + { name = "ruff", specifier = "~=0.15.20" }, ] testing = [ { name = "daphne" }, @@ -4363,24 +4363,24 @@ wheels = [ [[package]] name = "ruff" -version = "0.15.15" +version = "0.15.20" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/84/6f/a76f7d96e5c962f5b69cee865e49c15c1116897c01990faa8a57edb62e7f/ruff-0.15.15.tar.gz", hash = "sha256:b8dff018130b46d8e5bf0f926ef6b60cf871d6d5ae45fc9334e09632daa741d6", size = 4706985, upload-time = "2026-05-28T14:16:57.784Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/dc/35b341fc554ba02f217fc10da57d1a75168cfbcf75b0ef2202176d4c4f2d/ruff-0.15.20.tar.gz", hash = "sha256:1416eb04349192646b54de98f146c4f59afe37d0decfc02c3cbbf396f3a28566", size = 4755489, upload-time = "2026-06-25T17:20:37.578Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/9d/3a45c05b8ab04b4705989de70a79008e27c8003296a0feaee9edc18dd7e9/ruff-0.15.15-py3-none-linux_armv6l.whl", hash = "sha256:cf93e5388f412e1b108b1f8b34a6e036b70fe8aff89393befad96fe48670311b", size = 10710652, upload-time = "2026-05-28T14:16:06.701Z" }, - { url = "https://files.pythonhosted.org/packages/05/66/da974431624bf3b49f6ee1f9543c02d929ff1cba78b0d5a79c38cf21f744/ruff-0.15.15-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ac5a646d1f6a7dadd5d50842dae2c1f9862ac887ef5d1b1375e02def791fde6e", size = 11096615, upload-time = "2026-05-28T14:16:23.313Z" }, - { url = "https://files.pythonhosted.org/packages/8c/09/7443452e5d290230a712103f2fdceeef7184f3ec99a2bd01c8be78aaceb5/ruff-0.15.15-py3-none-macosx_11_0_arm64.whl", hash = "sha256:77d955a431430c66f72dd94e379ad38a16daea3d25094872ac4edf9e797be530", size = 10436683, upload-time = "2026-05-28T14:16:40.974Z" }, - { url = "https://files.pythonhosted.org/packages/53/01/d330c26a57fa4f3943a14424904027428315b700fe4d14a84bb123a649e5/ruff-0.15.15-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7614ee79c69788cf6cedd568069ade9cecc22a1ad20494efe8d0c9ebb4b622d4", size = 10769064, upload-time = "2026-05-28T14:16:28.905Z" }, - { url = "https://files.pythonhosted.org/packages/1d/85/cc8770f8bdff541b1da8392d1634141fe4a0e3f4ee596605959b7906c27f/ruff-0.15.15-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3cdb1679e06a1f6b47bc384714ae96f6e2fb65ca441eb78c43d2ca554176ce1f", size = 10511987, upload-time = "2026-05-28T14:16:43.732Z" }, - { url = "https://files.pythonhosted.org/packages/7c/29/8c190c1472b63013583ba391f3342036e02010544c1270455ed8e519bdf3/ruff-0.15.15-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2728b93d7b23a603ea2c0ac6eb73d760bd38ec9de35f35fb41e18f7a3fee7622", size = 11275100, upload-time = "2026-05-28T14:16:55.244Z" }, - { url = "https://files.pythonhosted.org/packages/9f/6b/7e145ce2cc8e63d6834eca03d83a0e18d121def5c69f91b4cf4011ed4879/ruff-0.15.15-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be582fcc0db438902c7792b08d6ddf6c9b9e21addaa10092c2c741cfb09e5a45", size = 12176903, upload-time = "2026-05-28T14:16:14.368Z" }, - { url = "https://files.pythonhosted.org/packages/80/a3/d5974637f68e451f7fadf015cf3101d1cd7d8ba5027cffe0b9e3826ebe6b/ruff-0.15.15-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7aa77465b8ecaf1a27bea098d696f7fed5e1eccbd10b321b682d6de586ae5627", size = 11404550, upload-time = "2026-05-28T14:16:20.138Z" }, - { url = "https://files.pythonhosted.org/packages/fe/1c/e6e5e568f22be4fb05d6244234aba384c06b451252453b821e1a529263cf/ruff-0.15.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48decfa11d740de4889de623be1463308346312f2409a56e24aa280c86162dc4", size = 11382027, upload-time = "2026-05-28T14:16:46.615Z" }, - { url = "https://files.pythonhosted.org/packages/1d/01/170921b49fcd2e8858825593f91cf7146c3e40a5c3e6df763e4bb0484dde/ruff-0.15.15-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a5015088452ca0081387063649ec67f06d3d1d6b8b936a1f836b5e9657ecd48c", size = 11366041, upload-time = "2026-05-28T14:16:26.247Z" }, - { url = "https://files.pythonhosted.org/packages/87/54/a7bad711d7de93254e15e06a4c375b89a03d18de45d3e5dcc86a4472fb1a/ruff-0.15.15-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f5294aab6356c81600fcdea3a62bb1b924dfd5e91767c12318d3f68f86af57cd", size = 10741795, upload-time = "2026-05-28T14:16:17.11Z" }, - { url = "https://files.pythonhosted.org/packages/c9/31/38c075963668f8b41c6914ee0f6f318727fbe30ab9145cb29e6df464c5fa/ruff-0.15.15-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:db5bd4d802415cca656dc1616070b725952d6ae95eb5d4831e49fbd94a38f75f", size = 10511117, upload-time = "2026-05-28T14:16:31.767Z" }, - { url = "https://files.pythonhosted.org/packages/9d/96/6ff689e1f7e375d1d97075eca022f74c2bab59554a432fe4d2e6f091986a/ruff-0.15.15-py3-none-musllinux_1_2_i686.whl", hash = "sha256:587a6278ed42059191c1a466e490bd7930fb50bd2e255398bc29616c895a61cb", size = 10994867, upload-time = "2026-05-28T14:16:35.149Z" }, - { url = "https://files.pythonhosted.org/packages/c3/c2/5dce0ab9f92a8d534fa62b9bf9caca3eddb8c1a81b616f5e195ada4f0d6e/ruff-0.15.15-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:df0c1c084f5f4be9812f61518a45c440d3c30d69ce4bf6c5270e66d38338f02a", size = 11482101, upload-time = "2026-05-28T14:16:49.598Z" }, + { url = "https://files.pythonhosted.org/packages/94/d9/2d5014f0253ba541d2061d9fa7193f48e941c8b21bb88a7ff9bbe0bd0596/ruff-0.15.20-py3-none-linux_armv6l.whl", hash = "sha256:00e188c53e499c3c1637f73c91dcf2fb56d576cab76ce1be50a27c4e80e37078", size = 10839665, upload-time = "2026-06-25T17:19:44.702Z" }, + { url = "https://files.pythonhosted.org/packages/c6/d3/ac1798ba64f670698867fcfc591d50e7e421bef137db564858f619a30fcf/ruff-0.15.20-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9ebd1fd9b9c95fc0bd7b2761aebec1f030013d2e193a2901b224af68fe47251b", size = 11208649, upload-time = "2026-06-25T17:19:48.787Z" }, + { url = "https://files.pythonhosted.org/packages/47/47/d3ac899991202095dfcf3d5176be4272642be3cf981a2f1a30f72a2afb95/ruff-0.15.20-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c5b16cdd67ca108185cd36dce98c576350c03b1660a751de725fb049193a0632", size = 10622638, upload-time = "2026-06-25T17:19:51.354Z" }, + { url = "https://files.pythonhosted.org/packages/33/13/4e043fe30aa94d4ff5213a9881fc296d12960f5971b234a5263fdc225312/ruff-0.15.20-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3413bb3c3d2ca6a8208f1f4809cd2dca3c6de6d0b491c0e70847672bde6e6efd", size = 10984227, upload-time = "2026-06-25T17:19:54.044Z" }, + { url = "https://files.pythonhosted.org/packages/76/e6/92e7bf40388bc5800073b96564f56264f7e48bfd1a498f5ced6ae6d5a769/ruff-0.15.20-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd7ec42b3bb3da066488db093308a69c4ac5ee6d2af333a86ba6e2eb2e7dd44b", size = 10622882, upload-time = "2026-06-25T17:19:57.037Z" }, + { url = "https://files.pythonhosted.org/packages/13/7a/43460be3f24495a3aa46d4b16873e2c4941b3b5f0b00cf88c03b7b94b339/ruff-0.15.20-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1a36ad0eb77fba9aabfb69ede54de6f376d04ac18ebea022847046d340a8267", size = 11474808, upload-time = "2026-06-25T17:20:00.357Z" }, + { url = "https://files.pythonhosted.org/packages/27/a0/f37077884873221c6b33b4ab49eb18f9f88e54a16a25a5bca59bef46dd66/ruff-0.15.20-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6df3b1e4610432f0386dba04d853b5f08cbbc903410c6fcc02f620f05aff53c", size = 12293094, upload-time = "2026-06-25T17:20:03.446Z" }, + { url = "https://files.pythonhosted.org/packages/a6/74/165545b60256a9704c21ac0ec4a0d07933b320812f9584836c9f4aca4292/ruff-0.15.20-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e89f198a1ea6ef0d727c1cf16088bc91a6cb0ab947dedc966715691647186eae", size = 11526176, upload-time = "2026-06-25T17:20:06.301Z" }, + { url = "https://files.pythonhosted.org/packages/86/b1/a976a136d40ade83ce743578399865f57001003a409acadc0ecbb3051082/ruff-0.15.20-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309809086c2acb67624950a3c8133e80f32d0d3e27106c0cd60ff26657c9f24b", size = 11520767, upload-time = "2026-06-25T17:20:09.191Z" }, + { url = "https://files.pythonhosted.org/packages/19/0f/f032696cb01c9b54c0263fa393474d7758f1cdc021a01b04e3cbc2500999/ruff-0.15.20-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2d2374caa2f2c2f9e2b7da0a50802cfb8b79f55a9b5e49379f564544fbf56487", size = 11500132, upload-time = "2026-06-25T17:20:13.602Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f4/51b1a14bc69e8c224b15dab9cce8e99b425e0455d462caa2b3c9be2b6a8e/ruff-0.15.20-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a1ed17b65293e0c2f22fc387bc13198a5de94bf4429589b0ff6946b0feaf21a3", size = 10943828, upload-time = "2026-06-25T17:20:16.635Z" }, + { url = "https://files.pythonhosted.org/packages/71/4b/fe267640783cd02bf6c5cc290b1df1051be2ec294c678b5c15fe19e52343/ruff-0.15.20-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f701305e66b38ea6c91882490eb73459796808e4c6362a1b765255e0cdcd4053", size = 10645418, upload-time = "2026-06-25T17:20:19.4Z" }, + { url = "https://files.pythonhosted.org/packages/b0/c0/a65aa4ec2f5e87a1df32dc3ec1fede434fe3dfd5cbcf3b503cafc676ab54/ruff-0.15.20-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5b9c0c367ad8e5d0d5b5b8537864c469a0a0e55417aadfbeca41fa61333be9f4", size = 11211770, upload-time = "2026-06-25T17:20:22.033Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a4/0caa331d954ae2723d729d351c989cb4ca8b6077d5c6c2cb6de75e98c041/ruff-0.15.20-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:01cc00dd58f0df339d0e902219dd53990ea99996a0344e5d9cc8d45d5307e460", size = 11618698, upload-time = "2026-06-25T17:20:25.259Z" }, ] [[package]] @@ -5743,7 +5743,7 @@ wheels = [ [[package]] name = "zensical" -version = "0.0.43" +version = "0.0.47" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, @@ -5755,18 +5755,18 @@ dependencies = [ { name = "pyyaml", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "tomli", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d4/85/ec45162e7824a8f879d887ef0774ee65926bf7d1064e2eebccc7eaee3378/zensical-0.0.43.tar.gz", hash = "sha256:dc2d3804ff562795c1024130e0c3ce79736467930729dda314f096d0e35b98c8", size = 3932396, upload-time = "2026-05-19T09:44:07.418Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/99/53171a5211359a95b0d6caad9a1c960b002a4bf82eacdd3cdbde225db25f/zensical-0.0.47.tar.gz", hash = "sha256:324f783b22cd0deed0d0f3b69e28d5380b47238a1ef0f25913b88014af2bade2", size = 3976587, upload-time = "2026-07-05T15:51:25.488Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/55/c2/55e0709607ae41c266987c3b91a1a9702b37fbbef0d07eddfe5e25c2d823/zensical-0.0.43-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:17c335362b6bac3a50178181694a964f6d9f0c516fc532129ba5a0a5c4103fb6", size = 12706531, upload-time = "2026-05-19T09:43:32.729Z" }, - { url = "https://files.pythonhosted.org/packages/2c/64/ce8627bc5ea30556162b29b041fe97d6a6aef2a87b51f12def628e4fa608/zensical-0.0.43-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:b8fe97f185194215f6193af45a17d2b30ebd72c8113e3650f2d7d6767b9c2206", size = 12563012, upload-time = "2026-05-19T09:43:35.962Z" }, - { url = "https://files.pythonhosted.org/packages/66/d1/533bc9454f0e06b3d9d8bd2e7ac405308c3d4dee6572acab98f0ed6d1c07/zensical-0.0.43-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c4c85978c765b3e7f347e8102dfe1373d4bbe4229d7008b6bdbf352f1fbcd7f", size = 12947599, upload-time = "2026-05-19T09:43:38.754Z" }, - { url = "https://files.pythonhosted.org/packages/75/a0/94f47d6fb592997be7ab9526938c929f0199adf2637c3c2b2b9b2101b28e/zensical-0.0.43-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:90d7c06ffd07b2bdf78bef041d541baba8a3ea51fd2dd84dbdbc5b0229076524", size = 12904911, upload-time = "2026-05-19T09:43:42.434Z" }, - { url = "https://files.pythonhosted.org/packages/96/fb/1db3ad9a86ff772f74a8bc60ad5b447aa02a158e70f94adacf50bdd5c40f/zensical-0.0.43-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:60022f4a6b95e46ec0023f51052fcd491743b3ebd08c0066b22a5cf1e741fecd", size = 13269386, upload-time = "2026-05-19T09:43:45.387Z" }, - { url = "https://files.pythonhosted.org/packages/31/ee/b24fd0f94885519d851c35615b086d069a1077b0198021a56755395a4633/zensical-0.0.43-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e278eb948a0b7545d50609d713c7c27e366dade4523ff73a311a5d5f136518a", size = 12999364, upload-time = "2026-05-19T09:43:48.549Z" }, - { url = "https://files.pythonhosted.org/packages/28/78/401ccd7afd9d2690f81b5319b7f1eed05108154ce20e4207053914518c1c/zensical-0.0.43-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b85e5ab99fbda13823e67c43a4be6e5ebda6600602969c6575e143f20ac203fd", size = 13124392, upload-time = "2026-05-19T09:43:50.965Z" }, - { url = "https://files.pythonhosted.org/packages/98/b3/9af6eba5826b0ef143fc8308bd1e219e221441e307a958e39f824ba9ab53/zensical-0.0.43-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:751385accc92cccfd4560dabed7c423870686ef6ede244a67e5c96286af25e8f", size = 13177538, upload-time = "2026-05-19T09:43:53.964Z" }, - { url = "https://files.pythonhosted.org/packages/be/6b/cd090bd6659d32692487206469988ee84d41aa6de4cdf9e380f847da90e2/zensical-0.0.43-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:dd3ff5bfa6e65cf3d2550dc639c3da2a3bfa11087b83d57e06623c4c1607d583", size = 13327086, upload-time = "2026-05-19T09:43:56.8Z" }, - { url = "https://files.pythonhosted.org/packages/79/5b/ac2555354b5a53cb9c2c942811905c47be0b9f5603d3c1328ee8564333eb/zensical-0.0.43-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:85055a115b12f49c6ab194dcf04f966fc06b690ed6a8ddddd819929fc5f340e6", size = 13284645, upload-time = "2026-05-19T09:43:59.329Z" }, + { url = "https://files.pythonhosted.org/packages/07/7c/5848aad6a5b566f5a3cebc77ab787793daec622b79295de243da7b8efae6/zensical-0.0.47-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:4162fb8b62f38e6d9b75688c1fb87e18a1cffef5eee51d2c18b79334b548e973", size = 12789282, upload-time = "2026-07-05T15:50:45.118Z" }, + { url = "https://files.pythonhosted.org/packages/ce/08/c2a056ae22eba7063985cc89554ab8e54efb11af8e26f6d606e5bd300ae8/zensical-0.0.47-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:cdc2d84f38da809a28402eda5f2b6dbb150e14427f296c5b521e0dfc6a2e8a39", size = 12661193, upload-time = "2026-07-05T15:50:49.138Z" }, + { url = "https://files.pythonhosted.org/packages/dc/2b/30dc3262e99bc72e9a6529487fbfca58cf4f81cebfac59ef8e8d757d90eb/zensical-0.0.47-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97ed2b21aba5f788fc39d1597d00938d602b4d2724ed599a1dab7548fe4f0025", size = 13044347, upload-time = "2026-07-05T15:50:52.429Z" }, + { url = "https://files.pythonhosted.org/packages/4d/80/296ff21b686cda47c4a3f94c35bf62472291501c34e4f06dfd107cb237da/zensical-0.0.47-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6f6b2de477c45284201e92301f997415f45f78493bd20f479ea9a1c86bbbbcca", size = 13006494, upload-time = "2026-07-05T15:50:55.376Z" }, + { url = "https://files.pythonhosted.org/packages/2d/4e/5aeba02363db89c625cd41c76d2a6e40b07d6a75d869d970ace7accd2bfa/zensical-0.0.47-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ee29ff819372eaab02ca0f14ac82e804332d898c57c56ffd4d89674f3e5ff71", size = 13379253, upload-time = "2026-07-05T15:50:58.743Z" }, + { url = "https://files.pythonhosted.org/packages/fd/dc/e72a1449544aeffa3dbe878c6340bcec98ba4eebabe7a592414064b0ae8d/zensical-0.0.47-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bd94937c48a2e42b5b65b32c5075849937f23cebccaf250d249efa27266e0be", size = 13103356, upload-time = "2026-07-05T15:51:02.247Z" }, + { url = "https://files.pythonhosted.org/packages/48/eb/7fb956915cc59ee9f2ddf36ec5b16e8e858823217611e1d766816a661651/zensical-0.0.47-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4702605b991bece11494a9bb318d5ba7229f00e5adcc9e6010acd58e9719686b", size = 13220897, upload-time = "2026-07-05T15:51:05.919Z" }, + { url = "https://files.pythonhosted.org/packages/57/6b/944954d60bf1d61de2a7fa2732d0fb2d5deee64567db6088cdd2b5f76973/zensical-0.0.47-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:77f08ffcc3da9ca2f972330e501927aa7e8e445bfa7b758107edc645acda266e", size = 13280476, upload-time = "2026-07-05T15:51:09.352Z" }, + { url = "https://files.pythonhosted.org/packages/ce/80/4aece9b99eb5809b04fc6577fc50e877c998917293dfd58b5b229616b92b/zensical-0.0.47-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:319cf370ecc6d87da69c935c5acd6e1959dd48954766e9f954319bdb0bec5d36", size = 13439392, upload-time = "2026-07-05T15:51:12.564Z" }, + { url = "https://files.pythonhosted.org/packages/41/10/5cbffe680605b4fa7c0d6326f07a6adc86854f8b9d61bb1b29bb482d40eb/zensical-0.0.47-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:59656bf604a8b03eede4ce1a847640bab1129ab86dec2e39e5bd4b808b1802d2", size = 13386534, upload-time = "2026-07-05T15:51:15.892Z" }, ] [[package]] From 0addb448f5b9fc3579b4285f779871ec2823e7a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 23:52:20 +0000 Subject: [PATCH 10/14] Chore(deps): Bump the pre-commit-dependencies group across 1 directory with 4 updates (#13137) --- .pre-commit-config.yaml | 8 +- docs/changelog.md | 143 ++++++++++++++++++ .../pdf-viewer/pdf-viewer.component.spec.ts | 3 +- src-ui/src/app/utils/text-search.ts | 7 +- 4 files changed, 149 insertions(+), 12 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 56495186f..d50f8cebb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -38,7 +38,7 @@ repos: - json # See https://github.com/prettier/prettier/issues/15742 for the fork reason - repo: https://github.com/rbubley/mirrors-prettier - rev: 'v3.8.4' + rev: 'v3.9.4' hooks: - id: prettier types_or: @@ -46,16 +46,16 @@ repos: - ts - markdown additional_dependencies: - - prettier@3.8.3 + - prettier@3.9.4 - 'prettier-plugin-organize-imports@4.3.0' # Python hooks - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.17 + rev: v0.15.20 hooks: - id: ruff-check - id: ruff-format - repo: https://github.com/tox-dev/pyproject-fmt - rev: "v2.24.1" + rev: "v2.25.1" hooks: - id: pyproject-fmt additional_dependencies: [tomli] diff --git a/docs/changelog.md b/docs/changelog.md index 8ec847ae5..b402b4586 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -22,6 +22,7 @@ - Fix: correctly scope mail account enumeration [@shamoon](https://github.com/shamoon) ([#12636](https://github.com/paperless-ngx/paperless-ngx/pull/12636)) - Fix: prevent intermediate change event when CustomFieldQueryAtom operator changes type [@ggouzi](https://github.com/ggouzi) ([#12597](https://github.com/paperless-ngx/paperless-ngx/pull/12597)) - Fix: reject invalid requests to API notes endpoint [@ggouzi](https://github.com/ggouzi) ([#12582](https://github.com/paperless-ngx/paperless-ngx/pull/12582)) + ## paperless-ngx 2.20.14 @@ -48,6 +49,7 @@ - Fix: add fallback ordering for documents by id after created [@shamoon](https://github.com/shamoon) ([#12440](https://github.com/paperless-ngx/paperless-ngx/pull/12440)) - Fixhancement: default mail-created correspondent matching to exact [@shamoon](https://github.com/shamoon) ([#12414](https://github.com/paperless-ngx/paperless-ngx/pull/12414)) - Fix: validate date CF value in serializer [@shamoon](https://github.com/shamoon) ([#12410](https://github.com/paperless-ngx/paperless-ngx/pull/12410)) + ## paperless-ngx 2.20.13 @@ -84,6 +86,7 @@ - Fix: remove pagination from document notes api spec [@shamoon](https://github.com/shamoon) ([#12388](https://github.com/paperless-ngx/paperless-ngx/pull/12388)) - Fix: fix file button hover color in dark mode [@shamoon](https://github.com/shamoon) ([#12367](https://github.com/paperless-ngx/paperless-ngx/pull/12367)) - Fixhancement: only offer basic auth for appropriate requests [@shamoon](https://github.com/shamoon) ([#12362](https://github.com/paperless-ngx/paperless-ngx/pull/12362)) + ## paperless-ngx 2.20.11 @@ -108,6 +111,7 @@ - Fixhancement: clear descendant selections in dropdown when parent toggled [@shamoon](https://github.com/shamoon) ([#12326](https://github.com/paperless-ngx/paperless-ngx/pull/12326)) - Fix: prevent wrapping with larger amounts of tags on small cards, reset moreTags setting to correct count [@shamoon](https://github.com/shamoon) ([#12302](https://github.com/paperless-ngx/paperless-ngx/pull/12302)) - Fix: prevent stale db filename during workflow actions [@shamoon](https://github.com/shamoon) ([#12289](https://github.com/paperless-ngx/paperless-ngx/pull/12289)) + ## paperless-ngx 2.20.10 @@ -126,6 +130,7 @@ - Fix: support string coercion in filepath jinja templates [@shamoon](https://github.com/shamoon) ([#12244](https://github.com/paperless-ngx/paperless-ngx/pull/12244)) - Fix: apply ordering after annotating tag document count [@shamoon](https://github.com/shamoon) ([#12238](https://github.com/paperless-ngx/paperless-ngx/pull/12238)) - Fix: enforce path limit for db filename fields [@shamoon](https://github.com/shamoon) ([#12235](https://github.com/paperless-ngx/paperless-ngx/pull/12235)) + ## paperless-ngx 2.20.9 @@ -146,6 +151,7 @@ - Fixhancement: config option reset [@shamoon](https://github.com/shamoon) ([#12176](https://github.com/paperless-ngx/paperless-ngx/pull/12176)) - Fix: correct page count by separating display vs collection sizes for tags [@shamoon](https://github.com/shamoon) ([#12170](https://github.com/paperless-ngx/paperless-ngx/pull/12170)) + ## paperless-ngx 2.20.8 @@ -174,6 +180,7 @@ - Performance fix: use subqueries to improve object retrieval in large installs [@shamoon](https://github.com/shamoon) ([#11950](https://github.com/paperless-ngx/paperless-ngx/pull/11950)) - Fix: correct user dropdown button icon styling [@shamoon](https://github.com/shamoon) ([#12092](https://github.com/paperless-ngx/paperless-ngx/issues/12092)) - Fix: fix broken docker create_classifier command in 2.20.6 [@shamoon](https://github.com/shamoon) ([#11965](https://github.com/paperless-ngx/paperless-ngx/issues/11965)) + ## paperless-ngx 2.20.6 @@ -197,6 +204,7 @@ - Fix: extract all ids for nested tags [@shamoon](https://github.com/shamoon) ([#11888](https://github.com/paperless-ngx/paperless-ngx/pull/11888)) - Fixhancement: change date calculation for 'this year' to include future documents [@shamoon](https://github.com/shamoon) ([#11884](https://github.com/paperless-ngx/paperless-ngx/pull/11884)) - Fix: use correct field id for overrides [@shamoon](https://github.com/shamoon) ([#11869](https://github.com/paperless-ngx/paperless-ngx/pull/11869)) + ## paperless-ngx 2.20.5 @@ -213,6 +221,7 @@ - Fix: ensure horizontal scroll for long tag names in list, wrap tags without parent [@shamoon](https://github.com/shamoon) ([#11811](https://github.com/paperless-ngx/paperless-ngx/pull/11811)) - Fix: use explicit order field for workflow actions [@shamoon](https://github.com/shamoon) [@stumpylog](https://github.com/stumpylog) ([#11781](https://github.com/paperless-ngx/paperless-ngx/pull/11781)) + ## paperless-ngx 2.20.4 @@ -239,6 +248,7 @@ - Fix: validate cf integer values within PostgreSQL range [@shamoon](https://github.com/shamoon) ([#11666](https://github.com/paperless-ngx/paperless-ngx/pull/11666)) - Fixhancement: add error handling and retry when opening index [@shamoon](https://github.com/shamoon) ([#11731](https://github.com/paperless-ngx/paperless-ngx/pull/11731)) - Fix: fix recurring workflow to respect latest run time [@shamoon](https://github.com/shamoon) ([#11735](https://github.com/paperless-ngx/paperless-ngx/pull/11735)) + ## paperless-ngx 2.20.3 @@ -279,6 +289,7 @@ - Chore(deps-dev): Bump @playwright/test from 1.56.1 to 1.57.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#11514](https://github.com/paperless-ngx/paperless-ngx/pull/11514)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#11512](https://github.com/paperless-ngx/paperless-ngx/pull/11512)) - docker(deps): bump astral-sh/uv from 0.9.14-python3.12-trixie-slim to 0.9.15-python3.12-trixie-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#11533](https://github.com/paperless-ngx/paperless-ngx/pull/11533)) + ### All App Changes @@ -298,6 +309,7 @@ - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#11512](https://github.com/paperless-ngx/paperless-ngx/pull/11512)) - Tweakhancement: dim inactive users in users-groups list [@shamoon](https://github.com/shamoon) ([#11537](https://github.com/paperless-ngx/paperless-ngx/pull/11537)) - Chore: add some output of social login errors [@shamoon](https://github.com/shamoon) ([#11527](https://github.com/paperless-ngx/paperless-ngx/pull/11527)) + ## paperless-ngx 2.20.1 @@ -323,6 +335,7 @@ - Fix: change async handling of select custom field updates [@shamoon](https://github.com/shamoon) ([#11490](https://github.com/paperless-ngx/paperless-ngx/pull/11490)) - Chore(deps): Bump @angular/common from 20.3.12 to 20.3.14 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#11481](https://github.com/paperless-ngx/paperless-ngx/pull/11481)) - Fix: handle allauth groups location breaking change [@shamoon](https://github.com/shamoon) ([#11471](https://github.com/paperless-ngx/paperless-ngx/pull/11471)) + ## paperless-ngx 2.20.0 @@ -372,6 +385,7 @@ - Chore(deps): Bump django-filter from 25.1 to 25.2 @[dependabot[bot]](https://github.com/apps/dependabot) ([#11020](https://github.com/paperless-ngx/paperless-ngx/pull/11020)) - Chore(deps): Update django-allauth[mfa,socialaccount] requirement from ~=65.4.0 to ~=65.12.1 @[dependabot[bot]](https://github.com/apps/dependabot) ([#11198](https://github.com/paperless-ngx/paperless-ngx/pull/11198)) - docker(deps): bump astral-sh/uv from 0.9.9-python3.12-bookworm-slim to 0.9.10-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#11394](https://github.com/paperless-ngx/paperless-ngx/pull/11394)) + ### All App Changes @@ -398,6 +412,7 @@ - Chore(deps): Bump django-filter from 25.1 to 25.2 @[dependabot[bot]](https://github.com/apps/dependabot) ([#11020](https://github.com/paperless-ngx/paperless-ngx/pull/11020)) - Chore(deps): Update django-allauth[mfa,socialaccount] requirement from ~=65.4.0 to ~=65.12.1 @[dependabot[bot]](https://github.com/apps/dependabot) ([#11198](https://github.com/paperless-ngx/paperless-ngx/pull/11198)) - Fix: support for custom field ordering w advanced search [@shamoon](https://github.com/shamoon) ([#11383](https://github.com/paperless-ngx/paperless-ngx/pull/11383)) + ## paperless-ngx 2.19.6 @@ -428,6 +443,7 @@ - Fix: only cache remote version data for version checking [@shamoon](https://github.com/shamoon) ([#11320](https://github.com/paperless-ngx/paperless-ngx/pull/11320)) - Fix: include replace none logic in storage path preview, improve jinja conditionals for empty metadata [@shamoon](https://github.com/shamoon) ([#11315](https://github.com/paperless-ngx/paperless-ngx/pull/11315)) - Chore: include password validation on user edit [@shamoon](https://github.com/shamoon) ([#11308](https://github.com/paperless-ngx/paperless-ngx/pull/11308)) + ## paperless-ngx 2.19.5 @@ -478,6 +494,7 @@ - Performance: use virtual scroll container and log level parsing for logs view [@MickLesk](https://github.com/MickLesk) ([#11233](https://github.com/paperless-ngx/paperless-ngx/pull/11233)) - Chore: cache Github version check for 15 minutes [@shamoon](https://github.com/shamoon) ([#11235](https://github.com/paperless-ngx/paperless-ngx/pull/11235)) - Fix: de-deduplicate children in tag list when filtering [@shamoon](https://github.com/shamoon) ([#11229](https://github.com/paperless-ngx/paperless-ngx/pull/11229)) + ## paperless-ngx 2.19.3 @@ -515,6 +532,7 @@ - Fix: support ConsumableDocument in email attachments [@shamoon](https://github.com/shamoon) ([#11196](https://github.com/paperless-ngx/paperless-ngx/pull/11196)) - Fix: add missing import for ConfirmButtonComponent in user-edit-dialog [@shamoon](https://github.com/shamoon) ([#11167](https://github.com/paperless-ngx/paperless-ngx/pull/11167)) - Fix: resolve migration warning in 2.19.2 [@shamoon](https://github.com/shamoon) ([#11157](https://github.com/paperless-ngx/paperless-ngx/pull/11157)) + ## paperless-ngx 2.19.2 @@ -536,6 +554,7 @@ - Fix: Remove edit requirement for bulk email, show based on setting [@shamoon](https://github.com/shamoon) ([#11149](https://github.com/paperless-ngx/paperless-ngx/pull/11149)) - Fix: handle undefined IDs in getOriginalObject [@shamoon](https://github.com/shamoon) ([#11147](https://github.com/paperless-ngx/paperless-ngx/pull/11147)) - Fixhancement: display loading status for tags instead of 'Private' [@shamoon](https://github.com/shamoon) ([#11140](https://github.com/paperless-ngx/paperless-ngx/pull/11140)) + ## paperless-ngx 2.19.1 @@ -560,6 +579,7 @@ - Fix: move hierarchical order logic in dropdown sorting [@shamoon](https://github.com/shamoon) ([#11128](https://github.com/paperless-ngx/paperless-ngx/pull/11128)) - Fix: use original object for children in tag list [@shamoon](https://github.com/shamoon) ([#11127](https://github.com/paperless-ngx/paperless-ngx/pull/11127)) - Fix: dont display or fetch users or groups with insufficient perms [@shamoon](https://github.com/shamoon) ([#11111](https://github.com/paperless-ngx/paperless-ngx/pull/11111)) + ## paperless-ngx 2.19.0 @@ -647,6 +667,7 @@ - docker-compose(deps): Bump gotenberg/gotenberg from 8.22 to 8.23 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#10812](https://github.com/paperless-ngx/paperless-ngx/pull/10812)) - Chore(deps): Bump the small-changes group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10821](https://github.com/paperless-ngx/paperless-ngx/pull/10821)) - docker(deps): Bump astral-sh/uv from 0.8.13-python3.12-bookworm-slim to 0.8.15-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10810](https://github.com/paperless-ngx/paperless-ngx/pull/10810)) + ### All App Changes @@ -705,6 +726,7 @@ - Enhancement: Limit excessively long content length when computing suggestions [@Merinorus](https://github.com/Merinorus) ([#10656](https://github.com/paperless-ngx/paperless-ngx/pull/10656)) - Chore(deps): Bump the small-changes group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10821](https://github.com/paperless-ngx/paperless-ngx/pull/10821)) - Fix: set match value for correspondents created by mail rule [@shamoon](https://github.com/shamoon) ([#10820](https://github.com/paperless-ngx/paperless-ngx/pull/10820)) + ## paperless-ngx 2.18.4 @@ -732,6 +754,7 @@ - Chore(deps-dev): Bump webpack from 5.101.0 to 5.101.3 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10751](https://github.com/paperless-ngx/paperless-ngx/pull/10751)) - Chore(deps-dev): Bump @types/node from 24.1.0 to 24.3.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10750](https://github.com/paperless-ngx/paperless-ngx/pull/10750)) - Chore(deps): Bump the actions group with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10757](https://github.com/paperless-ngx/paperless-ngx/pull/10757)) + ### All App Changes @@ -751,6 +774,7 @@ - Chore(deps-dev): Bump @types/node from 24.1.0 to 24.3.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10750](https://github.com/paperless-ngx/paperless-ngx/pull/10750)) - Chore: switch from os.path to pathlib.Path @gothicVI ([#10539](https://github.com/paperless-ngx/paperless-ngx/pull/10539)) - Performance fix: add paging for custom field select options @shamoon ([#10755](https://github.com/paperless-ngx/paperless-ngx/pull/10755)) + ## paperless-ngx 2.18.3 @@ -776,6 +800,7 @@ - docker-compose(deps): Bump library/mariadb from 11 to 12 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#10621](https://github.com/paperless-ngx/paperless-ngx/pull/10621)) - docker-compose(deps): Bump gotenberg/gotenberg from 8.20 to 8.22 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#10687](https://github.com/paperless-ngx/paperless-ngx/pull/10687)) - docker(deps): Bump astral-sh/uv from 0.8.8-python3.12-bookworm-slim to 0.8.13-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10685](https://github.com/paperless-ngx/paperless-ngx/pull/10685)) + ### All App Changes @@ -794,6 +819,7 @@ - Fix: include pagination array items for valid openapi schema [@shamoon](https://github.com/shamoon) ([#10682](https://github.com/paperless-ngx/paperless-ngx/pull/10682)) - Fix: prevent scroll for view name in sidebar [@shamoon](https://github.com/shamoon) ([#10676](https://github.com/paperless-ngx/paperless-ngx/pull/10676)) - Tweak: center document close button in app frame [@shamoon](https://github.com/shamoon) ([#10661](https://github.com/paperless-ngx/paperless-ngx/pull/10661)) + ## paperless-ngx 2.18.2 @@ -821,6 +847,7 @@ - Fix: increase legibility of date filter clear button in light mode [@shamoon](https://github.com/shamoon) ([#10649](https://github.com/paperless-ngx/paperless-ngx/pull/10649)) - Fix: ensure saved view count is visible with long names [@shamoon](https://github.com/shamoon) ([#10616](https://github.com/paperless-ngx/paperless-ngx/pull/10616)) - Chore(deps): Bump the development group across 1 directory with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10578](https://github.com/paperless-ngx/paperless-ngx/pull/10578)) + ## paperless-ngx 2.18.1 @@ -847,6 +874,7 @@ - Tweak: fix some button consistency [@shamoon](https://github.com/shamoon) ([#10593](https://github.com/paperless-ngx/paperless-ngx/pull/10593)) - Development: restore version tag display [@shamoon](https://github.com/shamoon) ([#10592](https://github.com/paperless-ngx/paperless-ngx/pull/10592)) - Fixhancement: mobile layout improvements for pdf editor [@shamoon](https://github.com/shamoon) ([#10588](https://github.com/paperless-ngx/paperless-ngx/pull/10588)) + ## paperless-ngx 2.18.0 @@ -930,6 +958,7 @@ - Chore(deps-dev): Bump @playwright/test from 1.51.1 to 1.53.2 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10307](https://github.com/paperless-ngx/paperless-ngx/pull/10307)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 13 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10303](https://github.com/paperless-ngx/paperless-ngx/pull/10303)) - Chore: update to Angular 20 [@shamoon](https://github.com/shamoon) ([#10273](https://github.com/paperless-ngx/paperless-ngx/pull/10273)) + ### All App Changes @@ -981,6 +1010,7 @@ - Fix: reset search query for preview on reset filter [@shamoon](https://github.com/shamoon) ([#10279](https://github.com/paperless-ngx/paperless-ngx/pull/10279)) - Chore: update to Angular 20 [@shamoon](https://github.com/shamoon) ([#10273](https://github.com/paperless-ngx/paperless-ngx/pull/10273)) - Chore: reject absurd max age values [@shamoon](https://github.com/shamoon) ([#10243](https://github.com/paperless-ngx/paperless-ngx/pull/10243)) + ## paperless-ngx 2.17.1 @@ -1040,6 +1070,7 @@ - Fix: correct api schema for mail_account process [@shamoon](https://github.com/shamoon) ([#10157](https://github.com/paperless-ngx/paperless-ngx/pull/10157)) - Fix: correct api schema for next_asn [@shamoon](https://github.com/shamoon) ([#10151](https://github.com/paperless-ngx/paperless-ngx/pull/10151)) - Fix: fix email and notes endpoints api spec [@shamoon](https://github.com/shamoon) ([#10148](https://github.com/paperless-ngx/paperless-ngx/pull/10148)) + ## paperless-ngx 2.16.3 @@ -1073,6 +1104,7 @@ - Chore(deps): Bump zone.js from 0.15.0 to 0.15.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10088](https://github.com/paperless-ngx/paperless-ngx/pull/10088)) - docker(deps): bump astral-sh/uv from 0.7.8-python3.12-bookworm-slim to 0.7.9-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10084](https://github.com/paperless-ngx/paperless-ngx/pull/10084)) - docker(deps): Bump astral-sh/uv from 0.6.16-python3.12-bookworm-slim to 0.7.8-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10056](https://github.com/paperless-ngx/paperless-ngx/pull/10056)) + ### All App Changes @@ -1096,6 +1128,7 @@ - Enhancement: include DOCUMENT_TYPE to post consume scripts [@matthesrieke](https://github.com/matthesrieke) ([#9977](https://github.com/paperless-ngx/paperless-ngx/pull/9977)) - Fix: Add exception to in [@Freilichtbuehne](https://github.com/Freilichtbuehne) ([#10070](https://github.com/paperless-ngx/paperless-ngx/pull/10070)) - Fix: include base href when opening global search result in new window [@shamoon](https://github.com/shamoon) ([#10066](https://github.com/paperless-ngx/paperless-ngx/pull/10066)) + ## paperless-ngx 2.16.2 @@ -1121,6 +1154,7 @@ - Fix: created date fixes in v2.16 [@shamoon](https://github.com/shamoon) ([#10026](https://github.com/paperless-ngx/paperless-ngx/pull/10026)) - Fix: mark fields for created objects as dirty [@shamoon](https://github.com/shamoon) ([#10022](https://github.com/paperless-ngx/paperless-ngx/pull/10022)) - Chore: warn users about removal of postgres v13 support [@shamoon](https://github.com/shamoon) ([#9980](https://github.com/paperless-ngx/paperless-ngx/pull/9980)) + ## paperless-ngx 2.16.1 @@ -1190,6 +1224,7 @@ - Chore(deps): Bump the small-changes group across 1 directory with 6 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9764](https://github.com/paperless-ngx/paperless-ngx/pull/9764)) - Chore(deps): Bump the django group across 1 directory with 6 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9753](https://github.com/paperless-ngx/paperless-ngx/pull/9753)) - docker(deps): bump astral-sh/uv from 0.6.13-python3.12-bookworm-slim to 0.6.14-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#9656](https://github.com/paperless-ngx/paperless-ngx/pull/9656)) + ### All App Changes @@ -1226,6 +1261,7 @@ - Fix: fix zoom increase/decrease buttons in FF [@shamoon](https://github.com/shamoon) ([#9761](https://github.com/paperless-ngx/paperless-ngx/pull/9761)) - Chore: switch from os.path to pathlib.Path [@gothicVI](https://github.com/gothicVI) ([#9339](https://github.com/paperless-ngx/paperless-ngx/pull/9339)) - Fix: include subpath in drf-spectacular settings if set [@shamoon](https://github.com/shamoon) ([#9738](https://github.com/paperless-ngx/paperless-ngx/pull/9738)) + ## paperless-ngx 2.15.3 @@ -1248,6 +1284,7 @@ - Fix: fix breaking api change to document notes user field [@shamoon](https://github.com/shamoon) ([#9714](https://github.com/paperless-ngx/paperless-ngx/pull/9714)) - Fix: another doc link fix [@shamoon](https://github.com/shamoon) ([#9700](https://github.com/paperless-ngx/paperless-ngx/pull/9700)) - Fix: correctly handle dict data with webhook [@shamoon](https://github.com/shamoon) ([#9674](https://github.com/paperless-ngx/paperless-ngx/pull/9674)) + ## paperless-ngx 2.15.2 @@ -1271,6 +1308,7 @@ - Fix: Adds better handling during folder checking/creation/permissions for non-root [@stumpylog](https://github.com/stumpylog) ([#9616](https://github.com/paperless-ngx/paperless-ngx/pull/9616)) - Fix: Explicitly set the HOME environment to resolve issues running as root with database certificates [@stumpylog](https://github.com/stumpylog) ([#9643](https://github.com/paperless-ngx/paperless-ngx/pull/9643)) - Fix: prevent self-linking when bulk edit doc link [@shamoon](https://github.com/shamoon) ([#9629](https://github.com/paperless-ngx/paperless-ngx/pull/9629)) + ## paperless-ngx 2.15.1 @@ -1300,6 +1338,7 @@ - Fix: Adds a warning to the user if their secret file includes a trailing newline [@stumpylog](https://github.com/stumpylog) ([#9601](https://github.com/paperless-ngx/paperless-ngx/pull/9601)) - Fix: correct download filename in 2.15.0 [@shamoon](https://github.com/shamoon) ([#9599](https://github.com/paperless-ngx/paperless-ngx/pull/9599)) - Fix: dont exclude matching check for scheduled workflows [@shamoon](https://github.com/shamoon) ([#9594](https://github.com/paperless-ngx/paperless-ngx/pull/9594)) + ## paperless-ngx 2.15.0 @@ -1423,6 +1462,7 @@ - Chore(deps-dev): Bump @types/node from 22.8.6 to 22.13.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#8989](https://github.com/paperless-ngx/paperless-ngx/pull/8989)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#8988](https://github.com/paperless-ngx/paperless-ngx/pull/8988)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 23 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#8986](https://github.com/paperless-ngx/paperless-ngx/pull/8986)) + ### All App Changes @@ -1539,6 +1579,7 @@ - Chore(deps-dev): Bump @types/node from 22.8.6 to 22.13.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#8989](https://github.com/paperless-ngx/paperless-ngx/pull/8989)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#8988](https://github.com/paperless-ngx/paperless-ngx/pull/8988)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 23 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#8986](https://github.com/paperless-ngx/paperless-ngx/pull/8986)) + ## paperless-ngx 2.14.7 @@ -1562,6 +1603,7 @@ - Enhancement: require totp code for obtain auth token by [@shamoon](https://github.com/shamoon) [#8936](https://github.com/paperless-ngx/paperless-ngx/pull/8936) - Fix: reflect doc links in bulk modify custom fields by [@shamoon](https://github.com/shamoon) [#8962](https://github.com/paperless-ngx/paperless-ngx/pull/8962) - Fix: also ensure symmetric doc link removal on bulk edit by [@shamoon](https://github.com/shamoon) [#8963](https://github.com/paperless-ngx/paperless-ngx/pull/8963) + ## paperless-ngx 2.14.6 @@ -1592,6 +1634,7 @@ - Change: Revert dropdown sorting by doc count [@shamoon](https://github.com/shamoon) ([#8887](https://github.com/paperless-ngx/paperless-ngx/pull/8887)) - Fixhancement: restore search highlighting and add for built-in viewer [@shamoon](https://github.com/shamoon) ([#8885](https://github.com/paperless-ngx/paperless-ngx/pull/8885)) - Fix: resolve cpu usage due to incorrect interval use [@shamoon](https://github.com/shamoon) ([#8884](https://github.com/paperless-ngx/paperless-ngx/pull/8884)) + ## paperless-ngx 2.14.5 @@ -1626,6 +1669,7 @@ - Fix: Enforce classifier training ordering to prevent extra training [@stumpylog](https://github.com/stumpylog) ([#8822](https://github.com/paperless-ngx/paperless-ngx/pull/8822)) - Fix: import router module to not found component [@shamoon](https://github.com/shamoon) ([#8821](https://github.com/paperless-ngx/paperless-ngx/pull/8821)) - Fix: better reflect some mail account / rule permissions in UI [@shamoon](https://github.com/shamoon) ([#8812](https://github.com/paperless-ngx/paperless-ngx/pull/8812)) + ## paperless-ngx 2.14.4 @@ -1651,6 +1695,7 @@ - Fix: Include email and webhook objects in the export [@stumpylog](https://github.com/stumpylog) ([#8790](https://github.com/paperless-ngx/paperless-ngx/pull/8790)) - Fix: use MIMEBase for email attachments [@shamoon](https://github.com/shamoon) ([#8762](https://github.com/paperless-ngx/paperless-ngx/pull/8762)) - Fix: handle page out of range in mgmt lists after delete [@shamoon](https://github.com/shamoon) ([#8771](https://github.com/paperless-ngx/paperless-ngx/pull/8771)) + ## paperless-ngx 2.14.3 @@ -1672,6 +1717,7 @@ - Fix: import forms modules for entries component [@shamoon](https://github.com/shamoon) ([#8752](https://github.com/paperless-ngx/paperless-ngx/pull/8752)) - Fix: fix email/wh actions on consume started [@shamoon](https://github.com/shamoon) ([#8750](https://github.com/paperless-ngx/paperless-ngx/pull/8750)) - Fix: import date picker module in cf query dropdown [@shamoon](https://github.com/shamoon) ([#8749](https://github.com/paperless-ngx/paperless-ngx/pull/8749)) + ## paperless-ngx 2.14.2 @@ -1702,6 +1748,7 @@ - Fix: include tooltip module for custom fields display [@shamoon](https://github.com/shamoon) ([#8739](https://github.com/paperless-ngx/paperless-ngx/pull/8739)) - Fix: remove id of webhook/email actions on copy [@shamoon](https://github.com/shamoon) ([#8729](https://github.com/paperless-ngx/paperless-ngx/pull/8729)) - Fix: import dnd module for merge confirm dialog [@shamoon](https://github.com/shamoon) ([#8727](https://github.com/paperless-ngx/paperless-ngx/pull/8727)) + ## paperless-ngx 2.14.1 @@ -1722,6 +1769,7 @@ - Fix: include tag component in list view [@shamoon](https://github.com/shamoon) ([#8706](https://github.com/paperless-ngx/paperless-ngx/pull/8706)) - Fix: use unmodified original for checksum if exists [@shamoon](https://github.com/shamoon) ([#8693](https://github.com/paperless-ngx/paperless-ngx/pull/8693)) - Fix: complete load with native PDF viewer [@shamoon](https://github.com/shamoon) ([#8699](https://github.com/paperless-ngx/paperless-ngx/pull/8699)) + ## paperless-ngx 2.14.0 @@ -1789,6 +1837,7 @@ - Chore(deps): Bump the small-changes group across 1 directory with 7 updates [@dependabot](https://github.com/dependabot) ([#8399](https://github.com/paperless-ngx/paperless-ngx/pull/8399)) - Chore(deps): Bump tornado from 6.4.1 to 6.4.2 [@dependabot](https://github.com/dependabot) ([#8336](https://github.com/paperless-ngx/paperless-ngx/pull/8336)) - Chore(deps): Bump watchdog from 5.0.3 to 6.0.0 in the major-versions group [@dependabot](https://github.com/dependabot) ([#8257](https://github.com/paperless-ngx/paperless-ngx/pull/8257)) + ### All App Changes @@ -1861,6 +1910,7 @@ - Feature: loading preview, better text popup preview [@shamoon](https://github.com/shamoon) ([#8011](https://github.com/paperless-ngx/paperless-ngx/pull/8011)) - Chore: switch src/documents/bulk\*.py from os.path to pathlib.Path [@gothicVI](https://github.com/gothicVI) ([#7862](https://github.com/paperless-ngx/paperless-ngx/pull/7862)) - Chore: Bulk backend dependency updates [@stumpylog](https://github.com/stumpylog) ([#8212](https://github.com/paperless-ngx/paperless-ngx/pull/8212)) + ## paperless-ngx 2.13.5 @@ -1898,6 +1948,7 @@ - Fix: fix thumbnail clipping, select inverted color in safari dark mode not system [@shamoon](https://github.com/shamoon) ([#8193](https://github.com/paperless-ngx/paperless-ngx/pull/8193)) - Fix: select checkbox should remain visible [@shamoon](https://github.com/shamoon) ([#8185](https://github.com/paperless-ngx/paperless-ngx/pull/8185)) - Fix: warn with proper error on ASN exists in trash [@shamoon](https://github.com/shamoon) ([#8176](https://github.com/paperless-ngx/paperless-ngx/pull/8176)) + ## paperless-ngx 2.13.4 @@ -1914,6 +1965,7 @@ - Fix: fix dark mode icon blend mode in 2.13.3 [@shamoon](https://github.com/shamoon) ([#8166](https://github.com/paperless-ngx/paperless-ngx/pull/8166)) - Fix: fix clipped popup preview in 2.13.3 [@shamoon](https://github.com/shamoon) ([#8165](https://github.com/paperless-ngx/paperless-ngx/pull/8165)) + ## paperless-ngx 2.13.3 @@ -1940,6 +1992,7 @@ - Chore(deps-dev): Bump @codecov/webpack-plugin from 1.2.0 to 1.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#8150](https://github.com/paperless-ngx/paperless-ngx/pull/8150)) - Chore(deps-dev): Bump @types/jest from 29.5.13 to 29.5.14 in /src-ui in the frontend-jest-dependencies group [@dependabot](https://github.com/dependabot) ([#8144](https://github.com/paperless-ngx/paperless-ngx/pull/8144)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 21 updates [@dependabot](https://github.com/dependabot) ([#8143](https://github.com/paperless-ngx/paperless-ngx/pull/8143)) + ### All App Changes @@ -1961,6 +2014,7 @@ - Fix: use static object for activedisplayfields to prevent changes [@shamoon](https://github.com/shamoon) ([#8120](https://github.com/paperless-ngx/paperless-ngx/pull/8120)) - Fix: dont invert pdf colors in FF [@shamoon](https://github.com/shamoon) ([#8110](https://github.com/paperless-ngx/paperless-ngx/pull/8110)) - Fix: make mail account password and refresh token text fields [@shamoon](https://github.com/shamoon) ([#8107](https://github.com/paperless-ngx/paperless-ngx/pull/8107)) + ## paperless-ngx 2.13.2 @@ -1977,6 +2031,7 @@ - Fix: remove auth tokens from export [@shamoon](https://github.com/shamoon) ([#8100](https://github.com/paperless-ngx/paperless-ngx/pull/8100)) - Fix: cf query dropdown styling affecting other components [@shamoon](https://github.com/shamoon) ([#8095](https://github.com/paperless-ngx/paperless-ngx/pull/8095)) + ## paperless-ngx 2.13.1 @@ -2019,6 +2074,7 @@ - Fix: dont include all allauth urls [@shamoon](https://github.com/shamoon) ([#8010](https://github.com/paperless-ngx/paperless-ngx/pull/8010)) - Enhancement / fix: include social accounts and api tokens in export [@shamoon](https://github.com/shamoon) ([#8016](https://github.com/paperless-ngx/paperless-ngx/pull/8016)) - Fix: oauth settings without base url [@shamoon](https://github.com/shamoon) ([#8020](https://github.com/paperless-ngx/paperless-ngx/pull/8020)) + ## paperless-ngx 2.13.0 @@ -2083,6 +2139,7 @@ - Chore: Upgrades the Docker image to use Python 3.12 [@stumpylog](https://github.com/stumpylog) ([#7796](https://github.com/paperless-ngx/paperless-ngx/pull/7796)) - Chore: Upgrade Django to 5.1 [@stumpylog](https://github.com/stumpylog) ([#7795](https://github.com/paperless-ngx/paperless-ngx/pull/7795)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7723](https://github.com/paperless-ngx/paperless-ngx/pull/7723)) + ### All App Changes @@ -2133,6 +2190,7 @@ - Fix: chrome scrolling in >= 129 [@shamoon](https://github.com/shamoon) ([#7738](https://github.com/paperless-ngx/paperless-ngx/pull/7738)) - Feature: copy workflows and mail rules, improve layout [@shamoon](https://github.com/shamoon) ([#7727](https://github.com/paperless-ngx/paperless-ngx/pull/7727)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7723](https://github.com/paperless-ngx/paperless-ngx/pull/7723)) + ## paperless-ngx 2.12.1 @@ -2158,6 +2216,7 @@ - Fix: only filter by string or number properties for filter pipe [@shamoon](https://github.com/shamoon) ([#7699](https://github.com/paperless-ngx/paperless-ngx/pull/7699)) - Fix: saved view permissions fixes [@shamoon](https://github.com/shamoon) ([#7672](https://github.com/paperless-ngx/paperless-ngx/pull/7672)) - Fix: add permissions for OPTIONS requests for notes [@shamoon](https://github.com/shamoon) ([#7661](https://github.com/paperless-ngx/paperless-ngx/pull/7661)) + ## paperless-ngx 2.12.0 @@ -2198,6 +2257,7 @@ - Chore(deps): Bump pathvalidate from 3.2.0 to 3.2.1 in the small-changes group [@dependabot](https://github.com/dependabot) ([#7548](https://github.com/paperless-ngx/paperless-ngx/pull/7548)) - Chore(deps): Bump micromatch from 4.0.5 to 4.0.8 in /src-ui [@dependabot](https://github.com/dependabot) ([#7551](https://github.com/paperless-ngx/paperless-ngx/pull/7551)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7545](https://github.com/paperless-ngx/paperless-ngx/pull/7545)) + ### All App Changes @@ -2232,6 +2292,7 @@ - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7545](https://github.com/paperless-ngx/paperless-ngx/pull/7545)) - Refactor: Use django-filter logic for filtering full text search queries [@yichi-yang](https://github.com/yichi-yang) ([#7507](https://github.com/paperless-ngx/paperless-ngx/pull/7507)) - Refactor: Reduce number of SQL queries when serializing List[Document] [@yichi-yang](https://github.com/yichi-yang) ([#7505](https://github.com/paperless-ngx/paperless-ngx/pull/7505)) + ## paperless-ngx 2.11.6 @@ -2246,6 +2307,7 @@ 1 change - Fix: fix nltk tokenizer breaking change [@shamoon](https://github.com/shamoon) ([#7522](https://github.com/paperless-ngx/paperless-ngx/pull/7522)) + ## paperless-ngx 2.11.5 @@ -2265,6 +2327,7 @@ - Chore(deps-dev): Bump axios from 1.6.7 to 1.7.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#7472](https://github.com/paperless-ngx/paperless-ngx/pull/7472)) - Chore(deps-dev): Bump ruff from 0.5.6 to 0.5.7 in the development group [@dependabot](https://github.com/dependabot) ([#7457](https://github.com/paperless-ngx/paperless-ngx/pull/7457)) - Chore(deps): Bump the small-changes group with 3 updates [@dependabot](https://github.com/dependabot) ([#7460](https://github.com/paperless-ngx/paperless-ngx/pull/7460)) + ### All App Changes @@ -2279,6 +2342,7 @@ - Chore(deps-dev): Bump axios from 1.6.7 to 1.7.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#7472](https://github.com/paperless-ngx/paperless-ngx/pull/7472)) - Chore(deps-dev): Bump ruff from 0.5.6 to 0.5.7 in the development group [@dependabot](https://github.com/dependabot) ([#7457](https://github.com/paperless-ngx/paperless-ngx/pull/7457)) - Chore(deps): Bump the small-changes group with 3 updates [@dependabot](https://github.com/dependabot) ([#7460](https://github.com/paperless-ngx/paperless-ngx/pull/7460)) + ## paperless-ngx 2.11.4 @@ -2325,6 +2389,7 @@ - Chore(deps): Bump zone.js from 0.14.4 to 0.14.8 in /src-ui [@dependabot](https://github.com/dependabot) ([#7368](https://github.com/paperless-ngx/paperless-ngx/pull/7368)) - Chore(deps-dev): Bump jest-preset-angular from 14.1.1 to 14.2.2 in /src-ui in the frontend-jest-dependencies group [@dependabot](https://github.com/dependabot) ([#7364](https://github.com/paperless-ngx/paperless-ngx/pull/7364)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 20 updates [@dependabot](https://github.com/dependabot) ([#7363](https://github.com/paperless-ngx/paperless-ngx/pull/7363)) + ### All App Changes @@ -2347,6 +2412,7 @@ - Chore(deps-dev): Bump jest-preset-angular from 14.1.1 to 14.2.2 in /src-ui in the frontend-jest-dependencies group [@dependabot](https://github.com/dependabot) ([#7364](https://github.com/paperless-ngx/paperless-ngx/pull/7364)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 20 updates [@dependabot](https://github.com/dependabot) ([#7363](https://github.com/paperless-ngx/paperless-ngx/pull/7363)) - Fix: use entire document for dropzone [@shamoon](https://github.com/shamoon) ([#7342](https://github.com/paperless-ngx/paperless-ngx/pull/7342)) + ## paperless-ngx 2.11.2 @@ -2372,6 +2438,7 @@ - Fix: increase search input text contrast with light custom theme colors [@JayBkr](https://github.com/JayBkr) ([#7303](https://github.com/paperless-ngx/paperless-ngx/pull/7303)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7296](https://github.com/paperless-ngx/paperless-ngx/pull/7296)) - Chore(deps): Bump tika-client from 0.5.0 to 0.6.0 in the small-changes group [@dependabot](https://github.com/dependabot) ([#7297](https://github.com/paperless-ngx/paperless-ngx/pull/7297)) + ## paperless-ngx 2.11.1 @@ -2403,6 +2470,7 @@ - Chore: Squash older automatic migrations [@stumpylog](https://github.com/stumpylog) ([#7267](https://github.com/paperless-ngx/paperless-ngx/pull/7267)) - Fix: Removes Turkish from the NLTK languages [@stumpylog](https://github.com/stumpylog) ([#7246](https://github.com/paperless-ngx/paperless-ngx/pull/7246)) - Fix: include trashed docs in existing doc check [@shamoon](https://github.com/shamoon) ([#7229](https://github.com/paperless-ngx/paperless-ngx/pull/7229)) + ## paperless-ngx 2.11.0 @@ -2455,6 +2523,7 @@ - Chore(deps-dev): Bump ruff from 0.4.9 to 0.5.0 in the development group across 1 directory [@dependabot](https://github.com/dependabot) ([#7120](https://github.com/paperless-ngx/paperless-ngx/pull/7120)) - Chore(deps-dev): Bump ws from 8.17.0 to 8.17.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#7114](https://github.com/paperless-ngx/paperless-ngx/pull/7114)) - Chore: update to Angular v18 [@shamoon](https://github.com/shamoon) ([#7106](https://github.com/paperless-ngx/paperless-ngx/pull/7106)) + ### All App Changes @@ -2487,6 +2556,7 @@ - Feature: improve history display of object names etc [@shamoon](https://github.com/shamoon) ([#7102](https://github.com/paperless-ngx/paperless-ngx/pull/7102)) - Fix: dont include documents in trash in counts [@shamoon](https://github.com/shamoon) ([#7111](https://github.com/paperless-ngx/paperless-ngx/pull/7111)) - Fix: use temp dir for split / merge [@shamoon](https://github.com/shamoon) ([#7105](https://github.com/paperless-ngx/paperless-ngx/pull/7105)) + ## paperless-ngx 2.10.2 @@ -2509,6 +2579,7 @@ - Fix: index fresh document data after update archive file [@shamoon](https://github.com/shamoon) ([#7057](https://github.com/paperless-ngx/paperless-ngx/pull/7057)) - Fix: Safari browser PDF viewer not loading in 2.10.x [@shamoon](https://github.com/shamoon) ([#7056](https://github.com/paperless-ngx/paperless-ngx/pull/7056)) - Fix: Prefer the exporter metadata JSON file over the version JSON file [@stumpylog](https://github.com/stumpylog) ([#7048](https://github.com/paperless-ngx/paperless-ngx/pull/7048)) + ## paperless-ngx 2.10.1 @@ -2558,6 +2629,7 @@ - Chore(deps-dev): Bump the development group with 3 updates [@dependabot](https://github.com/dependabot) ([#6953](https://github.com/paperless-ngx/paperless-ngx/pull/6953)) - Chore: Updates to latest Trixie version of Ghostscript 10.03.1 [@stumpylog](https://github.com/stumpylog) ([#6956](https://github.com/paperless-ngx/paperless-ngx/pull/6956)) - Chore(deps): Bump tornado from 6.4 to 6.4.1 [@dependabot](https://github.com/dependabot) ([#6930](https://github.com/paperless-ngx/paperless-ngx/pull/6930)) + ### All App Changes @@ -2582,6 +2654,7 @@ - Enhancement: use note model permissions for notes [@shamoon](https://github.com/shamoon) ([#6913](https://github.com/paperless-ngx/paperless-ngx/pull/6913)) - Chore: Resolves test issues with Python 3.12 [@stumpylog](https://github.com/stumpylog) ([#6902](https://github.com/paperless-ngx/paperless-ngx/pull/6902)) - Fix: Make the logging of an email message to be something useful [@stumpylog](https://github.com/stumpylog) ([#6901](https://github.com/paperless-ngx/paperless-ngx/pull/6901)) + ## paperless-ngx 2.9.0 @@ -2625,6 +2698,7 @@ - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 19 updates [@dependabot](https://github.com/dependabot) ([#6761](https://github.com/paperless-ngx/paperless-ngx/pull/6761)) - Chore: Backend updates [@stumpylog](https://github.com/stumpylog) ([#6755](https://github.com/paperless-ngx/paperless-ngx/pull/6755)) - Chore: revert pngx pdf viewer to third party package [@shamoon](https://github.com/shamoon) ([#6741](https://github.com/paperless-ngx/paperless-ngx/pull/6741)) + ### All App Changes @@ -2651,6 +2725,7 @@ - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 19 updates [@dependabot](https://github.com/dependabot) ([#6761](https://github.com/paperless-ngx/paperless-ngx/pull/6761)) - Fix: consistently use created_date for doc display [@shamoon](https://github.com/shamoon) ([#6758](https://github.com/paperless-ngx/paperless-ngx/pull/6758)) - Chore: revert pngx pdf viewer to third party package [@shamoon](https://github.com/shamoon) ([#6741](https://github.com/paperless-ngx/paperless-ngx/pull/6741)) + ## paperless-ngx 2.8.6 @@ -2667,6 +2742,7 @@ - Security: disallow API remote-user auth if disabled [@shamoon](https://github.com/shamoon) ([#6739](https://github.com/paperless-ngx/paperless-ngx/pull/6739)) - Fix: retain sort field from global search filtering, use FILTER_HAS_TAGS_ALL [@shamoon](https://github.com/shamoon) ([#6737](https://github.com/paperless-ngx/paperless-ngx/pull/6737)) + ## paperless-ngx 2.8.5 @@ -2687,6 +2763,7 @@ - Fix: global search filtering links broken in 2.8.4 [@shamoon](https://github.com/shamoon) ([#6726](https://github.com/paperless-ngx/paperless-ngx/pull/6726)) - Fix: some buttons incorrectly aligned in 2.8.4 [@shamoon](https://github.com/shamoon) ([#6715](https://github.com/paperless-ngx/paperless-ngx/pull/6715)) - Fix: don't format ASN as number on dashboard [@shamoon](https://github.com/shamoon) ([#6708](https://github.com/paperless-ngx/paperless-ngx/pull/6708)) + ## paperless-ngx 2.8.4 @@ -2712,6 +2789,7 @@ - Fix: history timestamp tooltip illegible in dark mode [@shamoon](https://github.com/shamoon) ([#6696](https://github.com/paperless-ngx/paperless-ngx/pull/6696)) - Enhancement: display current ASN in statistics [@darmiel](https://github.com/darmiel) ([#6692](https://github.com/paperless-ngx/paperless-ngx/pull/6692)) - Fix: only count inbox documents from inbox tags with permissions [@shamoon](https://github.com/shamoon) ([#6670](https://github.com/paperless-ngx/paperless-ngx/pull/6670)) + ## paperless-ngx 2.8.3 @@ -2743,6 +2821,7 @@ - Fix: consistent monetary field display in list and cards [@shamoon](https://github.com/shamoon) ([#6645](https://github.com/paperless-ngx/paperless-ngx/pull/6645)) - Fix: doc links and more illegible in light mode [@shamoon](https://github.com/shamoon) ([#6643](https://github.com/paperless-ngx/paperless-ngx/pull/6643)) - Fix: Allow auditlog to be disabled [@stumpylog](https://github.com/stumpylog) ([#6638](https://github.com/paperless-ngx/paperless-ngx/pull/6638)) + ## paperless-ngx 2.8.2 @@ -2773,6 +2852,7 @@ - Fix: exclude admin perms from group permissions serializer [@shamoon](https://github.com/shamoon) ([#6608](https://github.com/paperless-ngx/paperless-ngx/pull/6608)) - Fix: global search text illegible in light mode [@shamoon](https://github.com/shamoon) ([#6602](https://github.com/paperless-ngx/paperless-ngx/pull/6602)) - Fix: document history text color illegible in light mode [@shamoon](https://github.com/shamoon) ([#6601](https://github.com/paperless-ngx/paperless-ngx/pull/6601)) + ## paperless-ngx 2.8.1 @@ -2795,6 +2875,7 @@ - Fix: saved views dont immediately display custom fields in table view [@shamoon](https://github.com/shamoon) ([#6594](https://github.com/paperless-ngx/paperless-ngx/pull/6594)) - Chore(deps-dev): Bump mkdocs-glightbox from 0.3.7 to 0.4.0 in the small-changes group [@dependabot](https://github.com/dependabot) ([#6581](https://github.com/paperless-ngx/paperless-ngx/pull/6581)) - Fix: bulk edit custom fields should support multiple items [@shamoon](https://github.com/shamoon) ([#6589](https://github.com/paperless-ngx/paperless-ngx/pull/6589)) + ## paperless-ngx 2.8.0 @@ -2851,6 +2932,7 @@ - Chore(deps): Bump the small-changes group with 11 updates [@dependabot](https://github.com/dependabot) ([#6405](https://github.com/paperless-ngx/paperless-ngx/pull/6405)) - Chore(deps): Bump idna from 3.6 to 3.7 [@dependabot](https://github.com/dependabot) ([#6377](https://github.com/paperless-ngx/paperless-ngx/pull/6377)) - Chore(deps): Bump tar from 6.2.0 to 6.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#6373](https://github.com/paperless-ngx/paperless-ngx/pull/6373)) + ### All App Changes @@ -2881,6 +2963,7 @@ - Fix: dont dismiss active alerts on dismiss completed [@shamoon](https://github.com/shamoon) ([#6364](https://github.com/paperless-ngx/paperless-ngx/pull/6364)) - Fix: Allow lowercase letters in monetary currency code field [@shamoon](https://github.com/shamoon) ([#6359](https://github.com/paperless-ngx/paperless-ngx/pull/6359)) - Fix: Allow negative monetary values with a current code [@stumpylog](https://github.com/stumpylog) ([#6358](https://github.com/paperless-ngx/paperless-ngx/pull/6358)) + ## paperless-ngx 2.7.2 @@ -2901,6 +2984,7 @@ - Fix: spacing in reset and incorrect display in saved views [@shamoon](https://github.com/shamoon) ([#6324](https://github.com/paperless-ngx/paperless-ngx/pull/6324)) - Fix: disable invalid create endpoints [@shamoon](https://github.com/shamoon) ([#6320](https://github.com/paperless-ngx/paperless-ngx/pull/6320)) - Fix: dont initialize page numbers, allow split with browser pdf viewer [@shamoon](https://github.com/shamoon) ([#6314](https://github.com/paperless-ngx/paperless-ngx/pull/6314)) + ## paperless-ngx 2.7.1 @@ -2921,6 +3005,7 @@ - Fix: Use correct custom field id when splitting [@shamoon](https://github.com/shamoon) ([#6303](https://github.com/paperless-ngx/paperless-ngx/pull/6303)) - Fix: Rotation fails due to celery chord [@stumpylog](https://github.com/stumpylog) ([#6306](https://github.com/paperless-ngx/paperless-ngx/pull/6306)) - Fix: split user / group objects error [@shamoon](https://github.com/shamoon) ([#6302](https://github.com/paperless-ngx/paperless-ngx/pull/6302)) + ## paperless-ngx 2.7.0 @@ -2962,6 +3047,7 @@ - Chore(deps-dev): Bump express from 4.18.3 to 4.19.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#6207](https://github.com/paperless-ngx/paperless-ngx/pull/6207)) - Chore(deps-dev): Bump webpack-dev-middleware from 5.3.3 to 5.3.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#6161](https://github.com/paperless-ngx/paperless-ngx/pull/6161)) - Chore(deps-dev): Bump the development group with 4 updates [@dependabot](https://github.com/dependabot) ([#6131](https://github.com/paperless-ngx/paperless-ngx/pull/6131)) + ### All App Changes @@ -2989,6 +3075,7 @@ - Enhancement: always place search term first in autocomplete results [@shamoon](https://github.com/shamoon) ([#6142](https://github.com/paperless-ngx/paperless-ngx/pull/6142)) - Fix: catch sessionStorage errors for large documents [@shamoon](https://github.com/shamoon) ([#6150](https://github.com/paperless-ngx/paperless-ngx/pull/6150)) - Chore(deps-dev): Bump the development group with 4 updates [@dependabot](https://github.com/dependabot) ([#6131](https://github.com/paperless-ngx/paperless-ngx/pull/6131)) + ## paperless-ngx 2.6.3 @@ -3007,6 +3094,7 @@ - Chore(deps-dev): Bump the development group with 3 updates [@dependabot](https://github.com/dependabot) ([#6079](https://github.com/paperless-ngx/paperless-ngx/pull/6079)) - Chore(deps): Bump the django group with 1 update [@dependabot](https://github.com/dependabot) ([#6080](https://github.com/paperless-ngx/paperless-ngx/pull/6080)) - Chore(deps): Bump the small-changes group with 2 updates [@dependabot](https://github.com/dependabot) ([#6081](https://github.com/paperless-ngx/paperless-ngx/pull/6081)) + ### All App Changes @@ -3022,6 +3110,7 @@ - Chore(deps): Bump the small-changes group with 2 updates [@dependabot](https://github.com/dependabot) ([#6081](https://github.com/paperless-ngx/paperless-ngx/pull/6081)) - Change: dont require empty bulk edit parameters [@shamoon](https://github.com/shamoon) ([#6059](https://github.com/paperless-ngx/paperless-ngx/pull/6059)) - Fix: missing translation string [@DimitriDR](https://github.com/DimitriDR) ([#6054](https://github.com/paperless-ngx/paperless-ngx/pull/6054)) + ## paperless-ngx 2.6.2 @@ -3043,6 +3132,7 @@ - Enhancement: move and rename files when storage paths deleted, update file handling docs [@shamoon](https://github.com/shamoon) ([#6033](https://github.com/paperless-ngx/paperless-ngx/pull/6033)) - Fix: make document counts in object lists permissions-aware [@shamoon](https://github.com/shamoon) ([#6019](https://github.com/paperless-ngx/paperless-ngx/pull/6019)) - Enhancement: better detection of default currency code [@shamoon](https://github.com/shamoon) ([#6020](https://github.com/paperless-ngx/paperless-ngx/pull/6020)) + ## paperless-ngx 2.6.1 @@ -3102,6 +3192,7 @@ - Chore(deps): Bump the small-changes group with 4 updates [@dependabot](https://github.com/dependabot) ([#5916](https://github.com/paperless-ngx/paperless-ngx/pull/5916)) - Chore(deps-dev): Bump the development group with 4 updates [@dependabot](https://github.com/dependabot) ([#5914](https://github.com/paperless-ngx/paperless-ngx/pull/5914)) - Chore(deps): Bump the actions group with 3 updates [@dependabot](https://github.com/dependabot) ([#5907](https://github.com/paperless-ngx/paperless-ngx/pull/5907)) + ### All App Changes @@ -3142,6 +3233,7 @@ - Chore(deps): Bump the small-changes group with 4 updates [@dependabot](https://github.com/dependabot) ([#5916](https://github.com/paperless-ngx/paperless-ngx/pull/5916)) - Chore(deps-dev): Bump the development group with 4 updates [@dependabot](https://github.com/dependabot) ([#5914](https://github.com/paperless-ngx/paperless-ngx/pull/5914)) - Enhancement: support disabling regular login [@shamoon](https://github.com/shamoon) ([#5816](https://github.com/paperless-ngx/paperless-ngx/pull/5816)) + ## paperless-ngx 2.5.4 @@ -3174,6 +3266,7 @@ - Chore(deps): Bump undici and [@angular-devkit/build-angular in /src-ui @dependabot](https://github.com/angular-devkit/build-angular in /src-ui @dependabot) ([#5796](https://github.com/paperless-ngx/paperless-ngx/pull/5796)) - Fix: allow relative date queries not in quick list [@shamoon](https://github.com/shamoon) ([#5801](https://github.com/paperless-ngx/paperless-ngx/pull/5801)) - Fix: pass rule id to consumed .eml files [@shamoon](https://github.com/shamoon) ([#5800](https://github.com/paperless-ngx/paperless-ngx/pull/5800)) + ## paperless-ngx 2.5.3 @@ -3192,6 +3285,7 @@ - Fix: dont allow allauth redirects to any host [@shamoon](https://github.com/shamoon) ([#5783](https://github.com/paperless-ngx/paperless-ngx/pull/5783)) - Fix: Interaction when both splitting and ASN are enabled [@stumpylog](https://github.com/stumpylog) ([#5779](https://github.com/paperless-ngx/paperless-ngx/pull/5779)) - Fix: moved ssl_mode parameter for mysql backend engine [@MaciejSzczurek](https://github.com/MaciejSzczurek) ([#5771](https://github.com/paperless-ngx/paperless-ngx/pull/5771)) + ## paperless-ngx 2.5.2 @@ -3216,6 +3310,7 @@ - Fix: handle document notes user format api change [@shamoon](https://github.com/shamoon) ([#5751](https://github.com/paperless-ngx/paperless-ngx/pull/5751)) - Fix: Assign ASN from barcode only after any splitting [@stumpylog](https://github.com/stumpylog) ([#5745](https://github.com/paperless-ngx/paperless-ngx/pull/5745)) - Chore(deps): Bump the major-versions group with 1 update [@dependabot](https://github.com/dependabot) ([#5741](https://github.com/paperless-ngx/paperless-ngx/pull/5741)) + ## paperless-ngx 2.5.1 @@ -3237,6 +3332,7 @@ - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#5737](https://github.com/paperless-ngx/paperless-ngx/pull/5737)) - Chore(deps): Bump the django group with 1 update [@dependabot](https://github.com/dependabot) ([#5739](https://github.com/paperless-ngx/paperless-ngx/pull/5739)) - Fix: Splitting on ASN barcodes even if not enabled [@stumpylog](https://github.com/stumpylog) ([#5740](https://github.com/paperless-ngx/paperless-ngx/pull/5740)) + ## paperless-ngx 2.5.0 @@ -3297,6 +3393,7 @@ - Chore(deps-dev): Bump [@types/node from 20.10.6 to 20.11.16 in /src-ui @dependabot](https://github.com/types/node from 20.10.6 to 20.11.16 in /src-ui @dependabot) ([#5635](https://github.com/paperless-ngx/paperless-ngx/pull/5635)) - Chore(deps): Bump the actions group with 1 update [@dependabot](https://github.com/dependabot) ([#5629](https://github.com/paperless-ngx/paperless-ngx/pull/5629)) - Chore(deps): Bump the actions group with 1 update [@dependabot](https://github.com/dependabot) ([#5597](https://github.com/paperless-ngx/paperless-ngx/pull/5597)) + ### All App Changes @@ -3332,6 +3429,7 @@ - Enhancement: re-implement remote user auth for unsafe API requests as opt-in [@shamoon](https://github.com/shamoon) ([#5561](https://github.com/paperless-ngx/paperless-ngx/pull/5561)) - Enhancement: Respect PDF cropbox for thumbnail generation [@henningBunk](https://github.com/henningBunk) ([#5531](https://github.com/paperless-ngx/paperless-ngx/pull/5531)) - Fix: Don't attempt to retrieve object types user doesn't have permissions to [@shamoon](https://github.com/shamoon) ([#5612](https://github.com/paperless-ngx/paperless-ngx/pull/5612)) + ## paperless-ngx 2.4.3 @@ -3358,6 +3456,7 @@ - Fix: improve one of the date matching regexes [@shamoon](https://github.com/shamoon) ([#5540](https://github.com/paperless-ngx/paperless-ngx/pull/5540)) - Fix: tweak doc detail component behavior while awaiting metadata [@shamoon](https://github.com/shamoon) ([#5546](https://github.com/paperless-ngx/paperless-ngx/pull/5546)) + ## paperless-ngx 2.4.1 @@ -3394,6 +3493,7 @@ - Chore(deps-dev): Bump the development group with 1 update [@dependabot](https://github.com/dependabot) ([#5503](https://github.com/paperless-ngx/paperless-ngx/pull/5503)) - Fix: render images not converted to pdf, refactor doc detail rendering [@shamoon](https://github.com/shamoon) ([#5475](https://github.com/paperless-ngx/paperless-ngx/pull/5475)) - Fix: Dont parse numbers with exponent as integer [@shamoon](https://github.com/shamoon) ([#5457](https://github.com/paperless-ngx/paperless-ngx/pull/5457)) + ## paperless-ngx 2.4.0 @@ -3448,6 +3548,7 @@ - Enhancement: warn when outdated doc detected [@shamoon](https://github.com/shamoon) ([#5372](https://github.com/paperless-ngx/paperless-ngx/pull/5372)) - Feature: app branding [@shamoon](https://github.com/shamoon) ([#5357](https://github.com/paperless-ngx/paperless-ngx/pull/5357)) - Chore: Initial refactor of consume task [@stumpylog](https://github.com/stumpylog) ([#5367](https://github.com/paperless-ngx/paperless-ngx/pull/5367)) + ## paperless-ngx 2.3.3 @@ -3476,6 +3577,7 @@ - Chore: Backend dependencies update [@stumpylog](https://github.com/stumpylog) ([#5336](https://github.com/paperless-ngx/paperless-ngx/pull/5336)) - Fix: Don't require the JSON user arguments field, interpret empty string as [@stumpylog](https://github.com/stumpylog) ([#5320](https://github.com/paperless-ngx/paperless-ngx/pull/5320)) - Chore: add pre-commit hook for codespell [@shamoon](https://github.com/shamoon) ([#5324](https://github.com/paperless-ngx/paperless-ngx/pull/5324)) + ## paperless-ngx 2.3.2 @@ -3498,6 +3600,7 @@ - Fix: empty workflow trigger match field cannot be saved in v.2.3.1 [@shamoon](https://github.com/shamoon) ([#5301](https://github.com/paperless-ngx/paperless-ngx/pull/5301)) - Fix: Use local time for added/updated workflow triggers [@stumpylog](https://github.com/stumpylog) ([#5304](https://github.com/paperless-ngx/paperless-ngx/pull/5304)) - Fix: workflow edit form loses unsaved changes [@shamoon](https://github.com/shamoon) ([#5299](https://github.com/paperless-ngx/paperless-ngx/pull/5299)) + ## paperless-ngx 2.3.1 @@ -3514,6 +3617,7 @@ - Fix: edit workflow form not displaying trigger settings [@shamoon](https://github.com/shamoon) ([#5276](https://github.com/paperless-ngx/paperless-ngx/pull/5276)) - Fix: Prevent passing 0 pages to OCRMyPDF [@stumpylog](https://github.com/stumpylog) ([#5275](https://github.com/paperless-ngx/paperless-ngx/pull/5275)) + ## paperless-ngx 2.3.0 @@ -3564,6 +3668,7 @@ - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 10 updates [@dependabot](https://github.com/dependabot) ([#5204](https://github.com/paperless-ngx/paperless-ngx/pull/5204)) - Chore(deps-dev): Bump [@types/node from 20.10.4 to 20.10.6 in /src-ui @dependabot](https://github.com/types/node from 20.10.4 to 20.10.6 in /src-ui @dependabot) ([#5207](https://github.com/paperless-ngx/paperless-ngx/pull/5207)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#5205](https://github.com/paperless-ngx/paperless-ngx/pull/5205)) + ### All App Changes @@ -3592,6 +3697,7 @@ - Feature: Allow setting backend configuration settings via the UI [@stumpylog](https://github.com/stumpylog) ([#5126](https://github.com/paperless-ngx/paperless-ngx/pull/5126)) - Enhancement: improve validation of custom field values [@shamoon](https://github.com/shamoon) ([#5166](https://github.com/paperless-ngx/paperless-ngx/pull/5166)) - Fix: type casting of db values for 'shared by me' filter [@shamoon](https://github.com/shamoon) ([#5155](https://github.com/paperless-ngx/paperless-ngx/pull/5155)) + ## paperless-ngx 2.2.1 @@ -3610,6 +3716,7 @@ - Fix: saving doc links with no value [@shamoon](https://github.com/shamoon) ([#5144](https://github.com/paperless-ngx/paperless-ngx/pull/5144)) - Fix: allow multiple consumption templates to assign the same custom field [@shamoon](https://github.com/shamoon) ([#5142](https://github.com/paperless-ngx/paperless-ngx/pull/5142)) - Fix: some dropdowns broken in 2.2.0 [@shamoon](https://github.com/shamoon) ([#5134](https://github.com/paperless-ngx/paperless-ngx/pull/5134)) + ## paperless-ngx 2.2.0 @@ -3656,6 +3763,7 @@ - Chore(deps): Bump the major-versions group with 1 update [@dependabot](https://github.com/dependabot) ([#5047](https://github.com/paperless-ngx/paperless-ngx/pull/5047)) - Chore(deps): Bump the small-changes group with 6 updates [@dependabot](https://github.com/dependabot) ([#5048](https://github.com/paperless-ngx/paperless-ngx/pull/5048)) - Fix: Updates Ghostscript to 10.02.1 for more bug fixes to it [@stumpylog](https://github.com/stumpylog) ([#5040](https://github.com/paperless-ngx/paperless-ngx/pull/5040)) + ### All App Changes @@ -3683,6 +3791,7 @@ - Fix: allow system keyboard shortcuts in date fields [@shamoon](https://github.com/shamoon) ([#5009](https://github.com/paperless-ngx/paperless-ngx/pull/5009)) - Enhancement: document link field fixes [@shamoon](https://github.com/shamoon) ([#5020](https://github.com/paperless-ngx/paperless-ngx/pull/5020)) - Fix password change detection on profile edit [@shamoon](https://github.com/shamoon) ([#5028](https://github.com/paperless-ngx/paperless-ngx/pull/5028)) + ## paperless-ngx 2.1.3 @@ -3706,6 +3815,7 @@ - Fix: Apply user arguments even in the case of the forcing OCR [@stumpylog](https://github.com/stumpylog) ([#4981](https://github.com/paperless-ngx/paperless-ngx/pull/4981)) - Fix: support show errors for select dropdowns [@shamoon](https://github.com/shamoon) ([#4979](https://github.com/paperless-ngx/paperless-ngx/pull/4979)) - Fix: Don't attempt to parse none objects during date searching [@bogdal](https://github.com/bogdal) ([#4977](https://github.com/paperless-ngx/paperless-ngx/pull/4977)) + ## paperless-ngx 2.1.2 @@ -3739,6 +3849,7 @@ - Fix: Convert search dates to UTC in advanced search [@bogdal](https://github.com/bogdal) ([#4891](https://github.com/paperless-ngx/paperless-ngx/pull/4891)) - Fix: Use the attachment filename so downstream template matching works [@stumpylog](https://github.com/stumpylog) ([#4931](https://github.com/paperless-ngx/paperless-ngx/pull/4931)) - Fix: frontend handle autocomplete failure gracefully [@shamoon](https://github.com/shamoon) ([#4903](https://github.com/paperless-ngx/paperless-ngx/pull/4903)) + ## paperless-ngx 2.1.1 @@ -3765,6 +3876,7 @@ - Fix: respect baseURI for pdfjs worker URL [@shamoon](https://github.com/shamoon) ([#4865](https://github.com/paperless-ngx/paperless-ngx/pull/4865)) - Fix: Allow users to configure the From email for password reset [@stumpylog](https://github.com/stumpylog) ([#4867](https://github.com/paperless-ngx/paperless-ngx/pull/4867)) - Fix: dont show move icon for file tasks badge [@shamoon](https://github.com/shamoon) ([#4860](https://github.com/paperless-ngx/paperless-ngx/pull/4860)) + ## paperless-ngx 2.1.0 @@ -3812,6 +3924,7 @@ - Bump [@playwright/test from 1.39.0 to 1.40.1 in /src-ui @dependabot](https://github.com/playwright/test from 1.39.0 to 1.40.1 in /src-ui @dependabot) ([#4749](https://github.com/paperless-ngx/paperless-ngx/pull/4749)) - Bump wait-on from 7.0.1 to 7.2.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#4747](https://github.com/paperless-ngx/paperless-ngx/pull/4747)) - Bump [@types/node from 20.8.10 to 20.10.2 in /src-ui @dependabot](https://github.com/types/node from 20.8.10 to 20.10.2 in /src-ui @dependabot) ([#4748](https://github.com/paperless-ngx/paperless-ngx/pull/4748)) + ### All App Changes @@ -3839,6 +3952,7 @@ - Bump wait-on from 7.0.1 to 7.2.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#4747](https://github.com/paperless-ngx/paperless-ngx/pull/4747)) - Bump [@types/node from 20.8.10 to 20.10.2 in /src-ui @dependabot](https://github.com/types/node from 20.8.10 to 20.10.2 in /src-ui @dependabot) ([#4748](https://github.com/paperless-ngx/paperless-ngx/pull/4748)) - Enhancement: auto-refresh logs \& tasks [@shamoon](https://github.com/shamoon) ([#4680](https://github.com/paperless-ngx/paperless-ngx/pull/4680)) + ## paperless-ngx 2.0.1 @@ -3863,6 +3977,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Fix: Set RGB color conversion strategy for PDF outputs [@stumpylog](https://github.com/stumpylog) ([#4709](https://github.com/paperless-ngx/paperless-ngx/pull/4709)) - Fix: Add a warning about a low image DPI which may cause OCR to fail [@stumpylog](https://github.com/stumpylog) ([#4708](https://github.com/paperless-ngx/paperless-ngx/pull/4708)) - Fix: share links for URLs containing 'api' incorrect in dropdown [@shamoon](https://github.com/shamoon) ([#4701](https://github.com/paperless-ngx/paperless-ngx/pull/4701)) + ## paperless-ngx 2.0.0 @@ -4039,6 +4154,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Bump concurrently from 8.2.0 to 8.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#4111](https://github.com/paperless-ngx/paperless-ngx/pull/4111)) - Bump [@types/node from 20.4.5 to 20.5.8 in /src-ui @dependabot](https://github.com/types/node from 20.4.5 to 20.5.8 in /src-ui @dependabot) ([#4110](https://github.com/paperless-ngx/paperless-ngx/pull/4110)) - Bump the frontend-angular-dependencies group in /src-ui with 19 updates [@dependabot](https://github.com/dependabot) ([#4104](https://github.com/paperless-ngx/paperless-ngx/pull/4104)) + ### All App Changes @@ -4141,6 +4257,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Bump concurrently from 8.2.0 to 8.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#4111](https://github.com/paperless-ngx/paperless-ngx/pull/4111)) - Bump [@types/node from 20.4.5 to 20.5.8 in /src-ui @dependabot](https://github.com/types/node from 20.4.5 to 20.5.8 in /src-ui @dependabot) ([#4110](https://github.com/paperless-ngx/paperless-ngx/pull/4110)) - Bump the frontend-angular-dependencies group in /src-ui with 19 updates [@dependabot](https://github.com/dependabot) ([#4104](https://github.com/paperless-ngx/paperless-ngx/pull/4104)) + ## paperless-ngx 1.17.4 @@ -4175,6 +4292,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Fix: When PDF/A rendering fails, add a consideration for the user to add args to override [@stumpylog](https://github.com/stumpylog) ([#4083](https://github.com/paperless-ngx/paperless-ngx/pull/4083)) - Chore: update frontend PDF viewer (including pdf-js) [@shamoon](https://github.com/shamoon) ([#4065](https://github.com/paperless-ngx/paperless-ngx/pull/4065)) - Chore: Prepare for Python 3.11 support [@stumpylog](https://github.com/stumpylog) ([#4066](https://github.com/paperless-ngx/paperless-ngx/pull/4066)) + ## paperless-ngx 1.17.2 @@ -4201,6 +4319,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Fix: tag creation sometimes retained search text [@shamoon](https://github.com/shamoon) ([#4038](https://github.com/paperless-ngx/paperless-ngx/pull/4038)) - Fix: enforce permissions on bulk_edit operations [@shamoon](https://github.com/shamoon) ([#4007](https://github.com/paperless-ngx/paperless-ngx/pull/4007)) - Enhancement: Allow to set a prefix for keys and channels in redis [@amo13](https://github.com/amo13) ([#3993](https://github.com/paperless-ngx/paperless-ngx/pull/3993)) + ## paperless-ngx 1.17.1 @@ -4236,6 +4355,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Fix: handle very old date strings in correspondent list [@shamoon](https://github.com/shamoon) ([#3953](https://github.com/paperless-ngx/paperless-ngx/pull/3953)) - Chore: Reduces the 2 mail tests flakiness [@stumpylog](https://github.com/stumpylog) ([#3949](https://github.com/paperless-ngx/paperless-ngx/pull/3949)) - Feature: Add Ukrainian translation [@shamoon](https://github.com/shamoon) ([#3941](https://github.com/paperless-ngx/paperless-ngx/pull/3941)) + ## paperless-ngx 1.17.0 @@ -4298,6 +4418,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Bump [@playwright/test from 1.36.0 to 1.36.1 in /src-ui @dependabot](https://github.com/playwright/test from 1.36.0 to 1.36.1 in /src-ui @dependabot) ([#3827](https://github.com/paperless-ngx/paperless-ngx/pull/3827)) - Bump semver from 5.7.1 to 5.7.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#3793](https://github.com/paperless-ngx/paperless-ngx/pull/3793)) - Chore: Bump Angular to v16 and other frontend packages [@dependabot](https://github.com/dependabot) ([#3727](https://github.com/paperless-ngx/paperless-ngx/pull/3727)) + ### All App Changes @@ -4340,6 +4461,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Feature: Add Slovak translation [@shamoon](https://github.com/shamoon) ([#3722](https://github.com/paperless-ngx/paperless-ngx/pull/3722)) - Fix: limit ng-select size for addition of filter button [@shamoon](https://github.com/shamoon) ([#3731](https://github.com/paperless-ngx/paperless-ngx/pull/3731)) - Chore: Bump Angular to v16 and other frontend packages [@dependabot](https://github.com/dependabot) ([#3727](https://github.com/paperless-ngx/paperless-ngx/pull/3727)) + ## paperless-ngx 1.16.5 @@ -4359,6 +4481,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Feature: support barcode upscaling for better detection of small barcodes [@bmachek](https://github.com/bmachek) ([#3655](https://github.com/paperless-ngx/paperless-ngx/pull/3655)) - Fix: owner removed when set_permissions passed on object create [@shamoon](https://github.com/shamoon) ([#3702](https://github.com/paperless-ngx/paperless-ngx/pull/3702)) + ## paperless-ngx 1.16.4 @@ -4387,6 +4510,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Fix: Handling for filenames with non-ascii and no content attribute [@stumpylog](https://github.com/stumpylog) ([#3695](https://github.com/paperless-ngx/paperless-ngx/pull/3695)) - Fix: Generation of thumbnails for existing stored emails [@stumpylog](https://github.com/stumpylog) ([#3696](https://github.com/paperless-ngx/paperless-ngx/pull/3696)) - Fix: Use row gap for filter editor [@kleinweby](https://github.com/kleinweby) ([#3662](https://github.com/paperless-ngx/paperless-ngx/pull/3662)) + ## paperless-ngx 1.16.3 @@ -4410,6 +4534,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Fix: Ignore errors when trying to copy the original file's stats [@stumpylog](https://github.com/stumpylog) ([#3652](https://github.com/paperless-ngx/paperless-ngx/pull/3652)) - Fix: Copy default thumbnail if thumbnail generation fails [@plu](https://github.com/plu) ([#3632](https://github.com/paperless-ngx/paperless-ngx/pull/3632)) + ## paperless-ngx 1.16.2 @@ -4436,6 +4561,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Fix: Increase httpx operation timeouts to 30s [@stumpylog](https://github.com/stumpylog) ([#3627](https://github.com/paperless-ngx/paperless-ngx/pull/3627)) - Fix: Better error handling and checking when parsing documents via Tika [@stumpylog](https://github.com/stumpylog) ([#3617](https://github.com/paperless-ngx/paperless-ngx/pull/3617)) - Development: frontend unit testing [@shamoon](https://github.com/shamoon) ([#3597](https://github.com/paperless-ngx/paperless-ngx/pull/3597)) + ## paperless-ngx 1.16.1 @@ -4482,6 +4608,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Chore: Adds test for barcode ASN when it already exists [@stumpylog](https://github.com/stumpylog) ([#3550](https://github.com/paperless-ngx/paperless-ngx/pull/3550)) - Feature: Update to a simpler Tika library [@stumpylog](https://github.com/stumpylog) ([#3517](https://github.com/paperless-ngx/paperless-ngx/pull/3517)) - Feature: Allow to filter documents by original filename and checksum [@jayme-github](https://github.com/jayme-github) ([#3485](https://github.com/paperless-ngx/paperless-ngx/pull/3485)) + ## paperless-ngx 1.15.1 @@ -4540,6 +4667,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Bump tslib from 2.5.0 to 2.5.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#3501](https://github.com/paperless-ngx/paperless-ngx/pull/3501)) - Bump [@types/node from 18.16.3 to 20.2.5 in /src-ui @dependabot](https://github.com/types/node from 18.16.3 to 20.2.5 in /src-ui @dependabot) ([#3498](https://github.com/paperless-ngx/paperless-ngx/pull/3498)) - Bump [@playwright/test from 1.33.0 to 1.34.3 in /src-ui @dependabot](https://github.com/playwright/test from 1.33.0 to 1.34.3 in /src-ui @dependabot) ([#3499](https://github.com/paperless-ngx/paperless-ngx/pull/3499)) + ### All App Changes @@ -4569,6 +4697,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Enhancement: paginate frontend tasks [@shamoon](https://github.com/shamoon) ([#3445](https://github.com/paperless-ngx/paperless-ngx/pull/3445)) - Add SSL Support for MariaDB [@kimdre](https://github.com/kimdre) ([#3444](https://github.com/paperless-ngx/paperless-ngx/pull/3444)) - Enhancement: Improve frontend error handling [@shamoon](https://github.com/shamoon) ([#3413](https://github.com/paperless-ngx/paperless-ngx/pull/3413)) + ## paperless-ngx 1.14.5 @@ -4616,6 +4745,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Enhancement: save tour completion, hide welcome widget [@shamoon](https://github.com/shamoon) ([#3321](https://github.com/paperless-ngx/paperless-ngx/pull/3321)) - Fix: permission-aware bulk editing in 1.14.1+ [@shamoon](https://github.com/shamoon) ([#3345](https://github.com/paperless-ngx/paperless-ngx/pull/3345)) - Fix: Add proper testing for \*\_\_id\_\_in testing [@shamoon](https://github.com/shamoon) ([#3315](https://github.com/paperless-ngx/paperless-ngx/pull/3315)) + ## paperless-ngx 1.14.4 @@ -4633,6 +4763,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - New Crowdin updates [@paperlessngx-bot](https://github.com/paperlessngx-bot) ([#3298](https://github.com/paperless-ngx/paperless-ngx/pull/3298)) - Fix: Inversion in tagged mail searching [@stumpylog](https://github.com/stumpylog) ([#3305](https://github.com/paperless-ngx/paperless-ngx/pull/3305)) - Fix dynamic count labels hidden in light mode [@shamoon](https://github.com/shamoon) ([#3303](https://github.com/paperless-ngx/paperless-ngx/pull/3303)) + ## paperless-ngx 1.14.3 @@ -4664,6 +4795,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Bump [@typescript-eslint/eslint-plugin from 5.58.0 to 5.59.2 in /src-ui @dependabot](https://github.com/typescript-eslint/eslint-plugin from 5.58.0 to 5.59.2 in /src-ui @dependabot) ([#3274](https://github.com/paperless-ngx/paperless-ngx/pull/3274)) - Bump cypress from 12.9.0 to 12.11.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#3268](https://github.com/paperless-ngx/paperless-ngx/pull/3268)) - Bulk bump angular packages to 15.2.8 in /src-ui [@dependabot](https://github.com/dependabot) ([#3270](https://github.com/paperless-ngx/paperless-ngx/pull/3270)) + ### All App Changes @@ -4685,6 +4817,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Enhancement: better keyboard nav for filter/edit dropdowns [@shamoon](https://github.com/shamoon) ([#3227](https://github.com/paperless-ngx/paperless-ngx/pull/3227)) - Fix: Respect superuser for advanced queries, test coverage for object perms [@shamoon](https://github.com/shamoon) ([#3222](https://github.com/paperless-ngx/paperless-ngx/pull/3222)) - Fix: ALLOWED_HOSTS logic being overwritten when \* is set [@ikaruswill](https://github.com/ikaruswill) ([#3218](https://github.com/paperless-ngx/paperless-ngx/pull/3218)) + ## paperless-ngx 1.14.2 @@ -4708,6 +4841,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Fix: Load saved views from app frame, not dashboard [@shamoon](https://github.com/shamoon) ([#3211](https://github.com/paperless-ngx/paperless-ngx/pull/3211)) - Fix: advanced search or date searching + doc type/correspondent/storage path broken [@shamoon](https://github.com/shamoon) ([#3209](https://github.com/paperless-ngx/paperless-ngx/pull/3209)) - Fix MixedContentTypeError in add_inbox_tags handler [@e1mo](https://github.com/e1mo) ([#3212](https://github.com/paperless-ngx/paperless-ngx/pull/3212)) + ## paperless-ngx 1.14.1 @@ -4753,6 +4887,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Fix: Specify backend for auto-login [@shamoon](https://github.com/shamoon) ([#3163](https://github.com/paperless-ngx/paperless-ngx/pull/3163)) - Fix: StoragePath missing the owned or granted filter [@stumpylog](https://github.com/stumpylog) ([#3180](https://github.com/paperless-ngx/paperless-ngx/pull/3180)) - Fix: Handle delete mail action with no filters [@shamoon](https://github.com/shamoon) ([#3161](https://github.com/paperless-ngx/paperless-ngx/pull/3161)) + ## paperless-ngx 1.14.0 @@ -4857,6 +4992,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Bump zone.js from 0.11.8 to 0.12.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#2793](https://github.com/paperless-ngx/paperless-ngx/pull/2793)) - Bump [@typescript-eslint/parser from 5.50.0 to 5.54.0 in /src-ui @dependabot](https://github.com/typescript-eslint/parser from 5.50.0 to 5.54.0 in /src-ui @dependabot) ([#2792](https://github.com/paperless-ngx/paperless-ngx/pull/2792)) - Bulk Bump angular packages to 15.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#2788](https://github.com/paperless-ngx/paperless-ngx/pull/2788)) + ### All App Changes @@ -4936,6 +5072,7 @@ Exports generated in Paperless-ngx v2.0.0–2.0.1 will **not** contain consumpti - Feature: update error message colors \& show on document failures [@shamoon](https://github.com/shamoon) ([#2689](https://github.com/paperless-ngx/paperless-ngx/pull/2689)) - Feature: multi-user permissions [@shamoon](https://github.com/shamoon) ([#2147](https://github.com/paperless-ngx/paperless-ngx/pull/2147)) - Fix: add missing i18n for mobile preview tab title [@nathanaelhoun](https://github.com/nathanaelhoun) ([#2692](https://github.com/paperless-ngx/paperless-ngx/pull/2692)) + ## paperless-ngx 1.13.0 @@ -5098,6 +5235,7 @@ older comments. The Docker image will automatically perform this reindex, bare m - Bump tj-actions/changed-files from 34 to 35 [@dependabot](https://github.com/dependabot) ([#2303](https://github.com/paperless-ngx/paperless-ngx/pull/2303)) - Bump [@typescript-eslint/parser from 5.43.0 to 5.47.1 in /src-ui @dependabot](https://github.com/typescript-eslint/parser from 5.43.0 to 5.47.1 in /src-ui @dependabot) ([#2306](https://github.com/paperless-ngx/paperless-ngx/pull/2306)) - Bump [@typescript-eslint/eslint-plugin from 5.43.0 to 5.47.1 in /src-ui @dependabot](https://github.com/typescript-eslint/eslint-plugin from 5.43.0 to 5.47.1 in /src-ui @dependabot) ([#2308](https://github.com/paperless-ngx/paperless-ngx/pull/2308)) + ### All App Changes @@ -5286,6 +5424,7 @@ Versions 1.11.1 and 1.11.2 contain bug fixes from v1.11.0 that prevented use of - Bump jest-preset-angular from 12.2.2 to 12.2.3 in /src-ui @dependabot ([#2078](https://github.com/paperless-ngx/paperless-ngx/pull/2078)) - Bump ngx-file-drop from 14.0.1 to 14.0.2 in /src-ui @dependabot ([#2080](https://github.com/paperless-ngx/paperless-ngx/pull/2080)) - Bump @ngneat/dirty-check-forms from 3.0.2 to 3.0.3 in /src-ui @dependabot ([#2077](https://github.com/paperless-ngx/paperless-ngx/pull/2077)) + ### All App Changes @@ -5405,6 +5544,7 @@ Versions 1.11.1 and 1.11.2 contain bug fixes from v1.11.0 that prevented use of - Bump cypress from 10.7.0 to 10.9.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1707](https://github.com/paperless-ngx/paperless-ngx/pull/1707)) - Bump bootstrap from 5.2.0 to 5.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1710](https://github.com/paperless-ngx/paperless-ngx/pull/1710)) - Bump typescript from 4.7.4 to 4.8.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#1706](https://github.com/paperless-ngx/paperless-ngx/pull/1706)) + ### All App Changes @@ -5614,6 +5754,7 @@ Versions 1.11.1 and 1.11.2 contain bug fixes from v1.11.0 that prevented use of - Bump typescript from 4.6.4 to 4.7.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#1324](https://github.com/paperless-ngx/paperless-ngx/pull/1324)) - Bump ts-node from 10.8.1 to 10.9.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1325](https://github.com/paperless-ngx/paperless-ngx/pull/1325)) - Bump rxjs from 7.5.5 to 7.5.6 in /src-ui [@dependabot](https://github.com/dependabot) ([#1323](https://github.com/paperless-ngx/paperless-ngx/pull/1323)) + ### All App Changes @@ -5795,6 +5936,7 @@ Versions 1.11.1 and 1.11.2 contain bug fixes from v1.11.0 that prevented use of - Bump docker/login-action from 1 to 2 [@dependabot](https://github.com/dependabot) ([#1061](https://github.com/paperless-ngx/paperless-ngx/pull/1061)) - Chore: Manually update dependencies [@stumpylog](https://github.com/stumpylog) ([#1013](https://github.com/paperless-ngx/paperless-ngx/pull/1013)) - Chore: Manually update all Python dependencies [@stumpylog](https://github.com/stumpylog) ([#973](https://github.com/paperless-ngx/paperless-ngx/pull/973)) + ## paperless-ngx 1.7.1 @@ -5863,6 +6005,7 @@ Versions 1.11.1 and 1.11.2 contain bug fixes from v1.11.0 that prevented use of - Bump cypress from 9.5.3 to 9.6.0 in /src-ui @dependabot ([#800](https://github.com/paperless-ngx/paperless-ngx/pull/800)) - Bump angular \& tools to 13.3.4 or 13.3.3 [@shamoon](https://github.com/shamoon) ([#799](https://github.com/paperless-ngx/paperless-ngx/pull/799)) - Bump concurrently from 7.0.0 to 7.1.0 in /src-ui @dependabot ([#797](https://github.com/paperless-ngx/paperless-ngx/pull/797)) + ## paperless-ngx 1.7.0 diff --git a/src-ui/src/app/components/common/pdf-viewer/pdf-viewer.component.spec.ts b/src-ui/src/app/components/common/pdf-viewer/pdf-viewer.component.spec.ts index 92294154b..a8c973205 100644 --- a/src-ui/src/app/components/common/pdf-viewer/pdf-viewer.component.spec.ts +++ b/src-ui/src/app/components/common/pdf-viewer/pdf-viewer.component.spec.ts @@ -49,8 +49,7 @@ describe('PngxPdfViewerComponent', () => { new URL('assets/js/pdf.worker.min.mjs', document.baseURI).toString() ) const isVisible = (component as any).findController.onIsPageVisible as - | (() => boolean) - | undefined + (() => boolean) | undefined expect(isVisible?.()).toBe(true) expect(loadSpy).toHaveBeenCalledWith( expect.objectContaining({ numPages: 1 }) diff --git a/src-ui/src/app/utils/text-search.ts b/src-ui/src/app/utils/text-search.ts index d64ecdec9..883ace368 100644 --- a/src-ui/src/app/utils/text-search.ts +++ b/src-ui/src/app/utils/text-search.ts @@ -1,12 +1,7 @@ import { normalizeSync } from 'normalize-diacritics' export type SearchTextValue = - | string - | number - | boolean - | bigint - | null - | undefined + string | number | boolean | bigint | null | undefined export function normalizeSearchText(value: SearchTextValue): string { return normalizeSync(String(value ?? '')).toLocaleLowerCase() From 66f5111dc164ff3ee540c8634fe92dac4f9c56c9 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 16 Jul 2026 10:42:00 -0700 Subject: [PATCH 11/14] Chore: some frontend sonar fixes --- .../app/components/admin/logs/logs.component.html | 5 +++-- .../src/app/components/admin/logs/logs.component.ts | 4 +--- .../admin/settings/settings.component.html | 12 ++++++------ .../admin/settings/settings.component.spec.ts | 12 ++++++------ .../app/components/admin/tasks/tasks.component.html | 7 ++++--- .../src/app/components/chat/chat/chat.component.html | 2 ++ .../app/components/chat/chat/chat.component.spec.ts | 4 ++-- .../workflow-edit-dialog.component.html | 2 +- .../workflow-edit-dialog.component.spec.ts | 10 +++++----- .../workflow-edit-dialog.component.ts | 2 +- .../components/common/input/tags/tags.component.ts | 4 ++-- .../common/page-header/page-header.component.ts | 2 +- .../share-link-bundle-dialog.component.html | 3 ++- .../document-detail.component.spec.ts | 2 +- .../document-history/document-history.component.html | 2 +- .../document-history/document-history.component.ts | 12 ++++++------ .../document-version-dropdown.component.html | 7 ++++++- .../filter-editor/filter-editor.component.spec.ts | 2 +- .../management-list/management-list.component.html | 8 ++++---- .../tag-list/tag-list.component.spec.ts | 4 ++-- .../processed-mail-dialog.component.html | 2 +- .../processed-mail-dialog.component.scss | 2 +- 22 files changed, 59 insertions(+), 51 deletions(-) diff --git a/src-ui/src/app/components/admin/logs/logs.component.html b/src-ui/src/app/components/admin/logs/logs.component.html index 2099429b3..0596ec60d 100644 --- a/src-ui/src/app/components/admin/logs/logs.component.html +++ b/src-ui/src/app/components/admin/logs/logs.component.html @@ -5,8 +5,9 @@ i18n-info>
- Show + lines
- +
diff --git a/src-ui/src/app/components/admin/logs/logs.component.ts b/src-ui/src/app/components/admin/logs/logs.component.ts index 48c70218c..95c2dc11c 100644 --- a/src-ui/src/app/components/admin/logs/logs.component.ts +++ b/src-ui/src/app/components/admin/logs/logs.component.ts @@ -100,9 +100,7 @@ export class LogsComponent parsed.some((log, idx) => { const current = this.logs()[idx] return ( - !current || - current.message !== log.message || - current.level !== log.level + current?.message !== log.message || current?.level !== log.level ) }) if (hasChanges) { diff --git a/src-ui/src/app/components/admin/settings/settings.component.html b/src-ui/src/app/components/admin/settings/settings.component.html index 80d7d1524..ed1d2cf3f 100644 --- a/src-ui/src/app/components/admin/settings/settings.component.html +++ b/src-ui/src/app/components/admin/settings/settings.component.html @@ -150,10 +150,10 @@
- Full search links to +
- @@ -199,10 +199,10 @@
Documents
- Items per page +
- @@ -274,10 +274,10 @@
PDF Editor
- Default editing mode +
- diff --git a/src-ui/src/app/components/admin/settings/settings.component.spec.ts b/src-ui/src/app/components/admin/settings/settings.component.spec.ts index 540e7b5c7..3fe69f743 100644 --- a/src-ui/src/app/components/admin/settings/settings.component.spec.ts +++ b/src-ui/src/app/components/admin/settings/settings.component.spec.ts @@ -399,17 +399,17 @@ describe('SettingsComponent', () => { completeSetup() const field = 'storage_path' expect( - component.settingsForm.get('documentDetailsHiddenFields').value.length - ).toEqual(0) + component.settingsForm.get('documentDetailsHiddenFields').value + ).toHaveLength(0) component.toggleDocumentDetailField(field, false) expect( - component.settingsForm.get('documentDetailsHiddenFields').value.length - ).toEqual(1) + component.settingsForm.get('documentDetailsHiddenFields').value + ).toHaveLength(1) expect(component.isDocumentDetailFieldShown(field)).toBeFalsy() component.toggleDocumentDetailField(field, true) expect( - component.settingsForm.get('documentDetailsHiddenFields').value.length - ).toEqual(0) + component.settingsForm.get('documentDetailsHiddenFields').value + ).toHaveLength(0) expect(component.isDocumentDetailFieldShown(field)).toBeTruthy() }) }) diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.html b/src-ui/src/app/components/admin/tasks/tasks.component.html index 05a224a0a..7fae03a7f 100644 --- a/src-ui/src/app/components/admin/tasks/tasks.component.html +++ b/src-ui/src/app/components/admin/tasks/tasks.component.html @@ -15,7 +15,7 @@ Dismiss all
- +
@@ -93,7 +93,8 @@ } - Search tasks +
@@ -211,7 +212,7 @@ - +
+
{ component.input = 'Hello' component.sendMessage() - expect(component.messages.length).toBe(2) + expect(component.messages).toHaveLength(2) expect(component.messages[0].content).toBe('Hello') expect(component.loading).toBe(true) @@ -158,7 +158,7 @@ describe('ChatComponent', () => { const message = { content: '', role: 'assistant', isStreaming: true } component.enqueueTypewriter(null, message as any) // coverage for null component.enqueueTypewriter('Hello', message as any) - expect(component['typewriterBuffer'].length).toBe(4) + expect(component['typewriterBuffer']).toHaveLength(4) }) it('should scroll to bottom after sending a message', () => { diff --git a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html index 9dce30891..0e3329ea3 100644 --- a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html +++ b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html @@ -180,7 +180,7 @@
- + Advanced Filters