Compare commits

...

892 Commits

Author SHA1 Message Date
Quinn Casey
77cc7cebf9 Fix close paren 2022-03-04 12:29:34 -08:00
Quinn Casey
f61105c041 Ensure build isn't skipped on beta tag 2022-03-04 12:28:03 -08:00
Quinn Casey
b4dc073a48 Add additional translations 2022-03-04 12:01:19 -08:00
Quinn Casey
2324f91622 [skip ci] Changelog update
commit 7a12f84cace09f4c0503ef6475608eee68986305
Author: Quinn Casey <quinn@quinncasey.com>
Date:   Wed Mar 2 09:55:56 2022 -0800

    Update to PR 200

commit 689310678f2e53bc6600e49faeb49668449a5657
Author: Quinn Casey <quinn@quinncasey.com>
Date:   Tue Mar 1 14:51:27 2022 -0800

    Proper tense

commit f42ce25fe770609a4f0bea7342cb4b8b48c84a4d
Author: Quinn Casey <quinn@quinncasey.com>
Date:   Tue Mar 1 14:50:31 2022 -0800

    Add PR 168

commit 95cae8f7eabfa4623f1190bfe004056dccf51bfb
Author: Quinn Casey <quinn@quinncasey.com>
Date:   Tue Mar 1 14:47:27 2022 -0800

    Update to PR 192

commit 0cad422be33412a87cdfe0ca208db72fc75a9098
Author: Quinn Casey <quinn@quinncasey.com>
Date:   Tue Feb 22 09:21:46 2022 -0800

    Update to PR 131

commit 01eb86c242bbe6cc0768012b68e5bb55adcf84f9
Author: Quinn Casey <quinn@quinncasey.com>
Date:   Fri Feb 18 11:15:21 2022 -0800

    Added more people

commit 29c2d714747201daeb7191f54602d3a792194657
Author: Quinn Casey <quinn@quinncasey.com>
Date:   Fri Feb 18 10:50:11 2022 -0800

    Update changelog up to PR 91

commit f17f237b41ff0d6ff6746e0efe64a91d38b21f7a
Author: Quinn Casey <quinn@quinncasey.com>
Date:   Thu Feb 17 10:21:36 2022 -0800

    Remove trailing whitespace

commit 34f28195261846261849378b6839a075a926e28d
Author: Quinn Casey <quinn@quinncasey.com>
Date:   Thu Feb 17 10:07:10 2022 -0800

    Update changelog up to PR 77
2022-03-04 11:28:57 -08:00
Quinn Casey
6b5c89b6f8 Tag on beta to prerelease 2022-03-04 09:15:59 -08:00
Quinn Casey
e5e94ffb6d Move build-docker-image before release pipeline 2022-03-04 08:36:13 -08:00
Quinn Casey
e3584eb61e Add beta to docker build 2022-03-04 08:31:17 -08:00
Michael Shamoon
bb5d8497c9 1.6.0-rc1 version string 2022-03-04 08:30:03 -08:00
Quinn Casey
3ea6028c9f Merge pull request #209 from paperless-ngx/feature-ci-ngx-dirs
Update CI from -ng to -ngx
2022-03-04 08:28:01 -08:00
shamoon
6e901ff362 Merge pull request #206 from paperless-ngx/update-docs-migration-ng-to-ngx
Add information about switching from -ng to -ngx
2022-03-03 13:23:03 -08:00
shamoon
d1032e4d7d Fix the grammars in setup.rst 2022-03-03 13:20:29 -08:00
Michael Shamoon
67efda7cf4 Add migration line to readme 2022-03-03 13:02:58 -08:00
shamoon
0545d9bab7 More explicit instructions 2022-03-03 12:55:34 -08:00
shamoon
a233e5d404 Add note to pull new image 2022-03-03 11:07:48 -08:00
shamoon
2484563ac7 Add information about switching from -ng to -ngx
Closes #204
2022-03-03 10:11:58 -08:00
Paperless Translation Bot
4d4ed7bc7b New Crowdin updates (#202)
* New translations django.po (Danish)
[ci skip]

* New translations messages.xlf (Danish)
[ci skip]

* New translations messages.xlf (Danish)
[ci skip]

* New translations django.po (French)
[ci skip]

* New translations django.po (French)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations django.po (Danish)
[ci skip]

* New translations messages.xlf (French)
[ci skip]
2022-03-03 09:40:22 -08:00
Ingo Sigmund
ff9df4a6ed Merge pull request #173 from paperless-ngx/feature-fix-install-script
Install: Ask for database folder mount when using postgres
2022-03-03 10:16:47 +01:00
Paperless Translation Bot
fdc051114b New Crowdin updates (#201)
* New translations django.po (Romanian)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Greek)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Korean)
[ci skip]

* New translations messages.xlf (Dutch)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations messages.xlf (Russian)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Swedish)
[ci skip]

* New translations messages.xlf (Chinese Traditional)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations messages.xlf (Khmer)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]

* New translations django.po (Danish)
[ci skip]

* New translations messages.xlf (Czech)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations django.po (French)
[ci skip]

* New translations django.po (Polish)
[ci skip]

* New translations django.po (Spanish)
[ci skip]

* New translations django.po (Czech)
[ci skip]

* New translations django.po (German)
[ci skip]

* New translations django.po (Greek)
[ci skip]

* New translations django.po (Hebrew)
[ci skip]

* New translations django.po (Italian)
[ci skip]

* New translations django.po (Korean)
[ci skip]

* New translations django.po (Dutch)
[ci skip]

* New translations django.po (Portuguese)
[ci skip]

* New translations messages.xlf (Romanian)
[ci skip]

* New translations django.po (Russian)
[ci skip]

* New translations django.po (Slovenian)
[ci skip]

* New translations django.po (Swedish)
[ci skip]

* New translations django.po (Chinese Traditional)
[ci skip]

* New translations django.po (Portuguese, Brazilian)
[ci skip]

* New translations django.po (Khmer)
[ci skip]

* New translations django.po (Luxembourgish)
[ci skip]

* New translations django.po (Arabic, Saudi Arabia)
[ci skip]

* New translations messages.xlf (Danish)
[ci skip]
2022-03-02 14:42:46 -08:00
shamoon
7aa8dcb0e3 Merge pull request #195 from paperless-ngx/update-ngx-in-docs
Update remaining references to -ngx
2022-03-02 14:17:27 -08:00
Quinn Casey
37531ec5e0 Fix "incorrect type" YAML error 2022-03-02 12:18:29 -08:00
Marc Schaefer
f8991ca8e0 Switch ci.yml from ng to ngx 2022-03-02 21:00:43 +01:00
Michael Shamoon
cd9c46e88e Update django.po 2022-03-02 11:27:53 -08:00
Michael Shamoon
04c28d4105 Update Angular messages.xlf 2022-03-02 11:21:39 -08:00
Quinn Casey
59975087c5 Update paperless-ng to paperless-ngx 2022-03-02 11:18:17 -08:00
Michael Shamoon
0f804937f7 Update -ngx in django templates / urls 2022-03-02 11:05:34 -08:00
Michael Shamoon
f3cda7d551 Fix more -ngx references 2022-03-02 10:59:54 -08:00
shamoon
209dba6a4a Fix some -ngx references, -ngx community support 2022-03-02 10:04:27 -08:00
Quinn Casey
43bc42826b Add newline 2022-03-02 10:03:37 -08:00
Quinn Casey
004375b478 Add org.opencontainers.image labels 2022-03-02 10:03:37 -08:00
Quinn Casey
49a1c3f8c2 Update maintainer email 2022-03-02 10:03:37 -08:00
Quinn Casey
c748394ff0 Update docs, yml to -ngx 2022-03-02 10:03:37 -08:00
Quinn Casey
9d246b1ad4 Merge pull request #193 from tim-vogel/fix_191
fix document_export issue (#191)
2022-03-02 09:46:30 -08:00
shamoon
038dc21c78 Merge pull request #199 from jschpp/fix-upstream#1672
Switched to `flag()`
2022-03-02 09:39:04 -08:00
Tim Vogel
7c758c0750 fix document_export issue (#191) 2022-03-02 09:35:02 -08:00
Johannes Schöpp
0925c90047 Switched to flag()
Newer versions of imap_tools moved away from `seen()` in favour of
`flag()` and deprecated the former.

This fixes https://github.com/jonaswinkler/paperless-ng/issues/1672

I also remove the mocked `seen()` function and updated the `flag()` mock
2022-03-02 17:48:02 +01:00
shamoon
74b94bc66a Add documents screenshots w browser chrome 2022-03-02 15:49:50 +01:00
shamoon
65e2177964 Add fixpending label to prevent stale 2022-03-02 15:49:50 +01:00
shamoon
a48c6e5b43 Update stale.yml 2022-03-02 15:49:50 +01:00
shamoon
b00f3102a6 Create stale.yml 2022-03-02 15:49:50 +01:00
Stéphane Brunner
f8679a251e Use the image on ghcr.io (#104) 2022-03-02 15:49:50 +01:00
Johann Bauer
9484eb9f6b Enable dependabot for repository (#86) 2022-03-02 15:49:50 +01:00
shamoon
dd6c25be13 Merge pull request #196 from paperless-ngx/fix-angular13-bs5-fixes-2
Angular 13 Bootstrap 5 fixes #2
2022-03-02 01:00:38 -08:00
shamoon
4e917b249d Fix scroll always visible on filterable dropdowns 2022-03-02 00:48:36 -08:00
shamoon
a87f96d780 Fix date dropdown bs5 compatability 2022-03-02 00:48:20 -08:00
shamoon
b959455ff8 Merge pull request #192 from paperless-ngx/fix-angular13-bs5-fixes-1
Angular 13 / Bootstrap 5 Fixes no. 1

Closes #189 and closes #188
2022-03-01 13:41:47 -08:00
Quinn Casey
1e6c666df4 CI: Fix multi stage builds (#190)
* Try fixing build error

* --upgrade instead of --update

* Attempt to fix timeout

* Try build qpdf on arm64

* Revert "Try build qpdf on arm64"

This reverts commit 42823a4d28.

* Format

* Try with libqpdf-dev install

* Move libqpdf-dev install to else

* Try with correct uname

* Run docker container to extract frontend

Co-authored-by: Johann Bauer <bauerj@bauerj.eu>
2022-03-01 12:48:26 -08:00
Michael Shamoon
1fd0f45a02 fix filterable dropdown text color when open 2022-03-01 12:32:06 -08:00
Michael Shamoon
93487b1aeb Fix bs5 selects 2022-03-01 12:25:22 -08:00
Quinn Casey
0772231ac0 Merge pull request #185 from paperless-ngx/fix-build-prod-warning
Fix build --prod depreciated warning
2022-02-28 14:38:05 -08:00
shamoon
37a5627b40 Merge pull request #174 from paperless-ngx/22-02-deps-fix
Fix dependency conflicts, broken frontend build
2022-02-28 14:33:12 -08:00
Quinn Casey
a679a1966a Fix build --prod depreciated warning 2022-02-28 12:39:28 -08:00
Michael Shamoon
b21e8a77be Bump build-angular to 13.2.5 2022-02-28 12:26:29 -08:00
Quinn Casey
049a2dde96 Merge pull request #18 from benjaminfrank/systemd-socket-port-80
Enable non-root port 80 via systemd
2022-02-28 11:17:50 -08:00
Ingo Sigmund
78a4891dfc Merge pull request #159 from paperless-ngx/pipfile-update 2022-02-28 19:46:39 +01:00
Quinn Casey
5c9c10a6db Merge pull request #168 from kpj/feature-black
GitHub Actions workflow for black code formatting
2022-02-28 10:32:10 -08:00
Michael Shamoon
16cb3ee779 Dont downgrade tslib 2022-02-28 09:37:33 -08:00
Quinn Casey
5bfadc2147 Remove comment used for testing 2022-02-28 08:18:50 -08:00
Quinn Casey
80d05add03 Ask for database folder is using postgres 2022-02-28 08:07:57 -08:00
Quinn Casey
3493f4da7b Use $DATABASE_BACKEND to echo SQLite or not 2022-02-28 07:52:01 -08:00
Quinn Casey
374ce47fcd Swap Folder and Application config steps 2022-02-28 07:45:43 -08:00
Quinn Casey
bc58e459ea Merge branch 'dev' into feature-black 2022-02-28 07:31:52 -08:00
Quinn Casey
25c8fe5c0e Merge pull request #172 from paperless-ngx/l10n_dev
New Crowdin updates
2022-02-28 06:29:40 -08:00
Quinn Casey
dad9de3be3 Merge pull request #161 from stumpylog/multistep-build
Refactor: Do the npm compile as a Build step in docker (Multistep build)
2022-02-28 06:09:17 -08:00
Paperless Translation Bot
f8d1fc749c New translations messages.xlf (Chinese Traditional)
[ci skip]
2022-02-28 01:41:16 -08:00
kpj
bbd4da5a27 Revert "Update Pipfile.lock"
This reverts commit acc94dcde0.
2022-02-28 09:51:13 +01:00
kpj
acc94dcde0 Update Pipfile.lock 2022-02-28 09:42:44 +01:00
kpj
72685b0330 Add black to dev-packages section of Pipfile 2022-02-28 09:42:30 +01:00
Felix E
cffd59f9ba Merge pull request #170 from paperless-ngx/qcasey-patch-1
Fix typo in `extending.rst`
2022-02-28 08:54:30 +01:00
Michael Shamoon
c5e55be84a Update package-lock.json, add popper 2022-02-27 22:32:00 -08:00
Quinn Casey
03b48078df Decrement build-angular 2022-02-27 19:39:47 -08:00
Quinn Casey
f0908f3a58 Bump deps to fix TypeError, downgrade tslib for compat 2022-02-27 19:14:33 -08:00
Quinn Casey
49e6e54e0b Restructure README.md (#147)
* Restructure readme

* Fix line break

* Add Matrix badge

* Some grammar, removed comparison to Paperless

* Remove comparison to original paperless

* Updated documents screenshot (also dark / light)

* Reorganize a little, add demo

* fix link

* Demo note, fix TOC, add -ngx

* Make the logo smaller

For once its not 'make the logo bigger'

* Reorganizing, move more translation stuff into contributing.md

* fix 'community support' links

* https for demo

* Update autogenerated TOC

* Change GHCR.io to Github Packages

* Add curl install script

* Remove demo heading

* Remove trailing whitespace

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
Co-authored-by: Felix Eckhofer <felix@eckhofer.com>
2022-02-27 17:55:33 -08:00
Quinn Casey
cbe4e698c5 Fix typo in extending.rst
```
unknown shorthand flag: 'r' in -restart
See 'docker run --help'.
```

I think this should be `--restart`
2022-02-27 17:02:00 -08:00
Quinn Casey
aa39abc41a Merge pull request #156 from paperless-ngx/docker-fix-ci
Fix Armv7 Docker Build
2022-02-27 16:54:22 -08:00
Quinn Casey
c0ce6e28d4 Add black to docs and CONTRIBUTING 2022-02-27 12:35:26 -08:00
kpj
9b42c0aa50 Make pycodestyle ignore E203
See https://github.com/psf/black/issues/315 for more details.
2022-02-27 15:46:12 +01:00
kpj
f7caad9af9 Run pycodestyle with --max-line-length=88 to match black's defaults 2022-02-27 15:42:26 +01:00
kpj
992406d5a0 Format remaining Python files 2022-02-27 15:37:20 +01:00
kpj
60ad0bb4e2 Run black on all files in project root 2022-02-27 15:36:16 +01:00
kpj
f23d53fe1a Remove --verbose parameter from black call 2022-02-27 15:33:10 +01:00
kpj
12fa3c7417 Fix wrong job name in CI dependency list 2022-02-27 15:30:49 +01:00
kpj
fc695896dd Format Python code with black 2022-02-27 15:26:41 +01:00
kpj
13885968e3 Add GitHub Actions workflow to check black formatting 2022-02-27 15:21:20 +01:00
shamoon
e331f23bb0 Merge pull request #165 from paperless-ngx/feature-logo-2022
New -ngx logo 2022
2022-02-27 06:09:51 -08:00
Ingo Sigmund
d89ac59004 Merge pull request #163 from paperless-ngx/bauerj-patch-1
Fix whitespace issue in scanners.rst
2022-02-27 08:42:21 +01:00
Paperless Translation Bot
5b365a15c5 New Crowdin updates (#154)
* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (German)
[ci skip]
2022-02-26 20:48:43 -08:00
Michael Shamoon
d8617746eb New -ngx logo 2022
Cause why not
2022-02-26 20:14:24 -08:00
Johann Bauer
1a830eb555 Fix whitespace issue in scanners.rst 2022-02-26 23:21:25 +01:00
Gabriel Augendre
bb0e858dfe Update QuickScan name and add WebDAV capability
QuickScan is now named "OCR Scanner - QuickScan" as per the App Store listing.
It also supports WebDAV.
2022-02-26 22:52:18 +01:00
Johann Bauer
4377998232 Fix Armv7 Docker build 2022-02-26 13:43:48 +01:00
Trenton Holmes
6852127c33 Adds missing step to run npm install 2022-02-25 14:23:40 -08:00
Trenton Holmes
83e40f3e87 Updates node version to 16 for the builder image 2022-02-25 14:23:40 -08:00
Toxix
31d96ea85b Fix node version
From automatic codereview. We should use a specific node version.

We are using the same version that was used before in the github
pipeline.
2022-02-25 14:23:40 -08:00
Toxix
9f895fe65f Doc Update docs for frontend-compile
As frontend compile step is done now inside docker container, we do not
need to do it before. This is updating the documentation so it reflects
the code changes made.
2022-02-25 14:23:40 -08:00
Toxix
84f96d7a98 Feat adjust github pipeline for docker frontend artifacts
This should allow to use docker building the frontend artifacts and
reusing them in the bare metal release.
2022-02-25 14:23:40 -08:00
Toxix
a6144e9692 Refector: Do the npm compile as a Build step
This removes the requirement of npm on the host system and removes an
additional manual step during the building of the docker image.

Updated the documentation accordingly and fixed a typo.
2022-02-25 14:23:40 -08:00
Johann Bauer
88d5bdc8bf Enable GitHub CodeQL (#160) 2022-02-25 23:20:14 +01:00
Johann Bauer
c2fae07c11 Update dependencies 2022-02-25 22:38:31 +01:00
shamoon
2309b12a31 Merge pull request #149 from paperless-ngx/fix-misc-frontend-fixes
Misc frontend fixes
2022-02-25 01:21:03 -08:00
Michael Shamoon
8dc57e8e87 fix position and bs5 underline of suggestion link 2022-02-25 01:17:05 -08:00
Michael Shamoon
da4c6e8fb6 force ng2-pdf-viewer page width 2022-02-25 01:10:26 -08:00
Michael Shamoon
a1a01870e6 card checkboxes werent clickable 2022-02-25 00:49:32 -08:00
Michael Shamoon
80d2f34ad0 Fix pdf border 2022-02-25 00:47:27 -08:00
Timo Heckel
b5b7cf67bf Update .env (#102)
added visual indicator that pipenv is active
2022-02-24 17:05:19 +01:00
Quinn Casey
ca87b6dbfd Merge pull request #144 from paperless-ngx/tags-ngx
Make CI build from tags starting with ngx-
2022-02-24 08:02:41 -08:00
Quinn Casey
7cfad2d7ef Merge pull request #145 from paperless-ngx/fix-docker-build
Fix `build-docker-image` CI step
2022-02-24 08:00:13 -08:00
dependabot[bot]
ae18b82282 Bump django-cors-headers from 3.8.0 to 3.11.0 (#95)
Bumps [django-cors-headers](https://github.com/adamchainz/django-cors-headers) from 3.8.0 to 3.11.0.
- [Release notes](https://github.com/adamchainz/django-cors-headers/releases)
- [Changelog](https://github.com/adamchainz/django-cors-headers/blob/main/HISTORY.rst)
- [Commits](https://github.com/adamchainz/django-cors-headers/compare/3.8.0...3.11.0)

---
updated-dependencies:
- dependency-name: django-cors-headers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-24 16:48:56 +01:00
Johann Bauer
701506e569 Fix build-docker-image CI step 2022-02-24 16:43:57 +01:00
dependabot[bot]
2f04e0de85 Bump uvicorn from 0.15.0 to 0.17.5 (#92)
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.15.0 to 0.17.5.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.15.0...0.17.5)

---
updated-dependencies:
- dependency-name: uvicorn
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-24 16:08:23 +01:00
dependabot[bot]
a561cfe808 Bump pikepdf from 2.16.1 to 5.0.1 (#143)
Bumps [pikepdf](https://github.com/pikepdf/pikepdf) from 2.16.1 to 5.0.1.
- [Release notes](https://github.com/pikepdf/pikepdf/releases)
- [Changelog](https://github.com/pikepdf/pikepdf/blob/master/docs/release_notes.rst)
- [Commits](https://github.com/pikepdf/pikepdf/compare/v2.16.1...v5.0.1)

---
updated-dependencies:
- dependency-name: pikepdf
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-24 15:40:46 +01:00
Johann Bauer
9ce3708647 Make CI build from tags starting with ngx- 2022-02-24 15:19:25 +01:00
Johann Bauer
9dcfda1f41 Drop support for Python 3.7 (#142) 2022-02-24 15:07:30 +01:00
Quinn Casey
e23859f776 Update project name, copyright (#55)
* Update project name, copyright

* Update copyright to 2015-2022

* Scrub README.md for references to paperless-ng

* Update badges

* Update instances of paperless-ngx

* Remove ansible role

Co-authored-by: Daniel Blittschau <d@dblitt.com>
2022-02-24 15:00:21 +01:00
Paperless Translation Bot
ae94b90fe4 New Crowdin updates (#135)
* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Greek)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Dutch)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations messages.xlf (Russian)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Swedish)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]

* New translations messages.xlf (Czech)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Romanian)
[ci skip]

* New translations messages.xlf (Chinese Traditional)
[ci skip]

* New translations messages.xlf (Khmer)
[ci skip]

* New translations django.po (Portuguese)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Greek)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Korean)
[ci skip]

* New translations messages.xlf (Dutch)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations messages.xlf (Russian)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Swedish)
[ci skip]

* New translations messages.xlf (Chinese Traditional)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations messages.xlf (Khmer)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]

* New translations messages.xlf (Czech)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Romanian)
[ci skip]

* New translations messages.xlf (Danish)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Czech)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (Dutch)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Russian)
[ci skip]

* New translations messages.xlf (Swedish)
[ci skip]

* New translations messages.xlf (Romanian)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]
2022-02-23 13:37:45 -08:00
shamoon
cbac6fc8d5 Merge pull request #138 from paperless-ngx/fix-angular-translation-source
Regenerate angular messages.xlf, see https://github.com/paperless-ngx/paperless-ngx/pull/135#issuecomment-1048970786
2022-02-23 13:13:13 -08:00
Michael Shamoon
5941c383b6 Remove strings from node_modules
See https://github.com/angular/angular-cli/issues/18885
2022-02-23 08:40:29 -08:00
Michael Shamoon
396c3fb554 Regenerate angular messages.xlf 2022-02-23 08:30:20 -08:00
Alexander Bauer
dbdd9b93f8 Merge pull request #133 from muellermartin/fix-png-alpha
Remove alpha layer from PNG files for img2pdf
2022-02-22 20:02:18 -05:00
Quinn Casey
84e7e74d00 Merge pull request #132 from paperless-ngx/named-volumes
Use a named volume for broker
2022-02-22 12:41:23 -08:00
Yannic Schröder
0103e6546f Merge pull request #124 from paperless-ngx/feature-configure-port
Allow specifying port through PAPERLESS_PORT environment variable
2022-02-22 21:37:53 +01:00
Felix Eckhofer
a1f09bdc4e Clarify description of PAPERLESS_PORT 2022-02-22 21:06:28 +01:00
Quinn Casey
ba561604f0 Add back line break (curse you gitlens) 2022-02-22 10:09:34 -08:00
Quinn Casey
bad4be4cbc Use a named volume for broker 2022-02-22 10:01:09 -08:00
Quinn Casey
2f7c351039 Merge pull request #109 from slankes/removeansible
chore: remove ansible playbooks and documentation
2022-02-22 07:53:04 -08:00
shamoon
4b05a18e3e Merge pull request #129 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/angular/platform-browser-dynamic-13.2.3
Bump @angular/platform-browser-dynamic from 13.2.2 to 13.2.3 in /src-ui
2022-02-21 21:26:13 -08:00
dependabot[bot]
b7352e255e Bump @angular/platform-browser-dynamic from 13.2.2 to 13.2.3 in /src-ui
Bumps [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) from 13.2.2 to 13.2.3.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/master/docs/RELEASE_SCHEDULE.md)
- [Commits](https://github.com/angular/angular/commits/13.2.3/packages/platform-browser-dynamic)

---
updated-dependencies:
- dependency-name: "@angular/platform-browser-dynamic"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-22 05:24:40 +00:00
shamoon
1408270fb1 Merge pull request #131 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/angular/localize-13.2.3
Bump @angular/localize from 13.2.2 to 13.2.3 in /src-ui
2022-02-21 21:24:01 -08:00
shamoon
cd46b7ae45 Merge pull request #126 from paperless-ngx/l10n_dev
New Crowdin updates
2022-02-21 21:21:37 -08:00
dependabot[bot]
6ad5d19cf8 Bump @angular/localize from 13.2.2 to 13.2.3 in /src-ui
Bumps [@angular/localize](https://github.com/angular/angular) from 13.2.2 to 13.2.3.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/master/docs/RELEASE_SCHEDULE.md)
- [Commits](https://github.com/angular/angular/compare/13.2.2...13.2.3)

---
updated-dependencies:
- dependency-name: "@angular/localize"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-22 05:15:02 +00:00
shamoon
66bbf322c5 Merge pull request #128 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/angular/platform-browser-13.2.3
Bump @angular/platform-browser from 13.2.2 to 13.2.3 in /src-ui
2022-02-21 21:14:03 -08:00
dependabot[bot]
7bdd397c78 Bump @angular/platform-browser from 13.2.2 to 13.2.3 in /src-ui
Bumps [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser) from 13.2.2 to 13.2.3.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/master/docs/RELEASE_SCHEDULE.md)
- [Commits](https://github.com/angular/angular/commits/13.2.3/packages/platform-browser)

---
updated-dependencies:
- dependency-name: "@angular/platform-browser"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-22 05:12:34 +00:00
shamoon
86069c291f Merge pull request #127 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/jasmine-core-4.0.1
Bump jasmine-core from 3.6.0 to 4.0.1 in /src-ui
2022-02-21 21:04:43 -08:00
shamoon
ba87146c61 Merge pull request #130 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/types/jasminewd2-2.0.10
Bump @types/jasminewd2 from 2.0.8 to 2.0.10 in /src-ui
2022-02-21 21:04:24 -08:00
dependabot[bot]
47e177a575 Bump @types/jasminewd2 from 2.0.8 to 2.0.10 in /src-ui
Bumps [@types/jasminewd2](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jasminewd2) from 2.0.8 to 2.0.10.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jasminewd2)

---
updated-dependencies:
- dependency-name: "@types/jasminewd2"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-22 04:59:24 +00:00
shamoon
b700b3d1f7 Merge pull request #121 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/angular/compiler-cli-13.2.3
Bump @angular/compiler-cli from 13.2.2 to 13.2.3 in /src-ui
2022-02-21 20:58:29 -08:00
dependabot[bot]
11a377b973 Bump jasmine-core from 3.6.0 to 4.0.1 in /src-ui
Bumps [jasmine-core](https://github.com/jasmine/jasmine) from 3.6.0 to 4.0.1.
- [Release notes](https://github.com/jasmine/jasmine/releases)
- [Changelog](https://github.com/jasmine/jasmine/blob/main/RELEASE.md)
- [Commits](https://github.com/jasmine/jasmine/compare/v3.6.0...v4.0.1)

---
updated-dependencies:
- dependency-name: jasmine-core
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-22 04:57:27 +00:00
dependabot[bot]
e889c2e54e Bump @angular/compiler-cli from 13.2.2 to 13.2.3 in /src-ui
Bumps [@angular/compiler-cli](https://github.com/angular/angular/tree/HEAD/packages/compiler-cli) from 13.2.2 to 13.2.3.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/master/docs/RELEASE_SCHEDULE.md)
- [Commits](https://github.com/angular/angular/commits/13.2.3/packages/compiler-cli)

---
updated-dependencies:
- dependency-name: "@angular/compiler-cli"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-22 04:57:18 +00:00
shamoon
ab81439aac Merge pull request #119 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/ng2-pdf-viewer-8.0.1
Bump ng2-pdf-viewer from 8.0.0 to 8.0.1 in /src-ui
2022-02-21 20:56:26 -08:00
shamoon
75b4d46f4c Merge pull request #122 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/codelyzer-6.0.2
Bump codelyzer from 6.0.1 to 6.0.2 in /src-ui
2022-02-21 20:56:11 -08:00
shamoon
d680711ffc Merge pull request #120 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/jasmine-spec-reporter-7.0.0
Bump jasmine-spec-reporter from 5.0.2 to 7.0.0 in /src-ui
2022-02-21 20:55:55 -08:00
shamoon
ba38c2ad63 Merge pull request #123 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/ts-node-10.5.0
Bump ts-node from 8.3.0 to 10.5.0 in /src-ui
2022-02-21 20:55:37 -08:00
Paperless Translation Bot
49d7492e05 New translations django.po (German)
[ci skip]
2022-02-21 16:34:27 -08:00
Martin Müller
1e288100a9 Remove unneded exception handler from has_alpha() 2022-02-21 22:58:19 +01:00
Yannic Schroeder
d13fdd0791 Allow specifying port through PAPERLESS_PORT environment variable 2022-02-21 22:46:02 +01:00
Martin Müller
73a8569d21 Modify test for PNG image with alpha 2022-02-21 22:38:25 +01:00
Martin Müller
2a47b3f1a1 Fix code style (line too long) 2022-02-21 22:34:34 +01:00
Martin Müller
41494ee689 Remove alpha layer from PNG files for img2pdf
Fixes issue #1254
2022-02-21 22:06:43 +01:00
Sven Lankes
8bf6fadf0e Merge branch 'dev' into removeansible 2022-02-21 21:45:03 +01:00
dependabot[bot]
13b2c438b9 Bump ts-node from 8.3.0 to 10.5.0 in /src-ui
Bumps [ts-node](https://github.com/TypeStrong/ts-node) from 8.3.0 to 10.5.0.
- [Release notes](https://github.com/TypeStrong/ts-node/releases)
- [Commits](https://github.com/TypeStrong/ts-node/compare/v8.3.0...v10.5.0)

---
updated-dependencies:
- dependency-name: ts-node
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-21 20:24:10 +00:00
dependabot[bot]
368f7ab0ed Bump codelyzer from 6.0.1 to 6.0.2 in /src-ui
Bumps [codelyzer](https://github.com/mgechev/codelyzer) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/mgechev/codelyzer/releases)
- [Changelog](https://github.com/mgechev/codelyzer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mgechev/codelyzer/commits)

---
updated-dependencies:
- dependency-name: codelyzer
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-21 20:23:27 +00:00
dependabot[bot]
8b23a5e4c1 Bump jasmine-spec-reporter from 5.0.2 to 7.0.0 in /src-ui
Bumps [jasmine-spec-reporter](https://github.com/bcaudan/jasmine-spec-reporter) from 5.0.2 to 7.0.0.
- [Release notes](https://github.com/bcaudan/jasmine-spec-reporter/releases)
- [Changelog](https://github.com/bcaudan/jasmine-spec-reporter/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bcaudan/jasmine-spec-reporter/compare/v5.0.2...v7.0.0)

---
updated-dependencies:
- dependency-name: jasmine-spec-reporter
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-21 20:22:41 +00:00
dependabot[bot]
60a87f1541 Bump ng2-pdf-viewer from 8.0.0 to 8.0.1 in /src-ui
Bumps [ng2-pdf-viewer](https://github.com/VadimDez/ng2-pdf-viewer) from 8.0.0 to 8.0.1.
- [Release notes](https://github.com/VadimDez/ng2-pdf-viewer/releases)
- [Changelog](https://github.com/VadimDez/ng2-pdf-viewer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/VadimDez/ng2-pdf-viewer/compare/8.0.0...8.0.1)

---
updated-dependencies:
- dependency-name: ng2-pdf-viewer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-21 20:22:00 +00:00
Quinn Casey
0827553a69 Merge pull request #118 from paperless-ngx/feature-fix-pip-timeout
Increase default timeout of `pip install`
2022-02-21 11:46:13 -08:00
shamoon
1688af7a0d Merge pull request #24 from tribut/feature-trash
Add temporary "delete to trash" functionality
2022-02-21 11:19:57 -08:00
Sven Lankes
1412daf615 chore: remove ansible playbooks and documentation 2022-02-21 20:15:12 +01:00
shamoon
57db05f95b Merge pull request #117 from paperless-ngx/l10n_dev
New Crowdin updates
2022-02-21 10:43:18 -08:00
Paperless Translation Bot
1c1e7183e3 New translations messages.xlf (Danish)
[ci skip]
2022-02-21 10:29:34 -08:00
Paperless Translation Bot
ed48001fb2 New translations messages.xlf (Romanian)
[ci skip]
2022-02-21 10:29:27 -08:00
Paperless Translation Bot
d864734bc5 New translations messages.xlf (French)
[ci skip]
2022-02-21 10:29:20 -08:00
Paperless Translation Bot
150740766f New translations messages.xlf (Czech)
[ci skip]
2022-02-21 10:29:19 -08:00
Paperless Translation Bot
848f52688b New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]
2022-02-21 10:29:17 -08:00
Paperless Translation Bot
bcab0e8579 New translations messages.xlf (Luxembourgish)
[ci skip]
2022-02-21 10:29:16 -08:00
Paperless Translation Bot
e6cce4069e New translations messages.xlf (Portuguese, Brazilian)
[ci skip]
2022-02-21 10:29:14 -08:00
Paperless Translation Bot
ddfeeb6af7 New translations messages.xlf (Swedish)
[ci skip]
2022-02-21 10:29:13 -08:00
Paperless Translation Bot
5c2b524d07 New translations messages.xlf (Slovenian)
[ci skip]
2022-02-21 10:29:12 -08:00
Paperless Translation Bot
17d51a1cf6 New translations messages.xlf (Spanish)
[ci skip]
2022-02-21 10:29:11 -08:00
Paperless Translation Bot
01ce6c5f6f New translations messages.xlf (Russian)
[ci skip]
2022-02-21 10:29:10 -08:00
Paperless Translation Bot
79aa56c898 New translations messages.xlf (Polish)
[ci skip]
2022-02-21 10:29:09 -08:00
Paperless Translation Bot
93e8d49540 New translations messages.xlf (Dutch)
[ci skip]
2022-02-21 10:29:07 -08:00
Paperless Translation Bot
c5f31481b9 New translations messages.xlf (Italian)
[ci skip]
2022-02-21 10:29:06 -08:00
Paperless Translation Bot
56cdbc0c60 New translations messages.xlf (Hebrew)
[ci skip]
2022-02-21 10:29:05 -08:00
Paperless Translation Bot
d0a5160978 New translations messages.xlf (Greek)
[ci skip]
2022-02-21 10:29:03 -08:00
Paperless Translation Bot
106b55fc93 New translations messages.xlf (German)
[ci skip]
2022-02-21 10:29:02 -08:00
Paperless Translation Bot
573da8bd03 New translations messages.xlf (Portuguese)
[ci skip]
2022-02-21 10:29:01 -08:00
Quinn Casey
7845cece6b Add timeout to pip install
Attempt to fix `ConnectionResetError` seen [here](https://github.com/paperless-ngx/paperless-ngx/runs/5275984654?check_suite_focus=true) and [here](https://github.com/paperless-ngx/paperless-ngx/runs/5259904053?check_suite_focus=true)
2022-02-21 10:27:03 -08:00
shamoon
74dea42687 Merge pull request #65 from paperless-ngx/feature-angular-update
Update Angular to version 13, bootstrap to v5, other dependencies
2022-02-21 10:20:56 -08:00
Michael Shamoon
0d610e364c Use calc instead of sass math 2022-02-21 08:50:50 -08:00
Quinn Casey
0476c7204f Remove trailing whitespace 2022-02-21 06:46:42 -08:00
Felix E
e0683c19c8 Fix typo (#110) 2022-02-20 15:57:26 +01:00
Felix Eckhofer
a7e1c1c4d0 Catch exception during trash-move 2022-02-20 14:17:13 +01:00
Felix Eckhofer
335b8c63e0 Explain file-rename logic 2022-02-20 14:17:13 +01:00
Felix Eckhofer
f9bbb9a8c3 Remove stray newline 2022-02-20 14:17:06 +01:00
shamoon
fe5293ba36 Amend instructions to add a new language (#108)
Missing required editing of `src-ui/src/app/app.module.ts`
2022-02-20 10:36:31 +01:00
Michael Shamoon
3297596f2e fix layout columns in settings saved views 2022-02-20 01:32:24 -08:00
Michael Shamoon
5b5e8d7860 bs5: fix popover carat colors in dark mode 2022-02-20 01:25:31 -08:00
Michael Shamoon
7049d04d71 Reduce calls to isDirty for filterable dropdowns
And make disabled more visually obvious
2022-02-20 01:08:42 -08:00
Michael Shamoon
17ddf18a67 fix display of ng2-pdf-viewer 8.0.0 2022-02-20 00:37:42 -08:00
Michael Shamoon
e60bfda93f Bump tslib to 2.3.1
Replaces #90
2022-02-20 00:27:30 -08:00
Michael Shamoon
40dda1e0f7 Bump @types/jasmine to 3.10.3
Replaces #91
2022-02-20 00:26:53 -08:00
Michael Shamoon
3715afbb97 Bump rxjs to 6.6.7
Replaces #88
2022-02-20 00:26:05 -08:00
Michael Shamoon
6f22f720e9 Bump @angular/cli to 13.2.4
Replaces #87
2022-02-20 00:25:25 -08:00
Michael Shamoon
ddce6e1f0a bs5: show single filterable dropdown without number 2022-02-20 00:19:44 -08:00
Michael Shamoon
199affb244 bs5: fix dark mode dashboard widget table display 2022-02-20 00:16:49 -08:00
Michael Shamoon
899e3eed1b bs5: upload widget dismissal button 2022-02-20 00:05:45 -08:00
Michael Shamoon
744a0f1c8c bs5: fix dark mode close button 2022-02-20 00:05:32 -08:00
Michael Shamoon
c6fc435869 bs5: fix color component display 2022-02-19 23:55:17 -08:00
Michael Shamoon
81ef51fd01 bs5: fix correspondent / tag / doctype management list display 2022-02-19 23:48:49 -08:00
Michael Shamoon
0eaa1e3385 bs5: fix settings display 2022-02-19 23:34:32 -08:00
Michael Shamoon
e9a3a53849 Import Czech and Danish locales
Fixes incorrect #83 and #84
2022-02-19 23:26:21 -08:00
Michael Shamoon
4ae4fb65e6 fix missing darkModeInvertThumbs form control 2022-02-19 23:14:39 -08:00
Michael Shamoon
95a4d7e8a9 bs5: fix user navbar dropdown menu placement 2022-02-19 23:10:13 -08:00
Michael Shamoon
bf30297829 bs5: fix document detail input group 2022-02-19 23:07:36 -08:00
Michael Shamoon
f5f6985e4e bs5: remove custom control scss 2022-02-19 23:05:52 -08:00
Michael Shamoon
efe5df3459 bs5: document list table checkboxes 2022-02-19 23:05:41 -08:00
Michael Shamoon
99409f258f bs5: fix card checkboxes no longer custom controls 2022-02-19 22:57:04 -08:00
Michael Shamoon
4400915e0c bs5: form input spacing, renamed controls 2022-02-19 22:40:27 -08:00
Michael Shamoon
37f6b249dc bs5: fix document list sort form toggle button 2022-02-19 22:25:06 -08:00
Michael Shamoon
4826c645cd bs5: fix search icon location 2022-02-19 22:23:56 -08:00
Michael Shamoon
545b8e2b6e bs5: fix filter editor spacing 2022-02-19 22:20:53 -08:00
Michael Shamoon
d6744f0996 bs5: dropdown toggle button fill color 2022-02-19 22:06:06 -08:00
Michael Shamoon
55b980991b bs5: fix color sass map 2022-02-19 22:05:10 -08:00
Michael Shamoon
add09db40a bs5: fix badges 2022-02-19 22:04:52 -08:00
Michael Shamoon
f08901c639 bs5: fix toggle buttons 2022-02-19 21:46:15 -08:00
Michael Shamoon
fd58096112 bs5: fix underline weirdness 2022-02-19 21:39:02 -08:00
Michael Shamoon
3a652a8941 bs5: fix reversed borders 2022-02-19 21:38:45 -08:00
Michael Shamoon
52e6b45580 bs5: fix small cards display 2022-02-19 21:38:29 -08:00
Michael Shamoon
7b7ba83a87 bs5: fix large card display 2022-02-19 21:38:07 -08:00
Yannic Schroeder
8ba282362d Migrate Bootstrap close buttons to v5
https://getbootstrap.com/docs/5.0/migration/#close-button
2022-02-20 01:43:31 +01:00
Yannic Schroeder
4451acbf0b Migrate Bootstrap utilities to v5
Names of utility classes have changed:
https://getbootstrap.com/docs/5.0/migration/#utilities
2022-02-20 01:25:57 +01:00
Yannic Schroeder
d257eeeabf Remove ngx-bootstrap dependency
This was not used anywhere.
2022-02-20 00:16:38 +01:00
Yannic Schroeder
9f062fa14b Update ng2-pdf-viewer
Now with ivy support!
2022-02-20 00:16:38 +01:00
Yannic Schroeder
ba1038b4a8 Update nodejs version in CI
Angular does not allow nodejs version 15.
2022-02-20 00:16:38 +01:00
Yannic Schroeder
ef1b971fca Update bootstrap 2022-02-20 00:16:38 +01:00
Yannic Schroeder
3444f9e5f2 Fix wrong migrations from update to Angular 13 2022-02-20 00:15:43 +01:00
Yannic Schroeder
af768b8d66 Bump dependency versions for security fixes 2022-02-20 00:15:43 +01:00
Yannic Schroeder
fbe0cdadd4 Update ngx-infinite-scroll 2022-02-20 00:15:43 +01:00
Yannic Schroeder
ff3d455f45 Update ngx-file-drop 2022-02-20 00:15:43 +01:00
Yannic Schroeder
2eba2942d0 Update ngx-color 2022-02-20 00:15:43 +01:00
Yannic Schroeder
556143a941 Update ngx-bootstrap 2022-02-20 00:15:43 +01:00
Yannic Schroeder
e82011a91d Update ng2-pdf-viewer 2022-02-20 00:15:43 +01:00
Yannic Schroeder
f2f80685a8 Update ng-select 2022-02-20 00:15:43 +01:00
Yannic Schroeder
7aa77eab07 Update ng-bootstrap 2022-02-20 00:14:35 +01:00
Yannic Schroeder
419fe7fc68 Update ngx-cookie-service 2022-02-20 00:14:35 +01:00
Yannic Schroeder
1d4b5e243c Update to Angular 13 2022-02-20 00:14:35 +01:00
Yannic Schroeder
d25604da81 Fix deprecated Sass syntax 2022-02-20 00:14:35 +01:00
Yannic Schroeder
17617b82c6 Disable legacy i18n IDs 2022-02-20 00:14:35 +01:00
Yannic Schroeder
3f89fdf300 Migrate legacy i18n IDs
Angular 12 introduced a new way of generating IDs. This migrates all
IDs to new format.

More info: https://angular.io/guide/migration-legacy-message-id
2022-02-20 00:14:35 +01:00
Yannic Schroeder
0cc9b7e357 Remove invalid option from angular.json 2022-02-20 00:09:35 +01:00
Yannic Schroeder
32e1188207 Update ngx-cookie-service
Old version is incompatible with Angular 12.
2022-02-20 00:09:35 +01:00
Yannic Schroeder
c634e6a801 Update to Angular 12 2022-02-20 00:09:35 +01:00
shamoon
d1a7557405 Merge pull request #107 from paperless-ngx/l10n_dev
New Crowdin updates
2022-02-19 15:08:51 -08:00
Paperless Translation Bot
b1a7c27d96 New translations messages.xlf (Swedish)
[ci skip]
2022-02-19 15:07:20 -08:00
Paperless Translation Bot
5ebf8534ba New translations messages.xlf (French)
[ci skip]
2022-02-19 15:05:58 -08:00
Paperless Translation Bot
65bb5d067a New translations messages.xlf (Czech)
[ci skip]
2022-02-19 15:01:56 -08:00
Paperless Translation Bot
0a5da90f84 New translations messages.xlf (Danish)
[ci skip]
2022-02-19 14:58:17 -08:00
Paperless Translation Bot
59827290dc New translations django.po (Khmer)
[ci skip]
2022-02-19 14:58:15 -08:00
Paperless Translation Bot
b0f8d15542 New translations messages.xlf (Romanian)
[ci skip]
2022-02-19 14:58:10 -08:00
Paperless Translation Bot
366ffec165 New translations messages.xlf (French)
[ci skip]
2022-02-19 14:58:02 -08:00
Paperless Translation Bot
0cd3059831 New translations messages.xlf (Czech)
[ci skip]
2022-02-19 14:57:59 -08:00
Paperless Translation Bot
db4da7092b New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]
2022-02-19 14:57:58 -08:00
Paperless Translation Bot
c6851c9f70 New translations messages.xlf (Luxembourgish)
[ci skip]
2022-02-19 14:57:57 -08:00
Paperless Translation Bot
7c4a098977 New translations messages.xlf (Portuguese, Brazilian)
[ci skip]
2022-02-19 14:57:55 -08:00
Paperless Translation Bot
cfb3db311c New translations messages.xlf (Swedish)
[ci skip]
2022-02-19 14:57:54 -08:00
Paperless Translation Bot
b049ad4f3a New translations messages.xlf (Spanish)
[ci skip]
2022-02-19 14:57:52 -08:00
Paperless Translation Bot
fd5a761c8c New translations messages.xlf (Russian)
[ci skip]
2022-02-19 14:57:51 -08:00
Paperless Translation Bot
e9befc44ec New translations messages.xlf (Polish)
[ci skip]
2022-02-19 14:57:50 -08:00
Paperless Translation Bot
180c82c694 New translations messages.xlf (Dutch)
[ci skip]
2022-02-19 14:57:49 -08:00
Paperless Translation Bot
36b041376c New translations messages.xlf (Italian)
[ci skip]
2022-02-19 14:57:47 -08:00
Paperless Translation Bot
387db5ffb6 New translations messages.xlf (German)
[ci skip]
2022-02-19 14:57:45 -08:00
Paperless Translation Bot
ee27e71e29 New translations messages.xlf (Portuguese)
[ci skip]
2022-02-19 14:57:44 -08:00
shamoon
189110ec09 Merge pull request #10 from shamoon/feature/any-all-filtering
Feature: any / all filtering with tags
2022-02-19 14:52:55 -08:00
Paperless Translation Bot
4fc44060ea New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]
2022-02-19 14:26:24 -08:00
Michael Shamoon
c945b90b64 Indicate disabled but active All button 2022-02-19 14:03:55 -08:00
Stéphane Brunner
7113a18f3b Hide the password field (#103) 2022-02-19 22:49:57 +01:00
Paperless Translation Bot
921000625e New translations messages.xlf (Danish)
[ci skip]
2022-02-19 13:17:03 -08:00
Paperless Translation Bot
b272d695e3 New translations messages.xlf (Spanish)
[ci skip]
2022-02-19 13:17:02 -08:00
Paperless Translation Bot
e93c85ba92 New translations messages.xlf (Czech)
[ci skip]
2022-02-19 13:16:59 -08:00
Paperless Translation Bot
6d58491d1c New translations messages.xlf (German)
[ci skip]
2022-02-19 13:16:58 -08:00
Paperless Translation Bot
413897639f New translations messages.xlf (Hebrew)
[ci skip]
2022-02-19 13:16:55 -08:00
Paperless Translation Bot
065d9bc1e3 New translations messages.xlf (Italian)
[ci skip]
2022-02-19 13:16:54 -08:00
Paperless Translation Bot
bb56254e88 New translations messages.xlf (Dutch)
[ci skip]
2022-02-19 13:16:52 -08:00
Paperless Translation Bot
8b01336d54 New translations messages.xlf (French)
[ci skip]
2022-02-19 13:16:51 -08:00
Paperless Translation Bot
4d5f1bd81a New translations messages.xlf (Polish)
[ci skip]
2022-02-19 13:16:50 -08:00
Paperless Translation Bot
78efd4961e New translations messages.xlf (Russian)
[ci skip]
2022-02-19 13:16:49 -08:00
Paperless Translation Bot
1ab157c2a9 New translations messages.xlf (Swedish)
[ci skip]
2022-02-19 13:16:47 -08:00
Paperless Translation Bot
10bde76494 New translations messages.xlf (Portuguese, Brazilian)
[ci skip]
2022-02-19 13:16:45 -08:00
Paperless Translation Bot
81499665d8 New translations messages.xlf (Luxembourgish)
[ci skip]
2022-02-19 13:16:43 -08:00
Paperless Translation Bot
8621546736 New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]
2022-02-19 13:16:42 -08:00
Paperless Translation Bot
abd27342b6 New translations messages.xlf (Portuguese)
[ci skip]
2022-02-19 13:16:41 -08:00
Paperless Translation Bot
f9a3a7f2c6 New translations messages.xlf (Romanian)
[ci skip]
2022-02-19 13:16:40 -08:00
Quinn Casey
165b476635 Merge pull request #106 from paperless-ngx/revert-79-ci-build-container-on-prs
Revert "CI: Build and tag container on PRs"
2022-02-19 13:09:17 -08:00
Quinn Casey
7448609ba7 Revert "CI: Build and tag container on PRs" 2022-02-19 12:44:53 -08:00
Yannic Schröder
7380e056cd Update frontend strings to Paperless-ngx (#105)
This also includes URLs to ressources.
2022-02-19 21:42:09 +01:00
Michael Shamoon
0b6c749b60 Hide double-click note on non-multiple dropdowns 2022-02-19 09:20:41 -08:00
Michael Shamoon
1ba1df2529 Change alt-click to second click 2022-02-18 19:35:02 -08:00
shamoon
8ef913b117 Merge pull request #13 from shamoon/feature/unsaved-changes
Warnings for unsaved changes, 'intelligent' buttons when editing
2022-02-18 06:58:09 -08:00
Quinn Casey
e1c29d09e7 Merge pull request #79 from paperless-ngx/ci-build-container-on-prs
CI: Build and tag container on PRs
2022-02-18 06:25:11 -08:00
Filip Kraus
1b7f1614b5 Update name in docs (#80)
* Update name in docs

Will document on #52 what's left do do.

* Update usage_overview.rst
2022-02-18 09:42:55 +01:00
shamoon
dcb8c17c75 Merge pull request #83 from mweimerskirch/additional-language-cs-cz
Enabled the Czech (cs-cz) translations
2022-02-18 00:41:22 -08:00
Michel Weimerskirch
f42811285d Enabled the Czech (cs-cz) translations 2022-02-18 09:39:06 +01:00
shamoon
f9aa40fb57 Merge pull request #84 from mweimerskirch/additional-language-da-dk
Enabled the Danish (da-dk) translations
2022-02-18 00:22:22 -08:00
shamoon
d3900536a1 Merge pull request #82 from mweimerskirch/contributing-translations
Detailed description on how to add new languages
2022-02-18 00:19:46 -08:00
Michel Weimerskirch
01c139ef2d Enabled the Danish (da-dk) translations 2022-02-18 09:18:04 +01:00
mweimerskirch
6442f1c572 Translation section in README: Added link to CONTRIBUTING.md
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2022-02-18 09:15:25 +01:00
Michel Weimerskirch
8b5a35cc70 Minor formatting and orthography changes to the Translation section in the README.md 2022-02-18 08:48:38 +01:00
Michel Weimerskirch
8d443f212a Added a paragraph on how to add a new language to CONTRIBUTING.md 2022-02-18 08:46:43 +01:00
shamoon
6ab2e881a3 Merge pull request #78 from mweimerskirch/fix/sort-languages
Sort languages
2022-02-17 23:15:31 -08:00
Michael Shamoon
c9baa76afd clear 'dirty' documents when closing all 2022-02-17 23:05:14 -08:00
Michael Shamoon
66b9a99e71 Correct runtime issue(s) with saveEditNext 2022-02-17 23:04:38 -08:00
Michel Weimerskirch
27a835a69c Sort languages by localized name at runtime 2022-02-18 08:02:03 +01:00
Michel Weimerskirch
1830cd856a Sort language lists by locale 2022-02-18 08:02:00 +01:00
Florian
c656610c93 tests: fix management_consumer test (#66)
this test failed due to a strict polling delay,
which caused the test to be interrupted by an async call,
which stated "Incomplete File READ FAILED"

see also https://github.com/NixOS/nixpkgs/pull/158118

Signed-off-by: florian on nixos (Florian Brandes) <florian.brandes@posteo.de>
2022-02-17 23:30:16 +01:00
Quinn Casey
e32f63d76e Build and tag container on PRs 2022-02-17 12:24:46 -08:00
shamoon
7eca68dfc0 Merge pull request #75 from paperless-ngx/l10n_dev
New Crowdin updates
2022-02-17 08:33:00 -08:00
Quinn Casey
75e3506046 Merge pull request #53 from paperless-ngx/contributing-prs
Merging Non-Trivial PRs
2022-02-17 08:05:56 -08:00
Quinn Casey
c839a5dd55 Merge pull request #77 from kpj/dev
Update `install-paperless-ngx.sh`
2022-02-17 07:59:08 -08:00
Paperless Translation Bot
7349ab063d New translations messages.xlf (Danish)
[ci skip]
2022-02-17 06:58:54 -08:00
Paperless Translation Bot
165f1d3341 New translations django.po (Danish)
[ci skip]
2022-02-17 06:58:53 -08:00
kpj
2a91a09835 Merge branch 'kpj-fix-install_script' into dev 2022-02-17 15:53:47 +01:00
kpj
8f20003687 Merge branch 'fix-install_script' of https://github.com/kpj/paperless-ngx into kpj-fix-install_script 2022-02-17 15:53:22 +01:00
Paperless Translation Bot
94e07fee96 New translations messages.xlf (Danish)
[ci skip]
2022-02-17 05:26:36 -08:00
Paperless Translation Bot
c6618b2cc0 New translations django.po (Danish)
[ci skip]
2022-02-17 05:26:34 -08:00
Paperless Translation Bot
7af291622f New translations messages.xlf (Danish)
[ci skip]
2022-02-17 04:31:26 -08:00
Paperless Translation Bot
e7603eff5f New translations django.po (Danish)
[ci skip]
2022-02-17 04:31:25 -08:00
Paperless Translation Bot
866f365e0b New translations messages.xlf (Danish)
[ci skip]
2022-02-17 03:32:07 -08:00
Paperless Translation Bot
eac40ccd26 New translations django.po (Danish)
[ci skip]
2022-02-17 03:32:06 -08:00
Paperless Translation Bot
1e6d9dda40 New translations messages.xlf (Dutch)
[ci skip]
2022-02-17 03:32:05 -08:00
Paperless Translation Bot
7ecf42d70f New translations django.po (Danish)
[ci skip]
2022-02-17 02:35:54 -08:00
Paperless Translation Bot
d92e48bc33 New translations django.po (Danish)
[ci skip]
2022-02-17 01:38:36 -08:00
Kim
51be0f07a5 Use command substitution instead of piping in easy-install docs 2022-02-17 09:18:01 +01:00
Paperless Translation Bot
6751ed33af New translations messages.xlf (Danish)
[ci skip]
2022-02-16 23:59:04 -08:00
Paperless Translation Bot
5313909cd8 New translations django.po (Danish)
[ci skip]
2022-02-16 23:59:03 -08:00
Paperless Translation Bot
a6e65583f2 New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]
2022-02-16 23:59:02 -08:00
Paperless Translation Bot
e17a33e110 New translations messages.xlf (Slovenian)
[ci skip]
2022-02-16 23:59:00 -08:00
Paperless Translation Bot
2a99765020 New translations messages.xlf (Hebrew)
[ci skip]
2022-02-16 23:58:59 -08:00
Paperless Translation Bot
98f2ba949c New translations messages.xlf (Greek)
[ci skip]
2022-02-16 23:58:58 -08:00
Paperless Translation Bot
66318b7e39 New translations messages.xlf (Czech)
[ci skip]
2022-02-16 23:58:56 -08:00
Paperless Translation Bot
eb91b02ebf New translations django.po (Arabic, Saudi Arabia)
[ci skip]
2022-02-16 23:58:55 -08:00
Paperless Translation Bot
c643c0fe36 New translations django.po (Slovenian)
[ci skip]
2022-02-16 23:58:53 -08:00
Paperless Translation Bot
285579822a New translations django.po (Hebrew)
[ci skip]
2022-02-16 23:58:52 -08:00
Paperless Translation Bot
adacb2ab92 New translations django.po (Greek)
[ci skip]
2022-02-16 23:58:51 -08:00
Paperless Translation Bot
e338274669 New translations django.po (Czech)
[ci skip]
2022-02-16 23:58:50 -08:00
shamoon
7ce65cbbaa Merge pull request #74 from paperless-ngx/l10n_dev
New Crowdin updates
2022-02-16 23:00:13 -08:00
shamoon
7e0345cda6 Merge branch 'dev' into l10n_dev 2022-02-16 22:59:27 -08:00
Paperless Translation Bot
c27a7ac60a New translations django.po (Arabic, Saudi Arabia)
[ci skip]
2022-02-16 22:54:13 -08:00
Paperless Translation Bot
0e7f03c595 New translations django.po (Slovenian)
[ci skip]
2022-02-16 22:54:09 -08:00
Paperless Translation Bot
6bc44fd93f New translations django.po (Greek)
[ci skip]
2022-02-16 22:54:05 -08:00
Paperless Translation Bot
074decc320 New translations django.po (Czech)
[ci skip]
2022-02-16 22:54:04 -08:00
Paperless Translation Bot
ccc99a45f9 New translations django.po (French)
[ci skip]
2022-02-16 22:54:02 -08:00
Paperless Translation Bot
dab8b6ac87 New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]
2022-02-16 22:53:59 -08:00
Paperless Translation Bot
a134ca098a New translations messages.xlf (Luxembourgish)
[ci skip]
2022-02-16 22:53:57 -08:00
Paperless Translation Bot
8d2a809df2 New translations messages.xlf (French)
[ci skip]
2022-02-16 22:53:53 -08:00
Paperless Translation Bot
0b8db1fec9 New translations messages.xlf (Slovenian)
[ci skip]
2022-02-16 22:53:52 -08:00
Paperless Translation Bot
791e6cf54f New translations messages.xlf (Hebrew)
[ci skip]
2022-02-16 22:53:48 -08:00
Paperless Translation Bot
14a117acfa New translations messages.xlf (Greek)
[ci skip]
2022-02-16 22:53:47 -08:00
Paperless Translation Bot
6eef72d524 New translations messages.xlf (Czech)
[ci skip]
2022-02-16 22:53:46 -08:00
shamoon
05543e5341 Merge pull request #73 from paperless-ngx/l10n_dev
New Crowdin updates
2022-02-16 22:50:23 -08:00
Paperless Translation Bot
4b64b80d86 New translations messages.xlf (Korean)
[ci skip]
2022-02-16 22:45:34 -08:00
Paperless Translation Bot
c20c1f96ca New translations django.po (Luxembourgish)
[ci skip]
2022-02-16 22:45:12 -08:00
Paperless Translation Bot
7194915bf3 New translations django.po (Korean)
[ci skip]
2022-02-16 22:44:55 -08:00
shamoon
8156580e4f Merge pull request #72 from paperless-ngx/revert-71-l10n_dev
Revert "New Crowdin updates"
2022-02-16 22:40:29 -08:00
shamoon
b63a01f527 Revert "New Crowdin updates" 2022-02-16 22:35:17 -08:00
Michael Shamoon
10b16dbcdf Merge pull request #70 from paperless-ngx/shamoon-patch-1
Add new Crowdin info to readme
2022-02-16 21:22:49 -08:00
Michael Shamoon
4d24f92914 Merge pull request #71 from paperless-ngx/l10n_dev
New Crowdin updates
2022-02-16 20:51:59 -08:00
Michael Shamoon
8db6d9cd34 Add notes about translation directly to readme 2022-02-16 20:49:52 -08:00
paperless-l10n
821398437f New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]
2022-02-16 20:33:43 -08:00
paperless-l10n
1a2213b1fb New translations messages.xlf (Slovenian)
[ci skip]
2022-02-16 20:33:40 -08:00
paperless-l10n
e49b4c137e New translations messages.xlf (Hebrew)
[ci skip]
2022-02-16 20:33:39 -08:00
paperless-l10n
cabb5cafca New translations messages.xlf (Greek)
[ci skip]
2022-02-16 20:33:38 -08:00
paperless-l10n
016f7d90dc New translations messages.xlf (Czech)
[ci skip]
2022-02-16 20:33:37 -08:00
paperless-l10n
934d5f7164 New translations django.po (Arabic, Egypt)
[ci skip]
2022-02-16 20:33:36 -08:00
paperless-l10n
a2c0d6d920 New translations django.po (Arabic, Yemen)
[ci skip]
2022-02-16 20:33:35 -08:00
paperless-l10n
7e1161db62 New translations django.po (Arabic, Saudi Arabia)
[ci skip]
2022-02-16 20:33:33 -08:00
paperless-l10n
4cfdb54a0e New translations django.po (Khmer)
[ci skip]
2022-02-16 20:33:32 -08:00
paperless-l10n
b35544a44d New translations django.po (Slovenian)
[ci skip]
2022-02-16 20:33:31 -08:00
paperless-l10n
46a4ec7dd0 New translations django.po (Hebrew)
[ci skip]
2022-02-16 20:33:30 -08:00
paperless-l10n
35202662f3 New translations django.po (Greek)
[ci skip]
2022-02-16 20:33:29 -08:00
paperless-l10n
d1267dc398 New translations django.po (Czech)
[ci skip]
2022-02-16 20:33:28 -08:00
paperless-l10n
37b1b9ae39 New translations django.po (Arabic, Bahrain)
[ci skip]
2022-02-16 20:33:25 -08:00
Michael Shamoon
31f9938d1b Update localized badge 2022-02-16 20:32:33 -08:00
Michael Shamoon
f8b5ec0f7d Merge pull request #69 from paperless-ngx/l10n_dev
New Crowdin updates
2022-02-16 20:29:41 -08:00
Michael Shamoon
1dc474d33d Add new Crowdin link to readme
Part of #64
2022-02-16 20:26:27 -08:00
paperless-l10n
1dfe86a069 New translations messages.xlf (Chinese Traditional)
[ci skip]
2022-02-16 20:19:11 -08:00
paperless-l10n
63778935b0 New translations django.po (Chinese Traditional)
[ci skip]
2022-02-16 20:18:59 -08:00
paperless-l10n
39f7f5e512 New translations django.po (Chinese Simplified)
[ci skip]
2022-02-16 20:18:57 -08:00
paperless-l10n
e320c32182 New translations messages.xlf (Chinese Simplified)
[ci skip]
2022-02-16 20:18:55 -08:00
paperless-l10n
cd8c524b19 New translations messages.xlf (Luxembourgish)
[ci skip]
2022-02-16 20:17:19 -08:00
paperless-l10n
f7554e7f33 New translations django.po (Spanish)
[ci skip]
2022-02-16 20:17:18 -08:00
paperless-l10n
6ae39361a5 New translations django.po (German)
[ci skip]
2022-02-16 20:17:17 -08:00
paperless-l10n
dfe88864ad New translations django.po (Italian)
[ci skip]
2022-02-16 20:17:16 -08:00
paperless-l10n
8c14d05494 New translations django.po (Dutch)
[ci skip]
2022-02-16 20:17:15 -08:00
paperless-l10n
bc77cbf956 New translations django.po (Polish)
[ci skip]
2022-02-16 20:17:14 -08:00
paperless-l10n
0bb9f47590 New translations django.po (Portuguese)
[ci skip]
2022-02-16 20:17:13 -08:00
paperless-l10n
effa3cd3a5 New translations django.po (Russian)
[ci skip]
2022-02-16 20:17:12 -08:00
paperless-l10n
fd811d68ff New translations django.po (Swedish)
[ci skip]
2022-02-16 20:17:11 -08:00
paperless-l10n
fda64e81a5 New translations django.po (English)
[ci skip]
2022-02-16 20:17:10 -08:00
paperless-l10n
3c598dfca9 New translations django.po (Portuguese, Brazilian)
[ci skip]
2022-02-16 20:17:09 -08:00
paperless-l10n
0c1e1b6b68 New translations django.po (English, United Kingdom)
[ci skip]
2022-02-16 20:17:08 -08:00
paperless-l10n
7f2f4c666e New translations django.po (Luxembourgish)
[ci skip]
2022-02-16 20:17:07 -08:00
paperless-l10n
94e6e36f26 New translations django.po (French)
[ci skip]
2022-02-16 20:17:06 -08:00
paperless-l10n
45a534e176 New translations messages.xlf (Romanian)
[ci skip]
2022-02-16 20:17:05 -08:00
paperless-l10n
3303ee1afc New translations messages.xlf (Spanish)
[ci skip]
2022-02-16 20:17:02 -08:00
paperless-l10n
337330a508 New translations messages.xlf (German)
[ci skip]
2022-02-16 20:17:01 -08:00
paperless-l10n
8b6001c328 New translations messages.xlf (Italian)
[ci skip]
2022-02-16 20:17:00 -08:00
paperless-l10n
9ebf3c270c New translations messages.xlf (Dutch)
[ci skip]
2022-02-16 20:16:58 -08:00
paperless-l10n
fbde0ce88f New translations messages.xlf (Polish)
[ci skip]
2022-02-16 20:16:57 -08:00
paperless-l10n
5009989a59 New translations messages.xlf (Portuguese)
[ci skip]
2022-02-16 20:16:56 -08:00
paperless-l10n
436368ad22 New translations messages.xlf (Russian)
[ci skip]
2022-02-16 20:16:55 -08:00
paperless-l10n
cc7bbeca97 New translations messages.xlf (Swedish)
[ci skip]
2022-02-16 20:16:54 -08:00
paperless-l10n
d608d6a441 New translations messages.xlf (English)
[ci skip]
2022-02-16 20:16:53 -08:00
paperless-l10n
cd80f7ddbe New translations messages.xlf (Portuguese, Brazilian)
[ci skip]
2022-02-16 20:16:51 -08:00
paperless-l10n
5bff97ec96 New translations messages.xlf (English, United Kingdom)
[ci skip]
2022-02-16 20:16:50 -08:00
paperless-l10n
23c1ea1b79 New translations messages.xlf (French)
[ci skip]
2022-02-16 20:16:49 -08:00
paperless-l10n
097d1a55fe New translations django.po (Romanian)
[ci skip]
2022-02-16 20:16:48 -08:00
Quinn Casey
13426d3c3f Merge pull request #62 from paperless-ngx/feature-docker-build-fix
CI: Use Github Container Registry for docker build step
2022-02-16 16:19:58 -08:00
kpj
e4859412bc Update installation url in setup docs to new repo 2022-02-17 00:46:03 +01:00
kpj
95309ad4ae Use paperless-ngx in install script 2022-02-17 00:42:47 +01:00
kpj
41bdf1bcc9 Rename script to paperless-ngx 2022-02-17 00:40:52 +01:00
Florian
04a4cd7d76 Merge pull request #63 from paperless-ngx/ansible-ci-fixes
CI: Ansible Test fix
2022-02-17 00:25:13 +01:00
Quinn Casey
582f7a9301 Merge pull request #51 from jonaswinkler/l10n_dev
New Crowdin updates
2022-02-16 14:37:48 -08:00
Michael Shamoon
9bc48fed73 Check for live changes on document detail title 2022-02-16 14:34:19 -08:00
Quinn Casey
3e7e7023fc update source repo 2022-02-16 14:01:16 -08:00
Michael Shamoon
8c853e56e4 Reset networkActive & error after switchmap pipes complete 2022-02-16 13:43:25 -08:00
Michael Shamoon
1941be8f53 fix conflict with mobile preview pane 2022-02-16 12:00:19 -08:00
Michael Shamoon
06253ed8f2 titleInput may be undefined if in a different tab 2022-02-16 11:36:22 -08:00
Quinn Casey
ec5416abfd Merge pull request #57 from Nicarim/fix-unicode-filename-issue-when-downloading-files
Provide UTF-8 encoded content-disposition field to address the issues in the firefox when downloading files
2022-02-16 11:11:26 -08:00
Marcin Gordziejewski
940d056657 Provide utf-8 encoded content-disposition field to address the issues in the firefox when downloading files
Fixes #56
2022-02-16 19:50:13 +01:00
Quinn Casey
a10d331296 Merge pull request #61 from paperless-ngx/revert-46-patch-1
Revert "Update setup.rst"
2022-02-16 09:09:39 -08:00
Quinn Casey
c2035b4324 Revert "Update setup.rst" 2022-02-16 09:07:54 -08:00
Quinn Casey
879a239bcd Merge branch 'RidaAyed-doc-docker-post-consumption' into dev 2022-02-16 09:04:30 -08:00
Quinn Casey
4d1e33af9e Merge pull request #36 from dblitt/patch-1
Update login.html to not autocapitalize username
2022-02-16 08:57:05 -08:00
Quinn Casey
64c7699a19 Merge pull request #44 from muued/pre_consume_script
Increase visibility of PAPERLESS_PRE_CONSUME_SCRIPT
2022-02-16 08:55:32 -08:00
Quinn Casey
0219aa97fe Merge pull request #28 from m0veax/patch-1
Added hint to use Management Utilities
2022-02-16 08:50:10 -08:00
Quinn Casey
657ed211c0 Merge pull request #46 from a-waider/patch-1
Update setup.rst
2022-02-16 08:36:32 -08:00
Quinn Casey
305666378b Fix image name 2022-02-16 08:24:12 -08:00
Quinn Casey
50102af229 Use github container registry 2022-02-16 07:15:22 -08:00
Quinn Casey
ff4fa4f164 Merge pull request #42 from s4nf4n/feature_fix_ansible_ci
add ansible role_name to fix ci
2022-02-16 06:35:27 -08:00
Michael Shamoon
3e35d9cd8c Rewrite nested subscriptions 2022-02-16 02:27:17 -08:00
Michael Shamoon
e1a36972b1 cleanup subscriptions 2022-02-16 01:06:22 -08:00
Michael Shamoon
250575acb9 Fix spelling error 2022-02-16 00:29:04 -08:00
Michael Shamoon
d9cd312d07 Cleanup subscriptions 2022-02-15 23:43:54 -08:00
Michael Shamoon
d733de9d9f Code cleanup 2022-02-15 23:43:02 -08:00
Quinn Casey
088cc9cd71 Merge pull request #58 from Nicarim/add-docs-note-on-python-version-for-development
Add docs note on python version for development
2022-02-15 15:39:26 -08:00
Marcin Gordziejewski
895781c5a3 Add a note in extending.rst on python version requirements and pyenv suggestion 2022-02-16 00:13:23 +01:00
Marcin Gordziejewski
f493bd539d Add .editorconfig entry for .rst files to enforce space indentation 2022-02-16 00:13:23 +01:00
Quinn Casey
de9fbd48df Typos and clarifications 2022-02-15 14:08:02 -08:00
Ingo Sigmund
1e58b0c43e Merge pull request #31 from denilsonsa/patch-4
Clarifying documentation on filename placeholders
2022-02-15 20:57:57 +01:00
Michael Shamoon
68cfde5b65 missed from merge 2022-02-15 11:41:56 -08:00
Michael Shamoon
99157b76b2 Update dirty check forms package 2022-02-15 11:39:03 -08:00
Johann Bauer
5f58a329d3 Make Worker Timeout Configurable (#37)
* Make Worker Timeout Configurable

- defaults to 1800 seconds
- can be configured through environment for systems with weaker CPUs
- description added to documentation

Co-authored-by: evilsidekick <>
2022-02-15 20:28:08 +01:00
Michael Shamoon
67b9977d57 Merge branch 'dev' into feature/unsaved-changes 2022-02-15 11:20:05 -08:00
Ingo Sigmund
b469937d4d Merge pull request #33 from sAksham-Ar/master 2022-02-15 20:14:03 +01:00
Quinn Casey
30b540045e Update header link 2022-02-15 11:03:10 -08:00
Quinn Casey
87af195862 Remove trailing whitespace 2022-02-15 11:01:15 -08:00
Quinn Casey
0ff001b4de Wow that's a rigid test, love it 2022-02-15 10:59:56 -08:00
Quinn Casey
d6280b7939 add PRs and Non-Trivial process 2022-02-15 10:50:03 -08:00
Quinn Casey
07f10d3907 minor typos and clarifications 2022-02-15 10:10:09 -08:00
Quinn Casey
9fb18802fc roadmap does not exist 2022-02-15 09:59:32 -08:00
Quinn Casey
0936a2c474 fix typo 2022-02-15 09:58:37 -08:00
Quinn Casey
edd21d1233 Merge pull request #40 from davemachado/master
Update documentation for grammar and additional clarity
2022-02-15 09:38:57 -08:00
Quinn Casey
86e4ec03dd Merge branch 'philpagel-scannertable' into dev 2022-02-15 09:35:29 -08:00
Quinn Casey
994d502c41 Merge branch 'scannertable' of https://github.com/philpagel/paperless-ng into philpagel-scannertable 2022-02-15 09:35:06 -08:00
Quinn Casey
3d3de5d0fe Merge branch 'fignew-patch-1' into dev 2022-02-15 09:24:22 -08:00
Quinn Casey
f303a1c423 Merge branch 'patch-1' of https://github.com/fignew/paperless-ng into fignew-patch-1 2022-02-15 09:21:04 -08:00
Johann Bauer
1fa814e6e5 Tell users about multiple OCR languages in the install script (#30)
This valuable piece of information was only mentioned in the docs: https://paperless-ng.readthedocs.io/en/latest/configuration.html#ocr-settings

It would be good to have it in the install script, because that's where/when the user is explicitly asked to choose a language.

Co-authored-by: Denilson Sá Maia <denilsonsa@gmail.com>
2022-02-15 17:13:43 +01:00
Michael Shamoon
0aed34cb71 Merge pull request #49 from jonaswinkler/dependabot/npm_and_yarn/src-ui/karma-6.3.14 2022-02-15 07:59:28 -08:00
Michael Shamoon
abddbb11c1 Merge pull request #50 from jonaswinkler/dependabot/npm_and_yarn/src-ui/follow-redirects-1.14.8 2022-02-15 07:58:57 -08:00
Felix E
a25ba99bfb Merge pull request #32 from amenk/patch-1
Fix: Search box overlays menu on mobile (jonaswinkler#1382)
2022-02-15 16:19:39 +01:00
Simon Siebert
512615631a Merge pull request #45 from 2600box/patch-1
Typo corrected
2022-02-15 15:16:35 +01:00
Simon Siebert
98086fd04b Merge pull request #29 from denilsonsa/patch-2
Fixing broken link to docker CLI basics
2022-02-15 15:12:03 +01:00
Simon Siebert
fe2aa2bbf3 Update README.md (#11)
Co-authored-by: Simon Siebert <simon.siebert@outlook.com>
2022-02-15 14:43:42 +01:00
Michael Shamoon
da361e9d64 Update filter-rule-type.ts 2022-02-14 22:23:39 -08:00
Michael Shamoon
f75d4ccc89 Merge branch 'dev' into feature/any-all-filtering 2022-02-14 22:23:31 -08:00
Michael Shamoon
c2621f4633 Merge pull request #9 from shamoon/fix/issue-1228
Add white background to plaintext documents
2022-02-14 22:14:36 -08:00
Michael Shamoon
e6602f1153 Merge pull request #2 from shamoon/pdf-viewer-mobile-improvements
Pdf viewer mobile improvements
2022-02-14 22:07:41 -08:00
Michael Shamoon
069e78881d Merge branch 'dev' into pdf-viewer-mobile-improvements 2022-02-14 22:00:39 -08:00
dependabot[bot]
e4e7ee8433 Bump follow-redirects from 1.13.0 to 1.14.8 in /src-ui
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.13.0 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.13.0...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-15 00:50:56 +00:00
Michael Shamoon
ddb25ce281 Merge pull request #7 from isigmund/dev
Corrected layout of supported scanner table
2022-02-14 14:50:53 -08:00
Ingo Sigmund
b4863173bd Corrected layout of supported scanner table 2022-02-14 23:39:54 +01:00
Michael Shamoon
140dbe1686 Merge branch 'muued-patch-1' into dev 2022-02-14 14:19:28 -08:00
Michael Shamoon
f2f7b71367 Merge branch 'patch-1' of https://github.com/muued/paperless-ng into muued-patch-1 2022-02-14 14:17:52 -08:00
dependabot[bot]
10a57687a3 Bump karma from 6.3.3 to 6.3.14 in /src-ui
Bumps [karma](https://github.com/karma-runner/karma) from 6.3.3 to 6.3.14.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v6.3.3...v6.3.14)

---
updated-dependencies:
- dependency-name: karma
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-11 13:28:26 +00:00
Andreas
f84be89e49 Update setup.rst
In my installation environment the setup didn't work. I think running `docker exec` instead of `docker-compose run` is more error free. Or is there any specific reason why `docker-compose run` is used?
2022-01-31 10:09:57 +01:00
Jonas Winkler
fb6369f43c New translations django.po (Portuguese, Brazilian)
[ci skip]
2022-01-30 10:10:09 +01:00
Jonas Winkler
4b7c8c6157 New translations messages.xlf (Portuguese, Brazilian)
[ci skip]
2022-01-30 09:06:57 +01:00
Jonas Winkler
81e8317326 New translations django.po (Portuguese, Brazilian)
[ci skip]
2022-01-30 09:06:55 +01:00
2600box
3d6ca2cda3 Update usage_overview.rst
Corrected typo
2022-01-27 19:11:24 +01:00
Jonas Winkler
0740473ecc New translations django.po (German)
[ci skip]
2022-01-26 20:53:49 +01:00
Fabian Ohler
1bce697475 add visibility of PAPERLESS_PRE_CONSUME_SCRIPT 2022-01-26 10:48:05 +01:00
Jonas Winkler
baaae7f76c New translations django.po (English, United Kingdom)
[ci skip]
2022-01-23 18:06:40 +01:00
Jonas Winkler
bb19d4de9f New translations messages.xlf (Hebrew)
[ci skip]
2022-01-18 19:55:59 +01:00
Jonas Winkler
6880f72472 New translations messages.xlf (Slovenian)
[ci skip]
2022-01-16 18:11:53 +01:00
Jonas Winkler
89fda615f6 New translations django.po (Slovenian)
[ci skip]
2022-01-16 18:11:51 +01:00
s4nf4n
2c84d29050 add ansible role_name to fix ci 2022-01-16 17:49:05 +01:00
Michael Shamoon
85399cf99f Add white background to plaintext documents 2022-01-13 11:13:33 -08:00
Dave Machado
e655b40d3a Update documentation for grammar and additional clarity
Small tweaks to be consistent in oxford comma usage already at work in
the docs. More importantly, adding some clarification here and there
to try and make things even more dead simple to read :)
2022-01-07 21:51:08 -05:00
Phil
3e94f3c58c Remove duplicate line 2021-12-20 09:36:59 +01:00
Jonas Winkler
61a42f45ab New translations messages.xlf (Czech)
[ci skip]
2021-12-17 09:59:59 +01:00
Jonas Winkler
4e7863c27f New translations messages.xlf (Czech)
[ci skip]
2021-12-17 08:36:14 +01:00
Jonas Winkler
f9a5081438 New translations messages.xlf (Czech)
[ci skip]
2021-12-16 22:36:37 +01:00
Jonas Winkler
ea5d7ac6f0 New translations messages.xlf (Czech)
[ci skip]
2021-12-16 21:28:24 +01:00
Phil
b318c0ab04 Add two more scanner recommendations
* Brother ADS-2800W
* Brother MFC-8950DW
* Add column for SFTP
2021-12-16 15:56:12 +01:00
Jonas Winkler
3d0a7c73e9 New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]
2021-12-13 13:43:16 +01:00
Jonas Winkler
e98bf547e5 New translations django.po (Arabic, Saudi Arabia)
[ci skip]
2021-12-13 12:45:44 +01:00
Jonas Winkler
8cb2e588fb New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]
2021-12-13 12:45:42 +01:00
Jonas Winkler
e4f99de13d New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]
2021-12-13 11:31:04 +01:00
Daniel Blittschau
206d5be46c Update login.html to not autocapitalize username 2021-11-26 16:15:08 -06:00
Jonas Winkler
e0f80c4364 New translations messages.xlf (Arabic, Egypt)
[ci skip]
2021-11-23 19:07:26 +01:00
Jonas Winkler
86891323ea New translations django.po (Arabic, Egypt)
[ci skip]
2021-11-23 19:07:25 +01:00
Jonas Winkler
69e315ee8a New translations messages.xlf (Arabic, Yemen)
[ci skip]
2021-11-23 19:07:24 +01:00
Jonas Winkler
ced3aefc54 New translations django.po (Arabic, Yemen)
[ci skip]
2021-11-23 19:07:23 +01:00
Jonas Winkler
6abf26bd99 New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]
2021-11-23 19:07:22 +01:00
Jonas Winkler
4667a7a6a2 New translations django.po (Arabic, Saudi Arabia)
[ci skip]
2021-11-23 19:07:21 +01:00
Jonas Winkler
6eb5f3a518 New translations messages.xlf (Arabic, Bahrain)
[ci skip]
2021-11-23 19:07:20 +01:00
Jonas Winkler
6f87b7830d New translations django.po (Arabic, Bahrain)
[ci skip]
2021-11-23 19:07:19 +01:00
Jonas Winkler
ccf974b1b7 New translations messages.xlf (Slovenian)
[ci skip]
2021-11-23 19:07:18 +01:00
Jonas Winkler
d9016ed619 New translations django.po (Slovenian)
[ci skip]
2021-11-23 19:07:16 +01:00
Jonas Winkler
bd2eade33d New translations messages.xlf (Khmer)
[ci skip]
2021-11-01 19:47:02 +01:00
Jonas Winkler
11e8ea471d New translations django.po (Khmer)
[ci skip]
2021-11-01 19:47:01 +01:00
Jonas Winkler
992bef1553 New translations messages.xlf (Greek)
[ci skip]
2021-10-31 23:52:21 +01:00
Jonas Winkler
396235be3e New translations django.po (Greek)
[ci skip]
2021-10-31 23:52:19 +01:00
Jonas Winkler
9662463510 New translations messages.xlf (Greek)
[ci skip]
2021-10-31 22:48:03 +01:00
Jonas Winkler
64e1590d9e New translations django.po (Greek)
[ci skip]
2021-10-31 22:48:02 +01:00
Saksham Arya
c751690e79 fixed setup command 2021-11-01 00:08:36 +05:30
Alexander Menk
f76915117b #1382 Fix: Search box overlays menu on mobile
Fix Z-index problem
2021-10-31 12:34:22 +01:00
Jonas Winkler
ba915844a4 New translations messages.xlf (Greek)
[ci skip]
2021-10-30 21:49:45 +02:00
Jonas Winkler
59d96d170e New translations django.po (Greek)
[ci skip]
2021-10-30 21:49:44 +02:00
Denilson Sá Maia
a9a27eda51 Clarifying documentation on filename placeholders
The documentation text now better describes what the code does. It is now clear that the time is not included, and that all date placeholders are either zero-padded or ISO-formatted.

05c36f91cf/src/documents/file_handling.py (L164-L171)
2021-10-15 15:14:06 +02:00
Jonas Winkler
249de7ec6d New translations messages.xlf (Czech)
[ci skip]
2021-10-13 21:07:55 +02:00
Jonas Winkler
8aabf4805a New translations django.po (Czech)
[ci skip]
2021-10-13 21:07:54 +02:00
Jonas Winkler
2ab06d7294 New translations messages.xlf (Czech)
[ci skip]
2021-10-13 20:07:40 +02:00
Jonas Winkler
e71f38deea New translations django.po (Czech)
[ci skip]
2021-10-13 20:07:39 +02:00
Denilson Sá Maia
0d70925abe Fixing broken link to docker CLI basics
The old post is still archived: https://web.archive.org/web/20210218064256/https://sehn.tech/post/devops-with-docker/

The content seems to have moved to a new URL: https://www.sehn.tech/refs/devops-with-docker/
2021-10-11 01:34:18 +02:00
Patrick Kilter
89bb73aa25 typo fixed 2021-10-07 21:59:35 +02:00
Patrick Kilter
1c93f26034 Added hint to use Management Utilities
Enable User to find the Management Utiltities Docs
2021-10-07 21:49:12 +02:00
Jonas Winkler
86e44da695 New translations django.po (Chinese Simplified)
[ci skip]
2021-09-26 14:38:30 +02:00
Jonas Winkler
530ad72e18 New translations messages.xlf (Portuguese)
[ci skip]
2021-09-21 13:59:29 +02:00
Jonas Winkler
ae185a1848 New translations messages.xlf (Portuguese)
[ci skip]
2021-09-21 13:00:15 +02:00
Jonas Winkler
e3682b69f7 New translations messages.xlf (Portuguese)
[ci skip]
2021-09-21 12:03:15 +02:00
Jonas Winkler
fe72fc173d New translations messages.xlf (Chinese Traditional)
[ci skip]
2021-09-21 06:54:50 +02:00
Jonas Winkler
3b4663639d New translations django.po (Chinese Traditional)
[ci skip]
2021-09-21 06:54:49 +02:00
Jonas Winkler
51b20a6e17 New translations messages.xlf (Chinese Simplified)
[ci skip]
2021-09-21 06:54:48 +02:00
Jonas Winkler
ad9122cd4f New translations messages.xlf (Chinese Simplified)
[ci skip]
2021-09-20 20:37:38 +02:00
Jonas Winkler
7d8bf75e44 New translations django.po (Chinese Simplified)
[ci skip]
2021-09-20 20:35:39 +02:00
Jonas Winkler
e36e4f61b3 New translations django.po (Chinese Simplified)
[ci skip]
2021-09-20 19:38:04 +02:00
Jonas Winkler
5612ad08dd New Crowdin updates (#1305) 2021-09-14 21:34:53 +02:00
Jonas Winkler
7bc8325df9 Merge pull request #1311 from mattlamb99/patch-1
Incorrect path to docker-compose files
2021-09-14 21:34:36 +02:00
Matt Lamb
2aca64bfcd Incorrect path to docker-compose files 2021-09-13 16:33:46 +12:00
Jonas Winkler
e9956234a3 Merge pull request #1297 from shamoon/feature/issue-1260
Add loading indicator when document list reloading
2021-09-10 20:37:37 +02:00
Jonas Winkler
d656de8883 Merge pull request #1258 from tribut/logout-url
Add PAPERLESS_LOGOUT_REDIRECT_URL
2021-09-10 20:36:21 +02:00
Jonas Winkler
32f0ebaac3 Merge pull request #1270 from ajkavanagh/fix-ansible-role-gotenberg-endpoint
Fix PAPERLESS_TIKA_GOTENBERG_ENDPOINT in a/t/main.yml
2021-09-10 20:35:35 +02:00
Jonas Winkler
73700437e4 New Crowdin updates (#1276) 2021-09-10 20:34:33 +02:00
Michael Shamoon
14d96350c3 Add i18n 2021-09-10 11:28:49 -07:00
Jonas Winkler
4e9c4ebd02 Merge pull request #1274 from padraigkitterick/patch-1
Updated docker instructions re webserver port
2021-09-10 20:28:47 +02:00
Michael Shamoon
097fe424c2 Show loading with spinner on document list reloading 2021-09-08 21:12:44 -07:00
Pádraig Kitterick
12abb592be Updated docker instructions re webserver port
Clarified exactly what to change to modify the default webserver port (issue #1273)
2021-08-31 14:36:55 +01:00
Alex Kavanagh
4f0951402a Fix PAPERLESS_TIKA_GOTENBERG_ENDPOINT in a/t/main.yml
This fixes the ansible role for installing paperless-ng where the config
item PAPERLESS_TIKA_GOTENBERG_ENDPOINT derived from the wrong ansible
variable "paperlessng_tika_endpoint".  This patch corrects that to
"paperlessng_tika_gotenberg_endpoint".
2021-08-30 18:01:33 +01:00
Jonas Winkler
b555b3664f Merge pull request #1262 from Tooa/fix-issue-1250
fix(tika): adapt to Gotenberg 7 API
2021-08-28 13:57:23 +02:00
Uli Fahrer
2dcacaee14 fix(tika): adapt to Gotenberg 7 API
This commit adapts to the latest breaking changes from Gotenberg 7.
It also freezes the usage of the Gotenberg server to v7.x. Doing
this prevents further breaking changes leaking in our code base.

* refs #1250
2021-08-27 08:32:16 +02:00
Felix Eckhofer
bf2cdae3b1 Add PAPERLESS_LOGOUT_REDIRECT_URL
When set, the user is redirected to this URL after a logout. Especially
useful in conjunction with PAPERLESS_ENABLE_HTTP_REMOTE_USER and SSO.
2021-08-26 18:40:12 +02:00
Felix Eckhofer
64304c5121 Add PAPERLESS_TRASH_DIR
When set, original files are moved here instead of being permanently
removed when a document is deleted.
2021-08-24 12:50:13 +02:00
jonaswinkler
cd43bc1f66 changelog 2021-08-22 17:15:14 +02:00
jonaswinkler
1b24136590 version bump 2021-08-22 17:11:36 +02:00
jonaswinkler
e8d5b549de documentation 2021-08-22 17:10:10 +02:00
jonaswinkler
3866a77d68 Merge branch 'master' into dev 2021-08-22 17:03:58 +02:00
jonaswinkler
360fe68f92 fix whitespace 2021-08-22 17:03:45 +02:00
Jonas Winkler
c9229f9c80 Merge pull request #1066 from holzhannes/patch-3
Info for The input device is not a TTY Errors
2021-08-22 17:02:08 +02:00
Jonas Winkler
e5b92d895d Update docs/administration.rst
Co-authored-by: Stéphane Brunner <stephane.brunner@camptocamp.com>
2021-08-22 17:00:36 +02:00
jonaswinkler
a7643c1c29 Merge branch 'master' into dev 2021-08-22 16:27:59 +02:00
jonaswinkler
45fd4e8565 fix whitespace 2021-08-22 16:27:44 +02:00
jonaswinkler
211a9d720a changelog 2021-08-22 16:26:58 +02:00
Jonas Winkler
da9c2735b4 Merge pull request #1201 from pewter77/patch-1
update configuration docs for languages
2021-08-22 16:26:27 +02:00
jonaswinkler
d31baca442 downgrade numpy due to armv7 issues 2021-08-19 16:18:49 +02:00
jonaswinkler
499d6f79aa Merge remote-tracking branch 'origin/master' into dev 2021-08-19 00:06:47 +02:00
jonaswinkler
49e049f1c5 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-08-19 00:06:37 +02:00
jonaswinkler
7411d7c1e2 update dependencies 2021-08-19 00:06:23 +02:00
Jonas Winkler
3f5d3d15fd Merge pull request #1209 from Unkn0wnCat/patch-1
Add Doxie Q to scanners.rst
2021-08-18 23:53:14 +02:00
Jonas Winkler
68fb85ceca Merge pull request #1221 from AlD/master
Make ignores configurable
2021-08-18 22:41:27 +02:00
Daniel Albers
3ebe6d5aef Make ignores configurable
Adds config file setting PAPERLESS_CONSUMER_IGNORE_PATTERNS.
2021-08-18 22:23:18 +02:00
jonaswinkler
566b3ed53d Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-08-18 22:03:31 +02:00
Jonas Winkler
a688c747d7 New Crowdin updates (#1198) 2021-08-18 21:56:59 +02:00
jonaswinkler
83b90e1416 install required dependency for building paperless-ng on GitHub CI 2021-08-18 18:40:27 +02:00
jonaswinkler
23c6f849d6 fix bug with DPI calculation 2021-08-18 18:33:33 +02:00
jonaswinkler
ba6843df83 update python dependencies 2021-08-18 18:21:41 +02:00
jonaswinkler
0b90e69119 update dockerfile 2021-08-18 18:21:31 +02:00
jonaswinkler
dbe820323e switch to python 3.9 2021-08-18 17:47:53 +02:00
Kevin Kandlbinder
47d95d5b0a Add Doxie Q to scanners.rst
The Doxie Q / Q2 is a budget-scanner I've been using for my paperless-usage. It has POST-Support to a custom endpoint like paperless over WiFi and has a rather open API (See https://help.getdoxie.com/doxieq/wifi/api/).
2021-08-04 15:23:12 +02:00
fignew
757507e634 Add Epson ES-580W recommendation and organize table 2021-07-31 14:32:36 -04:00
pewter77
971192f6f3 update configuration docs for languages
Due to tesseract naming scheme, packages use '-' but the internal OCR uses '_' . This is to clarify in the documentation that this is the case for new users.
2021-07-30 23:21:22 +08:00
Fabian Ohler
07d3f47978 recommend Brother MFC-L2750DW 2021-07-23 10:27:31 +02:00
Jonas Winkler
fbfc7df593 Merge pull request #1173 from mweimerskirch/feature/l10n-lb_LU
Added support for Luxembourgish (lb_LU) as an interface language
2021-07-18 21:42:58 +02:00
Jonas Winkler
3c7644ce79 Merge pull request #1153 from jonaswinkler/l10n_dev
New Crowdin updates
2021-07-18 17:36:14 +02:00
Jonas Winkler
4e4a8bcca8 New translations messages.xlf (Luxembourgish)
[ci skip]
2021-07-16 17:20:14 +02:00
Michel Weimerskirch
dc5586b16d Added support for Luxembourgish (lb_LU) as an interface language 2021-07-16 16:43:55 +02:00
Jonas Winkler
1d87b48471 New translations messages.xlf (Luxembourgish)
[ci skip]
2021-07-16 16:22:10 +02:00
Jonas Winkler
353a3432df New translations django.po (Luxembourgish)
[ci skip]
2021-07-16 16:22:08 +02:00
Jonas Winkler
efe94bbf18 New translations messages.xlf (Luxembourgish)
[ci skip]
2021-07-16 15:01:08 +02:00
Jonas Winkler
cea6ec09bc New translations django.po (Luxembourgish)
[ci skip]
2021-07-16 15:01:07 +02:00
Jonas Winkler
4a3276f69c New translations messages.xlf (Luxembourgish)
[ci skip]
2021-07-16 13:47:43 +02:00
Jonas Winkler
f164def2ed New translations django.po (Luxembourgish)
[ci skip]
2021-07-16 13:47:42 +02:00
Jonas Winkler
511c76ae7a New translations messages.xlf (Luxembourgish)
[ci skip]
2021-07-15 10:58:18 +02:00
Jonas Winkler
bfa6dda0de New translations django.po (Luxembourgish)
[ci skip]
2021-07-15 10:58:16 +02:00
Jonas Winkler
54af734971 New translations django.po (Luxembourgish)
[ci skip]
2021-07-15 09:42:47 +02:00
Jonas Winkler
5b9763ecb4 New translations messages.xlf (Luxembourgish)
[ci skip]
2021-07-14 18:00:31 +02:00
Jonas Winkler
438bad23e8 New translations django.po (Luxembourgish)
[ci skip]
2021-07-14 18:00:29 +02:00
Jonas Winkler
ae5a205ba3 New translations django.po (Luxembourgish)
[ci skip]
2021-07-14 10:42:55 +02:00
Jonas Winkler
19b683e7b0 New translations messages.xlf (Luxembourgish)
[ci skip]
2021-07-13 23:45:12 +02:00
Jonas Winkler
0c92027414 New translations django.po (Luxembourgish)
[ci skip]
2021-07-13 23:45:11 +02:00
Jonas Winkler
c4e3b2ca2f New translations messages.xlf (Luxembourgish)
[ci skip]
2021-07-13 22:18:15 +02:00
Jonas Winkler
ba67b89db7 New translations django.po (Luxembourgish)
[ci skip]
2021-07-13 22:18:14 +02:00
Jonas Winkler
06f308ede3 New translations messages.xlf (Spanish)
[ci skip]
2021-07-11 12:20:36 +02:00
Jonas Winkler
214fb8204b New translations messages.xlf (Spanish)
[ci skip]
2021-07-11 10:29:21 +02:00
Jonas Winkler
2a2d7be9f9 New translations django.po (Spanish)
[ci skip]
2021-07-11 10:29:20 +02:00
Jonas Winkler
23304c3746 New translations django.po (Spanish)
[ci skip]
2021-07-11 09:21:44 +02:00
Jonas Winkler
20829c90b2 New translations django.po (German)
[ci skip]
2021-07-05 13:17:50 +02:00
Jonas Winkler
33cc3ce7e0 Merge pull request #1127 from jonaswinkler/l10n_dev
New Crowdin updates
2021-07-04 12:47:07 +02:00
Jonas Winkler
3487b23e88 New translations django.po (English, United Kingdom)
[ci skip]
2021-06-19 23:20:13 +02:00
benjaminfrank
ec707bd02a formatting 2021-06-16 23:04:39 +02:00
benjaminfrank
3cc463b2c3 add section 2021-06-16 23:03:28 +02:00
benjaminfrank
99e5cf0cdc remove whitespaces 2021-06-16 23:02:49 +02:00
benjaminfrank
ab0ec0d5a5 documentation
I have no clue why it looks funny though
2021-06-16 22:56:51 +02:00
benjaminfrank
e0a2af3d98 Create paperless-webserver.socket 2021-06-16 22:42:54 +02:00
benjaminfrank
524bc2722f Update paperless-webserver.service 2021-06-16 22:40:26 +02:00
Jonas Winkler
4718fe13c2 Merge pull request #1116 from ytzelf/patch-1
Update scanners.rst
2021-06-14 18:18:57 +02:00
ytzelf
8592acf6b8 Update scanners.rst
Added ADS-1100w which has FTP (and only FTP) capabilities but is quite cheap
2021-06-14 18:11:06 +02:00
jonaswinkler
88042d7072 fix wording 2021-06-13 21:30:20 +02:00
jonaswinkler
bf92e52d5c update dependencies 2021-06-13 21:21:56 +02:00
jonaswinkler
419580b3be changelog, versions 2021-06-13 19:17:29 +02:00
jonaswinkler
5ee1f6b82b Merge branch 'normalize-whitespace' into dev 2021-06-13 19:06:08 +02:00
Michael Lynch
410bb6a84e Fix trailing newlines in configuration.rst 2021-06-13 10:57:58 -04:00
Michael Lynch
af2b5fef13 Add checkout step to whitespace CI job 2021-06-13 10:57:40 -04:00
Michael Lynch
372ac3a40c Normalize whitespace in source files
Ensure that no source files have trailing whitespace at end of lines and ensure that all files end with a single trailing newline.

This also adds Github Actions to enforce whitespace conventions.
2021-06-13 10:57:40 -04:00
jonaswinkler
a1507d6079 update django-q 2021-06-13 16:36:05 +02:00
jonaswinkler
9242a8901a update django-q 2021-06-13 15:43:32 +02:00
jonaswinkler
1d4f25f930 update datepipe implementation due to interface change 2021-06-13 15:27:04 +02:00
jonaswinkler
7323ec8d16 update angular devkit 2021-06-13 15:18:23 +02:00
jonaswinkler
39d45367d0 replace ng-bootstrap with ngx-bootstrap 2021-06-13 15:12:56 +02:00
jonaswinkler
a6521952b0 update to Angular 11 2021-06-13 15:08:56 +02:00
jonaswinkler
7148c10f1b update docker entrypoint 2021-06-13 12:54:24 +02:00
jonaswinkler
4a1a66248d update requirements.txt 2021-06-13 12:40:28 +02:00
Jonas Winkler
67d0773231 Merge pull request #933 from sbrunner/suggest
Add suggest
2021-06-13 12:20:34 +02:00
jonaswinkler
ff370172b5 fix pycodestyle 2021-06-13 12:18:21 +02:00
jonaswinkler
1f707e86cc fix logging getting spammed with pdfminer warnings on JPG files 2021-06-13 12:09:16 +02:00
jonaswinkler
a3dae02cfb write classifier model to temporary file before copying to final location 2021-06-13 12:03:20 +02:00
jonaswinkler
3eae8a2210 update dependencies 2021-06-13 12:02:49 +02:00
Jonas Winkler
0f18fe1853 Merge pull request #1107 from MJWcodr/patch-1
Update setup.rst
2021-06-13 11:34:03 +02:00
Jonas Winkler
513c61eb79 Merge pull request #1113 from magnetic6/master
Document specification of the expected creation date order
2021-06-13 11:33:43 +02:00
Peter M
4031233fd4 Document specification of the expected creation date order 2021-06-12 10:15:51 -04:00
Matthias J. Wünsch
76ff6100a3 Update setup.rst 2021-06-09 16:46:53 +02:00
Jonas Winkler
05c36f91cf Merge pull request #1105 from mtlynch/single-install-cmd
Simplify installation command
2021-06-07 00:48:29 +02:00
Michael Lynch
6625f8962a Simplify installation command
The installation for docker is currently three separate commands, but it can be a single command if the user simply pipes to the sh interpreter directly. I know there are some who object to piping to sh from a URL, but the current method has no security benefit over piping directly to sh.
2021-06-06 18:02:23 -04:00
Jonas Winkler
63402b70d2 Merge pull request #1057 from muued/patch-6
adjust ansible README to installation instructions
2021-06-03 15:14:36 +02:00
Stéphane Brunner
2ae4a7806d Add suggest 2021-05-30 14:50:29 +02:00
Jonas Winkler
fcc4ecd007 Merge pull request #1068 from servusoft/dev
Solving issue with search criteria 'maximum age' for some mail server
2021-05-29 19:13:10 +02:00
Jonas Winkler
45497250cd Merge pull request #1074 from sbrunner/scan-to-paperless
Add Scan to Paperless as affiliated project
2021-05-29 19:12:46 +02:00
Stéphane Brunner
7dd957140e Add Scan to Paperless as affiliated project 2021-05-29 16:38:16 +02:00
servusoft
4cd772a39e Solving issue with search criteria maximum age for some mail server
Some mail servers (mail.ru) do not support search criteria for the maximum age. By setting the maximum age to 0, it is possible to hide the search criteria. This PR solves that problem.
2021-05-27 18:30:57 +02:00
HolzHannes
b3906e7bc1 Corrected position of info 2021-05-27 10:01:30 +02:00
HolzHannes
e5009b4cd2 Info for The input device is not a TTY Errors 2021-05-27 08:30:21 +02:00
Fabian Ohler
10bf9fd1f8 Adjusted paperlessng_version variable explanation 2021-05-26 08:30:17 +02:00
Jonas Winkler
bd8e68692e New translations django.po (Dutch) (#1048) 2021-05-25 00:01:38 +02:00
Jonas Winkler
b8386a1531 Merge pull request #1052 from muued/patch-5
Use ansible-galaxy during updates
2021-05-25 00:01:20 +02:00
Fabian Ohler
61534fb29d Apply suggestions from code review
Co-authored-by: Fabian Koller <C0nsultant@users.noreply.github.com>
2021-05-24 15:27:11 +02:00
Fabian Ohler
9ad81be38c adjust ansible README to installation instructions
and fix some typos
2021-05-24 15:10:41 +02:00
Fabian Ohler
cf7048e336 Use ansible-galaxy during updates
This mechanism is already used for the installation process.
2021-05-22 23:29:44 +02:00
jonaswinkler
a6105b3ad3 update frontend dependencies 2021-05-21 15:27:10 +02:00
jonaswinkler
a262a82cad Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-05-19 23:11:43 +02:00
jonaswinkler
635c96accf better exception handling 2021-05-19 23:11:24 +02:00
Jonas Winkler
5c174a69c2 New Crowdin updates (#1043) 2021-05-19 23:00:51 +02:00
jonaswinkler
de08d17835 changelog 2021-05-19 23:00:03 +02:00
jonaswinkler
ca1e838c52 catch another exception regarding classifier loading 2021-05-19 22:57:52 +02:00
jonaswinkler
3b73146ecd changelog and version bump 2021-05-19 22:40:56 +02:00
jonaswinkler
8e3822f8e6 Merge remote-tracking branch 'origin/master' into dev 2021-05-19 22:37:01 +02:00
jonaswinkler
3b912a0de1 improved docker startup time 2021-05-19 22:26:51 +02:00
jonaswinkler
c72791bd21 Fix file permissions 2021-05-19 22:05:23 +02:00
jonaswinkler
80ba5b561f codestyle 2021-05-19 20:26:12 +02:00
jonaswinkler
f9f4d4c937 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-05-19 20:03:05 +02:00
jonaswinkler
0419c52d35 fix file permissions 2021-05-19 20:02:56 +02:00
jonaswinkler
93a79be1e2 delete macOS specific files 2021-05-19 20:02:47 +02:00
jonaswinkler
f8afbae2cd ignore macOS specific files 2021-05-19 19:56:01 +02:00
jonaswinkler
4a52d346f9 remove dead code 2021-05-19 19:55:35 +02:00
Jonas Winkler
7d59d11725 New Crowdin updates (#1026) 2021-05-18 14:46:12 +02:00
Jonas Winkler
5886348188 Merge pull request #1034 from steviehs/patch-1
Update setup.rst
2021-05-18 14:45:52 +02:00
steviehs
a8135528b1 Update setup.rst
Added hint to upgrade pip first.
2021-05-17 09:07:31 +02:00
jonaswinkler
df6b991161 File permissions 2021-05-16 23:01:41 +02:00
Jonas Winkler
3f33f66387 New Crowdin updates (#1023) 2021-05-16 13:13:54 +02:00
jonaswinkler
870808f3c2 add support for configuring mail server character set per server. fixes #548 2021-05-16 11:58:32 +02:00
Jonas Winkler
b12fcca20d Merge remote-tracking branch 'origin/dev' into dev 2021-05-16 01:23:07 +02:00
Jonas Winkler
61b47e358f correct file mode 2021-05-16 01:22:51 +02:00
Jonas Winkler
40a2fb7936 New Crowdin updates (#1022) 2021-05-15 21:14:03 +02:00
jonaswinkler
9afc8ba43d Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-05-15 19:21:34 +02:00
jonaswinkler
b122a05c71 changelog and version bump 2021-05-15 19:21:15 +02:00
Jonas Winkler
f568a9fdfa Merge pull request #934 from sbrunner/no-progress
Add --no-progress-bar option to commands
2021-05-15 19:06:50 +02:00
jonaswinkler
a350bb3086 add translation hint 2021-05-15 18:58:23 +02:00
jonaswinkler
8ae4b7560b added some missing strings 2021-05-15 18:53:55 +02:00
jonaswinkler
96f4924911 frontend support for fulltext sorting 2021-05-15 18:48:39 +02:00
jonaswinkler
f3703fc6e3 only show score when sorting by score 2021-05-15 17:25:49 +02:00
jonaswinkler
0d5fd229bf disable reverse sorting by score 2021-05-15 17:11:26 +02:00
jonaswinkler
1519e66550 fix pycodestyle 2021-05-15 15:14:22 +02:00
Jonas Winkler
fcae461430 Merge pull request #1003 from puuu/baseurl
Fix sub path support
2021-05-15 15:12:00 +02:00
jonaswinkler
039d797dfc Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-05-15 15:00:39 +02:00
Jonas Winkler
4f61868b28 New Crowdin updates (#989) 2021-05-15 15:00:00 +02:00
jonaswinkler
9efbc55fd6 update dependencies 2021-05-15 14:59:35 +02:00
Jonas Winkler
2e4e88114e Merge pull request #1019 from amenk/feature/print-css-for-doc-list
Add print css for document list
2021-05-15 14:35:02 +02:00
jonaswinkler
8ee2e8b23d sorting for full text queries 2021-05-15 13:58:11 +02:00
Alexander Menk
37287c3e7e Add print css for document list
Allow printing of the document list in a clean way

* Hide sidebar, filter
* Use full width
2021-05-15 12:26:04 +02:00
jonaswinkler
814d90745b Workaround for all PDFminer.six issues. 2021-05-15 12:15:32 +02:00
jonaswinkler
48e8076e34 Merge branch 'master' into dev 2021-05-15 12:04:45 +02:00
Jonas Winkler
edb9d934b2 Merge pull request #1017 from muued/patch-3
fix description of paperless-scheduler.service
2021-05-14 21:14:14 +02:00
Fabian Ohler
ed44f0cb04 fix description of paperless-scheduler.service 2021-05-14 13:43:39 +02:00
puuu
1c2f3cf9af Fix serving static files under root_path 2021-05-14 18:14:59 +09:00
puuu
13afd25690 Update documentation about PAPERLESS_FORCE_SCRIPT_NAME 2021-05-14 15:39:20 +09:00
puuu
f9b6374685 use {% url %} template to refere to root path 2021-05-14 14:44:13 +09:00
puuu
56c9b578e3 Make redirections respect root_path or STATIC_URL, name IndexView 2021-05-14 14:44:13 +09:00
puuu
e792a00feb Introduce BASE_URL, make LOGIN_URL and STATIC_URL work with subpath 2021-05-14 14:44:13 +09:00
puuu
c35c4eade9 Introduce ConfigurableWorker to make uvicorn respect FORCE_SCRIPT_NAME 2021-05-14 14:44:13 +09:00
puuu
5bf725546b use baseURI for websocket and api calls 2021-05-14 14:44:13 +09:00
puuu
6b6862705e make all links relative 2021-05-14 14:44:13 +09:00
jonaswinkler
b89b51b121 Merge branch 'master' into dev 2021-05-09 16:22:21 +02:00
Jonas Winkler
1b31388232 Merge pull request #995 from cmer/prevent-robot-indexing
Tell web crawlers to not index Paperless
2021-05-07 22:30:49 +02:00
Jonas Winkler
8256e73f04 Merge pull request #994 from shamoon/fix/issue-985
Respect user dark mode setting on login page
2021-05-07 22:30:03 +02:00
Carl Mercier
fc4e59ec00 Tell web crawlers to not index Paperless 2021-05-07 14:02:11 -04:00
Michael Shamoon
428e00ba23 Respect user dark mode setting on login page 2021-05-07 10:50:08 -07:00
Jonas Winkler
2ccbb08c3f Merge pull request #992 from muued/patch-2
Mention lacking support for ARM in ansible setup
2021-05-06 20:58:59 +02:00
Jonas Winkler
eefc026a17 Merge pull request #991 from muued/patch-1
Use ansible-galaxy for ansible setup
2021-05-06 17:51:21 +02:00
Fabian Ohler
d89022a280 Mention lacking support for ARM in ansible setup
Since the jbig2enc dependency is pulled from a repository that only provides i386 and amd64 packages, the installation will fail on arm hosts.
2021-05-06 14:15:12 +02:00
Fabian Ohler
93bd24c9d2 Update setup.rst
use ansible-galaxy to fetch the ansible scripts to have a role called paperless-ng instead of ansible
2021-05-06 14:08:49 +02:00
Jonas Winkler
197aec2945 New Crowdin updates (#988)
* New translations django.po (French)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations django.po (Portuguese)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]
2021-05-05 22:36:22 +02:00
Jonas Winkler
e16d58cff5 New Crowdin updates (#986) 2021-05-05 14:49:08 +02:00
Jonas Winkler
92667009be add swedish locale 2021-05-04 17:01:39 +02:00
Jonas Winkler
c93657f40e New Crowdin updates (#976) 2021-05-04 15:28:10 +02:00
Jonas Winkler
16658f5939 Merge pull request #965 from jovandeginste/add-rtf
Add support for rtf
2021-04-30 19:11:07 +02:00
Jo Vandeginste
ec0af59596 Add support for rtf
Signed-off-by: Jo Vandeginste <Jo.Vandeginste@kuleuven.be>
2021-04-30 13:19:12 +02:00
Jonas Winkler
9e1f9d6d9d Merge pull request #960 from shamoon/fix/issue-65-2
Remove PDF type attribute to fix macOS Safari native PDF viewer crashing
2021-04-28 16:45:22 +02:00
Michael Shamoon
e652b927ce Remove type attribute of pdf object in document detail 2021-04-28 07:32:18 -07:00
Jonas Winkler
5a97f3f94b update libseccomp2 2021-04-28 02:12:55 +02:00
Jonas Winkler
9494c243a4 changelog, version bump 2021-04-27 22:52:50 +02:00
Jonas Winkler
c0a1be4325 Merge pull request #956 from WhiteHatTux/bugfix/879
Use gosu as it is less complicated than sudo
2021-04-27 09:59:05 +02:00
Jonas Winkler
70fda8e2f8 New Crowdin updates (#932) 2021-04-27 09:52:30 +02:00
Christopher Timm
5765893f69 Use gosu instead of sudo for easier configuration
#879
2021-04-26 19:06:30 -05:00
Stéphane Brunner
dc26c9b7cc Add --no-progress-bar option to commands 2021-04-18 16:16:11 +02:00
jonaswinkler
17b9d7eb42 Merge branch 'master' into dev 2021-04-18 12:41:52 +02:00
jonaswinkler
0a897cae32 bugfix 2021-04-18 11:29:12 +02:00
jonaswinkler
37f56e824a Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-04-18 11:25:21 +02:00
jonaswinkler
a8e7ec0e96 changelog, version bump 2021-04-18 11:25:11 +02:00
Jonas Winkler
b86d853cf1 New Crowdin updates (#931) 2021-04-18 10:49:22 +02:00
Jonas Winkler
da0c94c9a1 New Crowdin updates (#930) 2021-04-17 22:33:42 +02:00
jonaswinkler
0547fd2760 fix minor issue 2021-04-17 22:33:06 +02:00
jonaswinkler
e0a6df8435 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-04-17 22:30:45 +02:00
jonaswinkler
c2d4ca7566 lets hope this works 2021-04-17 22:29:54 +02:00
jonaswinkler
56ce278bbd update FAQ 2021-04-17 22:29:24 +02:00
Jonas Winkler
e112541f5b New Crowdin updates (#929) 2021-04-17 20:34:57 +02:00
jonaswinkler
17c7b0840b changes for django 3.2 2021-04-17 16:00:29 +02:00
jonaswinkler
68658bd407 update dependencies 2021-04-17 14:56:25 +02:00
Jonas Winkler
9184845a9d Merge pull request #890 from what-name/feature/superuser-manager
Create initial Paperless user automatically
2021-04-17 14:44:01 +02:00
Jonas Winkler
8ddb2fb305 New Crowdin updates (#928) 2021-04-17 14:37:31 +02:00
jonaswinkler
96f53986b7 pycodestyle 2021-04-17 14:36:04 +02:00
jonaswinkler
8566682209 add test case, update password if changed 2021-04-17 14:33:07 +02:00
jonaswinkler
4f9ae17059 Merge branch 'dev' into feature/superuser-manager
# Conflicts:
#	docker/docker-entrypoint.sh
2021-04-17 14:10:56 +02:00
jonaswinkler
7f9f805c5f Merge branch 'dev' into feature/superuser-manager 2021-04-17 14:01:42 +02:00
Jonas Winkler
5208e81715 Merge pull request #856 from sbrl/patch-1
docker-entrypoint.sh: don't crash on chown errors
2021-04-17 13:57:14 +02:00
Jonas Winkler
01a786c117 Merge pull request #894 from lknop/master
add single compose file for usage in portainer environments
2021-04-17 13:50:11 +02:00
Jonas Winkler
8bf4f31954 Merge pull request #918 from shamoon/fix/issue-907
"Sticky" filter editor and bulk editor
2021-04-17 13:48:54 +02:00
jonaswinkler
07ab3e98ed add pl-PL locale 2021-04-17 13:41:26 +02:00
Jonas Winkler
ba5899de7b New Crowdin updates (#874) 2021-04-17 13:34:42 +02:00
Michael Shamoon
a4fef056ed Fix breakpoint
File missing from last commit
2021-04-14 13:24:03 -07:00
Michael Shamoon
c266cd6aae Spacing tweaks, mobile breakpoint 2021-04-14 09:34:39 -07:00
Michael Shamoon
43d05b2e6d Hide visible underlying shadows on filter / bulk editor 2021-04-14 09:00:57 -07:00
Michael Shamoon
6f0c14cc07 Make filter editor / bulk editor 'sticky' on scroll 2021-04-14 09:00:30 -07:00
Lukasz Knop
2eac8fa91c disabled unnecessary overrides, copied variable comments 2021-04-11 21:48:50 +02:00
Lukasz Knop
31f5e178b3 add single compose file for usage in portainer environments 2021-04-11 15:16:04 +02:00
Chris Nagy
c3d7088168 Fix code guidelines 2021-04-10 16:10:45 +02:00
Chris Nagy
a9e11b1cb7 Add newline end of file 2021-04-10 16:02:48 +02:00
Chris Nagy
ee51a0be13 Minor docs change 2021-04-10 15:08:33 +02:00
jonaswinkler
1091387f48 better logging for the retagger 2021-04-10 14:38:39 +02:00
jonaswinkler
4db75537cb install sudo from stable 2021-04-10 14:38:19 +02:00
Chris Nagy
cb4e738a0f Fix env variable in docker entrypoint 2021-04-10 13:50:52 +02:00
Chris Nagy
0cc32e7ed7 Extend docs with superuser 2021-04-10 13:47:31 +02:00
Jonas Winkler
94f90e1e81 Merge pull request #887 from alexpovel/master
Fix typo
2021-04-10 00:21:45 +02:00
Alex Povel
ce8f315747 Fix typo
See also a3c4e4c6b6/docker/compose/docker-compose.env (L30)
2021-04-09 22:14:09 +02:00
Starbeamrainbowlabs
b761a549c0 docker-prepare.sh: remove rogue instances of sudo
This is being done by calling the script as the correct user in the 
first place.
2021-04-08 03:06:01 +01:00
Starbeamrainbowlabs
dd7c5da256 docker-entrypoint.sh: split non-root tasks into docker-prepare.sh 2021-04-08 00:03:55 +01:00
Starbeamrainbowlabs
02dd7ec615 docker: mark scripts as executable 2021-04-07 23:19:20 +01:00
Jonas Winkler
b7b448b870 Merge pull request #875 from shamoon/fix/large-card-info-layout
Fix alignment of card info on large cards
2021-04-06 23:41:03 +02:00
Michael Shamoon
b7326afe5a Fix alignment of card info on large cards 2021-04-06 14:25:59 -07:00
jonaswinkler
a3c4e4c6b6 install script: configure time zone 2021-04-06 21:46:18 +02:00
jonaswinkler
645297d68c documentation 2021-04-06 21:46:16 +02:00
Jonas Winkler
6d8782f771 Merge pull request #860 from shamoon/feature/issue-858
Suppport search term PDF open parameter
2021-04-06 20:28:53 +02:00
Jonas Winkler
2728183eee New Crowdin updates (#871) 2021-04-06 20:23:18 +02:00
Michael Shamoon
3d0891c73b Updated to work with new unified search interface 2021-04-05 16:35:15 -07:00
Michael Shamoon
8226a8793e Merge remote-tracking branch 'upstream/dev' into feature/issue-858 2021-04-05 13:59:21 -07:00
jonaswinkler
d01477b337 changelog 2021-04-05 22:23:11 +02:00
jonaswinkler
6bb07c72ab API search documentation 2021-04-05 22:19:42 +02:00
jonaswinkler
a009462b80 update messages 2021-04-05 22:05:26 +02:00
jonaswinkler
9111b130e4 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-04-05 21:53:39 +02:00
jonaswinkler
1dbd7b9bb4 fix some issues with the search index 2021-04-05 21:53:07 +02:00
Jonas Winkler
2f95dfc0e7 New Crowdin updates (#855) 2021-04-05 21:44:14 +02:00
Jonas Winkler
acc317ddfd Merge pull request #818 from shamoon/fix/issue-817
Support passing current term from tag / document type / correspondent search field to 'create new' dialog
2021-04-05 21:43:50 +02:00
jonaswinkler
1fbd3935ea focus text filter input automatically 2021-04-05 21:43:20 +02:00
jonaswinkler
ca2bf962e9 force update of search index if out of date 2021-04-05 21:33:17 +02:00
jonaswinkler
1d27a3a14b fixed the write permission check 2021-04-05 21:33:04 +02:00
jonaswinkler
8e1a9dde05 bugfix 2021-04-05 21:05:32 +02:00
Michael Shamoon
8eabf8c77a Refactor unneeded ngIf 2021-04-04 19:57:16 -07:00
Michael Shamoon
ec4ec41552 Add back plus button which retains filter text 2021-04-04 17:05:27 -07:00
jonaswinkler
8960b0300f changelog and version bump 2021-04-05 00:36:44 +02:00
jonaswinkler
d6a2672cab Merge branch 'feature-unified-search' into dev 2021-04-05 00:25:10 +02:00
jonaswinkler
4b281ca89d logging before executing pre and post consume scripts 2021-04-05 00:22:11 +02:00
jonaswinkler
808b507b0f fix migration 2021-04-05 00:16:50 +02:00
jonaswinkler
ab47d03e1a update messages 2021-04-04 20:46:25 +02:00
jonaswinkler
aca999090b Merge branch 'dev' into feature-unified-search 2021-04-04 20:41:29 +02:00
jonaswinkler
1322aaf4da add migration to fix null characters in document contents 2021-04-04 20:41:08 +02:00
jonaswinkler
c49471fb3b bugfix 2021-04-04 01:25:54 +02:00
jonaswinkler
d13baab0a6 more testing 2021-04-04 01:19:07 +02:00
jonaswinkler
359b46c15b fixed the test cases 2021-04-04 00:29:40 +02:00
jonaswinkler
3b83e9a43d pycodestyle 2021-04-04 00:04:00 +02:00
jonaswinkler
ab7a499e8f refactor filter reset 2021-04-04 00:03:51 +02:00
jonaswinkler
fffe4f694f reset page when doing full text search 2021-04-03 22:19:12 +02:00
Michael Shamoon
18c028cafd Suppport search term PDF open parameter 2021-04-03 13:10:39 -07:00
jonaswinkler
4e289c7dab rename search 2021-04-03 21:56:33 +02:00
jonaswinkler
3dfe5c9262 fix page out of range with full text 2021-04-03 21:50:23 +02:00
jonaswinkler
be87caf7f6 fix search scores 2021-04-03 21:50:05 +02:00
jonaswinkler
b7063b199a disable sorting for now 2021-04-03 21:49:31 +02:00
jonaswinkler
1ed9c245f5 fixed more like this 2021-04-03 21:07:36 +02:00
jonaswinkler
fb1e9fe66a error messages for invalid search queries 2021-04-03 21:02:33 +02:00
jonaswinkler
38a386d5ae fix date filtering for full text search 2021-04-03 21:02:13 +02:00
jonaswinkler
726114575e Merge branch 'dev' into feature-unified-search 2021-04-03 20:31:16 +02:00
Michael Shamoon
026c213ea4 Refactor to use ng-select addTag function 2021-04-03 09:30:29 -07:00
jonaswinkler
cd85d4e86a update tooltips and messages 2021-04-02 14:59:02 +02:00
jonaswinkler
e906bf58f0 Save list view state across sessions 2021-04-02 14:46:45 +02:00
jonaswinkler
87d2209e6d update dependencies 2021-04-02 14:26:20 +02:00
jonaswinkler
704f8ea680 update dependencies 2021-04-02 14:21:05 +02:00
Jonas Winkler
1e101fb3db Merge pull request #842 from Bart1909/master
Implements #807
2021-04-02 14:08:01 +02:00
Jonas Winkler
a16643ee29 New Crowdin updates (#847) 2021-04-02 10:47:11 +02:00
Tobi
b783e0e211 refactoring 2021-03-30 20:51:49 +02:00
Tobi
1ec4570c8d renames document-asn component 2021-03-30 19:26:20 +02:00
Tobi
434194d290 Merge remote-tracking branch 'origin/master' 2021-03-30 19:07:44 +02:00
Tobi
f62e64357b implements #807 2021-03-30 19:07:29 +02:00
Jonas Winkler
b9f49c5eca Merge pull request #834 from benjaminfrank/patch-1
New android scanner app recommendation
2021-03-30 00:42:28 +02:00
Jonas Winkler
13a839de57 New Crowdin updates (#837) 2021-03-30 00:42:06 +02:00
benjaminfrank
7eb4253c00 Update scanners.rst 2021-03-27 14:40:13 +01:00
Jonas Winkler
dab210a183 Merge pull request #819 from shamoon/fix/issue-293-2
Remove all rem units on SVG elements
2021-03-26 23:13:06 +01:00
Jonas Winkler
5319d4782a New translations django.po (Italian) (#813) 2021-03-26 23:12:36 +01:00
Michael Shamoon
0463c3fe54 1.3em not 1.5em 2021-03-24 16:21:08 -07:00
Michael Shamoon
fe84430679 Remove all rem units on SVG elements
See https://bugzilla.mozilla.org/show_bug.cgi?id=1231147
2021-03-24 16:17:40 -07:00
Michael Shamoon
9514e79bfb Not needed, clearing will be done by timeout 2021-03-24 12:42:14 -07:00
Michael Shamoon
b6756595d9 Clear last search term when clear button clicked 2021-03-24 12:37:26 -07:00
Michael Shamoon
8ddb3e80b7 Add timeout for clearing last search term on select blur 2021-03-24 12:21:51 -07:00
Michael Shamoon
52bc1a62e1 Support passing current term from input-select search to create dialog e.g. for doc type / correspondent 2021-03-24 12:21:13 -07:00
Michael Shamoon
cd72ed2cec Support passing current term from tag search to create dialog 2021-03-24 12:13:37 -07:00
Jonas Winkler
ccaee4ce62 Update README.md 2021-03-24 10:31:05 +01:00
jonaswinkler
0e596bd1fc also apply \0 removal to sidecar contents 2021-03-22 23:08:34 +01:00
Jonas Winkler
21fafd3255 Update README.md 2021-03-22 23:03:01 +01:00
jonaswinkler
fda2bfbea7 better exception logging 2021-03-22 23:00:15 +01:00
jonaswinkler
d26c46e034 fixes #794 2021-03-22 22:46:35 +01:00
jonaswinkler
27cb243a2f fix dependencies 2021-03-21 13:50:48 +01:00
jonaswinkler
d3514fc5f9 update dependencies 2021-03-21 12:20:10 +01:00
jonaswinkler
4954851b68 Revert "update requirements"
This reverts commit 8f6e1360
2021-03-21 11:43:16 +01:00
Jonas Winkler
6bcb12ddc9 Merge pull request #796 from holzhannes/patch-2
Three new scanners, one iOS App and column for SMTP Support
2021-03-20 12:15:33 +01:00
HolzHannes
126a4ec21f Update scanners.rst
Some new scanners and a new Support column SMTP for Scanner which can directly send mails via SMTP. Also one iOS App to scan documents
2021-03-20 11:10:05 +01:00
Jonas Winkler
0aa084c792 New Crowdin updates (#790) 2021-03-18 23:50:54 +01:00
jonaswinkler
8f6e1360e1 update requirements 2021-03-18 23:49:49 +01:00
jonaswinkler
740237a8fa add migration 2021-03-17 22:33:00 +01:00
jonaswinkler
b6ff88645b lots of changes for the new unified search 2021-03-17 22:25:22 +01:00
jonaswinkler
630cd814e2 Merge branch 'dev' into feature-unified-search 2021-03-16 20:48:05 +01:00
Chris Nagy
e3ba968fef Add superuser management script 2021-03-14 19:43:22 +01:00
jonaswinkler
f9263ddb62 some initial attempts to merge search and document list 2021-03-07 13:16:23 +01:00
Michael Shamoon
23d8305027 Prevent dirty check lost on document close & reopen 2021-01-26 22:43:46 -08:00
Michael Shamoon
1950f805b3 Implement warning for closeAll 2021-01-26 22:27:50 -08:00
Michael Shamoon
d275a75517 whitespace 2021-01-26 21:11:57 -08:00
Michael Shamoon
1576e07011 Dont warn on navigate for documents 2021-01-26 20:46:28 -08:00
Michael Shamoon
07faba3983 Confirm button text 2021-01-25 23:39:16 -08:00
Michael Shamoon
d9547e87af Merge remote-tracking branch 'upstream/dev' into feature/unsaved-changes 2021-01-25 23:36:39 -08:00
Michael Shamoon
d672455ad8 Cleanup 2021-01-25 23:32:02 -08:00
Michael Shamoon
96a572b7a6 Refactor, missed import 2021-01-25 23:29:16 -08:00
Michael Shamoon
2a7bb27a78 Merge remote-tracking branch 'upstream/dev' into feature/unsaved-changes 2021-01-25 23:16:18 -08:00
Michael Shamoon
3f73cd5bfc Change warning title 2021-01-25 23:16:11 -08:00
Michael Shamoon
9c427f202d Disable discard button also if not dirty 2021-01-25 23:09:56 -08:00
Michael Shamoon
bc02dc30b1 Prevent confirmation warning after save 2021-01-25 23:06:25 -08:00
Michael Shamoon
8080b7a119 Document detail dirty checking 2021-01-25 23:00:57 -08:00
Michael Shamoon
b0fa0f2319 Settings navigation warning dialog 2021-01-25 22:44:26 -08:00
Michael Shamoon
6c5f9bbabb Settings dirty check for saving 2021-01-25 19:23:03 -08:00
Michael Shamoon
a5edbcf9ef Shrink dropdown note font size to fit on one line 2021-01-23 11:52:05 -08:00
Michael Shamoon
a6bd118f5e Disable any / all toggle when excluded items 2021-01-21 14:42:05 -08:00
Michael Shamoon
a73ff4ffa6 return key works too 2021-01-21 14:41:11 -08:00
Michael Shamoon
14d04ff8d2 Merge branch 'fix/issue-401' into feature/any-all-filtering 2021-01-21 14:29:31 -08:00
Michael Shamoon
d7cefabe98 Fix unable to save ANY views 2021-01-21 14:25:50 -08:00
Michael Shamoon
c926e0242a Add UI hint for option-click 2021-01-21 11:30:29 -08:00
Michael Shamoon
9ac19417e7 Prevent download when alt-click tags 2021-01-21 11:11:25 -08:00
Michael Shamoon
795dbc16d2 Prevent exclude click in editing (bulk editor) mode 2021-01-21 11:09:59 -08:00
Michael Shamoon
29a7737829 Support excluding tags 2021-01-21 10:59:53 -08:00
Michael Shamoon
3e0c3c0bb2 refactor 2021-01-20 19:44:50 -08:00
Michael Shamoon
cde867c9c6 Clicking card tag/dt/corresp should always add that item, never remove it 2021-01-20 19:40:40 -08:00
Michael Shamoon
ff8eb7fbce Remove unused interface 2021-01-20 19:36:47 -08:00
Michael Shamoon
3766d8687f Disable any/all toggle when not needed 2021-01-20 19:33:54 -08:00
Michael Shamoon
8f08201633 Fix resetting any vs all 2021-01-20 18:38:49 -08:00
Michael Shamoon
893dcd9f28 Update API filters for "any" tag_id 2021-01-20 18:35:03 -08:00
Michael Shamoon
79059b9aa7 changed event for toggling operator 2021-01-20 16:21:12 -08:00
Michael Shamoon
861b2efb1d Add support for 'any' ('OR') of tags when filtering 2021-01-20 15:21:41 -08:00
Michael Shamoon
cbf844e7db Typescript syntax fix 2020-12-17 07:33:20 -08:00
Michael Shamoon
88b39faa7e Select first tab when switching out of mobile display 2020-12-17 00:50:59 -08:00
Michael Shamoon
08495deebb Hide mobile preview when switching from mobile to desktop 2020-12-17 00:50:40 -08:00
Michael Shamoon
05b9af6195 Add preview tab for mobile & hide larger preview 2020-12-13 02:28:02 -08:00
409 changed files with 116553 additions and 41800 deletions

View File

@@ -21,6 +21,9 @@ indent_style = space
[*.yml]
indent_style = space
[*.rst]
indent_style = space
# Tests don't get a line width restriction. It's still a good idea to follow
# the 79 character rule, but in the interests of clarity, tests often need to
# violate it.

3
.env
View File

@@ -1 +1,2 @@
COMPOSE_PROJECT_NAME=paperless
COMPOSE_PROJECT_NAME=paperless
export PROMPT="(pipenv-projectname)$P$G"

View File

@@ -8,13 +8,13 @@ assignees: ''
---
<!---
=> Before opening an issue, please check the documentation and see if it helps you resolve your issue: https://paperless-ng.readthedocs.io/en/latest/troubleshooting.html
=> Before opening an issue, please check the documentation and see if it helps you resolve your issue: https://paperless-ngx.readthedocs.io/en/latest/troubleshooting.html
=> Please also make sure that you followed the installation instructions.
=> Please search the issues and look for similar issues before opening a bug report.
=> If you would like to submit a feature request please submit one under https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests
=> If you would like to submit a feature request please submit one under https://github.com/paperless-ngx/paperless-ngx/discussions/categories/feature-requests
=> If you encounter issues while installing of configuring Paperless-ng, please post that in the "Support" section of the discussions. Remember that Paperless successfully runs on a variety of different systems. If paperless does not start, it's probably an issue with your system, and not an issue of paperless.
=> If you encounter issues while installing of configuring Paperless-ngx, please post that in the "Support" section of the discussions. Remember that Paperless successfully runs on a variety of different systems. If paperless does not start, it's probably an issue with your system, and not an issue of paperless.
=> Don't remove the [BUG] prefix from the title.
-->

View File

@@ -11,9 +11,9 @@ assignees: ''
=> Discussions, Feedback and other suggestions belong in the "Discussion" section and not on the issue tracker.
=> If you would like to submit a feature request please submit one under https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests
=> If you would like to submit a feature request please submit one under https://github.com/paperless-ngx/paperless-ngx/discussions/categories/feature-requests
=> If you encounter issues while installing of configuring Paperless-ng, please post that in the "Support" section of the discussions. Remember that Paperless successfully runs on a variety of different systems. If paperless does not start, it's probably is an issue with your system, and not an issue of paperless.
=> If you encounter issues while installing of configuring Paperless-ngx, please post that in the "Support" section of the discussions. Remember that Paperless successfully runs on a variety of different systems. If paperless does not start, it's probably is an issue with your system, and not an issue of paperless.
=> Don't remove the [Other] prefix from the title.

22
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,22 @@
# https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/configuration-options-for-dependency-updates#package-ecosystem
version: 2
updates:
# Enable version updates for npm
- package-ecosystem: "npm"
target-branch: "dev"
# Look for `package.json` and `lock` files in the `root` directory
directory: "/src-ui"
# Check the npm registry for updates every week
schedule:
interval: "weekly"
# Enable version updates for Python
- package-ecosystem: "pip"
target-branch: "dev"
# Look for a `Pipfile` in the `root` directory
directory: "/"
# Check for updates once a week
schedule:
interval: "weekly"

18
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,18 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 30
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
- fixpending
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

View File

@@ -1,78 +0,0 @@
---
name: Ansible Role
on:
push:
branches-ignore:
- 'translations**'
pull_request:
branches-ignore:
- 'translations**'
jobs:
# https://molecule.readthedocs.io/en/latest/ci.html#github-actions
test:
runs-on: ubuntu-latest
steps:
- name: Check out the codebase
uses: actions/checkout@v2
if: github.event_name != 'pull_request'
with:
path: "${{ github.repository }}"
- name: Check out the codebase
uses: actions/checkout@v2
if: github.event_name == 'pull_request'
with:
# merge commit is not available from tree at this point in time
# https://github.com/actions/checkout#checkout-pull-request-head-commit-instead-of-merge-commit
ref: "${{ github.event.pull_request.head.sha }}"
path: "${{ github.repository }}"
- name: Set up Python
uses: actions/setup-python@v2
- name: Set up Docker
uses: docker-practice/actions-setup-docker@master
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
python3 -m pip install molecule[ansible,docker] jmespath
ansible --version
docker --version
molecule --version
python --version
- name: Test installation/build/upgrade with molecule
run: |
cd ansible
molecule create
molecule verify
molecule converge
molecule idempotence
molecule verify
working-directory: "${{ github.repository }}"
env:
TARGET_GITHUB_SHA: "${{ github.event.pull_request.head.sha }}"
# # https://galaxy.ansible.com/docs/contributing/importing.html
# release:
# runs-on: ubuntu-latest
# needs:
# - test
# # https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#github-context
# if: contains(github.ref, 'refs/tags/')
# steps:
# - name: Check out the codebase
# uses: actions/checkout@v2
# with:
# path: "${{ github.repository }}"
# - name: Set up Python
# uses: actions/setup-python@v2
# - name: Install dependencies
# run: |
# python3 -m pip install --upgrade ansible-base
# ansible --version
# python --version
# - name: Trigger a new import on Galaxy
# # TODO Check if source if pulled from cwd or imported from github
# # https://github.com/ansible/ansible/blob/devel/lib/ansible/cli/galaxy.py
# run: |
# cd ansible
# ansible-galaxy role import --api-key ${{ secrets.GALAXY_API_KEY }} $(echo ${{ github.repository }} | cut -d/ -f1) $(echo ${{ github.repository }} | cut -d/ -f2)
# working-directory: "${{ github.repository }}"

View File

@@ -2,7 +2,9 @@ name: ci
on:
push:
tags: ng-*
tags:
- ngx-*
- beta-*
branches-ignore:
- 'translations**'
pull_request:
@@ -20,7 +22,7 @@ jobs:
name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.7
python-version: 3.9
-
name: Get pip cache dir
id: pip-cache
@@ -59,7 +61,7 @@ jobs:
name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.7
python-version: 3.9
-
name: Get pip cache dir
id: pip-cache
@@ -80,13 +82,25 @@ jobs:
name: Codestyle
run: |
cd src/
pycodestyle
pycodestyle --max-line-length=88 --ignore=E121,E123,E126,E226,E24,E704,W503,W504,E203
codeformatting:
runs-on: ubuntu-20.04
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Run black
uses: psf/black@stable
with:
options: "--check --diff"
version: "22.1.0"
tests:
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: ['3.6', '3.7', '3.8', '3.9']
python-version: ['3.8', '3.9']
fail-fast: false
steps:
-
@@ -122,7 +136,7 @@ jobs:
pytest
-
name: Publish coverage results
if: matrix.python-version == '3.8'
if: matrix.python-version == '3.9'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# https://github.com/coveralls-clients/coveralls-python/issues/251
@@ -130,35 +144,76 @@ jobs:
cd src/
coveralls --service=github
frontend:
runs-on: ubuntu-20.04
# build and push image to docker hub.
build-docker-image:
if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/beta' || startsWith(github.ref, 'refs/tags/ngx-') || startsWith(github.ref, 'refs/tags/beta-'))
runs-on: ubuntu-latest
needs: [tests, codeformatting, codestyle]
steps:
-
name: Checkout
uses: actions/checkout@v2
-
uses: actions/setup-node@v2
with:
node-version: '15'
-
name: Configure version on dev branches
if: startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev'
run: |
git_hash=$(git rev-parse --short "$GITHUB_SHA")
git_branch=${GITHUB_REF#refs/heads/}
sed -i -E "s/version: \"(.*)\"/version: \"${git_branch} ${git_hash}\"/g" src-ui/src/environments/environment.prod.ts
-
name: Build frontend
run: ./compile-frontend.sh
-
name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: frontend-compiled
path: src/documents/static/frontend/
-
name: Prepare
id: prepare
run: |
IMAGE_NAME=ghcr.io/${{ github.repository }}
if [[ $GITHUB_REF == refs/tags/ngx-* ]]; then
TAGS=${IMAGE_NAME}:${GITHUB_REF#refs/tags/ngx-},${IMAGE_NAME}:latest
INSPECT_TAG=${IMAGE_NAME}:latest
elif [[ $GITHUB_REF == refs/tags/beta-* ]]; then
TAGS=${IMAGE_NAME}:beta
INSPECT_TAG=${TAGS}
elif [[ $GITHUB_REF == refs/heads/* ]]; then
TAGS=${IMAGE_NAME}:${GITHUB_REF#refs/heads/}
INSPECT_TAG=${TAGS}
else
exit 1
fi
echo ::set-output name=tags::${TAGS}
echo ::set-output name=inspect_tag::${INSPECT_TAG}
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Login to Github Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: true
tags: ${{ steps.prepare.outputs.tags }}
cache-from: type=gha
cache-to: type=gha,mode=max
-
name: Inspect image
run: |
docker buildx imagetools inspect ${{ steps.prepare.outputs.inspect_tag }}
-
name: Export frontend artifact from docker
run: |
docker run -d --name frontend-extract ${{ steps.prepare.outputs.tags }}
docker cp frontend-extract:/usr/src/paperless/src/documents/static/frontend src/documents/static/frontend/
-
name: Upload frontend artifact
uses: actions/upload-artifact@v2
with:
name: frontend-compiled
path: src/documents/static/frontend/
build-release:
needs: [frontend, documentation, tests, codestyle]
needs: [build-docker-image, documentation, tests, codeformatting, codestyle]
runs-on: ubuntu-20.04
steps:
-
@@ -168,12 +223,13 @@ jobs:
name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.7
python-version: 3.9
-
name: Install dependencies
run: |
sudo apt-get update -qq
sudo apt-get install -qq --no-install-recommends gettext liblept5
pip3 install --upgrade pip setuptools wheel
pip3 install -r requirements.txt
-
name: Download frontend artifact
@@ -191,42 +247,42 @@ jobs:
name: Move files
run: |
mkdir dist
mkdir dist/paperless-ng
mkdir dist/paperless-ng/scripts
cp .dockerignore .env Dockerfile Pipfile Pipfile.lock LICENSE README.md requirements.txt dist/paperless-ng/
cp paperless.conf.example dist/paperless-ng/paperless.conf
cp gunicorn.conf.py dist/paperless-ng/gunicorn.conf.py
cp docker/ dist/paperless-ng/docker -r
cp scripts/*.service scripts/*.sh dist/paperless-ng/scripts/
cp src/ dist/paperless-ng/src -r
cp docs/_build/html/ dist/paperless-ng/docs -r
mkdir dist/paperless-ngx
mkdir dist/paperless-ngx/scripts
cp .dockerignore .env Dockerfile Pipfile Pipfile.lock LICENSE README.md requirements.txt dist/paperless-ngx/
cp paperless.conf.example dist/paperless-ngx/paperless.conf
cp gunicorn.conf.py dist/paperless-ngx/gunicorn.conf.py
cp docker/ dist/paperless-ngx/docker -r
cp scripts/*.service scripts/*.sh dist/paperless-ngx/scripts/
cp src/ dist/paperless-ngx/src -r
cp docs/_build/html/ dist/paperless-ngx/docs -r
-
name: Compile messages
run: |
cd dist/paperless-ng/src
cd dist/paperless-ngx/src
python3 manage.py compilemessages
-
name: Collect static files
run: |
cd dist/paperless-ng/src
cd dist/paperless-ngx/src
python3 manage.py collectstatic --no-input
-
name: Make release package
run: |
cd dist
find . -name __pycache__ | xargs rm -r
tar -cJf paperless-ng.tar.xz paperless-ng/
tar -cJf paperless-ngx.tar.xz paperless-ngx/
-
name: Upload release artifact
uses: actions/upload-artifact@v2
with:
name: release
path: dist/paperless-ng.tar.xz
path: dist/paperless-ngx.tar.xz
publish-release:
runs-on: ubuntu-latest
needs: build-release
if: contains(github.ref, 'refs/tags/ng-')
if: contains(github.ref, 'refs/tags/ngx-') || contains(github.ref, 'refs/tags/beta-')
steps:
-
name: Download release artifact
@@ -238,7 +294,13 @@ jobs:
name: Get version
id: get_version
run: |
echo ::set-output name=version::${GITHUB_REF#refs/tags/ng-}
if [[ $GITHUB_REF == refs/tags/ngx-* ]]; then
echo ::set-output name=version::${GITHUB_REF#refs/tags/ngx-}
echo ::set-output name=prerelease::false
elif [[ $GITHUB_REF == refs/tags/beta-* ]]; then
echo ::set-output name=version::${GITHUB_REF#refs/tags/beta-}
echo ::set-output name=prerelease::true
fi
-
name: Create release
id: create_release
@@ -246,12 +308,12 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ng-${{ steps.get_version.outputs.version }}
release_name: Paperless-ng ${{ steps.get_version.outputs.version }}
tag_name: ngx-${{ steps.get_version.outputs.version }}
release_name: Paperless-ngx ${{ steps.get_version.outputs.version }}
draft: false
prerelease: false
prerelease: ${{ steps.get_version.outputs.prerelease }}
body: |
For a complete list of changes, see the changelog at https://paperless-ng.readthedocs.io/en/latest/changelog.html.
For a complete list of changes, see the changelog at https://paperless-ngx.readthedocs.io/en/latest/changelog.html.
-
name: Upload release archive
id: upload-release-asset
@@ -260,73 +322,6 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
asset_path: ./paperless-ng.tar.xz
asset_name: paperless-ng-${{ steps.get_version.outputs.version }}.tar.xz
asset_content_type: application/x-xz
# build and push image to docker hub.
build-docker-image:
if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || startsWith(github.ref, 'refs/tags/ng-'))
runs-on: ubuntu-latest
needs: [frontend, tests, codestyle]
steps:
-
name: Prepare
id: prepare
run: |
IMAGE_NAME=jonaswinkler/paperless-ng
if [[ $GITHUB_REF == refs/tags/ng-* ]]; then
TAGS=${IMAGE_NAME}:${GITHUB_REF#refs/tags/ng-},${IMAGE_NAME}:latest
INSPECT_TAG=${IMAGE_NAME}:latest
elif [[ $GITHUB_REF == refs/heads/* ]]; then
TAGS=${IMAGE_NAME}:${GITHUB_REF#refs/heads/}
INSPECT_TAG=${TAGS}
else
exit 1
fi
echo ::set-output name=tags::${TAGS}
echo ::set-output name=inspect_tag::${INSPECT_TAG}
-
name: Checkout
uses: actions/checkout@v2
-
name: Download frontend artifact
uses: actions/download-artifact@v2
with:
name: frontend-compiled
path: src/documents/static/frontend/
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
-
name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
-
name: Build and push
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: true
tags: ${{ steps.prepare.outputs.tags }}
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache
-
name: Inspect image
run: |
docker buildx imagetools inspect ${{ steps.prepare.outputs.inspect_tag }}
asset_path: ./paperless-ngx.tar.xz
asset_name: paperless-ngx-${{ steps.get_version.outputs.version }}.tar.xz
asset_content_type: application/x-xz

54
.github/workflows/codeql-analysis.yml vendored Normal file
View File

@@ -0,0 +1,54 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ main, dev ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ dev ]
schedule:
- cron: '28 13 * * 5'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'javascript', 'python' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://git.io/codeql-language-support
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

View File

@@ -11,6 +11,6 @@ sphinx:
# Optionally set the version of Python and requirements required to build your docs
python:
version: 3.7
version: "3.8"
install:
- requirements: docs/requirements.txt

View File

@@ -1,30 +1,95 @@
# Contributing
There's still lots of things to be done, just have a look at that issue log. If you feel like conctributing to the project, please do! Bug fixes and improvements to the front end (I just can't seem to get some of these CSS things right) are always welcome.
If you feel like contributing to the project, please do! Bug fixes and improvements are always welcome.
If you want to implement something big: Please start a discussion about that in the issues! Maybe I've already had something similar in mind and we can make it happen together. However, keep in mind that the general roadmap is to make the existing features stable and get them tested. See the roadmap in the readme.
If you want to implement something big:
* Please start a discussion about that in the issues! Maybe something similar is already in development and we can make it happen together.
* When making additions to the project, consider if the majority of users will benefit from your change. If not, you're probably better of forking the project.
* Also consider if your change will get in the way of other users. A good change is a change that enhances the experience of some users who want that change and does not affect users who do not care about the change.
* Please see the [paperless-ngx merge process](#merging-prs) below.
## Python
Paperless supports python 3.6, 3.7, 3.8 and 3.9.
Paperless supports python 3.8 and 3.9. We format Python code with [Black](https://github.com/psf/black).
## Branches
master always reflects the latest release. Apart from changes to the documentation or readme, absolutely no functional changes on this branch in between releases.
`master` always reflects the latest release. Apart from changes to the documentation or readme, absolutely no functional changes on this branch in between releases.
dev contains all changes that will be part of the next release. Use this branch to start making your changes.
`dev` contains all changes that will be part of the next release. Use this branch to start making your changes.
feature-X branches is for experimental stuff that will eventually be merged into dev, and then released as part of the next release.
`feature-X` branches are for experimental stuff that will eventually be merged into dev.
## Testing:
I'm trying to get most of paperless tested, so please do the same for your code! I know its a hassle, but it makes sure that your code works now and will allow us to detect regressions easily.
Please format and test your code! I know it's a hassle, but it makes sure that your code works now and will allow us to detect regressions easily.
To test your code, execute `pytest` in the src/ directory. Executing that in the project root is no good. This also generates a html coverage report, which you can use to see if you missed anything important during testing.
To test your code, execute `pytest` in the src/ directory. This also generates a html coverage report, which you can use to see if you missed anything important during testing.
## More info:
... is available in the documentation. https://paperless-ng.readthedocs.io/en/latest/extending.html
... is available in the documentation. https://paperless-ngx.readthedocs.io/en/latest/extending.html
# Merging PRs
Once you have submitted a **P**ull **R**equest it will be reviewed, approved, and merged by one or more community members of any team. Automated code tests and formatting checks must be passed.
## Non-Trivial Requests
PRs deemed `non-trivial` will go through a stricter review process before being merged into `dev`. This is to ensure code quality and complete functionality (free of side effects).
Examples of `non-trivial` PRs might include:
* Additional features
* Large changes to many distinct files
* Breaking or depreciation of existing features
Our community review process for `non-trivial` PRs is the following:
1. Must pass usual automated code tests and formatting checks.
2. The PR will be assigned and pinged to the appropriately experienced team (i.e. @paperless-ngx/backend for backend changes).
3. Development team will check and test code manually (possibly over several days).
- You may be asked to make changes or rebase.
- The team may ask for additional testing done by @paperless-ngx/test
4. **At least two** members of the team will approve and finally merge the request into `dev` 🎉.
This process might be slow as community members have different schedules and time to dedicate to the Paperless project. However it ensures community code reviews are as brilliantly thorough as they once were with @jonaswinkler.
# Translating Paperless-ngx
Some notes about translation:
- There are two resources:
- `src-ui/messages.xlf` contains the translation strings for the front end. This is the most important.
- `django.po` contains strings for the administration section of paperless, which is nice to have translated.
- Most of the front-end strings are used on buttons, menu items, etc., so ideally the translated string should not be much longer than the English original.
- Translation units may contain placeholders. These usually mean that there's a name of a tag or document or something in the string. You can click on the placeholders to copy them.
- Translation units may contain plural expressions such as `{PLURAL_VAR, plural, =1 {one result} =0 {no results} other {<placeholder> results}}`. Copy these verbatim and translate only the content in the inner `{}` brackets. Example: `{PLURAL_VAR, plural, =1 {Ein Ergebnis} =0 {Keine Ergebnisse} other {<placeholder> Ergebnisse}}`
- Changes to translations on Crowdin will get pushed into the repository automatically.
## Adding new languages to the codebase
If a language has already been added, and you would like to contribute new translations or change existing translations, please read the "Translation" section in the README.md file for further details on that.
If you would like the project to be translated to another language, first head over to https://crwd.in/paperless-ngx to check if that language has already been enabled for translation.
If not, please request the language to be added by creating an issue on GitHub. The issue should contain:
* English name of the language (the localized name can be added on Crowdin).
* ISO language code. A list of those can be found here: https://support.crowdin.com/enterprise/language-codes/
* Date format commonly used for the language, e.g. dd/mm/yyyy, mm/dd/yyyy, etc.
After the language has been added and some translations have been made on Crowdin, the language needs to be enabled in the code.
Note that there is no need to manually add a .po of .xlf file as those will be automatically generated and imported from Crowdin.
The following files need to be changed:
* src-ui/angular.json (under the _projects/paperless-ui/i18n/locales_ JSON key)
* src/paperless/settings.py (in the _LANGUAGES_ array)
* src-ui/src/app/services/settings.service.ts (inside the _getLanguageOptions_ method)
* src-ui/src/app/app.module.ts (import locale from _angular/common/locales_ and call _registerLocaleData_)
Please add the language in the correct order, alphabetically by locale.
Note that _en-us_ needs to stay on top of the list, as it is the default project language
If you are familiar with Git, feel free to send a Pull Request with those changes.
If not, let us know in the issue you created for the language, so that another developer can make these changes.

View File

@@ -1,3 +1,12 @@
FROM node:16 AS compile-frontend
COPY . /src
WORKDIR /src/src-ui
RUN npm update npm -g && npm install
RUN ./node_modules/.bin/ng build --configuration production
FROM ubuntu:20.04 AS jbig2enc
WORKDIR /usr/src/jbig2enc
@@ -8,51 +17,45 @@ RUN git clone https://github.com/agl/jbig2enc .
RUN ./autogen.sh
RUN ./configure && make
FROM python:3.7-slim
FROM python:3.9-slim-bullseye
# Binary dependencies
RUN apt-get update \
&& apt-get -y --no-install-recommends install \
&& apt-get -y --no-install-recommends install \
# Basic dependencies
curl \
file \
# fonts for text file thumbnail generation
fonts-liberation \
# for making translations further down
gettext \
gnupg \
imagemagick \
gettext \
tzdata \
gosu \
# fonts for text file thumbnail generation
fonts-liberation \
# for Numpy
libatlas-base-dev \
libxslt1-dev \
mime-support \
# thumbnail size reduction
optipng \
sudo \
tzdata \
# OCRmyPDF dependencies
ghostscript \
icc-profiles-free \
liblept5 \
libxml2 \
pngquant \
qpdf \
unpaper \
zlib1g \
ghostscript \
icc-profiles-free \
# Mime type detection
file \
libmagic-dev \
media-types \
# OCRmyPDF dependencies
liblept5 \
tesseract-ocr \
tesseract-ocr-eng \
tesseract-ocr-deu \
tesseract-ocr-fra \
tesseract-ocr-ita \
tesseract-ocr-spa \
unpaper \
zlib1g \
# This pulls in updated dependencies from bullseye to fix some issues with file type detection.
# TODO: Remove this once bullseye releases.
&& echo "deb http://deb.debian.org/debian bullseye main" > /etc/apt/sources.list.d/bullseye.list \
&& apt-get update \
&& apt-get install --no-install-recommends -y file libmagic-dev \
&& rm -rf /var/lib/apt/lists/* \
&& rm /etc/apt/sources.list.d/bullseye.list
&& rm -rf /var/lib/apt/lists/*
# copy jbig2enc
COPY --from=jbig2enc /usr/src/jbig2enc/src/.libs/libjbig2enc* /usr/local/lib/
@@ -68,10 +71,27 @@ RUN apt-get update \
&& apt-get -y --no-install-recommends install \
build-essential \
libpq-dev \
libqpdf-dev \
&& python3 -m pip install --upgrade --no-cache-dir supervisor \
&& python3 -m pip install --no-cache-dir -r ../requirements.txt \
&& apt-get -y purge build-essential libqpdf-dev \
git \
zlib1g-dev \
libjpeg62-turbo-dev \
&& if [ "$(uname -m)" = "armv7l" ] || [ "$(uname -m)" = "aarch64" ]; \
then echo "Building qpdf" \
&& mkdir -p /usr/src/qpdf \
&& cd /usr/src/qpdf \
&& git clone https://github.com/qpdf/qpdf.git . \
&& git checkout --quiet release-qpdf-10.6.2 \
&& ./configure \
&& make \
&& make install \
&& cd /usr/src/paperless/src/ \
&& rm -rf /usr/src/qpdf; \
else \
echo "Skipping qpdf build because pikepdf binary wheels are available."; \
fi \
&& python3 -m pip install --upgrade pip wheel \
&& python3 -m pip install --default-timeout=1000 --upgrade --no-cache-dir supervisor \
&& python3 -m pip install --default-timeout=1000 --no-cache-dir -r ../requirements.txt \
&& apt-get -y purge build-essential git zlib1g-dev libjpeg62-turbo-dev \
&& apt-get -y autoremove --purge \
&& rm -rf /var/lib/apt/lists/*
@@ -79,10 +99,11 @@ RUN apt-get update \
COPY docker/ ./docker/
RUN cd docker \
&& cp imagemagick-policy.xml /etc/ImageMagick-6/policy.xml \
&& cp imagemagick-policy.xml /etc/ImageMagick-6/policy.xml \
&& mkdir /var/log/supervisord /var/run/supervisord \
&& cp supervisord.conf /etc/supervisord.conf \
&& cp docker-entrypoint.sh /sbin/docker-entrypoint.sh \
&& cp docker-prepare.sh /sbin/docker-prepare.sh \
&& chmod 755 /sbin/docker-entrypoint.sh \
&& chmod +x install_management_commands.sh \
&& ./install_management_commands.sh \
@@ -92,18 +113,22 @@ RUN cd docker \
COPY gunicorn.conf.py ../
# copy app
COPY src/ ./
COPY --from=compile-frontend /src/src/ ./
# add users, setup scripts
RUN addgroup --gid 1000 paperless \
&& useradd --uid 1000 --gid paperless --home-dir /usr/src/paperless paperless \
&& chown -R paperless:paperless ../ \
&& sudo -HEu paperless python3 manage.py collectstatic --clear --no-input \
&& sudo -HEu paperless python3 manage.py compilemessages
&& gosu paperless python3 manage.py collectstatic --clear --no-input \
&& gosu paperless python3 manage.py compilemessages
VOLUME ["/usr/src/paperless/data", "/usr/src/paperless/media", "/usr/src/paperless/consume", "/usr/src/paperless/export"]
ENTRYPOINT ["/sbin/docker-entrypoint.sh"]
EXPOSE 8000
CMD ["/usr/local/bin/supervisord", "-c", "/etc/supervisord.conf"]
LABEL maintainer="Jonas Winkler <dev@jpwinkler.de>"
LABEL org.opencontainers.image.authors="paperless-ngx team <hello@paperless-ngx.com>"
LABEL org.opencontainers.image.documentation="https://paperless-ngx.readthedocs.io/en/latest/"
LABEL org.opencontainers.image.source="https://github.com/paperless-ngx/paperless-ngx"
LABEL org.opencontainers.image.url="https://github.com/paperless-ngx/paperless-ngx"
LABEL org.opencontainers.image.licenses="GPL-3.0-only"

33
Pipfile
View File

@@ -9,24 +9,22 @@ verify_ssl = true
name = "piwheels"
[packages]
dateparser = "~=1.0.0"
django = "~=3.1.3"
dateparser = "~=1.1.0"
django = "~=3.2"
django-cors-headers = "*"
django-extensions = "*"
django-filter = "~=2.4.0"
django-q = "==1.3.4"
djangorestframework = "~=3.12.2"
django-filter = "~=21.1"
django-q = "~=1.3.4"
djangorestframework = "~=3.13.1"
filelock = "*"
fuzzywuzzy = {extras = ["speedup"], version = "*"}
gunicorn = "*"
imap-tools = "*"
langdetect = "*"
# numpy 1.20.0 drops python 3.6 support
numpy = "~=1.19.5"
numpy = "~=1.22.0"
pathvalidate = "*"
# pinned to 8.1.0, since aarch64 wheels might not be available beyond that https://github.com/python-pillow/Pillow/issues/5202
pillow = "==8.1.0"
pikepdf = "~=2.5.0"
pillow = "~=9.0"
pikepdf = "~=5.0"
python-gnupg = "*"
python-dotenv = "*"
python-dateutil = "*"
@@ -35,13 +33,11 @@ psycopg2-binary = "*"
redis = "*"
# Pinned because aarch64 wheels and updates cause warnings when loading the classifier model.
scikit-learn="==0.24.0"
# Prevent scipy updates because 1.6 is incompatible with python 3.6
scipy="~=1.5.4"
whitenoise = "~=5.2.0"
watchdog = "~=1.0.0"
whitenoise = "~=6.0.0"
watchdog = "~=2.1.0"
whoosh="~=2.7.4"
inotifyrecursive = "~=0.3.4"
ocrmypdf = "~=11.6"
ocrmypdf = "~=13.4.0"
tqdm = "*"
tika = "*"
# TODO: This will sadly also install daphne+dependencies,
@@ -51,10 +47,10 @@ channels-redis = "*"
uvicorn = {extras = ["standard"], version = "*"}
concurrent-log-handler = "*"
# uvloop 0.15+ incompatible with python 3.6
uvloop = "~=0.14.0"
# TODO: keep an eye on piwheel builds and update this once available (https://www.piwheels.org/project/cryptography/)
cryptography = "~=3.4"
uvloop = "~=0.16"
cryptography = "~=36.0.1"
"pdfminer.six" = "*"
"backports.zoneinfo" = "*"
[dev-packages]
coveralls = "*"
@@ -69,3 +65,4 @@ pytest-xdist = "*"
sphinx = "~=3.4.2"
sphinx_rtd_theme = "*"
tox = "*"
black = "*"

2205
Pipfile.lock generated

File diff suppressed because it is too large Load Diff

116
README.md
View File

@@ -1,45 +1,44 @@
[![ci](https://github.com/jonaswinkler/paperless-ng/workflows/ci/badge.svg)](https://github.com/jonaswinkler/paperless-ng/actions)
![Ansible Role](https://github.com/jonaswinkler/paperless-ng/workflows/Ansible%20Role/badge.svg)
[![Crowdin](https://badges.crowdin.net/paperless-ng/localized.svg)](https://crowdin.com/project/paperless-ng)
[![Documentation Status](https://readthedocs.org/projects/paperless-ng/badge/?version=latest)](https://paperless-ng.readthedocs.io/en/latest/?badge=latest)
[![Gitter](https://badges.gitter.im/paperless-ng/community.svg)](https://gitter.im/paperless-ng/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Docker Hub Pulls](https://img.shields.io/docker/pulls/jonaswinkler/paperless-ng.svg)](https://hub.docker.com/r/jonaswinkler/paperless-ng)
[![Coverage Status](https://coveralls.io/repos/github/jonaswinkler/paperless-ng/badge.svg?branch=master)](https://coveralls.io/github/jonaswinkler/paperless-ng?branch=master)
[![ci](https://github.com/paperless-ngx/paperless-ngx/workflows/ci/badge.svg)](https://github.com/paperless-ngx/paperless-ngx/actions)
[![Crowdin](https://badges.crowdin.net/paperless-ngx/localized.svg)](https://crowdin.com/project/paperless-ngx)
[![Documentation Status](https://readthedocs.org/projects/paperless-ngx/badge/?version=latest)](https://paperless-ngx.readthedocs.io/en/latest/?badge=latest)
[![Coverage Status](https://coveralls.io/repos/github/paperless-ngx/paperless-ngx/badge.svg?branch=master)](https://coveralls.io/github/paperless-ngx/paperless-ngx?branch=master)
[![Chat on Matrix](https://matrix.to/img/matrix-badge.svg)](https://matrix.to/#/#paperless:adnidor.de)
# Paperless-ng
<p align="center">
<img src="https://github.com/paperless-ngx/paperless-ngx/raw/main/resources/logo/web/png/Black%20logo%20-%20no%20background.png#gh-light-mode-only" width="50%" />
<img src="https://github.com/paperless-ngx/paperless-ngx/raw/main/resources/logo/web/png/White%20logo%20-%20no%20background.png#gh-dark-mode-only" width="50%" />
</p>
[Paperless (click me)](https://github.com/the-paperless-project/paperless) is an application by Daniel Quinn and contributors that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents.
<!-- omit in toc -->
# Paperless-ngx
Paperless-ng is a fork of the original project, adding a new interface and many other changes under the hood. These key points should help you decide whether Paperless-ng is something you would prefer over Paperless:
Paperless-ngx is a document management system that transforms your physical documents into a searchable online archive so you can keep, well, *less paper*.
* Interface: The new front end is the main interface for paperless-ng, the old interface still exists but most customizations (such as thumbnails for the document list) have been removed.
* Encryption: Paperless-ng does not support GnuPG anymore, since storing your data on encrypted file systems (that you optionally mount on demand) achieves about the same result.
* Resource usage: Paperless-ng does use a bit more resources than Paperless. Running the web server requires about 300MB of RAM or more, depending on the configuration. While adding documents, it requires about 300MB additional RAM, depending on the document. It still runs on Pi (many users do that), but it has been generally geared to better use the resources of more powerful systems.
* API changes: If you rely on the REST API of paperless, some of its functionality has been changed.
Paperless-ngx forked from [paperless-ng](https://github.com/jonaswinkler/paperless-ng) to continue the great work and distribute responsibility of supporting and advancing the project among a team of people. [Consider joining us!](#community-support) Discussion of this transition can be found in issues
[#1599](https://github.com/jonaswinkler/paperless-ng/issues/1599) and [#1632](https://github.com/jonaswinkler/paperless-ng/issues/1632).
For a detailed list of changes, have a look at the [change log](https://paperless-ng.readthedocs.io/en/latest/changelog.html) in the documentation.
A demo is available at [demo.paperless-ngx.com](https://demo.paperless-ngx.com) using login `demo` / `demo`. *Note: demo content is reset frequently and confidential information should not be uploaded.*
# How it Works
Paperless does not control your scanner, it only helps you deal with what your scanner produces.
1. Buy a document scanner that can write to a place on your network. If you need some inspiration, have a look at the [scanner recommendations](https://paperless-ng.readthedocs.io/en/latest/scanners.html) page. Set it up to "scan to FTP" or something similar. It should be able to push scanned images to a server without you having to do anything. Of course if your scanner doesn't know how to automatically upload the file somewhere, you can always do that manually. Paperless doesn't care how the documents get into its local consumption directory.
- Alternatively, you can use any of the mobile scanning apps out there. We have an app that allows you to share documents with paperless, if you're on Android. See the section on affiliated projects.
2. Wait for paperless to process your files. OCR is expensive, and depending on the power of your machine, this might take a bit of time.
3. Use the web frontend to sift through the database and find what you want.
4. Download the PDF you need/want via the web interface and do whatever you like with it. You can even print it and send it as if it's the original. In most cases, no one will care or notice.
Here's what you get:
![Dashboard](https://github.com/jonaswinkler/paperless-ng/raw/master/docs/_static/screenshots/dashboard.png)
- [Features](#features)
- [Getting started](#getting-started)
- [Contributing](#contributing)
- [Community Support](#community-support)
- [Translation](#translation)
- [Feature Requests](#feature-requests)
- [Bugs](#bugs)
- [Affiliated Projects](#affiliated-projects)
- [Important Note](#important-note)
# Features
![Dashboard](https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/docs/_static/screenshots/documents-wchrome.png#gh-light-mode-only)
![Dashboard](https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/docs/_static/screenshots/documents-wchrome-dark.png#gh-dark-mode-only)
* Organize and index your scanned documents with tags, correspondents, types, and more.
* Performs OCR on your documents, adds selectable text to image only documents and adds tags, correspondents and document types to your documents.
* Supports PDF documents, images, plain text files, and Office documents (Word, Excel, Powerpoint, and LibreOffice equivalents).
* Office document support is optional and provided by Apache Tika (see [configuration](https://paperless-ng.readthedocs.io/en/latest/configuration.html#tika-settings))
* Office document support is optional and provided by Apache Tika (see [configuration](https://paperless-ngx.readthedocs.io/en/latest/configuration.html#tika-settings))
* Paperless stores your documents plain on disk. Filenames and folders are managed by paperless and their format can be configured freely.
* Single page application front end.
* Includes a dashboard that shows basic statistics and has document upload.
@@ -54,64 +53,67 @@ Here's what you get:
* Configure multiple accounts and filters for each account.
* When adding documents from mail, paperless can move these mail to a new folder, mark them as read, flag them as important or delete them.
* Machine learning powered document matching.
* Paperless learns from your documents and will be able to automatically assign tags, correspondents and types to documents once you've stored a few documents in paperless.
* Optimized for multi core systems: Paperless-ng consumes multiple documents in parallel.
* Paperless-ngx learns from your documents and will be able to automatically assign tags, correspondents and types to documents once you've stored a few documents in paperless.
* Optimized for multi core systems: Paperless-ngx consumes multiple documents in parallel.
* The integrated sanity checker makes sure that your document archive is in good health.
If you want to see some screenshots of paperless-ng in action, [some are available in the documentation](https://paperless-ng.readthedocs.io/en/latest/screenshots.html).
* [More screenshots are available in the documentation](https://paperless-ngx.readthedocs.io/en/latest/screenshots.html).
# Getting started
The recommended way to deploy paperless is docker-compose. The files in the /docker/hub directory are configured to pull the image from Docker Hub.
The easiest way to deploy paperless is docker-compose. The files in the [`/docker/compose` directory](https://github.com/paperless-ngx/paperless-ngx/tree/main/docker/compose) are configured to pull the image from Github Packages.
Read the [documentation](https://paperless-ng.readthedocs.io/en/latest/setup.html#installation) on how to get started.
If you'd like to jump right in, you can configure a docker-compose environment with our install script:
Alternatively, you can install the dependencies and setup apache and a database server yourself. The documenation has a step by step guide on how to do it.
```bash
bash -c "$(curl -L https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/master/install-paperless-ngx.sh)"
```
# Migrating to paperless-ng
Alternatively, you can install the dependencies and setup apache and a database server yourself. The [documentation](https://paperless-ngx.readthedocs.io/en/latest/setup.html#installation) has a step by step guide on how to do it.
Read the section about [migration](https://paperless-ng.readthedocs.io/en/latest/setup.html#migration-to-paperless-ng) in the documentation. Its also entirely possible to go back to paperless by reverting the database migrations.
Migrating from Paperless-ng is easy, just drop in the new docker image! See the [documentation on migrating](https://paperless-ngx.readthedocs.io/en/latest/setup.html#migrating-from-paperless-ng) for more details.
# Documentation
<!-- omit in toc -->
### Documentation
The documentation for Paperless-ng is available on [ReadTheDocs](https://paperless-ng.readthedocs.io/).
The documentation for Paperless-ngx is available on [ReadTheDocs](https://paperless-ngx.readthedocs.io/).
# Translation
# Contributing
Paperless is currently available in English, German, Dutch, French, Portuguese, Italian, and Romanian.
If you feel like contributing to the project, please do! Bug fixes, enhancements, visual fixes etc. are always welcome. If you want to implement something big: Please start a discussion about that! The [documentation](https://paperless-ngx.readthedocs.io/en/latest/extending.html) has some basic information on how to get started.
There's an active translation project at crowdin! If you want to help out by translating paperless into your language, please head over to https://github.com/jonaswinkler/paperless-ng/issues/212 for details.
## Community Support
# Feature Requests
People interested in continuing the work on paperless-ngx are encouraged to reach out here on github and in the [Matrix Room](https://matrix.to/#/#paperless:adnidor.de). If you would like to contribute to the project on an ongoing basis there are multiple [teams](https://github.com/orgs/paperless-ngx/people) (frontend, ci/cd, etc) that could use your help so please reach out!
Feature requests can be submitted via [GitHub Discussions](https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests), you can search for existing ideas, add your own and vote for the ones you care about! Note that some older feature requests can also be found under [issues](https://github.com/jonaswinkler/paperless-ng/issues).
## Translation
# Questions? Something not working?
Paperless-ngx is available in many languages that are coordinated on Crowdin. If you want to help out by translating paperless-ngx into your language, please head over to https://crwd.in/paperless-ngx, and thank you! More details can be found in [CONTRIBUTING.md](https://github.com/paperless-ngx/paperless-ngx/blob/main/CONTRIBUTING.md#translating-paperless-ngx).
For bugs please [open an issue](https://github.com/jonaswinkler/paperless-ng/issues) or [start a discussion](https://github.com/jonaswinkler/paperless-ng/discussions) if you have questions.
## Feature Requests
## Feel like helping out?
Feature requests can be submitted via [GitHub Discussions](https://github.com/paperless-ngx/paperless-ngx/discussions/categories/feature-requests), you can search for existing ideas, add your own and vote for the ones you care about.
There's still lots of things to be done, just have a look at open issues & discussions. If you feel like contributing to the project, please do! Bug fixes and improvements to the front end (I just can't seem to get some of these CSS things right) are always welcome. The documentation has some basic information on how to get started.
## Bugs
If you want to implement something big: Please start a discussion about that in the issues! Maybe I've already had something similar in mind and we can make it happen together. However, keep in mind that the general roadmap is to make the existing features stable and get them tested. See the roadmap above.
For bugs please [open an issue](https://github.com/paperless-ngx/paperless-ngx/issues) or [start a discussion](https://github.com/paperless-ngx/paperless-ngx/discussions) if you have questions.
# Affiliated Projects
Paperless has been around a while now, and people are starting to build stuff on top of it. If you're one of those people, we can add your project to this list:
Paperless has been around a while now, and people are starting to build stuff on top of it. If you're one of those people, we can add your project to this list:
* [Paperless App](https://github.com/bauerj/paperless_app): An Android/iOS app for Paperless. Updated to work with paperless-ng.
* [Paperless App](https://github.com/bauerj/paperless_app): An Android/iOS app for Paperless-ngx. Also works with the original Paperless and Paperless-ngx.
* [Paperless Share](https://github.com/qcasey/paperless_share). Share any files from your Android application with paperless. Very simple, but works with all of the mobile scanning apps out there that allow you to share scanned documents.
* [Scan to Paperless](https://github.com/sbrunner/scan-to-paperless): Scan and prepare (crop, deskew, OCR, ...) your documents for Paperless.
These projects also exist, but their status and compatibility with paperless-ng is unknown.
These projects also exist, but their status and compatibility with paperless-ngx is unknown.
* [paperless-cli](https://github.com/stgarf/paperless-cli): A golang command line binary to interact with a Paperless instance.
This project also exists, but needs updates to be compatile with paperless-ng.
This project also exists, but needs updates to be compatible with paperless-ngx.
* [Paperless Desktop](https://github.com/thomasbrueggemann/paperless-desktop): A desktop UI for your Paperless installation. Runs on Mac, Linux, and Windows.
* [Paperless Desktop](https://github.com/thomasbrueggemann/paperless-desktop): A desktop UI for your Paperless installation. Runs on Mac, Linux, and Windows.
Known issues on Mac: (Could not load reminders and documents)
# Important Note
Document scanners are typically used to scan sensitive documents. Things like your social insurance number, tax records, invoices, etc. Everything is stored in the clear without encryption. This means that Paperless should never be run on an untrusted host. Instead, I recommend that if you do want to use it, run it locally on a server in your own home.
Document scanners are typically used to scan sensitive documents. Things like your social insurance number, tax records, invoices, etc. Everything is stored in the clear without encryption. This means that Paperless should never be run on an untrusted host. Instead, I recommend that if you do want to use it, run it locally on a server in your own home.

View File

@@ -1,114 +0,0 @@
Ansible Role: paperless-ng
==========================
Installs and configures paperless-ng EDMS on Debian/Ubuntu systems.
Requirements
------------
No special system requirements. Ansible 2.7 or newer is required.
Note that this role requires root access, so either run it in a playbook with a global `become: yes`, or invoke the role in your playbook like:
- hosts: all
roles:
- role: ansible
become: yes
Role Variables
--------------
Most configuration variables from paperless-ng itself are available and accept their respective arguments.
Every `PAPERLESS_*` configuration varaible is lowercased and instead prefixed with `paperlessng_*` in `defaults/main.yml`.
For a full listing including explainations and allowed values, see the current [documentation](https://paperless-ng.readthedocs.io/en/ng-0.9.14/configuration.html).
Additional variables available in this role are listed below, along with default values:
paperlessng_version: 0.9.14
The [release](https://github.com/jonaswinkler/paperless-ng/releases) archive version of paperless-ng to install.
paperlessng_redis_host: localhost
paperlessng_redis_port: 6379
Seperate configuration values that combine into `PAPERLESS_REDIS`.
paperlessng_db_type: sqlite
Database to use. Default is file-based SQLite.
paperlessng_db_host: localhost
paperlessng_db_port: 5432
paperlessng_db_name: paperlessng
paperlessng_db_user: paperlessng
paperlessng_db_pass: paperlessng
paperlessng_db_sslmode: prefer
Database configuration (only applicable if `paperlessng_db_type == 'postgresql'`).
paperlessng_directory: /opt/paperless-ng
Root directory paperless-ng is installed into.
paperlessng_virtualenv: "{{ paperlessng_directory }}/.venv"
Directory used for the virtual environment for paperless-ng.
paperlessng_ocr_languages:
- eng
List of OCR languages to install and configure (`apt search tesseract-ocr-*`).
paperlessng_use_jbig2enc: True
Whether to install and use [jbig2enc](https://github.com/agl/jbig2enc) for OCRmyPDF.
paperlessng_big2enc_lossy: False
Whether to use jbig2enc's lossy compression mode.
paperlessng_superuser_name: paperlessng
paperlessng_superuser_email: paperlessng@example.com
paperlessng_superuser_password: paperlessng
Credentials of the initial superuser in paperless-ng.
paperlessng_system_user: paperlessng
paperlessng_system_group: paperlessng
System user and group to run the paperless-ng services as (will be created if required).
paperlessng_listen_address: 127.0.0.1
paperlessng_listen_port: 8000
Address and port for the paperless-ng service to listen on.
Dependencies
------------
No ansible dependencies.
Example Playbook
----------------
`playbook.yml`:
- hosts: all
become: yes
vars_files:
- vars/main.yml
roles:
- ansible
`vars/main.yml`:
paperlessng_media_root: /mnt/media/smbshare
paperlessng_db_type: postgresql
paperlessng_db_pass: PLEASEPROVIDEASTRONGPASSWORDHERE
paperlessng_secret_key: AGAINPLEASECHANGETHISNOW
paperlessng_ocr_languages:
- eng
- deu

View File

@@ -1,83 +0,0 @@
---
paperlessng_version: latest # 'latest', release number, or github branch/tag/commit/ref
# Required services
paperlessng_redis_host: localhost
paperlessng_redis_port: 6379
paperlessng_db_type: sqlite # or postgresql
# Below entries only apply for paperlessng_db_type=='postgresql'
paperlessng_db_host: localhost
paperlessng_db_port: 5432
paperlessng_db_name: paperlessng
paperlessng_db_user: paperlessng
paperlessng_db_pass: paperlessng
paperlessng_db_sslmode: prefer
# Paths and folders
paperlessng_directory: /opt/paperless-ng
paperlessng_consumption_dir: "{{ paperlessng_directory }}/consumption"
paperlessng_data_dir: "{{ paperlessng_directory }}/data"
paperlessng_media_root: "{{ paperlessng_directory }}/media"
paperlessng_staticdir: "{{ paperlessng_directory }}/static"
paperlessng_filename_format:
paperlessng_logging_dir: "{{ paperlessng_data_dir }}/log"
paperlessng_virtualenv: "{{ paperlessng_directory }}/.venv"
# Hosting & Security
paperlessng_secret_key: PLEASECHANGETHISFORTHELOVEOFGOD
paperlessng_allowed_hosts: "*"
paperlessng_cors_allowed_hosts: http://localhost:8000
paperlessng_force_script_name:
paperlessng_static_url: /static/
paperlessng_auto_login_username:
paperlessng_cookie_prefix: ""
paperlessng_enable_http_remote_user: False
# OCR settings
paperlessng_ocr_languages:
- eng
paperlessng_ocr_mode: skip
paperlessng_ocr_clean: clean
paperlessng_ocr_deskew: True
paperlessng_ocr_rotate_pages: True
paperlessng_ocr_rotate_pages_threshold: 12
paperlessng_ocr_output_type: pdfa
paperlessng_ocr_pages: 0
paperlessng_ocr_image_dpi:
# see https://ocrmypdf.readthedocs.io/en/latest/api.html#ocrmypdf.ocr
paperlessng_ocr_user_args:
- "optimize": 1
paperlessng_use_jbig2enc: True
paperlessng_big2enc_lossy: False
# Tika settings
paperlessng_tika_enabled: False
paperlessng_tika_endpoint: http://localhost:9998
paperlessng_tika_gotenberg_endpoint: http://localhost:3000
# Software tweaks
paperlessng_time_zone: Europe/Berlin
paperlessng_consumer_polling: 0
paperlessng_consumer_delete_duplicates: False
paperlessng_consumer_recursive: False
paperlessng_consumer_subdirs_as_tags: False
paperlessng_convert_memory_limit: 0
paperlessng_convert_tmpdir:
paperlessng_optimize_thumbnails: True
paperlessng_post_consume_script:
paperlessng_filename_date_order:
paperlessng_thumbnail_font_name: /usr/share/fonts/liberation/LiberationSerif-Regular.ttf
paperlessng_ignore_dates: ""
# Superuser settings
paperlessng_superuser_name: paperlessng
paperlessng_superuser_email: paperlessng@example.com
paperlessng_superuser_password: paperlessng
# System user settings
paperlessng_system_user: paperlessng
paperlessng_system_group: paperlessng
# Webserver settings
paperlessng_listen_address: 127.0.0.1
paperlessng_listen_port: 8000

View File

@@ -1,17 +0,0 @@
dependencies: []
galaxy_info:
author: C0nsultant
description: Bare-metal deployment of paperless-ng DMS
license: license (GPLv3)
min_ansible_version: 2.7
platforms:
- name: Debian
versions:
- buster
- name: Ubuntu
versions:
- focal
galaxy_tags: [EDMS, django, python, web]

View File

@@ -1,10 +0,0 @@
---
- name: update previous release to newest release
hosts: all
tasks:
- name: set current github commit as version when available
set_fact:
paperlessng_version: "{{ lookup('env', 'TARGET_GITHUB_SHA') | default('master', True) }}"
- name: update to newest paperless-ng release
include_role:
name: ansible

View File

@@ -1,35 +0,0 @@
---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: ubuntu_focal
image: jrei/systemd-ubuntu:20.04
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
tmpfs:
- /tmp
- /run
- /run/lock
override_command: False
# ubuntu 18.04 bionic works except that
# the default redis configuration expects IPv6 which is not enabled in docker by default
# the default Python environment is configured for ASCII instead of UTF-8
# ubuntu 16.04 xenial only has Python 3.5 which is EOL and breaks multiple dependencies
- name: debian_buster
image: jrei/systemd-debian:10
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
tmpfs:
- /tmp
- /run
- /run/lock
override_command: False
# debian 9 stretch only has Python 3.5 which is EOL and breaks multiple dependencies
provisioner:
name: ansible
verifier:
name: ansible

View File

@@ -1,10 +0,0 @@
- name: install previous release
hosts: all
tasks:
- name: set previous version as installation target
set_fact:
paperlessng_version: latest
- name: install previous paperless-ng release
include_role:
name: ansible

View File

@@ -1,94 +0,0 @@
---
- name: Verify
hosts: all
gather_facts: false
vars_files:
- ../../defaults/main.yml
tasks:
- name: check if webserver is up
uri:
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}"
status_code: [200, 302]
return_content: yes
register: landingpage
failed_when: "'Sign in</button>' not in landingpage.content"
- name: generate random name and content
set_fact:
content: "{{ lookup('password', '/dev/null length=65536 chars=ascii_letters') }}"
filename: "{{ lookup('password', '/dev/null length=8 chars=ascii_letters') }}"
- name: check if document posting works
uri:
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/post_document/"
method: POST
body_format: form-multipart
body:
document:
content: "{{ content }}"
filename: "{{ filename }}.txt"
headers:
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
Content-Type: text/plain
return_content: yes
register: post_document
failed_when: "'OK' not in post_document.content"
- name: verify uploaded document has been accepted
uri:
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/paperless/"
headers:
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
return_content: yes
register: logs
failed_when: "('Consuming ' + filename + '.txt') not in logs.content"
- name: sleep till consumption finished
pause:
seconds: 10
- name: verify uploaded document has been consumed
uri:
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/paperless/"
headers:
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
return_content: yes
register: logs
failed_when: "filename + ' consumption finished' not in logs.content"
- name: get documents
uri:
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/"
headers:
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
return_content: yes
register: documents
- name: set document index
set_fact:
index: "{{ documents.json['results'][0]['id'] }}"
- name: verify uploaded document is avaiable
uri:
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/{{ index }}/"
headers:
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
return_content: yes
register: document
failed_when: "'Not found.' in document.content or content not in document.json['content']"
- name: check if deleting uploaded document works
uri:
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/bulk_edit/"
method: POST
body_format: json
body:
documents: ["{{ index }}"]
method: delete
parameters: {}
headers:
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
register: delete_document
failed_when: "'OK' not in delete_document.json['result']"

View File

@@ -1,6 +0,0 @@
---
- name: extract paperless-ng
unarchive:
src: "https://github.com/jonaswinkler/paperless-ng/releases/download/ng-{{ paperlessng_version }}/paperless-ng-{{ paperlessng_version }}.tar.xz"
remote_src: yes
dest: "{{ tempdir.path }}"

View File

@@ -1,112 +0,0 @@
---
- name: install dev dependencies
apt:
pkg:
- git
- npm
- gettext
- name: create output directories
file:
path: "{{ item }}"
state: directory
owner: "{{ paperlessng_system_user }}"
group: "{{ paperlessng_system_group }}"
mode: "750"
with_items:
- "{{ tempdir.path }}/paperless-ng"
- "{{ tempdir.path }}/paperless-ng/scripts"
- block:
- name: create temporary git directory
tempfile:
state: directory
path: "{{ paperlessng_directory }}"
register: gitdir
- name: pull paperless-ng
git:
repo: https://github.com/jonaswinkler/paperless-ng.git
dest: "{{ gitdir.path }}"
version: "{{ paperlessng_version }}"
refspec: "+refs/pull/*:refs/pull/*"
- name: compile frontend
command:
cmd: "{{ item }}"
args:
chdir: "{{ gitdir.path }}/src-ui"
failed_when: false
with_items:
- npm install -g @angular/cli
- npm install
- ./node_modules/.bin/ng build --prod
- name: copy application into place
copy:
src: "{{ gitdir.path }}/{{ item.src }}"
remote_src: yes
dest: "{{ tempdir.path }}/paperless-ng/{{ item.dest | default('') }}"
with_items:
- src: CONTRIBUTING.md
- src: LICENSE
- src: Pipfile
- src: Pipfile.lock
- src: README.md
- src: requirements.txt
- src: gunicorn.conf.py
- src: paperless.conf.example
dest: "paperless.conf"
- name: glob all scripts
find:
paths: ["{{ gitdir.path }}/scripts/"]
patterns:
- "*.service"
- "*.sh"
register: glob
- name: copy scripts
copy:
src: "{{ item.path }}"
remote_src: yes
dest: "{{ tempdir.path }}/paperless-ng/scripts/"
with_items:
- "{{ glob.files }}"
- name: copy sources
command:
cmd: "cp -r src/ {{ tempdir.path }}/paperless-ng/src"
args:
chdir: "{{ gitdir.path }}"
- name: create paperlessng venv
command:
cmd: "python3 -m virtualenv {{ gitdir.path }}/.venv/ -p /usr/bin/python3"
- name: install paperlessng requirements
command:
cmd: "{{ gitdir.path }}/.venv/bin/python3 -m pip install -r {{ gitdir.path }}/requirements.txt"
- name: compile messages
command: "{{ gitdir.path }}/.venv/bin/python3 manage.py compilemessages"
args:
chdir: "{{ tempdir.path }}/paperless-ng/src/"
- name: collect static files
command: "{{ gitdir.path }}/.venv/bin/python3 manage.py collectstatic --no-input"
args:
chdir: "{{ tempdir.path }}/paperless-ng/src/"
- name: remove pycache directories
shell: find . -name __pycache__ | xargs rm -r
args:
chdir: "{{ tempdir.path }}"
- name: remove temporary git directory
file:
path: "{{ gitdir.path }}"
state: absent
become: yes
become_user: "{{ paperlessng_system_user }}"

View File

@@ -1,553 +0,0 @@
---
- name: verify operating system
fail:
msg: Sorry, only Debian and Ubuntu supported at the moment.
when: not(ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu')
- name: install base dependencies
apt:
update_cache: yes
pkg:
# paperless-ng
- python3-pip
- python3-dev
- fonts-liberation
- imagemagick
- optipng
- gnupg
- libpq-dev
- libmagic-dev
- mime-support
# OCRmyPDF
- unpaper
- ghostscript
- icc-profiles-free
- qpdf
- liblept5
- libxml2
- pngquant
- zlib1g
- tesseract-ocr
# dev
- sudo
- build-essential
- python3-setuptools
- python3-wheel
# upstream virtualenv in Ubuntu 20.04 is broken
# https://github.com/pypa/virtualenv/issues/1873
- name: install python virtualenv
pip:
name: virtualenv
extra_args: --upgrade
- name: install ocr languages
apt:
pkg: "{{ paperlessng_ocr_languages | map('regex_replace', '^(.*)$', 'tesseract-ocr-\\1') | map('replace', '_', '-') | list }}"
- name: set up notesalexp repository key (for jbig2enc)
apt_key:
url: https://notesalexp.org/debian/alexp_key.asc
state: present
when: paperlessng_use_jbig2enc
- name: set up notesalexp repository (for jbig2enc)
apt_repository:
repo: "deb https://notesalexp.org/debian/{{ ansible_distribution_release }}/ {{ ansible_distribution_release }} main"
state: present
when: paperlessng_use_jbig2enc
- name: set up notesalexp repository pinning
copy:
content: |
Package: *
Pin: release o=notesalexp.org
Pin-Priority: 1
Package: jbig2enc
Pin: release o=notesalexp.org
Pin-Priority: 500
dest: /etc/apt/preferences.d/notesalexp
when: paperlessng_use_jbig2enc
- name: install jbig2enc
apt:
pkg: jbig2enc
update_cache: yes
when: paperlessng_use_jbig2enc
- name: install redis
apt:
pkg: redis-server
when: paperlessng_redis_host == 'localhost' or paperlessng_redis_host == '127.0.0.1'
- name: enable redis
systemd:
name: redis-server
enabled: yes
masked: no
state: started
when: paperlessng_redis_host == 'localhost' or paperlessng_redis_host == '127.0.0.1'
- name: create paperless system group
group:
name: "{{ paperlessng_system_group }}"
- name: create paperless system user
user:
name: "{{ paperlessng_system_user }}"
groups:
- "{{ paperlessng_system_group }}"
shell: /usr/sbin/nologin
# GNUPG_HOME required due to paperless db.py
create_home: yes
- block:
- name: get latest release version
uri:
url: https://api.github.com/repos/jonaswinkler/paperless-ng/releases/latest
method: GET
register: latest_release
- name: parse latest release version
set_fact:
paperlessng_version: "{{ latest_release.json['tag_name'] }}"
when: paperlessng_version == "latest"
- name: check if version is ref
fail:
msg: "Specifying `paperlessng_version` as git ref may not work as expected!"
ignore_errors: True # Output failure (as warning), but don't consider play failed
when: paperlessng_version.startswith('refs/')
- block:
- name: sanitize version string
set_fact:
paperlessng_version: "{{ paperlessng_version | regex_replace('^ng-(\\d+\\.\\d+\\.\\d+)$', '\\1') }}"
- name: get tag data
uri:
url: https://api.github.com/repos/jonaswinkler/paperless-ng/tags
method: GET
register: tags
- name: get commit for target tag
set_fact:
paperlessng_commit: "{{ tags.json | json_query('[?name==`ng-' + paperlessng_version +'`] | [0].commit.sha') }}"
when: paperlessng_version | regex_search("^(ng-)?(\d+\.\d+\.\d+)$")
- block:
- name: check if version is branch
uri:
url: "https://api.github.com/repos/jonaswinkler/paperless-ng/branches/{{ paperlessng_version }}"
method: GET
status_code: [200, 404]
register: branch
- name: get commit for target branch
set_fact:
paperlessng_commit: "{{ branch.json | json_query('commit.sha') }}"
when: branch.status == 200
- block:
- name: check if version is commit-or-ref
uri:
url: "https://api.github.com/repos/jonaswinkler/paperless-ng/commits/{{ paperlessng_version }}"
method: GET
status_code: [200, 404, 422]
register: commit
- name: get commit for target commit-or-ref
set_fact:
paperlessng_commit: "{{ commit.json | json_query('sha') }}"
when: commit.status == 200
- name: fail
fail:
msg: "Can not determine commit from `paperlessng_version=={{ paperlessng_version }}`!"
when: commit.status != 200
when: branch.status == 404
when: not(paperlessng_version | regex_search("^(ng-)?(\d+\.\d+\.\d+)$"))
- name: check for paperless-ng installation
command:
cmd: "cat {{ paperlessng_directory }}/.installed_version"
changed_when: '"No such file or directory" in paperlessng_current_commit.stderr or paperlessng_current_commit.stdout != paperlessng_commit | string'
failed_when: false
ignore_errors: yes
register: paperlessng_current_commit
- name: register current state
set_fact:
fresh_installation: '{{ "No such file or directory" in paperlessng_current_commit.stderr }}'
update_installation: '{{ "No such file or directory" not in paperlessng_current_commit.stderr and paperlessng_current_commit.stdout != paperlessng_commit | string }}'
reconfigure_only: "{{ paperlessng_current_commit.stdout == paperlessng_commit | string }}"
- block:
- name: backup current paperless-ng installation
copy:
src: "{{ paperlessng_directory }}"
remote_src: yes
dest: "{{ paperlessng_directory }}-{{ ansible_date_time.iso8601 }}/"
- name: remove current paperless sources
file:
path: "{{ paperlessng_directory }}/{{ item }}"
state: absent
with_items:
- docker
- docs
- scripts
- src
- static
when: update_installation
- block:
- name: create paperless-ng directory and set permissions
file:
path: "{{ paperlessng_directory }}"
state: directory
owner: "{{ paperlessng_system_user }}"
group: "{{ paperlessng_system_group }}"
mode: "750"
- name: create temporary directory
become: yes
become_user: "{{ paperlessng_system_user }}"
tempfile:
state: directory
path: "{{ paperlessng_directory }}"
register: tempdir
- name: check if version is available as release archive
uri:
url: "https://github.com/jonaswinkler/paperless-ng/releases/download/ng-{{ paperlessng_version }}/paperless-ng-{{ paperlessng_version }}.tar.xz"
method: GET
status_code: [200, 404]
register: release_archive
- name: install paperless-ng from source
include_tasks: install-source.yml
when: release_archive.status == 404
- name: install paperless-ng from release archive
include_tasks: install-release.yml
when: release_archive.status == 200
- name: change owner and permissions of paperless-ng
command:
cmd: "{{ item }}"
warn: false
with_items:
- "chown -R {{ paperlessng_system_user }}:{{ paperlessng_system_group }} {{ tempdir.path }}"
- "find {{ tempdir.path }} -type d -exec chmod 0750 {} ;"
- "find {{ tempdir.path }} -type f -exec chmod 0640 {} ;"
- name: move paperless-ng
command:
cmd: "cp -a {{ tempdir.path }}/paperless-ng/. {{ paperlessng_directory }}"
- name: store commit hash of installed version
copy:
content: "{{ paperlessng_commit }}"
dest: "{{ paperlessng_directory }}/.installed_version"
owner: "{{ paperlessng_system_user }}"
group: "{{ paperlessng_system_group }}"
mode: "0440"
- name: remove temporary directory
file:
path: "{{ tempdir.path }}"
state: absent
when: not reconfigure_only
- name: create paperless-ng directories and set permissions
file:
path: "{{ item }}"
state: directory
owner: "{{ paperlessng_system_user }}"
group: "{{ paperlessng_system_group }}"
mode: "750"
with_items:
- "{{ paperlessng_consumption_dir }}"
- "{{ paperlessng_data_dir }}"
- "{{ paperlessng_media_root }}"
- "{{ paperlessng_staticdir }}"
- name: rename initial config
command:
cmd: "mv -f {{ paperlessng_directory }}/paperless.conf {{ paperlessng_directory }}/paperless.conf.template"
removes: "{{ paperlessng_directory }}/paperless.conf"
- name: configure paperless-ng
lineinfile:
path: "{{ paperlessng_directory }}/paperless.conf.template"
regexp: "^#?{{ item.regexp }}="
line: "{{ item.line }}"
with_items:
# Required services
- regexp: PAPERLESS_REDIS
line: "PAPERLESS_REDIS=redis://{{ paperlessng_redis_host }}:{{ paperlessng_redis_port }}"
# Paths and folders
- regexp: PAPERLESS_CONSUMPTION_DIR
line: "PAPERLESS_CONSUMPTION_DIR={{ paperlessng_consumption_dir }}"
- regexp: PAPERLESS_DATA_DIR
line: "PAPERLESS_DATA_DIR={{ paperlessng_data_dir }}"
- regexp: PAPERLESS_MEDIA_ROOT
line: "PAPERLESS_MEDIA_ROOT={{ paperlessng_media_root }}"
- regexp: PAPERLESS_STATICDIR
line: "PAPERLESS_STATICDIR={{ paperlessng_staticdir }}"
- regexp: PAPERLESS_FILENAME_FORMAT
line: "PAPERLESS_FILENAME_FORMAT={{ paperlessng_filename_format }}"
- regexp: PAPERLESS_LOGGING_DIR
line: "PAPERLESS_LOGGING_DIR={{ paperlessng_logging_dir }}"
# Hosting & Security
- regexp: PAPERLESS_SECRET_KEY
line: "PAPERLESS_SECRET_KEY={{ paperlessng_secret_key }}"
- regexp: PAPERLESS_ALLOWED_HOSTS
line: "PAPERLESS_ALLOWED_HOSTS={{ paperlessng_allowed_hosts }}"
- regexp: PAPERLESS_CORS_ALLOWED_HOSTS
line: "PAPERLESS_CORS_ALLOWED_HOSTS={{ paperlessng_cors_allowed_hosts }}"
- regexp: PAPERLESS_FORCE_SCRIPT_NAME
line: "PAPERLESS_FORCE_SCRIPT_NAME={{ paperlessng_force_script_name }}"
- regexp: PAPERLESS_STATIC_URL
line: "PAPERLESS_STATIC_URL={{ paperlessng_static_url }}"
- regexp: PAPERLESS_AUTO_LOGIN_USERNAME
line: "PAPERLESS_AUTO_LOGIN_USERNAME={{ paperlessng_auto_login_username }}"
- regexp: PAPERLESS_COOKIE_PREFIX
line: "PAPERLESS_COOKIE_PREFIX={{ paperlessng_cookie_prefix }}"
- regexp: PAPERLESS_ENABLE_HTTP_REMOTE_USER
line: "PAPERLESS_ENABLE_HTTP_REMOTE_USER={{ paperlessng_enable_http_remote_user }}"
# OCR settings
- regexp: PAPERLESS_OCR_LANGUAGE
line: "PAPERLESS_OCR_LANGUAGE={{ paperlessng_ocr_languages | join('+') | replace('-','_') }}"
- regexp: PAPERLESS_OCR_MODE
line: "PAPERLESS_OCR_MODE={{ paperlessng_ocr_mode }}"
- regexp: PAPERLESS_OCR_CLEAN
line: "PAPERLESS_OCR_CLEAN={{ paperlessng_ocr_clean }}"
- regexp: PAPERLESS_OCR_DESKEW
line: "PAPERLESS_OCR_DESKEW={{ paperlessng_ocr_deskew }}"
- regexp: PAPERLESS_OCR_ROTATE_PAGES
line: "PAPERLESS_OCR_ROTATE_PAGES={{ paperlessng_ocr_rotate_pages }}"
- regexp: PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD
line: "PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD={{ paperlessng_ocr_rotate_pages_threshold }}"
- regexp: PAPERLESS_OCR_OUTPUT_TYPE
line: "PAPERLESS_OCR_OUTPUT_TYPE={{ paperlessng_ocr_output_type }}"
- regexp: PAPERLESS_OCR_PAGES
line: "PAPERLESS_OCR_PAGES={{ paperlessng_ocr_pages }}"
- regexp: PAPERLESS_OCR_IMAGE_DPI
line: "PAPERLESS_OCR_IMAGE_DPI={{ paperlessng_ocr_image_dpi }}"
- regexp: PAPERLESS_OCR_USER_ARGS
line: "PAPERLESS_OCR_USER_ARGS={{ paperlessng_ocr_user_args | combine({'jbig2_lossy': true} if paperlessng_big2enc_lossy else {}) | to_json }}"
# Tika settings
- regexp: PAPERLESS_TIKA_ENABLED
line: "PAPERLESS_TIKA_ENABLED={{ paperlessng_tika_enabled }}"
- regexp: PAPERLESS_TIKA_ENDPOINT
line: "PAPERLESS_TIKA_ENDPOINT={{ paperlessng_tika_endpoint }}"
- regexp: PAPERLESS_TIKA_GOTENBERG_ENDPOINT
line: "PAPERLESS_TIKA_GOTENBERG_ENDPOINT={{ paperlessng_tika_endpoint }}"
# Software tweaks
- regexp: PAPERLESS_TIME_ZONE
line: "PAPERLESS_TIME_ZONE={{ paperlessng_time_zone }}"
- regexp: PAPERLESS_CONSUMER_POLLING
line: "PAPERLESS_CONSUMER_POLLING={{ paperlessng_consumer_polling }}"
- regexp: PAPERLESS_CONSUMER_DELETE_DUPLICATES
line: "PAPERLESS_CONSUMER_DELETE_DUPLICATES={{ paperlessng_consumer_delete_duplicates }}"
- regexp: PAPERLESS_CONSUMER_RECURSIVE
line: "PAPERLESS_CONSUMER_RECURSIVE={{ paperlessng_consumer_recursive }}"
- regexp: PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS
line: "PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS={{ paperlessng_consumer_subdirs_as_tags }}"
- regexp: PAPERLESS_CONVERT_MEMORY_LIMIT
line: "PAPERLESS_CONVERT_MEMORY_LIMIT={{ paperlessng_convert_memory_limit }}"
- regexp: PAPERLESS_CONVERT_TMPDIR
line: "PAPERLESS_CONVERT_TMPDIR={{ paperlessng_convert_tmpdir }}"
- regexp: PAPERLESS_OPTIMIZE_THUMBNAILS
line: "PAPERLESS_OPTIMIZE_THUMBNAILS={{ paperlessng_optimize_thumbnails }}"
- regexp: PAPERLESS_POST_CONSUME_SCRIPT
line: "PAPERLESS_POST_CONSUME_SCRIPT={{ paperlessng_post_consume_script }}"
- regexp: PAPERLESS_FILENAME_DATE_ORDER
line: "PAPERLESS_FILENAME_DATE_ORDER={{ paperlessng_filename_date_order }}"
- regexp: PAPERLESS_THUMBNAIL_FONT_NAME
line: "PAPERLESS_THUMBNAIL_FONT_NAME={{ paperlessng_thumbnail_font_name }}"
- regexp: PAPERLESS_IGNORE_DATES
line: "PAPERLESS_IGNORE_DATES={{ paperlessng_ignore_dates }}"
no_log: yes
- name: configure paperless-ng database [sqlite]
lineinfile:
path: "{{ paperlessng_directory }}/paperless.conf.template"
regexp: "^#?PAPERLESS_DBHOST=(.*)$"
line: '#PAPERLESS_DBHOST=\1'
backrefs: yes
when: paperlessng_db_type == 'sqlite'
- name: configure paperless-ng database [postgresql]
lineinfile:
path: "{{ paperlessng_directory }}/paperless.conf.template"
regexp: "^#?{{ item.regexp }}="
line: "{{ item.line }}"
with_items:
- regexp: PAPERLESS_DBHOST
line: "PAPERLESS_DBHOST={{ paperlessng_db_host }}"
- regexp: PAPERLESS_DBPORT
line: "PAPERLESS_DBPORT={{ paperlessng_db_port }}"
- regexp: PAPERLESS_DBNAME
line: "PAPERLESS_DBNAME={{ paperlessng_db_name }}"
- regexp: PAPERLESS_DBUSER
line: "PAPERLESS_DBUSER={{ paperlessng_db_user }}"
- regexp: PAPERLESS_DBPASS
line: "PAPERLESS_DBPASS={{ paperlessng_db_pass }}"
- regexp: PAPERLESS_DBSSLMODE
line: "PAPERLESS_DBSSLMODE={{ paperlessng_db_sslmode }}"
when: paperlessng_db_type == 'postgresql'
no_log: yes
- name: deploy paperless-ng configuration
copy:
src: "{{ paperlessng_directory }}/paperless.conf.template"
remote_src: yes
dest: /etc/paperless.conf
owner: root
group: root
mode: "0644"
register: configuration
- name: create paperlessng venv
become: yes
become_user: "{{ paperlessng_system_user }}"
command:
cmd: "python3 -m virtualenv {{ paperlessng_virtualenv }} -p /usr/bin/python3"
creates: "{{ paperlessng_virtualenv }}"
register: venv
- block:
- name: install paperlessng requirements
become: yes
become_user: "{{ paperlessng_system_user }}"
pip:
requirements: "{{ paperlessng_directory }}/requirements.txt"
executable: "{{ paperlessng_virtualenv }}/bin/pip3"
extra_args: --upgrade
- name: migrate database schema
become: yes
become_user: "{{ paperlessng_system_user }}"
command: "{{ paperlessng_virtualenv }}/bin/python3 {{ paperlessng_directory }}/src/manage.py migrate"
register: database_schema
changed_when: '"No migrations to apply." not in database_schema.stdout'
when: not reconfigure_only
- name: configure paperless superuser
become: yes
become_user: "{{ paperlessng_system_user }}"
# "manage.py createsuperuser" only works on interactive TTYs
vars:
creation_script: |
from django.contrib.auth.models import User
from django.contrib.auth.hashers import get_hasher
if User.objects.filter(username='{{ paperlessng_superuser_name }}').exists():
user = User.objects.get(username='{{ paperlessng_superuser_name }}')
old = user.__dict__.copy()
user.is_superuser = True
user.email = '{{ paperlessng_superuser_email }}'
user.set_password('{{ paperlessng_superuser_password }}')
user.save()
new = user.__dict__
algorithm, iterations, old_salt, old_hash = old['password'].split('$')
new_password_old_salt = get_hasher(algorithm).encode(password='{{ paperlessng_superuser_password }}', salt=old_salt, iterations=int(iterations))
_, _, _, new_hash = new_password_old_salt.split('$')
if not (old_hash == new_hash and old['is_superuser'] == new['is_superuser'] and old['email'] == new['email']):
print('changed')
else:
User.objects.create_superuser('{{ paperlessng_superuser_name }}', '{{ paperlessng_superuser_email }}', '{{ paperlessng_superuser_password }}')
print('changed')
command: '{{ paperlessng_virtualenv }}/bin/python3 {{ paperlessng_directory }}/src/manage.py shell -c "{{ creation_script }}"'
register: superuser
changed_when: superuser.stdout == 'changed'
no_log: yes
- name: set ownership and permissions on paperlessng venv
file:
path: "{{ paperlessng_virtualenv }}"
state: directory
recurse: yes
owner: "{{ paperlessng_system_user }}"
group: "{{ paperlessng_system_group }}"
mode: g-w,o-rwx
when: venv.changed or not reconfigure_only
- name: configure ghostscript for PDF
lineinfile:
path: /etc/ImageMagick-6/policy.xml
regexp: '(\s+)<policy domain="coder" rights=".*" pattern="PDF" />'
line: '\1<policy domain="coder" rights="read|write" pattern="PDF" />'
backrefs: yes
- name: configure gunicorn web server
lineinfile:
path: "{{ paperlessng_directory }}/gunicorn.conf.py"
regexp: '^bind = '
line: "bind = '{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}'"
- name: configure systemd services
ini_file:
path: "{{ paperlessng_directory }}/scripts/{{ item[0] }}"
section: "Service"
option: "{{ item[1].option }}"
value: "{{ item[1].value }}"
with_nested:
- [
paperless-consumer.service,
paperless-scheduler.service,
paperless-webserver.service,
]
- [
# https://www.freedesktop.org/software/systemd/man/systemd.exec.html
{ option: "User", value: "{{ paperlessng_system_user }}" },
{ option: "Group", value: "{{ paperlessng_system_group }}" },
{ option: "WorkingDirectory", value: "{{ paperlessng_directory }}/src" },
{ option: "ProtectSystem", value: "full" },
{ option: "NoNewPrivileges", value: "true" },
{ option: "PrivateUsers", value: "true" },
{ option: "PrivateDevices", value: "true" },
]
- name: configure paperless-consumer service
ini_file:
path: "{{ paperlessng_directory }}/scripts/paperless-consumer.service"
section: "Service"
option: "ExecStart"
value: "{{ paperlessng_virtualenv }}/bin/python3 manage.py document_consumer"
- name: configure paperless-scheduler service
ini_file:
path: "{{ paperlessng_directory }}/scripts/paperless-scheduler.service"
section: "Service"
option: "ExecStart"
value: "{{ paperlessng_virtualenv }}/bin/python3 manage.py qcluster"
- name: configure paperless-webserver service
ini_file:
path: "{{ paperlessng_directory }}/scripts/paperless-webserver.service"
section: "Service"
option: "ExecStart"
value: "{{ paperlessng_virtualenv }}/bin/gunicorn -c {{ paperlessng_directory }}/gunicorn.conf.py paperless.asgi:application"
- name: copy systemd services
copy:
src: "{{ paperlessng_directory }}/scripts/{{ item }}"
remote_src: yes
dest: "/etc/systemd/system/{{ item }}"
with_items:
- paperless-consumer.service
- paperless-scheduler.service
- paperless-webserver.service
register: paperless_services
- name: reload systemd daemon
systemd:
name: "{{ item }}"
state: restarted
daemon_reload: yes
with_items:
- paperless-consumer
- paperless-scheduler
- paperless-webserver
when: paperless_services.changed or configuration.changed
- name: enable paperlessng services
systemd:
name: "{{ item }}"
enabled: yes
masked: no
state: started
with_items:
- paperless-consumer
- paperless-scheduler
- paperless-webserver

View File

@@ -1,7 +0,0 @@
#!/bin/bash
set -e
cd src-ui
npm install
./node_modules/.bin/ng build --prod

View File

@@ -1 +1 @@
COMPOSE_PROJECT_NAME=paperless
COMPOSE_PROJECT_NAME=paperless

View File

@@ -0,0 +1,97 @@
# docker-compose file for running paperless from the Docker Hub.
# This file contains everything paperless needs to run.
# Paperless supports amd64, arm and arm64 hardware.
#
# All compose files of paperless configure paperless in the following way:
#
# - Paperless is (re)started on system boot, if it was running before shutdown.
# - Docker volumes for storing data are managed by Docker.
# - Folders for importing and exporting files are created in the same directory
# as this file and mounted to the correct folders inside the container.
# - Paperless listens on port 8010.
#
# In addition to that, this docker-compose file adds the following optional
# configurations:
#
# - Instead of SQLite (default), PostgreSQL is used as the database server.
#
# To install and update paperless with this file, do the following:
#
# - Open portainer Stacks list and click 'Add stack'
# - Paste the contents of this file and assign a name, e.g. 'Paperless'
# - Click 'Deploy the stack' and wait for it to be deployed
# - Open the list of containers, select paperless_webserver_1
# - Click 'Console' and then 'Connect' to open the command line inside the container
# - Run 'python3 manage.py createsuperuser' to create a user
# - Exit the console
#
# For more extensive installation and update instructions, refer to the
# documentation.
version: "3.4"
services:
broker:
image: redis:6.0
restart: unless-stopped
volumes:
- redisdata:/data
db:
image: postgres:13
restart: unless-stopped
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: paperless
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- db
- broker
ports:
- 8010:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- data:/usr/src/paperless/data
- media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBHOST: db
# The UID and GID of the user used to run paperless in the container. Set this
# to your UID and GID on the host so that you have write access to the
# consumption directory.
USERMAP_UID: 1000
USERMAP_GID: 100
# Additional languages to install for text recognition, separated by a
# whitespace. Note that this is
# different from PAPERLESS_OCR_LANGUAGE (default=eng), which defines the
# language used for OCR.
# The container installs English, German, Italian, Spanish and French by
# default.
# See https://packages.debian.org/search?keywords=tesseract-ocr-&searchon=names&suite=buster
# for available languages.
#PAPERLESS_OCR_LANGUAGES: tur ces
# Adjust this key if you plan to make paperless available publicly. It should
# be a very long sequence of random characters. You don't need to remember it.
#PAPERLESS_SECRET_KEY: change-me
# Use this variable to set a timezone for the Paperless Docker containers. If not specified, defaults to UTC.
#PAPERLESS_TIME_ZONE: America/Los_Angeles
# The default language to use for OCR. Set this to the language most of your
# documents are written in.
#PAPERLESS_OCR_LANGUAGE: eng
volumes:
data:
media:
pgdata:
redisdata:

View File

@@ -35,6 +35,8 @@ services:
broker:
image: redis:6.0
restart: unless-stopped
volumes:
- redisdata:/data
db:
image: postgres:13
@@ -47,7 +49,7 @@ services:
POSTGRES_PASSWORD: paperless
webserver:
image: jonaswinkler/paperless-ng:latest
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- db
@@ -75,10 +77,10 @@ services:
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
gotenberg:
image: thecodingmachine/gotenberg
image: gotenberg/gotenberg:7
restart: unless-stopped
environment:
DISABLE_GOOGLE_CHROME: 1
CHROMIUM_DISABLE_ROUTES: 1
tika:
image: apache/tika
@@ -88,3 +90,4 @@ volumes:
data:
media:
pgdata:
redisdata:

View File

@@ -31,6 +31,8 @@ services:
broker:
image: redis:6.0
restart: unless-stopped
volumes:
- redisdata:/data
db:
image: postgres:13
@@ -43,7 +45,7 @@ services:
POSTGRES_PASSWORD: paperless
webserver:
image: jonaswinkler/paperless-ng:latest
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- db
@@ -70,3 +72,4 @@ volumes:
data:
media:
pgdata:
redisdata:

View File

@@ -36,9 +36,11 @@ services:
broker:
image: redis:6.0
restart: unless-stopped
volumes:
- redisdata:/data
webserver:
image: jonaswinkler/paperless-ng:latest
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- broker
@@ -64,10 +66,10 @@ services:
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
gotenberg:
image: thecodingmachine/gotenberg
image: gotenberg/gotenberg:7
restart: unless-stopped
environment:
DISABLE_GOOGLE_CHROME: 1
CHROMIUM_DISABLE_ROUTES: 1
tika:
image: apache/tika
@@ -76,3 +78,4 @@ services:
volumes:
data:
media:
redisdata:

View File

@@ -28,9 +28,11 @@ services:
broker:
image: redis:6.0
restart: unless-stopped
volumes:
- redisdata:/data
webserver:
image: jonaswinkler/paperless-ng:latest
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- broker
@@ -54,3 +56,4 @@ services:
volumes:
data:
media:
redisdata:

131
docker/docker-entrypoint.sh Normal file → Executable file
View File

@@ -4,89 +4,37 @@ set -e
# Source: https://github.com/sameersbn/docker-gitlab/
map_uidgid() {
USERMAP_ORIG_UID=$(id -u paperless)
USERMAP_ORIG_GID=$(id -g paperless)
USERMAP_NEW_UID=${USERMAP_UID:-$USERMAP_ORIG_UID}
USERMAP_NEW_GID=${USERMAP_GID:-${USERMAP_ORIG_GID:-$USERMAP_NEW_UID}}
if [[ ${USERMAP_NEW_UID} != "${USERMAP_ORIG_UID}" || ${USERMAP_NEW_GID} != "${USERMAP_ORIG_GID}" ]]; then
echo "Mapping UID and GID for paperless:paperless to $USERMAP_NEW_UID:$USERMAP_NEW_GID"
usermod -u "${USERMAP_NEW_UID}" paperless
groupmod -o -g "${USERMAP_NEW_GID}" paperless
fi
}
wait_for_postgres() {
attempt_num=1
max_attempts=5
echo "Waiting for PostgreSQL to start..."
host="${PAPERLESS_DBHOST}"
port="${PAPERLESS_DBPORT}"
if [[ -z $port ]] ;
then
port="5432"
USERMAP_ORIG_UID=$(id -u paperless)
USERMAP_ORIG_GID=$(id -g paperless)
USERMAP_NEW_UID=${USERMAP_UID:-$USERMAP_ORIG_UID}
USERMAP_NEW_GID=${USERMAP_GID:-${USERMAP_ORIG_GID:-$USERMAP_NEW_UID}}
if [[ ${USERMAP_NEW_UID} != "${USERMAP_ORIG_UID}" || ${USERMAP_NEW_GID} != "${USERMAP_ORIG_GID}" ]]; then
echo "Mapping UID and GID for paperless:paperless to $USERMAP_NEW_UID:$USERMAP_NEW_GID"
usermod -u "${USERMAP_NEW_UID}" paperless
groupmod -o -g "${USERMAP_NEW_GID}" paperless
fi
while !</dev/tcp/$host/$port ;
do
if [ $attempt_num -eq $max_attempts ]
then
echo "Unable to connect to database."
exit 1
else
echo "Attempt $attempt_num failed! Trying again in 5 seconds..."
fi
attempt_num=$(expr "$attempt_num" + 1)
sleep 5
done
}
migrations() {
if [[ -n "${PAPERLESS_DBHOST}" ]]
then
wait_for_postgres
fi
(
# flock is in place to prevent multiple containers from doing migrations
# simultaneously. This also ensures that the db is ready when the command
# of the current container starts.
flock 200
echo "Apply database migrations..."
sudo -HEu paperless python3 manage.py migrate
) 200>/usr/src/paperless/data/migration_lock
}
initialize() {
map_uidgid
for dir in export data data/index media media/documents media/documents/originals media/documents/thumbnails; do
if [[ ! -d "../$dir" ]]
then
echo "creating directory ../$dir"
if [[ ! -d "../$dir" ]]; then
echo "Creating directory ../$dir"
mkdir ../$dir
fi
done
echo "creating directory /tmp/paperless"
echo "Creating directory /tmp/paperless"
mkdir -p /tmp/paperless
chown -R paperless:paperless ../
set +e
echo "Adjusting permissions of paperless files. This may take a while."
chown -R paperless:paperless /tmp/paperless
find .. -not \( -user paperless -and -group paperless \) -exec chown paperless:paperless {} +
set -e
migrations
gosu paperless /sbin/docker-prepare.sh
}
install_languages() {
@@ -102,44 +50,43 @@ install_languages() {
apt-get update
for lang in "${langs[@]}"; do
pkg="tesseract-ocr-$lang"
# English is installed by default
#if [[ "$lang" == "eng" ]]; then
# continue
#fi
pkg="tesseract-ocr-$lang"
# English is installed by default
#if [[ "$lang" == "eng" ]]; then
# continue
#fi
if dpkg -s $pkg &> /dev/null; then
echo "package $pkg already installed!"
continue
fi
if dpkg -s $pkg &>/dev/null; then
echo "Package $pkg already installed!"
continue
fi
if ! apt-cache show $pkg &> /dev/null; then
echo "package $pkg not found! :("
continue
fi
if ! apt-cache show $pkg &>/dev/null; then
echo "Package $pkg not found! :("
continue
fi
echo "Installing package $pkg..."
if ! apt-get -y install "$pkg" &> /dev/null; then
echo "Could not install $pkg"
exit 1
fi
done
echo "Installing package $pkg..."
if ! apt-get -y install "$pkg" &>/dev/null; then
echo "Could not install $pkg"
exit 1
fi
done
}
echo "Paperless-ng docker container starting..."
echo "Paperless-ngx docker container starting..."
# Install additional languages if specified
if [[ ! -z "$PAPERLESS_OCR_LANGUAGES" ]]; then
install_languages "$PAPERLESS_OCR_LANGUAGES"
if [[ ! -z "$PAPERLESS_OCR_LANGUAGES" ]]; then
install_languages "$PAPERLESS_OCR_LANGUAGES"
fi
initialize
if [[ "$1" != "/"* ]]; then
echo Executing management command "$@"
exec sudo -HEu paperless python3 manage.py "$@"
exec gosu paperless python3 manage.py "$@"
else
echo Executing "$@"
exec "$@"
fi

72
docker/docker-prepare.sh Executable file
View File

@@ -0,0 +1,72 @@
#!/usr/bin/env bash
wait_for_postgres() {
attempt_num=1
max_attempts=5
echo "Waiting for PostgreSQL to start..."
host="${PAPERLESS_DBHOST}"
port="${PAPERLESS_DBPORT}"
if [[ -z $port ]]; then
port="5432"
fi
while ! </dev/tcp/$host/$port; do
if [ $attempt_num -eq $max_attempts ]; then
echo "Unable to connect to database."
exit 1
else
echo "Attempt $attempt_num failed! Trying again in 5 seconds..."
fi
attempt_num=$(expr "$attempt_num" + 1)
sleep 5
done
}
migrations() {
(
# flock is in place to prevent multiple containers from doing migrations
# simultaneously. This also ensures that the db is ready when the command
# of the current container starts.
flock 200
echo "Apply database migrations..."
python3 manage.py migrate
) 200>/usr/src/paperless/data/migration_lock
}
search_index() {
index_version=1
index_version_file=/usr/src/paperless/data/.index_version
if [[ (! -f "$index_version_file") || $(<$index_version_file) != "$index_version" ]]; then
echo "Search index out of date. Updating..."
python3 manage.py document_index reindex
echo $index_version | tee $index_version_file >/dev/null
fi
}
superuser() {
if [[ -n "${PAPERLESS_ADMIN_USER}" ]]; then
python3 manage.py manage_superuser
fi
}
do_work() {
if [[ -n "${PAPERLESS_DBHOST}" ]]; then
wait_for_postgres
fi
migrations
search_index
superuser
}
do_work

View File

@@ -1,4 +1,4 @@
for command in document_archiver document_exporter document_importer mail_fetcher document_create_classifier document_index document_renamer document_retagger document_thumbnails document_sanity_checker;
for command in document_archiver document_exporter document_importer mail_fetcher document_create_classifier document_index document_renamer document_retagger document_thumbnails document_sanity_checker manage_superuser;
do
echo "installing $command..."
sed "s/management_command/$command/g" management_script.sh > /usr/local/bin/$command

2
docker/management_script.sh Normal file → Executable file
View File

@@ -6,7 +6,7 @@ cd /usr/src/paperless/src/
if [[ $(id -u) == 0 ]] ;
then
sudo -HEu paperless python3 manage.py management_command "$@"
gosu paperless python3 manage.py management_command "$@"
elif [[ $(id -un) == "paperless" ]] ;
then
python3 manage.py management_command "$@"

Binary file not shown.

After

Width:  |  Height:  |  Size: 680 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 686 KiB

View File

@@ -64,9 +64,9 @@ Updating Paperless
Docker Route
============
If a new release of paperless-ng is available, upgrading depends on how you
installed paperless-ng in the first place. The releases are available at the
`release page <https://github.com/jonaswinkler/paperless-ng/releases>`_.
If a new release of paperless-ngx is available, upgrading depends on how you
installed paperless-ngx in the first place. The releases are available at the
`release page <https://github.com/paperless-ngx/paperless-ngx/releases>`_.
First of all, ensure that paperless is stopped.
@@ -92,31 +92,30 @@ B. If you built the image yourself, do the following:
.. code:: shell-session
$ git pull
$ ./compile-frontend.sh
$ docker-compose build
$ docker-compose up
Running ``docker-compose up`` will also apply any new database migrations.
If you see everything working, press CTRL+C once to gracefully stop paperless.
Then you can start paperless-ng with ``-d`` to have it run in the background.
Then you can start paperless-ngx with ``-d`` to have it run in the background.
.. note::
In version 0.9.14, the update process was changed. In 0.9.13 and earlier, the
docker-compose files specified exact versions and pull won't automatically
update to newer versions. In order to enable updates as described above, either
get the new ``docker-compose.yml`` file from `here <https://github.com/jonaswinkler/paperless-ng/tree/master/docker/compose>`_
get the new ``docker-compose.yml`` file from `here <https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose>`_
or edit the ``docker-compose.yml`` file, find the line that says
.. code::
image: jonaswinkler/paperless-ng:0.9.x
image: ghcr.io/paperless-ngx/paperless-ngx:0.9.x
and replace the version with ``latest``:
.. code::
image: jonaswinkler/paperless-ng:latest
image: ghcr.io/paperless-ngx/paperless-ngx:latest
Bare Metal Route
================
@@ -144,39 +143,6 @@ After grabbing the new release and unpacking the contents, do the following:
This might not actually do anything. Not every new paperless version comes with new
database migrations.
Ansible Route
=============
Most of the update process is automated when using the ansible role.
1. Backup your defined role variables file outside the paperless source-tree:
.. code:: shell-session
$ cp ansible/vars.yml ~/vars.yml.old
2. Pull the release tag you want to update to:
.. code:: shell-session
$ git fetch --all
$ git checkout ng-0.9.14
3. Update the role variable definitions ``ansible/vars.yml`` (where appropriate).
4. Run the ansible playbook you created created during :ref:`installation <setup-ansible>` again:
.. note::
When ansible detects that an update run is in progress, it backs up the entire ``paperlessng_directory`` to ``paperlessng_directory-TIMESTAMP``.
Updates can be rolled back by simply moving the timestamped folder back to the original location.
If the update succeeds and you want to continue using the new release, please don't forget to delete the backup folder.
.. code:: shell-session
$ ansible-playbook playbook.yml
Downgrading Paperless
#####################
@@ -193,7 +159,9 @@ This table lists the compatible versions for each database migration number.
+------------------+-----------------+
| 1012 | 1.1.0 - 1.2.1 |
+------------------+-----------------+
| 1014 | 1.3.0 - current |
| 1014 | 1.3.0 - 1.3.1 |
+------------------+-----------------+
| 1016 | 1.3.2 - current |
+------------------+-----------------+
Execute the following management command to migrate your database:
@@ -245,6 +213,8 @@ Document exporter
The document exporter exports all your data from paperless into a folder for
backup or migration to another DMS.
If you use the document exporter within a cronjob to backup your data you might use the ``-T`` flag behind exec to suppress "The input device is not a TTY" errors. For example: ``docker-compose exec -T webserver document_exporter ../export``
.. code::
document_exporter target [-c] [-f] [-d]
@@ -409,6 +379,8 @@ the naming scheme.
The command takes no arguments and processes all your documents at once.
Learn how to use :ref:`Management Utilities<Management utilities>`.
.. _utilities-sanity-checker:
@@ -496,7 +468,7 @@ Documents can be stored in Paperless using GnuPG encryption.
.. danger::
Encryption is deprecated since paperless-ng 0.9 and doesn't really provide any
Encryption is deprecated since paperless-ngx 0.9 and doesn't really provide any
additional security, since you have to store the passphrase in a configuration
file on the same system as the encrypted documents for paperless to work.
Furthermore, the entire text content of the documents is stored plain in the

View File

@@ -18,13 +18,13 @@ that had a ``match`` property of ``bc hydro`` and a ``matching_algorithm`` of
your ``Home Utility`` tag so long as the text ``bc hydro`` appears in the body
of the document somewhere.
The matching logic is quite powerful, and supports searching the text of your
The matching logic is quite powerful. It supports searching the text of your
document with different algorithms, and as such, some experimentation may be
necessary to get things right.
In order to have a tag, correspondent or type assigned automatically to newly
In order to have a tag, correspondent, or type assigned automatically to newly
consumed documents, assign a match and matching algorithm using the web
interface. These settings define when to assign correspondents, tags and types
interface. These settings define when to assign correspondents, tags, and types
to documents.
The following algorithms are available:
@@ -34,16 +34,16 @@ The following algorithms are available:
either of these terms.
* **All:** Requires that every word provided appears in the PDF, albeit not in the
order provided.
* **Literal:** Matches only if the match appears exactly as provided in the PDF.
* **Literal:** Matches only if the match appears exactly as provided (i.e. preserve ordering) in the PDF.
* **Regular expression:** Parses the match as a regular expression and tries to
find a match within the document.
* **Fuzzy match:** I dont know. Look at the source.
* **Auto:** Tries to automatically match new documents. This does not require you
to set a match. See the notes below.
When using the "any" or "all" matching algorithms, you can search for terms
When using the *any* or *all* matching algorithms, you can search for terms
that consist of multiple words by enclosing them in double quotes. For example,
defining a match text of ``"Bank of America" BofA`` using the "any" algorithm,
defining a match text of ``"Bank of America" BofA`` using the *any* algorithm,
will match documents that contain either "Bank of America" or "BofA", but will
not match documents containing "Bank of South America".
@@ -57,9 +57,9 @@ automatically tagged with the appropriate data.
Automatic matching
==================
Paperless-ng comes with a new matching algorithm called *Auto*. This matching
algorithm tries to assign tags, correspondents and document types to your
documents based on how you have assigned these on existing documents. It
Paperless-ngx comes with a new matching algorithm called *Auto*. This matching
algorithm tries to assign tags, correspondents, and document types to your
documents based on how you have already assigned these on existing documents. It
uses a neural network under the hood.
If, for example, all your bank statements of your account 123 at the Bank of
@@ -76,11 +76,11 @@ feature:
changes. Paperless periodically (default: once each hour) checks for changes
and does this automatically for you.
* The Auto matching algorithm only takes documents into account which are NOT
placed in your inbox (i.e., have inbox tags assigned to them). This ensures
placed in your inbox (i.e. have any inbox tags assigned to them). This ensures
that the neural network only learns from documents which you have correctly
tagged before.
* The matching algorithm can only work if there is a correlation between the
tag, correspondent or document type and the document itself. Your bank
tag, correspondent, or document type and the document itself. Your bank
statements usually contain your bank account number and the name of the bank,
so this works reasonably well, However, tags such as "TODO" cannot be
automatically assigned.
@@ -104,7 +104,7 @@ you execute scripts of your own choosing just before or after a document is
consumed using a couple simple hooks.
Just write a script, put it somewhere that Paperless can read & execute, and
then put the path to that script in ``paperless.conf`` with the variable name
then put the path to that script in ``paperless.conf`` or ``docker-compose.env`` with the variable name
of either ``PAPERLESS_PRE_CONSUME_SCRIPT`` or
``PAPERLESS_POST_CONSUME_SCRIPT``.
@@ -167,12 +167,40 @@ into paperless. It receives the following arguments:
* Correspondent
* Tags
The script can be in any language you like, but for a simple shell script
example, you can take a look at ``post-consumption-example.sh`` in the
``scripts`` directory in this project.
The script can be in any language, but for a simple shell script
example, you can take a look at `post-consumption-example.sh`_ in this project.
The post consumption script cannot cancel the consumption process.
Docker
------
Assumed you have ``/home/foo/paperless-ngx/scripts/post-consumption-example.sh``.
You can pass that script into the consumer container via a host mount in your ``docker-compose.yml``.
.. code:: bash
...
consumer:
...
volumes:
...
- /home/paperless-ngx/scripts:/path/in/container/scripts/
...
Example (docker-compose.yml): ``- /home/foo/paperless-ngx/scripts:/usr/src/paperless/scripts``
which in turn requires the variable ``PAPERLESS_POST_CONSUME_SCRIPT`` in ``docker-compose.env`` to point to ``/path/in/container/scripts/post-consumption-example.sh``.
Example (docker-compose.env): ``PAPERLESS_POST_CONSUME_SCRIPT=/usr/src/paperless/scripts/post-consumption-example.sh``
Troubleshooting:
- Monitor the docker-compose log ``cd ~/paperless-ngx; docker-compose logs -f``
- Check your script's permission e.g. in case of permission error ``sudo chmod 755 post-consumption-example.sh``
- Pipe your scripts's output to a log file e.g. ``echo "${DOCUMENT_ID}" | tee --append /usr/src/paperless/scripts/post-consumption-example.log``
.. _post-consumption-example.sh: https://github.com/jonaswinkler/paperless-ngx/blob/master/scripts/post-consumption-example.sh
.. _advanced-file_name_handling:
File name handling
@@ -221,14 +249,14 @@ Paperless provides the following placeholders withing filenames:
* ``{document_type}``: The name of the document type, or "none".
* ``{tag_list}``: A comma separated list of all tags assigned to the document.
* ``{title}``: The title of the document.
* ``{created}``: The full date and time the document was created.
* ``{created}``: The full date (ISO format) the document was created.
* ``{created_year}``: Year created only.
* ``{created_month}``: Month created only (number 1-12).
* ``{created_day}``: Day created only (number 1-31).
* ``{added}``: The full date and time the document was added to paperless.
* ``{created_month}``: Month created only (number 01-12).
* ``{created_day}``: Day created only (number 01-31).
* ``{added}``: The full date (ISO format) the document was added to paperless.
* ``{added_year}``: Year added only.
* ``{added_month}``: Month added only (number 1-12).
* ``{added_day}``: Day added only (number 1-31).
* ``{added_month}``: Month added only (number 01-12).
* ``{added_day}``: Day added only (number 01-31).
Paperless will try to conserve the information from your database as much as possible.

View File

@@ -147,93 +147,57 @@ The REST api provides three different forms of authentication.
Searching for documents
#######################
Paperless-ng offers API endpoints for full text search. These are as follows:
Full text searching is available on the ``/api/documents/`` endpoint. Two specific
query parameters cause the API to return full text search results:
``/api/search/``
================
* ``/api/documents/?query=your%20search%20query``: Search for a document using a full text query.
For details on the syntax, see :ref:`basic-usage_searching`.
Get search results based on a query.
* ``/api/documents/?more_like=1234``: Search for documents similar to the document with id 1234.
Query parameters:
Pagination works exactly the same as it does for normal requests on this endpoint.
* ``query``: The query string. See
`here <https://whoosh.readthedocs.io/en/latest/querylang.html>`_
for details on the syntax.
* ``page``: Specify the page you want to retrieve. Each page
contains 10 search results and the first page is ``page=1``, which
is the default if this is omitted.
Certain limitations apply to full text queries:
Result list object returned by the endpoint:
* Results are always sorted by search score. The results matching the query best will show up first.
.. code:: json
* Only a small subset of filtering parameters are supported.
Furthermore, each returned document has an additional ``__search_hit__`` attribute with various information
about the search results:
.. code::
{
"count": 1,
"page": 1,
"page_count": 1,
"corrected_query": "",
"count": 31,
"next": "http://localhost:8000/api/documents/?page=2&query=test",
"previous": null,
"results": [
...
{
"id": 123,
"title": "title",
"content": "content",
...
"__search_hit__": {
"score": 0.343,
"highlights": "text <span class=\"match\">Test</span> text",
"rank": 23
}
},
...
]
}
* ``count``: The approximate total number of results.
* ``page``: The page returned to you. This might be different from
the page you requested, if you requested a page that is behind
the last page. In that case, the last page is returned.
* ``page_count``: The total number of pages.
* ``corrected_query``: Corrected version of the query string. Can be null.
If not null, can be used verbatim to start a new query.
* ``results``: A list of result objects on the current page.
Result object:
.. code:: json
{
"id": 1,
"highlights": [
],
"score": 6.34234,
"rank": 23,
"document": {
}
}
* ``id``: the primary key of the found document
* ``highlights``: an object containing parsable highlights for the result.
See below.
* ``score``: The score assigned to the document. A higher score indicates a
better match with the query. Search results are sorted descending by score.
* ``rank``: the position of the document within the entire search results list.
* ``document``: The full json of the document, as returned by
``/api/documents/<id>/``.
Highlights object:
Highlights are provided as a list of fragments. A fragment is a longer section of
text from the original document.
Each fragment contains a list of strings, and some of them are marked as a highlight.
.. code:: json
[
[
{"text": "This is a sample text with a ", "highlight": false},
{"text": "highlighted", "highlight": true},
{"text": " word.", "highlight": false}
],
[
{"text": "Another", "highlight": true},
{"text": " fragment with a highlight.", "highlight": false}
]
]
A client may use this example to produce the following output:
... This is a sample text with a **highlighted** word. ... **Another** fragment with a highlight. ...
* ``score`` is an indication how well this document matches the query relative to the other search results.
* ``highlights`` is an excerpt from the document content and highlights the search terms with ``<span>`` tags as shown above.
* ``rank`` is the index of the search results. The first result will have rank 0.
``/api/search/autocomplete/``
=============================
@@ -291,7 +255,7 @@ process itself is available, since that happens in a different process.
API Versioning
##############
The REST API is versioned since Paperless-ng 1.3.0.
The REST API is versioned since Paperless-ngx 1.3.0.
* Versioning ensures that changes to the API don't break older clients.
* Clients specify the specific version of the API they wish to use with every request and Paperless will handle the request using the specified API version.

View File

@@ -5,6 +5,156 @@
Changelog
*********
paperless-ngx 1.6.0
###################
This is the first release of the revived paperless-ngx project 🎉. Thank you to everyone on the paperless-ngx team for your initiative and excellent teamwork!
Version 1.6.0 merges several pending PRs from jonaswinkler's repo and includes new feature updates and bug fixes. Major backend and UI changes include:
* Updated docs, scripts, CI, and containers to paperless-ngx.
* Updated Python and Angular dependencies.
* Dropped support for Python 3.7.
* Dropped support for Ansible playbooks (thanks `@slankes`_ #109). If someone would like to continue supporting them, please see the `ansible repo`_.
* Python code is now required to use Black formatting (thanks `@kpj`_ #168).
* `@tribut`_ added support for a custom SSO logout redirect (jonaswinkler#1258). See ``PAPERLESS_LOGOUT_REDIRECT_URL``.
* `@shamoon`_ added a loading indicator when document list is reloading (jonaswinkler#1297).
* `@shamoon`_ improved the PDF viewer on mobile (#2).
* `@shamoon`_ added 'any' / 'all' and 'not' filtering with tags (#10).
* `@shamoon`_ added warnings for unsaved changes, with smart edit buttons (#13).
* `@benjaminfrank`_ enabled a non-root access to port 80 via systemd (#18).
* `@amenk`_ fixed the search box overlay menu on mobile (#32).
* `@dblitt`_ updated the login form to not auto-capitalize usernames (#36).
* `@evilsidekick293`_ made the worker timeout configurable (#37). See ``PAPERLESS_WORKER_TIMEOUT``.
* `@Nicarim`_ fixed downloads of UTF-8 formatted documents in Firefox (#56).
* `@mweimerskirch`_ sorted the language dropdown by locale (#78).
* `@mweimerskirch`_ enabled the Czech (#83) and Danish (#84) translations.
* `@cschmatzler`_ enabled specifying the webserver port (#124). See ``PAPERLESS_PORT``.
* `@muellermartin`_ fixed an error when uploading transparent PNGs (#133).
* `@shamoon`_ created a slick new logo (#165).
* `@tim-vogel`_ fixed exports missing groups (#193).
Thank you to the following people for their documentation updates, fixes, and comprehensive testing:
`@m0veax`_, `@a17t`_, `@fignew`_, `@muued`_, `@bauerj`_, `@isigmund`_, `@denilsonsa`_, `@mweimerskirch`_, `@alexander-bauer`_, `@apeltzer`_, `@tribut`_, `@yschroeder`_, `@gador`_, `@sAksham-Ar`_, `@sbrunner`_, `@philpagel`_, `@davemachado`_, `@2600box`_, `@qcasey`_, `@Nicarim`_, `@kpj`_, `@filcuk`_, `@Timoms`_, `@mattlamb99`_, `@padraigkitterick`_, `@ajkavanagh`_, `@Tooa`_, `@Unkn0wnCat`_, `@pewter77`_, `@stumpylog`_, `@Toxix`_, `@azapater`_, `@jschpp`_
Another big thanks to the people who have contributed translations:
* Michel Weimerskirch (michel_weimerskirch) suggested 31 translations into French and Luxembourgish.
* jo.vandeginste suggested 21 translations into Dutch.
* Lars Sørensen (Lrss) suggested 486 translations into Danish.
* Alex (Sky-Dragon) voted for 46 translations in German.
* Yannic Schröder (yschroeder) suggested 14 translations into German.
* David Morais Ferreira (DavidMoraisFerreira) voted for 10 translations in Portuguese and Luxembourgish.
* David Morais Ferreira (DavidMoraisFerreira) suggested 88 translations into French, German, Portuguese, Portuguese, Brazilian and Luxembourgish.
* 汪泠沣 (wlfcss) suggested 13 translations into Chinese Traditional.
* Lars Sørensen (Lrss) suggested 167 translations into Danish.
* Philmo67 suggested 11 translations into French.
paperless-ng 1.5.0
##################
Support for Python 3.6 was dropped.
* Updated python dependencies.
* Base image of the docker image changed from Debian Buster to Debian Bullseye due to its recent release.
* The docker image now uses python 3.9.
* Added the Luxembourgish locale. Thanks for translating!
* `Daniel Albers`_ added support for making the files and folders ignored by the paperless consume folder scanner configurable. See ``PAPERLESS_CONSUMER_IGNORE_PATTERNS``.
paperless-ng 1.4.5
##################
This is a maintenance release.
* Updated Python and Angular dependencies.
* Changed the algorithm that changes permissions during startup. This is still fast,
and will hopefully cause less issues.
* Fixed an issue that would sometimes cause paperless to write an incomplete
classification model file to disk.
* Fixed an issue with the OCRmyPDF parser that would always try to extract text
with PDFminer even from non-PDF files.
paperless-ng 1.4.4
##################
* Drastically decreased the startup time of the docker container. The startup script adjusts file permissions of all data only if changes are required.
* Paperless mail: Added ability to specify the character set for each server.
* Document consumption: Ignore Mac OS specific files such as ``.DS_STORE`` and ``._XXXXX.pdf``.
* Fixed an issue with the automatic matching algorithm that prevents paperless from consuming new files.
* Updated translations.
paperless-ng 1.4.3
##################
* Additions and changes
* Added Swedish locale.
* `Stéphane Brunner`_ added an option to disable the progress bars of all management commands.
* `Jo Vandeginste`_ added support for RTF documents to the Apache TIKA parser.
* `Michael Shamoon`_ added dark mode for the login and logout pages.
* `Alexander Menk`_ added additional stylesheets for printing. You can now print any page of paperless and the print result will hide the page header, sidebar, and action buttons.
* Added support for sorting when using full text search.
* Fixes
* `puuu`_ fixed ``PAPERLESS_FORCE_SCRIPT_NAME``. You can now host paperless on sub paths such as ``https://localhost:8000/paperless/``.
* Fixed an issue with the document consumer crashing on certain documents due to issues with pdfminer.six. This library is used for PDF text extraction.
paperless-ng 1.4.2
##################
* Fixed an issue with ``sudo`` that caused paperless to not start on many Raspberry Pi devices. Thank you `WhiteHatTux`_!
paperless-ng 1.4.1
##################
* Added Polish locale.
* Changed some parts of the Dockerfile to hopefully restore functionality on certain ARM devices.
* Updated python dependencies.
* `Michael Shamoon`_ added a sticky filter / bulk edit bar.
* `sbrl`_ changed the docker-entrypoint.sh script to increase compatibility with NFS shares.
* `Chris Nagy`_ added support for creating a super user by passing ``PAPERLESS_ADMIN_USER`` and
``PAPERLESS_ADMIN_PASSWORD`` as environment variables to the docker container.
paperless-ng 1.4.0
##################
* Docker images now use tesseract 4.1.1, which should fix a series of issues with OCR.
* The full text search now displays results using the default document list. This enables
selection, filtering and bulk edit on search results.
* Changes
* Firefox only: Highlight search query in PDF previews.
* New URL pattern for accessing documents by ASN directly (http://<paperless>/asn/123)
* Added logging when executing pre- and post-consume scripts.
* Better error logging during document consumption.
* Updated python dependencies.
* Automatically inserts typed text when opening "Create new" dialogs on the document details page.
* Fixes
* Fixed an issue with null characters in the document content.
.. note::
The changed to the full text searching require you to reindex your documents.
*The docker image does this automatically, you don't need to do anything.*
To do this, execute the ``document_index reindex`` management command
(see :ref:`administration-index`).
paperless-ng 1.3.2
##################
@@ -108,17 +258,6 @@ paperless-ng 1.2.0
* Paperless no longer depends on ``libpoppler-cpp-dev``.
.. note::
Some packages that paperless depends on are slowly dropping Python 3.6
support one after another, including the web server. Supporting Python
3.6 means that I cannot update these packages anymore.
At some point, paperless will drop Python 3.6 support. If using a bare
metal installation and you're still on Python 3.6, upgrade to 3.7 or newer.
If using docker, this does not affect you.
paperless-ng 1.1.4
##################
@@ -1312,6 +1451,11 @@ bulk of the work on this big change.
* Initial release
.. _Alexander Menk: https://github.com/amenk
.. _puuu: https://github.com/puuu
.. _WhiteHatTux: https://github.com/WhiteHatTux
.. _Chris Nagy: https://github.com/what-name
.. _sbrl: https://github.com/sbrl
.. _slorenz: https://github.com/sisao
.. _Jo Vandeginste: https://github.com/jovandeginste
.. _zjean: https://github.com/zjean
@@ -1384,6 +1528,50 @@ bulk of the work on this big change.
.. _JOKer: https://github.com/MasterofJOKers
.. _Brian Cribbs: https://github.com/cribbstechnolog
.. _Brendan M. Sleight: https://github.com/bmsleight
.. _Daniel Albers: https://github.com/AlD
.. _@shamoon: https://github.com/shamoon
.. _@amenk: https://github.com/amenk
.. _@dblitt: https://github.com/dblitt
.. _@evilsidekick293: https://github.com/evilsidekick293
.. _@m0veax: https://github.com/m0veax
.. _@fignew: https://github.com/fignew
.. _@muued: https://github.com/muued
.. _@isigmund: https://github.com/isigmund
.. _@denilsonsa: https://github.com/denilsonsa
.. _@sAksham-Ar: https://github.com/sAksham-Ar
.. _@philpagel: https://github.com/philpagel
.. _@davemachado: https://github.com/davemachado
.. _@2600box: https://github.com/2600box
.. _@qcasey: https://github.com/qcasey
.. _@kpj: https://github.com/kpj
.. _@mweimerskirch: https://github.com/mweimerskirch
.. _@filcuk: https://github.com/filcuk
.. _@FrankStrieter: https://github.com/FrankStrieter
.. _@tribut: https://github.com/tribut
.. _@yschroeder: https://github.com/yschroeder
.. _@gador: https://github.com/gador
.. _@Nicarim: https://github.com/Nicarim
.. _@bauerj: https://github.com/bauerj
.. _@a17t: https://github.com/a17t
.. _@alexander-bauer: https://github.com/alexander-bauer
.. _@apeltzer: https://github.com/apeltzer
.. _@Timoms: https://github.com/Timoms
.. _@sbrunner: https://github.com/sbrunner
.. _@slankes: https://github.com/slankes
.. _@mattlamb99: https://github.com/mattlamb99
.. _@padraigkitterick: https://github.com/padraigkitterick
.. _@ajkavanagh: https://github.com/ajkavanagh
.. _@Tooa: https://github.com/Tooa
.. _@Unkn0wnCat: https://github.com/Unkn0wnCat
.. _@pewter77: https://github.com/pewter77
.. _@cschmatzler: https://github.com/cschmatzler
.. _@muellermartin: https://github.com/muellermartin
.. _@stumpylog: https://github.com/stumpylog
.. _@Toxix: https://github.com/Toxix
.. _@benjaminfrank: https://github.com/benjaminfrank
.. _@azapater: https://github.com/azapater
.. _@tim-vogel: https://github.com/tim-vogel
.. _@jschpp: https://github.com/jschpp
.. _#20: https://github.com/the-paperless-project/paperless/issues/20
.. _#44: https://github.com/the-paperless-project/paperless/issues/44
@@ -1496,3 +1684,4 @@ bulk of the work on this big change.
.. _a new home on Docker Hub: https://hub.docker.com/r/danielquinn/paperless/
.. _optipng: http://optipng.sourceforge.net/
.. _DjangoQL: https://github.com/ivelum/djangoql
.. _ansible repo: https://github.com/paperless-ngx/paperless-ngx-ansible

View File

@@ -6,29 +6,29 @@ exec(open("../src/paperless/version.py").read())
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.intersphinx',
'sphinx.ext.todo',
'sphinx.ext.imgmath',
'sphinx.ext.viewcode',
'sphinx_rtd_theme',
"sphinx.ext.autodoc",
"sphinx.ext.intersphinx",
"sphinx.ext.todo",
"sphinx.ext.imgmath",
"sphinx.ext.viewcode",
"sphinx_rtd_theme",
]
# Add any paths that contain templates here, relative to this directory.
# templates_path = ['_templates']
# The suffix of source filenames.
source_suffix = '.rst'
source_suffix = ".rst"
# The encoding of source files.
#source_encoding = 'utf-8-sig'
# source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'index'
master_doc = "index"
# General information about the project.
project = u'Paperless-ng'
copyright = u'2021, Daniel Quinn, Jonas Winkler'
project = "Paperless-ngx"
copyright = "2015-2022, Daniel Quinn, Jonas Winkler, and the paperless-ngx team"
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
@@ -47,180 +47,174 @@ release = ".".join([str(_) for _ in __version__[:3]])
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#language = None
# language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# today = ''
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
# today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = ['_build']
exclude_patterns = ["_build"]
# The reST default role (used for this markup: `text`) to use for all
# documents.
#default_role = None
# default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
pygments_style = "sphinx"
# A list of ignored prefixes for module index sorting.
#modindex_common_prefix = []
# modindex_common_prefix = []
# If true, keep warnings as "system message" paragraphs in the built documents.
#keep_warnings = False
# keep_warnings = False
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'sphinx_rtd_theme'
html_theme = "sphinx_rtd_theme"
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#html_theme_options = {}
# html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
html_theme_path = []
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
#html_title = None
# html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
# html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#html_logo = None
# html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#html_favicon = None
# html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
html_static_path = ["_static"]
# Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied
# directly to the root of the documentation.
#html_extra_path = []
# html_extra_path = []
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = '%b %d, %Y'
# html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
# html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# html_additional_pages = {}
# If false, no module index is generated.
#html_domain_indices = True
# html_domain_indices = True
# If false, no index is generated.
#html_use_index = True
# html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# html_split_index = False
# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True
# html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
#html_show_sphinx = True
# html_show_sphinx = True
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#html_show_copyright = True
# html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = None
# html_file_suffix = None
# Output file base name for HTML help builder.
htmlhelp_basename = 'paperless'
htmlhelp_basename = "paperless"
# -- Options for LaTeX output ---------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#'preamble': '',
# The paper size ('letterpaper' or 'a4paper').
#'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#'preamble': '',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
('index', 'paperless.tex', u'Paperless Documentation',
u'Daniel Quinn', 'manual'),
("index", "paperless.tex", "Paperless Documentation", "Daniel Quinn", "manual"),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
#latex_logo = None
# latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#latex_use_parts = False
# latex_use_parts = False
# If true, show page references after internal links.
#latex_show_pagerefs = False
# latex_show_pagerefs = False
# If true, show URL addresses after external links.
#latex_show_urls = False
# latex_show_urls = False
# Documents to append as an appendix to all manuals.
#latex_appendices = []
# latex_appendices = []
# If false, no module index is generated.
#latex_domain_indices = True
# latex_domain_indices = True
# -- Options for manual page output ---------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
('index', 'paperless', u'Paperless Documentation',
[u'Daniel Quinn'], 1)
]
man_pages = [("index", "paperless", "Paperless Documentation", ["Daniel Quinn"], 1)]
# If true, show URL addresses after external links.
#man_show_urls = False
# man_show_urls = False
# -- Options for Texinfo output -------------------------------------------
@@ -229,93 +223,99 @@ man_pages = [
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
('index', 'Paperless', u'Paperless Documentation',
u'Daniel Quinn', 'paperless', 'Scan, index, and archive all of your paper documents.',
'Miscellaneous'),
(
"index",
"Paperless",
"Paperless Documentation",
"Daniel Quinn",
"paperless",
"Scan, index, and archive all of your paper documents.",
"Miscellaneous",
),
]
# Documents to append as an appendix to all manuals.
#texinfo_appendices = []
# texinfo_appendices = []
# If false, no module index is generated.
#texinfo_domain_indices = True
# texinfo_domain_indices = True
# How to display URL addresses: 'footnote', 'no', or 'inline'.
#texinfo_show_urls = 'footnote'
# texinfo_show_urls = 'footnote'
# If true, do not generate a @detailmenu in the "Top" node's menu.
#texinfo_no_detailmenu = False
# texinfo_no_detailmenu = False
# -- Options for Epub output ----------------------------------------------
# Bibliographic Dublin Core info.
epub_title = u'Paperless'
epub_author = u'Daniel Quinn'
epub_publisher = u'Daniel Quinn'
epub_copyright = u'2015, Daniel Quinn'
epub_title = "Paperless"
epub_author = "Daniel Quinn"
epub_publisher = "Daniel Quinn"
epub_copyright = "2015, Daniel Quinn"
# The basename for the epub file. It defaults to the project name.
#epub_basename = u'Paperless'
# epub_basename = u'Paperless'
# The HTML theme for the epub output. Since the default themes are not optimized
# for small screen space, using the same theme for HTML and epub output is
# usually not wise. This defaults to 'epub', a theme designed to save visual
# space.
#epub_theme = 'epub'
# epub_theme = 'epub'
# The language of the text. It defaults to the language option
# or en if the language is not set.
#epub_language = ''
# epub_language = ''
# The scheme of the identifier. Typical schemes are ISBN or URL.
#epub_scheme = ''
# epub_scheme = ''
# The unique identifier of the text. This can be a ISBN number
# or the project homepage.
#epub_identifier = ''
# epub_identifier = ''
# A unique identification for the text.
#epub_uid = ''
# epub_uid = ''
# A tuple containing the cover image and cover page html template filenames.
#epub_cover = ()
# epub_cover = ()
# A sequence of (type, uri, title) tuples for the guide element of content.opf.
#epub_guide = ()
# epub_guide = ()
# HTML files that should be inserted before the pages created by sphinx.
# The format is a list of tuples containing the path and title.
#epub_pre_files = []
# epub_pre_files = []
# HTML files shat should be inserted after the pages created by sphinx.
# The format is a list of tuples containing the path and title.
#epub_post_files = []
# epub_post_files = []
# A list of files that should not be packed into the epub file.
epub_exclude_files = ['search.html']
epub_exclude_files = ["search.html"]
# The depth of the table of contents in toc.ncx.
#epub_tocdepth = 3
# epub_tocdepth = 3
# Allow duplicate toc entries.
#epub_tocdup = True
# epub_tocdup = True
# Choose between 'default' and 'includehidden'.
#epub_tocscope = 'default'
# epub_tocscope = 'default'
# Fix unsupported image types using the PIL.
#epub_fix_images = False
# epub_fix_images = False
# Scale large images.
#epub_max_image_width = 0
# epub_max_image_width = 0
# How to display URL addresses: 'footnote', 'no', or 'inline'.
#epub_show_urls = 'inline'
# epub_show_urls = 'inline'
# If false, no index is generated.
#epub_use_index = True
# epub_use_index = True
# Example configuration for intersphinx: refer to the Python standard library.
intersphinx_mapping = {'http://docs.python.org/': None}
intersphinx_mapping = {"http://docs.python.org/": None}

View File

@@ -80,6 +80,15 @@ PAPERLESS_DATA_DIR=<path>
Defaults to "../data/", relative to the "src" directory.
PAPERLESS_TRASH_DIR=<path>
Instead of removing deleted documents, they are moved to this directory.
This must be writeable by the user running paperless. When running inside
docker, ensure that this path is within a permanent volume (such as
"../media/trash") so it won't get lost on upgrades.
Defaults to empty (i.e. really delete documents).
PAPERLESS_MEDIA_ROOT=<path>
This is where your documents and thumbnails are stored.
@@ -154,10 +163,6 @@ PAPERLESS_FORCE_SCRIPT_NAME=<path>
To host paperless under a subpath url like example.com/paperless you set
this value to /paperless. No trailing slash!
.. note::
I don't know if this works in paperless-ng. Probably not.
Defaults to none, which hosts paperless at "/".
PAPERLESS_STATIC_URL=<path>
@@ -177,6 +182,30 @@ PAPERLESS_AUTO_LOGIN_USERNAME=<username>
Defaults to none, which disables this feature.
PAPERLESS_ADMIN_USER=<username>
If this environment variable is specified, Paperless automatically creates
a superuser with the provided username at start. This is useful in cases
where you can not run the `createsuperuser` command seperately, such as Kubernetes
or AWS ECS.
Requires `PAPERLESS_ADMIN_PASSWORD` to be set.
.. note::
This will not change an existing [super]user's password, nor will
it recreate a user that already exists. You can leave this throughout
the lifecycle of the containers.
PAPERLESS_ADMIN_MAIL=<email>
(Optional) Specify superuser email address. Only used when
`PAPERLESS_ADMIN_USER` is set.
Defaults to ``root@localhost``.
PAPERLESS_ADMIN_PASSWORD=<password>
Only used when `PAPERLESS_ADMIN_USER` is set.
This will be the password of the automatically created superuser.
PAPERLESS_COOKIE_PREFIX=<str>
Specify a prefix that is added to the cookies used by paperless to identify
@@ -202,17 +231,24 @@ PAPERLESS_ENABLE_HTTP_REMOTE_USER=<bool>
Also see the warning `in the official documentation <https://docs.djangoproject.com/en/3.1/howto/auth-remote-user/#configuration>`.
Defaults to `false` which disables this feature.
PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME=<str>
If `PAPERLESS_ENABLE_HTTP_REMOTE_USER` is enabled, this property allows to
customize the name of the HTTP header from which the authenticated username
If `PAPERLESS_ENABLE_HTTP_REMOTE_USER` is enabled, this property allows to
customize the name of the HTTP header from which the authenticated username
is extracted. Values are in terms of
[HttpRequest.META](https://docs.djangoproject.com/en/3.1/ref/request-response/#django.http.HttpRequest.META).
Thus, the configured value must start with `HTTP_` followed by the
Thus, the configured value must start with `HTTP_` followed by the
normalized actual header name.
Defaults to `HTTP_REMOTE_USER`.
PAPERLESS_LOGOUT_REDIRECT_URL=<str>
URL to redirect the user to after a logout. This can be used together with
`PAPERLESS_ENABLE_HTTP_REMOTE_USER` to redirect the user back to the SSO
application's logout page.
Defaults to None, which disables this feature.
.. _configuration-ocr:
OCR settings
@@ -238,6 +274,8 @@ PAPERLESS_OCR_LANGUAGE=<lang>
Defaults to "eng".
Note: If your language contains a '-' such as chi-sim, you must use chi_sim
PAPERLESS_OCR_MODE=<mode>
Tell paperless when and how to perform ocr on your documents. Four modes
are available:
@@ -380,7 +418,7 @@ Tika settings
#############
Paperless can make use of `Tika <https://tika.apache.org/>`_ and
`Gotenberg <https://thecodingmachine.github.io/gotenberg/>`_ for parsing and
`Gotenberg <https://gotenberg.dev/>`_ for parsing and
converting "Office" documents (such as ".doc", ".xlsx" and ".odt"). If you
wish to use this, you must provide a Tika server and a Gotenberg server,
configure their endpoints, and enable the feature.
@@ -422,10 +460,10 @@ requires are as follows:
# ...
gotenberg:
image: thecodingmachine/gotenberg
image: gotenberg/gotenberg:7
restart: unless-stopped
environment:
DISABLE_GOOGLE_CHROME: 1
CHROMIUM_DISABLE_ROUTES: 1
tika:
image: apache/tika
@@ -485,6 +523,12 @@ PAPERLESS_THREADS_PER_WORKER=<num>
PAPERLESS_THREADS_PER_WORKER automatically.
PAPERLESS_WORKER_TIMEOUT=<num>
Machines with few cores or weak ones might not be able to finish OCR on
large documents within the default 1800 seconds. So extending this timeout
may prove to be useful on weak hardware setups.
PAPERLESS_TIME_ZONE=<timezone>
Set the time zone here.
See https://docs.djangoproject.com/en/3.1/ref/settings/#std:setting-TIME_ZONE
@@ -602,6 +646,20 @@ PAPERLESS_IGNORE_DATES=<string>
Defaults to an empty string to not ignore any dates.
PAPERLESS_DATE_ORDER=<format>
Paperless will try to determine the document creation date from its contents.
Specify the date format Paperless should expect to see within your documents.
This option defaults to DMY which translates to day first, month second, and year
last order. Characters D, M, or Y can be shuffled to meet the required order.
PAPERLESS_CONSUMER_IGNORE_PATTERNS=<json>
By default, paperless ignores certain files and folders in the consumption
directory, such as system files created by the Mac OS.
This can be adjusted by configuring a custom json array with patterns to exclude.
Defautls to ``[".DS_STORE/*", "._*", ".stfolder/*"]``.
Binaries
########
@@ -641,6 +699,17 @@ PAPERLESS_WEBSERVER_WORKERS=<num>
Defaults to 2.
PAPERLESS_PORT=<port>
The port number the webserver will listen on inside the container. There are
special setups where you may need this to avoid collisions with other
services (like using podman with multiple containers in one pod).
Don't change this when using Docker. To change the port the webserver is
reachable outside of the container, instead refer to the "ports" key in
``docker-compose.yml``.
Defaults to 8000.
USERMAP_UID=<uid>
The ID of the paperless user in the container. Set this to your actual user ID on the
host system, which you can get by executing

View File

@@ -5,8 +5,8 @@ Contributing to Paperless
.. warning::
This section is not updated to paperless-ng yet.
This section is not updated to paperless-ngx yet.
Maybe you've been using Paperless for a while and want to add a feature or two,
or maybe you've come across a bug that you have some ideas how to solve. The
beauty of Free software is that you can see what's wrong and help to get it

View File

@@ -3,7 +3,7 @@
Paperless development
#####################
This section describes the steps you need to take to start development on paperless-ng.
This section describes the steps you need to take to start development on paperless-ngx.
Check out the source from github. The repository is organized in the following way:
@@ -23,10 +23,10 @@ Apart from that, the folder structure is as follows:
* ``scripts/`` - Various scripts that help with different parts of development.
* ``docker/`` - Files required to build the docker image.
Initial setup and first start
Initial setup and first start
=============================
After you forked and cloned the code from github you need to perform a first-time setup.
After you forked and cloned the code from github you need to perform a first-time setup.
To do the setup you need to perform the steps from the following chapters in a certain order:
1. Install prerequisites + pipenv as mentioned in :ref:`Bare metal route <setup-bare_metal>`
@@ -35,35 +35,37 @@ To do the setup you need to perform the steps from the following chapters in a c
.. code:: shell-session
$ npm install -g @angular/cli
$ npm install -g @angular/cli
4. Create ``consume`` and ``media`` folders in the cloned root folder.
.. code:: shell-session
mkdir -p consume media
5. You can now either ...
* install redis or
* install redis or
* use the included scripts/start-services.sh to use docker to fire up a redis instance (and some other services such as tika, gotenberg and a postgresql server) or
* spin up a bare redis container
* spin up a bare redis container
.. code:: shell-session
docker run -d -p 6379:6379 -restart unless-stopped redis:latest
docker run -d -p 6379:6379 --restart unless-stopped redis:latest
6. Install the python dependencies by performing in the src/ directory.
.. code:: shell-session
pipenv install --dev
7. Generate the static UI so you can perform a login to get session that is required for frontend development (this needs to be done one time only). From root folder:
* Make sure you're using python 3.9.x or lower. Otherwise you might get issues with building dependencies. You can use `pyenv <https://github.com/pyenv/pyenv>`_ to install a specific python version.
7. Generate the static UI so you can perform a login to get session that is required for frontend development (this needs to be done one time only). From src-ui directory:
.. code:: shell-session
compile-frontend.sh
npm install .
./node_modules/.bin/ng build --configuration production
8. Apply migrations and create a superuser for your dev instance:
@@ -79,7 +81,7 @@ To do the setup you need to perform the steps from the following chapters in a c
python3 manage.py runserver & python3 manage.py document_consumer & python3 manage.py qcluster
10. Login with the superuser credentials provided in step 8 at ``http://localhost:8000`` to create a session that enables you to use the backend.
Backend development environment is now ready, to start Frontend development go to ``/src-ui`` and run ``ng serve``. From there you can use ``http://localhost:4200`` for a preview.
Back end development
@@ -106,6 +108,7 @@ Testing and code style:
* Run ``pytest`` in the src/ directory to execute all tests. This also generates a HTML coverage
report. When runnings test, paperless.conf is loaded as well. However: the tests rely on the default
configuration. This is not ideal. But for now, make sure no settings except for DEBUG are overridden when testing.
* Run ``black`` to format your code.
* Run ``pycodestyle`` to test your code for issues with the configured code style settings.
.. note::
@@ -207,7 +210,7 @@ Adding new languages requires adding the translated files in the "src-ui/src/loc
// Add your new language here
]
}
``dateInputFormat`` is a special string that defines the behavior of the date input fields and absolutely needs to contain "dd", "mm" and "yyyy".
3. Import and register the Angular data for this locale in "src-ui/src/app/app.module.ts":
@@ -272,15 +275,7 @@ directory.
Building the Docker image
=========================
Building the docker image from source requires the following two steps:
1. Build the front end.
.. code:: shell-session
./compile-frontend.sh
2. Build the docker image.
Building the docker image from source:
.. code:: shell-session
@@ -320,7 +315,7 @@ methods ``parse`` and ``get_thumbnail``. You can provide your own implementation
# The content of the document.
self.text = "content"
# Optional: path to a PDF document that you created from the original.
self.archive_path = os.path.join(self.tempdir, "archived.pdf")

View File

@@ -3,17 +3,13 @@
Frequently asked questions
**************************
**Q:** *What's the general plan for Paperless-ng?*
**Q:** *What's the general plan for Paperless-ngx?*
**A:** Paperless-ng is already almost feature-complete. This project will remain
as simple as it is right now. It will see improvements to features that are already there.
If you need advanced features such as document versions,
workflows or multi-user with customizable access to individual files, this is
not the tool for you.
Features that *are* planned are some more quality of life extensions for the searching
(i.e., search for similar documents, group results by correspondents with "more from this"
links, etc), bulk editing and hierarchical tags.
**A:** While Paperless-ngx is already considered largely "feature-complete" it is a community-driven
project and development will be guided in this way. New features can be submitted via
GitHub discussions and "up-voted" by the community but this is not a garauntee the feature
will be implemented. This project will always be open to collaboration in the form of PRs,
ideas etc.
**Q:** *I'm using docker. Where are my documents?*
@@ -33,19 +29,19 @@ is
files around manually. This folder is meant to be entirely managed by docker
and paperless.
**Q:** *Let's say you don't support this project anymore in a year. Can I easily move to other systems?*
**Q:** *Let's say I want to switch tools in a year. Can I easily move to other systems?*
**A:** Your documents are stored as plain files inside the media folder. You can always drag those files
out of that folder to use them elsewhere. Here are a couple notes about that.
* Paperless never modifies your original documents. It keeps checksums of all documents and uses a
* Paperless-ngx never modifies your original documents. It keeps checksums of all documents and uses a
scheduled sanity checker to check that they remain the same.
* By default, paperless uses the internal ID of each document as its filename. This might not be very
convenient for export. However, you can adjust the way files are stored in paperless by
:ref:`configuring the filename format <advanced-file_name_handling>`.
* :ref:`The exporter <utilities-exporter>` is another easy way to get your files out of paperless with reasonable file names.
**Q:** *What file types does paperless-ng support?*
**Q:** *What file types does paperless-ngx support?*
**A:** Currently, the following files are supported:
@@ -55,10 +51,10 @@ out of that folder to use them elsewhere. Here are a couple notes about that.
* With the optional Tika integration enabled (see :ref:`Configuration <configuration-tika>`), Paperless also supports various
Office documents (.docx, .doc, odt, .ppt, .pptx, .odp, .xls, .xlsx, .ods).
Paperless determines the type of a file by inspecting its content. The
Paperless-ngx determines the type of a file by inspecting its content. The
file extensions do not matter.
**Q:** *Will paperless-ng run on Raspberry Pi?*
**Q:** *Will paperless-ngx run on Raspberry Pi?*
**A:** The short answer is yes. I've tested it on a Raspberry Pi 3 B.
The long answer is that certain parts of
@@ -68,12 +64,12 @@ reuse the text. The web interface is a lot snappier, since it runs
in your browser and paperless has to do much less work to serve the data.
.. note::
You can adjust some of the settings so that paperless uses less processing
power. See :ref:`setup-less_powerful_devices` for details.
**Q:** *How do I install paperless-ng on Raspberry Pi?*
**Q:** *How do I install paperless-ngx on Raspberry Pi?*
**A:** Docker images are available for arm and arm64 hardware, so just follow
the docker-compose instructions. Apart from more required disk space compared to

View File

@@ -22,19 +22,21 @@ finding stuff again. I feed documents right from the post box into the scanner
and then shred them. Perhaps you might find it useful too.
Paperless-ng
============
Paperless-ngx
=============
Paperless-ng is a fork of the original paperless project. It changes many
things both on the surface and under the hood. Paperless-ng was created
because I feel that these changes are too big to be pushed into the main
repository right away.
Paperless-ngx is a document management system that transforms your physical
documents into a searchable online archive so you can keep, well, *less paper*.
Paperless-ngx forked from paperless-ng to continue the great work and
distribute responsibility of supporting and advancing the project among a team
of people.
NG stands for both Angular (the framework used for the
Frontend) and next-gen. Publishing this project under a different name also
avoids confusion between paperless and paperless-ng.
avoids confusion between paperless and paperless-ngx.
If you want to learn about what's different in paperless-ng, check out these
If you want to learn about what's different in paperless-ngx from Paperless, check out these
resources in the documentation:
* :ref:`Some screenshots <screenshots>` of the new UI are available.
@@ -46,16 +48,12 @@ resources in the documentation:
the consumption directory. This means that you can select text in
image-only documents coming from your scanner.
* See :ref:`this note <utilities-encyption>` about GnuPG encryption in
paperless-ng.
paperless-ngx.
* Paperless is now integrated with a
:ref:`task processing queue <setup-task_processor>` that tells you
at a glance when and why something is not working.
at a glance when and why something is not working.
* The :ref:`changelog <paperless_changelog>` contains a detailed list of all changes
in paperless-ng.
It would be great if this project could eventually merge back into the main
repository, but it needs a lot more work before that can happen.
in paperless-ngx.
Contents
========

View File

@@ -13,60 +13,102 @@ that works right for you based on recommendations from other Paperless users.
Physical scanners
=================
+---------+----------------+-----+-----+-----+----------------+
| Brand | Model | Supports | Recommended By |
+---------+----------------+-----+-----+-----+----------------+
| | | FTP | NFS | SMB | |
+=========+================+=====+=====+=====+================+
| Brother | `ADS-1500W`_ | yes | no | yes | `danielquinn`_ |
+---------+----------------+-----+-----+-----+----------------+
| Brother | `MFC-J6930DW`_ | yes | | | `ayounggun`_ |
+---------+----------------+-----+-----+-----+----------------+
| Brother | `MFC-J5910DW`_ | yes | | | `bmsleight`_ |
+---------+----------------+-----+-----+-----+----------------+
| Brother | `MFC-9142CDN`_ | yes | | yes | `REOLDEV`_ |
+---------+----------------+-----+-----+-----+----------------+
| Fujitsu | `ix500`_ | yes | | yes | `eonist`_ |
+---------+----------------+-----+-----+-----+----------------+
| Epson | `WF-7710DWF`_ | yes | | yes | `Skylinar`_ |
+---------+----------------+-----+-----+-----+----------------+
| Fujitsu | `S1300i`_ | yes | | yes | `jonaswinkler`_|
+---------+----------------+-----+-----+-----+----------------+
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Brand | Model | Supports | Recommended By |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| | | FTP | NFS | SMB | SMTP | API [1]_ | |
+=========+================+=====+=====+=====+======+==========+================+
| Brother | `ADS-1700W`_ | yes | | yes | yes | |`holzhannes`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Brother | `ADS-1600W`_ | yes | | yes | yes | |`holzhannes`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Brother | `ADS-1500W`_ | yes | | yes | yes | |`danielquinn`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Brother | `ADS-1100W`_ | yes | | | | |`ytzelf`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Brother | `ADS-2800W`_ | yes | yes | | yes | yes |`philpagel`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Brother | `MFC-J6930DW`_ | yes | | | | |`ayounggun`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Brother | `MFC-L5850DW`_ | yes | | | yes | |`holzhannes`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Brother | `MFC-L2750DW`_ | yes | | yes | yes | |`muued`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Brother | `MFC-J5910DW`_ | yes | | | | |`bmsleight`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Brother | `MFC-8950DW`_ | yes | | | yes | yes |`philpagel`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Brother | `MFC-9142CDN`_ | yes | | yes | | |`REOLDEV`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Fujitsu | `ix500`_ | yes | | yes | | |`eonist`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Epson | `ES-580W`_ | yes | | yes | yes | |`fignew`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Epson | `WF-7710DWF`_ | yes | | yes | | |`Skylinar`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Fujitsu | `S1300i`_ | yes | | yes | | |`jonaswinkler`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
| Doxie | `Q2`_ | | | | | yes |`Unkn0wnCat`_ |
+---------+----------------+-----+-----+-----+------+----------+----------------+
.. _MFC-L5850DW: https://www.brother-usa.com/products/mfcl5850dw
.. _MFC-L2750DW: https://www.brother.de/drucker/laserdrucker/mfc-l2750dw
.. _ADS-1700W: https://www.brother-usa.com/products/ads1700w
.. _ADS-1600W: https://www.brother-usa.com/products/ads1600w
.. _ADS-1500W: https://www.brother.ca/en/p/ads1500w
.. _ADS-1100W: https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=ads1100w_eu_as_cn
.. _ADS-2800W: https://www.brother-usa.com/products/ads2800w
.. _MFC-J6930DW: https://www.brother.ca/en/p/MFCJ6930DW
.. _MFC-J5910DW: https://www.brother.co.uk/printers/inkjet-printers/mfcj5910dw
.. _MFC-8950DW: https://www.brother-usa.com/products/mfc8950dw
.. _MFC-9142CDN: https://www.brother.co.uk/printers/laser-printers/mfc9140cdn
.. _ix500: http://www.fujitsu.com/us/products/computing/peripheral/scanners/scansnap/ix500/
.. _ES-580W: https://epson.com/Support/Scanners/ES-Series/Epson-WorkForce-ES-580W/s/SPT_B11B258201
.. _WF-7710DWF: https://www.epson.de/en/products/printers/inkjet-printers/for-home/workforce-wf-7710dwf
.. _ix500: http://www.fujitsu.com/us/products/computing/peripheral/scanners/scansnap/ix500/
.. _S1300i: https://www.fujitsu.com/global/products/computing/peripheral/scanners/soho/s1300i/
.. _Q2: https://www.getdoxie.com/product/doxie-q/
.. _danielquinn: https://github.com/danielquinn
.. _ayounggun: https://github.com/ayounggun
.. _bmsleight: https://github.com/bmsleight
.. _danielquinn: https://github.com/danielquinn
.. _eonist: https://github.com/eonist
.. _fignew: https://github.com/fignew
.. _holzhannes: https://github.com/holzhannes
.. _jonaswinkler: https://github.com/jonaswinkler
.. _REOLDEV: https://github.com/REOLDEV
.. _Skylinar: https://github.com/Skylinar
.. _jonaswinkler: https://github.com/jonaswinkler
.. _ytzelf: https://github.com/ytzelf
.. _Unkn0wnCat: https://github.com/Unkn0wnCat
.. _muued: https://github.com/muued
.. _philpagel: https://github.com/philpagel
.. [1] Scanners with API Integration allow to push scanned documents directly to :ref:`Paperless API <api-file_uploads>`, sometimes referred to as Webhook or Document POST.
Mobile phone software
=====================
You can use your phone to "scan" documents. The regular camera app will work, but may have too low contrast for OCR to work well. Apps specifically for scanning are recommended.
+-------------------+----------------+-----+-----+-----+-------+--------+----------------+
| Name | OS | Supports | Recommended By |
+-------------------+----------------+-----+-----+-----+-------+--------+----------------+
| | | FTP | NFS | SMB | Email | WebDav | |
+===================+================+=====+=====+=====+=======+========+================+
| `Office Lens`_ | Android | ? | ? | ? | ? | ? | `jonaswinkler`_|
+-------------------+----------------+-----+-----+-----+-------+--------+----------------+
| `Genius Scan`_ | Android | yes | no | yes | yes | yes | `hannahswain`_ |
+-------------------+----------------+-----+-----+-----+-------+--------+----------------+
+-----------------------------+----------------+-----+-----+-----+-------+--------+------------------+
| Name | OS | Supports | Recommended By |
+-----------------------------+----------------+-----+-----+-----+-------+--------+------------------+
| | | FTP | NFS | SMB | Email | WebDAV | |
+=============================+================+=====+=====+=====+=======+========+==================+
| `Office Lens`_ | Android | ? | ? | ? | ? | ? | `jonaswinkler`_ |
+-----------------------------+----------------+-----+-----+-----+-------+--------+------------------+
| `Genius Scan`_ | Android | yes | no | yes | yes | yes | `hannahswain`_ |
+-----------------------------+----------------+-----+-----+-----+-------+--------+------------------+
| `OpenScan`_ | Android | no | no | no | no | no | `benjaminfrank`_ |
+-----------------------------+----------------+-----+-----+-----+-------+--------+------------------+
| `OCR Scanner - QuickScan`_ | iOS | no | no | no | no | yes | `holzhannes`_ |
+-----------------------------+----------------+-----+-----+-----+-------+--------+------------------+
On Android, you can use these applications in combination with one of the :ref:`Paperless-ng compatible apps <usage-mobile_upload>` to "Share" the documents produced by these scanner apps with paperless.
On Android, you can use these applications in combination with one of the :ref:`Paperless-ngx compatible apps <usage-mobile_upload>` to "Share" the documents produced by these scanner apps with paperless. On iOS, you can share the scanned documents via iOS-Sharing to other mail, WebDav or FTP apps.
.. _Office Lens: https://play.google.com/store/apps/details?id=com.microsoft.office.officelens
.. _Genius Scan: https://play.google.com/store/apps/details?id=com.thegrizzlylabs.geniusscan.free
.. _OCR Scanner - QuickScan: https://apps.apple.com/us/app/quickscan-scanner-text-ocr/id1513790291
.. _OpenScan: https://github.com/Ethereal-Developers-Inc/OpenScan
.. _hannahswain: https://github.com/hannahswain
.. _benjaminfrank: https://github.com/benjaminfrank

View File

@@ -4,7 +4,7 @@
Screenshots
***********
This is what paperless-ng looks like. You shouldn't use paperless to index
This is what paperless-ngx looks like. You shouldn't use paperless to index
research papers though, its a horrible tool for that job.
The dashboard shows customizable views on your document and allows document uploads:

View File

@@ -3,10 +3,10 @@
Setup
*****
Overview of Paperless-ng
########################
Overview of Paperless-ngx
#########################
Compared to paperless, paperless-ng works a little different under the hood and has
Compared to paperless, paperless-ngx works a little different under the hood and has
more moving parts that work together. While this increases the complexity of
the system, it also brings many benefits.
@@ -85,22 +85,16 @@ You can go multiple routes to setup and run Paperless:
* :ref:`Pull the image from Docker Hub <setup-docker_hub>`
* :ref:`Build the Docker image yourself <setup-docker_build>`
* :ref:`Install Paperless directly on your system manually (bare metal) <setup-bare_metal>`
* :ref:`Use ansible to install Paperless on your system automatically (bare metal) <setup-ansible>`
The Docker routes are quick & easy. These are the recommended routes. This configures all the stuff
from the above automatically so that it just works and uses sensible defaults for all configuration options.
Here you find a cheat-sheet for docker beginners: `CLI Basics <https://sehn.tech/post/devops-with-docker/>`_
Here you find a cheat-sheet for docker beginners: `CLI Basics <https://www.sehn.tech/refs/devops-with-docker/>`_
The bare metal route is complicated to setup but makes it easier
should you want to contribute some code back. You need to configure and
run the above mentioned components yourself.
The ansible route combines benefits of both options:
the setup process is fully automated, reproducible and `idempotent <https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html#Idempotency>`_,
it includes the same sensible defaults, and it simultaneously provides the flexibility of a bare metal installation.
.. _CLI Basics: https://sehn.tech/post/devops-with-docker/
.. _idempotent: https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html#Idempotency
.. _CLI Basics: https://www.sehn.tech/refs/devops-with-docker/
.. _setup-docker_script:
@@ -116,18 +110,16 @@ performs all the steps described in :ref:`setup-docker_hub` automatically.
.. code:: shell-session
$ wget https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/install-paperless-ng.sh
$ chmod +x install-paperless-ng.sh
$ ./install-paperless-ng.sh
$ bash -c "$(curl -L https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/master/install-paperless-ngx.sh)"
.. _setup-docker_hub:
Install Paperless from Docker Hub
=================================
1. Login with your user and create a folder in your home-directory `mkdir -v ~/paperless-ng` to have a place for your configuration files and consumption directory.
1. Login with your user and create a folder in your home-directory `mkdir -v ~/paperless-ngx` to have a place for your configuration files and consumption directory.
2. Go to the `/docker/compose directory on the project page <https://github.com/jonaswinkler/paperless-ng/tree/master/docker/compose>`_
2. Go to the `/docker/compose directory on the project page <https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose>`_
and download one of the `docker-compose.*.yml` files, depending on which database backend you
want to use. Rename this file to `docker-compose.yml`.
If you want to enable optional support for Office documents, download a file with `-tika` in the file name.
@@ -173,6 +165,24 @@ Install Paperless from Docker Hub
Don't change the part after the colon or paperless wont find your documents.
You may also need to change the default port that the webserver will use
from the default (8000):
.. code::
ports:
- 8000:8000
Replace the part BEFORE the colon with a port of your choice:
.. code::
ports:
- 8010:8000
Don't change the part after the colon or edit other lines that refer to
port 8000. Modifying the part before the colon will map requests on another
port to the webserver running on the default port.
5. Modify ``docker-compose.env``, following the comments in the file. The
most important change is to set ``USERMAP_UID`` and ``USERMAP_GID``
@@ -228,7 +238,7 @@ Build the Docker image yourself
.. code:: shell-session
git clone https://github.com/jonaswinkler/paperless-ng
git clone https://github.com/paperless-ngx/paperless-ngx
The master branch always reflects the latest stable version.
@@ -241,7 +251,7 @@ Build the Docker image yourself
.. code:: yaml
webserver:
image: jonaswinkler/paperless-ng:latest
image: ghcr.io/paperless-ngx/paperless-ngx:latest
and replace it with a line that instructs docker-compose to build the image from the current working directory instead:
@@ -250,9 +260,7 @@ Build the Docker image yourself
webserver:
build: .
4. Run the ``compile-frontend.sh`` script. This requires ``node`` and ``npm >= v15``.
5. Follow steps 3 to 8 of :ref:`setup-docker_hub`. When asked to run
4. Follow steps 3 to 8 of :ref:`setup-docker_hub`. When asked to run
``docker-compose pull`` to pull the image, do
.. code:: shell-session
@@ -272,7 +280,7 @@ writing. Windows is not and will never be supported.
1. Install dependencies. Paperless requires the following packages.
* ``python3`` 3.6, 3.7, 3.8, 3.9
* ``python3`` 3.8, 3.9
* ``python3-pip``
* ``python3-dev``
@@ -286,7 +294,7 @@ writing. Windows is not and will never be supported.
Use this list for your preferred package management:
.. code::
.. code::
python3 python3-pip python3-dev imagemagick fonts-liberation optipng gnupg libpq-dev libmagic-dev mime-support
@@ -305,7 +313,7 @@ writing. Windows is not and will never be supported.
Use this list for your preferred package management:
.. code::
.. code::
unpaper ghostscript icc-profiles-free qpdf liblept5 libxml2 pngquant zlib1g tesseract-ocr
@@ -322,7 +330,7 @@ writing. Windows is not and will never be supported.
3. Optional. Install ``postgresql`` and configure a database, user and password for paperless. If you do not wish
to use PostgreSQL, SQLite is available as well.
4. Get the release archive from `<https://github.com/jonaswinkler/paperless-ng/releases>`_.
4. Get the release archive from `<https://github.com/paperless-ngx/paperless-ngx/releases>`_.
If you clone the git repo as it is, you also have to compile the front end by yourself.
Extract the archive to a place from where you wish to execute it, such as ``/opt/paperless``.
@@ -360,7 +368,11 @@ writing. Windows is not and will never be supported.
Adjust as necessary if you configured different folders.
8. Install python requirements from the ``requirements.txt`` file.
It is up to you if you wish to use a virtual environment or not.
It is up to you if you wish to use a virtual environment or not. First you should update your pip, so it gets the actual packages.
.. code:: shell-session
sudo -Hu paperless pip3 install --upgrade pip
.. code:: shell-session
@@ -407,6 +419,10 @@ writing. Windows is not and will never be supported.
``consumer`` script to watch the input folder, and the ``scheduler``
script to run tasks such as email checking and document consumption.
The ``socket`` script enables ``gunicorn`` to run on port 80 without
root privileges. For this you need to uncomment the ``Require=paperless-webserver.socket``
in the ``webserver`` script and configure ``gunicorn`` to listen on port 80 (see ``paperless/gunicorn.conf.py``).
You may need to adjust the path to the ``gunicorn`` executable. This
will be installed as part of the python dependencies, and is either located
in the ``bin`` folder of your virtual environment, or in ``~/.local/bin/`` if
@@ -452,126 +468,41 @@ writing. Windows is not and will never be supported.
to compile this by yourself, because this software has been patented until around 2017 and
binary packages are not available for most distributions.
.. _setup-ansible:
Migrating to Paperless-ngx
##########################
Install Paperless using ansible
===============================
Migration is possible both from Paperless-ng or directly from the 'original' Paperless.
.. note::
Migrating from Paperless-ng
===========================
This role currently only supports Debian 10 Buster and Ubuntu 20.04 Focal or later as target hosts.
Paperless-ngx is meant to be a drop-in replacement for Paperless-ng and thus upgrading should be
trivial for most users, especially when using docker. However, as with any major change, it is
recommended to take a full backup first. Once you are ready, simply change the docker image to
point to the new source. E.g. if using Docker Compose, edit ``docker-compose.yml`` and change:
1. Install ansible 2.7+ on the management node.
This may be the target host paperless-ng is being installed on or any remote host which can access the target host.
For further details, check the ansible `inventory <https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html>`_ documentation.
.. code::
On Debian and Ubuntu, the official repositories should provide a suitable version:
image: jonaswinkler/paperless-ng:latest
.. code:: bash
to
apt install ansible
ansible --version
.. code::
Alternatively, you can install the most recent ansible release using PyPI:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
and then run ``docker-compose up -d`` which will pull the new image recreate the container.
That's it!
.. code:: bash
Users who installed with the bare-metal route should also update their Git clone to point to
``https://github.com/paperless-ngx/paperless-ngx``, e.g. using the command
``git remote set-url origin https://github.com/paperless-ngx/paperless-ngx`` and then pull the
lastest version.
python3 -m pip install ansible
ansible --version
Migrating from Paperless
========================
Make sure your taget hosts are accessible:
.. code:: sh
ansible -m ping YourAnsibleTargetHostGoesHere
2. Clone the repository of paperless-ng:
.. code:: sh
git clone https://github.com/jonaswinkler/paperless-ng
Checkout the latest release tag:
.. code:: sh
cd paperless-ng
git checkout ng-1.0.0
3. Create an ansible ``playbook.yml`` in the paperless-ng root directory:
.. code:: yaml
- hosts: YourAnsibleTargetHostGoesHere
become: yes
vars_files:
- ansible/vars.yml
roles:
- ansible
Optional: If you also want to use PostgreSQL on the target system, install and add (for example) the `geerlingguy.postgresql <https://github.com/geerlingguy/ansible-role-postgresql>`_ role:
.. code:: sh
ansible-galaxy install geerlingguy.postgresql
.. code:: yaml
- hosts: YourAnsibleTargetHostGoesHere
become: yes
vars_files:
- ansible/vars.yml
roles:
- geerlingguy.postgresql
- ansible
Optional: If you also want to use a reverse proxy on the target system, install and add (for example) the `geerlingguy.nginx <https://github.com/geerlingguy/ansible-role-nginx>`_ role:
.. code:: sh
ansible-galaxy install geerlingguy.nginx
.. code:: yaml
- hosts: YourAnsibleTargetHostGoesHere
become: yes
vars_files:
- ansible/vars.yml
roles:
- geerlingguy.postgresql
- ansible
- geerlingguy.nginx
4. Create ``ansible/vars.yml`` to configure your ansible deployment:
.. code:: yaml
paperlessng_secret_key: PleaseGenerateAStrongKeyForThis
paperlessng_superuser_name: YourUserName
paperlessng_superuser_email: name@domain.tld
paperlessng_superuser_password: YourDesiredPasswordUsedForFirstLogin
paperlessng_ocr_languages:
- eng
- deu
For all of the available options, please check ``ansible/README.md`` and :ref:`configuration`.
Optional configurations for the above-mentioned PostgreSQL and nginx roles would also go here.
5. Run the ansible playbook from the management node:
.. code:: sh
ansible-playbook playbook.yml
When this step completes successfully, paperless-ng will be available on the target host at ``http://127.0.0.1:8000`` (or the address you configured).
Migration to paperless-ng
#########################
At its core, paperless-ng is still paperless and fully compatible. However, some
At its core, paperless-ngx is still paperless and fully compatible. However, some
things have changed under the hood, so you need to adapt your setup depending on
how you installed paperless.
@@ -587,10 +518,10 @@ The important things to keep in mind are as follows:
such as email checking and maintenance, requires a `redis`_ message broker
instance. The docker-compose route takes care of that.
* The layout of the folder structure for your documents and data remains the
same, so you can just plug your old docker volumes into paperless-ng and
same, so you can just plug your old docker volumes into paperless-ngx and
expect it to find everything where it should be.
Migration to paperless-ng is then performed in a few simple steps:
Migration to paperless-ngx is then performed in a few simple steps:
1. Stop paperless.
@@ -600,20 +531,20 @@ Migration to paperless-ng is then performed in a few simple steps:
$ docker-compose down
2. Do a backup for two purposes: If something goes wrong, you still have your
data. Second, if you don't like paperless-ng, you can switch back to
data. Second, if you don't like paperless-ngx, you can switch back to
paperless.
3. Download the latest release of paperless-ng. You can either go with the
docker-compose files from `here <https://github.com/jonaswinkler/paperless-ng/tree/master/docker/compose>`__
3. Download the latest release of paperless-ngx. You can either go with the
docker-compose files from `here <https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose>`__
or clone the repository to build the image yourself (see :ref:`above <setup-docker_build>`).
You can either replace your current paperless folder or put paperless-ng
You can either replace your current paperless folder or put paperless-ngx
in a different location.
.. caution::
Paperless-ng includes a ``.env`` file. This will set the
Paperless-ngx includes a ``.env`` file. This will set the
project name for docker compose to ``paperless``, which will also define the name
of the volumes by paperless-ng. However, if you experience that paperless-ng
of the volumes by paperless-ngx. However, if you experience that paperless-ngx
is not using your old paperless volumes, verify the names of your volumes with
.. code:: shell-session
@@ -643,7 +574,7 @@ Migration to paperless-ng is then performed in a few simple steps:
This will migrate your database and create the search index. After that,
paperless will take care of maintaining the index by itself.
8. Start paperless-ng.
8. Start paperless-ngx.
.. code:: bash
@@ -734,14 +665,14 @@ management commands as below.
7. Start paperless.
Moving back to paperless
Moving back to Paperless
========================
Lets say you migrated to Paperless-ng and used it for a while, but decided that
Lets say you migrated to Paperless-ngx and used it for a while, but decided that
you don't like it and want to move back (If you do, send me a mail about what
part you didn't like!), you can totally do that with a few simple steps.
Paperless-ng modified the database schema slightly, however, these changes can
Paperless-ngx modified the database schema slightly, however, these changes can
be reverted while keeping your current data, so that your current data will
be compatible with original Paperless.
@@ -759,7 +690,7 @@ Or without docker:
$ cd /path/to/paperless/src
$ python3 manage.py migrate documents 0023
After that, you need to clear your cookies (Paperless-ng comes with updated
After that, you need to clear your cookies (Paperless-ngx comes with updated
dependencies that do cookie-processing differently) and probably your cache
as well.
@@ -786,7 +717,7 @@ configuring some options in paperless can help improve performance immensely:
your documents before feeding them into paperless. Some scanners are able to
do this! You might want to even specify ``skip_noarchive`` to skip archive
file generation for already ocr'ed documents entirely.
* If you want to perform OCR on the the device, consider using ``PAPERLESS_OCR_CLEAN=none``.
* If you want to perform OCR on the device, consider using ``PAPERLESS_OCR_CLEAN=none``.
This will speed up OCR times and use less memory at the expense of slightly worse
OCR results.
* Set ``PAPERLESS_OPTIMIZE_THUMBNAILS`` to 'false' if you want faster consumption

View File

@@ -81,7 +81,7 @@ UserWarning in sklearn on every single document
You may encounter warnings like this:
.. code::
/usr/local/lib/python3.7/site-packages/sklearn/base.py:315:
UserWarning: Trying to unpickle estimator CountVectorizer from version 0.23.2 when using version 0.24.0.
This might lead to breaking code or invalid results. Use at your own risk.
@@ -101,22 +101,22 @@ You may experience these errors when using the optional TIKA integration:
.. code::
requests.exceptions.HTTPError: 504 Server Error: Gateway Timeout for url: http://gotenberg:3000/convert/office
requests.exceptions.HTTPError: 504 Server Error: Gateway Timeout for url: http://gotenberg:3000/forms/libreoffice/convert
Gotenberg is a server that converts Office documents into PDF documents and has a default timeout of 10 seconds.
Gotenberg is a server that converts Office documents into PDF documents and has a default timeout of 30 seconds.
When conversion takes longer, Gotenberg raises this error.
You can increase the timeout by configuring an environment variable for gotenberg (see also `here <https://thecodingmachine.github.io/gotenberg/#environment_variables.default_wait_timeout>`__).
You can increase the timeout by configuring an environment variable for Gotenberg (see also `here <https://gotenberg.dev/docs/modules/api#properties>`__).
If using docker-compose, this is achieved by the following configuration change in the ``docker-compose.yml`` file:
.. code:: yaml
gotenberg:
image: thecodingmachine/gotenberg
image: gotenberg/gotenberg:7
restart: unless-stopped
environment:
DISABLE_GOOGLE_CHROME: 1
DEFAULT_WAIT_TIMEOUT: 30
CHROMIUM_DISABLE_ROUTES: 1
API_PROCESS_TIMEOUT: 60
Permission denied errors in the consumption directory
#####################################################
@@ -200,11 +200,24 @@ This might have multiple reasons.
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 386, in sendfile
sent += os.sendfile(sockno, fileno, offset + sent, count)
OSError: [Errno 22] Invalid argument
To fix this issue, add
.. code::
SENDFILE=0
to your `docker-compose.env` file.
Error while reading metadata
############################
You might find messages like these in your log files:
.. code::
[WARNING] [paperless.parsing.tesseract] Error while reading metadata
This indicates that paperless failed to read PDF metadata from one of your documents. This happens when you
open the affected documents in paperless for editing. Paperless will continue to work, and will simply not
show the invalid metadata.

View File

@@ -24,7 +24,7 @@ Each document has a couple of fields that you can assign to them:
* A *Document* is a piece of paper that sometimes contains valuable
information.
* The *correspondent* of a document is the person, institution or company that
a document either originates form, or is sent to.
a document either originates from, or is sent to.
* A *tag* is a label that you can assign to documents. Think of labels as more
powerful folders: Multiple documents can be grouped together with a single
tag, however, a single document can also have multiple tags. This is not
@@ -71,7 +71,7 @@ your documents:
This process can be configured to fit your needs. If you don't want paperless
to create archived versions for digital documents, you can configure that by
configuring ``PAPERLESS_OCR_MODE=skip_noarchive``. Please read the
configuring ``PAPERLESS_OCR_MODE=skip_noarchive``. Please read the
:ref:`relevant section in the documentation <configuration-ocr>`.
.. note::
@@ -86,10 +86,9 @@ The consumption directory
=========================
The primary method of getting documents into your database is by putting them in
the consumption directory. The consumer runs in an infinite
loop looking for new additions to this directory and when it finds them, it goes
about the process of parsing them with the OCR, indexing what it finds, and storing
it in the media directory.
the consumption directory. The consumer runs in an infinite loop, looking for new
additions to this directory. When it finds them, the consumer goes about the process
of parsing them with the OCR, indexing what it finds, and storing it in the media directory.
Getting stuff into this directory is up to you. If you're running Paperless
on your local computer, you might just want to drag and drop files there, but if
@@ -127,7 +126,7 @@ which not only has document upload, but also document browsing and download feat
IMAP (Email)
============
You can tell paperless-ng to consume documents from your email accounts.
You can tell paperless-ngx to consume documents from your email accounts.
This is a very flexible and powerful feature, if you regularly received documents
via mail that you need to archive. The mail consumer can be configured by using the
admin interface in the following manner:
@@ -255,6 +254,8 @@ Here are a couple examples of tags and types that you could use in your collecti
* A tag ``missing_metadata`` when you still need to add some metadata to a document, but can't
or don't want to do this right now.
.. _basic-usage_searching:
Searching
#########
@@ -287,7 +288,7 @@ Matching specific tags, correspondents or types:
Matching dates:
.. code::
created:[2005 to 2009]
added:yesterday
modified:today
@@ -304,11 +305,11 @@ Matching inexact words:
auto complete and query correction.
All of these constructs can be combined as you see fit.
If you want to learn more about the query language used by paperless, paperless uses Whoosh's default query language.
If you want to learn more about the query language used by paperless, paperless uses Whoosh's default query language.
Head over to `Whoosh query language <https://whoosh.readthedocs.io/en/latest/querylang.html>`_.
For details on what date parsing utilities are available, see
`Date parsing <https://whoosh.readthedocs.io/en/latest/dates.html#parsing-date-queries>`_.
.. _usage-recommended_workflow:
@@ -383,7 +384,7 @@ Once you have scanned in a document, proceed in paperless as follows.
6. Remove inbox tags from the documents.
.. hint::
You can setup manual matching rules for your correspondents and tags and
paperless will assign them automatically. After consuming a couple documents,
you can even ask paperless to *learn* when to assign tags and correspondents
@@ -394,7 +395,7 @@ Task management
Some documents require attention and require you to act on the document. You
may take two different approaches to handle these documents based on how
regularly you intent to use paperless and scan documents.
regularly you intend to scan documents and use paperless.
* If you scan and process your documents in paperless regularly, assign a
TODO tag to all scanned documents that you need to process. Create a saved

View File

@@ -1,36 +1,39 @@
import os
bind = '0.0.0.0:8000'
bind = f'0.0.0.0:{os.getenv("PAPERLESS_PORT", 8000)}'
workers = int(os.getenv("PAPERLESS_WEBSERVER_WORKERS", 2))
worker_class = 'uvicorn.workers.UvicornWorker'
worker_class = "paperless.workers.ConfigurableWorker"
timeout = 120
def pre_fork(server, worker):
pass
def pre_exec(server):
server.log.info("Forked child, re-executing.")
def when_ready(server):
server.log.info("Server is ready. Spawning workers")
def worker_int(worker):
worker.log.info("worker received INT or QUIT signal")
## get traceback info
import threading, sys, traceback
id2name = dict([(th.ident, th.name) for th in threading.enumerate()])
code = []
for threadId, stack in sys._current_frames().items():
code.append("\n# Thread: %s(%d)" % (id2name.get(threadId,""),
threadId))
code.append("\n# Thread: %s(%d)" % (id2name.get(threadId, ""), threadId))
for filename, lineno, name, line in traceback.extract_stack(stack):
code.append('File: "%s", line %d, in %s' % (filename,
lineno, name))
code.append('File: "%s", line %d, in %s' % (filename, lineno, name))
if line:
code.append(" %s" % (line.strip()))
worker.log.debug("\n".join(code))
def worker_abort(worker):
worker.log.info("worker received SIGABRT signal")

View File

@@ -62,7 +62,7 @@ if [[ -z $(which docker-compose) ]] ; then
exit 1
fi
# Check if user has permissions to run Docker by trying to get the status of Docker (docker status).
# Check if user has permissions to run Docker by trying to get the status of Docker (docker status).
# If this fails, the user probably does not have permissions for Docker.
docker stats --no-stream 2>/dev/null 1>&2
if [ $? -ne 0 ] ; then
@@ -73,17 +73,83 @@ if [ $? -ne 0 ] ; then
sleep 3
fi
default_time_zone=$(timedatectl show -p Timezone --value)
set -e
echo ""
echo "############################################"
echo "### Paperless-ng docker installation ###"
echo "############################################"
echo "#############################################"
echo "### paperless-ngx docker installation ###"
echo "#############################################"
echo ""
echo "This script will download, configure and start paperless-ng."
echo "This script will download, configure and start paperless-ngx."
echo ""
echo "1. Folder configuration"
echo "1. Application configuration"
echo "============================"
echo ""
echo "The port on which the paperless webserver will listen for incoming"
echo "connections."
echo ""
ask "Port" "8000"
PORT=$ask_result
echo ""
echo "Paperless requires you to configure the current time zone correctly."
echo "Otherwise, the dates of your documents may appear off by one day,"
echo "depending on where you are on earth."
echo ""
ask "Current time zone" "$default_time_zone"
TIME_ZONE=$ask_result
echo ""
echo "Database backend: PostgreSQL and SQLite are available. Use PostgreSQL"
echo "if unsure. If you're running on a low-power device such as Raspberry"
echo "Pi, use SQLite to save resources."
echo ""
ask "Database backend" "postgres" "postgres sqlite"
DATABASE_BACKEND=$ask_result
echo ""
echo "Paperless is able to use Apache Tika to support Office documents such as"
echo "Word, Excel, Powerpoint, and Libreoffice equivalents. This feature"
echo "requires more resources due to the required services."
echo ""
ask "Enable Apache Tika?" "no" "yes no"
TIKA_ENABLED=$ask_result
echo ""
echo "Specify the default language that most of your documents are written in."
echo "Use ISO 639-2, (T) variant language codes: "
echo "https://www.loc.gov/standards/iso639-2/php/code_list.php"
echo "Common values: eng (English) deu (German) nld (Dutch) fra (French)"
echo "This can be a combination of multiple languages such as deu+eng"
echo ""
ask "OCR language" "eng"
OCR_LANGUAGE=$ask_result
echo ""
echo "Specify the user id and group id you wish to run paperless as."
echo "Paperless will also change ownership on the data, media and consume"
echo "folder to the specified values, so it's a good idea to supply the user id"
echo "and group id of your unix user account."
echo "If unsure, leave default."
echo ""
ask "User ID" "$(id -u)"
USERMAP_UID=$ask_result
ask "Group ID" "$(id -g)"
USERMAP_GID=$ask_result
echo ""
echo "2. Folder configuration"
echo "======================="
echo ""
echo "The target folder is used to store the configuration files of "
@@ -92,7 +158,7 @@ echo "You will need this folder whenever you want to start, stop, update or "
echo "maintain your paperless instance."
echo ""
ask "Target folder" "$(pwd)/paperless-ng"
ask "Target folder" "$(pwd)/paperless-ngx"
TARGET_FOLDER=$ask_result
echo ""
@@ -123,7 +189,10 @@ MEDIA_FOLDER=$ask_result
echo ""
echo "The data folder is where paperless stores other data, such as your"
echo "SQLite database (if used), the search index and other data."
if [[ "$DATABASE_BACKEND" == "sqlite" ]] ; then
echo -n "SQLite database, the "
fi
echo "search index and other data."
echo "As with the media folder, leave empty to have this managed by docker."
echo ""
echo "CAUTION: If specified, you must specify an absolute path starting with /"
@@ -133,59 +202,18 @@ echo ""
ask_docker_folder "Data folder" ""
DATA_FOLDER=$ask_result
echo ""
echo "2. Application configuration"
echo "============================"
if [[ "$DATABASE_BACKEND" == "postgres" ]] ; then
echo ""
echo "The database folder, where postgres stores its data."
echo "Leave empty to have this managed by docker."
echo ""
echo "CAUTION: If specified, you must specify an absolute path starting with /"
echo "or a relative path starting with ./ here."
echo ""
echo ""
echo "The port on which the paperless webserver will listen for incoming"
echo "connections."
echo ""
ask "Port" "8000"
PORT=$ask_result
echo ""
echo "Database backend: PostgreSQL and SQLite are available. Use PostgreSQL"
echo "if unsure. If you're running on a low-power device such as Raspberry"
echo "Pi, use SQLite to save resources."
echo ""
ask "Database backend" "postgres" "postgres sqlite"
DATABASE_BACKEND=$ask_result
echo ""
echo "Paperless is able to use Apache Tika to support Office documents such as"
echo "Word, Excel, Powerpoint, and Libreoffice equivalents. This feature"
echo "requires more resources due to the required services."
echo ""
ask "Enable Apache Tika?" "no" "yes no"
TIKA_ENABLED=$ask_result
echo ""
echo "Specify the default language that most of your documents are written in."
echo "Use ISO 639-2, (T) variant language codes: "
echo "https://www.loc.gov/standards/iso639-2/php/code_list.php"
echo "Common values: eng (English) deu (German) nld (Dutch) fra (French)"
echo ""
ask "OCR language" "eng"
OCR_LANGUAGE=$ask_result
echo ""
echo "Specify the user id and group id you wish to run paperless as."
echo "Paperless will also change ownership on the data, media and consume"
echo "folder to the specified values, so it's a good idea to supply the user id"
echo "and group id of your unix user account."
echo "If unsure, leave default."
echo ""
ask "User ID" "$(id -u)"
USERMAP_UID=$ask_result
ask "Group ID" "$(id -g)"
USERMAP_GID=$ask_result
ask_docker_folder "Database folder" ""
POSTGRES_FOLDER=$ask_result
fi
echo ""
echo "3. Login credentials"
@@ -238,6 +266,13 @@ if [[ -z $DATA_FOLDER ]] ; then
else
echo "Data folder: $DATA_FOLDER"
fi
if [[ "$DATABASE_BACKEND" == "postgres" ]] ; then
if [[ -z $POSTGRES_FOLDER ]] ; then
echo "Database (postgres) folder: Managed by docker"
else
echo "Database (postgres) folder: $POSTGRES_FOLDER"
fi
fi
echo ""
echo "Port: $PORT"
echo "Database: $DATABASE_BACKEND"
@@ -266,8 +301,8 @@ if [[ $TIKA_ENABLED == "yes" ]] ; then
DOCKER_COMPOSE_VERSION="$DOCKER_COMPOSE_VERSION-tika"
fi
wget "https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/docker/compose/docker-compose.$DOCKER_COMPOSE_VERSION.yml" -O docker-compose.yml
wget "https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/docker/compose/.env" -O .env
wget "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/master/docker/compose/docker-compose.$DOCKER_COMPOSE_VERSION.yml" -O docker-compose.yml
wget "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/master/docker/compose/.env" -O .env
SECRET_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 64 | head -n 1)
@@ -280,6 +315,7 @@ DEFAULT_LANGUAGES="deu eng fra ita spa"
if [[ ! $USERMAP_GID == "1000" ]] ; then
echo "USERMAP_GID=$USERMAP_GID"
fi
echo "PAPERLESS_TIME_ZONE=$TIME_ZONE"
echo "PAPERLESS_OCR_LANGUAGE=$OCR_LANGUAGE"
echo "PAPERLESS_SECRET_KEY=$SECRET_KEY"
if [[ ! " ${DEFAULT_LANGUAGES[@]} " =~ " ${OCR_LANGUAGE} " ]] ; then
@@ -299,6 +335,10 @@ if [[ -n $DATA_FOLDER ]] ; then
sed -i "s#- data:/usr/src/paperless/data#- $DATA_FOLDER:/usr/src/paperless/data#g" docker-compose.yml
fi
if [[ -n $POSTGRES_FOLDER ]] ; then
sed -i "s#- pgdata:/var/lib/postgresql/data#- $POSTGRES_FOLDER:/var/lib/postgresql/data#g" docker-compose.yml
fi
docker-compose pull
docker-compose run --rm -e DJANGO_SUPERUSER_PASSWORD="$PASSWORD" webserver createsuperuser --noinput --username "$USERNAME" --email "$EMAIL"

View File

@@ -1,5 +1,5 @@
# Have a look at the docs for documentation.
# https://paperless-ng.readthedocs.io/en/latest/configuration.html
# https://paperless-ngx.readthedocs.io/en/latest/configuration.html
# Debug. Only enable this for development.
@@ -19,6 +19,7 @@
#PAPERLESS_CONSUMPTION_DIR=../consume
#PAPERLESS_DATA_DIR=../data
#PAPERLESS_TRASH_DIR=
#PAPERLESS_MEDIA_ROOT=../media
#PAPERLESS_STATICDIR=../static
#PAPERLESS_FILENAME_FORMAT=
@@ -57,8 +58,10 @@
#PAPERLESS_CONSUMER_POLLING=10
#PAPERLESS_CONSUMER_DELETE_DUPLICATES=false
#PAPERLESS_CONSUMER_RECURSIVE=false
#PAPERLESS_CONSUMER_IGNORE_PATTERNS=[".DS_STORE/*", "._*", ".stfolder/*"]
#PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=false
#PAPERLESS_OPTIMIZE_THUMBNAILS=true
#PAPERLESS_PRE_CONSUME_SCRIPT=/path/to/an/arbitrary/script.sh
#PAPERLESS_POST_CONSUME_SCRIPT=/path/to/an/arbitrary/script.sh
#PAPERLESS_FILENAME_DATE_ORDER=YMD
#PAPERLESS_FILENAME_PARSE_TRANSFORMS=[]

View File

@@ -8,93 +8,102 @@
-i https://pypi.python.org/simple
--extra-index-url https://www.piwheels.org/simple
aioredis==1.3.1
arrow==1.0.1; python_version >= '3.6'
asgiref==3.3.1; python_version >= '3.5'
async-timeout==3.0.1; python_full_version >= '3.5.3'
attrs==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
autobahn==21.2.2; python_version >= '3.7'
arrow==1.2.2; python_version >= '3.6'
asgiref==3.5.0; python_version >= '3.7'
async-timeout==4.0.2; python_version >= '3.6'
attrs==21.4.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
autobahn==22.2.2; python_version >= '3.7'
automat==20.2.0
blessed==1.18.0
certifi==2020.12.5
cffi==1.14.5
channels-redis==3.2.0
channels==3.0.3
backports.zoneinfo==0.2.1
blessed==1.19.1; python_version >= '2.7'
certifi==2021.10.8
cffi==1.15.0
channels-redis==3.3.1
channels==3.0.4
chardet==4.0.0; python_version >= '3.1'
click==7.1.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
coloredlogs==15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
concurrent-log-handler==0.9.19
charset-normalizer==2.0.12; python_version >= '3'
click==8.0.4; python_version >= '3.6'
coloredlogs==15.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
concurrent-log-handler==0.9.20
constantly==15.1.0
cryptography==3.4.6
daphne==3.0.1; python_version >= '3.6'
dateparser==1.0.0
django-cors-headers==3.7.0
django-extensions==3.1.1
django-filter==2.4.0
cryptography==36.0.1
daphne==3.0.2; python_version >= '3.6'
dateparser==1.1.0
django-cors-headers==3.11.0
django-extensions==3.1.5
django-filter==21.1
django-picklefield==3.0.1; python_version >= '3'
django-q==1.3.4
django==3.1.7
djangorestframework==3.12.2
filelock==3.0.12
django-q==1.3.9
django==3.2.12
djangorestframework==3.13.1
filelock==3.6.0
fuzzywuzzy[speedup]==0.18.0
gunicorn==20.0.4
h11==0.12.0; python_version >= '3.6'
hiredis==1.1.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
httptools==0.1.1
humanfriendly==9.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
gunicorn==20.1.0
h11==0.13.0; python_version >= '3.6'
hiredis==2.0.0; python_version >= '3.6'
httptools==0.3.0
humanfriendly==10.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
hyperlink==21.0.0
idna==2.10; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
imap-tools==0.38.1
img2pdf==0.4.0
incremental==17.5.0
idna==3.3; python_version >= '3.5'
imap-tools==0.51.1
img2pdf==0.4.3
importlib-resources==5.4.0; python_version < '3.9'
incremental==21.3.0
inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
inotifyrecursive==0.3.5
joblib==1.0.1; python_version >= '3.6'
langdetect==1.0.8
lxml==4.6.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
msgpack==1.0.2
numpy==1.19.5
ocrmypdf==11.7.0
pathvalidate==2.3.2
pdfminer.six==20201018
pikepdf==2.5.2
pillow==8.1.0
pluggy==0.13.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
portalocker==2.2.1; python_version >= '3'
psycopg2-binary==2.8.6
joblib==1.1.0; python_version >= '3.6'
langdetect==1.0.9
lxml==4.8.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
msgpack==1.0.3
numpy==1.22.2
ocrmypdf==13.4.0
packaging==21.3; python_version >= '3.6'
pathvalidate==2.5.0
pdfminer.six==20211012
pikepdf==5.0.1
pillow==9.0.1
pluggy==1.0.0; python_version >= '3.6'
portalocker==2.4.0; python_version >= '3'
psycopg2-binary==2.9.3
pyasn1-modules==0.2.8
pyasn1==0.4.8
pycparser==2.20; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
pyopenssl==20.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
python-dateutil==2.8.1
python-dotenv==0.15.0
python-gnupg==0.4.6
pycparser==2.21; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
pyopenssl==22.0.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
pyparsing==3.0.7; python_version >= '3.6'
python-dateutil==2.8.2
python-dotenv==0.19.2
python-gnupg==0.4.8
python-levenshtein==0.12.2
python-magic==0.4.22
pytz==2021.1
pyyaml==5.4.1
python-magic==0.4.25
pytz-deprecation-shim==0.1.0.post0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'
pytz==2021.3
pyyaml==6.0
redis==3.5.3
regex==2020.11.13
reportlab==3.5.59
requests==2.25.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
regex==2022.1.18
reportlab==3.6.7; python_version >= '3.6' and python_version < '4'
requests==2.27.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'
scikit-learn==0.24.0
scipy==1.5.4
service-identity==18.1.0
six==1.15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
sortedcontainers==2.3.0
sqlparse==0.4.1; python_version >= '3.5'
threadpoolctl==2.1.0; python_version >= '3.5'
scipy==1.8.0; python_version < '3.11' and python_version >= '3.8'
service-identity==21.1.0
setuptools==60.9.3; python_version >= '3.7'
six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
sqlparse==0.4.2; python_version >= '3.5'
threadpoolctl==3.1.0; python_version >= '3.6'
tika==1.24
tqdm==4.58.0
twisted[tls]==21.2.0; python_full_version >= '3.5.4'
txaio==21.2.1; python_version >= '3.6'
tzlocal==2.1
urllib3==1.26.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'
uvicorn[standard]==0.13.4
uvloop==0.14.0
watchdog==1.0.2
tqdm==4.62.3
twisted[tls]==22.1.0; python_full_version >= '3.6.7'
txaio==22.2.1; python_version >= '3.6'
typing-extensions==4.1.1; python_version >= '3.6'
tzdata==2021.5; python_version >= '3.6'
tzlocal==4.1; python_version >= '3.6'
urllib3==1.26.8; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'
uvicorn[standard]==0.17.5
uvloop==0.16.0
watchdog==2.1.6
watchgod==0.7
wcwidth==0.2.5
websockets==8.1
whitenoise==5.2.0
websockets==10.2
whitenoise==6.0.0
whoosh==2.7.4
zope.interface==5.2.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
zipp==3.7.0; python_version < '3.10'
zope.interface==5.4.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'

View File

@@ -5,7 +5,7 @@
SilN@@@@@@@
*Q *@@@@@@@@S /= = = = = = = = = = = = = = = = = =\
*@ B@@@@@@@@N || ||
N R$ A@@@@@@@@@@ || PAPERLESS-NG ||
N R$ A@@@@@@@@@@ || PAPERLESS-NGX ||
x@@ $U B@@@@@@@@@R || ||
N@@N^ @ N@@@@@@@@@* \= = = = = = = = = = = = = = = = = =/
|@@@u @ E@@@@@@@@l

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 61 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@@ -1,5 +1,5 @@
[Unit]
Description=Paperless consumer
Description=Paperless scheduler
Requires=redis.service
[Service]

View File

@@ -3,6 +3,7 @@ Description=Paperless webserver
After=network.target
Wants=network.target
Requires=redis.service
#Requires=paperless-webserver.socket
[Service]
User=paperless

View File

@@ -0,0 +1,9 @@
[Unit]
Description=Paperless Webserver Socket
[Socket]
ListenStream=80
NoDelay=true
[Install]
WantedBy=sockets.target

View File

@@ -1,4 +1,4 @@
docker run -p 5432:5432 -e POSTGRES_PASSWORD=password -v paperless_pgdata:/var/lib/postgresql/data -d postgres:13
docker run -d -p 6379:6379 redis:latest
docker run -p 3000:3000 -d thecodingmachine/gotenberg
docker run -p 3000:3000 -d gotenberg/gotenberg:7
docker run -p 9998:9998 -d apache/tika

1
src-ui/.gitignore vendored
View File

@@ -32,6 +32,7 @@ speed-measure-plugin*.json
.history/*
# misc
/.angular/cache
/.sass-cache
/connect.lock
/coverage

View File

@@ -16,17 +16,22 @@
"i18n": {
"sourceLocale": "en-US",
"locales": {
"cs-CZ": "src/locale/messages.cs_CZ.xlf",
"da-DK": "src/locale/messages.da_DK.xlf",
"de-DE": "src/locale/messages.de_DE.xlf",
"nl-NL": "src/locale/messages.nl_NL.xlf",
"fr-FR": "src/locale/messages.fr_FR.xlf",
"en-GB": "src/locale/messages.en_GB.xlf",
"es-ES": "src/locale/messages.es_ES.xlf",
"fr-FR": "src/locale/messages.fr_FR.xlf",
"it-IT": "src/locale/messages.it_IT.xlf",
"lb-LU": "src/locale/messages.lb_LU.xlf",
"nl-NL": "src/locale/messages.nl_NL.xlf",
"pl-PL": "src/locale/messages.pl_PL.xlf",
"pt-BR": "src/locale/messages.pt_BR.xlf",
"pt-PT": "src/locale/messages.pt_PT.xlf",
"it-IT": "src/locale/messages.it_IT.xlf",
"ro-RO": "src/locale/messages.ro_RO.xlf",
"ru-RU": "src/locale/messages.ru_RU.xlf",
"es-ES": "src/locale/messages.es_ES.xlf"
}
"sv-SE": "src/locale/messages.sv_SE.xlf"
}
},
"architect": {
"build": {
@@ -39,7 +44,6 @@
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"localize": true,
"aot": true,
"assets": [
"src/favicon.ico",
"src/apple-touch-icon.png",
@@ -56,7 +60,13 @@
"scripts": [],
"allowedCommonJsDependencies": [
"ng2-pdf-viewer"
]
],
"vendorChunk": true,
"extractLicenses": false,
"buildOptimizer": false,
"sourceMap": true,
"optimization": false,
"namedChunks": true
},
"configurations": {
"production": {
@@ -70,7 +80,6 @@
"optimization": true,
"outputHashing": "none",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
@@ -91,7 +100,8 @@
"en-US": {
"localize": ["en-US"]
}
}
},
"defaultConfiguration": ""
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
@@ -107,8 +117,7 @@
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "paperless-ui:build",
"ivy": true
"browserTarget": "paperless-ui:build"
}
},
"test": {
@@ -130,19 +139,6 @@
"scripts": []
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"tsconfig.app.json",
"tsconfig.spec.json",
"e2e/tsconfig.json"
],
"exclude": [
"**/node_modules/**"
]
}
},
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {

View File

@@ -33,4 +33,4 @@ exports.config = {
}
}));
}
};
};

File diff suppressed because it is too large Load Diff

26268
src-ui/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -11,48 +11,49 @@
},
"private": true,
"dependencies": {
"@angular/animations": "~10.1.5",
"@angular/common": "~10.1.5",
"@angular/compiler": "~10.1.5",
"@angular/core": "~10.1.5",
"@angular/forms": "~10.1.5",
"@angular/localize": "~10.1.5",
"@angular/platform-browser": "~10.1.5",
"@angular/platform-browser-dynamic": "~10.1.5",
"@angular/router": "~10.1.5",
"@ng-bootstrap/ng-bootstrap": "^8.0.4",
"@ng-select/ng-select": "^5.0.9",
"bootstrap": "^4.5.0",
"@angular/animations": "~13.2.4",
"@angular/common": "~13.2.4",
"@angular/compiler": "~13.2.4",
"@angular/core": "~13.2.4",
"@angular/forms": "~13.2.4",
"@angular/localize": "~13.2.4",
"@angular/platform-browser": "~13.2.4",
"@angular/platform-browser-dynamic": "~13.2.4",
"@angular/router": "~13.2.4",
"@ng-bootstrap/ng-bootstrap": "^12.0.0",
"@ng-select/ng-select": "^8.1.1",
"@ngneat/dirty-check-forms": "^1.1.0",
"@popperjs/core": "^2.11.2",
"bootstrap": "^5.1.3",
"file-saver": "^2.0.5",
"ng-bootstrap": "^1.6.3",
"ng2-pdf-viewer": "^6.3.2",
"ngx-color": "^6.2.0",
"ngx-cookie-service": "^10.1.1",
"ngx-file-drop": "^10.0.0",
"ngx-infinite-scroll": "^9.1.0",
"rxjs": "~6.6.0",
"tslib": "^2.0.0",
"ng2-pdf-viewer": "^8.0.1",
"ngx-color": "^7.3.3",
"ngx-cookie-service": "^13.1.2",
"ngx-file-drop": "^13.0.0",
"ngx-infinite-scroll": "^10.0.1",
"rxjs": "~6.6.7",
"tslib": "^2.3.1",
"uuid": "^8.3.1",
"zone.js": "~0.10.2"
"zone.js": "~0.11.4"
},
"devDependencies": {
"@angular-devkit/build-angular": "^0.1002.0",
"@angular/cli": "~10.1.5",
"@angular/compiler-cli": "~10.1.5",
"@types/jasmine": "~3.5.0",
"@types/jasminewd2": "~2.0.3",
"@types/node": "^12.11.1",
"codelyzer": "^6.0.0",
"jasmine-core": "~3.6.0",
"jasmine-spec-reporter": "~5.0.0",
"karma": "~5.0.0",
"@angular-devkit/build-angular": "~13.2.5",
"@angular/cli": "~13.2.5",
"@angular/compiler-cli": "~13.2.4",
"@types/jasmine": "~3.10.3",
"@types/jasminewd2": "~2.0.10",
"@types/node": "^17.0.21",
"codelyzer": "^6.0.2",
"jasmine-core": "~4.0.1",
"jasmine-spec-reporter": "~7.0.0",
"karma": "~6.3.16",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "~3.0.2",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.5.0",
"karma-coverage-istanbul-reporter": "~3.0.3",
"karma-jasmine": "~4.0.1",
"karma-jasmine-html-reporter": "^1.7.0",
"protractor": "~7.0.0",
"ts-node": "~8.3.0",
"tslint": "~6.1.0",
"typescript": "~4.0.2"
"ts-node": "~10.5.0",
"tslint": "~6.1.3",
"typescript": "~4.5.5"
}
}

View File

@@ -10,7 +10,8 @@ import { LogsComponent } from './components/manage/logs/logs.component';
import { SettingsComponent } from './components/manage/settings/settings.component';
import { TagListComponent } from './components/manage/tag-list/tag-list.component';
import { NotFoundComponent } from './components/not-found/not-found.component';
import { SearchComponent } from './components/search/search.component';
import {DocumentAsnComponent} from "./components/document-asn/document-asn.component";
import { DirtyFormGuard } from './guards/dirty-form.guard';
const routes: Routes = [
{path: '', redirectTo: 'dashboard', pathMatch: 'full'},
@@ -18,22 +19,21 @@ const routes: Routes = [
{path: 'dashboard', component: DashboardComponent },
{path: 'documents', component: DocumentListComponent },
{path: 'view/:id', component: DocumentListComponent },
{path: 'search', component: SearchComponent },
{path: 'documents/:id', component: DocumentDetailComponent },
{path: 'asn/:id', component: DocumentAsnComponent },
{path: 'tags', component: TagListComponent },
{path: 'documenttypes', component: DocumentTypeListComponent },
{path: 'correspondents', component: CorrespondentListComponent },
{path: 'logs', component: LogsComponent },
{path: 'settings', component: SettingsComponent },
]},
{path: 'settings', component: SettingsComponent, canDeactivate: [DirtyFormGuard] },
]},
{path: '404', component: NotFoundComponent},
{path: '**', redirectTo: '/404', pathMatch: 'full'}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
imports: [RouterModule.forRoot(routes, { relativeLinkResolution: 'legacy' })],
exports: [RouterModule]
})
export class AppRoutingModule { }

View File

@@ -1,3 +1,3 @@
<app-toasts></app-toasts>
<router-outlet></router-outlet>
<router-outlet></router-outlet>

View File

@@ -18,7 +18,7 @@ export class AppComponent implements OnInit, OnDestroy {
constructor (private settings: SettingsService, private consumerStatusService: ConsumerStatusService, private toastService: ToastService, private router: Router) {
let anyWindow = (window as any)
anyWindow.pdfWorkerSrc = '/assets/js/pdf.worker.min.js';
anyWindow.pdfWorkerSrc = 'assets/js/pdf.worker.min.js';
this.settings.updateDarkModeSettings()
}
@@ -45,7 +45,7 @@ export class AppComponent implements OnInit, OnDestroy {
ngOnInit(): void {
this.consumerStatusService.connect()
this.successSubscription = this.consumerStatusService.onDocumentConsumptionFinished().subscribe(status => {
if (this.showNotification(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUCCESS)) {
this.toastService.show({title: $localize`Document added`, delay: 10000, content: $localize`Document ${status.filename} was added to paperless.`, actionName: $localize`Open document`, action: () => {

View File

@@ -21,8 +21,6 @@ import { CorrespondentEditDialogComponent } from './components/manage/correspond
import { TagEditDialogComponent } from './components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component';
import { DocumentTypeEditDialogComponent } from './components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component';
import { TagComponent } from './components/common/tag/tag.component';
import { SearchComponent } from './components/search/search.component';
import { ResultHighlightComponent } from './components/search/result-highlight/result-highlight.component';
import { PageHeaderComponent } from './components/common/page-header/page-header.component';
import { AppFrameComponent } from './components/app-frame/app-frame.component';
import { ToastsComponent } from './components/common/toasts/toasts.component';
@@ -65,28 +63,39 @@ import { LocalizedDateParserFormatter } from './utils/ngb-date-parser-formatter'
import { ApiVersionInterceptor } from './interceptors/api-version.interceptor';
import { ColorSliderModule } from 'ngx-color/slider';
import { ColorComponent } from './components/common/input/color/color.component';
import { DocumentAsnComponent } from './components/document-asn/document-asn.component';
import localeFr from '@angular/common/locales/fr';
import localeNl from '@angular/common/locales/nl';
import localeCs from '@angular/common/locales/cs';
import localeDa from '@angular/common/locales/da';
import localeDe from '@angular/common/locales/de';
import localePt from '@angular/common/locales/pt';
import localeIt from '@angular/common/locales/it';
import localeEnGb from '@angular/common/locales/en-GB';
import localeEs from '@angular/common/locales/es';
import localeFr from '@angular/common/locales/fr';
import localeIt from '@angular/common/locales/it';
import localeLb from '@angular/common/locales/lb';
import localeNl from '@angular/common/locales/nl';
import localePl from '@angular/common/locales/pl';
import localePt from '@angular/common/locales/pt';
import localeSv from '@angular/common/locales/sv';
import localeRo from '@angular/common/locales/ro';
import localeRu from '@angular/common/locales/ru';
import localeEs from '@angular/common/locales/es';
registerLocaleData(localeFr)
registerLocaleData(localeNl)
registerLocaleData(localeCs)
registerLocaleData(localeDa)
registerLocaleData(localeDe)
registerLocaleData(localeEnGb)
registerLocaleData(localeEs)
registerLocaleData(localeFr)
registerLocaleData(localeIt)
registerLocaleData(localeLb)
registerLocaleData(localeNl)
registerLocaleData(localePl)
registerLocaleData(localePt, "pt-BR")
registerLocaleData(localePt, "pt-PT")
registerLocaleData(localeIt)
registerLocaleData(localeEnGb)
registerLocaleData(localeRo)
registerLocaleData(localeRu)
registerLocaleData(localeEs)
registerLocaleData(localeSv)
@NgModule({
declarations: [
@@ -105,8 +114,6 @@ registerLocaleData(localeEs)
TagEditDialogComponent,
DocumentTypeEditDialogComponent,
TagComponent,
SearchComponent,
ResultHighlightComponent,
PageHeaderComponent,
AppFrameComponent,
ToastsComponent,
@@ -138,7 +145,8 @@ registerLocaleData(localeEs)
SafePipe,
CustomDatePipe,
DateComponent,
ColorComponent
ColorComponent,
DocumentAsnComponent
],
imports: [
BrowserModule,

View File

@@ -4,43 +4,43 @@
(click)="isMenuCollapsed = !isMenuCollapsed">
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand col-auto col-md-3 col-lg-2 mr-0 px-3 py-3 order-sm-0" routerLink="/dashboard">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 198.43 238.91" width="1rem" class="mr-2" fill="currentColor">
<a class="navbar-brand col-auto col-md-3 col-lg-2 me-0 px-3 py-3 order-sm-0" routerLink="/dashboard">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 198.43 238.91" width="1em" class="me-2" fill="currentColor">
<path d="M194.7,0C164.22,70.94,17.64,79.74,64.55,194.06c.58,1.47-10.85,17-18.47,29.9-1.76-6.45-3.81-13.48-3.52-14.07,38.11-45.14-27.26-70.65-30.78-107.58C-4.64,131.62-10.5,182.92,39,212.53c.3,0,2.64,11.14,3.81,16.71a58.55,58.55,0,0,0-2.93,6.45c-1.17,2.93,7.62,2.64,7.62,3.22.88-.29,21.7-36.93,22.28-37.23C187.67,174.72,208.48,68.6,194.7,0ZM134.61,74.75C79.5,124,70.12,160.64,71.88,178.53,53.41,134.85,107.64,86.77,134.61,74.75ZM28.2,145.11c10.55,9.67,28.14,39.28,13.19,56.57C44.91,193.77,46.08,175.89,28.2,145.11Z" transform="translate(0 0)"/>
</svg>
<ng-container i18n="app title">Paperless-ng</ng-container>
<ng-container i18n="app title">Paperless-ngx</ng-container>
</a>
<div class="search-form-container flex-grow-1 py-2 pb-3 pb-sm-2 px-3 pl-md-4 mr-sm-auto order-3 order-sm-1">
<div class="search-form-container flex-grow-1 py-2 pb-3 pb-sm-2 px-3 ps-md-4 me-sm-auto order-3 order-sm-1">
<form (ngSubmit)="search()" class="form-inline flex-grow-1">
<input class="form-control form-control-sm" type="text" placeholder="Search documents" aria-label="Search"
[formControl]="searchField" [ngbTypeahead]="searchAutoComplete" (selectItem)="itemSelected($event)" i18n-placeholder>
<svg width="1em" height="1em">
<use xlink:href="assets/bootstrap-icons.svg#search"/>
</svg>
<input class="form-control form-control-sm" type="text" placeholder="Search documents" aria-label="Search"
[formControl]="searchField" [ngbTypeahead]="searchAutoComplete" (selectItem)="itemSelected($event)" i18n-placeholder>
</form>
</div>
<ul ngbNav class="order-sm-3">
<li ngbDropdown class="nav-item dropdown">
<button class="btn text-light" id="userDropdown" ngbDropdownToggle>
<span *ngIf="displayName" class="navbar-text small mr-2 text-light d-none d-sm-inline">
<span *ngIf="displayName" class="navbar-text small me-2 text-light d-none d-sm-inline">
{{displayName}}
</span>
<svg width="1.3em" height="1.3em">
<use xlink:href="assets/bootstrap-icons.svg#person-circle"/>
</svg>
</button>
<div ngbDropdownMenu class="dropdown-menu-right shadow mr-2" aria-labelledby="userDropdown">
<div ngbDropdownMenu class="dropdown-menu-end shadow me-2" aria-labelledby="userDropdown">
<div *ngIf="displayName" class="d-sm-none">
<p class="small mb-0 px-3 text-muted" i18n>Logged in as {{displayName}}</p>
<div class="dropdown-divider"></div>
</div>
<a ngbDropdownItem class="nav-link" routerLink="settings" (click)="closeMenu()">
<svg class="sidebaricon mr-2" fill="currentColor">
<svg class="sidebaricon me-2" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#gear"/>
</svg><ng-container i18n>Settings</ng-container>
</a>
<a ngbDropdownItem class="nav-link" href="accounts/logout/">
<svg class="sidebaricon mr-2" fill="currentColor">
<svg class="sidebaricon me-2" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#door-open"/>
</svg><ng-container i18n>Logout</ng-container>
</a>
@@ -100,7 +100,7 @@
</a>
</li>
<li class="nav-item w-100" *ngIf="openDocuments.length >= 1">
<a class="nav-link text-truncate" [routerLink]="" (click)="closeAll()">
<a class="nav-link text-truncate" [routerLink]="[]" (click)="closeAll()">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#x"/>
</svg>&nbsp;<ng-container i18n>Close all</ng-container>
@@ -161,7 +161,7 @@
</h6>
<ul class="nav flex-column mb-2">
<li class="nav-item">
<a class="nav-link" target="_blank" rel="noopener noreferrer" href="https://paperless-ng.readthedocs.io/en/latest/">
<a class="nav-link" target="_blank" rel="noopener noreferrer" href="https://paperless-ngx.readthedocs.io/en/latest/">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#question-circle"/>
</svg>&nbsp;<ng-container i18n>Documentation</ng-container>
@@ -169,13 +169,13 @@
</li>
<li class="nav-item">
<div class="d-flex w-100 flex-wrap">
<a class="nav-link pr-0 pb-0" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng">
<a class="nav-link pe-0 pb-0" target="_blank" rel="noopener noreferrer" href="https://github.com/paperless-ngx/paperless-ngx">
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="sidebaricon bi bi-github" viewBox="0 0 16 16">
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/>
</svg>&nbsp;<ng-container i18n>GitHub</ng-container>
</a>
<a class="nav-link-additional small text-muted ml-3" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests" title="Suggest an idea">
<svg xmlns="http://www.w3.org/2000/svg" width=".9rem" height=".9rem" fill="currentColor" class="bi bi-lightbulb pr-1" viewBox="0 0 16 16">
<a class="nav-link-additional small text-muted ms-3" target="_blank" rel="noopener noreferrer" href="https://github.com/paperless-ngx/paperless-ngx/discussions/categories/feature-requests" title="Suggest an idea">
<svg xmlns="http://www.w3.org/2000/svg" width="1.3em" height="1.3em" fill="currentColor" class="bi bi-lightbulb pe-1" viewBox="0 0 16 16">
<path d="M2 6a6 6 0 1 1 10.174 4.31c-.203.196-.359.4-.453.619l-.762 1.769A.5.5 0 0 1 10.5 13a.5.5 0 0 1 0 1 .5.5 0 0 1 0 1l-.224.447a1 1 0 0 1-.894.553H6.618a1 1 0 0 1-.894-.553L5.5 15a.5.5 0 0 1 0-1 .5.5 0 0 1 0-1 .5.5 0 0 1-.46-.302l-.761-1.77a1.964 1.964 0 0 0-.453-.618A5.984 5.984 0 0 1 2 6zm6-5a5 5 0 0 0-3.479 8.592c.263.254.514.564.676.941L5.83 12h4.342l.632-1.467c.162-.377.413-.687.676-.941A5 5 0 0 0 8 1z"/>
</svg>
<ng-container i18n>Suggest an idea</ng-container>
@@ -191,7 +191,7 @@
</div>
</nav>
<main role="main" class="col-md-9 ml-sm-auto col-lg-10 px-md-4">
<main role="main" class="col-md-9 ms-sm-auto col-lg-10 px-md-4">
<router-outlet></router-outlet>
</main>
</div>

View File

@@ -7,7 +7,7 @@
top: 0;
bottom: 0;
left: 0;
z-index: 100; /* Behind the navbar */
z-index: 995; /* Behind the navbar */
padding: 50px 0 0; /* Height of navbar */
box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1);
}
@@ -90,9 +90,14 @@
}
.nav-link-additional {
margin-top: 0.2rem;
margin-top: 0.1rem;
margin-left: 0.25rem;
padding-top: 0.5rem;
text-decoration: none;
&:hover {
text-decoration: underline;
}
svg {
margin-bottom: 2px;
@@ -139,6 +144,7 @@
svg {
position: absolute;
left: 0.6rem;
top: 0.5rem;
color: rgba(255, 255, 255, 0.6);
}

View File

@@ -1,8 +1,8 @@
import { Component, OnInit } from '@angular/core';
import { Component } from '@angular/core';
import { FormControl } from '@angular/forms';
import { ActivatedRoute, Router, Params } from '@angular/router';
import { from, Observable, Subscription, BehaviorSubject } from 'rxjs';
import { debounceTime, distinctUntilChanged, map, switchMap } from 'rxjs/operators';
import { debounceTime, distinctUntilChanged, map, switchMap, first } from 'rxjs/operators';
import { PaperlessDocument } from 'src/app/data/paperless-document';
import { OpenDocumentsService } from 'src/app/services/open-documents.service';
import { SavedViewService } from 'src/app/services/rest/saved-view.service';
@@ -10,13 +10,15 @@ import { SearchService } from 'src/app/services/rest/search.service';
import { environment } from 'src/environments/environment';
import { DocumentDetailComponent } from '../document-detail/document-detail.component';
import { Meta } from '@angular/platform-browser';
import { DocumentListViewService } from 'src/app/services/document-list-view.service';
import { FILTER_FULLTEXT_QUERY } from 'src/app/data/filter-rule-type';
@Component({
selector: 'app-app-frame',
templateUrl: './app-frame.component.html',
styleUrls: ['./app-frame.component.scss']
})
export class AppFrameComponent implements OnInit {
export class AppFrameComponent {
constructor (
public router: Router,
@@ -24,10 +26,9 @@ export class AppFrameComponent implements OnInit {
private openDocumentsService: OpenDocumentsService,
private searchService: SearchService,
public savedViewService: SavedViewService,
private list: DocumentListViewService,
private meta: Meta
) {
}
) { }
versionString = `${environment.appTitle} ${environment.version}`
@@ -74,36 +75,40 @@ export class AppFrameComponent implements OnInit {
search() {
this.closeMenu()
this.router.navigate(['search'], {queryParams: {query: this.searchField.value}})
this.list.quickFilter([{rule_type: FILTER_FULLTEXT_QUERY, value: this.searchField.value}])
}
closeDocument(d: PaperlessDocument) {
this.closeMenu()
this.openDocumentsService.closeDocument(d)
let route = this.activatedRoute.snapshot
while (route.firstChild) {
route = route.firstChild
}
if (route.component == DocumentDetailComponent && route.params['id'] == d.id) {
this.router.navigate([""])
}
this.openDocumentsService.closeDocument(d).pipe(first()).subscribe(confirmed => {
if (confirmed) {
this.closeMenu()
let route = this.activatedRoute.snapshot
while (route.firstChild) {
route = route.firstChild
}
if (route.component == DocumentDetailComponent && route.params['id'] == d.id) {
this.router.navigate([""])
}
}
})
}
closeAll() {
this.closeMenu()
this.openDocumentsService.closeAll()
// user may need to confirm losing unsaved changes
this.openDocumentsService.closeAll().pipe(first()).subscribe(confirmed => {
if (confirmed) {
this.closeMenu()
let route = this.activatedRoute.snapshot
while (route.firstChild) {
route = route.firstChild
}
if (route.component == DocumentDetailComponent) {
this.router.navigate([""])
}
}
ngOnInit() {
// TODO: is there a better way to do this?
let route = this.activatedRoute
while (route.firstChild) {
route = route.firstChild
}
if (route.component === DocumentDetailComponent) {
this.router.navigate([""])
}
}
})
}
get displayName() {

View File

@@ -1,7 +1,6 @@
<div class="modal-header">
<h4 class="modal-title" id="modal-basic-title">{{title}}</h4>
<button type="button" class="close" aria-label="Close" (click)="cancelClicked()">
<span aria-hidden="true">&times;</span>
<button type="button" class="btn-close" aria-label="Close" (click)="cancel()">
</button>
</div>
<div class="modal-body">
@@ -9,8 +8,8 @@
<p *ngIf="message">{{message}}</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-dark" (click)="cancelClicked()" [disabled]="!buttonsEnabled" i18n>Cancel</button>
<button type="button" class="btn" [class]="btnClass" (click)="confirmClicked.emit()" [disabled]="!confirmButtonEnabled || !buttonsEnabled">
<button type="button" class="btn btn-outline-dark" (click)="cancel()" [disabled]="!buttonsEnabled" i18n>Cancel</button>
<button type="button" class="btn" [class]="btnClass" (click)="confirm()" [disabled]="!confirmButtonEnabled || !buttonsEnabled">
{{btnCaption}}
<span *ngIf="!confirmButtonEnabled"> ({{seconds}})</span>
</button>

View File

@@ -1,12 +1,13 @@
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
import { Subject } from 'rxjs';
@Component({
selector: 'app-confirm-dialog',
templateUrl: './confirm-dialog.component.html',
styleUrls: ['./confirm-dialog.component.scss']
})
export class ConfirmDialogComponent implements OnInit {
export class ConfirmDialogComponent {
constructor(public activeModal: NgbActiveModal) { }
@@ -30,10 +31,12 @@ export class ConfirmDialogComponent implements OnInit {
@Input()
buttonsEnabled = true
confirmButtonEnabled = true
seconds = 0
confirmSubject: Subject<boolean>
delayConfirm(seconds: number) {
this.confirmButtonEnabled = false
this.seconds = seconds
@@ -46,10 +49,15 @@ export class ConfirmDialogComponent implements OnInit {
}, 1000)
}
ngOnInit(): void {
}
cancelClicked() {
cancel() {
this.confirmSubject?.next(false)
this.confirmSubject?.complete()
this.activeModal.close()
}
confirm() {
this.confirmClicked.emit()
this.confirmSubject?.next(true)
this.confirmSubject?.complete()
}
}

View File

@@ -4,7 +4,7 @@
</button>
<div class="dropdown-menu date-dropdown shadow pt-0" ngbDropdownMenu attr.aria-labelledby="dropdown{{title}}">
<div class="list-group list-group-flush">
<button *ngFor="let qf of quickFilters" class="list-group-item small list-goup list-group-item-action d-flex p-2 pl-3" role="menuitem" (click)="setDateQuickFilter(qf.id)">
<button *ngFor="let qf of quickFilters" class="list-group-item small list-goup list-group-item-action d-flex p-2 ps-3" role="menuitem" (click)="setDateQuickFilter(qf.id)">
{{qf.name}}
</button>
<div class="list-group-item d-flex flex-column align-items-start" role="menuitem">
@@ -22,13 +22,11 @@
<div class="input-group input-group-sm">
<input class="form-control" [placeholder]="datePlaceHolder" (dateSelect)="onChangeDebounce()" (change)="onChangeDebounce()"
[(ngModel)]="dateAfter" ngbDatepicker #dateAfterPicker="ngbDatepicker">
<div class="input-group-append">
<button class="btn btn-outline-secondary" (click)="dateAfterPicker.toggle()" type="button">
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-calendar" viewBox="0 0 16 16">
<path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/>
</svg>
</button>
</div>
<button class="btn btn-outline-secondary" (click)="dateAfterPicker.toggle()" type="button">
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-calendar" viewBox="0 0 16 16">
<path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/>
</svg>
</button>
</div>
</div>
@@ -47,15 +45,13 @@
<div class="input-group input-group-sm">
<input class="form-control" [placeholder]="datePlaceHolder" (dateSelect)="onChangeDebounce()" (change)="onChangeDebounce()"
[(ngModel)]="dateBefore" ngbDatepicker #dateBeforePicker="ngbDatepicker">
<div class="input-group-append">
<button class="btn btn-outline-secondary" (click)="dateBeforePicker.toggle()" type="button">
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-calendar" viewBox="0 0 16 16">
<path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/>
</svg>
</button>
</div>
<button class="btn btn-outline-secondary" (click)="dateBeforePicker.toggle()" type="button">
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-calendar" viewBox="0 0 16 16">
<path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/>
</svg>
</button>
</div>
</div>
</div>
</div>

View File

@@ -5,13 +5,26 @@
</svg>
<div class="d-none d-sm-inline">&nbsp;{{title}}</div>
<ng-container *ngIf="!editing && selectionModel.selectionSize() > 0">
<div class="badge bg-secondary text-light rounded-pill badge-corner">
{{selectionModel.selectionSize()}}
<div *ngIf="multiple" class="position-absolute top-0 start-100 translate-middle badge bg-secondary border border-light text-light rounded-pill">
{{selectionModel.selectionSize()}}<span class="visually-hidden">selected</span>
</div>
<div *ngIf="!multiple" class="position-absolute top-0 start-100 p-2 translate-middle badge bg-secondary border border-light rounded-circle">
<span class="visually-hidden">selected</span>
</div>
</ng-container>
</button>
<div class="dropdown-menu py-0 shadow" ngbDropdownMenu attr.aria-labelledby="dropdown{{title}}">
<div class="list-group list-group-flush">
<div *ngIf="!editing && multiple" class="list-group-item d-flex">
<div class="btn-group btn-group-xs btn-group-toggle flex-fill" ngbRadioGroup [(ngModel)]="selectionModel.logicalOperator" (change)="selectionModel.toggleOperator()" [disabled]="!operatorToggleEnabled">
<label ngbButtonLabel class="btn btn-outline-primary">
<input ngbButton type="radio" class="btn-check" name="logicalOperator" value="and"> All
</label>
<label ngbButtonLabel class="btn btn-outline-primary">
<input ngbButton type="radio" class="btn-check" name="logicalOperator" value="or"> Any
</label>
</div>
</div>
<div class="list-group-item">
<div class="input-group input-group-sm">
<input class="form-control" type="text" [(ngModel)]="filterText" [placeholder]="filterPlaceholder" (keyup.enter)="listFilterEnter()" #listFilterTextInput>
@@ -19,15 +32,18 @@
</div>
<div *ngIf="selectionModel.items" class="items">
<ng-container *ngFor="let item of selectionModel.itemsSorted | filter: filterText">
<app-toggleable-dropdown-button *ngIf="allowSelectNone || item.id" [item]="item" [state]="selectionModel.get(item.id)" (toggle)="selectionModel.toggle(item.id)"></app-toggleable-dropdown-button>
<app-toggleable-dropdown-button *ngIf="allowSelectNone || item.id" [item]="item" [state]="selectionModel.get(item.id)" (toggle)="selectionModel.toggle(item.id)" (exclude)="excludeClicked(item.id)"></app-toggleable-dropdown-button>
</ng-container>
</div>
<button *ngIf="editing" class="list-group-item list-group-item-action bg-light" (click)="applyClicked()" [disabled]="!selectionModel.isDirty()">
<small class="ml-1" [ngClass]="{'font-weight-bold': selectionModel.isDirty()}" i18n>Apply</small>
<button *ngIf="editing" class="list-group-item list-group-item-action bg-light" (click)="applyClicked()" [disabled]="!modelIsDirty">
<small class="ms-2" [ngClass]="{'fw-bold': modelIsDirty}" i18n>Apply</small>
<svg width="1.5em" height="1em" viewBox="0 0 16 16" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#arrow-right" />
</svg>
</button>
<div *ngIf="!editing && multiple" class="list-group-item list-group-item-note pt-1 pb-2">
<small i18n>Click again to exclude items.</small>
</div>
</div>
</div>
</div>

View File

@@ -1,3 +1,5 @@
@import "/src/theme";
.badge-corner {
position: absolute;
top: -8px;
@@ -9,6 +11,53 @@
.items {
max-height: 400px;
overflow-y: scroll;
overflow-y: auto;
}
button:disabled {
opacity: 0.2;
}
}
.btn-group-xs {
> .btn {
padding: 0.2rem 0.25rem;
font-size: 0.675rem;
line-height: 1.2;
border-radius: 0.15rem;
}
> .btn:not(:first-child) {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
> .btn:not(:last-child) {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
}
.btn-group > label.disabled {
filter: brightness(0.5);
&.active {
background-color: lighten($primary, 30%);
}
}
small > svg {
margin-top: -2px;
}
.list-group-item-note {
line-height: 1;
small {
font-size: 65%;
}
}
.show .btn-outline-primary {
color: #fff;
}

View File

@@ -15,6 +15,8 @@ export class FilterableDropdownSelectionModel {
changed = new Subject<FilterableDropdownSelectionModel>()
multiple = false
private _logicalOperator = 'and'
temporaryLogicalOperator = this._logicalOperator
items: MatchingModel[] = []
@@ -43,6 +45,10 @@ export class FilterableDropdownSelectionModel {
return this.items.filter(i => this.temporarySelectionStates.get(i.id) == ToggleableItemState.Selected)
}
getExcludedItems() {
return this.items.filter(i => this.temporarySelectionStates.get(i.id) == ToggleableItemState.Excluded)
}
set(id: number, state: ToggleableItemState, fireEvent = true) {
if (state == ToggleableItemState.NotSelected) {
this.temporarySelectionStates.delete(id)
@@ -56,9 +62,9 @@ export class FilterableDropdownSelectionModel {
toggle(id: number, fireEvent = true) {
let state = this.temporarySelectionStates.get(id)
if (state == null || state != ToggleableItemState.Selected) {
if (state == null || (state != ToggleableItemState.Selected && state != ToggleableItemState.Excluded)) {
this.temporarySelectionStates.set(id, ToggleableItemState.Selected)
} else if (state == ToggleableItemState.Selected) {
} else if (state == ToggleableItemState.Selected || state == ToggleableItemState.Excluded) {
this.temporarySelectionStates.delete(id)
}
@@ -83,13 +89,46 @@ export class FilterableDropdownSelectionModel {
if (fireEvent) {
this.changed.next(this)
}
}
exclude(id: number, fireEvent:boolean = true) {
let state = this.temporarySelectionStates.get(id)
if (state == null || state != ToggleableItemState.Excluded) {
this.temporarySelectionStates.set(id, ToggleableItemState.Excluded)
this.temporaryLogicalOperator = this._logicalOperator = 'and'
} else if (state == ToggleableItemState.Excluded) {
this.temporarySelectionStates.delete(id)
}
if (!this.multiple) {
for (let key of this.temporarySelectionStates.keys()) {
if (key != id) {
this.temporarySelectionStates.delete(key)
}
}
}
if (fireEvent) {
this.changed.next(this)
}
}
private getNonTemporary(id: number) {
return this.selectionStates.get(id) || ToggleableItemState.NotSelected
}
get logicalOperator(): string {
return this.temporaryLogicalOperator
}
set logicalOperator(operator: string) {
this.temporaryLogicalOperator = operator
}
toggleOperator() {
this.changed.next(this)
}
get(id: number) {
return this.temporarySelectionStates.get(id) || ToggleableItemState.NotSelected
}
@@ -100,6 +139,7 @@ export class FilterableDropdownSelectionModel {
clear(fireEvent = true) {
this.temporarySelectionStates.clear()
this.temporaryLogicalOperator = this._logicalOperator = 'and'
if (fireEvent) {
this.changed.next(this)
}
@@ -110,6 +150,8 @@ export class FilterableDropdownSelectionModel {
return true
} else if (!Array.from(this.selectionStates.keys()).every(id => this.selectionStates.get(id) == this.temporarySelectionStates.get(id))) {
return true
} else if (this.temporaryLogicalOperator !== this._logicalOperator) {
return true
} else {
return false
}
@@ -129,6 +171,7 @@ export class FilterableDropdownSelectionModel {
this.temporarySelectionStates.forEach((value, key) => {
this.selectionStates.set(key, value)
})
this._logicalOperator = this.temporaryLogicalOperator
}
reset() {
@@ -228,8 +271,17 @@ export class FilterableDropdownComponent {
@Output()
open = new EventEmitter()
get operatorToggleEnabled(): boolean {
return this.selectionModel.selectionSize() > 1 && this.selectionModel.getExcludedItems().length == 0
}
modelIsDirty: boolean = false
constructor(private filterPipe: FilterPipe) {
this.selectionModel = new FilterableDropdownSelectionModel()
this.selectionModelChange.subscribe(updatedModel => {
this.modelIsDirty = updatedModel.isDirty()
})
}
applyClicked() {
@@ -269,4 +321,12 @@ export class FilterableDropdownComponent {
}
}
}
excludeClicked(itemID: number) {
if (this.editing) {
this.selectionModel.toggle(itemID)
} else {
this.selectionModel.exclude(itemID)
}
}
}

View File

@@ -1,5 +1,5 @@
<button class="list-group-item list-group-item-action d-flex align-items-center p-2 border-top-0 border-left-0 border-right-0 border-bottom" role="menuitem" (click)="toggleItem()">
<div class="selected-icon mr-1">
<button class="list-group-item list-group-item-action d-flex align-items-center p-2 border-top-0 border-start-0 border-end-0 border-bottom" role="menuitem" (click)="toggleItem($event)">
<div class="selected-icon me-1">
<ng-container *ngIf="isChecked()">
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" class="bi bi-check" viewBox="0 0 16 16">
<path d="M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z"/>
@@ -10,11 +10,15 @@
<path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/>
</svg>
</ng-container>
<ng-container *ngIf="isExcluded()">
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" class="bi bi-x" viewBox="0 0 16 16">
<path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/>
</svg>
</ng-container>
</div>
<div class="mr-1">
<app-tag *ngIf="isTag; else displayName" [tag]="item" [clickable]="true" linkTitle="Filter by tag"></app-tag>
<div class="me-1">
<app-tag *ngIf="isTag; else displayName" [tag]="item" [clickable]="false"></app-tag>
<ng-template #displayName><small>{{item.name}}</small></ng-template>
</div>
<div class="badge badge-light rounded-pill ml-auto mr-1">{{item.document_count}}</div>
<div class="badge badge-light rounded-pill ms-auto me-1">{{item.document_count}}</div>
</button>

View File

@@ -1,16 +1,11 @@
import { Component, EventEmitter, Input, Output, OnInit } from '@angular/core';
import { MatchingModel } from 'src/app/data/matching-model';
export interface ToggleableItem {
item: MatchingModel,
state: ToggleableItemState,
count: number
}
export enum ToggleableItemState {
NotSelected = 0,
Selected = 1,
PartiallySelected = 2
PartiallySelected = 2,
Excluded = 3
}
@Component({
@@ -32,12 +27,19 @@ export class ToggleableDropdownButtonComponent {
@Output()
toggle = new EventEmitter()
@Output()
exclude = new EventEmitter()
get isTag(): boolean {
return 'is_inbox_tag' in this.item
}
toggleItem(): void {
this.toggle.emit()
toggleItem(event: MouseEvent): void {
if (this.state == ToggleableItemState.Selected) {
this.exclude.emit()
} else {
this.toggle.emit()
}
}
isChecked() {
@@ -48,4 +50,7 @@ export class ToggleableDropdownButtonComponent {
return this.state == ToggleableItemState.PartiallySelected
}
isExcluded() {
return this.state == ToggleableItemState.Excluded
}
}

View File

@@ -11,7 +11,7 @@ export class AbstractInputComponent<T> implements OnInit, ControlValueAccessor {
constructor() { }
onChange = (newValue: T) => {};
onTouched = () => {};
writeValue(newValue: any): void {

Some files were not shown because too many files have changed in this diff Show More