diff --git a/docs/setup.rst b/docs/setup.rst
index 5a38c3241..ed7f84885 100644
--- a/docs/setup.rst
+++ b/docs/setup.rst
@@ -154,7 +154,7 @@ Install Paperless from Docker Hub
You can use any settings from the file ``paperless.conf.example`` in this file.
Have a look at :ref:`configuration` to see whats available.
-
+
.. caution::
Certain file systems such as NFS network shares don't support file system
@@ -194,7 +194,7 @@ Build the docker image yourself
.. code:: shell-session
git clone https://github.com/jonaswinkler/paperless-ng
-
+
The master branch always reflects the latest stable version.
2. Copy one of the ``docker-compose.*.yml`` to ``docker-compose.yml``,
@@ -203,11 +203,11 @@ Build the docker image yourself
3. Follow steps 2 to 7 of :ref:`setup-docker_hub`. When asked to run
``docker-compose up -d`` to start the containers, do
-
+
.. code:: shell-session
$ docker-compose build
-
+
before that to build the image.
.. _setup-bare_metal:
@@ -225,7 +225,7 @@ writing. Windows is not and will never be supported.
* ``python3-pip``, optionally ``pipenv`` for package installation
* ``python3-dev``
- * ``gettext`` for localization
+ * ``gettext`` for compiling interface translations
* ``fonts-liberation`` for generating thumbnails for plain text files
* ``imagemagick`` >= 6 for PDF conversion
* ``optipng`` for optimizing thumbnails
@@ -270,7 +270,7 @@ writing. Windows is not and will never be supported.
paperless stores its data. If you like, you can point both to the same directory.
* ``PAPERLESS_SECRET_KEY`` should be a random sequence of characters. It's used for authentication. Failure
to do so allows third parties to forge authentication credentials.
-
+
Many more adjustments can be made to paperless, especially the OCR part. The following options are recommended
for everyone:
@@ -279,7 +279,7 @@ writing. Windows is not and will never be supported.
6. Setup permissions. Create a system users under which you wish to run paperless. Ensure that these directories exist
and that the user has write permissions to the following directories
-
+
* ``/opt/paperless/media``
* ``/opt/paperless/data``
* ``/opt/paperless/consume``
@@ -295,10 +295,10 @@ writing. Windows is not and will never be supported.
# This collects static files from paperless and django.
python3 manage.py collectstatic --clear --no-input
-
+
# This creates the database schema.
python3 manage.py migrate
-
+
# This creates the translation files for paperless.
python3 manage.py compilemessages
@@ -311,7 +311,7 @@ writing. Windows is not and will never be supported.
# This collects static files from paperless and django.
python3 manage.py runserver
-
+
and pointing your browser to http://localhost:8000/.
.. warning::
@@ -364,13 +364,13 @@ writing. Windows is not and will never be supported.
.. code::
-
+
to
.. code::
-
+
13. Optional: Install the `jbig2enc `_
encoder. This will reduce the size of generated PDF documents. You'll most likely need
to compile this by yourself, because this software has been patented until around 2017 and
@@ -442,7 +442,7 @@ Migration to paperless-ng is then performed in a few simple steps:
.. code:: shell-session
$ docker-compose run --rm webserver document_index reindex
-
+
This will migrate your database and create the search index. After that,
paperless will take care of maintaining the index by itself.
@@ -503,9 +503,9 @@ management commands as below.
$ cd /path/to/paperless
$ docker-compose run --rm webserver /bin/bash
-
+
This will launch the container and initialize the PostgreSQL database.
-
+
b) Without docker, open a shell in your virtual environment, switch to
the ``src`` directory and create the database schema:
@@ -515,7 +515,7 @@ management commands as below.
$ pipenv shell
$ cd src
$ python3 manage.py migrate
-
+
This will not copy any data yet.
4. Dump your data from SQLite:
@@ -523,7 +523,7 @@ management commands as below.
.. code:: shell-session
$ python3 manage.py dumpdata --database=sqlite --exclude=contenttypes --exclude=auth.Permission > data.json
-
+
5. Load your data into PostgreSQL:
.. code:: shell-session
@@ -574,7 +574,7 @@ as well.
Considerations for less powerful devices
########################################
-Paperless runs on Raspberry Pi. However, some things are rather slow on the Pi and
+Paperless runs on Raspberry Pi. However, some things are rather slow on the Pi and
configuring some options in paperless can help improve performance immensely:
* Stick with SQLite to save some resources.
@@ -596,15 +596,15 @@ configuring some options in paperless can help improve performance immensely:
For details, refer to :ref:`configuration`.
.. note::
-
+
Updating the :ref:`automatic matching algorithm `
takes quite a bit of time. However, the update mechanism checks if your
- data has changed before doing the heavy lifting. If you experience the
+ data has changed before doing the heavy lifting. If you experience the
algorithm taking too much cpu time, consider changing the schedule in the
admin interface to daily. You can also manually invoke the task
by changing the date and time of the next run to today/now.
- The actual matching of the algorithm is fast and works on Raspberry Pi as
+ The actual matching of the algorithm is fast and works on Raspberry Pi as
well as on any other device.
.. _redis: https://redis.io/
diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html
index a0e833c98..b09491683 100644
--- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html
+++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html
@@ -20,7 +20,7 @@
diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts
index b51923c27..3481b1227 100644
--- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts
+++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts
@@ -19,8 +19,13 @@ export class FilterableDropdownSelectionModel {
items: MatchingModel[] = []
get itemsSorted(): MatchingModel[] {
+ // TODO: this is getting called very often
return this.items.sort((a,b) => {
- if (this.getNonTemporary(a.id) == ToggleableItemState.NotSelected && this.getNonTemporary(b.id) != ToggleableItemState.NotSelected) {
+ if (a.id == null && b.id != null) {
+ return -1
+ } else if (a.id != null && b.id == null) {
+ return 1
+ } else if (this.getNonTemporary(a.id) == ToggleableItemState.NotSelected && this.getNonTemporary(b.id) != ToggleableItemState.NotSelected) {
return 1
} else if (this.getNonTemporary(a.id) != ToggleableItemState.NotSelected && this.getNonTemporary(b.id) == ToggleableItemState.NotSelected) {
return -1
diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html
index 02a51238d..415f9d459 100644
--- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html
+++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html
@@ -14,17 +14,20 @@
[(selectionModel)]="tagSelectionModel"
(selectionModelChange)="updateRules()"
[multiple]="true"
+ (open)="onTagsDropdownOpen()"
[allowSelectNone]="true">
, 2021\n"
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/paperless/teams/115905/nl_NL/)\n"
@@ -51,7 +51,7 @@ msgid "Automatic"
msgstr "Automatisch"
#: documents/models.py:41 documents/models.py:354 paperless_mail/models.py:25
-#: paperless_mail/models.py:111
+#: paperless_mail/models.py:109
msgid "name"
msgstr "naam"
@@ -347,6 +347,46 @@ msgstr "filterregel"
msgid "filter rules"
msgstr "filterregels"
+#: documents/templates/index.html:20
+msgid "Paperless-ng is loading..."
+msgstr "Paperless-ng is aan het laden..."
+
+#: documents/templates/registration/logged_out.html:13
+msgid "Paperless-ng signed out"
+msgstr "Paperless-ng - afmelden"
+
+#: documents/templates/registration/logged_out.html:41
+msgid "You have been successfully logged out. Bye!"
+msgstr "Je bent nu afgemeld. Tot later!"
+
+#: documents/templates/registration/logged_out.html:42
+msgid "Sign in again"
+msgstr "Meld je opnieuw aan"
+
+#: documents/templates/registration/login.html:13
+msgid "Paperless-ng sign in"
+msgstr "Paperless-ng - aanmelden"
+
+#: documents/templates/registration/login.html:42
+msgid "Please sign in."
+msgstr "Gelieve aan te melden."
+
+#: documents/templates/registration/login.html:45
+msgid "Your username and password didn't match. Please try again."
+msgstr "Je gebruikersnaam en wachtwoord komen niet overeen. Probeer opnieuw."
+
+#: documents/templates/registration/login.html:48
+msgid "Username"
+msgstr "Gebruikersnaam"
+
+#: documents/templates/registration/login.html:49
+msgid "Password"
+msgstr "Wachtwoord"
+
+#: documents/templates/registration/login.html:54
+msgid "Sign in"
+msgstr "Aanmelden"
+
#: paperless/settings.py:268
msgid "English"
msgstr "Engels"
@@ -469,79 +509,79 @@ msgstr "email-regels"
msgid "Only process attachments."
msgstr "Alleen bijlagen verwerken"
-#: paperless_mail/models.py:70
+#: paperless_mail/models.py:68
msgid "Process all files, including 'inline' attachments."
msgstr "Verwerk alle bestanden, inclusief 'inline' bijlagen."
-#: paperless_mail/models.py:80
+#: paperless_mail/models.py:78
msgid "Mark as read, don't process read mails"
msgstr "Markeer als gelezen, verwerk geen gelezen mails"
-#: paperless_mail/models.py:81
+#: paperless_mail/models.py:79
msgid "Flag the mail, don't process flagged mails"
msgstr "Markeer de mail, verwerk geen mails met markering"
-#: paperless_mail/models.py:82
+#: paperless_mail/models.py:80
msgid "Move to specified folder"
msgstr "Verplaats naar gegeven map"
-#: paperless_mail/models.py:83
+#: paperless_mail/models.py:81
msgid "Delete"
msgstr "Verwijder"
-#: paperless_mail/models.py:90
+#: paperless_mail/models.py:88
msgid "Use subject as title"
msgstr "Gebruik onderwerp als titel"
-#: paperless_mail/models.py:91
+#: paperless_mail/models.py:89
msgid "Use attachment filename as title"
msgstr "Gebruik naam van bijlage als titel"
-#: paperless_mail/models.py:101
+#: paperless_mail/models.py:99
msgid "Do not assign a correspondent"
msgstr "Wijs geen correspondent toe"
-#: paperless_mail/models.py:103
+#: paperless_mail/models.py:101
msgid "Use mail address"
msgstr "Gebruik het email-adres"
-#: paperless_mail/models.py:105
+#: paperless_mail/models.py:103
msgid "Use name (or mail address if not available)"
msgstr "Gebruik de naam, en anders het email-adres"
-#: paperless_mail/models.py:107
+#: paperless_mail/models.py:105
msgid "Use correspondent selected below"
msgstr "Gebruik de hieronder aangeduide correspondent"
-#: paperless_mail/models.py:115
+#: paperless_mail/models.py:113
msgid "order"
msgstr "volgorde"
-#: paperless_mail/models.py:122
+#: paperless_mail/models.py:120
msgid "account"
msgstr "account"
-#: paperless_mail/models.py:126
+#: paperless_mail/models.py:124
msgid "folder"
msgstr "map"
-#: paperless_mail/models.py:130
+#: paperless_mail/models.py:128
msgid "filter from"
msgstr "filter afzender"
-#: paperless_mail/models.py:133
+#: paperless_mail/models.py:131
msgid "filter subject"
msgstr "filter onderwerp"
-#: paperless_mail/models.py:136
+#: paperless_mail/models.py:134
msgid "filter body"
msgstr "filter inhoud"
-#: paperless_mail/models.py:140
+#: paperless_mail/models.py:138
msgid "filter attachment filename"
msgstr "Filter bestandsnaam van bijlage"
-#: paperless_mail/models.py:142
+#: paperless_mail/models.py:140
msgid ""
"Only consume documents which entirely match this filename if specified. "
"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive."
@@ -550,19 +590,19 @@ msgstr ""
" kunt jokertekens gebruiken, zoals *.pdf of *factuur*. Dit is niet "
"hoofdlettergevoelig."
-#: paperless_mail/models.py:148
+#: paperless_mail/models.py:146
msgid "maximum age"
msgstr "Maximale leeftijd"
-#: paperless_mail/models.py:150
+#: paperless_mail/models.py:148
msgid "Specified in days."
msgstr "Aangegeven in dagen"
-#: paperless_mail/models.py:153
+#: paperless_mail/models.py:151
msgid "attachment type"
msgstr "Type bijlage"
-#: paperless_mail/models.py:156
+#: paperless_mail/models.py:154
msgid ""
"Inline attachments include embedded images, so it's best to combine this "
"option with a filename filter."
@@ -570,15 +610,15 @@ msgstr ""
"\"Inline\" bijlagen bevatten vaak ook afbeeldingen. In dit geval valt het "
"aan te raden om ook een filter voor de bestandsnaam op te geven."
-#: paperless_mail/models.py:161
+#: paperless_mail/models.py:159
msgid "action"
msgstr "actie"
-#: paperless_mail/models.py:167
+#: paperless_mail/models.py:165
msgid "action parameter"
msgstr "actie parameters"
-#: paperless_mail/models.py:169
+#: paperless_mail/models.py:167
msgid ""
"Additional parameter for the action selected above, i.e., the target folder "
"of the move to folder action."
@@ -586,22 +626,22 @@ msgstr ""
"Extra parameters voor de hierboven gekozen actie, met andere woorden: de "
"bestemmingsmap voor de verplaats-actie."
-#: paperless_mail/models.py:175
+#: paperless_mail/models.py:173
msgid "assign title from"
msgstr "wijs titel toe van"
-#: paperless_mail/models.py:185
+#: paperless_mail/models.py:183
msgid "assign this tag"
msgstr "wijs dit etiket toe"
-#: paperless_mail/models.py:193
+#: paperless_mail/models.py:191
msgid "assign this document type"
msgstr "wijs dit documenttype toe"
-#: paperless_mail/models.py:197
+#: paperless_mail/models.py:195
msgid "assign correspondent from"
msgstr "wijs correspondent toe van"
-#: paperless_mail/models.py:207
+#: paperless_mail/models.py:205
msgid "assign this correspondent"
msgstr "wijs deze correspondent toe"
diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py
index e848af28a..e1916c1dd 100644
--- a/src/paperless_mail/mail.py
+++ b/src/paperless_mail/mail.py
@@ -199,7 +199,7 @@ class MailAccountHandler(LoggingMixin):
try:
messages = M.fetch(criteria=AND(**criterias),
- mark_seen=False)
+ mark_seen=False, charset='UTF-8')
except Exception:
raise MailError(
f"Rule {rule}: Error while fetching folder {rule.folder}")