People: Add mutex so changes don't get processed concurrently
This commit is contained in:
parent
986f12af68
commit
1b583e071e
|
@ -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: 2021-11-22 17:01+0000\n"
|
"POT-Creation-Date: 2021-12-09 00:51+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"
|
||||||
|
@ -17,309 +17,313 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=CHARSET\n"
|
"Content-Type: text/plain; charset=CHARSET\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
#: messages.go:82
|
#: messages.go:83
|
||||||
msgid "Unexpected error, please try again"
|
msgid "Unexpected error, please try again"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:83
|
#: messages.go:84
|
||||||
msgid "Invalid request"
|
msgid "Invalid request"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:84
|
#: messages.go:85
|
||||||
msgid "Changes could not be saved"
|
msgid "Changes could not be saved"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:85
|
#: messages.go:86
|
||||||
msgid "Could not be deleted"
|
msgid "Could not be deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:86
|
#: messages.go:87
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s already exists"
|
msgid "%s already exists"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:87
|
#: messages.go:88
|
||||||
msgid "Not found"
|
msgid "Not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:88
|
#: messages.go:89
|
||||||
msgid "File not found"
|
msgid "File not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:89
|
#: messages.go:90
|
||||||
msgid "Selection not found"
|
msgid "Selection not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:90
|
#: messages.go:91
|
||||||
msgid "Entity not found"
|
msgid "Entity not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:91
|
#: messages.go:92
|
||||||
msgid "Account not found"
|
msgid "Account not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:92
|
#: messages.go:93
|
||||||
msgid "User not found"
|
msgid "User not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:93
|
#: messages.go:94
|
||||||
msgid "Label not found"
|
msgid "Label not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:94
|
#: messages.go:95
|
||||||
msgid "Album not found"
|
msgid "Album not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:95
|
#: messages.go:96
|
||||||
msgid "Subject not found"
|
msgid "Subject not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:96
|
#: messages.go:97
|
||||||
msgid "Person not found"
|
msgid "Person not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:97
|
#: messages.go:98
|
||||||
msgid "Face not found"
|
msgid "Face not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:98
|
#: messages.go:99
|
||||||
msgid "Not available in public mode"
|
msgid "Not available in public mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:99
|
#: messages.go:100
|
||||||
msgid "not available in read-only mode"
|
msgid "not available in read-only mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:100
|
#: messages.go:101
|
||||||
msgid "Please log in and try again"
|
msgid "Please log in and try again"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:101
|
#: messages.go:102
|
||||||
msgid "Upload might be offensive"
|
msgid "Upload might be offensive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:102
|
#: messages.go:103
|
||||||
msgid "No items selected"
|
msgid "No items selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:103
|
#: messages.go:104
|
||||||
msgid "Failed creating file, please check permissions"
|
msgid "Failed creating file, please check permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:104
|
#: messages.go:105
|
||||||
msgid "Failed creating folder, please check permissions"
|
msgid "Failed creating folder, please check permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:105
|
#: messages.go:106
|
||||||
msgid "Could not connect, please try again"
|
msgid "Could not connect, please try again"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:106
|
#: messages.go:107
|
||||||
msgid "Invalid password, please try again"
|
msgid "Invalid password, please try again"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:107
|
#: messages.go:108
|
||||||
msgid "Feature disabled"
|
msgid "Feature disabled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:108
|
#: messages.go:109
|
||||||
msgid "No labels selected"
|
msgid "No labels selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:109
|
#: messages.go:110
|
||||||
msgid "No albums selected"
|
msgid "No albums selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:110
|
#: messages.go:111
|
||||||
msgid "No files available for download"
|
msgid "No files available for download"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:111
|
#: messages.go:112
|
||||||
msgid "Failed to create zip file"
|
msgid "Failed to create zip file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:112
|
#: messages.go:113
|
||||||
msgid "Invalid credentials"
|
msgid "Invalid credentials"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:113
|
#: messages.go:114
|
||||||
msgid "Invalid link"
|
msgid "Invalid link"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:114
|
#: messages.go:115
|
||||||
msgid "Invalid name"
|
msgid "Invalid name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:117
|
#: messages.go:116
|
||||||
msgid "Changes successfully saved"
|
msgid "Busy, please try again later"
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: messages.go:118
|
|
||||||
msgid "Album created"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:119
|
#: messages.go:119
|
||||||
msgid "Album saved"
|
msgid "Changes successfully saved"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:120
|
#: messages.go:120
|
||||||
|
msgid "Album created"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: messages.go:121
|
||||||
|
msgid "Album saved"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: messages.go:122
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Album %s deleted"
|
msgid "Album %s deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:121
|
#: messages.go:123
|
||||||
msgid "Album contents cloned"
|
msgid "Album contents cloned"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:122
|
#: messages.go:124
|
||||||
msgid "File removed from stack"
|
msgid "File removed from stack"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:123
|
|
||||||
msgid "File deleted"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: messages.go:124
|
|
||||||
#, c-format
|
|
||||||
msgid "Selection added to %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: messages.go:125
|
#: messages.go:125
|
||||||
#, c-format
|
msgid "File deleted"
|
||||||
msgid "One entry added to %s"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:126
|
#: messages.go:126
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d entries added to %s"
|
msgid "Selection added to %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:127
|
#: messages.go:127
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "One entry removed from %s"
|
msgid "One entry added to %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:128
|
#: messages.go:128
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d entries removed from %s"
|
msgid "%d entries added to %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:129
|
#: messages.go:129
|
||||||
msgid "Account created"
|
#, c-format
|
||||||
|
msgid "One entry removed from %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:130
|
#: messages.go:130
|
||||||
msgid "Account saved"
|
#, c-format
|
||||||
|
msgid "%d entries removed from %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:131
|
#: messages.go:131
|
||||||
msgid "Account deleted"
|
msgid "Account created"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:132
|
#: messages.go:132
|
||||||
msgid "Settings saved"
|
msgid "Account saved"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:133
|
#: messages.go:133
|
||||||
msgid "Password changed"
|
msgid "Account deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:134
|
#: messages.go:134
|
||||||
#, c-format
|
msgid "Settings saved"
|
||||||
msgid "Import completed in %d s"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:135
|
#: messages.go:135
|
||||||
msgid "Import canceled"
|
msgid "Password changed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:136
|
#: messages.go:136
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Indexing completed in %d s"
|
msgid "Import completed in %d s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:137
|
#: messages.go:137
|
||||||
msgid "Indexing originals..."
|
msgid "Import canceled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:138
|
#: messages.go:138
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Indexing files in %s"
|
msgid "Indexing completed in %d s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:139
|
#: messages.go:139
|
||||||
msgid "Indexing canceled"
|
msgid "Indexing originals..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:140
|
#: messages.go:140
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Removed %d files and %d photos"
|
msgid "Indexing files in %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:141
|
#: messages.go:141
|
||||||
#, c-format
|
msgid "Indexing canceled"
|
||||||
msgid "Moving files from %s"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:142
|
#: messages.go:142
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Copying files from %s"
|
msgid "Removed %d files and %d photos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:143
|
#: messages.go:143
|
||||||
msgid "Labels deleted"
|
#, c-format
|
||||||
|
msgid "Moving files from %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:144
|
#: messages.go:144
|
||||||
msgid "Label saved"
|
#, c-format
|
||||||
|
msgid "Copying files from %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:145
|
#: messages.go:145
|
||||||
msgid "Subject saved"
|
msgid "Labels deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:146
|
#: messages.go:146
|
||||||
msgid "Subject deleted"
|
msgid "Label saved"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:147
|
#: messages.go:147
|
||||||
msgid "Person saved"
|
msgid "Subject saved"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:148
|
#: messages.go:148
|
||||||
msgid "Person deleted"
|
msgid "Subject deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:149
|
#: messages.go:149
|
||||||
|
msgid "Person saved"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: messages.go:150
|
||||||
|
msgid "Person deleted"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: messages.go:151
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d files uploaded in %d s"
|
msgid "%d files uploaded in %d s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:150
|
#: messages.go:152
|
||||||
msgid "Selection approved"
|
msgid "Selection approved"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:151
|
#: messages.go:153
|
||||||
msgid "Selection archived"
|
msgid "Selection archived"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:152
|
#: messages.go:154
|
||||||
msgid "Selection restored"
|
msgid "Selection restored"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:153
|
#: messages.go:155
|
||||||
msgid "Selection marked as private"
|
msgid "Selection marked as private"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:154
|
#: messages.go:156
|
||||||
msgid "Albums deleted"
|
msgid "Albums deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:155
|
#: messages.go:157
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Zip created in %d s"
|
msgid "Zip created in %d s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: messages.go:156
|
#: messages.go:158
|
||||||
msgid "Permanently deleted"
|
msgid "Permanently deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
288
frontend/package-lock.json
generated
288
frontend/package-lock.json
generated
|
@ -1902,9 +1902,9 @@
|
||||||
"integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4="
|
"integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4="
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "16.11.11",
|
"version": "16.11.12",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz",
|
||||||
"integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw=="
|
"integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw=="
|
||||||
},
|
},
|
||||||
"node_modules/@types/parse-json": {
|
"node_modules/@types/parse-json": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
|
@ -1917,12 +1917,12 @@
|
||||||
"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q=="
|
"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q=="
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-core": {
|
"node_modules/@vue/compiler-core": {
|
||||||
"version": "3.2.23",
|
"version": "3.2.24",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.23.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.24.tgz",
|
||||||
"integrity": "sha512-4ZhiI/orx+7EJ1B+0zjgvXMV2uRN+XBfG06UN2sJfND9rH5gtEQT3QmO4erum1o6Irl7y754W8/KSaDJh4EUQg==",
|
"integrity": "sha512-A0SxB2HAggKzP57LDin5gfgWOTwFyGCtQ5MTMNBADnfQYALWnYuC8kMI0DhRSplGTWRvn9Z2DAnG8f35BnojuA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.15.0",
|
"@babel/parser": "^7.15.0",
|
||||||
"@vue/shared": "3.2.23",
|
"@vue/shared": "3.2.24",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"source-map": "^0.6.1"
|
"source-map": "^0.6.1"
|
||||||
}
|
}
|
||||||
|
@ -1936,25 +1936,25 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-dom": {
|
"node_modules/@vue/compiler-dom": {
|
||||||
"version": "3.2.23",
|
"version": "3.2.24",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.23.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.24.tgz",
|
||||||
"integrity": "sha512-X2Nw8QFc5lgoK3kio5ktM95nqmLUH+q+N/PbV4kCHzF1avqv/EGLnAhaaF0Iu4bewNvHJAAhhwPZFeoV/22nbw==",
|
"integrity": "sha512-KQEm8r0JFsrNNIfbD28pcwMvHpcJcwjVR1XWFcD0yyQ8eREd7IXhT7J6j7iNCSE/TIo78NOvkwbyX+lnIm836w==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-core": "3.2.23",
|
"@vue/compiler-core": "3.2.24",
|
||||||
"@vue/shared": "3.2.23"
|
"@vue/shared": "3.2.24"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-sfc": {
|
"node_modules/@vue/compiler-sfc": {
|
||||||
"version": "3.2.23",
|
"version": "3.2.24",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.23.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.24.tgz",
|
||||||
"integrity": "sha512-Aw+pb50Q5zTjyvWod8mNKmYZDRGHJBptmNNWE+84ZxrzEztPgMz8cNYIzWGbwcFVkmJlhvioAMvKnB+LM/sjSA==",
|
"integrity": "sha512-YGPcIvVJp2qTPkuT6kT43Eo1xjstyY4bmuiSV31my4bQMBFVR26ANmifUSt759Blok71gK0WzfIZHbcOKYOeKA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.15.0",
|
"@babel/parser": "^7.15.0",
|
||||||
"@vue/compiler-core": "3.2.23",
|
"@vue/compiler-core": "3.2.24",
|
||||||
"@vue/compiler-dom": "3.2.23",
|
"@vue/compiler-dom": "3.2.24",
|
||||||
"@vue/compiler-ssr": "3.2.23",
|
"@vue/compiler-ssr": "3.2.24",
|
||||||
"@vue/ref-transform": "3.2.23",
|
"@vue/ref-transform": "3.2.24",
|
||||||
"@vue/shared": "3.2.23",
|
"@vue/shared": "3.2.24",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"magic-string": "^0.25.7",
|
"magic-string": "^0.25.7",
|
||||||
"postcss": "^8.1.10",
|
"postcss": "^8.1.10",
|
||||||
|
@ -1970,12 +1970,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/compiler-ssr": {
|
"node_modules/@vue/compiler-ssr": {
|
||||||
"version": "3.2.23",
|
"version": "3.2.24",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.23.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.24.tgz",
|
||||||
"integrity": "sha512-Bqzn4jFyXPK1Ehqiq7e/czS8n62gtYF1Zfeu0DrR5uv+SBllh7LIvZjZU6+c8qbocAd3/T3I3gn2cZGmnDb6zg==",
|
"integrity": "sha512-E1HHShNsGVWXxs68LDOUuI+Bzak9W/Ier/366aKDBFuwvfwgruwq6abhMfj6pSDZpwZ/PXnfliyl/m7qBSq6gw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-dom": "3.2.23",
|
"@vue/compiler-dom": "3.2.24",
|
||||||
"@vue/shared": "3.2.23"
|
"@vue/shared": "3.2.24"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/component-compiler-utils": {
|
"node_modules/@vue/component-compiler-utils": {
|
||||||
|
@ -2026,26 +2026,26 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/ref-transform": {
|
"node_modules/@vue/ref-transform": {
|
||||||
"version": "3.2.23",
|
"version": "3.2.24",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.23.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.24.tgz",
|
||||||
"integrity": "sha512-gW0GD2PSAs/th7mC7tPB/UwpIQxclbApVtsDtscDmOJXb2+cdu60ny+SuHNgfrlUT/JqWKQHq7jFKO4woxLNaA==",
|
"integrity": "sha512-j6oNbsGLvea2rF8GQB9w6q7UFL1So7J+t6ducaMeWPSyjYZ+slWpwPVK6mmyghg5oGqC41R+HC5BV036Y0KhXQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.15.0",
|
"@babel/parser": "^7.15.0",
|
||||||
"@vue/compiler-core": "3.2.23",
|
"@vue/compiler-core": "3.2.24",
|
||||||
"@vue/shared": "3.2.23",
|
"@vue/shared": "3.2.24",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"magic-string": "^0.25.7"
|
"magic-string": "^0.25.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/shared": {
|
"node_modules/@vue/shared": {
|
||||||
"version": "3.2.23",
|
"version": "3.2.24",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.23.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.24.tgz",
|
||||||
"integrity": "sha512-U+/Jefa0QfXUF2qVy9Dqlrb6HKJSr9/wJcM66wXmWcTOoqg7hOWzF4qruDle51pyF4x3wMn6TSH54UdjKjCKMA=="
|
"integrity": "sha512-BUgRiZCkCrqDps5aQ9av05xcge3rn092ztKIh17tHkeEFgP4zfXMQWBA2zfdoCdCEdBL26xtOv+FZYiOp9RUDA=="
|
||||||
},
|
},
|
||||||
"node_modules/@vvo/tzdb": {
|
"node_modules/@vvo/tzdb": {
|
||||||
"version": "6.35.0",
|
"version": "6.36.0",
|
||||||
"resolved": "https://registry.npmjs.org/@vvo/tzdb/-/tzdb-6.35.0.tgz",
|
"resolved": "https://registry.npmjs.org/@vvo/tzdb/-/tzdb-6.36.0.tgz",
|
||||||
"integrity": "sha512-leN0YmA9+N7ZotdAGp/MzLcAippUpC6Occ/P4hG6BAn4rDXJ4NMf/yiD2K8RyV41I1zK0EMVxo3ca1WrCq4J5g=="
|
"integrity": "sha512-t+Hs4PJJLiWYZcf5+19VDEHnSO1KVJ6qp7SmRfYWpuHLCWcSvCeaZGSeEjprEYIW4+2vOqGTmSUZaRzySIVq+A=="
|
||||||
},
|
},
|
||||||
"node_modules/@webassemblyjs/ast": {
|
"node_modules/@webassemblyjs/ast": {
|
||||||
"version": "1.11.1",
|
"version": "1.11.1",
|
||||||
|
@ -3068,9 +3068,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001284",
|
"version": "1.0.30001285",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001284.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001285.tgz",
|
||||||
"integrity": "sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw==",
|
"integrity": "sha512-KAOkuUtcQ901MtmvxfKD+ODHH9YVDYnBt+TGYSz2KIfnq22CiArbUxXPN9067gNbgMlnNYRSwho8OPXZPALB9Q==",
|
||||||
"funding": {
|
"funding": {
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
"url": "https://opencollective.com/browserslist"
|
"url": "https://opencollective.com/browserslist"
|
||||||
|
@ -3477,9 +3477,9 @@
|
||||||
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
||||||
},
|
},
|
||||||
"node_modules/core-js": {
|
"node_modules/core-js": {
|
||||||
"version": "3.19.2",
|
"version": "3.19.3",
|
||||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.2.tgz",
|
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.3.tgz",
|
||||||
"integrity": "sha512-ciYCResnLIATSsXuXnIOH4CbdfgV+H1Ltg16hJFN7/v6OxqnFr/IFGeLacaZ+fHLAm0TBbXwNK9/DNBzBUrO/g==",
|
"integrity": "sha512-LeLBMgEGSsG7giquSzvgBrTS7V5UL6ks3eQlUSbN8dJStlLFiRzUm5iqsRyzUB8carhfKjkJ2vzKqE6z1Vga9g==",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"funding": {
|
"funding": {
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
|
@ -3487,9 +3487,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/core-js-compat": {
|
"node_modules/core-js-compat": {
|
||||||
"version": "3.19.2",
|
"version": "3.19.3",
|
||||||
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.2.tgz",
|
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.3.tgz",
|
||||||
"integrity": "sha512-ObBY1W5vx/LFFMaL1P5Udo4Npib6fu+cMokeziWkA8Tns4FcDemKF5j9JvaI5JhdkW8EQJQGJN1EcrzmEwuAqQ==",
|
"integrity": "sha512-59tYzuWgEEVU9r+SRgceIGXSSUn47JknoiXW6Oq7RW8QHjXWz3/vp8pa7dbtuVu40sewz3OP3JmQEcDdztrLhA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"browserslist": "^4.18.1",
|
"browserslist": "^4.18.1",
|
||||||
"semver": "7.0.0"
|
"semver": "7.0.0"
|
||||||
|
@ -4345,9 +4345,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.4.10",
|
"version": "1.4.14",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.10.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.14.tgz",
|
||||||
"integrity": "sha512-tFgA40Iq2oy4k2PnZrLJowbgpij+lD6ZLxkw8Ht1NKTYyN8dvSvC5xlo8X0WW2jqhKSzITrbr5mpB4/AZ/8OUA=="
|
"integrity": "sha512-RsGkAN9JEAYMObS72kzUsPPcPGMqX1rBqGuXi9aa4TBKLzICoLf+DAAtd0fVFzrniJqYzpby47gthCUoObfs0Q=="
|
||||||
},
|
},
|
||||||
"node_modules/emoji-regex": {
|
"node_modules/emoji-regex": {
|
||||||
"version": "8.0.0",
|
"version": "8.0.0",
|
||||||
|
@ -5988,9 +5988,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/follow-redirects": {
|
"node_modules/follow-redirects": {
|
||||||
"version": "1.14.5",
|
"version": "1.14.6",
|
||||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz",
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz",
|
||||||
"integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==",
|
"integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "individual",
|
"type": "individual",
|
||||||
|
@ -8406,9 +8406,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/object-inspect": {
|
"node_modules/object-inspect": {
|
||||||
"version": "1.11.0",
|
"version": "1.11.1",
|
||||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
|
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz",
|
||||||
"integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==",
|
"integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==",
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
|
@ -8706,12 +8706,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/pirates": {
|
"node_modules/pirates": {
|
||||||
"version": "4.0.1",
|
"version": "4.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz",
|
||||||
"integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
|
"integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==",
|
||||||
"dependencies": {
|
|
||||||
"node-modules-regexp": "^1.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 6"
|
"node": ">= 6"
|
||||||
}
|
}
|
||||||
|
@ -10790,9 +10787,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/prettier": {
|
"node_modules/prettier": {
|
||||||
"version": "2.5.0",
|
"version": "2.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz",
|
||||||
"integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==",
|
"integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==",
|
||||||
"bin": {
|
"bin": {
|
||||||
"prettier": "bin-prettier.js"
|
"prettier": "bin-prettier.js"
|
||||||
},
|
},
|
||||||
|
@ -11455,9 +11452,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/sass-loader": {
|
"node_modules/sass-loader": {
|
||||||
"version": "12.3.0",
|
"version": "12.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz",
|
||||||
"integrity": "sha512-6l9qwhdOb7qSrtOu96QQ81LVl8v6Dp9j1w3akOm0aWHyrTYtagDt5+kS32N4yq4hHk3M+rdqoRMH+lIdqvW6HA==",
|
"integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"klona": "^2.0.4",
|
"klona": "^2.0.4",
|
||||||
"neo-async": "^2.6.2"
|
"neo-async": "^2.6.2"
|
||||||
|
@ -11471,7 +11468,7 @@
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"fibers": ">= 3.1.0",
|
"fibers": ">= 3.1.0",
|
||||||
"node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0",
|
"node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0",
|
||||||
"sass": "^1.3.0",
|
"sass": "^1.3.0",
|
||||||
"webpack": "^5.0.0"
|
"webpack": "^5.0.0"
|
||||||
},
|
},
|
||||||
|
@ -13188,9 +13185,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/watchpack": {
|
"node_modules/watchpack": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz",
|
||||||
"integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==",
|
"integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"glob-to-regexp": "^0.4.1",
|
"glob-to-regexp": "^0.4.1",
|
||||||
"graceful-fs": "^4.1.2"
|
"graceful-fs": "^4.1.2"
|
||||||
|
@ -13200,9 +13197,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/webpack": {
|
"node_modules/webpack": {
|
||||||
"version": "5.64.4",
|
"version": "5.65.0",
|
||||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.4.tgz",
|
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz",
|
||||||
"integrity": "sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw==",
|
"integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/eslint-scope": "^3.7.0",
|
"@types/eslint-scope": "^3.7.0",
|
||||||
"@types/estree": "^0.0.50",
|
"@types/estree": "^0.0.50",
|
||||||
|
@ -13226,7 +13223,7 @@
|
||||||
"schema-utils": "^3.1.0",
|
"schema-utils": "^3.1.0",
|
||||||
"tapable": "^2.1.1",
|
"tapable": "^2.1.1",
|
||||||
"terser-webpack-plugin": "^5.1.3",
|
"terser-webpack-plugin": "^5.1.3",
|
||||||
"watchpack": "^2.3.0",
|
"watchpack": "^2.3.1",
|
||||||
"webpack-sources": "^3.2.2"
|
"webpack-sources": "^3.2.2"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
|
@ -15017,9 +15014,9 @@
|
||||||
"integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4="
|
"integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4="
|
||||||
},
|
},
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
"version": "16.11.11",
|
"version": "16.11.12",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz",
|
||||||
"integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw=="
|
"integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw=="
|
||||||
},
|
},
|
||||||
"@types/parse-json": {
|
"@types/parse-json": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
|
@ -15032,12 +15029,12 @@
|
||||||
"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q=="
|
"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q=="
|
||||||
},
|
},
|
||||||
"@vue/compiler-core": {
|
"@vue/compiler-core": {
|
||||||
"version": "3.2.23",
|
"version": "3.2.24",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.23.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.24.tgz",
|
||||||
"integrity": "sha512-4ZhiI/orx+7EJ1B+0zjgvXMV2uRN+XBfG06UN2sJfND9rH5gtEQT3QmO4erum1o6Irl7y754W8/KSaDJh4EUQg==",
|
"integrity": "sha512-A0SxB2HAggKzP57LDin5gfgWOTwFyGCtQ5MTMNBADnfQYALWnYuC8kMI0DhRSplGTWRvn9Z2DAnG8f35BnojuA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/parser": "^7.15.0",
|
"@babel/parser": "^7.15.0",
|
||||||
"@vue/shared": "3.2.23",
|
"@vue/shared": "3.2.24",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"source-map": "^0.6.1"
|
"source-map": "^0.6.1"
|
||||||
},
|
},
|
||||||
|
@ -15050,25 +15047,25 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@vue/compiler-dom": {
|
"@vue/compiler-dom": {
|
||||||
"version": "3.2.23",
|
"version": "3.2.24",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.23.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.24.tgz",
|
||||||
"integrity": "sha512-X2Nw8QFc5lgoK3kio5ktM95nqmLUH+q+N/PbV4kCHzF1avqv/EGLnAhaaF0Iu4bewNvHJAAhhwPZFeoV/22nbw==",
|
"integrity": "sha512-KQEm8r0JFsrNNIfbD28pcwMvHpcJcwjVR1XWFcD0yyQ8eREd7IXhT7J6j7iNCSE/TIo78NOvkwbyX+lnIm836w==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@vue/compiler-core": "3.2.23",
|
"@vue/compiler-core": "3.2.24",
|
||||||
"@vue/shared": "3.2.23"
|
"@vue/shared": "3.2.24"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@vue/compiler-sfc": {
|
"@vue/compiler-sfc": {
|
||||||
"version": "3.2.23",
|
"version": "3.2.24",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.23.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.24.tgz",
|
||||||
"integrity": "sha512-Aw+pb50Q5zTjyvWod8mNKmYZDRGHJBptmNNWE+84ZxrzEztPgMz8cNYIzWGbwcFVkmJlhvioAMvKnB+LM/sjSA==",
|
"integrity": "sha512-YGPcIvVJp2qTPkuT6kT43Eo1xjstyY4bmuiSV31my4bQMBFVR26ANmifUSt759Blok71gK0WzfIZHbcOKYOeKA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/parser": "^7.15.0",
|
"@babel/parser": "^7.15.0",
|
||||||
"@vue/compiler-core": "3.2.23",
|
"@vue/compiler-core": "3.2.24",
|
||||||
"@vue/compiler-dom": "3.2.23",
|
"@vue/compiler-dom": "3.2.24",
|
||||||
"@vue/compiler-ssr": "3.2.23",
|
"@vue/compiler-ssr": "3.2.24",
|
||||||
"@vue/ref-transform": "3.2.23",
|
"@vue/ref-transform": "3.2.24",
|
||||||
"@vue/shared": "3.2.23",
|
"@vue/shared": "3.2.24",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"magic-string": "^0.25.7",
|
"magic-string": "^0.25.7",
|
||||||
"postcss": "^8.1.10",
|
"postcss": "^8.1.10",
|
||||||
|
@ -15083,12 +15080,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@vue/compiler-ssr": {
|
"@vue/compiler-ssr": {
|
||||||
"version": "3.2.23",
|
"version": "3.2.24",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.23.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.24.tgz",
|
||||||
"integrity": "sha512-Bqzn4jFyXPK1Ehqiq7e/czS8n62gtYF1Zfeu0DrR5uv+SBllh7LIvZjZU6+c8qbocAd3/T3I3gn2cZGmnDb6zg==",
|
"integrity": "sha512-E1HHShNsGVWXxs68LDOUuI+Bzak9W/Ier/366aKDBFuwvfwgruwq6abhMfj6pSDZpwZ/PXnfliyl/m7qBSq6gw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@vue/compiler-dom": "3.2.23",
|
"@vue/compiler-dom": "3.2.24",
|
||||||
"@vue/shared": "3.2.23"
|
"@vue/shared": "3.2.24"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@vue/component-compiler-utils": {
|
"@vue/component-compiler-utils": {
|
||||||
|
@ -15129,26 +15126,26 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@vue/ref-transform": {
|
"@vue/ref-transform": {
|
||||||
"version": "3.2.23",
|
"version": "3.2.24",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.23.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.24.tgz",
|
||||||
"integrity": "sha512-gW0GD2PSAs/th7mC7tPB/UwpIQxclbApVtsDtscDmOJXb2+cdu60ny+SuHNgfrlUT/JqWKQHq7jFKO4woxLNaA==",
|
"integrity": "sha512-j6oNbsGLvea2rF8GQB9w6q7UFL1So7J+t6ducaMeWPSyjYZ+slWpwPVK6mmyghg5oGqC41R+HC5BV036Y0KhXQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/parser": "^7.15.0",
|
"@babel/parser": "^7.15.0",
|
||||||
"@vue/compiler-core": "3.2.23",
|
"@vue/compiler-core": "3.2.24",
|
||||||
"@vue/shared": "3.2.23",
|
"@vue/shared": "3.2.24",
|
||||||
"estree-walker": "^2.0.2",
|
"estree-walker": "^2.0.2",
|
||||||
"magic-string": "^0.25.7"
|
"magic-string": "^0.25.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@vue/shared": {
|
"@vue/shared": {
|
||||||
"version": "3.2.23",
|
"version": "3.2.24",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.23.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.24.tgz",
|
||||||
"integrity": "sha512-U+/Jefa0QfXUF2qVy9Dqlrb6HKJSr9/wJcM66wXmWcTOoqg7hOWzF4qruDle51pyF4x3wMn6TSH54UdjKjCKMA=="
|
"integrity": "sha512-BUgRiZCkCrqDps5aQ9av05xcge3rn092ztKIh17tHkeEFgP4zfXMQWBA2zfdoCdCEdBL26xtOv+FZYiOp9RUDA=="
|
||||||
},
|
},
|
||||||
"@vvo/tzdb": {
|
"@vvo/tzdb": {
|
||||||
"version": "6.35.0",
|
"version": "6.36.0",
|
||||||
"resolved": "https://registry.npmjs.org/@vvo/tzdb/-/tzdb-6.35.0.tgz",
|
"resolved": "https://registry.npmjs.org/@vvo/tzdb/-/tzdb-6.36.0.tgz",
|
||||||
"integrity": "sha512-leN0YmA9+N7ZotdAGp/MzLcAippUpC6Occ/P4hG6BAn4rDXJ4NMf/yiD2K8RyV41I1zK0EMVxo3ca1WrCq4J5g=="
|
"integrity": "sha512-t+Hs4PJJLiWYZcf5+19VDEHnSO1KVJ6qp7SmRfYWpuHLCWcSvCeaZGSeEjprEYIW4+2vOqGTmSUZaRzySIVq+A=="
|
||||||
},
|
},
|
||||||
"@webassemblyjs/ast": {
|
"@webassemblyjs/ast": {
|
||||||
"version": "1.11.1",
|
"version": "1.11.1",
|
||||||
|
@ -15932,9 +15929,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"caniuse-lite": {
|
"caniuse-lite": {
|
||||||
"version": "1.0.30001284",
|
"version": "1.0.30001285",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001284.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001285.tgz",
|
||||||
"integrity": "sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw=="
|
"integrity": "sha512-KAOkuUtcQ901MtmvxfKD+ODHH9YVDYnBt+TGYSz2KIfnq22CiArbUxXPN9067gNbgMlnNYRSwho8OPXZPALB9Q=="
|
||||||
},
|
},
|
||||||
"chai": {
|
"chai": {
|
||||||
"version": "4.3.4",
|
"version": "4.3.4",
|
||||||
|
@ -16264,14 +16261,14 @@
|
||||||
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
||||||
},
|
},
|
||||||
"core-js": {
|
"core-js": {
|
||||||
"version": "3.19.2",
|
"version": "3.19.3",
|
||||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.2.tgz",
|
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.3.tgz",
|
||||||
"integrity": "sha512-ciYCResnLIATSsXuXnIOH4CbdfgV+H1Ltg16hJFN7/v6OxqnFr/IFGeLacaZ+fHLAm0TBbXwNK9/DNBzBUrO/g=="
|
"integrity": "sha512-LeLBMgEGSsG7giquSzvgBrTS7V5UL6ks3eQlUSbN8dJStlLFiRzUm5iqsRyzUB8carhfKjkJ2vzKqE6z1Vga9g=="
|
||||||
},
|
},
|
||||||
"core-js-compat": {
|
"core-js-compat": {
|
||||||
"version": "3.19.2",
|
"version": "3.19.3",
|
||||||
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.2.tgz",
|
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.3.tgz",
|
||||||
"integrity": "sha512-ObBY1W5vx/LFFMaL1P5Udo4Npib6fu+cMokeziWkA8Tns4FcDemKF5j9JvaI5JhdkW8EQJQGJN1EcrzmEwuAqQ==",
|
"integrity": "sha512-59tYzuWgEEVU9r+SRgceIGXSSUn47JknoiXW6Oq7RW8QHjXWz3/vp8pa7dbtuVu40sewz3OP3JmQEcDdztrLhA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"browserslist": "^4.18.1",
|
"browserslist": "^4.18.1",
|
||||||
"semver": "7.0.0"
|
"semver": "7.0.0"
|
||||||
|
@ -16881,9 +16878,9 @@
|
||||||
"integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA=="
|
"integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA=="
|
||||||
},
|
},
|
||||||
"electron-to-chromium": {
|
"electron-to-chromium": {
|
||||||
"version": "1.4.10",
|
"version": "1.4.14",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.10.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.14.tgz",
|
||||||
"integrity": "sha512-tFgA40Iq2oy4k2PnZrLJowbgpij+lD6ZLxkw8Ht1NKTYyN8dvSvC5xlo8X0WW2jqhKSzITrbr5mpB4/AZ/8OUA=="
|
"integrity": "sha512-RsGkAN9JEAYMObS72kzUsPPcPGMqX1rBqGuXi9aa4TBKLzICoLf+DAAtd0fVFzrniJqYzpby47gthCUoObfs0Q=="
|
||||||
},
|
},
|
||||||
"emoji-regex": {
|
"emoji-regex": {
|
||||||
"version": "8.0.0",
|
"version": "8.0.0",
|
||||||
|
@ -18115,9 +18112,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"follow-redirects": {
|
"follow-redirects": {
|
||||||
"version": "1.14.5",
|
"version": "1.14.6",
|
||||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz",
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz",
|
||||||
"integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA=="
|
"integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A=="
|
||||||
},
|
},
|
||||||
"foreach": {
|
"foreach": {
|
||||||
"version": "2.0.5",
|
"version": "2.0.5",
|
||||||
|
@ -19877,9 +19874,9 @@
|
||||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
|
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
|
||||||
},
|
},
|
||||||
"object-inspect": {
|
"object-inspect": {
|
||||||
"version": "1.11.0",
|
"version": "1.11.1",
|
||||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
|
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz",
|
||||||
"integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg=="
|
"integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA=="
|
||||||
},
|
},
|
||||||
"object-keys": {
|
"object-keys": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
|
@ -20087,12 +20084,9 @@
|
||||||
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
|
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
|
||||||
},
|
},
|
||||||
"pirates": {
|
"pirates": {
|
||||||
"version": "4.0.1",
|
"version": "4.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz",
|
||||||
"integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
|
"integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw=="
|
||||||
"requires": {
|
|
||||||
"node-modules-regexp": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"pkg-dir": {
|
"pkg-dir": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
|
@ -21552,9 +21546,9 @@
|
||||||
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
|
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
|
||||||
},
|
},
|
||||||
"prettier": {
|
"prettier": {
|
||||||
"version": "2.5.0",
|
"version": "2.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz",
|
||||||
"integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg=="
|
"integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg=="
|
||||||
},
|
},
|
||||||
"prettier-linter-helpers": {
|
"prettier-linter-helpers": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
@ -22095,9 +22089,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sass-loader": {
|
"sass-loader": {
|
||||||
"version": "12.3.0",
|
"version": "12.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz",
|
||||||
"integrity": "sha512-6l9qwhdOb7qSrtOu96QQ81LVl8v6Dp9j1w3akOm0aWHyrTYtagDt5+kS32N4yq4hHk3M+rdqoRMH+lIdqvW6HA==",
|
"integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"klona": "^2.0.4",
|
"klona": "^2.0.4",
|
||||||
"neo-async": "^2.6.2"
|
"neo-async": "^2.6.2"
|
||||||
|
@ -23394,18 +23388,18 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"watchpack": {
|
"watchpack": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz",
|
||||||
"integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==",
|
"integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"glob-to-regexp": "^0.4.1",
|
"glob-to-regexp": "^0.4.1",
|
||||||
"graceful-fs": "^4.1.2"
|
"graceful-fs": "^4.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"webpack": {
|
"webpack": {
|
||||||
"version": "5.64.4",
|
"version": "5.65.0",
|
||||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.4.tgz",
|
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz",
|
||||||
"integrity": "sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw==",
|
"integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/eslint-scope": "^3.7.0",
|
"@types/eslint-scope": "^3.7.0",
|
||||||
"@types/estree": "^0.0.50",
|
"@types/estree": "^0.0.50",
|
||||||
|
@ -23429,7 +23423,7 @@
|
||||||
"schema-utils": "^3.1.0",
|
"schema-utils": "^3.1.0",
|
||||||
"tapable": "^2.1.1",
|
"tapable": "^2.1.1",
|
||||||
"terser-webpack-plugin": "^5.1.3",
|
"terser-webpack-plugin": "^5.1.3",
|
||||||
"watchpack": "^2.3.0",
|
"watchpack": "^2.3.1",
|
||||||
"webpack-sources": "^3.2.2"
|
"webpack-sources": "^3.2.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -133,28 +133,40 @@ export default {
|
||||||
refresh() {
|
refresh() {
|
||||||
},
|
},
|
||||||
onReject(marker) {
|
onReject(marker) {
|
||||||
|
if (this.busy || !marker) return;
|
||||||
|
|
||||||
this.busy = true;
|
this.busy = true;
|
||||||
this.$notify.blockUI();
|
this.$notify.blockUI();
|
||||||
|
|
||||||
marker.reject().finally(() => {
|
marker.reject().finally(() => {
|
||||||
this.$notify.unblockUI();
|
this.$notify.unblockUI();
|
||||||
this.busy = false;
|
this.busy = false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onApprove(marker) {
|
onApprove(marker) {
|
||||||
|
if (this.busy || !marker) return;
|
||||||
|
|
||||||
this.busy = true;
|
this.busy = true;
|
||||||
|
|
||||||
marker.approve().finally(() => this.busy = false);
|
marker.approve().finally(() => this.busy = false);
|
||||||
},
|
},
|
||||||
onClearSubject(marker) {
|
onClearSubject(marker) {
|
||||||
|
if (this.busy || !marker) return;
|
||||||
|
|
||||||
this.busy = true;
|
this.busy = true;
|
||||||
this.$notify.blockUI();
|
this.$notify.blockUI();
|
||||||
|
|
||||||
marker.clearSubject(marker).finally(() => {
|
marker.clearSubject(marker).finally(() => {
|
||||||
this.$notify.unblockUI();
|
this.$notify.unblockUI();
|
||||||
this.busy = false;
|
this.busy = false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onRename(marker) {
|
onRename(marker) {
|
||||||
|
if (this.busy || !marker) return;
|
||||||
|
|
||||||
this.busy = true;
|
this.busy = true;
|
||||||
this.$notify.blockUI();
|
this.$notify.blockUI();
|
||||||
|
|
||||||
marker.rename().finally(() => {
|
marker.rename().finally(() => {
|
||||||
this.$notify.unblockUI();
|
this.$notify.unblockUI();
|
||||||
this.busy = false;
|
this.busy = false;
|
||||||
|
|
|
@ -452,7 +452,7 @@ export default {
|
||||||
return params;
|
return params;
|
||||||
},
|
},
|
||||||
refresh() {
|
refresh() {
|
||||||
if (this.loading || !this.active) {
|
if (this.loading || !this.active || this.busy) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -501,6 +501,8 @@ export default {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onShow(model) {
|
onShow(model) {
|
||||||
|
if (this.busy || !model) return;
|
||||||
|
|
||||||
this.busy = true;
|
this.busy = true;
|
||||||
model.show().finally(() => {
|
model.show().finally(() => {
|
||||||
this.busy = false;
|
this.busy = false;
|
||||||
|
@ -508,6 +510,8 @@ export default {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onHide(model) {
|
onHide(model) {
|
||||||
|
if (this.busy || !model) return;
|
||||||
|
|
||||||
this.busy = true;
|
this.busy = true;
|
||||||
model.hide().finally(() => {
|
model.hide().finally(() => {
|
||||||
this.busy = false;
|
this.busy = false;
|
||||||
|
@ -515,9 +519,7 @@ export default {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
toggleHidden(model) {
|
toggleHidden(model) {
|
||||||
if (!model) {
|
if (this.busy || !model) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.busy = true;
|
this.busy = true;
|
||||||
|
|
||||||
|
@ -532,8 +534,8 @@ export default {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onRename(model) {
|
onRename(model) {
|
||||||
if (!model.Name || model.Name.trim() === "") {
|
if (this.busy || !model || !model.Name || model.Name.trim() === "") {
|
||||||
// Refuse to save empty name.
|
// Ignore if busy, refuse to save empty name.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -111,3 +111,7 @@ func AbortAlreadyExists(c *gin.Context, s string) {
|
||||||
func AbortFeatureDisabled(c *gin.Context) {
|
func AbortFeatureDisabled(c *gin.Context) {
|
||||||
Abort(c, http.StatusForbidden, i18n.ErrFeatureDisabled)
|
Abort(c, http.StatusForbidden, i18n.ErrFeatureDisabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AbortBusy(c *gin.Context) {
|
||||||
|
Abort(c, http.StatusTooManyRequests, i18n.ErrBusy)
|
||||||
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ import (
|
||||||
"github.com/photoprism/photoprism/internal/event"
|
"github.com/photoprism/photoprism/internal/event"
|
||||||
"github.com/photoprism/photoprism/internal/form"
|
"github.com/photoprism/photoprism/internal/form"
|
||||||
"github.com/photoprism/photoprism/internal/i18n"
|
"github.com/photoprism/photoprism/internal/i18n"
|
||||||
|
"github.com/photoprism/photoprism/internal/mutex"
|
||||||
"github.com/photoprism/photoprism/internal/query"
|
"github.com/photoprism/photoprism/internal/query"
|
||||||
"github.com/photoprism/photoprism/internal/service"
|
"github.com/photoprism/photoprism/internal/service"
|
||||||
)
|
)
|
||||||
|
@ -66,6 +67,13 @@ func findFileMarker(c *gin.Context) (file *entity.File, marker *entity.Marker, e
|
||||||
// id: int Marker ID as returned by the API
|
// id: int Marker ID as returned by the API
|
||||||
func UpdateMarker(router *gin.RouterGroup) {
|
func UpdateMarker(router *gin.RouterGroup) {
|
||||||
router.PUT("/markers/:marker_uid", func(c *gin.Context) {
|
router.PUT("/markers/:marker_uid", func(c *gin.Context) {
|
||||||
|
if err := mutex.People.Start(); err != nil {
|
||||||
|
AbortBusy(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
defer mutex.People.Stop()
|
||||||
|
|
||||||
file, marker, err := findFileMarker(c)
|
file, marker, err := findFileMarker(c)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -137,6 +145,13 @@ func UpdateMarker(router *gin.RouterGroup) {
|
||||||
// id: int Marker ID as returned by the API
|
// id: int Marker ID as returned by the API
|
||||||
func ClearMarkerSubject(router *gin.RouterGroup) {
|
func ClearMarkerSubject(router *gin.RouterGroup) {
|
||||||
router.DELETE("/markers/:marker_uid/subject", func(c *gin.Context) {
|
router.DELETE("/markers/:marker_uid/subject", func(c *gin.Context) {
|
||||||
|
if err := mutex.People.Start(); err != nil {
|
||||||
|
AbortBusy(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
defer mutex.People.Stop()
|
||||||
|
|
||||||
file, marker, err := findFileMarker(c)
|
file, marker, err := findFileMarker(c)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import (
|
||||||
"github.com/photoprism/photoprism/internal/event"
|
"github.com/photoprism/photoprism/internal/event"
|
||||||
"github.com/photoprism/photoprism/internal/form"
|
"github.com/photoprism/photoprism/internal/form"
|
||||||
"github.com/photoprism/photoprism/internal/i18n"
|
"github.com/photoprism/photoprism/internal/i18n"
|
||||||
|
"github.com/photoprism/photoprism/internal/mutex"
|
||||||
"github.com/photoprism/photoprism/pkg/txt"
|
"github.com/photoprism/photoprism/pkg/txt"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -39,6 +40,13 @@ func GetSubject(router *gin.RouterGroup) {
|
||||||
// PUT /api/v1/subjects/:uid
|
// PUT /api/v1/subjects/:uid
|
||||||
func UpdateSubject(router *gin.RouterGroup) {
|
func UpdateSubject(router *gin.RouterGroup) {
|
||||||
router.PUT("/subjects/:uid", func(c *gin.Context) {
|
router.PUT("/subjects/:uid", func(c *gin.Context) {
|
||||||
|
if err := mutex.People.Start(); err != nil {
|
||||||
|
AbortBusy(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
defer mutex.People.Stop()
|
||||||
|
|
||||||
s := Auth(SessionID(c), acl.ResourceSubjects, acl.ActionUpdate)
|
s := Auth(SessionID(c), acl.ResourceSubjects, acl.ActionUpdate)
|
||||||
|
|
||||||
if s.Invalid() {
|
if s.Invalid() {
|
||||||
|
|
|
@ -446,10 +446,12 @@ func (c *Config) LogLevel() logrus.Level {
|
||||||
|
|
||||||
// Shutdown services and workers.
|
// Shutdown services and workers.
|
||||||
func (c *Config) Shutdown() {
|
func (c *Config) Shutdown() {
|
||||||
|
mutex.People.Cancel()
|
||||||
mutex.MainWorker.Cancel()
|
mutex.MainWorker.Cancel()
|
||||||
mutex.ShareWorker.Cancel()
|
mutex.ShareWorker.Cancel()
|
||||||
mutex.SyncWorker.Cancel()
|
mutex.SyncWorker.Cancel()
|
||||||
mutex.MetaWorker.Cancel()
|
mutex.MetaWorker.Cancel()
|
||||||
|
mutex.FacesWorker.Cancel()
|
||||||
|
|
||||||
if err := c.CloseDb(); err != nil {
|
if err := c.CloseDb(); err != nil {
|
||||||
log.Errorf("could not close database connection: %s", err)
|
log.Errorf("could not close database connection: %s", err)
|
||||||
|
|
|
@ -18,7 +18,7 @@ import (
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|
||||||
// define constants used for testing the config package
|
// Download URL and ZIP hash for test files.
|
||||||
const (
|
const (
|
||||||
TestDataZip = "/tmp/photoprism/testdata.zip"
|
TestDataZip = "/tmp/photoprism/testdata.zip"
|
||||||
TestDataURL = "https://dl.photoprism.org/qa/testdata.zip"
|
TestDataURL = "https://dl.photoprism.org/qa/testdata.zip"
|
||||||
|
@ -28,12 +28,13 @@ const (
|
||||||
var testConfig *Config
|
var testConfig *Config
|
||||||
var testConfigOnce sync.Once
|
var testConfigOnce sync.Once
|
||||||
var testConfigMutex sync.Mutex
|
var testConfigMutex sync.Mutex
|
||||||
|
var testDataMutex sync.Mutex
|
||||||
|
|
||||||
func testDataPath(assetsPath string) string {
|
func testDataPath(assetsPath string) string {
|
||||||
return assetsPath + "/testdata"
|
return assetsPath + "/testdata"
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewTestOptions inits valid options used for testing
|
// NewTestOptions returns valid config options for tests.
|
||||||
func NewTestOptions() *Options {
|
func NewTestOptions() *Options {
|
||||||
assetsPath := fs.Abs("../../assets")
|
assetsPath := fs.Abs("../../assets")
|
||||||
storagePath := fs.Abs("../../storage")
|
storagePath := fs.Abs("../../storage")
|
||||||
|
@ -80,7 +81,7 @@ func NewTestOptions() *Options {
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewTestOptionsError inits invalid options used for testing
|
// NewTestOptionsError returns invalid config options for tests.
|
||||||
func NewTestOptionsError() *Options {
|
func NewTestOptionsError() *Options {
|
||||||
assetsPath := fs.Abs("../..")
|
assetsPath := fs.Abs("../..")
|
||||||
testDataPath := fs.Abs("../../storage/testdata")
|
testDataPath := fs.Abs("../../storage/testdata")
|
||||||
|
@ -104,14 +105,14 @@ func SetNewTestConfig() {
|
||||||
testConfig = NewTestConfig()
|
testConfig = NewTestConfig()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestConfig inits the global testConfig if it was not already initialised
|
// TestConfig returns the existing test config instance or creates a new instance and returns it.
|
||||||
func TestConfig() *Config {
|
func TestConfig() *Config {
|
||||||
testConfigOnce.Do(SetNewTestConfig)
|
testConfigOnce.Do(SetNewTestConfig)
|
||||||
|
|
||||||
return testConfig
|
return testConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewTestConfig inits valid config used for testing
|
// NewTestConfig returns a valid test config.
|
||||||
func NewTestConfig() *Config {
|
func NewTestConfig() *Config {
|
||||||
defer log.Debug(capture.Time(time.Now(), "config: new test config created"))
|
defer log.Debug(capture.Time(time.Now(), "config: new test config created"))
|
||||||
|
|
||||||
|
@ -147,14 +148,14 @@ func NewTestConfig() *Config {
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewTestErrorConfig inits invalid config used for testing
|
// NewTestErrorConfig returns an invalid test config.
|
||||||
func NewTestErrorConfig() *Config {
|
func NewTestErrorConfig() *Config {
|
||||||
c := &Config{options: NewTestOptionsError()}
|
c := &Config{options: NewTestOptionsError()}
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
// CliTestContext returns example cli config for testing
|
// CliTestContext returns a CLI context for testing.
|
||||||
func CliTestContext() *cli.Context {
|
func CliTestContext() *cli.Context {
|
||||||
config := NewTestOptions()
|
config := NewTestOptions()
|
||||||
|
|
||||||
|
@ -200,7 +201,7 @@ func CliTestContext() *cli.Context {
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveTestData deletes files in import, export, originals and cache folders
|
// RemoveTestData deletes files in import, export, originals, and cache folders.
|
||||||
func (c *Config) RemoveTestData(t *testing.T) {
|
func (c *Config) RemoveTestData(t *testing.T) {
|
||||||
if err := os.RemoveAll(c.ImportPath()); err != nil {
|
if err := os.RemoveAll(c.ImportPath()); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
@ -219,7 +220,7 @@ func (c *Config) RemoveTestData(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// DownloadTestData downloads test data from photoprism.org server
|
// DownloadTestData downloads the test files from the file server.
|
||||||
func (c *Config) DownloadTestData(t *testing.T) {
|
func (c *Config) DownloadTestData(t *testing.T) {
|
||||||
if fs.FileExists(TestDataZip) {
|
if fs.FileExists(TestDataZip) {
|
||||||
hash := fs.Hash(TestDataZip)
|
hash := fs.Hash(TestDataZip)
|
||||||
|
@ -242,20 +243,23 @@ func (c *Config) DownloadTestData(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnzipTestData in default test folder
|
// UnzipTestData extracts tests files from the zip archive.
|
||||||
func (c *Config) UnzipTestData(t *testing.T) {
|
func (c *Config) UnzipTestData(t *testing.T) {
|
||||||
if _, err := fs.Unzip(TestDataZip, c.StoragePath()); err != nil {
|
if _, err := fs.Unzip(TestDataZip, c.StoragePath()); err != nil {
|
||||||
t.Fatalf("config: could not unzip test data: %s", err.Error())
|
t.Fatalf("config: could not unzip test data: %s", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// InitializeTestData using testing constant
|
// InitializeTestData resets the test file directory.
|
||||||
func (c *Config) InitializeTestData(t *testing.T) {
|
func (c *Config) InitializeTestData(t *testing.T) {
|
||||||
defer t.Logf(capture.Time(time.Now(), "config: initialized test data"))
|
testDataMutex.Lock()
|
||||||
|
defer testDataMutex.Unlock()
|
||||||
|
|
||||||
|
start := time.Now()
|
||||||
|
|
||||||
c.RemoveTestData(t)
|
c.RemoveTestData(t)
|
||||||
|
|
||||||
c.DownloadTestData(t)
|
c.DownloadTestData(t)
|
||||||
|
|
||||||
c.UnzipTestData(t)
|
c.UnzipTestData(t)
|
||||||
|
|
||||||
|
t.Logf("config: initialized test data [%s]", time.Since(start))
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,8 +49,8 @@ func LabelCounts() LabelPhotoCounts {
|
||||||
|
|
||||||
// UpdatePlacesCounts updates the places photo counts.
|
// UpdatePlacesCounts updates the places photo counts.
|
||||||
func UpdatePlacesCounts() (err error) {
|
func UpdatePlacesCounts() (err error) {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
||||||
|
@ -73,8 +73,8 @@ func UpdatePlacesCounts() (err error) {
|
||||||
|
|
||||||
// UpdateSubjectCounts updates the subject file counts.
|
// UpdateSubjectCounts updates the subject file counts.
|
||||||
func UpdateSubjectCounts() (err error) {
|
func UpdateSubjectCounts() (err error) {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
||||||
|
@ -128,8 +128,8 @@ func UpdateSubjectCounts() (err error) {
|
||||||
|
|
||||||
// UpdateLabelCounts updates the label photo counts.
|
// UpdateLabelCounts updates the label photo counts.
|
||||||
func UpdateLabelCounts() (err error) {
|
func UpdateLabelCounts() (err error) {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
var res *gorm.DB
|
var res *gorm.DB
|
||||||
|
|
|
@ -34,6 +34,7 @@ const (
|
||||||
ErrInvalidCredentials
|
ErrInvalidCredentials
|
||||||
ErrInvalidLink
|
ErrInvalidLink
|
||||||
ErrInvalidName
|
ErrInvalidName
|
||||||
|
ErrBusy
|
||||||
|
|
||||||
MsgChangesSaved
|
MsgChangesSaved
|
||||||
MsgAlbumCreated
|
MsgAlbumCreated
|
||||||
|
@ -112,6 +113,7 @@ var Messages = MessageMap{
|
||||||
ErrInvalidCredentials: gettext("Invalid credentials"),
|
ErrInvalidCredentials: gettext("Invalid credentials"),
|
||||||
ErrInvalidLink: gettext("Invalid link"),
|
ErrInvalidLink: gettext("Invalid link"),
|
||||||
ErrInvalidName: gettext("Invalid name"),
|
ErrInvalidName: gettext("Invalid name"),
|
||||||
|
ErrBusy: gettext("Busy, please try again later"),
|
||||||
|
|
||||||
// Info and confirmation messages:
|
// Info and confirmation messages:
|
||||||
MsgChangesSaved: gettext("Changes successfully saved"),
|
MsgChangesSaved: gettext("Changes successfully saved"),
|
||||||
|
|
|
@ -6,7 +6,8 @@ import (
|
||||||
|
|
||||||
var (
|
var (
|
||||||
Db = sync.Mutex{}
|
Db = sync.Mutex{}
|
||||||
IndexUpdate = sync.Mutex{}
|
Index = sync.Mutex{}
|
||||||
|
People = Busy{}
|
||||||
MainWorker = Busy{}
|
MainWorker = Busy{}
|
||||||
SyncWorker = Busy{}
|
SyncWorker = Busy{}
|
||||||
ShareWorker = Busy{}
|
ShareWorker = Busy{}
|
||||||
|
|
|
@ -74,8 +74,8 @@ func AlbumCoverByUID(uid string) (file entity.File, err error) {
|
||||||
|
|
||||||
// UpdateAlbumDates updates album year, month and day based on indexed photo metadata.
|
// UpdateAlbumDates updates album year, month and day based on indexed photo metadata.
|
||||||
func UpdateAlbumDates() error {
|
func UpdateAlbumDates() error {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
switch DbDialect() {
|
switch DbDialect() {
|
||||||
case MySQL:
|
case MySQL:
|
||||||
|
@ -93,8 +93,8 @@ func UpdateAlbumDates() error {
|
||||||
|
|
||||||
// UpdateMissingAlbumEntries sets a flag for missing photo album entries.
|
// UpdateMissingAlbumEntries sets a flag for missing photo album entries.
|
||||||
func UpdateMissingAlbumEntries() error {
|
func UpdateMissingAlbumEntries() error {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
switch DbDialect() {
|
switch DbDialect() {
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -14,8 +14,8 @@ import (
|
||||||
|
|
||||||
// UpdateAlbumDefaultCovers updates default album cover thumbs.
|
// UpdateAlbumDefaultCovers updates default album cover thumbs.
|
||||||
func UpdateAlbumDefaultCovers() (err error) {
|
func UpdateAlbumDefaultCovers() (err error) {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
||||||
|
@ -62,8 +62,8 @@ func UpdateAlbumDefaultCovers() (err error) {
|
||||||
|
|
||||||
// UpdateAlbumFolderCovers updates folder album cover thumbs.
|
// UpdateAlbumFolderCovers updates folder album cover thumbs.
|
||||||
func UpdateAlbumFolderCovers() (err error) {
|
func UpdateAlbumFolderCovers() (err error) {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
||||||
|
@ -110,8 +110,8 @@ func UpdateAlbumFolderCovers() (err error) {
|
||||||
|
|
||||||
// UpdateAlbumMonthCovers updates month album cover thumbs.
|
// UpdateAlbumMonthCovers updates month album cover thumbs.
|
||||||
func UpdateAlbumMonthCovers() (err error) {
|
func UpdateAlbumMonthCovers() (err error) {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
||||||
|
@ -178,8 +178,8 @@ func UpdateAlbumCovers() (err error) {
|
||||||
|
|
||||||
// UpdateLabelCovers updates label cover thumbs.
|
// UpdateLabelCovers updates label cover thumbs.
|
||||||
func UpdateLabelCovers() (err error) {
|
func UpdateLabelCovers() (err error) {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
||||||
|
@ -245,8 +245,8 @@ func UpdateLabelCovers() (err error) {
|
||||||
|
|
||||||
// UpdateSubjectCovers updates subject cover thumbs.
|
// UpdateSubjectCovers updates subject cover thumbs.
|
||||||
func UpdateSubjectCovers() (err error) {
|
func UpdateSubjectCovers() (err error) {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
||||||
|
|
|
@ -213,8 +213,8 @@ func ResolveFaceCollisions() (conflicts, resolved int, err error) {
|
||||||
|
|
||||||
// RemovePeopleAndFaces permanently removes all people, faces, and face markers.
|
// RemovePeopleAndFaces permanently removes all people, faces, and face markers.
|
||||||
func RemovePeopleAndFaces() (err error) {
|
func RemovePeopleAndFaces() (err error) {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
// Delete people.
|
// Delete people.
|
||||||
if err = UnscopedDb().Delete(entity.Subject{}, "subj_type = ?", entity.SubjPerson).Error; err != nil {
|
if err = UnscopedDb().Delete(entity.Subject{}, "subj_type = ?", entity.SubjPerson).Error; err != nil {
|
||||||
|
|
|
@ -64,8 +64,8 @@ func AlbumFolders(threshold int) (folders entity.Folders, err error) {
|
||||||
|
|
||||||
// UpdateFolderDates updates folder year, month and day based on indexed photo metadata.
|
// UpdateFolderDates updates folder year, month and day based on indexed photo metadata.
|
||||||
func UpdateFolderDates() error {
|
func UpdateFolderDates() error {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
switch DbDialect() {
|
switch DbDialect() {
|
||||||
case MySQL:
|
case MySQL:
|
||||||
|
|
|
@ -118,8 +118,8 @@ func OrphanPhotos() (photos entity.Photos, err error) {
|
||||||
|
|
||||||
// FixPrimaries tries to set a primary file for photos that have none.
|
// FixPrimaries tries to set a primary file for photos that have none.
|
||||||
func FixPrimaries() error {
|
func FixPrimaries() error {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
||||||
|
@ -162,8 +162,8 @@ func FixPrimaries() error {
|
||||||
|
|
||||||
// FlagHiddenPhotos sets the quality score of photos without valid primary file to -1.
|
// FlagHiddenPhotos sets the quality score of photos without valid primary file to -1.
|
||||||
func FlagHiddenPhotos() error {
|
func FlagHiddenPhotos() error {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
||||||
|
|
|
@ -44,8 +44,8 @@ func PurgeOrphans() error {
|
||||||
|
|
||||||
// PurgeOrphanFiles removes files without a photo from the index.
|
// PurgeOrphanFiles removes files without a photo from the index.
|
||||||
func PurgeOrphanFiles() (count int, err error) {
|
func PurgeOrphanFiles() (count int, err error) {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
files, err := OrphanFiles()
|
files, err := OrphanFiles()
|
||||||
|
|
||||||
|
@ -66,8 +66,8 @@ func PurgeOrphanFiles() (count int, err error) {
|
||||||
|
|
||||||
// PurgeOrphanDuplicates deletes all files from the duplicates table that don't exist in the files table.
|
// PurgeOrphanDuplicates deletes all files from the duplicates table that don't exist in the files table.
|
||||||
func PurgeOrphanDuplicates() error {
|
func PurgeOrphanDuplicates() error {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
return UnscopedDb().Delete(
|
return UnscopedDb().Delete(
|
||||||
entity.Duplicate{},
|
entity.Duplicate{},
|
||||||
|
@ -76,8 +76,8 @@ func PurgeOrphanDuplicates() error {
|
||||||
|
|
||||||
// PurgeOrphanCountries removes countries without any photos.
|
// PurgeOrphanCountries removes countries without any photos.
|
||||||
func PurgeOrphanCountries() error {
|
func PurgeOrphanCountries() error {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
entity.FlushCountryCache()
|
entity.FlushCountryCache()
|
||||||
switch DbDialect() {
|
switch DbDialect() {
|
||||||
|
@ -88,8 +88,8 @@ func PurgeOrphanCountries() error {
|
||||||
|
|
||||||
// PurgeOrphanCameras removes cameras without any photos.
|
// PurgeOrphanCameras removes cameras without any photos.
|
||||||
func PurgeOrphanCameras() error {
|
func PurgeOrphanCameras() error {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
entity.FlushCameraCache()
|
entity.FlushCameraCache()
|
||||||
switch DbDialect() {
|
switch DbDialect() {
|
||||||
|
@ -100,8 +100,8 @@ func PurgeOrphanCameras() error {
|
||||||
|
|
||||||
// PurgeOrphanLenses removes cameras without any photos.
|
// PurgeOrphanLenses removes cameras without any photos.
|
||||||
func PurgeOrphanLenses() error {
|
func PurgeOrphanLenses() error {
|
||||||
mutex.IndexUpdate.Lock()
|
mutex.Index.Lock()
|
||||||
defer mutex.IndexUpdate.Unlock()
|
defer mutex.Index.Unlock()
|
||||||
|
|
||||||
entity.FlushLensCache()
|
entity.FlushLensCache()
|
||||||
switch DbDialect() {
|
switch DbDialect() {
|
||||||
|
|
Loading…
Reference in a new issue