Index: Don't stack files based on XMP InstanceID
Signed-off-by: Michael Mayer <michael@liquidbytes.net>
This commit is contained in:
parent
6c03ad73fd
commit
6e2849fba2
17 changed files with 136 additions and 116 deletions
10
Makefile
10
Makefile
|
@ -1,9 +1,17 @@
|
||||||
|
.PHONY: ;
|
||||||
|
.SILENT: ; # no need for @
|
||||||
|
.ONESHELL: ; # recipes execute in same shell
|
||||||
|
.NOTPARALLEL: ; # wait for target to finish
|
||||||
|
.EXPORT_ALL_VARIABLES: ; # send all vars to shell
|
||||||
|
|
||||||
export GO111MODULE=on
|
export GO111MODULE=on
|
||||||
|
|
||||||
GOIMPORTS=goimports
|
GOIMPORTS=goimports
|
||||||
BINARY_NAME=photoprism
|
BINARY_NAME=photoprism
|
||||||
DOCKER_TAG=`date -u +%Y%m%d`
|
DOCKER_TAG=`date -u +%Y%m%d`
|
||||||
|
|
||||||
HASRICHGO := $(shell which richgo)
|
HASRICHGO := $(shell which richgo)
|
||||||
|
|
||||||
ifdef HASRICHGO
|
ifdef HASRICHGO
|
||||||
GOTEST=richgo test
|
GOTEST=richgo test
|
||||||
else
|
else
|
||||||
|
@ -67,7 +75,7 @@ clean-local-cache:
|
||||||
clean-local-config:
|
clean-local-config:
|
||||||
rm -f ~/.photoprism/storage/settings/*
|
rm -f ~/.photoprism/storage/settings/*
|
||||||
dep-js:
|
dep-js:
|
||||||
(cd frontend && npm install --silent)
|
(cd frontend && npm install --silent && npm audit fix)
|
||||||
dep-go:
|
dep-go:
|
||||||
go build -v ./...
|
go build -v ./...
|
||||||
dep-upgrade:
|
dep-upgrade:
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-07-29 13:42+0000\n"
|
"POT-Creation-Date: 2020-08-17 19:27+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
|
|
@ -128,7 +128,7 @@ services:
|
||||||
|
|
||||||
photoprism-db:
|
photoprism-db:
|
||||||
image: mariadb:10.5
|
image: mariadb:10.5
|
||||||
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=1024 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=50
|
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=50
|
||||||
expose:
|
expose:
|
||||||
- "4001"
|
- "4001"
|
||||||
volumes:
|
volumes:
|
||||||
|
|
|
@ -62,7 +62,7 @@ services:
|
||||||
|
|
||||||
photoprism-db:
|
photoprism-db:
|
||||||
image: mariadb:10.5
|
image: mariadb:10.5
|
||||||
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=1024 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=50
|
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=50
|
||||||
expose:
|
expose:
|
||||||
- "4001"
|
- "4001"
|
||||||
ports:
|
ports:
|
||||||
|
|
|
@ -63,7 +63,7 @@ services:
|
||||||
# photoprism-db:
|
# photoprism-db:
|
||||||
# image: mariadb:10.5 # Alternatively mysql:8.0
|
# image: mariadb:10.5 # Alternatively mysql:8.0
|
||||||
# restart: unless-stopped
|
# restart: unless-stopped
|
||||||
# command: mysqld --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=1024 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=50
|
# command: mysqld --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=50
|
||||||
# volumes:
|
# volumes:
|
||||||
# - "/var/lib/mysql"
|
# - "/var/lib/mysql"
|
||||||
# environment:
|
# environment:
|
||||||
|
|
|
@ -61,7 +61,7 @@ services:
|
||||||
# photoprism-db:
|
# photoprism-db:
|
||||||
# image: mariadb:10.5 # Alternatively mysql:8.0
|
# image: mariadb:10.5 # Alternatively mysql:8.0
|
||||||
# restart: unless-stopped
|
# restart: unless-stopped
|
||||||
# command: mysqld --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=1024 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=50
|
# command: mysqld --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=50
|
||||||
# volumes:
|
# volumes:
|
||||||
# - "/var/lib/mysql"
|
# - "/var/lib/mysql"
|
||||||
# environment:
|
# environment:
|
||||||
|
|
32
frontend/package-lock.json
generated
32
frontend/package-lock.json
generated
|
@ -2055,9 +2055,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ajv": {
|
"ajv": {
|
||||||
"version": "6.12.3",
|
"version": "6.12.4",
|
||||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
|
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz",
|
||||||
"integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
|
"integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"fast-deep-equal": "^3.1.1",
|
"fast-deep-equal": "^3.1.1",
|
||||||
"fast-json-stable-stringify": "^2.0.0",
|
"fast-json-stable-stringify": "^2.0.0",
|
||||||
|
@ -5069,9 +5069,9 @@
|
||||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
||||||
},
|
},
|
||||||
"eslint": {
|
"eslint": {
|
||||||
"version": "7.6.0",
|
"version": "7.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.7.0.tgz",
|
||||||
"integrity": "sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w==",
|
"integrity": "sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/code-frame": "^7.0.0",
|
"@babel/code-frame": "^7.0.0",
|
||||||
"ajv": "^6.10.0",
|
"ajv": "^6.10.0",
|
||||||
|
@ -8882,9 +8882,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"minizlib": {
|
"minizlib": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
|
||||||
"integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==",
|
"integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"minipass": "^3.0.0",
|
"minipass": "^3.0.0",
|
||||||
"yallist": "^4.0.0"
|
"yallist": "^4.0.0"
|
||||||
|
@ -11082,9 +11082,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pubsub-js": {
|
"pubsub-js": {
|
||||||
"version": "1.8.0",
|
"version": "1.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/pubsub-js/-/pubsub-js-1.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/pubsub-js/-/pubsub-js-1.9.0.tgz",
|
||||||
"integrity": "sha512-z/61CZMA+jaQpBU0QSWkC4w6lX3tPbOdtl1h2UWac4sn6dkWfx7ND75SsN6U0amczdI66PqfuXXD0Ad7tnbaQg=="
|
"integrity": "sha512-bBGaOnAdkn3jhZC71mhjNB4mxQAOM99GTh/NoVuf/VXWUuQAZJGWIkEJlkXi0ACdKx3z65u5qilWaE5G4mMQOw=="
|
||||||
},
|
},
|
||||||
"pug": {
|
"pug": {
|
||||||
"version": "2.0.4",
|
"version": "2.0.4",
|
||||||
|
@ -12984,14 +12984,14 @@
|
||||||
"integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
|
"integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
|
||||||
},
|
},
|
||||||
"tar": {
|
"tar": {
|
||||||
"version": "6.0.2",
|
"version": "6.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz",
|
||||||
"integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==",
|
"integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"chownr": "^2.0.0",
|
"chownr": "^2.0.0",
|
||||||
"fs-minipass": "^2.0.0",
|
"fs-minipass": "^2.0.0",
|
||||||
"minipass": "^3.0.0",
|
"minipass": "^3.0.0",
|
||||||
"minizlib": "^2.1.0",
|
"minizlib": "^2.1.1",
|
||||||
"mkdirp": "^1.0.3",
|
"mkdirp": "^1.0.3",
|
||||||
"yallist": "^4.0.0"
|
"yallist": "^4.0.0"
|
||||||
},
|
},
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
"@babel/runtime": "^7.11.2",
|
"@babel/runtime": "^7.11.2",
|
||||||
"@fortawesome/fontawesome-free": "^5.14.0",
|
"@fortawesome/fontawesome-free": "^5.14.0",
|
||||||
"acorn": "^6.4.1",
|
"acorn": "^6.4.1",
|
||||||
"ajv": "^6.12.3",
|
"ajv": "^6.12.4",
|
||||||
"autoprefixer": "^9.8.6",
|
"autoprefixer": "^9.8.6",
|
||||||
"axios": "^0.19.2",
|
"axios": "^0.19.2",
|
||||||
"axios-mock-adapter": "^1.18.2",
|
"axios-mock-adapter": "^1.18.2",
|
||||||
|
@ -49,7 +49,7 @@
|
||||||
"css-loader": "^2.1.1",
|
"css-loader": "^2.1.1",
|
||||||
"cssnano": "^4.1.10",
|
"cssnano": "^4.1.10",
|
||||||
"easygettext": "^2.14.0",
|
"easygettext": "^2.14.0",
|
||||||
"eslint": "^7.6.0",
|
"eslint": "^7.7.0",
|
||||||
"eslint-config-standard": "^14.1.1",
|
"eslint-config-standard": "^14.1.1",
|
||||||
"eslint-formatter-pretty": "^4.0.0",
|
"eslint-formatter-pretty": "^4.0.0",
|
||||||
"eslint-friendly-formatter": "^4.0.1",
|
"eslint-friendly-formatter": "^4.0.1",
|
||||||
|
@ -93,7 +93,7 @@
|
||||||
"postcss-preset-env": "^6.7.0",
|
"postcss-preset-env": "^6.7.0",
|
||||||
"postcss-reporter": "^6.0.1",
|
"postcss-reporter": "^6.0.1",
|
||||||
"postcss-url": "^8.0.0",
|
"postcss-url": "^8.0.0",
|
||||||
"pubsub-js": "^1.8.0",
|
"pubsub-js": "^1.9.0",
|
||||||
"puppeteer-core": "^5.2.1",
|
"puppeteer-core": "^5.2.1",
|
||||||
"regenerator-runtime": "^0.13.7",
|
"regenerator-runtime": "^0.13.7",
|
||||||
"resolve-url-loader": "^3.1.1",
|
"resolve-url-loader": "^3.1.1",
|
||||||
|
@ -104,7 +104,7 @@
|
||||||
"style-loader": "^0.23.1",
|
"style-loader": "^0.23.1",
|
||||||
"sugarss": "^2.0.0",
|
"sugarss": "^2.0.0",
|
||||||
"svg-url-loader": "^5.0.1",
|
"svg-url-loader": "^5.0.1",
|
||||||
"tar": "^6.0.2",
|
"tar": "^6.0.5",
|
||||||
"truncate": "^2.1.0",
|
"truncate": "^2.1.0",
|
||||||
"url-loader": "^1.1.2",
|
"url-loader": "^1.1.2",
|
||||||
"vue": "^2.6.11",
|
"vue": "^2.6.11",
|
||||||
|
|
|
@ -61,13 +61,19 @@
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td title="Unique ID">
|
||||||
<translate>UID</translate>
|
UID
|
||||||
</td>
|
</td>
|
||||||
<td>{{ file.UID | uppercase }}</td>
|
<td>{{ file.UID | uppercase }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr v-if="file.InstanceID" title="XMP">
|
||||||
<td>
|
<td>
|
||||||
|
<translate>Instance ID</translate>
|
||||||
|
</td>
|
||||||
|
<td>{{ file.InstanceID | uppercase }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td title="SHA-1">
|
||||||
<translate>Hash</translate>
|
<translate>Hash</translate>
|
||||||
</td>
|
</td>
|
||||||
<td>{{ file.Hash }}</td>
|
<td>{{ file.Hash }}</td>
|
||||||
|
|
|
@ -11,7 +11,7 @@ msgid "%{n} albums found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/album/photos.vue:362
|
#: src/pages/album/photos.vue:362
|
||||||
#: src/share/photos.vue:405
|
#: src/share/photos.vue:410
|
||||||
msgid "%{n} entries found"
|
msgid "%{n} entries found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ msgstr ""
|
||||||
msgid "Add to album"
|
msgid "Add to album"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:138
|
#: src/dialog/photo/files.vue:147
|
||||||
msgid "Added"
|
msgid "Added"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ msgstr ""
|
||||||
msgid "Album"
|
msgid "Album"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:115
|
#: src/component/album/toolbar.vue:120
|
||||||
#: src/dialog/photo/album.vue:61
|
#: src/dialog/photo/album.vue:61
|
||||||
#: src/pages/albums.vue:256
|
#: src/pages/albums.vue:256
|
||||||
#: src/share/albums.vue:154
|
#: src/share/albums.vue:154
|
||||||
|
@ -157,7 +157,7 @@ msgid "All %{n} albums loaded"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/album/photos.vue:251
|
#: src/pages/album/photos.vue:251
|
||||||
#: src/share/photos.vue:294
|
#: src/share/photos.vue:299
|
||||||
msgid "All %{n} entries loaded"
|
msgid "All %{n} entries loaded"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ msgstr ""
|
||||||
msgid "All %{n} labels loaded"
|
msgid "All %{n} labels loaded"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:79
|
#: src/component/album/toolbar.vue:84
|
||||||
#: src/component/photo/toolbar.vue:174
|
#: src/component/photo/toolbar.vue:174
|
||||||
msgid "All Cameras"
|
msgid "All Cameras"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -181,7 +181,7 @@ msgstr ""
|
||||||
msgid "All Colors"
|
msgid "All Colors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:83
|
#: src/component/album/toolbar.vue:88
|
||||||
#: src/component/photo/toolbar.vue:173
|
#: src/component/photo/toolbar.vue:173
|
||||||
msgid "All Countries"
|
msgid "All Countries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -276,7 +276,7 @@ msgstr ""
|
||||||
msgid "Artist"
|
msgid "Artist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:108
|
#: src/dialog/photo/files.vue:117
|
||||||
msgid "Aspect Ratio"
|
msgid "Aspect Ratio"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -322,7 +322,7 @@ msgstr ""
|
||||||
msgid "Calendar"
|
msgid "Calendar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:120
|
#: src/component/album/toolbar.vue:125
|
||||||
#: src/component/photo/list.vue:138
|
#: src/component/photo/list.vue:138
|
||||||
#: src/component/photo/toolbar.vue:201
|
#: src/component/photo/toolbar.vue:201
|
||||||
#: src/dialog/album/edit.vue:126
|
#: src/dialog/album/edit.vue:126
|
||||||
|
@ -337,7 +337,7 @@ msgstr ""
|
||||||
|
|
||||||
#: src/pages/album/photos.vue:257
|
#: src/pages/album/photos.vue:257
|
||||||
#: src/pages/photos.vue:292
|
#: src/pages/photos.vue:292
|
||||||
#: src/share/photos.vue:300
|
#: src/share/photos.vue:305
|
||||||
msgid "Can't load more, limit reached"
|
msgid "Can't load more, limit reached"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -356,12 +356,12 @@ msgstr ""
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:94
|
#: src/component/album/toolbar.vue:99
|
||||||
#: src/component/photo/toolbar.vue:184
|
#: src/component/photo/toolbar.vue:184
|
||||||
msgid "Cards"
|
msgid "Cards"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:122
|
#: src/component/album/toolbar.vue:127
|
||||||
#: src/component/photo/toolbar.vue:206
|
#: src/component/photo/toolbar.vue:206
|
||||||
#: src/dialog/album/edit.vue:128
|
#: src/dialog/album/edit.vue:128
|
||||||
#: src/dialog/photo/details.vue:445
|
#: src/dialog/photo/details.vue:445
|
||||||
|
@ -391,7 +391,7 @@ msgstr ""
|
||||||
msgid "Chinese"
|
msgid "Chinese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:120
|
#: src/dialog/photo/files.vue:129
|
||||||
msgid "Chroma"
|
msgid "Chroma"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -401,7 +401,7 @@ msgstr ""
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:84
|
#: src/dialog/photo/files.vue:93
|
||||||
msgid "Codec"
|
msgid "Codec"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -490,7 +490,7 @@ msgstr ""
|
||||||
msgid "Couldn't find recently edited"
|
msgid "Couldn't find recently edited"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:119
|
#: src/component/album/toolbar.vue:124
|
||||||
#: src/component/photo/toolbar.vue:200
|
#: src/component/photo/toolbar.vue:200
|
||||||
#: src/dialog/album/edit.vue:125
|
#: src/dialog/album/edit.vue:125
|
||||||
#: src/dialog/photo/details.vue:440
|
#: src/dialog/photo/details.vue:440
|
||||||
|
@ -547,7 +547,7 @@ msgstr ""
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:116
|
#: src/component/album/toolbar.vue:121
|
||||||
#: src/dialog/album/edit.vue:122
|
#: src/dialog/album/edit.vue:122
|
||||||
#: src/dialog/photo/details.vue:462
|
#: src/dialog/photo/details.vue:462
|
||||||
msgid "Description"
|
msgid "Description"
|
||||||
|
@ -561,7 +561,7 @@ msgstr ""
|
||||||
msgid "Details"
|
msgid "Details"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:205
|
#: src/dialog/photo/files.vue:215
|
||||||
msgid "Dimensions"
|
msgid "Dimensions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -589,12 +589,15 @@ msgid "Done."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/clipboard.vue:115
|
#: src/component/album/clipboard.vue:115
|
||||||
|
#: src/component/album/toolbar.vue:89
|
||||||
#: src/component/file/clipboard.vue:78
|
#: src/component/file/clipboard.vue:78
|
||||||
#: src/component/label/clipboard.vue:91
|
#: src/component/label/clipboard.vue:91
|
||||||
#: src/component/photo/clipboard.vue:157
|
#: src/component/photo/clipboard.vue:157
|
||||||
|
#: src/dialog/photo/files.vue:33
|
||||||
#: src/pages/settings/general.vue:351
|
#: src/pages/settings/general.vue:351
|
||||||
#: src/share/album/clipboard.vue:70
|
#: src/share/album/clipboard.vue:70
|
||||||
#: src/share/photo/clipboard.vue:76
|
#: src/share/photo/clipboard.vue:76
|
||||||
|
#: src/share/photos.vue:68
|
||||||
msgid "Download"
|
msgid "Download"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -607,12 +610,14 @@ msgid "Download single files and zip archives."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/clipboard.vue:181
|
#: src/component/album/clipboard.vue:181
|
||||||
|
#: src/component/album/toolbar.vue:174
|
||||||
#: src/component/file/clipboard.vue:106
|
#: src/component/file/clipboard.vue:106
|
||||||
#: src/component/label/clipboard.vue:132
|
#: src/component/label/clipboard.vue:132
|
||||||
#: src/component/photo/clipboard.vue:223
|
#: src/component/photo/clipboard.vue:223
|
||||||
#: src/component/photo/viewer.vue:163
|
#: src/component/photo/viewer.vue:163
|
||||||
#: src/share/album/clipboard.vue:93
|
#: src/share/album/clipboard.vue:93
|
||||||
#: src/share/photo/clipboard.vue:97
|
#: src/share/photo/clipboard.vue:97
|
||||||
|
#: src/share/photos.vue:531
|
||||||
msgid "Downloading…"
|
msgid "Downloading…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -656,7 +661,7 @@ msgstr ""
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:126
|
#: src/dialog/photo/files.vue:135
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -792,13 +797,13 @@ msgstr ""
|
||||||
msgid "Grey"
|
msgid "Grey"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:105
|
#: src/component/album/toolbar.vue:110
|
||||||
#: src/component/photo/toolbar.vue:193
|
#: src/component/photo/toolbar.vue:193
|
||||||
#: src/dialog/album/edit.vue:115
|
#: src/dialog/album/edit.vue:115
|
||||||
msgid "Group by similarity"
|
msgid "Group by similarity"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:48
|
#: src/dialog/photo/files.vue:57
|
||||||
msgid "Hash"
|
msgid "Hash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -868,8 +873,8 @@ msgstr ""
|
||||||
msgid "Importing files to originals…"
|
msgid "Importing files to originals…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:140
|
#: src/dialog/photo/files.vue:149
|
||||||
#: src/dialog/photo/files.vue:146
|
#: src/dialog/photo/files.vue:155
|
||||||
msgid "in"
|
msgid "in"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -889,6 +894,10 @@ msgstr ""
|
||||||
msgid "Indexing media and sidecar files…"
|
msgid "Indexing media and sidecar files…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/dialog/photo/files.vue:51
|
||||||
|
msgid "Instance ID"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/account/edit.vue:362
|
#: src/dialog/account/edit.vue:362
|
||||||
msgid "Interval"
|
msgid "Interval"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -986,7 +995,7 @@ msgstr ""
|
||||||
msgid "Link"
|
msgid "Link"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:95
|
#: src/component/album/toolbar.vue:100
|
||||||
#: src/component/photo/toolbar.vue:185
|
#: src/component/photo/toolbar.vue:185
|
||||||
msgid "List"
|
msgid "List"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1035,7 +1044,7 @@ msgstr ""
|
||||||
msgid "Magenta"
|
msgid "Magenta"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:114
|
#: src/dialog/photo/files.vue:123
|
||||||
msgid "Main Color"
|
msgid "Main Color"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1051,7 +1060,7 @@ msgstr ""
|
||||||
msgid "Medium"
|
msgid "Medium"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:132
|
#: src/dialog/photo/files.vue:141
|
||||||
msgid "Missing"
|
msgid "Missing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1086,7 +1095,7 @@ msgid "More than 20 labels found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/album/photos.vue:365
|
#: src/pages/album/photos.vue:365
|
||||||
#: src/share/photos.vue:408
|
#: src/share/photos.vue:413
|
||||||
msgid "More than 50 entries found"
|
msgid "More than 50 entries found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1094,12 +1103,12 @@ msgstr ""
|
||||||
msgid "More than 50 results"
|
msgid "More than 50 results"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:93
|
#: src/component/album/toolbar.vue:98
|
||||||
#: src/component/photo/toolbar.vue:183
|
#: src/component/photo/toolbar.vue:183
|
||||||
msgid "Mosaic"
|
msgid "Mosaic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:106
|
#: src/component/album/toolbar.vue:111
|
||||||
#: src/component/photo/toolbar.vue:194
|
#: src/component/photo/toolbar.vue:194
|
||||||
#: src/dialog/album/edit.vue:116
|
#: src/dialog/album/edit.vue:116
|
||||||
msgid "Most relevant"
|
msgid "Most relevant"
|
||||||
|
@ -1126,15 +1135,15 @@ msgstr[1] ""
|
||||||
#: src/component/photo/list.vue:140
|
#: src/component/photo/list.vue:140
|
||||||
#: src/dialog/account/edit.vue:488
|
#: src/dialog/account/edit.vue:488
|
||||||
#: src/dialog/album/edit.vue:121
|
#: src/dialog/album/edit.vue:121
|
||||||
#: src/dialog/photo/files.vue:60
|
#: src/dialog/photo/files.vue:69
|
||||||
#: src/dialog/photo/files.vue:204
|
#: src/dialog/photo/files.vue:214
|
||||||
#: src/dialog/photo/info.vue:30
|
#: src/dialog/photo/info.vue:30
|
||||||
#: src/pages/login.vue:72
|
#: src/pages/login.vue:72
|
||||||
#: src/share/photo/list.vue:117
|
#: src/share/photo/list.vue:117
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:124
|
#: src/component/album/toolbar.vue:129
|
||||||
#: src/dialog/album/edit.vue:119
|
#: src/dialog/album/edit.vue:119
|
||||||
#: src/dialog/photo/labels.vue:117
|
#: src/dialog/photo/labels.vue:117
|
||||||
#: src/pages/labels.vue:199
|
#: src/pages/labels.vue:199
|
||||||
|
@ -1152,7 +1161,7 @@ msgstr ""
|
||||||
msgid "New Password"
|
msgid "New Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:102
|
#: src/component/album/toolbar.vue:107
|
||||||
#: src/component/photo/toolbar.vue:190
|
#: src/component/photo/toolbar.vue:190
|
||||||
#: src/dialog/album/edit.vue:112
|
#: src/dialog/album/edit.vue:112
|
||||||
msgid "Newest first"
|
msgid "Newest first"
|
||||||
|
@ -1172,7 +1181,7 @@ msgid "No albums found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/album/photos.vue:358
|
#: src/pages/album/photos.vue:358
|
||||||
#: src/share/photos.vue:401
|
#: src/share/photos.vue:406
|
||||||
msgid "No entries found"
|
msgid "No entries found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1250,7 +1259,7 @@ msgstr ""
|
||||||
msgid "Offline"
|
msgid "Offline"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:103
|
#: src/component/album/toolbar.vue:108
|
||||||
#: src/component/photo/toolbar.vue:191
|
#: src/component/photo/toolbar.vue:191
|
||||||
#: src/dialog/album/edit.vue:113
|
#: src/dialog/album/edit.vue:113
|
||||||
msgid "Oldest first"
|
msgid "Oldest first"
|
||||||
|
@ -1266,7 +1275,7 @@ msgid "One album found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/album/photos.vue:360
|
#: src/pages/album/photos.vue:360
|
||||||
#: src/share/photos.vue:403
|
#: src/share/photos.vue:408
|
||||||
msgid "One entry found"
|
msgid "One entry found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1298,7 +1307,7 @@ msgstr ""
|
||||||
msgid "Original file names will be stored and indexed."
|
msgid "Original file names will be stored and indexed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:66
|
#: src/dialog/photo/files.vue:75
|
||||||
#: src/dialog/photo/info.vue:36
|
#: src/dialog/photo/info.vue:36
|
||||||
msgid "Original Name"
|
msgid "Original Name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1392,7 +1401,7 @@ msgstr ""
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:96
|
#: src/dialog/photo/files.vue:105
|
||||||
msgid "Portrait"
|
msgid "Portrait"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1417,9 +1426,9 @@ msgstr ""
|
||||||
msgid "Preview"
|
msgid "Preview"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:33
|
#: src/dialog/photo/files.vue:36
|
||||||
#: src/dialog/photo/files.vue:90
|
#: src/dialog/photo/files.vue:99
|
||||||
#: src/dialog/photo/files.vue:198
|
#: src/dialog/photo/files.vue:208
|
||||||
msgid "Primary"
|
msgid "Primary"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1429,7 +1438,7 @@ msgstr ""
|
||||||
msgid "Private"
|
msgid "Private"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:102
|
#: src/dialog/photo/files.vue:111
|
||||||
msgid "Projection"
|
msgid "Projection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1461,13 +1470,13 @@ msgstr ""
|
||||||
msgid "Re-index all originals, including already indexed and unchanged files."
|
msgid "Re-index all originals, including already indexed and unchanged files."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:100
|
#: src/component/album/toolbar.vue:105
|
||||||
#: src/component/photo/toolbar.vue:188
|
#: src/component/photo/toolbar.vue:188
|
||||||
#: src/dialog/album/edit.vue:110
|
#: src/dialog/album/edit.vue:110
|
||||||
msgid "Recently added"
|
msgid "Recently added"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:101
|
#: src/component/album/toolbar.vue:106
|
||||||
#: src/component/photo/toolbar.vue:189
|
#: src/component/photo/toolbar.vue:189
|
||||||
#: src/dialog/album/edit.vue:111
|
#: src/dialog/album/edit.vue:111
|
||||||
msgid "Recently edited"
|
msgid "Recently edited"
|
||||||
|
@ -1545,7 +1554,7 @@ msgstr ""
|
||||||
msgid "Scans"
|
msgid "Scans"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:117
|
#: src/component/album/toolbar.vue:122
|
||||||
#: src/component/photo/toolbar.vue:198
|
#: src/component/photo/toolbar.vue:198
|
||||||
#: src/component/photo/toolbar.vue:33
|
#: src/component/photo/toolbar.vue:33
|
||||||
#: src/dialog/album/edit.vue:123
|
#: src/dialog/album/edit.vue:123
|
||||||
|
@ -1573,7 +1582,7 @@ msgstr ""
|
||||||
#: src/pages/photos.vue:314
|
#: src/pages/photos.vue:314
|
||||||
#: src/pages/places.vue:209
|
#: src/pages/places.vue:209
|
||||||
#: src/share/albums.vue:280
|
#: src/share/albums.vue:280
|
||||||
#: src/share/photos.vue:322
|
#: src/share/photos.vue:327
|
||||||
msgid "Search term too short"
|
msgid "Search term too short"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1670,8 +1679,8 @@ msgid "Similar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/account/edit.vue:261
|
#: src/dialog/account/edit.vue:261
|
||||||
#: src/dialog/photo/files.vue:72
|
#: src/dialog/photo/files.vue:81
|
||||||
#: src/dialog/photo/files.vue:206
|
#: src/dialog/photo/files.vue:216
|
||||||
msgid "Size"
|
msgid "Size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1679,13 +1688,13 @@ msgstr ""
|
||||||
msgid "Slow"
|
msgid "Slow"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:104
|
#: src/component/album/toolbar.vue:109
|
||||||
#: src/component/photo/toolbar.vue:192
|
#: src/component/photo/toolbar.vue:192
|
||||||
#: src/dialog/album/edit.vue:114
|
#: src/dialog/album/edit.vue:114
|
||||||
msgid "Sort by file name"
|
msgid "Sort by file name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:121
|
#: src/component/album/toolbar.vue:126
|
||||||
#: src/component/photo/toolbar.vue:207
|
#: src/component/photo/toolbar.vue:207
|
||||||
#: src/dialog/album/edit.vue:127
|
#: src/dialog/album/edit.vue:127
|
||||||
#: src/dialog/photo/details.vue:446
|
#: src/dialog/photo/details.vue:446
|
||||||
|
@ -1716,11 +1725,11 @@ msgstr ""
|
||||||
msgid "States"
|
msgid "States"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:208
|
#: src/dialog/photo/files.vue:218
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:54
|
#: src/dialog/photo/files.vue:63
|
||||||
msgid "Storage Folder"
|
msgid "Storage Folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1842,16 +1851,12 @@ msgid "Try again using other filters or keywords."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/account/edit.vue:620
|
#: src/dialog/account/edit.vue:620
|
||||||
#: src/dialog/photo/files.vue:78
|
#: src/dialog/photo/files.vue:87
|
||||||
#: src/dialog/photo/files.vue:207
|
#: src/dialog/photo/files.vue:217
|
||||||
#: src/dialog/photo/info.vue:15
|
#: src/dialog/photo/info.vue:15
|
||||||
msgid "Type"
|
msgid "Type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:42
|
|
||||||
msgid "UID"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/dialog/photo/details.vue:432
|
#: src/dialog/photo/details.vue:432
|
||||||
#: src/dialog/photo/info.vue:254
|
#: src/dialog/photo/info.vue:254
|
||||||
#: src/model/album.js:122
|
#: src/model/album.js:122
|
||||||
|
@ -1877,11 +1882,11 @@ msgstr ""
|
||||||
msgid "Unsorted"
|
msgid "Unsorted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:36
|
#: src/dialog/photo/files.vue:39
|
||||||
msgid "Unstack"
|
msgid "Unstack"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/files.vue:144
|
#: src/dialog/photo/files.vue:153
|
||||||
#: src/dialog/photo/info.vue:157
|
#: src/dialog/photo/info.vue:157
|
||||||
msgid "Updated"
|
msgid "Updated"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1959,7 +1964,7 @@ msgstr ""
|
||||||
msgid "Videos"
|
msgid "Videos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/component/album/toolbar.vue:118
|
#: src/component/album/toolbar.vue:123
|
||||||
#: src/component/photo/toolbar.vue:199
|
#: src/component/photo/toolbar.vue:199
|
||||||
#: src/dialog/album/edit.vue:124
|
#: src/dialog/album/edit.vue:124
|
||||||
#: src/dialog/photo/details.vue:439
|
#: src/dialog/photo/details.vue:439
|
||||||
|
@ -2002,9 +2007,9 @@ msgid "Yellow"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialog/photo/archive.vue:15
|
#: src/dialog/photo/archive.vue:15
|
||||||
#: src/dialog/photo/files.vue:92
|
#: src/dialog/photo/files.vue:101
|
||||||
#: src/dialog/photo/files.vue:98
|
#: src/dialog/photo/files.vue:107
|
||||||
#: src/dialog/photo/files.vue:134
|
#: src/dialog/photo/files.vue:143
|
||||||
#: src/dialog/photo/info.vue:191
|
#: src/dialog/photo/info.vue:191
|
||||||
#: src/dialog/photo/info.vue:218
|
#: src/dialog/photo/info.vue:218
|
||||||
#: src/dialog/photo/info.vue:245
|
#: src/dialog/photo/info.vue:245
|
||||||
|
|
|
@ -38,9 +38,9 @@ import {$gettext} from "common/vm";
|
||||||
export class File extends RestModel {
|
export class File extends RestModel {
|
||||||
getDefaults() {
|
getDefaults() {
|
||||||
return {
|
return {
|
||||||
InstanceID: "",
|
|
||||||
UID: "",
|
UID: "",
|
||||||
PhotoUID: "",
|
PhotoUID: "",
|
||||||
|
InstanceID: "",
|
||||||
Root: "/",
|
Root: "/",
|
||||||
Name: "",
|
Name: "",
|
||||||
OriginalName: "",
|
OriginalName: "",
|
||||||
|
|
|
@ -49,8 +49,8 @@ export const DayUnknown = -1;
|
||||||
export class Photo extends RestModel {
|
export class Photo extends RestModel {
|
||||||
getDefaults() {
|
getDefaults() {
|
||||||
return {
|
return {
|
||||||
DocumentID: "",
|
|
||||||
UID: "",
|
UID: "",
|
||||||
|
DocumentID: "",
|
||||||
Type: TypeImage,
|
Type: TypeImage,
|
||||||
TypeSrc: "",
|
TypeSrc: "",
|
||||||
Favorite: false,
|
Favorite: false,
|
||||||
|
|
|
@ -17,10 +17,10 @@ type Files []File
|
||||||
// File represents an image or sidecar file that belongs to a photo.
|
// File represents an image or sidecar file that belongs to a photo.
|
||||||
type File struct {
|
type File struct {
|
||||||
ID uint `gorm:"primary_key" json:"-" yaml:"-"`
|
ID uint `gorm:"primary_key" json:"-" yaml:"-"`
|
||||||
UUID string `gorm:"type:varbinary(42);index;" json:"InstanceID,omitempty" yaml:"InstanceID,omitempty"`
|
|
||||||
Photo *Photo `json:"-" yaml:"-"`
|
Photo *Photo `json:"-" yaml:"-"`
|
||||||
PhotoID uint `gorm:"index;" json:"-" yaml:"-"`
|
PhotoID uint `gorm:"index;" json:"-" yaml:"-"`
|
||||||
PhotoUID string `gorm:"type:varbinary(42);index;" json:"PhotoUID" yaml:"PhotoUID"`
|
PhotoUID string `gorm:"type:varbinary(42);index;" json:"PhotoUID" yaml:"PhotoUID"`
|
||||||
|
InstanceID string `gorm:"type:varbinary(42);index;" json:"InstanceID,omitempty" yaml:"InstanceID,omitempty"`
|
||||||
FileUID string `gorm:"type:varbinary(42);unique_index;" json:"UID" yaml:"UID"`
|
FileUID string `gorm:"type:varbinary(42);unique_index;" json:"UID" yaml:"UID"`
|
||||||
FileName string `gorm:"type:varbinary(768);unique_index:idx_files_name_root;" json:"Name" yaml:"Name"`
|
FileName string `gorm:"type:varbinary(768);unique_index:idx_files_name_root;" json:"Name" yaml:"Name"`
|
||||||
FileRoot string `gorm:"type:varbinary(16);default:'/';unique_index:idx_files_name_root;" json:"Root" yaml:"Root,omitempty"`
|
FileRoot string `gorm:"type:varbinary(16);default:'/';unique_index:idx_files_name_root;" json:"Root" yaml:"Root,omitempty"`
|
||||||
|
|
|
@ -131,11 +131,6 @@ func (ind *Index) MediaFile(m *MediaFile, o IndexOptions, originalName string) (
|
||||||
result.Status = IndexDuplicate
|
result.Status = IndexDuplicate
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
if !fileExists && m.MetaData().HasInstanceID() {
|
|
||||||
fileQuery = entity.UnscopedDb().First(&file, "uuid = ?", m.MetaData().InstanceID)
|
|
||||||
fileExists = fileQuery.Error == nil
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if !fileExists {
|
if !fileExists {
|
||||||
|
@ -255,7 +250,14 @@ func (ind *Index) MediaFile(m *MediaFile, o IndexOptions, originalName string) (
|
||||||
}
|
}
|
||||||
|
|
||||||
if metaData := m.MetaData(); metaData.Error == nil {
|
if metaData := m.MetaData(); metaData.Error == nil {
|
||||||
|
file.FileCodec = metaData.Codec
|
||||||
file.FileProjection = metaData.Projection
|
file.FileProjection = metaData.Projection
|
||||||
|
|
||||||
|
if metaData.HasInstanceID() {
|
||||||
|
log.Infof("index: %s has instance_id %s", logName, txt.Quote(metaData.InstanceID))
|
||||||
|
|
||||||
|
file.InstanceID = metaData.InstanceID
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case m.IsXMP():
|
case m.IsXMP():
|
||||||
// TODO: Proof-of-concept for indexing XMP sidecar files
|
// TODO: Proof-of-concept for indexing XMP sidecar files
|
||||||
|
@ -309,15 +311,15 @@ func (ind *Index) MediaFile(m *MediaFile, o IndexOptions, originalName string) (
|
||||||
}
|
}
|
||||||
|
|
||||||
if metaData.HasDocumentID() && photo.UUID == "" {
|
if metaData.HasDocumentID() && photo.UUID == "" {
|
||||||
log.Debugf("index: %s has document id %s", logName, txt.Quote(metaData.DocumentID))
|
log.Infof("index: %s has document_id %s", logName, txt.Quote(metaData.DocumentID))
|
||||||
|
|
||||||
photo.UUID = metaData.DocumentID
|
photo.UUID = metaData.DocumentID
|
||||||
}
|
}
|
||||||
|
|
||||||
if metaData.HasInstanceID() && file.UUID == "" {
|
if metaData.HasInstanceID() {
|
||||||
log.Debugf("index: %s has instance id %s", logName, txt.Quote(metaData.InstanceID))
|
log.Infof("index: %s has instance_id %s", logName, txt.Quote(metaData.InstanceID))
|
||||||
|
|
||||||
file.UUID = metaData.InstanceID
|
file.InstanceID = metaData.InstanceID
|
||||||
}
|
}
|
||||||
|
|
||||||
file.FileCodec = metaData.Codec
|
file.FileCodec = metaData.Codec
|
||||||
|
@ -398,15 +400,15 @@ func (ind *Index) MediaFile(m *MediaFile, o IndexOptions, originalName string) (
|
||||||
}
|
}
|
||||||
|
|
||||||
if metaData.HasDocumentID() && photo.UUID == "" {
|
if metaData.HasDocumentID() && photo.UUID == "" {
|
||||||
log.Debugf("index: %s has document id %s", logName, txt.Quote(metaData.DocumentID))
|
log.Infof("index: %s has document_id %s", logName, txt.Quote(metaData.DocumentID))
|
||||||
|
|
||||||
photo.UUID = metaData.DocumentID
|
photo.UUID = metaData.DocumentID
|
||||||
}
|
}
|
||||||
|
|
||||||
if metaData.HasInstanceID() && file.UUID == "" {
|
if metaData.HasInstanceID() {
|
||||||
log.Debugf("index: %s has instance id %s", logName, txt.Quote(metaData.InstanceID))
|
log.Infof("index: %s has instance_id %s", logName, txt.Quote(metaData.InstanceID))
|
||||||
|
|
||||||
file.UUID = metaData.InstanceID
|
file.InstanceID = metaData.InstanceID
|
||||||
}
|
}
|
||||||
|
|
||||||
file.FileCodec = metaData.Codec
|
file.FileCodec = metaData.Codec
|
||||||
|
@ -496,16 +498,10 @@ func (ind *Index) MediaFile(m *MediaFile, o IndexOptions, originalName string) (
|
||||||
}
|
}
|
||||||
|
|
||||||
if metaData.HasDocumentID() && photo.UUID == "" {
|
if metaData.HasDocumentID() && photo.UUID == "" {
|
||||||
log.Debugf("index: %s has document id %s", logName, txt.Quote(metaData.DocumentID))
|
log.Debugf("index: %s has document_id %s", logName, txt.Quote(metaData.DocumentID))
|
||||||
|
|
||||||
photo.UUID = metaData.DocumentID
|
photo.UUID = metaData.DocumentID
|
||||||
}
|
}
|
||||||
|
|
||||||
if metaData.HasInstanceID() && file.UUID == "" {
|
|
||||||
log.Debugf("index: %s has instance id %s", logName, txt.Quote(metaData.InstanceID))
|
|
||||||
|
|
||||||
file.UUID = metaData.InstanceID
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if photo.CameraSrc == entity.SrcAuto {
|
if photo.CameraSrc == entity.SrcAuto {
|
||||||
|
@ -626,11 +622,11 @@ func (ind *Index) MediaFile(m *MediaFile, o IndexOptions, originalName string) (
|
||||||
w := txt.Keywords(details.Keywords)
|
w := txt.Keywords(details.Keywords)
|
||||||
|
|
||||||
if !fs.IsGenerated(fileBase) {
|
if !fs.IsGenerated(fileBase) {
|
||||||
w = append(w, txt.FilenameKeywords(filePath)...)
|
|
||||||
w = append(w, txt.FilenameKeywords(fileBase)...)
|
w = append(w, txt.FilenameKeywords(fileBase)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
w = append(w, locKeywords...)
|
w = append(w, locKeywords...)
|
||||||
|
w = append(w, txt.FilenameKeywords(filePath)...)
|
||||||
w = append(w, txt.FilenameKeywords(file.OriginalName)...)
|
w = append(w, txt.FilenameKeywords(file.OriginalName)...)
|
||||||
w = append(w, file.FileMainColor)
|
w = append(w, file.FileMainColor)
|
||||||
w = append(w, labels.Keywords()...)
|
w = append(w, labels.Keywords()...)
|
||||||
|
|
|
@ -60,6 +60,7 @@ type PhotoResult struct {
|
||||||
PlaceCity string `json:"PlaceCity"`
|
PlaceCity string `json:"PlaceCity"`
|
||||||
PlaceState string `json:"PlaceState"`
|
PlaceState string `json:"PlaceState"`
|
||||||
PlaceCountry string `json:"PlaceCountry"`
|
PlaceCountry string `json:"PlaceCountry"`
|
||||||
|
InstanceID string `json:"InstanceID"`
|
||||||
FileID uint `json:"-"` // File
|
FileID uint `json:"-"` // File
|
||||||
FileUID string `json:"FileUID"`
|
FileUID string `json:"FileUID"`
|
||||||
FileRoot string `json:"FileRoot"`
|
FileRoot string `json:"FileRoot"`
|
||||||
|
|
|
@ -26,7 +26,7 @@ func PhotoSearch(f form.PhotoSearch) (results PhotoResults, count int, err error
|
||||||
// Main search query, avoids (slow) left joins.
|
// Main search query, avoids (slow) left joins.
|
||||||
s = s.Table("photos").
|
s = s.Table("photos").
|
||||||
Select(`photos.*,
|
Select(`photos.*,
|
||||||
files.id AS file_id, files.file_uid, files.file_primary, files.file_missing, files.file_name,
|
files.id AS file_id, files.file_uid, files.instance_id, files.file_primary, files.file_missing, files.file_name,
|
||||||
files.file_root, files.file_hash, files.file_codec, files.file_type, files.file_mime, files.file_width,
|
files.file_root, files.file_hash, files.file_codec, files.file_type, files.file_mime, files.file_width,
|
||||||
files.file_height, files.file_aspect_ratio, files.file_orientation, files.file_main_color,
|
files.file_height, files.file_aspect_ratio, files.file_orientation, files.file_main_color,
|
||||||
files.file_colors, files.file_luminance, files.file_chroma, files.file_projection,
|
files.file_colors, files.file_luminance, files.file_chroma, files.file_projection,
|
||||||
|
|
|
@ -126,6 +126,10 @@ func TestBase(t *testing.T) {
|
||||||
result := BasePrefix("20180506_091537_DSC02122(-2.7).JPG", true)
|
result := BasePrefix("20180506_091537_DSC02122(-2.7).JPG", true)
|
||||||
assert.Equal(t, "20180506_091537_DSC02122", result)
|
assert.Equal(t, "20180506_091537_DSC02122", result)
|
||||||
})
|
})
|
||||||
|
t.Run("1996 001.jpg", func(t *testing.T) {
|
||||||
|
result := BasePrefix("1996 001.jpg", true)
|
||||||
|
assert.Equal(t, "1996 001", result)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRelBase(t *testing.T) {
|
func TestRelBase(t *testing.T) {
|
||||||
|
|
Loading…
Reference in a new issue