Index: Add experimental EPS and SVG vector graphics support #1177 #2207

Signed-off-by: Michael Mayer <michael@photoprism.app>
This commit is contained in:
Michael Mayer 2023-02-11 20:18:04 +01:00
parent 5475c43d49
commit 97c9962053
158 changed files with 10406 additions and 19548 deletions

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"

View file

@ -2498,9 +2498,9 @@
"integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ=="
},
"node_modules/@vvo/tzdb": {
"version": "6.94.0",
"resolved": "https://registry.npmjs.org/@vvo/tzdb/-/tzdb-6.94.0.tgz",
"integrity": "sha512-HgDlapSOeUxSjyOWpo6TyllR8XHxDEoO25G46zjaQHtGCjEpXkIdkwEygwe9x2f62FDBFiN3ahQRHfr42yhsnA=="
"version": "6.96.0",
"resolved": "https://registry.npmjs.org/@vvo/tzdb/-/tzdb-6.96.0.tgz",
"integrity": "sha512-qZQLMwDIYG7OxSi71H52fhYOfZVjXrKATACoQVv2knjUy2d9t1/yqqu4o1f6lF+p0dakVLETdDONGsbvWM+r7A=="
},
"node_modules/@webassemblyjs/ast": {
"version": "1.11.1",
@ -4408,9 +4408,9 @@
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
},
"node_modules/define-properties": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
"integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
"integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
"dependencies": {
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
@ -4626,9 +4626,9 @@
}
},
"node_modules/electron-to-chromium": {
"version": "1.4.292",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.292.tgz",
"integrity": "sha512-ESWOSyJy5odDlE8wvh5NNAMORv4r6assPwIPGHEMWrWD0SONXcG/xT+9aD9CQyeRwyYDPo6dJT4Bbeg5uevVQQ=="
"version": "1.4.295",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz",
"integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw=="
},
"node_modules/emoji-regex": {
"version": "8.0.0",
@ -4833,9 +4833,9 @@
}
},
"node_modules/eslint": {
"version": "8.33.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz",
"integrity": "sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==",
"version": "8.34.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz",
"integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==",
"dependencies": {
"@eslint/eslintrc": "^1.4.1",
"@humanwhocodes/config-array": "^0.11.8",
@ -7047,11 +7047,11 @@
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
},
"node_modules/internal-slot": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz",
"integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==",
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
"integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
"dependencies": {
"get-intrinsic": "^1.1.3",
"get-intrinsic": "^1.2.0",
"has": "^1.0.3",
"side-channel": "^1.0.4"
},
@ -8371,9 +8371,9 @@
}
},
"node_modules/minimist": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
"integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}

View file

@ -105,8 +105,9 @@
@click.stop.prevent="onOpen($event, index, !isSharedView, photo.Type === 'live')">
<i v-if="photo.Type === 'raw'" class="action-raw" :title="$gettext('RAW')">photo_camera</i>
<i v-if="photo.Type === 'live'" class="action-live" :title="$gettext('Live')"><icon-live-photo/></i>
<i v-if="photo.Type === 'animated'" class="action-animated" :title="$gettext('Animated')">gif</i>
<i v-if="photo.Type === 'video'" class="action-play" :title="$gettext('Video')">play_arrow</i>
<i v-if="photo.Type === 'animated'" class="action-animated" :title="$gettext('Animated')">gif</i>
<i v-if="photo.Type === 'vector'" class="action-vector" :title="$gettext('Vector')">draw</i>
<i v-if="photo.Type === 'image'" class="action-stack" :title="$gettext('Stack')">burst_mode</i>
</button>
@ -207,6 +208,11 @@
<i>gif_box</i>
{{ photo.getVideoInfo() }}
</button>
<button v-else-if="photo.Type === 'vector'" :title="$gettext('Vector')"
@click.exact="openPhoto(index)">
<i>draw</i>
{{ photo.getVectorInfo() }}
</button>
<button v-else :title="$gettext('Camera')" class="action-camera-edit"
:data-uid="photo.UID" @click.exact="editPhoto(index)">
<i>photo_camera</i>

View file

@ -75,6 +75,7 @@
@click.stop.prevent="openPhoto(index, false, photo.Type === 'live')">
<i v-if="photo.Type === 'live'" class="action-live" :title="$gettext('Live')"><icon-live-photo/></i>
<i v-if="photo.Type === 'animated'" class="action-animated" :title="$gettext('Animated')">gif</i>
<i v-if="photo.Type === 'vector'" class="action-vector" :title="$gettext('Vector')">draw</i>
<i v-if="photo.Type === 'video'" class="action-play" :title="$gettext('Video')">play_arrow</i>
</button>
</div>

View file

@ -71,11 +71,12 @@
@touchend.stop.prevent="onOpen($event, index, !isSharedView, photo.Type === 'live')"
@touchmove.stop.prevent
@click.stop.prevent="onOpen($event, index, !isSharedView, photo.Type === 'live')">
<i v-if="photo.Type === 'raw'" color="white" class="action-raw" :title="$gettext('RAW')">photo_camera</i>
<i v-if="photo.Type === 'live'" color="white" class="action-live" :title="$gettext('Live')"><icon-live-photo/></i>
<i v-if="photo.Type === 'animated'" color="white" class="action-animated" :title="$gettext('Animated')">gif</i>
<i v-if="photo.Type === 'video'" color="white" class="action-play" :title="$gettext('Video')">play_arrow</i>
<i v-if="photo.Type === 'image'" color="white" class="action-stack" :title="$gettext('Stack')">burst_mode</i>
<i v-if="photo.Type === 'raw'" class="action-raw" :title="$gettext('RAW')">photo_camera</i>
<i v-if="photo.Type === 'live'" class="action-live" :title="$gettext('Live')"><icon-live-photo/></i>
<i v-if="photo.Type === 'video'" class="action-play" :title="$gettext('Video')">play_arrow</i>
<i v-if="photo.Type === 'animated'" class="action-animated" :title="$gettext('Animated')">gif</i>
<i v-if="photo.Type === 'vector'" class="action-vector" :title="$gettext('Vector')">draw</i>
<i v-if="photo.Type === 'image'" class="action-stack" :title="$gettext('Stack')">burst_mode</i>
</button>
<button v-if="photo.Type === 'image' && selectMode"

View file

@ -249,7 +249,7 @@ body.chrome #photoprism .search-results .result {
#photoprism .mosaic-view .result.image i,
#photoprism .list-view .result .image i,
#photoprism .cards-view .result .image i {
color: white;
color: #c0c0c0f5;
font-size: 24px;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;

View file

@ -45,7 +45,7 @@
@click.stop.prevent="downloadFile(file)">
<translate>Download</translate>
</v-btn>
<v-btn v-if="features.edit && file.FileType === 'jpg' && !file.Error && !file.Primary" small depressed dark
<v-btn v-if="features.edit && (file.FileType === 'jpg' || file.FileType === 'png') && !file.Error && !file.Primary" small depressed dark
color="primary-button"
class="btn-action action-primary"
@click.stop.prevent="primaryFile(file)">

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -39,15 +39,15 @@ msgstr ""
msgid "%{n} pictures found"
msgstr ""
#: src/options/options.js:372
#: src/options/options.js:383
msgid "1 hour"
msgstr ""
#: src/options/options.js:374
#: src/options/options.js:385
msgid "12 hours"
msgstr ""
#: src/options/options.js:373
#: src/options/options.js:384
msgid "4 hours"
msgstr ""
@ -126,37 +126,35 @@ msgstr ""
msgid "Advanced"
msgstr ""
#: src/options/options.js:382
#: src/options/options.js:393
msgid "After 1 day"
msgstr ""
#: src/options/options.js:383
#: src/options/options.js:394
msgid "After 3 days"
msgstr ""
#: src/options/options.js:384
#: src/options/options.js:395
msgid "After 7 days"
msgstr ""
#: src/options/options.js:386
#: src/options/options.js:397
msgid "After one month"
msgstr ""
#: src/options/options.js:388
#: src/options/options.js:399
msgid "After one year"
msgstr ""
#: src/page/albums.vue:59 src/page/albums.vue:1
msgid ""
"After selecting pictures from search results, you can add them to an album "
"using the context menu."
msgid "After selecting pictures from search results, you can add them to an album using the context menu."
msgstr ""
#: src/options/options.js:387
#: src/options/options.js:398
msgid "After two months"
msgstr ""
#: src/options/options.js:385
#: src/options/options.js:396
msgid "After two weeks"
msgstr ""
@ -233,9 +231,7 @@ msgid "All Years"
msgstr ""
#: src/dialog/share.vue:75
msgid ""
"Alternatively, you can upload files directly to WebDAV servers like "
"Nextcloud."
msgid "Alternatively, you can upload files directly to WebDAV servers like Nextcloud."
msgstr ""
#: src/dialog/photo/edit/info.vue:151
@ -250,10 +246,10 @@ msgstr ""
msgid "An error occurred - are you offline?"
msgstr ""
#: src/component/navigation.vue:97 src/component/photo/cards.vue:299
#: src/component/photo/cards.vue:478 src/component/photo/list.vue:191
#: src/component/photo/mosaic.vue:224 src/model/file.js:210
#: src/options/options.js:307
#: src/component/navigation.vue:97 src/component/photo/cards.vue:309
#: src/component/photo/cards.vue:488 src/component/photo/list.vue:192
#: src/component/photo/mosaic.vue:229 src/model/file.js:210
#: src/options/options.js:318
msgid "Animated"
msgstr ""
@ -273,13 +269,13 @@ msgstr ""
msgid "Apply"
msgstr ""
#: src/component/photo/cards.vue:408 src/component/photo/clipboard.vue:88
#: src/component/photo/cards.vue:418 src/component/photo/clipboard.vue:88
#: src/dialog/photo/edit/details.vue:116
msgid "Approve"
msgstr ""
#: src/app/routes.js:243 src/component/navigation.vue:130
#: src/component/photo/cards.vue:379 src/component/photo/clipboard.vue:204
#: src/component/photo/cards.vue:389 src/component/photo/clipboard.vue:204
#: src/page/settings/general.vue:340
msgid "Archive"
msgstr ""
@ -321,9 +317,7 @@ msgid "Artist"
msgstr ""
#: src/page/connect.vue:110
msgid ""
"As this helps us provide more features to the public, we encourage all users "
"to support our mission."
msgid "As this helps us provide more features to the public, we encourage all users to support our mission."
msgstr ""
#: src/dialog/photo/edit/files.vue:149 src/dialog/photo/edit/files.vue:146
@ -331,9 +325,7 @@ msgid "Aspect Ratio"
msgstr ""
#: src/page/settings/library.vue:112
msgid ""
"Automatically create JPEGs for other file types so that they can be "
"displayed in a browser."
msgid "Automatically create JPEGs for other file types so that they can be displayed in a browser."
msgstr ""
#: src/page/settings/general.vue:165
@ -341,16 +333,11 @@ msgid "Automatically creates albums of special moments, trips, and places."
msgstr ""
#: src/page/about/about.vue:59
msgid ""
"Before submitting a support request, please use our Troubleshooting "
"Checklists to determine the cause of your problem."
msgid "Before submitting a support request, please use our Troubleshooting Checklists to determine the cause of your problem."
msgstr ""
#: src/dialog/sponsor.vue:22 src/page/about/about.vue:22
msgid ""
"Being 100% self-funded and independent, we can promise you that we will "
"never sell your data and that we will always be transparent about our "
"software and services."
msgid "Being 100% self-funded and independent, we can promise you that we will never sell your data and that we will always be transparent about our software and services."
msgstr ""
#: src/page/settings/account.vue:282 src/page/people/recognized.vue:434
@ -362,19 +349,19 @@ msgstr ""
msgid "Birth Date"
msgstr ""
#: src/options/options.js:407
#: src/options/options.js:418
msgid "Black"
msgstr ""
#: src/options/options.js:420
#: src/options/options.js:431
msgid "Blackman: Lanczos Modification, Less Ringing Artifacts"
msgstr ""
#: src/options/options.js:403
#: src/options/options.js:414
msgid "Blue"
msgstr ""
#: src/options/options.js:404
#: src/options/options.js:415
msgid "Brown"
msgstr ""
@ -387,12 +374,10 @@ msgid "Browse indexed files and folders in Library."
msgstr ""
#: src/page/about/about.vue:51
msgid ""
"Browse the Knowledge Base for detailed information on specific product "
"features, services, and related resources."
msgid "Browse the Knowledge Base for detailed information on specific product features, services, and related resources."
msgstr ""
#: src/page/about/feedback.vue:8 src/options/options.js:414
#: src/page/about/feedback.vue:8 src/options/options.js:425
msgid "Bug Report"
msgstr ""
@ -401,9 +386,7 @@ msgid "Busy, please wait…"
msgstr ""
#: src/page/connect.vue:83 src/page/connect.vue:90
msgid ""
"By using the software and services we provide, you agree to our terms of "
"service, privacy policy, and code of conduct."
msgid "By using the software and services we provide, you agree to our terms of service, privacy policy, and code of conduct."
msgstr ""
#: src/app/routes.js:175 src/component/navigation.vue:249
@ -411,7 +394,7 @@ msgstr ""
msgid "Calendar"
msgstr ""
#: src/component/photo/cards.vue:486 src/component/photo/list.vue:137
#: src/component/photo/cards.vue:505 src/component/photo/list.vue:138
#: src/component/photo/toolbar.vue:204 src/dialog/photo/edit/details.vue:357
msgid "Camera"
msgstr ""
@ -514,9 +497,7 @@ msgid "Colors"
msgstr ""
#: src/page/about/about.vue:46
msgid ""
"Common issues can be quickly diagnosed and solved using the troubleshooting "
"checklists we provide."
msgid "Common issues can be quickly diagnosed and solved using the troubleshooting checklists we provide."
msgstr ""
#: src/page/connect.vue:65 src/page/connect.vue:72
@ -604,7 +585,7 @@ msgstr ""
msgid "Creating thumbnails for"
msgstr ""
#: src/options/options.js:422
#: src/options/options.js:433
msgid "Cubic: Moderate Quality, Good Performance"
msgstr ""
@ -612,11 +593,11 @@ msgstr ""
msgid "Current Password"
msgstr ""
#: src/page/about/feedback.vue:5 src/options/options.js:411
#: src/page/about/feedback.vue:5 src/options/options.js:422
msgid "Customer Support"
msgstr ""
#: src/options/options.js:402
#: src/options/options.js:413
msgid "Cyan"
msgstr ""
@ -624,7 +605,7 @@ msgstr ""
msgid "Cyano"
msgstr ""
#: src/options/options.js:375
#: src/options/options.js:386
msgid "Daily"
msgstr ""
@ -637,7 +618,7 @@ msgstr ""
msgid "Debug Logs"
msgstr ""
#: src/options/options.js:272 src/options/options.js:326
#: src/options/options.js:279 src/options/options.js:337
#: src/options/themes.js:448
msgid "Default"
msgstr ""
@ -656,7 +637,7 @@ msgstr ""
msgid "Delete"
msgstr ""
#: src/component/photo/cards.vue:447 src/dialog/album/edit.vue:147
#: src/component/photo/cards.vue:457 src/dialog/album/edit.vue:147
#: src/dialog/photo/edit/details.vue:608 src/page/albums.vue:523
msgid "Description"
msgstr ""
@ -740,18 +721,18 @@ msgid "Don't transcode videos with FFmpeg."
msgstr ""
#: src/page/settings/advanced.vue:482
msgid "Don't use Darktable to convert RAW files."
msgid "Don't use Darktable to convert RAW images."
msgstr ""
#: src/page/settings/advanced.vue:503
msgid "Don't use RawTherapee to convert RAW files."
msgid "Don't use RawTherapee to convert RAW images."
msgstr ""
#: src/page/settings/advanced.vue:229
msgid "Don't use TensorFlow for image classification."
msgstr ""
#: src/options/options.js:415
#: src/options/options.js:426
msgid "Donations"
msgstr ""
@ -794,9 +775,7 @@ msgid "Downscaling Filter"
msgstr ""
#: src/page/about/feedback.vue:16
msgid ""
"Due to the high volume of emails we receive, our team may be unable to get "
"back to you immediately."
msgid "Due to the high volume of emails we receive, our team may be unable to get back to you immediately."
msgstr ""
#: src/page/library/browse.vue:37
@ -812,9 +791,7 @@ msgid "Dynamic Previews"
msgstr ""
#: src/page/settings/advanced.vue:303
msgid ""
"Dynamic rendering requires a powerful server. It is not recommended for NAS "
"devices."
msgid "Dynamic rendering requires a powerful server. It is not recommended for NAS devices."
msgstr ""
#: src/page/settings/advanced.vue:345
@ -872,14 +849,12 @@ msgstr ""
msgid "Estimates"
msgstr ""
#: src/options/options.js:376
#: src/options/options.js:387
msgid "Every two days"
msgstr ""
#: src/page/settings/general.vue:209
msgid ""
"Exclude content marked as private from search results, shared albums, "
"labels, and places."
msgid "Exclude content marked as private from search results, shared albums, labels, and places."
msgstr ""
#: src/page/people/new.vue:92 src/page/people/recognized.vue:134
@ -934,7 +909,7 @@ msgstr ""
msgid "Family Name"
msgstr ""
#: src/options/options.js:257
#: src/options/options.js:264
msgid "Fast"
msgstr ""
@ -947,7 +922,7 @@ msgstr ""
msgid "Favorites"
msgstr ""
#: src/page/about/feedback.vue:7 src/options/options.js:413
#: src/page/about/feedback.vue:7 src/options/options.js:424
msgid "Feature Request"
msgstr ""
@ -960,11 +935,10 @@ msgid "Feedback"
msgstr ""
#: src/page/connect.vue:82 src/dialog/sponsor.vue:25 src/page/connect.vue:89
msgid ""
"Feel free to contact us at hello@photoprism.app if you have any questions."
msgid "Feel free to contact us at hello@photoprism.app if you have any questions."
msgstr ""
#: src/options/options.js:428
#: src/options/options.js:439
msgid "Female"
msgstr ""
@ -996,9 +970,7 @@ msgid "Files"
msgstr ""
#: src/page/settings/library.vue:214
msgid ""
"Files with sequential names like 'IMG_1234 (2)' and 'IMG_1234 (3)' belong to "
"the same picture."
msgid "Files with sequential names like 'IMG_1234 (2)' and 'IMG_1234 (3)' belong to the same picture."
msgstr ""
#: src/dialog/photo/edit/details.vue:486
@ -1064,7 +1036,7 @@ msgstr ""
msgid "Given Name"
msgstr ""
#: src/options/options.js:397
#: src/options/options.js:408
msgid "Gold"
msgstr ""
@ -1072,11 +1044,11 @@ msgstr ""
msgid "Grayscale"
msgstr ""
#: src/options/options.js:400
#: src/options/options.js:411
msgid "Green"
msgstr ""
#: src/options/options.js:406
#: src/options/options.js:417
msgid "Grey"
msgstr ""
@ -1108,7 +1080,7 @@ msgstr ""
msgid "Hide photos that have been moved to archive."
msgstr ""
#: src/options/options.js:330
#: src/options/options.js:341
msgid "High"
msgstr ""
@ -1128,7 +1100,7 @@ msgstr ""
msgid "image"
msgstr ""
#: src/model/file.js:216 src/options/options.js:303
#: src/model/file.js:216 src/options/options.js:310
msgid "Image"
msgstr ""
@ -1146,9 +1118,7 @@ msgid "Import failed"
msgstr ""
#: src/page/library/import.vue:25
msgid ""
"Imported files will be sorted by date and given a unique name to avoid "
"duplicates."
msgid "Imported files will be sorted by date and given a unique name to avoid duplicates."
msgstr ""
#: src/page/settings/general.vue:275
@ -1177,9 +1147,7 @@ msgstr ""
#: src/component/photo/list.vue:1 src/component/photo/mosaic.vue:13
#: src/component/photo/mosaic.vue:11 src/component/photo/mosaic.vue:1
#: src/page/labels.vue:35 src/page/library/browse.vue:38
msgid ""
"In case pictures you expect are missing, please rescan your library and wait "
"until indexing has been completed."
msgid "In case pictures you expect are missing, please rescan your library and wait until indexing has been completed."
msgstr ""
#: src/component/navigation.vue:564 src/page/library.vue:35
@ -1241,14 +1209,11 @@ msgid "Invalid photo selected"
msgstr ""
#: src/page/connect.vue:103
msgid ""
"It is your decision whether you want to sign up to enjoy additional benefits."
msgid "It is your decision whether you want to sign up to enjoy additional benefits."
msgstr ""
#: src/page/about/about.vue:16
msgid ""
"It makes use of the latest technologies to tag and find pictures "
"automatically without getting in your way."
msgid "It makes use of the latest technologies to tag and find pictures automatically without getting in your way."
msgstr ""
#: src/model/rest.js:167
@ -1290,7 +1255,7 @@ msgstr ""
msgid "Labels deleted"
msgstr ""
#: src/options/options.js:421
#: src/options/options.js:432
msgid "Lanczos: Detail Preservation, Minimal Artifacts"
msgstr ""
@ -1342,7 +1307,7 @@ msgstr ""
msgid "Like"
msgstr ""
#: src/options/options.js:399
#: src/options/options.js:410
msgid "Lime"
msgstr ""
@ -1350,7 +1315,7 @@ msgstr ""
msgid "Limit reached, showing first %{n} files"
msgstr ""
#: src/options/options.js:423
#: src/options/options.js:434
msgid "Linear: Very Smooth, Best Performance"
msgstr ""
@ -1362,9 +1327,9 @@ msgstr ""
msgid "List"
msgstr ""
#: src/app/routes.js:215 src/component/photo/cards.vue:290
#: src/component/photo/list.vue:182 src/component/photo/mosaic.vue:214
#: src/options/options.js:315
#: src/app/routes.js:215 src/component/photo/cards.vue:293
#: src/component/photo/list.vue:183 src/component/photo/mosaic.vue:213
#: src/options/options.js:322
msgid "Live"
msgstr ""
@ -1372,7 +1337,7 @@ msgstr ""
msgid "Live Photos"
msgstr ""
#: src/dialog/photo/edit/details.vue:194 src/options/options.js:10
#: src/dialog/photo/edit/details.vue:194 src/options/options.js:17
msgid "Local Time"
msgstr ""
@ -1380,16 +1345,14 @@ msgstr ""
msgid "location"
msgstr ""
#: src/page/settings/account.vue:708 src/component/photo/cards.vue:510
#: src/component/photo/list.vue:138 src/dialog/album/edit.vue:125
#: src/page/settings/account.vue:708 src/component/photo/cards.vue:529
#: src/component/photo/list.vue:139 src/dialog/album/edit.vue:125
#: src/page/albums.vue:86 src/page/settings/account.vue:561
msgid "Location"
msgstr ""
#: src/page/library/errors.vue:37 src/page/library/errors.vue:1
msgid ""
"Log messages appear here whenever PhotoPrism comes across broken files, or "
"there are other potential issues."
msgid "Log messages appear here whenever PhotoPrism comes across broken files, or there are other potential issues."
msgstr ""
#: src/component/navigation.vue:458 src/component/navigation.vue:1713
@ -1411,15 +1374,15 @@ msgstr ""
msgid "Longitude"
msgstr ""
#: src/options/options.js:334
#: src/options/options.js:345
msgid "Low"
msgstr ""
#: src/options/options.js:276
#: src/options/options.js:283
msgid "Low Resolution"
msgstr ""
#: src/options/options.js:393
#: src/options/options.js:404
msgid "Magenta"
msgstr ""
@ -1427,7 +1390,7 @@ msgstr ""
msgid "Main Color"
msgstr ""
#: src/options/options.js:427
#: src/options/options.js:438
msgid "Male"
msgstr ""
@ -1451,7 +1414,7 @@ msgstr ""
msgid "Marker"
msgstr ""
#: src/options/options.js:261
#: src/options/options.js:268
msgid "Medium"
msgstr ""
@ -1518,8 +1481,8 @@ msgstr ""
msgid "Must have at least %{n} characters."
msgstr ""
#: src/page/about/feedback.vue:172 src/component/photo/cards.vue:498
#: src/component/photo/list.vue:138 src/component/photo/list.vue:227
#: src/page/about/feedback.vue:172 src/component/photo/cards.vue:517
#: src/component/photo/list.vue:139 src/component/photo/list.vue:235
#: src/dialog/album/edit.vue:104 src/dialog/photo/edit/files.vue:34
#: src/dialog/photo/edit/info.vue:31 src/dialog/photo/edit/labels.vue:43
#: src/dialog/photo/edit/labels.vue:159 src/dialog/photo/edit/people.vue:21
@ -1542,7 +1505,7 @@ msgstr ""
msgid "Neon"
msgstr ""
#: src/options/options.js:371 src/options/options.js:381
#: src/options/options.js:382 src/options/options.js:392
#: src/page/settings/services.vue:54
msgid "Never"
msgstr ""
@ -1613,9 +1576,7 @@ msgid "No video selected"
msgstr ""
#: src/page/library/errors.vue:34 src/page/library/errors.vue:1
msgid ""
"No warnings or error containing this keyword. Note that search is case-"
"sensitive."
msgid "No warnings or error containing this keyword. Note that search is case-sensitive."
msgstr ""
#: src/component/photo/cards.vue:15 src/component/photo/cards.vue:13
@ -1625,12 +1586,10 @@ msgstr ""
#: src/component/photo/mosaic.vue:15 src/component/photo/mosaic.vue:13
#: src/component/photo/mosaic.vue:3 src/component/photo/mosaic.vue:1
#: src/dialog/upload.vue:52 src/page/settings/library.vue:91
msgid ""
"Non-photographic and low-quality images require a review before they appear "
"in search results."
msgid "Non-photographic and low-quality images require a review before they appear in search results."
msgstr ""
#: src/options/options.js:253 src/options/options.js:338
#: src/options/options.js:260 src/options/options.js:349
msgid "None"
msgstr ""
@ -1639,8 +1598,7 @@ msgid "Not Found"
msgstr ""
#: src/page/library/import.vue:28
msgid ""
"Note you may manually manage your originals folder and importing is optional."
msgid "Note you may manually manage your originals folder and importing is optional."
msgstr ""
#: src/page/settings/services.vue:36
@ -1648,9 +1606,7 @@ msgid "Note:"
msgstr ""
#: src/dialog/service/add.vue:28
msgid ""
"Note: Only WebDAV servers, like Nextcloud or PhotoPrism, can be configured "
"as remote service for backup and file upload."
msgid "Note: Only WebDAV servers, like Nextcloud or PhotoPrism, can be configured as remote service for backup and file upload."
msgstr ""
#: src/dialog/photo/edit/details.vue:658
@ -1674,7 +1630,7 @@ msgstr ""
msgid "On Windows, enter the following resource in the connection dialog:"
msgstr ""
#: src/options/options.js:377
#: src/options/options.js:388
msgid "Once a week"
msgstr ""
@ -1719,7 +1675,7 @@ msgstr ""
msgid "or ask in our Community Chat"
msgstr ""
#: src/options/options.js:396
#: src/options/options.js:407
msgid "Orange"
msgstr ""
@ -1746,24 +1702,19 @@ msgstr ""
msgid "Originals"
msgstr ""
#: src/options/options.js:416 src/options/options.js:429
#: src/options/options.js:427 src/options/options.js:440
msgid "Other"
msgstr ""
#: src/page/connect.vue:109
msgid ""
"Our team decides this on an ongoing basis depending on the support effort "
"required, server and licensing costs, and whether the features are generally "
"needed by everyone or mainly requested by organizations and advanced users."
msgid "Our team decides this on an ongoing basis depending on the support effort required, server and licensing costs, and whether the features are generally needed by everyone or mainly requested by organizations and advanced users."
msgstr ""
#: src/page/about/about.vue:45
msgid ""
"Our User Guide also covers many advanced topics, such as migrating from "
"Google Photos and thumbnail quality settings."
msgid "Our User Guide also covers many advanced topics, such as migrating from Google Photos and thumbnail quality settings."
msgstr ""
#: src/options/options.js:290
#: src/options/options.js:297
msgid "Outdoor"
msgstr ""
@ -1807,7 +1758,7 @@ msgstr ""
msgid "Phone"
msgstr ""
#: src/model/photo.js:1057
#: src/model/photo.js:1099
msgid "Photo"
msgstr ""
@ -1831,7 +1782,7 @@ msgstr ""
msgid "Photos"
msgstr ""
#: src/options/options.js:394
#: src/options/options.js:405
msgid "Pink"
msgstr ""
@ -1861,9 +1812,7 @@ msgid "Please don't upload photos containing offensive content."
msgstr ""
#: src/dialog/account/password.vue:17
msgid ""
"Please note that changing your password will log you out on other devices "
"and browsers."
msgid "Please note that changing your password will log you out on other devices and browsers."
msgstr ""
#: src/dialog/photo/edit/files.vue:135 src/dialog/photo/edit/files.vue:132
@ -1910,7 +1859,7 @@ msgstr ""
msgid "Proceed"
msgstr ""
#: src/page/about/feedback.vue:6 src/options/options.js:412
#: src/page/about/feedback.vue:6 src/options/options.js:423
msgid "Product Feedback"
msgstr ""
@ -1918,7 +1867,7 @@ msgstr ""
msgid "Projection"
msgstr ""
#: src/options/options.js:392
#: src/options/options.js:403
msgid "Purple"
msgstr ""
@ -1938,11 +1887,11 @@ msgstr ""
msgid "Raspberry"
msgstr ""
#: src/options/options.js:311
#: src/options/options.js:314
msgid "Raw"
msgstr ""
#: src/component/photo/cards.vue:283 src/component/photo/mosaic.vue:206
#: src/component/photo/cards.vue:286 src/component/photo/mosaic.vue:206
msgid "RAW"
msgstr ""
@ -1985,7 +1934,7 @@ msgstr ""
msgid "Recognizes faces so that specific people can be found."
msgstr ""
#: src/options/options.js:395
#: src/options/options.js:406
msgid "Red"
msgstr ""
@ -2019,9 +1968,7 @@ msgid "Remove from album"
msgstr ""
#: src/page/library/import.vue:121
msgid ""
"Remove imported files to save storage. Unsupported file types will never be "
"deleted, they remain in their current location."
msgid "Remove imported files to save storage. Unsupported file types will never be deleted, they remain in their current location."
msgstr ""
#: src/common/api.js:74
@ -2054,7 +2001,7 @@ msgstr ""
msgid "Review"
msgstr ""
#: src/options/options.js:285
#: src/options/options.js:292
msgid "Satellite"
msgstr ""
@ -2210,7 +2157,7 @@ msgstr ""
msgid "Size"
msgstr ""
#: src/options/options.js:265
#: src/options/options.js:272
msgid "Slow"
msgstr ""
@ -2227,7 +2174,7 @@ msgstr ""
msgid "Source"
msgstr ""
#: src/component/photo/cards.vue:313 src/component/photo/mosaic.vue:240
#: src/component/photo/cards.vue:323 src/component/photo/mosaic.vue:243
msgid "Stack"
msgstr ""
@ -2236,9 +2183,7 @@ msgid "Stack files sharing the same unique image or instance identifier."
msgstr ""
#: src/page/settings/library.vue:172
msgid ""
"Stack pictures taken at the exact same time and location based on their "
"metadata."
msgid "Stack pictures taken at the exact same time and location based on their metadata."
msgstr ""
#: src/dialog/photo/edit/info.vue:86
@ -2250,9 +2195,7 @@ msgid "Stacks"
msgstr ""
#: src/page/settings/library.vue:138
msgid ""
"Stacks group files with a similar frame of reference, but differences of "
"quality, format, size or color."
msgid "Stacks group files with a similar frame of reference, but differences of quality, format, size or color."
msgstr ""
#: src/page/library/index.vue:31
@ -2280,7 +2223,7 @@ msgstr ""
msgid "Storage"
msgstr ""
#: src/options/options.js:280
#: src/options/options.js:287
msgid "Streets"
msgstr ""
@ -2293,8 +2236,7 @@ msgid "Successfully Connected"
msgstr ""
#: src/dialog/service/add.vue:29
msgid ""
"Support for additional services, like Google Drive, will be added over time."
msgid "Support for additional services, like Google Drive, will be added over time."
msgstr ""
#: src/dialog/sponsor.vue:7
@ -2309,12 +2251,12 @@ msgstr ""
msgid "Sync raw and video files"
msgstr ""
#: src/component/photo/cards.vue:461 src/component/photo/list.vue:136
#: src/component/photo/cards.vue:471 src/component/photo/list.vue:137
#: src/dialog/photo/edit/info.vue:52
msgid "Taken"
msgstr ""
#: src/options/options.js:401
#: src/options/options.js:412
msgid "Teal"
msgstr ""
@ -2327,9 +2269,7 @@ msgid "The index currently contains %{n} hidden files."
msgstr ""
#: src/page/library/index.vue:37
msgid ""
"Their format may not be supported, they haven't been converted to JPEG yet "
"or there are duplicates."
msgid "Their format may not be supported, they haven't been converted to JPEG yet or there are duplicates."
msgstr ""
#: src/page/settings/general.vue:70
@ -2338,16 +2278,12 @@ msgstr ""
#: src/page/settings/services.vue:40
msgid ""
"This mounts the originals folder as a network drive and allows you to open, "
"edit, and delete files\n"
"This mounts the originals folder as a network drive and allows you to open, edit, and delete files\n"
" from your computer or smartphone as if they were local."
msgstr ""
#: src/dialog/webdav.vue:26
msgid ""
"This mounts the originals folder as a network drive and allows you to open, "
"edit, and delete files from your computer or smartphone as if they were "
"local."
msgid "This mounts the originals folder as a network drive and allows you to open, edit, and delete files from your computer or smartphone as if they were local."
msgstr ""
#: src/page/settings/advanced.vue:250
@ -2376,7 +2312,7 @@ msgctxt "Photo"
msgid "Title"
msgstr ""
#: src/page/settings/account.vue:114 src/component/photo/list.vue:135
#: src/page/settings/account.vue:114 src/component/photo/list.vue:136
#: src/dialog/photo/edit/info.vue:45
msgid "Title"
msgstr ""
@ -2390,9 +2326,7 @@ msgid "Title too long"
msgstr ""
#: src/page/connect.vue:59 src/page/connect.vue:66
msgid ""
"To upgrade, you may either enter an activation code or click on \"Proceed\" "
"to sign up on our website:"
msgid "To upgrade, you may either enter an activation code or click on \"Proceed\" to sign up on our website:"
msgstr ""
#: src/component/album/toolbar.vue:139 src/component/album/toolbar.vue:157
@ -2405,7 +2339,7 @@ msgstr ""
msgid "Token"
msgstr ""
#: src/options/options.js:295
#: src/options/options.js:302
msgid "Topographic"
msgstr ""
@ -2436,11 +2370,11 @@ msgid "Unique ID"
msgstr ""
#: src/dialog/photo/edit/details.vue:23 src/dialog/photo/edit/info.vue:24
#: src/model/album.js:179 src/model/photo.js:697 src/model/photo.js:718
#: src/model/photo.js:741 src/model/photo.js:759 src/model/photo.js:849
#: src/model/photo.js:862 src/model/user.js:124 src/options/options.js:20
#: src/options/options.js:34 src/options/options.js:51
#: src/options/options.js:65 src/options/options.js:77
#: src/model/album.js:179 src/model/photo.js:700 src/model/photo.js:721
#: src/model/photo.js:744 src/model/photo.js:762 src/model/photo.js:891
#: src/model/photo.js:904 src/model/user.js:124 src/options/options.js:27
#: src/options/options.js:41 src/options/options.js:58
#: src/options/options.js:72 src/options/options.js:84
#: src/page/library/errors.vue:173 src/page/library/errors.vue:180
#: src/page/library/logs.vue:18
msgid "Unknown"
@ -2572,14 +2506,20 @@ msgstr ""
msgid "Vanta"
msgstr ""
#: src/component/photo/cards.vue:316 src/component/photo/cards.vue:497
#: src/component/photo/list.vue:199 src/component/photo/mosaic.vue:236
#: src/model/photo.js:805 src/model/photo.js:819 src/options/options.js:330
msgid "Vector"
msgstr ""
#: src/page/connect.vue:11 src/page/connect.vue:8
msgid "Verified"
msgstr ""
#: src/component/photo/cards.vue:306 src/component/photo/cards.vue:469
#: src/component/photo/list.vue:198 src/component/photo/mosaic.vue:232
#: src/model/file.js:219 src/model/photo.js:794 src/model/photo.js:810
#: src/options/options.js:319
#: src/component/photo/cards.vue:302 src/component/photo/cards.vue:479
#: src/component/photo/list.vue:206 src/component/photo/mosaic.vue:222
#: src/model/file.js:219 src/model/photo.js:836 src/model/photo.js:852
#: src/options/options.js:326
msgid "Video"
msgstr ""
@ -2594,15 +2534,13 @@ msgstr ""
msgid "Videos"
msgstr ""
#: src/component/photo/cards.vue:322 src/component/photo/mosaic.vue:249
#: src/component/photo/cards.vue:332 src/component/photo/mosaic.vue:252
#: src/component/photo/toolbar.vue:230
msgid "View"
msgstr ""
#: src/page/about/about.vue:44
msgid ""
"Visit docs.photoprism.app/user-guide to learn how to sync, organize, and "
"share your pictures."
msgid "Visit docs.photoprism.app/user-guide to learn how to sync, organize, and share your pictures."
msgstr ""
#: src/component/album/toolbar.vue:73 src/component/photo/toolbar.vue:58
@ -2611,9 +2549,7 @@ msgid "Visual Similarity"
msgstr ""
#: src/page/connect.vue:102
msgid ""
"Voluntary donations do not cover the cost of a team working full time to "
"provide you with updates, documentation, and support."
msgid "Voluntary donations do not cover the cost of a team working full time to provide you with updates, documentation, and support."
msgstr ""
#: src/page/about/feedback.vue:13
@ -2625,9 +2561,7 @@ msgid "We do our best to respond within five business days or less."
msgstr ""
#: src/page/about/about.vue:71
msgid ""
"We'll do our best to answer all your questions. In return, we ask you to "
"back us on Patreon or GitHub Sponsors."
msgid "We'll do our best to answer all your questions. In return, we ask you to back us on Patreon or GitHub Sponsors."
msgstr ""
#: src/dialog/webdav.vue:8
@ -2636,8 +2570,7 @@ msgstr ""
#: src/page/settings/services.vue:37
msgid ""
"WebDAV clients, like Microsofts Windows Explorer or Apple's Finder, can "
"connect directly to\n"
"WebDAV clients, like Microsofts Windows Explorer or Apple's Finder, can connect directly to\n"
" PhotoPrism."
msgstr ""
@ -2654,7 +2587,7 @@ msgstr ""
msgid "What functionality is generally available?"
msgstr ""
#: src/options/options.js:405
#: src/options/options.js:416
msgid "White"
msgstr ""
@ -2672,7 +2605,7 @@ msgstr ""
msgid "Year"
msgstr ""
#: src/options/options.js:398
#: src/options/options.js:409
msgid "Yellow"
msgstr ""
@ -2717,30 +2650,19 @@ msgid "You may rescan your library to find additional faces."
msgstr ""
#: src/dialog/sponsor.vue:19 src/page/about/about.vue:21
msgid ""
"Your continued support helps us provide regular updates and remain "
"independent, so we can fulfill our mission and protect your privacy."
msgid "Your continued support helps us provide regular updates and remain independent, so we can fulfill our mission and protect your privacy."
msgstr ""
#: src/page/albums.vue:62 src/page/albums.vue:1
msgid ""
"Your library is continuously analyzed to automatically create albums of "
"special moments, trips, and places."
msgid "Your library is continuously analyzed to automatically create albums of special moments, trips, and places."
msgstr ""
#: src/component/photo-viewer.vue:176
msgid "Zoom in/out"
msgstr ""
#~ msgid ""
#~ "You may use it as required to describe our software, run your own server, "
#~ "for educational purposes, but not for offering commercial goods, "
#~ "products, or services without prior written permission. In other words, "
#~ "please ask."
#~ msgstr ""
#~ "You may use it as required to describe our software, run your server, for "
#~ "educational purposes, but not for offering commercial goods, products, or "
#~ "services without prior written permission. In other words, please ask."
#~ msgid "You may use it as required to describe our software, run your own server, for educational purposes, but not for offering commercial goods, products, or services without prior written permission. In other words, please ask."
#~ msgstr "You may use it as required to describe our software, run your server, for educational purposes, but not for offering commercial goods, products, or services without prior written permission. In other words, please ask."
#~ msgid " photos loaded"
#~ msgstr " photos loaded"
@ -2808,12 +2730,8 @@ msgstr ""
#~ msgid "Try again using a related or otherwise similar term."
#~ msgstr "Try again using a related or otherwise similar term."
#~ msgid ""
#~ "Try using other terms and search options such as category, country and "
#~ "camera."
#~ msgstr ""
#~ "Try using other terms and search options such as category, country and "
#~ "camera."
#~ msgid "Try using other terms and search options such as category, country and camera."
#~ msgstr "Try using other terms and search options such as category, country and camera."
#~ msgid "Vibrant"
#~ msgstr "Vibrant"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -34,15 +34,15 @@ msgstr ""
msgid "%{n} pictures found"
msgstr ""
#: src/options/options.js:372
#: src/options/options.js:383
msgid "1 hour"
msgstr ""
#: src/options/options.js:374
#: src/options/options.js:385
msgid "12 hours"
msgstr ""
#: src/options/options.js:373
#: src/options/options.js:384
msgid "4 hours"
msgstr ""
@ -135,23 +135,23 @@ msgstr ""
msgid "Advanced"
msgstr ""
#: src/options/options.js:382
#: src/options/options.js:393
msgid "After 1 day"
msgstr ""
#: src/options/options.js:383
#: src/options/options.js:394
msgid "After 3 days"
msgstr ""
#: src/options/options.js:384
#: src/options/options.js:395
msgid "After 7 days"
msgstr ""
#: src/options/options.js:386
#: src/options/options.js:397
msgid "After one month"
msgstr ""
#: src/options/options.js:388
#: src/options/options.js:399
msgid "After one year"
msgstr ""
@ -160,11 +160,11 @@ msgstr ""
msgid "After selecting pictures from search results, you can add them to an album using the context menu."
msgstr ""
#: src/options/options.js:387
#: src/options/options.js:398
msgid "After two months"
msgstr ""
#: src/options/options.js:385
#: src/options/options.js:396
msgid "After two weeks"
msgstr ""
@ -267,12 +267,12 @@ msgid "An error occurred - are you offline?"
msgstr ""
#: src/component/navigation.vue:97
#: src/component/photo/cards.vue:299
#: src/component/photo/cards.vue:478
#: src/component/photo/list.vue:191
#: src/component/photo/mosaic.vue:224
#: src/component/photo/cards.vue:309
#: src/component/photo/cards.vue:488
#: src/component/photo/list.vue:192
#: src/component/photo/mosaic.vue:229
#: src/model/file.js:210
#: src/options/options.js:307
#: src/options/options.js:318
msgid "Animated"
msgstr ""
@ -292,7 +292,7 @@ msgstr ""
msgid "Apply"
msgstr ""
#: src/component/photo/cards.vue:408
#: src/component/photo/cards.vue:418
#: src/component/photo/clipboard.vue:88
#: src/dialog/photo/edit/details.vue:116
msgid "Approve"
@ -300,7 +300,7 @@ msgstr ""
#: src/app/routes.js:243
#: src/component/navigation.vue:130
#: src/component/photo/cards.vue:379
#: src/component/photo/cards.vue:389
#: src/component/photo/clipboard.vue:204
#: src/page/settings/general.vue:340
msgid "Archive"
@ -379,19 +379,19 @@ msgstr ""
msgid "Birth Date"
msgstr ""
#: src/options/options.js:407
#: src/options/options.js:418
msgid "Black"
msgstr ""
#: src/options/options.js:420
#: src/options/options.js:431
msgid "Blackman: Lanczos Modification, Less Ringing Artifacts"
msgstr ""
#: src/options/options.js:403
#: src/options/options.js:414
msgid "Blue"
msgstr ""
#: src/options/options.js:404
#: src/options/options.js:415
msgid "Brown"
msgstr ""
@ -408,7 +408,7 @@ msgid "Browse the Knowledge Base for detailed information on specific product fe
msgstr ""
#: src/page/about/feedback.vue:8
#: src/options/options.js:414
#: src/options/options.js:425
msgid "Bug Report"
msgstr ""
@ -429,8 +429,8 @@ msgstr ""
msgid "Calendar"
msgstr ""
#: src/component/photo/cards.vue:486
#: src/component/photo/list.vue:137
#: src/component/photo/cards.vue:505
#: src/component/photo/list.vue:138
#: src/component/photo/toolbar.vue:204
#: src/dialog/photo/edit/details.vue:357
msgid "Camera"
@ -665,7 +665,7 @@ msgstr ""
msgid "Creating thumbnails for"
msgstr ""
#: src/options/options.js:422
#: src/options/options.js:433
msgid "Cubic: Moderate Quality, Good Performance"
msgstr ""
@ -674,11 +674,11 @@ msgid "Current Password"
msgstr ""
#: src/page/about/feedback.vue:5
#: src/options/options.js:411
#: src/options/options.js:422
msgid "Customer Support"
msgstr ""
#: src/options/options.js:402
#: src/options/options.js:413
msgid "Cyan"
msgstr ""
@ -686,7 +686,7 @@ msgstr ""
msgid "Cyano"
msgstr ""
#: src/options/options.js:375
#: src/options/options.js:386
msgid "Daily"
msgstr ""
@ -700,8 +700,8 @@ msgstr ""
msgid "Debug Logs"
msgstr ""
#: src/options/options.js:272
#: src/options/options.js:326
#: src/options/options.js:279
#: src/options/options.js:337
#: src/options/themes.js:448
msgid "Default"
msgstr ""
@ -726,7 +726,7 @@ msgstr ""
msgid "Delete"
msgstr ""
#: src/component/photo/cards.vue:447
#: src/component/photo/cards.vue:457
#: src/dialog/album/edit.vue:147
#: src/dialog/photo/edit/details.vue:608
#: src/page/albums.vue:523
@ -816,18 +816,18 @@ msgid "Don't transcode videos with FFmpeg."
msgstr ""
#: src/page/settings/advanced.vue:482
msgid "Don't use Darktable to convert RAW files."
msgid "Don't use Darktable to convert RAW images."
msgstr ""
#: src/page/settings/advanced.vue:503
msgid "Don't use RawTherapee to convert RAW files."
msgid "Don't use RawTherapee to convert RAW images."
msgstr ""
#: src/page/settings/advanced.vue:229
msgid "Don't use TensorFlow for image classification."
msgstr ""
#: src/options/options.js:415
#: src/options/options.js:426
msgid "Donations"
msgstr ""
@ -962,7 +962,7 @@ msgstr ""
msgid "Estimates"
msgstr ""
#: src/options/options.js:376
#: src/options/options.js:387
msgid "Every two days"
msgstr ""
@ -1027,7 +1027,7 @@ msgstr ""
msgid "Family Name"
msgstr ""
#: src/options/options.js:257
#: src/options/options.js:264
msgid "Fast"
msgstr ""
@ -1043,7 +1043,7 @@ msgid "Favorites"
msgstr ""
#: src/page/about/feedback.vue:7
#: src/options/options.js:413
#: src/options/options.js:424
msgid "Feature Request"
msgstr ""
@ -1063,7 +1063,7 @@ msgstr ""
msgid "Feel free to contact us at hello@photoprism.app if you have any questions."
msgstr ""
#: src/options/options.js:428
#: src/options/options.js:439
msgid "Female"
msgstr ""
@ -1174,7 +1174,7 @@ msgstr ""
msgid "Given Name"
msgstr ""
#: src/options/options.js:397
#: src/options/options.js:408
msgid "Gold"
msgstr ""
@ -1182,11 +1182,11 @@ msgstr ""
msgid "Grayscale"
msgstr ""
#: src/options/options.js:400
#: src/options/options.js:411
msgid "Green"
msgstr ""
#: src/options/options.js:406
#: src/options/options.js:417
msgid "Grey"
msgstr ""
@ -1220,7 +1220,7 @@ msgstr ""
msgid "Hide photos that have been moved to archive."
msgstr ""
#: src/options/options.js:330
#: src/options/options.js:341
msgid "High"
msgstr ""
@ -1243,7 +1243,7 @@ msgid "image"
msgstr ""
#: src/model/file.js:216
#: src/options/options.js:303
#: src/options/options.js:310
msgid "Image"
msgstr ""
@ -1430,7 +1430,7 @@ msgstr ""
msgid "Labels deleted"
msgstr ""
#: src/options/options.js:421
#: src/options/options.js:432
msgid "Lanczos: Detail Preservation, Minimal Artifacts"
msgstr ""
@ -1494,7 +1494,7 @@ msgstr ""
msgid "Like"
msgstr ""
#: src/options/options.js:399
#: src/options/options.js:410
msgid "Lime"
msgstr ""
@ -1502,7 +1502,7 @@ msgstr ""
msgid "Limit reached, showing first %{n} files"
msgstr ""
#: src/options/options.js:423
#: src/options/options.js:434
msgid "Linear: Very Smooth, Best Performance"
msgstr ""
@ -1516,10 +1516,10 @@ msgid "List"
msgstr ""
#: src/app/routes.js:215
#: src/component/photo/cards.vue:290
#: src/component/photo/list.vue:182
#: src/component/photo/mosaic.vue:214
#: src/options/options.js:315
#: src/component/photo/cards.vue:293
#: src/component/photo/list.vue:183
#: src/component/photo/mosaic.vue:213
#: src/options/options.js:322
msgid "Live"
msgstr ""
@ -1528,7 +1528,7 @@ msgid "Live Photos"
msgstr ""
#: src/dialog/photo/edit/details.vue:194
#: src/options/options.js:10
#: src/options/options.js:17
msgid "Local Time"
msgstr ""
@ -1537,8 +1537,8 @@ msgid "location"
msgstr ""
#: src/page/settings/account.vue:708
#: src/component/photo/cards.vue:510
#: src/component/photo/list.vue:138
#: src/component/photo/cards.vue:529
#: src/component/photo/list.vue:139
#: src/dialog/album/edit.vue:125
#: src/page/albums.vue:86
#: src/page/settings/account.vue:561
@ -1574,15 +1574,15 @@ msgstr ""
msgid "Longitude"
msgstr ""
#: src/options/options.js:334
#: src/options/options.js:345
msgid "Low"
msgstr ""
#: src/options/options.js:276
#: src/options/options.js:283
msgid "Low Resolution"
msgstr ""
#: src/options/options.js:393
#: src/options/options.js:404
msgid "Magenta"
msgstr ""
@ -1591,7 +1591,7 @@ msgstr ""
msgid "Main Color"
msgstr ""
#: src/options/options.js:427
#: src/options/options.js:438
msgid "Male"
msgstr ""
@ -1615,7 +1615,7 @@ msgstr ""
msgid "Marker"
msgstr ""
#: src/options/options.js:261
#: src/options/options.js:268
msgid "Medium"
msgstr ""
@ -1692,9 +1692,9 @@ msgid "Must have at least %{n} characters."
msgstr ""
#: src/page/about/feedback.vue:172
#: src/component/photo/cards.vue:498
#: src/component/photo/list.vue:138
#: src/component/photo/list.vue:227
#: src/component/photo/cards.vue:517
#: src/component/photo/list.vue:139
#: src/component/photo/list.vue:235
#: src/dialog/album/edit.vue:104
#: src/dialog/photo/edit/files.vue:34
#: src/dialog/photo/edit/info.vue:31
@ -1729,8 +1729,8 @@ msgstr ""
msgid "Neon"
msgstr ""
#: src/options/options.js:371
#: src/options/options.js:381
#: src/options/options.js:382
#: src/options/options.js:392
#: src/page/settings/services.vue:54
msgid "Never"
msgstr ""
@ -1841,8 +1841,8 @@ msgstr ""
msgid "Non-photographic and low-quality images require a review before they appear in search results."
msgstr ""
#: src/options/options.js:253
#: src/options/options.js:338
#: src/options/options.js:260
#: src/options/options.js:349
msgid "None"
msgstr ""
@ -1886,7 +1886,7 @@ msgstr ""
msgid "On Windows, enter the following resource in the connection dialog:"
msgstr ""
#: src/options/options.js:377
#: src/options/options.js:388
msgid "Once a week"
msgstr ""
@ -1933,7 +1933,7 @@ msgstr ""
msgid "or ask in our Community Chat"
msgstr ""
#: src/options/options.js:396
#: src/options/options.js:407
msgid "Orange"
msgstr ""
@ -1964,8 +1964,8 @@ msgstr ""
msgid "Originals"
msgstr ""
#: src/options/options.js:416
#: src/options/options.js:429
#: src/options/options.js:427
#: src/options/options.js:440
msgid "Other"
msgstr ""
@ -1977,7 +1977,7 @@ msgstr ""
msgid "Our User Guide also covers many advanced topics, such as migrating from Google Photos and thumbnail quality settings."
msgstr ""
#: src/options/options.js:290
#: src/options/options.js:297
msgid "Outdoor"
msgstr ""
@ -2029,7 +2029,7 @@ msgstr ""
msgid "Phone"
msgstr ""
#: src/model/photo.js:1057
#: src/model/photo.js:1099
msgid "Photo"
msgstr ""
@ -2053,7 +2053,7 @@ msgstr ""
msgid "Photos"
msgstr ""
#: src/options/options.js:394
#: src/options/options.js:405
msgid "Pink"
msgstr ""
@ -2147,7 +2147,7 @@ msgid "Proceed"
msgstr ""
#: src/page/about/feedback.vue:6
#: src/options/options.js:412
#: src/options/options.js:423
msgid "Product Feedback"
msgstr ""
@ -2156,7 +2156,7 @@ msgstr ""
msgid "Projection"
msgstr ""
#: src/options/options.js:392
#: src/options/options.js:403
msgid "Purple"
msgstr ""
@ -2176,11 +2176,11 @@ msgstr ""
msgid "Raspberry"
msgstr ""
#: src/options/options.js:311
#: src/options/options.js:314
msgid "Raw"
msgstr ""
#: src/component/photo/cards.vue:283
#: src/component/photo/cards.vue:286
#: src/component/photo/mosaic.vue:206
msgid "RAW"
msgstr ""
@ -2229,7 +2229,7 @@ msgstr ""
msgid "Recognizes faces so that specific people can be found."
msgstr ""
#: src/options/options.js:395
#: src/options/options.js:406
msgid "Red"
msgstr ""
@ -2309,7 +2309,7 @@ msgstr ""
msgid "Review"
msgstr ""
#: src/options/options.js:285
#: src/options/options.js:292
msgid "Satellite"
msgstr ""
@ -2491,7 +2491,7 @@ msgstr ""
msgid "Size"
msgstr ""
#: src/options/options.js:265
#: src/options/options.js:272
msgid "Slow"
msgstr ""
@ -2509,8 +2509,8 @@ msgstr ""
msgid "Source"
msgstr ""
#: src/component/photo/cards.vue:313
#: src/component/photo/mosaic.vue:240
#: src/component/photo/cards.vue:323
#: src/component/photo/mosaic.vue:243
msgid "Stack"
msgstr ""
@ -2563,7 +2563,7 @@ msgstr ""
msgid "Storage"
msgstr ""
#: src/options/options.js:280
#: src/options/options.js:287
msgid "Streets"
msgstr ""
@ -2593,13 +2593,13 @@ msgstr ""
msgid "Sync raw and video files"
msgstr ""
#: src/component/photo/cards.vue:461
#: src/component/photo/list.vue:136
#: src/component/photo/cards.vue:471
#: src/component/photo/list.vue:137
#: src/dialog/photo/edit/info.vue:52
msgid "Taken"
msgstr ""
#: src/options/options.js:401
#: src/options/options.js:412
msgid "Teal"
msgstr ""
@ -2657,7 +2657,7 @@ msgid "Title"
msgstr ""
#: src/page/settings/account.vue:114
#: src/component/photo/list.vue:135
#: src/component/photo/list.vue:136
#: src/dialog/photo/edit/info.vue:45
msgid "Title"
msgstr ""
@ -2688,7 +2688,7 @@ msgstr ""
msgid "Token"
msgstr ""
#: src/options/options.js:295
#: src/options/options.js:302
msgid "Topographic"
msgstr ""
@ -2727,18 +2727,18 @@ msgstr ""
#: src/dialog/photo/edit/details.vue:23
#: src/dialog/photo/edit/info.vue:24
#: src/model/album.js:179
#: src/model/photo.js:697
#: src/model/photo.js:718
#: src/model/photo.js:741
#: src/model/photo.js:759
#: src/model/photo.js:849
#: src/model/photo.js:862
#: src/model/photo.js:700
#: src/model/photo.js:721
#: src/model/photo.js:744
#: src/model/photo.js:762
#: src/model/photo.js:891
#: src/model/photo.js:904
#: src/model/user.js:124
#: src/options/options.js:20
#: src/options/options.js:34
#: src/options/options.js:51
#: src/options/options.js:65
#: src/options/options.js:77
#: src/options/options.js:27
#: src/options/options.js:41
#: src/options/options.js:58
#: src/options/options.js:72
#: src/options/options.js:84
#: src/page/library/errors.vue:173
#: src/page/library/errors.vue:180
#: src/page/library/logs.vue:18
@ -2890,19 +2890,29 @@ msgstr ""
msgid "Vanta"
msgstr ""
#: src/component/photo/cards.vue:316
#: src/component/photo/cards.vue:497
#: src/component/photo/list.vue:199
#: src/component/photo/mosaic.vue:236
#: src/model/photo.js:805
#: src/model/photo.js:819
#: src/options/options.js:330
msgid "Vector"
msgstr ""
#: src/page/connect.vue:11
#: src/page/connect.vue:8
msgid "Verified"
msgstr ""
#: src/component/photo/cards.vue:306
#: src/component/photo/cards.vue:469
#: src/component/photo/list.vue:198
#: src/component/photo/mosaic.vue:232
#: src/component/photo/cards.vue:302
#: src/component/photo/cards.vue:479
#: src/component/photo/list.vue:206
#: src/component/photo/mosaic.vue:222
#: src/model/file.js:219
#: src/model/photo.js:794
#: src/model/photo.js:810
#: src/options/options.js:319
#: src/model/photo.js:836
#: src/model/photo.js:852
#: src/options/options.js:326
msgid "Video"
msgstr ""
@ -2920,8 +2930,8 @@ msgstr ""
msgid "Videos"
msgstr ""
#: src/component/photo/cards.vue:322
#: src/component/photo/mosaic.vue:249
#: src/component/photo/cards.vue:332
#: src/component/photo/mosaic.vue:252
#: src/component/photo/toolbar.vue:230
msgid "View"
msgstr ""
@ -2979,7 +2989,7 @@ msgstr ""
msgid "What functionality is generally available?"
msgstr ""
#: src/options/options.js:405
#: src/options/options.js:416
msgid "White"
msgstr ""
@ -2999,7 +3009,7 @@ msgstr ""
msgid "Year"
msgstr ""
#: src/options/options.js:398
#: src/options/options.js:409
msgid "Yellow"
msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -50,14 +50,17 @@ export const FormatAv1 = "av01";
export const FormatAvc = "avc";
export const FormatHevc = "hevc";
export const FormatWebM = "webm";
export const FormatGif = "gif";
export const FormatJpeg = "jpg";
export const FormatPng = "png";
export const FormatSvg = "svg";
export const FormatGif = "gif";
export const MediaImage = "image";
export const MediaAnimated = "animated";
export const MediaSidecar = "sidecar";
export const MediaVideo = "video";
export const MediaLive = "live";
export const MediaRaw = "raw";
export const MediaAnimated = "animated";
export const MediaLive = "live";
export const MediaVideo = "video";
export const MediaVector = "vector";
export const MediaSidecar = "sidecar";
export const YearUnknown = -1;
export const MonthUnknown = -1;
export const DayUnknown = -1;
@ -522,7 +525,7 @@ export class Photo extends RestModel {
return file;
}
return files.find((f) => f.FileType === FormatJpeg);
return files.find((f) => f.FileType === FormatJpeg || f.FileType === FormatPng);
});
jpegFiles() {
@ -530,7 +533,7 @@ export class Photo extends RestModel {
return [this];
}
return this.Files.filter((f) => f.FileType === FormatJpeg);
return this.Files.filter((f) => f.FileType === FormatJpeg || f.FileType === FormatPng);
}
mainFileHash() {
@ -784,6 +787,45 @@ export class Photo extends RestModel {
}
}
vectorFile() {
if (!this.Files) {
return this;
}
return this.Files.find((f) => f.MediaType === MediaVector || f.FileType === FormatSvg);
}
getVectorInfo = () => {
let file = this.vectorFile() || this.mainFile();
return this.generateVectorInfo(file);
};
generateVectorInfo = memoizeOne((file) => {
if (!file) {
return $gettext("Vector");
}
const info = [];
if (file.MediaType === MediaVector) {
info.push(file.FileType.toUpperCase());
if (file.Software) {
info.push(file.Software);
}
this.addSizeInfo(file, info);
} else {
info.push($gettext("Vector"));
if (file.Width && file.Height) {
info.push(file.Width + " × " + file.Height);
}
}
return info.join(", ");
});
getVideoInfo = () => {
let file = this.videoFile() || this.mainFile();
return this.generateVideoInfo(file);

View file

@ -2,7 +2,14 @@ import { timeZonesNames } from "@vvo/tzdb";
import { $gettext } from "common/vm";
import { Info } from "luxon";
import { config } from "app/session";
import { MediaAnimated, MediaImage, MediaLive, MediaRaw, MediaVideo } from "model/photo";
import {
MediaImage,
MediaLive,
MediaVideo,
MediaAnimated,
MediaVector,
MediaRaw,
} from "model/photo";
export const TimeZones = () =>
[
@ -303,14 +310,14 @@ export const PhotoTypes = () => [
text: $gettext("Image"),
value: MediaImage,
},
{
text: $gettext("Animated"),
value: MediaAnimated,
},
{
text: $gettext("Raw"),
value: MediaRaw,
},
{
text: $gettext("Animated"),
value: MediaAnimated,
},
{
text: $gettext("Live"),
value: MediaLive,
@ -319,6 +326,10 @@ export const PhotoTypes = () => [
text: $gettext("Video"),
value: MediaVideo,
},
{
text: $gettext("Vector"),
value: MediaVector,
},
];
export const Timeouts = () => [

View file

@ -266,7 +266,7 @@
class="ma-0 pa-0 input-private"
color="secondary-dark"
:label="$gettext('Disable Darktable')"
:hint="$gettext('Don\'t use Darktable to convert RAW files.')"
:hint="$gettext('Don\'t use Darktable to convert RAW images.')"
prepend-icon="image_not_supported"
persistent-hint
@change="onChange"
@ -281,7 +281,7 @@
class="ma-0 pa-0 input-private"
color="secondary-dark"
:label="$gettext('Disable RawTherapee')"
:hint="$gettext('Don\'t use RawTherapee to convert RAW files.')"
:hint="$gettext('Don\'t use RawTherapee to convert RAW images.')"
prepend-icon="image_not_supported"
persistent-hint
@change="onChange"

View file

@ -134,8 +134,8 @@ func GetThumb(router *gin.RouterGroup) {
return
}
// Find fallback if file is not a JPEG image.
if f.NoJPEG() {
// Find supported preview image if media file is not a JPEG or PNG.
if f.NoJPEG() && f.NoPNG() {
f, err = query.FileByPhotoUID(f.PhotoUID)
if err != nil {

View file

@ -56,7 +56,7 @@ func showConfigOptionsAction(ctx *cli.Context) error {
{Start: "PHOTOPRISM_HTTPS_PROXY", Title: "Proxy Servers"},
{Start: "PHOTOPRISM_DISABLE_TLS", Title: "Web Server"},
{Start: "PHOTOPRISM_DATABASE_DRIVER", Title: "Database Connection"},
{Start: "PHOTOPRISM_DARKTABLE_BIN", Title: "File Converters"},
{Start: "PHOTOPRISM_SIPS_BIN", Title: "File Converters"},
{Start: "PHOTOPRISM_DOWNLOAD_TOKEN", Title: "Security Tokens"},
{Start: "PHOTOPRISM_THUMB_COLOR", Title: "Image Quality"},
{Start: "PHOTOPRISM_FACE_SIZE", Title: "Face Recognition",

View file

@ -113,7 +113,7 @@ type ClientDisable struct {
FFmpeg bool `json:"ffmpeg"`
Raw bool `json:"raw"`
Darktable bool `json:"darktable"`
Rawtherapee bool `json:"rawtherapee"`
RawTherapee bool `json:"rawtherapee"`
Sips bool `json:"sips"`
HeifConvert bool `json:"heifconvert"`
TensorFlow bool `json:"tensorflow"`
@ -224,7 +224,7 @@ func (c *Config) ClientPublic() ClientConfig {
FFmpeg: true,
Raw: true,
Darktable: true,
Rawtherapee: true,
RawTherapee: true,
Sips: true,
HeifConvert: true,
TensorFlow: true,
@ -304,7 +304,7 @@ func (c *Config) ClientShare() ClientConfig {
FFmpeg: true,
Raw: true,
Darktable: true,
Rawtherapee: true,
RawTherapee: true,
Sips: true,
HeifConvert: true,
TensorFlow: true,
@ -391,7 +391,7 @@ func (c *Config) ClientUser(withSettings bool) ClientConfig {
FFmpeg: c.DisableFFmpeg(),
Raw: c.DisableRaw(),
Darktable: c.DisableDarktable(),
Rawtherapee: c.DisableRawtherapee(),
RawTherapee: c.DisableRawTherapee(),
Sips: c.DisableSips(),
HeifConvert: c.DisableHeifConvert(),
TensorFlow: c.DisableTensorFlow(),
@ -483,8 +483,8 @@ func (c *Config) ClientUser(withSettings bool) ClientConfig {
Table("photos").
Select("SUM(photo_type = 'video' AND photo_quality > -1 AND photo_private = 0) AS videos, " +
"SUM(photo_type = 'live' AND photo_quality > -1 AND photo_private = 0) AS live, " +
"SUM(photo_quality = -1) AS hidden, SUM(photo_type IN ('image','raw','animated') AND photo_private = 0 AND photo_quality > -1) AS photos, " +
"SUM(photo_type IN ('image','raw','live','animated') AND photo_quality < 3 AND photo_quality > -1 AND photo_private = 0) AS review, " +
"SUM(photo_quality = -1) AS hidden, SUM(photo_type IN ('image','animated','vector','raw') AND photo_private = 0 AND photo_quality > -1) AS photos, " +
"SUM(photo_type IN ('image','live','animated','vector','raw') AND photo_quality < 3 AND photo_quality > -1 AND photo_private = 0) AS review, " +
"SUM(photo_favorite = 1 AND photo_private = 0 AND photo_quality > -1) AS favorites, " +
"SUM(photo_private = 1 AND photo_quality > -1) AS private").
Where("photos.id NOT IN (SELECT photo_id FROM files WHERE file_primary = 1 AND (file_missing = 1 OR file_error <> ''))").

View file

@ -222,7 +222,7 @@ func (c *Config) Init() error {
// Show warning if less than 1 GB RAM was detected.
if LowMem {
log.Warnf(`config: less than %d GB of memory detected, please upgrade if server becomes unstable or unresponsive`, MinMem/Gigabyte)
log.Warnf("config: tensorflow as well as indexing and conversion of RAW files have been disabled automatically")
log.Warnf("config: tensorflow as well as indexing and conversion of RAW images have been disabled automatically")
}
// Show swap info.

View file

@ -0,0 +1,31 @@
package config
// VectorEnabled checks if indexing and conversion of vector graphics is enabled.
func (c *Config) VectorEnabled() bool {
return !c.DisableVector()
}
// RsvgConvertBin returns the rsvg-convert executable file name.
func (c *Config) RsvgConvertBin() string {
return findBin(c.options.RsvgConvertBin, "rsvg-convert")
}
// RsvgConvertEnabled checks if rsvg-convert is enabled for SVG conversion.
func (c *Config) RsvgConvertEnabled() bool {
return !c.DisableVector()
}
// ImageMagickBin returns the ImageMagick "convert" executable file name.
func (c *Config) ImageMagickBin() string {
return findBin(c.options.ImageMagickBin, "convert")
}
// ImageMagickBlacklist returns the ImageMagick file extension blacklist.
func (c *Config) ImageMagickBlacklist() string {
return c.options.ImageMagickBlacklist
}
// ImageMagickEnabled checks if ImageMagick can be used for converting media files.
func (c *Config) ImageMagickEnabled() bool {
return !c.DisableImageMagick()
}

View file

@ -84,17 +84,7 @@ func (c *Config) DisableFFmpeg() bool {
return c.options.DisableFFmpeg
}
// DisableRaw checks if indexing and conversion of RAW files is disabled.
func (c *Config) DisableRaw() bool {
if LowMem && !c.options.DisableRaw {
c.options.DisableRaw = true
return true
}
return c.options.DisableRaw
}
// DisableDarktable checks if conversion of RAW files with Darktable is disabled.
// DisableDarktable checks if conversion of RAW images with Darktable is disabled.
func (c *Config) DisableDarktable() bool {
if c.DisableRaw() || c.options.DisableDarktable {
return true
@ -105,26 +95,26 @@ func (c *Config) DisableDarktable() bool {
return c.options.DisableDarktable
}
// DisableRawtherapee checks if conversion of RAW files with Rawtherapee is disabled.
func (c *Config) DisableRawtherapee() bool {
if c.DisableRaw() || c.options.DisableRawtherapee {
// DisableRawTherapee checks if conversion of RAW images with RawTherapee is disabled.
func (c *Config) DisableRawTherapee() bool {
if c.DisableRaw() || c.options.DisableRawTherapee {
return true
} else if c.RawtherapeeBin() == "" {
c.options.DisableRawtherapee = true
} else if c.RawTherapeeBin() == "" {
c.options.DisableRawTherapee = true
}
return c.options.DisableRawtherapee
return c.options.DisableRawTherapee
}
// DisableSips checks if conversion of RAW files with SIPS is disabled.
func (c *Config) DisableSips() bool {
if c.options.DisableSips {
// DisableImageMagick checks if conversion of files with ImageMagick is disabled.
func (c *Config) DisableImageMagick() bool {
if c.options.DisableImageMagick {
return true
} else if c.SipsBin() == "" {
c.options.DisableSips = true
} else if c.ImageMagickBin() == "" {
c.options.DisableImageMagick = true
}
return c.options.DisableSips
return c.options.DisableImageMagick
}
// DisableHeifConvert checks if heif-convert is disabled for HEIF conversion.
@ -137,3 +127,44 @@ func (c *Config) DisableHeifConvert() bool {
return c.options.DisableHeifConvert
}
// DisableSips checks if conversion of RAW images with SIPS is disabled.
func (c *Config) DisableSips() bool {
if c.options.DisableSips {
return true
} else if c.SipsBin() == "" {
c.options.DisableSips = true
}
return c.options.DisableSips
}
// DisableVector checks if vector graphics support is disabled.
func (c *Config) DisableVector() bool {
if c.options.DisableVector || !c.Sponsor() {
return true
} else if c.RsvgConvertBin() == "" && c.ImageMagickBin() == "" {
c.options.DisableVector = true
}
return c.options.DisableVector
}
// DisableRsvgConvert checks if rsvg-convert is disabled for SVG conversion.
func (c *Config) DisableRsvgConvert() bool {
if c.options.DisableVector || !c.Sponsor() {
return true
}
return c.RsvgConvertBin() == ""
}
// DisableRaw checks if indexing and conversion of RAW images is disabled.
func (c *Config) DisableRaw() bool {
if LowMem && !c.options.DisableRaw {
c.options.DisableRaw = true
return true
}
return c.options.DisableRaw
}

View file

@ -91,26 +91,6 @@ func TestConfig_DisableClassification(t *testing.T) {
assert.False(t, c.DisableClassification())
}
func TestConfig_DisableRaw(t *testing.T) {
c := NewConfig(CliTestContext())
assert.False(t, c.DisableRaw())
c.options.DisableRaw = true
assert.True(t, c.DisableRaw())
assert.True(t, c.DisableDarktable())
assert.True(t, c.DisableRawtherapee())
c.options.DisableRaw = false
assert.False(t, c.DisableRaw())
c.options.DisableDarktable = true
c.options.DisableRawtherapee = true
assert.False(t, c.DisableRaw())
c.options.DisableDarktable = false
c.options.DisableRawtherapee = false
assert.False(t, c.DisableRaw())
assert.False(t, c.DisableDarktable())
assert.False(t, c.DisableRawtherapee())
}
func TestConfig_DisableDarktable(t *testing.T) {
c := NewConfig(CliTestContext())
missing := c.DarktableBin() == ""
@ -126,19 +106,34 @@ func TestConfig_DisableDarktable(t *testing.T) {
assert.Equal(t, missing, c.DisableDarktable())
}
func TestConfig_DisableRawtherapee(t *testing.T) {
func TestConfig_DisableRawTherapee(t *testing.T) {
c := NewConfig(CliTestContext())
missing := c.RawtherapeeBin() == ""
missing := c.RawTherapeeBin() == ""
assert.Equal(t, missing, c.DisableRawtherapee())
assert.Equal(t, missing, c.DisableRawTherapee())
c.options.DisableRaw = true
assert.True(t, c.DisableRawtherapee())
assert.True(t, c.DisableRawTherapee())
c.options.DisableRaw = false
assert.Equal(t, missing, c.DisableRawtherapee())
c.options.DisableRawtherapee = true
assert.True(t, c.DisableRawtherapee())
c.options.DisableRawtherapee = false
assert.Equal(t, missing, c.DisableRawtherapee())
assert.Equal(t, missing, c.DisableRawTherapee())
c.options.DisableRawTherapee = true
assert.True(t, c.DisableRawTherapee())
c.options.DisableRawTherapee = false
assert.Equal(t, missing, c.DisableRawTherapee())
}
func TestConfig_DisableImageMagick(t *testing.T) {
c := NewConfig(CliTestContext())
missing := c.ImageMagickBin() == ""
assert.Equal(t, missing, c.DisableImageMagick())
c.options.DisableRaw = true
assert.Equal(t, missing, c.DisableImageMagick())
c.options.DisableRaw = false
assert.Equal(t, missing, c.DisableImageMagick())
c.options.DisableImageMagick = true
assert.True(t, c.DisableImageMagick())
c.options.DisableImageMagick = false
assert.Equal(t, missing, c.DisableImageMagick())
}
func TestConfig_DisableSips(t *testing.T) {
@ -151,3 +146,33 @@ func TestConfig_DisableSips(t *testing.T) {
c.options.DisableSips = false
assert.Equal(t, missing, c.DisableSips())
}
func TestConfig_DisableVector(t *testing.T) {
c := NewConfig(CliTestContext())
assert.Equal(t, c.Sponsor(), !c.DisableVector())
c.options.DisableVector = true
assert.True(t, c.DisableVector())
c.options.DisableVector = false
assert.Equal(t, c.Sponsor(), !c.DisableVector())
}
func TestConfig_DisableRaw(t *testing.T) {
c := NewConfig(CliTestContext())
assert.False(t, c.DisableRaw())
c.options.DisableRaw = true
assert.True(t, c.DisableRaw())
assert.True(t, c.DisableDarktable())
assert.True(t, c.DisableRawTherapee())
c.options.DisableRaw = false
assert.False(t, c.DisableRaw())
c.options.DisableDarktable = true
c.options.DisableRawTherapee = true
assert.False(t, c.DisableRaw())
c.options.DisableDarktable = false
c.options.DisableRawTherapee = false
assert.False(t, c.DisableRaw())
assert.False(t, c.DisableDarktable())
assert.False(t, c.DisableRawTherapee())
}

View file

@ -6,7 +6,7 @@ import (
"github.com/photoprism/photoprism/pkg/fs"
)
// RawEnabled checks if indexing and conversion of RAW files is enabled.
// RawEnabled checks if indexing and conversion of RAW images is enabled.
func (c *Config) RawEnabled() bool {
return !c.DisableRaw()
}
@ -71,19 +71,19 @@ func (c *Config) DarktableEnabled() bool {
return !c.DisableDarktable()
}
// RawtherapeeBin returns the rawtherapee-cli executable file name.
func (c *Config) RawtherapeeBin() string {
return findBin(c.options.RawtherapeeBin, "rawtherapee-cli")
// RawTherapeeBin returns the rawtherapee-cli executable file name.
func (c *Config) RawTherapeeBin() string {
return findBin(c.options.RawTherapeeBin, "rawtherapee-cli")
}
// RawtherapeeBlacklist returns the RawTherapee file extension blacklist.
func (c *Config) RawtherapeeBlacklist() string {
return c.options.RawtherapeeBlacklist
// RawTherapeeBlacklist returns the RawTherapee file extension blacklist.
func (c *Config) RawTherapeeBlacklist() string {
return c.options.RawTherapeeBlacklist
}
// RawtherapeeEnabled checks if Rawtherapee is enabled for RAW conversion.
func (c *Config) RawtherapeeEnabled() bool {
return !c.DisableRawtherapee()
// RawTherapeeEnabled checks if RawTherapee is enabled for RAW conversion.
func (c *Config) RawTherapeeEnabled() bool {
return !c.DisableRawTherapee()
}
// SipsEnabled checks if SIPS is enabled for RAW conversion.

View file

@ -13,27 +13,27 @@ func TestConfig_RawEnabled(t *testing.T) {
assert.NotEqual(t, c.DisableRaw(), c.RawEnabled())
}
func TestConfig_RawtherapeeBin(t *testing.T) {
func TestConfig_RawTherapeeBin(t *testing.T) {
c := NewConfig(CliTestContext())
assert.True(t, strings.Contains(c.RawtherapeeBin(), "/bin/rawtherapee-cli"))
assert.True(t, strings.Contains(c.RawTherapeeBin(), "/bin/rawtherapee-cli"))
}
func TestConfig_RawtherapeeBlacklist(t *testing.T) {
func TestConfig_RawTherapeeBlacklist(t *testing.T) {
c := NewConfig(CliTestContext())
c.options.RawtherapeeBlacklist = "foo,bar"
assert.Equal(t, "foo,bar", c.RawtherapeeBlacklist())
c.options.RawtherapeeBlacklist = ""
assert.Equal(t, "", c.RawtherapeeBlacklist())
c.options.RawTherapeeBlacklist = "foo,bar"
assert.Equal(t, "foo,bar", c.RawTherapeeBlacklist())
c.options.RawTherapeeBlacklist = ""
assert.Equal(t, "", c.RawTherapeeBlacklist())
}
func TestConfig_RawtherapeeEnabled(t *testing.T) {
func TestConfig_RawTherapeeEnabled(t *testing.T) {
c := NewConfig(CliTestContext())
assert.True(t, c.RawtherapeeEnabled())
assert.True(t, c.RawTherapeeEnabled())
c.options.DisableRawtherapee = true
assert.False(t, c.RawtherapeeEnabled())
c.options.DisableRawTherapee = true
assert.False(t, c.RawTherapeeEnabled())
}
func TestConfig_DarktableBin(t *testing.T) {
@ -88,3 +88,18 @@ func TestConfig_HeifConvertEnabled(t *testing.T) {
c.options.DisableHeifConvert = true
assert.False(t, c.HeifConvertEnabled())
}
func TestConfig_RsvgConvertBin(t *testing.T) {
c := NewConfig(CliTestContext())
bin := c.RsvgConvertBin()
assert.Contains(t, bin, "/bin/rsvg-convert")
}
func TestConfig_RsvgConvertEnabled(t *testing.T) {
c := NewConfig(CliTestContext())
assert.True(t, c.RsvgConvertEnabled())
c.options.DisableVector = true
assert.False(t, c.RsvgConvertEnabled())
}

View file

@ -17,6 +17,17 @@ func (c *Config) JpegSize() int {
return c.options.JpegSize
}
// PngSize returns the size limit for automatically converted files in `PIXELS` (720-30000).
func (c *Config) PngSize() int {
if c.options.PngSize < 720 {
return 720
} else if c.options.PngSize > 30000 {
return 30000
}
return c.options.PngSize
}
// JpegQuality returns the jpeg image quality as thumb.Quality (25-100).
func (c *Config) JpegQuality() thumb.Quality {
return thumb.ParseQuality(c.options.JpegQuality)

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