From f1559b71082a9a35e8126eba6bc09b1d18987c27 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Mon, 9 Sep 2024 08:34:21 -0700
Subject: [PATCH 01/13] Fix: add permissions to OPTIONS requests for notes
(#7661)
---
src/documents/permissions.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/documents/permissions.py b/src/documents/permissions.py
index a254f8377..464916ad4 100644
--- a/src/documents/permissions.py
+++ b/src/documents/permissions.py
@@ -146,6 +146,7 @@ class PaperlessNotePermissions(BasePermission):
"""
perms_map = {
+ "OPTIONS": ["documents.view_note"],
"GET": ["documents.view_note"],
"POST": ["documents.add_note"],
"DELETE": ["documents.delete_note"],
From bee963c23da2ab5627a008366381f2dedf42995b Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Tue, 10 Sep 2024 13:33:19 -0700
Subject: [PATCH 02/13] Fix: saved view permissions fixes (#7672)
---
.../admin/settings/settings.component.html | 2 +-
.../app-frame/app-frame.component.spec.ts | 4 +-
.../app-frame/app-frame.component.ts | 2 +-
.../services/rest/saved-view.service.spec.ts | 4 +-
.../app/services/rest/saved-view.service.ts | 38 ++++++++++++-------
5 files changed, 30 insertions(+), 20 deletions(-)
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 d146b3657..5b554690e 100644
--- a/src-ui/src/app/components/admin/settings/settings.component.html
+++ b/src-ui/src/app/components/admin/settings/settings.component.html
@@ -332,7 +332,7 @@
-
+
Saved views
diff --git a/src-ui/src/app/components/app-frame/app-frame.component.spec.ts b/src-ui/src/app/components/app-frame/app-frame.component.spec.ts
index c1b53d63d..1354a187e 100644
--- a/src-ui/src/app/components/app-frame/app-frame.component.spec.ts
+++ b/src-ui/src/app/components/app-frame/app-frame.component.spec.ts
@@ -115,7 +115,7 @@ describe('AppFrameComponent', () => {
{
provide: SavedViewService,
useValue: {
- initialize: () => {},
+ reload: () => {},
listAll: () =>
of({
all: [saved_views.map((v) => v.id)],
@@ -170,7 +170,7 @@ describe('AppFrameComponent', () => {
.mockReturnValue('Hello World')
jest.spyOn(permissionsService, 'currentUserCan').mockReturnValue(true)
- savedViewSpy = jest.spyOn(savedViewService, 'initialize')
+ savedViewSpy = jest.spyOn(savedViewService, 'reload')
fixture = TestBed.createComponent(AppFrameComponent)
component = fixture.componentInstance
diff --git a/src-ui/src/app/components/app-frame/app-frame.component.ts b/src-ui/src/app/components/app-frame/app-frame.component.ts
index 4d4968ea4..df6ac65a2 100644
--- a/src-ui/src/app/components/app-frame/app-frame.component.ts
+++ b/src-ui/src/app/components/app-frame/app-frame.component.ts
@@ -73,7 +73,7 @@ export class AppFrameComponent
PermissionType.SavedView
)
) {
- this.savedViewService.initialize()
+ this.savedViewService.reload()
}
}
diff --git a/src-ui/src/app/services/rest/saved-view.service.spec.ts b/src-ui/src/app/services/rest/saved-view.service.spec.ts
index 44ee8c05c..fc2d996a5 100644
--- a/src-ui/src/app/services/rest/saved-view.service.spec.ts
+++ b/src-ui/src/app/services/rest/saved-view.service.spec.ts
@@ -57,7 +57,7 @@ describe(`Additional service tests for SavedViewService`, () => {
let settingsService
it('should retrieve saved views and sort them', () => {
- service.initialize()
+ service.reload()
const req = httpTestingController.expectOne(
`${environment.apiBaseUrl}${endpoint}/?page=1&page_size=100000`
)
@@ -70,7 +70,7 @@ describe(`Additional service tests for SavedViewService`, () => {
})
it('should gracefully handle errors', () => {
- service.initialize()
+ service.reload()
const req = httpTestingController.expectOne(
`${environment.apiBaseUrl}${endpoint}/?page=1&page_size=100000`
)
diff --git a/src-ui/src/app/services/rest/saved-view.service.ts b/src-ui/src/app/services/rest/saved-view.service.ts
index 1b81f2054..274522c71 100644
--- a/src-ui/src/app/services/rest/saved-view.service.ts
+++ b/src-ui/src/app/services/rest/saved-view.service.ts
@@ -6,6 +6,7 @@ import { SavedView } from 'src/app/data/saved-view'
import { AbstractPaperlessService } from './abstract-paperless-service'
import { SettingsService } from '../settings.service'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
+import { Results } from 'src/app/data/results'
@Injectable({
providedIn: 'root',
@@ -21,22 +22,31 @@ export class SavedViewService extends AbstractPaperlessService {
super(http, 'saved_views')
}
- public initialize() {
- this.reload()
+ public list(
+ page?: number,
+ pageSize?: number,
+ sortField?: string,
+ sortReverse?: boolean,
+ extraParams?: any
+ ): Observable> {
+ return super.list(page, pageSize, sortField, sortReverse, extraParams).pipe(
+ tap({
+ next: (r) => {
+ this.savedViews = r.results
+ this.loading = false
+ this.settingsService.dashboardIsEmpty =
+ this.dashboardViews.length === 0
+ },
+ error: () => {
+ this.loading = false
+ this.settingsService.dashboardIsEmpty = true
+ },
+ })
+ )
}
- private reload() {
- this.listAll().subscribe({
- next: (r) => {
- this.savedViews = r.results
- this.loading = false
- this.settingsService.dashboardIsEmpty = this.dashboardViews.length === 0
- },
- error: () => {
- this.loading = false
- this.settingsService.dashboardIsEmpty = true
- },
- })
+ public reload() {
+ this.listAll().subscribe()
}
get allViews() {
From 0d1e0bc70e3cd5919ecb81723734999881ac01e9 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Tue, 10 Sep 2024 13:33:36 -0700
Subject: [PATCH 03/13] Chore(deps): Bump express and related dependencies in
/src-ui (#7674)
* Chore(deps): Bump send and express in /src-ui
Bumps [send](https://github.com/pillarjs/send) and [express](https://github.com/expressjs/express). These dependencies needed to be updated together.
Updates `send` from 0.18.0 to 0.19.0
- [Release notes](https://github.com/pillarjs/send/releases)
- [Changelog](https://github.com/pillarjs/send/blob/master/HISTORY.md)
- [Commits](https://github.com/pillarjs/send/compare/0.18.0...0.19.0)
Updates `express` from 4.19.2 to 4.20.0
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.19.2...4.20.0)
---
updated-dependencies:
- dependency-name: send
dependency-type: indirect
- dependency-name: express
dependency-type: indirect
...
Signed-off-by: dependabot[bot]
* Chore(deps): Bump body-parser and express in /src-ui (#7676)
Bumps [body-parser](https://github.com/expressjs/body-parser) and [express](https://github.com/expressjs/express). These dependencies needed to be updated together.
Updates `body-parser` from 1.20.2 to 1.20.3
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/1.20.2...1.20.3)
Updates `express` from 4.19.2 to 4.20.0
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.19.2...4.20.0)
---
updated-dependencies:
- dependency-name: body-parser
dependency-type: indirect
- dependency-name: express
dependency-type: indirect
...
Signed-off-by: dependabot[bot]
* Chore(deps): Bump serve-static and express in /src-ui (#7677)
Bumps [serve-static](https://github.com/expressjs/serve-static) and [express](https://github.com/expressjs/express). These dependencies needed to be updated together.
Updates `serve-static` from 1.15.0 to 1.16.0
- [Release notes](https://github.com/expressjs/serve-static/releases)
- [Changelog](https://github.com/expressjs/serve-static/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/serve-static/compare/v1.15.0...1.16.0)
Updates `express` from 4.19.2 to 4.20.0
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.19.2...4.20.0)
---
updated-dependencies:
- dependency-name: serve-static
dependency-type: indirect
- dependency-name: express
dependency-type: indirect
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---------
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
src-ui/package-lock.json | 124 +++++++++++++++++++++++++++++++--------
1 file changed, 98 insertions(+), 26 deletions(-)
diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json
index 2b1777fae..a913dfcb3 100644
--- a/src-ui/package-lock.json
+++ b/src-ui/package-lock.json
@@ -7572,9 +7572,9 @@
}
},
"node_modules/body-parser": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
- "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
"dev": true,
"dependencies": {
"bytes": "3.1.2",
@@ -7585,7 +7585,7 @@
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
- "qs": "6.11.0",
+ "qs": "6.13.0",
"raw-body": "2.5.2",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
@@ -7619,6 +7619,21 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
+ "node_modules/body-parser/node_modules/qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "dev": true,
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/bonjour-service": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz",
@@ -9854,37 +9869,37 @@
"dev": true
},
"node_modules/express": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
- "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.20.0.tgz",
+ "integrity": "sha512-pLdae7I6QqShF5PnNTCVn4hI91Dx0Grkn2+IAsMTgMIKuQVte2dN9PeGSSAME2FR8anOhVA62QDIUaWVfEXVLw==",
"dev": true,
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.20.2",
+ "body-parser": "1.20.3",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.6.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "1.2.0",
"fresh": "0.5.2",
"http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
+ "merge-descriptors": "1.0.3",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
+ "path-to-regexp": "0.1.10",
"proxy-addr": "~2.0.7",
"qs": "6.11.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
- "send": "0.18.0",
- "serve-static": "1.15.0",
+ "send": "0.19.0",
+ "serve-static": "1.16.0",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
@@ -9904,6 +9919,15 @@
"ms": "2.0.0"
}
},
+ "node_modules/express/node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/express/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -13931,10 +13955,13 @@
}
},
"node_modules/merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
- "dev": true
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/merge-stream": {
"version": "2.0.0",
@@ -15569,9 +15596,9 @@
}
},
"node_modules/path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
+ "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==",
"dev": true
},
"node_modules/path2d": {
@@ -16662,9 +16689,9 @@
}
},
"node_modules/send": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
- "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
"dev": true,
"dependencies": {
"debug": "2.6.9",
@@ -16794,9 +16821,9 @@
}
},
"node_modules/serve-static": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
- "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.0.tgz",
+ "integrity": "sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA==",
"dev": true,
"dependencies": {
"encodeurl": "~1.0.2",
@@ -16808,6 +16835,51 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/serve-static/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/serve-static/node_modules/debug/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "node_modules/serve-static/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/serve-static/node_modules/send": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
From 9a7f95865f70841643105c957d39e5ff7e7d9063 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Tue, 10 Sep 2024 16:36:45 -0700
Subject: [PATCH 04/13] Chore: mark some more tests as flaky
---
src/paperless_mail/tests/test_mail.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/paperless_mail/tests/test_mail.py b/src/paperless_mail/tests/test_mail.py
index ef359db75..bdadc7450 100644
--- a/src/paperless_mail/tests/test_mail.py
+++ b/src/paperless_mail/tests/test_mail.py
@@ -717,6 +717,7 @@ class TestMail(
],
)
+ @pytest.mark.flaky(reruns=4)
def test_filename_filter_inline_no_consumption(self):
"""
GIVEN:
@@ -1153,6 +1154,7 @@ class TestMail(
self.mailMocker.bogus_mailbox.folder.list.assert_called_once()
self.mailMocker._queue_consumption_tasks_mock.assert_not_called()
+ @pytest.mark.flaky(reruns=4)
@mock.patch("paperless_mail.mail.MailAccountHandler._get_correspondent")
def test_error_skip_mail(self, m):
def get_correspondent_fake(message, rule):
From cb6cf7f7712a60b8f2f5c896d8f8c039315e880e Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Tue, 10 Sep 2024 17:41:31 -0700
Subject: [PATCH 05/13] Chore: Add codecov bundle analysis (#7673)
---
.codecov.yml | 2 +
.github/workflows/ci.yml | 26 +-
src-ui/angular.json | 9 +-
src-ui/extra-webpack.config.ts | 24 ++
src-ui/package-lock.json | 461 +++++++++++++++++++++++++++++++++
src-ui/package.json | 2 +
6 files changed, 520 insertions(+), 4 deletions(-)
create mode 100644 src-ui/extra-webpack.config.ts
diff --git a/.codecov.yml b/.codecov.yml
index d3d07003c..331e3a283 100644
--- a/.codecov.yml
+++ b/.codecov.yml
@@ -14,6 +14,8 @@ flag_management:
# codecov will only comment if coverage changes
comment:
require_changes: true
+ require_bundle_changes: true
+ bundle_change_threshold: "1Kb"
coverage:
status:
project:
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b0092cb1c..a7228ed8b 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -260,7 +260,7 @@ jobs:
retention-days: 7
tests-coverage-upload:
- name: "Upload Coverage"
+ name: "Upload to Codecov"
runs-on: ubuntu-22.04
needs:
- tests-backend
@@ -306,6 +306,30 @@ jobs:
# future expansion
flags: backend
directory: src/
+ -
+ name: Use Node.js 20
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20.x
+ cache: 'npm'
+ cache-dependency-path: 'src-ui/package-lock.json'
+ -
+ name: Cache frontend dependencies
+ id: cache-frontend-deps
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/.npm
+ ~/.cache
+ key: ${{ runner.os }}-frontenddeps-${{ hashFiles('src-ui/package-lock.json') }}
+ -
+ name: Re-link Angular cli
+ run: cd src-ui && npm link @angular/cli
+ -
+ name: Build frontend and upload analysis
+ env:
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
+ run: cd src-ui && ng build --configuration=production
build-docker-image:
name: Build Docker image for ${{ github.ref_name }}
diff --git a/src-ui/angular.json b/src-ui/angular.json
index 7e8b38c87..f15d3a096 100644
--- a/src-ui/angular.json
+++ b/src-ui/angular.json
@@ -52,8 +52,11 @@
},
"architect": {
"build": {
- "builder": "@angular-devkit/build-angular:browser",
+ "builder": "@angular-builders/custom-webpack:browser",
"options": {
+ "customWebpackConfig": {
+ "path": "./extra-webpack.config.ts"
+ },
"outputPath": "dist/paperless-ui",
"outputHashing": "none",
"index": "src/index.html",
@@ -125,7 +128,7 @@
"defaultConfiguration": ""
},
"serve": {
- "builder": "@angular-devkit/build-angular:dev-server",
+ "builder": "@angular-builders/custom-webpack:dev-server",
"options": {
"buildTarget": "paperless-ui:build:en-US"
},
@@ -136,7 +139,7 @@
}
},
"extract-i18n": {
- "builder": "@angular-devkit/build-angular:extract-i18n",
+ "builder": "@angular-builders/custom-webpack:extract-i18n",
"options": {
"buildTarget": "paperless-ui:build"
}
diff --git a/src-ui/extra-webpack.config.ts b/src-ui/extra-webpack.config.ts
new file mode 100644
index 000000000..b53892fc7
--- /dev/null
+++ b/src-ui/extra-webpack.config.ts
@@ -0,0 +1,24 @@
+import * as webpack from 'webpack'
+import {
+ CustomWebpackBrowserSchema,
+ TargetOptions,
+} from '@angular-builders/custom-webpack'
+const { codecovWebpackPlugin } = require('@codecov/webpack-plugin')
+
+export default (
+ config: webpack.Configuration,
+ options: CustomWebpackBrowserSchema,
+ targetOptions: TargetOptions
+) => {
+ if (config.plugins) {
+ config.plugins.push(
+ codecovWebpackPlugin({
+ enableBundleAnalysis: process.env.CODECOV_TOKEN !== undefined,
+ bundleName: 'paperless-ngx',
+ uploadToken: process.env.CODECOV_TOKEN,
+ })
+ )
+ }
+
+ return config
+}
diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json
index a913dfcb3..21251cca3 100644
--- a/src-ui/package-lock.json
+++ b/src-ui/package-lock.json
@@ -37,6 +37,7 @@
"zone.js": "^0.14.8"
},
"devDependencies": {
+ "@angular-builders/custom-webpack": "^18.0.0",
"@angular-builders/jest": "^18.0.0",
"@angular-devkit/build-angular": "^18.2.2",
"@angular-devkit/core": "^18.2.2",
@@ -48,6 +49,7 @@
"@angular-eslint/template-parser": "18.3.0",
"@angular/cli": "~18.2.2",
"@angular/compiler-cli": "~18.2.2",
+ "@codecov/webpack-plugin": "^1.0.1",
"@playwright/test": "^1.46.1",
"@types/jest": "^29.5.12",
"@types/node": "^22.0.2",
@@ -73,6 +75,51 @@
"node": ">=0.10.0"
}
},
+ "node_modules/@actions/core": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz",
+ "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@actions/http-client": "^2.0.1",
+ "uuid": "^8.3.2"
+ }
+ },
+ "node_modules/@actions/core/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@actions/github": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@actions/github/-/github-6.0.0.tgz",
+ "integrity": "sha512-alScpSVnYmjNEXboZjarjukQEzgCRmjMv6Xj47fsdnqGS73bjJNDpiiXmp8jr0UZLdUB6d9jW63IcmddUP+l0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@actions/http-client": "^2.2.0",
+ "@octokit/core": "^5.0.1",
+ "@octokit/plugin-paginate-rest": "^9.0.0",
+ "@octokit/plugin-rest-endpoint-methods": "^10.0.0"
+ }
+ },
+ "node_modules/@actions/http-client": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz",
+ "integrity": "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tunnel": "^0.0.6",
+ "undici": "^5.25.4"
+ }
+ },
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
@@ -99,6 +146,42 @@
"node": "^14.20.0 || ^16.13.0 || >=18.10.0"
}
},
+ "node_modules/@angular-builders/custom-webpack": {
+ "version": "18.0.0",
+ "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-18.0.0.tgz",
+ "integrity": "sha512-XSynPSXHq5+nrh7J2snfrcbvm6YGwUGQRzr7OuO3wURJ6CHOD9C+xEAmvEUWW8c1YjEslVNG7aLtCGz7LA4ymw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@angular-builders/common": "2.0.0",
+ "@angular-devkit/architect": ">=0.1800.0 < 0.1900.0",
+ "@angular-devkit/build-angular": "^18.0.0",
+ "@angular-devkit/core": "^18.0.0",
+ "lodash": "^4.17.15",
+ "webpack-merge": "^5.7.3"
+ },
+ "engines": {
+ "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
+ },
+ "peerDependencies": {
+ "@angular/compiler-cli": "^18.0.0"
+ }
+ },
+ "node_modules/@angular-builders/custom-webpack/node_modules/webpack-merge": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
+ "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "clone-deep": "^4.0.1",
+ "flat": "^5.0.2",
+ "wildcard": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/@angular-builders/jest": {
"version": "18.0.0",
"resolved": "https://registry.npmjs.org/@angular-builders/jest/-/jest-18.0.0.tgz",
@@ -3442,6 +3525,117 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true
},
+ "node_modules/@codecov/bundler-plugin-core": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@codecov/bundler-plugin-core/-/bundler-plugin-core-1.0.1.tgz",
+ "integrity": "sha512-Uo150Qb2s/mMqqfZMdh6rC1+Cp+bCij5DAB6LqWNI6J9dGbimeNvpU1+jdQ6vlMJOiz5w5jAOhtgZvFNrc8jUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@actions/core": "^1.10.1",
+ "@actions/github": "^6.0.0",
+ "chalk": "4.1.2",
+ "semver": "^7.5.4",
+ "unplugin": "^1.10.1",
+ "zod": "^3.22.4"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@codecov/bundler-plugin-core/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@codecov/bundler-plugin-core/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@codecov/bundler-plugin-core/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@codecov/bundler-plugin-core/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@codecov/bundler-plugin-core/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@codecov/bundler-plugin-core/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@codecov/webpack-plugin": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@codecov/webpack-plugin/-/webpack-plugin-1.0.1.tgz",
+ "integrity": "sha512-e6VpcP3adF5ig2OXjb/mrdZ4o8gluKc/IvTAAZfhjX4CWIsnuyRQqFobKyC9nKMRWpIGCsuxdmamyQSrfwXIUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@codecov/bundler-plugin-core": "^1.0.1",
+ "unplugin": "^1.10.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "webpack": "5.x"
+ }
+ },
"node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
@@ -3996,6 +4190,16 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
+ "node_modules/@fastify/busboy": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
+ "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
@@ -5781,6 +5985,178 @@
"node": "^16.13.0 || >=18.0.0"
}
},
+ "node_modules/@octokit/auth-token": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz",
+ "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/core": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz",
+ "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/auth-token": "^4.0.0",
+ "@octokit/graphql": "^7.1.0",
+ "@octokit/request": "^8.3.1",
+ "@octokit/request-error": "^5.1.0",
+ "@octokit/types": "^13.0.0",
+ "before-after-hook": "^2.2.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/endpoint": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz",
+ "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.1.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/graphql": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz",
+ "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/request": "^8.3.0",
+ "@octokit/types": "^13.0.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/openapi-types": {
+ "version": "22.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
+ "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz",
+ "integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^12.6.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": "5"
+ }
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz",
+ "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": {
+ "version": "12.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz",
+ "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^20.0.0"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "10.4.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz",
+ "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^12.6.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": "5"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz",
+ "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": {
+ "version": "12.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz",
+ "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^20.0.0"
+ }
+ },
+ "node_modules/@octokit/request": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz",
+ "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/endpoint": "^9.0.1",
+ "@octokit/request-error": "^5.1.0",
+ "@octokit/types": "^13.1.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/request-error": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz",
+ "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.1.0",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/types": {
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
+ "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^22.2.0"
+ }
+ },
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
@@ -6956,6 +7332,7 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
"integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
"dev": true,
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -7543,6 +7920,13 @@
"integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
"dev": true
},
+ "node_modules/before-after-hook": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
+ "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
"node_modules/big.js": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
@@ -9025,6 +9409,13 @@
"node": ">= 0.8"
}
},
+ "node_modules/deprecation": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/dequal": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
@@ -17950,6 +18341,16 @@
"node": "^16.14.0 || >=18.0.0"
}
},
+ "node_modules/tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
+ }
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -18014,6 +18415,19 @@
"node": ">=14.17"
}
},
+ "node_modules/undici": {
+ "version": "5.28.4",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz",
+ "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@fastify/busboy": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.0"
+ }
+ },
"node_modules/undici-types": {
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
@@ -18096,6 +18510,13 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
+ "node_modules/universal-user-agent": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz",
+ "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/universalify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
@@ -18114,6 +18535,28 @@
"node": ">= 0.8"
}
},
+ "node_modules/unplugin": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.14.0.tgz",
+ "integrity": "sha512-cfkZeALGyW7tKYjZbi0G+pn0XnUFa0QvLIeLJEUUlnU0R8YYsBQnt5+h9Eu1B7AB7KETld+UBFI5lOeBL+msoQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.12.1",
+ "webpack-virtual-modules": "^0.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "webpack-sources": "^3"
+ },
+ "peerDependenciesMeta": {
+ "webpack-sources": {
+ "optional": true
+ }
+ }
+ },
"node_modules/update-browserslist-db": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
@@ -18675,6 +19118,13 @@
}
}
},
+ "node_modules/webpack-virtual-modules": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
+ "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/webpack/node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -19071,6 +19521,7 @@
"resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz",
"integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -19078,6 +19529,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/zod": {
+ "version": "3.23.8",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
+ "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
"node_modules/zone.js": {
"version": "0.14.10",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz",
diff --git a/src-ui/package.json b/src-ui/package.json
index e627aef4d..ef0bf17bc 100644
--- a/src-ui/package.json
+++ b/src-ui/package.json
@@ -39,6 +39,7 @@
"zone.js": "^0.14.8"
},
"devDependencies": {
+ "@angular-builders/custom-webpack": "^18.0.0",
"@angular-builders/jest": "^18.0.0",
"@angular-devkit/build-angular": "^18.2.2",
"@angular-devkit/core": "^18.2.2",
@@ -50,6 +51,7 @@
"@angular-eslint/template-parser": "18.3.0",
"@angular/cli": "~18.2.2",
"@angular/compiler-cli": "~18.2.2",
+ "@codecov/webpack-plugin": "^1.0.1",
"@playwright/test": "^1.46.1",
"@types/jest": "^29.5.12",
"@types/node": "^22.0.2",
From 66a8057e315dbc1888fabff91005d07b4f66df25 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Wed, 11 Sep 2024 09:47:48 -0700
Subject: [PATCH 06/13] Fix: fix display of permissions filter users dropdown
---
src-ui/messages.xlf | 41 ++++++++-----------
...permissions-filter-dropdown.component.html | 36 ++++++++--------
2 files changed, 33 insertions(+), 44 deletions(-)
diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf
index 99831c7e4..18ba85ce4 100644
--- a/src-ui/messages.xlf
+++ b/src-ui/messages.xlf
@@ -2322,7 +2322,7 @@
src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
- 77
+ 76
@@ -4930,7 +4930,7 @@
Hide unowned
src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
- 88
+ 86
@@ -7098,9 +7098,7 @@
- Correspondent:
+ Correspondent:
src/app/components/document-list/filter-editor/filter-editor.component.ts
191,193
@@ -7114,9 +7112,7 @@
- Document type:
+ Document type:
src/app/components/document-list/filter-editor/filter-editor.component.ts
201,203
@@ -7130,9 +7126,7 @@
- Storage path:
+ Storage path:
src/app/components/document-list/filter-editor/filter-editor.component.ts
211,213
@@ -7146,69 +7140,66 @@
- Tag:
+ Tag:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 219,220
+ 219,221
Without any tag
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 224
+ 225
- Custom fields:
+ Custom fields:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 228,230
+ 229,231
Without any custom field
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 234
+ 235
Title:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 238
+ 239
ASN:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 241
+ 242
Owner:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 244
+ 245
Owner not in:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 247
+ 248
Without an owner
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 250
+ 251
diff --git a/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html b/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
index d20986c57..ef2ac224d 100644
--- a/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
+++ b/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
@@ -56,30 +56,28 @@
Unowned
-
Exclude files matching
@@ -4115,7 +4115,7 @@
src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html
44
- Exclude files matching
+ Виключити файли які відповідають
Action
@@ -4131,7 +4131,7 @@
src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html
50
- Only performed if the mail is processed.
+ Виконується лише якщо пошта оброблена.
Action parameter
@@ -5415,7 +5415,7 @@
Hide unowned
src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
- 88
+ 86
Приховати без власника
@@ -7829,12 +7829,12 @@
менше ніж
- Correspondent:
+ Correspondent:
src/app/components/document-list/filter-editor/filter-editor.component.ts
191,193
- Кореспондент:
+ Correspondent:
Without correspondent
@@ -7845,12 +7845,12 @@
Без кореспондента
- Document type:
+ Document type:
src/app/components/document-list/filter-editor/filter-editor.component.ts
201,203
- Тип документа:
+ Document type:
Without document type
@@ -7861,12 +7861,12 @@
Без типу документа
- Storage path:
+ Storage path:
src/app/components/document-list/filter-editor/filter-editor.component.ts
211,213
- Шлях зберігання:
+ Storage path:
Without storage path
@@ -7877,34 +7877,34 @@
Без шляху зберігання
- Tag:
+ Tag:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 219,220
+ 219,221
- Тег:
+ Tag:
Without any tag
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 224
+ 225
Без жодного тегу
- Custom fields:
+ Custom fields:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 228,230
+ 229,231
- Користувацькі поля:
+ Custom fields:
Without any custom field
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 234
+ 235
Без жодного спеціального поля
@@ -7912,7 +7912,7 @@
Title:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 238
+ 239
Назва:
@@ -7920,7 +7920,7 @@
ASN:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 241
+ 242
АСН:
@@ -7928,7 +7928,7 @@
Owner:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 244
+ 245
Власник:
@@ -7936,7 +7936,7 @@
Owner not in:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 247
+ 248
Власник не в:
@@ -7944,7 +7944,7 @@
Without an owner
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 250
+ 251
Без власника
diff --git a/src-ui/src/locale/messages.vi_VN.xlf b/src-ui/src/locale/messages.vi_VN.xlf
index c59d2dd48..f0f5d3b64 100644
--- a/src-ui/src/locale/messages.vi_VN.xlf
+++ b/src-ui/src/locale/messages.vi_VN.xlf
@@ -2525,7 +2525,7 @@
src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
- 77
+ 76
Người dùng
@@ -5415,7 +5415,7 @@
Hide unowned
src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
- 88
+ 86
Hide unowned
@@ -7829,12 +7829,12 @@
less than
- Correspondent:
+ Correspondent:
src/app/components/document-list/filter-editor/filter-editor.component.ts
191,193
- Correspondent:
+ Correspondent:
Without correspondent
@@ -7845,12 +7845,12 @@
Without correspondent
- Document type:
+ Document type:
src/app/components/document-list/filter-editor/filter-editor.component.ts
201,203
- Document type:
+ Document type:
Without document type
@@ -7861,12 +7861,12 @@
Without document type
- Storage path:
+ Storage path:
src/app/components/document-list/filter-editor/filter-editor.component.ts
211,213
- Storage path:
+ Storage path:
Without storage path
@@ -7877,34 +7877,34 @@
Without storage path
- Tag:
+ Tag:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 219,220
+ 219,221
- Tag:
+ Tag:
Without any tag
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 224
+ 225
Without any tag
- Custom fields:
+ Custom fields:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 228,230
+ 229,231
- Custom fields:
+ Custom fields:
Without any custom field
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 234
+ 235
Without any custom field
@@ -7912,7 +7912,7 @@
Title:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 238
+ 239
Title:
@@ -7920,7 +7920,7 @@
ASN:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 241
+ 242
ASN:
@@ -7928,7 +7928,7 @@
Owner:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 244
+ 245
Owner:
@@ -7936,7 +7936,7 @@
Owner not in:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 247
+ 248
Owner not in:
@@ -7944,7 +7944,7 @@
Without an owner
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 250
+ 251
Without an owner
diff --git a/src-ui/src/locale/messages.zh_CN.xlf b/src-ui/src/locale/messages.zh_CN.xlf
index 92a896e09..08fd936e8 100644
--- a/src-ui/src/locale/messages.zh_CN.xlf
+++ b/src-ui/src/locale/messages.zh_CN.xlf
@@ -2525,7 +2525,7 @@
src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
- 77
+ 76
用户
@@ -5415,7 +5415,7 @@
Hide unowned
src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
- 88
+ 86
隐藏无所有者的
@@ -7829,12 +7829,12 @@
低于
- Correspondent:
+ Correspondent:
src/app/components/document-list/filter-editor/filter-editor.component.ts
191,193
- 联系人:
+ Correspondent:
Without correspondent
@@ -7845,12 +7845,12 @@
没有联系人
- Document type:
+ Document type:
src/app/components/document-list/filter-editor/filter-editor.component.ts
201,203
- 文档类型:
+ Document type:
Without document type
@@ -7861,12 +7861,12 @@
没有文档类型
- Storage path:
+ Storage path:
src/app/components/document-list/filter-editor/filter-editor.component.ts
211,213
- 存储路径:
+ Storage path:
Without storage path
@@ -7877,34 +7877,34 @@
没有存储路径
- Tag:
+ Tag:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 219,220
+ 219,221
- 标签:
+ Tag:
Without any tag
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 224
+ 225
没有任何标签
- Custom fields:
+ Custom fields:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 228,230
+ 229,231
- Custom fields:
+ Custom fields:
Without any custom field
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 234
+ 235
Without any custom field
@@ -7912,7 +7912,7 @@
Title:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 238
+ 239
标题:
@@ -7920,7 +7920,7 @@
ASN:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 241
+ 242
ASN:
@@ -7928,7 +7928,7 @@
Owner:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 244
+ 245
所有者:
@@ -7936,7 +7936,7 @@
Owner not in:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 247
+ 248
所有者不在:
@@ -7944,7 +7944,7 @@
Without an owner
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 250
+ 251
没有所有者
diff --git a/src-ui/src/locale/messages.zh_TW.xlf b/src-ui/src/locale/messages.zh_TW.xlf
index c0ff56139..353e30c72 100644
--- a/src-ui/src/locale/messages.zh_TW.xlf
+++ b/src-ui/src/locale/messages.zh_TW.xlf
@@ -2525,7 +2525,7 @@
src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
- 77
+ 76
Users
@@ -5415,7 +5415,7 @@
Hide unowned
src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html
- 88
+ 86
Hide unowned
@@ -7829,12 +7829,12 @@
less than
- Correspondent:
+ Correspondent:
src/app/components/document-list/filter-editor/filter-editor.component.ts
191,193
- Correspondent:
+ Correspondent:
Without correspondent
@@ -7845,12 +7845,12 @@
Without correspondent
- Document type:
+ Document type:
src/app/components/document-list/filter-editor/filter-editor.component.ts
201,203
- Document type:
+ Document type:
Without document type
@@ -7861,12 +7861,12 @@
Without document type
- Storage path:
+ Storage path:
src/app/components/document-list/filter-editor/filter-editor.component.ts
211,213
- Storage path:
+ Storage path:
Without storage path
@@ -7877,34 +7877,34 @@
Without storage path
- Tag:
+ Tag:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 219,220
+ 219,221
- Tag:
+ Tag:
Without any tag
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 224
+ 225
Without any tag
- Custom fields:
+ Custom fields:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 228,230
+ 229,231
- Custom fields:
+ Custom fields:
Without any custom field
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 234
+ 235
Without any custom field
@@ -7912,7 +7912,7 @@
Title:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 238
+ 239
Title:
@@ -7920,7 +7920,7 @@
ASN:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 241
+ 242
ASN:
@@ -7928,7 +7928,7 @@
Owner:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 244
+ 245
Owner:
@@ -7936,7 +7936,7 @@
Owner not in:
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 247
+ 248
Owner not in:
@@ -7944,7 +7944,7 @@
Without an owner
src/app/components/document-list/filter-editor/filter-editor.component.ts
- 250
+ 251
Without an owner
diff --git a/src/locale/ca_ES/LC_MESSAGES/django.po b/src/locale/ca_ES/LC_MESSAGES/django.po
index 1b5cc828f..c8cd984f6 100644
--- a/src/locale/ca_ES/LC_MESSAGES/django.po
+++ b/src/locale/ca_ES/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-28 17:12-0700\n"
-"PO-Revision-Date: 2024-09-06 12:10\n"
+"PO-Revision-Date: 2024-09-13 00:28\n"
"Last-Translator: \n"
"Language-Team: Catalan\n"
"Language: ca_ES\n"
diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po
index a3b7c4813..877790bc0 100644
--- a/src/locale/de_DE/LC_MESSAGES/django.po
+++ b/src/locale/de_DE/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-28 17:12-0700\n"
-"PO-Revision-Date: 2024-09-06 12:10\n"
+"PO-Revision-Date: 2024-09-12 00:28\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Language: de_DE\n"
@@ -1467,7 +1467,7 @@ msgstr "Metadaten"
#: paperless_mail/admin.py:92
msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined."
-msgstr "Folgende Metadaten werden Dokumenten dieser Regel automatisch zugewiesen. Wenn Sie hier nichts auswählen wird Paperless weiterhin alle Zuweisungsalgorithmen ausführen und Metadaten auf Basis des Dokumentinhalts zuweisen."
+msgstr "Folgende Metadaten werden Dokumenten dieser Regel automatisch zugewiesen. Wenn Sie hier nichts auswählen, wird Paperless weiterhin alle Zuweisungsalgorithmen ausführen und Metadaten auf Basis des Dokumentinhalts zuweisen."
#: paperless_mail/apps.py:11
msgid "Paperless mail"
diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po
index 8428966f0..7c18f21a2 100644
--- a/src/locale/es_ES/LC_MESSAGES/django.po
+++ b/src/locale/es_ES/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-28 17:12-0700\n"
-"PO-Revision-Date: 2024-09-08 23:52\n"
+"PO-Revision-Date: 2024-09-16 00:30\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Language: es_ES\n"
@@ -1219,7 +1219,7 @@ msgstr "ninguno"
#: paperless/models.py:70
msgid "LeaveColorUnchanged"
-msgstr ""
+msgstr "DejaColorSinAlterar"
#: paperless/models.py:71
msgid "RGB"
@@ -1227,7 +1227,7 @@ msgstr "RGB"
#: paperless/models.py:72
msgid "UseDeviceIndependentColor"
-msgstr ""
+msgstr "UsarColorDelDispositivo"
#: paperless/models.py:73
msgid "Gray"
@@ -1263,11 +1263,11 @@ msgstr "Establece el valor DPI por defecto"
#: paperless/models.py:131
msgid "Controls the unpaper cleaning"
-msgstr ""
+msgstr "Controla la limpieza de desempapelar"
#: paperless/models.py:138
msgid "Enables deskew"
-msgstr ""
+msgstr "Permite la applicacion deskew"
#: paperless/models.py:141
msgid "Enables page rotation"
diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po
index da766b592..2ea4dcbc5 100644
--- a/src/locale/fr_FR/LC_MESSAGES/django.po
+++ b/src/locale/fr_FR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-28 17:12-0700\n"
-"PO-Revision-Date: 2024-09-08 00:31\n"
+"PO-Revision-Date: 2024-09-12 00:28\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Language: fr_FR\n"
diff --git a/src/locale/hu_HU/LC_MESSAGES/django.po b/src/locale/hu_HU/LC_MESSAGES/django.po
index 9d22f9bd4..74845ca49 100644
--- a/src/locale/hu_HU/LC_MESSAGES/django.po
+++ b/src/locale/hu_HU/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-28 17:12-0700\n"
-"PO-Revision-Date: 2024-08-29 03:10\n"
+"PO-Revision-Date: 2024-09-11 16:49\n"
"Last-Translator: \n"
"Language-Team: Hungarian\n"
"Language: hu_HU\n"
@@ -51,7 +51,7 @@ msgstr ""
#: documents/models.py:62
msgid "Automatic"
-msgstr ""
+msgstr "Automatikus"
#: documents/models.py:65 documents/models.py:419 documents/models.py:1291
#: paperless_mail/models.py:18 paperless_mail/models.py:107
@@ -257,7 +257,7 @@ msgstr "naplók"
#: documents/models.py:401
msgid "Table"
-msgstr ""
+msgstr "Táblázat"
#: documents/models.py:402
msgid "Small Cards"
@@ -269,27 +269,27 @@ msgstr ""
#: documents/models.py:406
msgid "Title"
-msgstr ""
+msgstr "Cím"
#: documents/models.py:407
msgid "Created"
-msgstr ""
+msgstr "Létrehozva"
#: documents/models.py:408
msgid "Added"
-msgstr ""
+msgstr "Hozzáadva"
#: documents/models.py:409
msgid "Tags"
-msgstr ""
+msgstr "Címkék"
#: documents/models.py:410
msgid "Correspondent"
-msgstr ""
+msgstr "Partner"
#: documents/models.py:411
msgid "Document Type"
-msgstr ""
+msgstr "Dokumentum típus"
#: documents/models.py:412
msgid "Storage Path"
@@ -297,19 +297,19 @@ msgstr ""
#: documents/models.py:413
msgid "Note"
-msgstr ""
+msgstr "Megjegyzés"
#: documents/models.py:414
msgid "Owner"
-msgstr ""
+msgstr "Tulajdonos"
#: documents/models.py:415
msgid "Shared"
-msgstr ""
+msgstr "Megosztva"
#: documents/models.py:416
msgid "ASN"
-msgstr ""
+msgstr "Automata serial szám"
#: documents/models.py:422
msgid "show on dashboard"
@@ -677,7 +677,7 @@ msgstr "Dokumentum link"
#: documents/models.py:812
msgid "Select"
-msgstr ""
+msgstr "Válassz"
#: documents/models.py:824
msgid "data type"
diff --git a/src/locale/ja_JP/LC_MESSAGES/django.po b/src/locale/ja_JP/LC_MESSAGES/django.po
index 2d0cbff57..973a8ad63 100644
--- a/src/locale/ja_JP/LC_MESSAGES/django.po
+++ b/src/locale/ja_JP/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-28 17:12-0700\n"
-"PO-Revision-Date: 2024-08-30 12:10\n"
+"PO-Revision-Date: 2024-09-13 12:10\n"
"Last-Translator: \n"
"Language-Team: Japanese\n"
"Language: ja_JP\n"
diff --git a/src/locale/pt_BR/LC_MESSAGES/django.po b/src/locale/pt_BR/LC_MESSAGES/django.po
index 329efb86e..d664e10a7 100644
--- a/src/locale/pt_BR/LC_MESSAGES/django.po
+++ b/src/locale/pt_BR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-28 17:12-0700\n"
-"PO-Revision-Date: 2024-08-29 03:11\n"
+"PO-Revision-Date: 2024-09-13 00:28\n"
"Last-Translator: \n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt_BR\n"
@@ -47,7 +47,7 @@ msgstr "Expressão regular"
#: documents/models.py:61 documents/models.py:975
msgid "Fuzzy word"
-msgstr ""
+msgstr "Palavra difusa"
#: documents/models.py:62
msgid "Automatic"
@@ -257,35 +257,35 @@ msgstr "logs"
#: documents/models.py:401
msgid "Table"
-msgstr ""
+msgstr "Mesa"
#: documents/models.py:402
msgid "Small Cards"
-msgstr ""
+msgstr "Cartões pequenos"
#: documents/models.py:403
msgid "Large Cards"
-msgstr ""
+msgstr "Cartões grandes"
#: documents/models.py:406
msgid "Title"
-msgstr ""
+msgstr "Título"
#: documents/models.py:407
msgid "Created"
-msgstr ""
+msgstr "Criado"
#: documents/models.py:408
msgid "Added"
-msgstr ""
+msgstr "Adicionado"
#: documents/models.py:409
msgid "Tags"
-msgstr ""
+msgstr "Etiquetas"
#: documents/models.py:410
msgid "Correspondent"
-msgstr ""
+msgstr "Correspondente"
#: documents/models.py:411
msgid "Document Type"
@@ -297,15 +297,15 @@ msgstr "Caminho de armazenamento"
#: documents/models.py:413
msgid "Note"
-msgstr ""
+msgstr "Nota"
#: documents/models.py:414
msgid "Owner"
-msgstr ""
+msgstr "Proprietário"
#: documents/models.py:415
msgid "Shared"
-msgstr ""
+msgstr "Compartilhado"
#: documents/models.py:416
msgid "ASN"
@@ -329,15 +329,15 @@ msgstr "odernar reverso"
#: documents/models.py:437
msgid "View page size"
-msgstr ""
+msgstr "Ver tamanho da página"
#: documents/models.py:445
msgid "View display mode"
-msgstr ""
+msgstr "Ver modo de exibição"
#: documents/models.py:452
msgid "Document display fields"
-msgstr ""
+msgstr "Campos de exibição documento"
#: documents/models.py:459 documents/models.py:516
msgid "saved view"
@@ -433,7 +433,7 @@ msgstr "pesquisa de texto completo"
#: documents/models.py:489
msgid "more like this"
-msgstr ""
+msgstr "Mais como este"
#: documents/models.py:490
msgid "has tags in"
@@ -493,7 +493,7 @@ msgstr "não tem proprietário em"
#: documents/models.py:504
msgid "has custom field value"
-msgstr ""
+msgstr "Possui valor de campo personalizado"
#: documents/models.py:505
msgid "is shared by me"
@@ -501,19 +501,19 @@ msgstr "compartilhado por mim"
#: documents/models.py:506
msgid "has custom fields"
-msgstr ""
+msgstr "Possui campos personalizados "
#: documents/models.py:507
msgid "has custom field in"
-msgstr ""
+msgstr "Possui campo personalizado dentro"
#: documents/models.py:508
msgid "does not have custom field in"
-msgstr ""
+msgstr "Não possui campo personalizado dentro"
#: documents/models.py:509
msgid "does not have custom field"
-msgstr ""
+msgstr "Não possui campo personalizado "
#: documents/models.py:519
msgid "rule type"
@@ -677,7 +677,7 @@ msgstr "Link do documento"
#: documents/models.py:812
msgid "Select"
-msgstr ""
+msgstr "Selecione"
#: documents/models.py:824
msgid "data type"
@@ -685,11 +685,11 @@ msgstr "tipo de dados"
#: documents/models.py:831
msgid "extra data"
-msgstr ""
+msgstr "Dados extras"
#: documents/models.py:835
msgid "Extra data for the custom field, such as select options"
-msgstr ""
+msgstr "Dados extras para o campo personalizado, como opções de seleção"
#: documents/models.py:841
msgid "custom field"
@@ -709,7 +709,7 @@ msgstr "instâncias de campo personalizadas"
#: documents/models.py:978
msgid "Consumption Started"
-msgstr ""
+msgstr "Consumo Iniciado"
#: documents/models.py:979
msgid "Document Added"
@@ -733,7 +733,7 @@ msgstr "Busca em e-mail"
#: documents/models.py:988
msgid "Workflow Trigger Type"
-msgstr ""
+msgstr "Tipo de gatilho de fluxo de trabalho"
#: documents/models.py:1000
msgid "filter path"
@@ -741,11 +741,11 @@ msgstr "filtro de caminho"
#: documents/models.py:1005
msgid "Only consume documents with a path that matches this if specified. Wildcards specified as * are allowed. Case insensitive."
-msgstr ""
+msgstr "Apenas utilize documentos que correspondem a esse endereço se especificado. Carácteres coringa usando * são permitidos. Sem diferenciação de maiúsculas e minúsculas."
#: documents/models.py:1012
msgid "filter filename"
-msgstr ""
+msgstr "Filtro de nome de arquivo"
#: documents/models.py:1017 paperless_mail/models.py:162
msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive."
@@ -754,39 +754,39 @@ msgstr "Consumir somente documentos que correspondem a este nome de arquivo se e
#: documents/models.py:1028
msgid "filter documents from this mail rule"
-msgstr ""
+msgstr "Filtrar documentos desta regra de endereço eletrônico"
#: documents/models.py:1044
msgid "has these tag(s)"
-msgstr ""
+msgstr "Possui estas etiquetas"
#: documents/models.py:1052
msgid "has this document type"
-msgstr ""
+msgstr "Possui este tipo de documento"
#: documents/models.py:1060
msgid "has this correspondent"
-msgstr ""
+msgstr "Possui este correspondente"
#: documents/models.py:1064
msgid "workflow trigger"
-msgstr ""
+msgstr "Gatilho do Fluxo de Trabalho"
#: documents/models.py:1065
msgid "workflow triggers"
-msgstr ""
+msgstr "Gatilhos de Fluxo de Trabalho"
#: documents/models.py:1075
msgid "Assignment"
-msgstr ""
+msgstr "Atribuição"
#: documents/models.py:1079
msgid "Removal"
-msgstr ""
+msgstr "Remover"
#: documents/models.py:1083
msgid "Workflow Action Type"
-msgstr ""
+msgstr "Ação do tipo Fluxo de Trabalho"
#: documents/models.py:1089
msgid "assign title"
@@ -818,19 +818,19 @@ msgstr "atribuir este proprietário"
#: documents/models.py:1146
msgid "grant view permissions to these users"
-msgstr ""
+msgstr "Conceder permissões de visualização para esses usuários"
#: documents/models.py:1153
msgid "grant view permissions to these groups"
-msgstr ""
+msgstr "Conceda permissões de visualização a estes grupos"
#: documents/models.py:1160
msgid "grant change permissions to these users"
-msgstr ""
+msgstr "Conceder permissões de mudança a estes usuários"
#: documents/models.py:1167
msgid "grant change permissions to these groups"
-msgstr ""
+msgstr "Conceder permissões de mudança para esses grupos"
#: documents/models.py:1174
msgid "assign these custom fields"
@@ -838,79 +838,79 @@ msgstr "atribuir estes campos personalizados"
#: documents/models.py:1181
msgid "remove these tag(s)"
-msgstr ""
+msgstr "Remova essas etiquetas"
#: documents/models.py:1186
msgid "remove all tags"
-msgstr ""
+msgstr "Remova todas as etiquetas"
#: documents/models.py:1193
msgid "remove these document type(s)"
-msgstr ""
+msgstr "Remova estes tipos de documentos"
#: documents/models.py:1198
msgid "remove all document types"
-msgstr ""
+msgstr "Remova todos os tipos de documentos"
#: documents/models.py:1205
msgid "remove these correspondent(s)"
-msgstr ""
+msgstr "Remova estas correspondências"
#: documents/models.py:1210
msgid "remove all correspondents"
-msgstr ""
+msgstr "Remover todas as correspondências"
#: documents/models.py:1217
msgid "remove these storage path(s)"
-msgstr ""
+msgstr "Remova estes caminhos de armazenamento"
#: documents/models.py:1222
msgid "remove all storage paths"
-msgstr ""
+msgstr "Remova todos os caminhos de armazenamento"
#: documents/models.py:1229
msgid "remove these owner(s)"
-msgstr ""
+msgstr "Remover este(s) proprietário(s)"
#: documents/models.py:1234
msgid "remove all owners"
-msgstr ""
+msgstr "Remover todos os proprietários"
#: documents/models.py:1241
msgid "remove view permissions for these users"
-msgstr ""
+msgstr "Remover permissão de visualização para esses usuários"
#: documents/models.py:1248
msgid "remove view permissions for these groups"
-msgstr ""
+msgstr "Remover permissões de visualização para estes grupos"
#: documents/models.py:1255
msgid "remove change permissions for these users"
-msgstr ""
+msgstr "Remover permissões de alteração para esses usuários"
#: documents/models.py:1262
msgid "remove change permissions for these groups"
-msgstr ""
+msgstr "Remover permissões de alteração para esses grupos"
#: documents/models.py:1267
msgid "remove all permissions"
-msgstr ""
+msgstr "Remover todas as permissões"
#: documents/models.py:1274
msgid "remove these custom fields"
-msgstr ""
+msgstr "Remover esses campos personalizados"
#: documents/models.py:1279
msgid "remove all custom fields"
-msgstr ""
+msgstr "Remover todos os campos personalizados"
#: documents/models.py:1283
msgid "workflow action"
-msgstr ""
+msgstr "Ação de Fluxo de Trabalho"
#: documents/models.py:1284
msgid "workflow actions"
-msgstr ""
+msgstr "Ações de Fluxo de Trabalho"
#: documents/models.py:1293 paperless_mail/models.py:109
msgid "order"
@@ -926,7 +926,7 @@ msgstr "ações"
#: documents/models.py:1309
msgid "enabled"
-msgstr ""
+msgstr "Habilitado"
#: documents/serialisers.py:120
#, python-format
@@ -949,13 +949,14 @@ msgstr "Variável inválida detectada."
#: documents/templates/account/email/base_message.txt:1
#, python-format
msgid "Hello from %(site_name)s!"
-msgstr ""
+msgstr "Olá de %(site_name)s!"
#: documents/templates/account/email/base_message.txt:5
#, python-format
msgid "Thank you for using %(site_name)s!\n"
"%(site_domain)s"
-msgstr ""
+msgstr "Obrigado por usar %(site_name)s!\n"
+"%(site_domain)s"
#: documents/templates/account/login.html:5
msgid "Paperless-ngx sign in"
@@ -968,7 +969,7 @@ msgstr "Por favor, entre na sua conta"
#: documents/templates/account/login.html:12
#, python-format
msgid "Don't have an account yet? Sign up"
-msgstr ""
+msgstr "Ainda não tem uma conta? Registo"
#: documents/templates/account/login.html:19
#: documents/templates/account/signup.html:15
@@ -1000,7 +1001,7 @@ msgstr ""
#: documents/templates/account/password_reset.html:9
msgid "Enter your email address below, and we'll email instructions for setting a new one."
-msgstr ""
+msgstr "Entre no seu endereço de e-mail abaixo e enviaremos um e-mail com instruções para definir uma nova "
#: documents/templates/account/password_reset.html:12
msgid "An error occurred. Please try again."
@@ -1016,7 +1017,7 @@ msgstr "Envie-me instruções!"
#: documents/templates/account/password_reset_done.html:5
msgid "Paperless-ngx reset password sent"
-msgstr ""
+msgstr "Paperless-ngx enviou uma redefinição de senha"
#: documents/templates/account/password_reset_done.html:9
msgid "Check your inbox."
@@ -1061,7 +1062,7 @@ msgstr "Redefinição de senha concluída."
#: documents/templates/account/password_reset_from_key_done.html:14
#, python-format
msgid "Your new password has been set. You can now log in"
-msgstr ""
+msgstr "Sua nova senha foi definida. Agora você pode entrar em"
#: documents/templates/account/signup.html:5
msgid "Paperless-ngx sign up"
@@ -1070,21 +1071,21 @@ msgstr "Registrar-se no Paperless-ngx"
#: documents/templates/account/signup.html:10
#, python-format
msgid "Already have an account? Sign in"
-msgstr ""
+msgstr "Já tem uma conta? U Entrar"
#: documents/templates/account/signup.html:16
#: documents/templates/socialaccount/signup.html:14
msgid "Email (optional)"
-msgstr ""
+msgstr "Email (opcional)"
#: documents/templates/account/signup.html:18
msgid "Password (again)"
-msgstr ""
+msgstr "Senha (novamente)"
#: documents/templates/account/signup.html:36
#: documents/templates/socialaccount/signup.html:27
msgid "Sign up"
-msgstr ""
+msgstr "Cadastre-se"
#: documents/templates/index.html:61
msgid "Paperless-ngx is loading..."
@@ -1109,49 +1110,49 @@ msgstr "O link de compartilhamento expirou."
#: documents/templates/socialaccount/authentication_error.html:5
#: documents/templates/socialaccount/login.html:5
msgid "Paperless-ngx social account sign in"
-msgstr ""
+msgstr "Login de conta social Paperless-ngx"
#: documents/templates/socialaccount/authentication_error.html:10
#, python-format
msgid "An error occurred while attempting to login via your social network account. Back to the login page"
-msgstr ""
+msgstr "Ocorreu um erro ao tentar fazer login através da sua conta de rede social. Volte para a página de login "
#: documents/templates/socialaccount/login.html:10
#, python-format
msgid "You are about to connect a new third-party account from %(provider)s."
-msgstr ""
+msgstr "Você está prestes a conectar uma nova conta de terceiros do %(provider)s."
#: documents/templates/socialaccount/login.html:13
msgid "Continue"
-msgstr ""
+msgstr "Continuar"
#: documents/templates/socialaccount/signup.html:5
msgid "Paperless-ngx social account sign up"
-msgstr ""
+msgstr "Inscrição em conta social Paperless-ngx"
#: documents/templates/socialaccount/signup.html:10
#, python-format
msgid "You are about to use your %(provider_name)s account to login."
-msgstr ""
+msgstr "Você está prestes a usar sua conta %(provider_name)s para entrar."
#: documents/templates/socialaccount/signup.html:11
msgid "As a final step, please complete the following form:"
-msgstr ""
+msgstr "Como etapa final, por favor preencha o seguinte formulário:"
#: documents/validators.py:17
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
-msgstr ""
+msgstr "Não foi possível analisar o URI {value}, faltando esquema"
#: documents/validators.py:22
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
-msgstr ""
+msgstr "Não foi possível analisar URI {value}, faltando local ou localização da rede"
#: documents/validators.py:27
#, python-brace-format
msgid "Unable to parse URI {value}"
-msgstr ""
+msgstr "Não foi possível analisar o URI {value}"
#: paperless/apps.py:10
msgid "Paperless"
@@ -1179,7 +1180,7 @@ msgstr "pdfa-3"
#: paperless/models.py:39
msgid "skip"
-msgstr ""
+msgstr "Pular"
#: paperless/models.py:40
msgid "redo"
@@ -1187,31 +1188,31 @@ msgstr "refazer"
#: paperless/models.py:41
msgid "force"
-msgstr ""
+msgstr "Forçar"
#: paperless/models.py:42
msgid "skip_noarchive"
-msgstr ""
+msgstr "skip_noarchive"
#: paperless/models.py:50
msgid "never"
-msgstr ""
+msgstr "Nunca"
#: paperless/models.py:51
msgid "with_text"
-msgstr ""
+msgstr "Com_Texto"
#: paperless/models.py:52
msgid "always"
-msgstr ""
+msgstr "Sempre"
#: paperless/models.py:60
msgid "clean"
-msgstr ""
+msgstr "Limpar"
#: paperless/models.py:61
msgid "clean-final"
-msgstr ""
+msgstr "Limpo-final"
#: paperless/models.py:62
msgid "none"
@@ -1219,7 +1220,7 @@ msgstr "nenhum"
#: paperless/models.py:70
msgid "LeaveColorUnchanged"
-msgstr ""
+msgstr "Deixe a cor sem mudar"
#: paperless/models.py:71
msgid "RGB"
@@ -1255,15 +1256,15 @@ msgstr "Define o modo OCR"
#: paperless/models.py:116
msgid "Controls the generation of an archive file"
-msgstr ""
+msgstr "Controla a geração de um arquivo"
#: paperless/models.py:124
msgid "Sets image DPI fallback value"
-msgstr ""
+msgstr "Define valor de fallback da imagem DPI"
#: paperless/models.py:131
msgid "Controls the unpaper cleaning"
-msgstr ""
+msgstr "Controla a limpeza de papel"
#: paperless/models.py:138
msgid "Enables deskew"
@@ -1275,15 +1276,15 @@ msgstr ""
#: paperless/models.py:146
msgid "Sets the threshold for rotation of pages"
-msgstr ""
+msgstr "Define o limite para rotação de páginas"
#: paperless/models.py:152
msgid "Sets the maximum image size for decompression"
-msgstr ""
+msgstr "Define o tamanho máximo da imagem para descompressão"
#: paperless/models.py:158
msgid "Sets the Ghostscript color conversion strategy"
-msgstr ""
+msgstr "Define a estratégia de conversão de cor do Ghostscript"
#: paperless/models.py:166
msgid "Adds additional user arguments for OCRMyPDF"
@@ -1519,7 +1520,7 @@ msgstr "senha"
#: paperless_mail/models.py:42
msgid "Is token authentication"
-msgstr ""
+msgstr "É autenticação de token"
#: paperless_mail/models.py:45
msgid "character set"
@@ -1583,7 +1584,7 @@ msgstr "Usar nome do arquivo anexo como título"
#: paperless_mail/models.py:99
msgid "Do not assign title from rule"
-msgstr ""
+msgstr "Não atribuir título da regra"
#: paperless_mail/models.py:102
msgid "Do not assign a correspondent"
@@ -1619,7 +1620,7 @@ msgstr "filtrar de"
#: paperless_mail/models.py:136
msgid "filter to"
-msgstr ""
+msgstr "Filtrar por"
#: paperless_mail/models.py:143
msgid "filter subject"
@@ -1631,15 +1632,16 @@ msgstr "filtrar corpo"
#: paperless_mail/models.py:157
msgid "filter attachment filename inclusive"
-msgstr ""
+msgstr "Filtrar nome do arquivo anexo"
#: paperless_mail/models.py:169
msgid "filter attachment filename exclusive"
-msgstr ""
+msgstr "Filtrar nome do arquivo anexo"
#: paperless_mail/models.py:174
msgid "Do not consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive."
-msgstr ""
+msgstr "Consumir somente documentos que correspondem a este nome de arquivo se especificado.\n"
+"Curingas como *.pdf ou *invoice* são permitidos. Sem diferenciação de maiúsculas e minúsculas."
#: paperless_mail/models.py:181
msgid "maximum age"
@@ -1683,7 +1685,7 @@ msgstr "atribuir correspondente de"
#: paperless_mail/models.py:256
msgid "Assign the rule owner to documents"
-msgstr ""
+msgstr "Atribuir o proprietário da regra aos documentos"
#: paperless_mail/models.py:282
msgid "uid"
diff --git a/src/locale/tr_TR/LC_MESSAGES/django.po b/src/locale/tr_TR/LC_MESSAGES/django.po
index f04aa98ef..784669903 100644
--- a/src/locale/tr_TR/LC_MESSAGES/django.po
+++ b/src/locale/tr_TR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-28 17:12-0700\n"
-"PO-Revision-Date: 2024-08-29 03:11\n"
+"PO-Revision-Date: 2024-09-16 00:30\n"
"Last-Translator: \n"
"Language-Team: Turkish\n"
"Language: tr_TR\n"
@@ -697,7 +697,7 @@ msgstr ""
#: documents/models.py:842
msgid "custom fields"
-msgstr ""
+msgstr "özel alanlar"
#: documents/models.py:906
msgid "custom field instance"
@@ -717,7 +717,7 @@ msgstr ""
#: documents/models.py:980
msgid "Document Updated"
-msgstr ""
+msgstr "Belge Güncellendi"
#: documents/models.py:983
msgid "Consume Folder"
@@ -1069,12 +1069,12 @@ msgstr ""
#: documents/templates/account/signup.html:10
#, python-format
msgid "Already have an account? Sign in"
-msgstr ""
+msgstr "Bir hesabınız mı var? Giriş yapın"
#: documents/templates/account/signup.html:16
#: documents/templates/socialaccount/signup.html:14
msgid "Email (optional)"
-msgstr ""
+msgstr "E-posta(opsiyonel)"
#: documents/templates/account/signup.html:18
msgid "Password (again)"
diff --git a/src/locale/uk_UA/LC_MESSAGES/django.po b/src/locale/uk_UA/LC_MESSAGES/django.po
index aa002a84a..aec8e47d9 100644
--- a/src/locale/uk_UA/LC_MESSAGES/django.po
+++ b/src/locale/uk_UA/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-28 17:12-0700\n"
-"PO-Revision-Date: 2024-09-02 00:29\n"
+"PO-Revision-Date: 2024-09-11 16:49\n"
"Last-Translator: \n"
"Language-Team: Ukrainian\n"
"Language: uk_UA\n"
diff --git a/src/locale/zh_TW/LC_MESSAGES/django.po b/src/locale/zh_TW/LC_MESSAGES/django.po
index 5cc511ae5..5a7e7bc46 100644
--- a/src/locale/zh_TW/LC_MESSAGES/django.po
+++ b/src/locale/zh_TW/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-28 17:12-0700\n"
-"PO-Revision-Date: 2024-08-29 03:10\n"
+"PO-Revision-Date: 2024-09-10 00:28\n"
"Last-Translator: \n"
"Language-Team: Chinese Traditional\n"
"Language: zh_TW\n"
@@ -43,7 +43,7 @@ msgstr "完全符合"
#: documents/models.py:60 documents/models.py:974
msgid "Regular expression"
-msgstr ""
+msgstr "正則表達式"
#: documents/models.py:61 documents/models.py:975
msgid "Fuzzy word"
@@ -51,7 +51,7 @@ msgstr ""
#: documents/models.py:62
msgid "Automatic"
-msgstr ""
+msgstr "自動"
#: documents/models.py:65 documents/models.py:419 documents/models.py:1291
#: paperless_mail/models.py:18 paperless_mail/models.py:107
@@ -257,7 +257,7 @@ msgstr "記錄"
#: documents/models.py:401
msgid "Table"
-msgstr ""
+msgstr "表格"
#: documents/models.py:402
msgid "Small Cards"
@@ -269,47 +269,47 @@ msgstr ""
#: documents/models.py:406
msgid "Title"
-msgstr ""
+msgstr "標題"
#: documents/models.py:407
msgid "Created"
-msgstr ""
+msgstr "已建立"
#: documents/models.py:408
msgid "Added"
-msgstr ""
+msgstr "已新增"
#: documents/models.py:409
msgid "Tags"
-msgstr ""
+msgstr "標籤"
#: documents/models.py:410
msgid "Correspondent"
-msgstr ""
+msgstr "聯絡人"
#: documents/models.py:411
msgid "Document Type"
-msgstr ""
+msgstr "文件類型"
#: documents/models.py:412
msgid "Storage Path"
-msgstr ""
+msgstr "儲存路徑"
#: documents/models.py:413
msgid "Note"
-msgstr ""
+msgstr "備註"
#: documents/models.py:414
msgid "Owner"
-msgstr ""
+msgstr "所有者"
#: documents/models.py:415
msgid "Shared"
-msgstr ""
+msgstr "已分享"
#: documents/models.py:416
msgid "ASN"
-msgstr ""
+msgstr "ASN"
#: documents/models.py:422
msgid "show on dashboard"
@@ -329,11 +329,11 @@ msgstr "倒轉排序"
#: documents/models.py:437
msgid "View page size"
-msgstr ""
+msgstr "頁面大小"
#: documents/models.py:445
msgid "View display mode"
-msgstr ""
+msgstr "顯示模式"
#: documents/models.py:452
msgid "Document display fields"
@@ -573,7 +573,7 @@ msgstr ""
#: documents/models.py:670
msgid "Created DateTime"
-msgstr ""
+msgstr "建立時間"
#: documents/models.py:671
msgid "Datetime field when the task result was created in UTC"
@@ -581,7 +581,7 @@ msgstr ""
#: documents/models.py:676
msgid "Started DateTime"
-msgstr ""
+msgstr "開始時間"
#: documents/models.py:677
msgid "Datetime field when the task was started in UTC"
@@ -589,7 +589,7 @@ msgstr ""
#: documents/models.py:682
msgid "Completed DateTime"
-msgstr ""
+msgstr "完成時間"
#: documents/models.py:683
msgid "Datetime field when the task was completed in UTC"
@@ -609,7 +609,7 @@ msgstr ""
#: documents/models.py:726
msgid "user"
-msgstr ""
+msgstr "使用者"
#: documents/models.py:731
msgid "note"
@@ -621,7 +621,7 @@ msgstr ""
#: documents/models.py:740
msgid "Archive"
-msgstr ""
+msgstr "封存"
#: documents/models.py:741
msgid "Original"
@@ -629,63 +629,63 @@ msgstr ""
#: documents/models.py:752
msgid "expiration"
-msgstr ""
+msgstr "過期時間"
#: documents/models.py:759
msgid "slug"
-msgstr ""
+msgstr "縮寫"
#: documents/models.py:791
msgid "share link"
-msgstr ""
+msgstr "分享連結"
#: documents/models.py:792
msgid "share links"
-msgstr ""
+msgstr "分享連結"
#: documents/models.py:804
msgid "String"
-msgstr ""
+msgstr "字串"
#: documents/models.py:805
msgid "URL"
-msgstr ""
+msgstr "URL"
#: documents/models.py:806
msgid "Date"
-msgstr ""
+msgstr "日期"
#: documents/models.py:807
msgid "Boolean"
-msgstr ""
+msgstr "布林值"
#: documents/models.py:808
msgid "Integer"
-msgstr ""
+msgstr "整數"
#: documents/models.py:809
msgid "Float"
-msgstr ""
+msgstr "浮點數"
#: documents/models.py:810
msgid "Monetary"
-msgstr ""
+msgstr "貨幣"
#: documents/models.py:811
msgid "Document Link"
-msgstr ""
+msgstr "文件連結"
#: documents/models.py:812
msgid "Select"
-msgstr ""
+msgstr "選擇"
#: documents/models.py:824
msgid "data type"
-msgstr ""
+msgstr "資料類型"
#: documents/models.py:831
msgid "extra data"
-msgstr ""
+msgstr "額外資料"
#: documents/models.py:835
msgid "Extra data for the custom field, such as select options"
@@ -693,19 +693,19 @@ msgstr ""
#: documents/models.py:841
msgid "custom field"
-msgstr ""
+msgstr "自訂欄位"
#: documents/models.py:842
msgid "custom fields"
-msgstr ""
+msgstr "自訂欄位"
#: documents/models.py:906
msgid "custom field instance"
-msgstr ""
+msgstr "自訂實例"
#: documents/models.py:907
msgid "custom field instances"
-msgstr ""
+msgstr "自訂實例"
#: documents/models.py:978
msgid "Consumption Started"
@@ -713,11 +713,11 @@ msgstr ""
#: documents/models.py:979
msgid "Document Added"
-msgstr ""
+msgstr "已新增文件"
#: documents/models.py:980
msgid "Document Updated"
-msgstr ""
+msgstr "已更新文件"
#: documents/models.py:983
msgid "Consume Folder"
@@ -725,7 +725,7 @@ msgstr ""
#: documents/models.py:984
msgid "Api Upload"
-msgstr ""
+msgstr "Api上傳"
#: documents/models.py:985
msgid "Mail Fetch"
@@ -737,7 +737,7 @@ msgstr ""
#: documents/models.py:1000
msgid "filter path"
-msgstr ""
+msgstr "過濾路徑"
#: documents/models.py:1005
msgid "Only consume documents with a path that matches this if specified. Wildcards specified as * are allowed. Case insensitive."
@@ -745,7 +745,7 @@ msgstr ""
#: documents/models.py:1012
msgid "filter filename"
-msgstr ""
+msgstr "過濾檔名"
#: documents/models.py:1017 paperless_mail/models.py:162
msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive."
@@ -777,7 +777,7 @@ msgstr ""
#: documents/models.py:1075
msgid "Assignment"
-msgstr ""
+msgstr "分配任務"
#: documents/models.py:1079
msgid "Removal"
@@ -789,7 +789,7 @@ msgstr ""
#: documents/models.py:1089
msgid "assign title"
-msgstr ""
+msgstr "指定標題"
#: documents/models.py:1094
msgid "Assign a document title, can include some placeholders, see documentation."
@@ -797,11 +797,11 @@ msgstr ""
#: documents/models.py:1103 paperless_mail/models.py:230
msgid "assign this tag"
-msgstr ""
+msgstr "指定標籤"
#: documents/models.py:1112 paperless_mail/models.py:238
msgid "assign this document type"
-msgstr ""
+msgstr "指定文件類型"
#: documents/models.py:1121 paperless_mail/models.py:252
msgid "assign this correspondent"
@@ -809,11 +809,11 @@ msgstr "指派這個聯繫者"
#: documents/models.py:1130
msgid "assign this storage path"
-msgstr ""
+msgstr "指定儲存路徑"
#: documents/models.py:1139
msgid "assign this owner"
-msgstr ""
+msgstr "指定所有者"
#: documents/models.py:1146
msgid "grant view permissions to these users"
@@ -841,7 +841,7 @@ msgstr ""
#: documents/models.py:1186
msgid "remove all tags"
-msgstr ""
+msgstr "移除全部標籤"
#: documents/models.py:1193
msgid "remove these document type(s)"
@@ -849,7 +849,7 @@ msgstr ""
#: documents/models.py:1198
msgid "remove all document types"
-msgstr ""
+msgstr "移除全部文件類型"
#: documents/models.py:1205
msgid "remove these correspondent(s)"
@@ -857,7 +857,7 @@ msgstr ""
#: documents/models.py:1210
msgid "remove all correspondents"
-msgstr ""
+msgstr "移除全部聯絡人"
#: documents/models.py:1217
msgid "remove these storage path(s)"
@@ -865,7 +865,7 @@ msgstr ""
#: documents/models.py:1222
msgid "remove all storage paths"
-msgstr ""
+msgstr "移除全部儲存路徑"
#: documents/models.py:1229
msgid "remove these owner(s)"
@@ -873,7 +873,7 @@ msgstr ""
#: documents/models.py:1234
msgid "remove all owners"
-msgstr ""
+msgstr "移除全部所有者"
#: documents/models.py:1241
msgid "remove view permissions for these users"
@@ -893,7 +893,7 @@ msgstr ""
#: documents/models.py:1267
msgid "remove all permissions"
-msgstr ""
+msgstr "移除全部權限"
#: documents/models.py:1274
msgid "remove these custom fields"
@@ -901,7 +901,7 @@ msgstr ""
#: documents/models.py:1279
msgid "remove all custom fields"
-msgstr ""
+msgstr "移除全部自訂欄位"
#: documents/models.py:1283
msgid "workflow action"
@@ -913,28 +913,28 @@ msgstr ""
#: documents/models.py:1293 paperless_mail/models.py:109
msgid "order"
-msgstr ""
+msgstr "排序"
#: documents/models.py:1299
msgid "triggers"
-msgstr ""
+msgstr "觸發器"
#: documents/models.py:1306
msgid "actions"
-msgstr ""
+msgstr "動作"
#: documents/models.py:1309
msgid "enabled"
-msgstr ""
+msgstr "已啟用"
#: documents/serialisers.py:120
#, python-format
msgid "Invalid regular expression: %(error)s"
-msgstr ""
+msgstr "無效的正則表達式: %(error)s"
#: documents/serialisers.py:467
msgid "Invalid color."
-msgstr ""
+msgstr "無效的顏色"
#: documents/serialisers.py:1397
#, python-format
@@ -943,12 +943,12 @@ msgstr ""
#: documents/serialisers.py:1506
msgid "Invalid variable detected."
-msgstr ""
+msgstr "檢測到無效的變數"
#: documents/templates/account/email/base_message.txt:1
#, python-format
msgid "Hello from %(site_name)s!"
-msgstr ""
+msgstr "已收到%(site_name)s的訊息"
#: documents/templates/account/email/base_message.txt:5
#, python-format
@@ -958,40 +958,40 @@ msgstr ""
#: documents/templates/account/login.html:5
msgid "Paperless-ngx sign in"
-msgstr ""
+msgstr "登入 Paperless-ngx"
#: documents/templates/account/login.html:10
msgid "Please sign in."
-msgstr ""
+msgstr "請登入"
#: documents/templates/account/login.html:12
#, python-format
msgid "Don't have an account yet? Sign up"
-msgstr ""
+msgstr "沒有帳號? 註冊"
#: documents/templates/account/login.html:19
#: documents/templates/account/signup.html:15
#: documents/templates/socialaccount/signup.html:13
msgid "Username"
-msgstr ""
+msgstr "使用者名稱"
#: documents/templates/account/login.html:20
#: documents/templates/account/signup.html:17
msgid "Password"
-msgstr ""
+msgstr "密碼"
#: documents/templates/account/login.html:30
msgid "Sign in"
-msgstr ""
+msgstr "登入"
#: documents/templates/account/login.html:34
msgid "Forgot your password?"
-msgstr ""
+msgstr "忘記密碼?"
#: documents/templates/account/login.html:45
#: documents/templates/account/signup.html:49
msgid "or sign in via"
-msgstr ""
+msgstr "或通過以下方式登入"
#: documents/templates/account/password_reset.html:5
msgid "Paperless-ngx reset password request"
@@ -1003,11 +1003,11 @@ msgstr ""
#: documents/templates/account/password_reset.html:12
msgid "An error occurred. Please try again."
-msgstr ""
+msgstr "發生錯誤。請重新嘗試。"
#: documents/templates/account/password_reset.html:15
msgid "Email"
-msgstr ""
+msgstr "電子信箱"
#: documents/templates/account/password_reset.html:21
msgid "Send me instructions!"
@@ -1031,15 +1031,15 @@ msgstr ""
#: documents/templates/account/password_reset_from_key.html:9
msgid "Set a new password."
-msgstr ""
+msgstr "設置新密碼"
#: documents/templates/account/password_reset_from_key.html:15
msgid "request a new password reset"
-msgstr ""
+msgstr "請求密碼重置"
#: documents/templates/account/password_reset_from_key.html:17
msgid "New Password"
-msgstr ""
+msgstr "新密碼"
#: documents/templates/account/password_reset_from_key.html:18
msgid "Confirm Password"
@@ -1074,7 +1074,7 @@ msgstr ""
#: documents/templates/account/signup.html:16
#: documents/templates/socialaccount/signup.html:14
msgid "Email (optional)"
-msgstr ""
+msgstr "電子信箱 (可選)"
#: documents/templates/account/signup.html:18
msgid "Password (again)"
@@ -1083,7 +1083,7 @@ msgstr ""
#: documents/templates/account/signup.html:36
#: documents/templates/socialaccount/signup.html:27
msgid "Sign up"
-msgstr ""
+msgstr "註冊"
#: documents/templates/index.html:61
msgid "Paperless-ngx is loading..."
@@ -1103,7 +1103,7 @@ msgstr ""
#: documents/templates/paperless-ngx/base.html:62
msgid "Share link has expired."
-msgstr ""
+msgstr "分享連結已失效"
#: documents/templates/socialaccount/authentication_error.html:5
#: documents/templates/socialaccount/login.html:5
@@ -1122,7 +1122,7 @@ msgstr ""
#: documents/templates/socialaccount/login.html:13
msgid "Continue"
-msgstr ""
+msgstr "繼續"
#: documents/templates/socialaccount/signup.html:5
msgid "Paperless-ngx social account sign up"
@@ -1158,27 +1158,27 @@ msgstr ""
#: paperless/models.py:26
msgid "pdf"
-msgstr ""
+msgstr "pdf"
#: paperless/models.py:27
msgid "pdfa"
-msgstr ""
+msgstr "pdfa"
#: paperless/models.py:28
msgid "pdfa-1"
-msgstr ""
+msgstr "pdfa-1"
#: paperless/models.py:29
msgid "pdfa-2"
-msgstr ""
+msgstr "pdfa-2"
#: paperless/models.py:30
msgid "pdfa-3"
-msgstr ""
+msgstr "pdfa-3"
#: paperless/models.py:39
msgid "skip"
-msgstr ""
+msgstr "跳過"
#: paperless/models.py:40
msgid "redo"
@@ -1186,7 +1186,7 @@ msgstr ""
#: paperless/models.py:41
msgid "force"
-msgstr ""
+msgstr "強制"
#: paperless/models.py:42
msgid "skip_noarchive"
@@ -1194,7 +1194,7 @@ msgstr ""
#: paperless/models.py:50
msgid "never"
-msgstr ""
+msgstr "從不"
#: paperless/models.py:51
msgid "with_text"
@@ -1202,11 +1202,11 @@ msgstr ""
#: paperless/models.py:52
msgid "always"
-msgstr ""
+msgstr "總是"
#: paperless/models.py:60
msgid "clean"
-msgstr ""
+msgstr "清除"
#: paperless/models.py:61
msgid "clean-final"
@@ -1214,15 +1214,15 @@ msgstr ""
#: paperless/models.py:62
msgid "none"
-msgstr ""
+msgstr "無"
#: paperless/models.py:70
msgid "LeaveColorUnchanged"
-msgstr ""
+msgstr "保持顏色不變"
#: paperless/models.py:71
msgid "RGB"
-msgstr ""
+msgstr "RGB"
#: paperless/models.py:72
msgid "UseDeviceIndependentColor"
@@ -1230,19 +1230,19 @@ msgstr ""
#: paperless/models.py:73
msgid "Gray"
-msgstr ""
+msgstr "灰色"
#: paperless/models.py:74
msgid "CMYK"
-msgstr ""
+msgstr "CMYK"
#: paperless/models.py:83
msgid "Sets the output PDF type"
-msgstr ""
+msgstr "設置 PDF 輸出類型"
#: paperless/models.py:95
msgid "Do OCR from page 1 to this value"
-msgstr ""
+msgstr "從第一頁執行OCR至此位置"
#: paperless/models.py:101
msgid "Do OCR using these languages"
@@ -1250,7 +1250,7 @@ msgstr ""
#: paperless/models.py:108
msgid "Sets the OCR mode"
-msgstr ""
+msgstr "設置 OCR 模式"
#: paperless/models.py:116
msgid "Controls the generation of an archive file"
@@ -1270,7 +1270,7 @@ msgstr ""
#: paperless/models.py:141
msgid "Enables page rotation"
-msgstr ""
+msgstr "啟用頁面旋轉"
#: paperless/models.py:146
msgid "Sets the threshold for rotation of pages"
@@ -1290,7 +1290,7 @@ msgstr ""
#: paperless/models.py:171
msgid "Application title"
-msgstr ""
+msgstr "應用程式標題"
#: paperless/models.py:178
msgid "Application logo"
@@ -1486,7 +1486,7 @@ msgstr ""
#: paperless_mail/models.py:15
msgid "Use SSL"
-msgstr ""
+msgstr "使用SSL"
#: paperless_mail/models.py:16
msgid "Use STARTTLS"