UX: Sort archived pictures by "Recently Deleted" #3975

Signed-off-by: Michael Mayer <michael@photoprism.app>
This commit is contained in:
Michael Mayer 2024-09-13 13:44:27 +02:00
parent 440400d523
commit ab9e156c9a
56 changed files with 12062 additions and 12487 deletions

View file

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-07-09 06:08+0000\n"
"PO-Revision-Date: 2024-09-03 12:37+0000\n"
"Last-Translator: Weblate Translation Memory <noreply-mt-weblate-translation-"
@ -16,8 +16,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :("
"n>6 && n<11) ? 3 : 4;\n"
"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :"
"(n>6 && n<11) ? 3 : 4;\n"
"X-Generator: Weblate 5.7.1\n"
#: messages.go:101

View file

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: 2024-07-08 13:45+0000\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-07-09 06:08+0000\n"
"PO-Revision-Date: 2024-07-30 06:22+0000\n"
"Last-Translator: Cotignac <jan-eric@myhrgren.se>\n"
"Language-Team: Swedish <https://translate.photoprism.app/projects/photoprism/"

View file

@ -16,26 +16,26 @@
"@babel/register": "^7.24.6",
"@babel/runtime": "^7.25.6",
"@lcdp/offline-plugin": "^5.1.1",
"@vvo/tzdb": "^6.144.0",
"axios": "^1.7.6",
"@vvo/tzdb": "^6.145.0",
"axios": "^1.7.7",
"axios-mock-adapter": "^2.0.0",
"babel-loader": "^9.1.3",
"babel-plugin-istanbul": "^7.0.0",
"browserslist": "^4.23.3",
"chai": "^5.1.1",
"cheerio": "^1.0.0",
"cheerio": "1.0.0-rc.12",
"chrome-finder": "^1.0.7",
"core-js": "^3.38.1",
"cross-env": "^7.0.3",
"css-loader": "^7.1.2",
"cssnano": "^7.0.5",
"cssnano": "^7.0.6",
"easygettext": "^2.17.0",
"eslint": ">=8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-config-standard": "^17.1.0",
"eslint-formatter-pretty": "^6.0.1",
"eslint-plugin-html": "^8.1.1",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-import": "^2.30.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-promise": "^6.6.0",
@ -61,17 +61,17 @@
"mocha": "^10.7.3",
"node-storage-shim": "^2.0.1",
"photoswipe": "^4.1.3",
"postcss": "^8.4.41",
"postcss": "^8.4.45",
"postcss-import": "^16.1.0",
"postcss-loader": "^8.1.1",
"postcss-preset-env": "^10.0.2",
"postcss-preset-env": "^10.0.3",
"postcss-reporter": "^7.1.0",
"postcss-url": "^10.1.3",
"prettier": "^3.3.3",
"pubsub-js": "^1.9.4",
"regenerator-runtime": "^0.14.1",
"resolve-url-loader": "^5.0.0",
"sass": "^1.77.8",
"sass": "^1.78.0",
"sass-loader": "^16.0.1",
"server": "^1.0.39",
"sockette": "^2.0.6",
@ -4821,18 +4821,6 @@
"ms": "2.0.0"
}
},
"node_modules/body-parser/node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/body-parser/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@ -5108,25 +5096,21 @@
}
},
"node_modules/cheerio": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz",
"integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==",
"version": "1.0.0-rc.12",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
"integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
"license": "MIT",
"dependencies": {
"cheerio-select": "^2.1.0",
"dom-serializer": "^2.0.0",
"domhandler": "^5.0.3",
"domutils": "^3.1.0",
"encoding-sniffer": "^0.2.0",
"htmlparser2": "^9.1.0",
"parse5": "^7.1.2",
"parse5-htmlparser2-tree-adapter": "^7.0.0",
"parse5-parser-stream": "^7.1.2",
"undici": "^6.19.5",
"whatwg-mimetype": "^4.0.0"
"domutils": "^3.0.1",
"htmlparser2": "^8.0.1",
"parse5": "^7.0.0",
"parse5-htmlparser2-tree-adapter": "^7.0.0"
},
"engines": {
"node": ">=18.17"
"node": ">= 6"
},
"funding": {
"url": "https://github.com/cheeriojs/cheerio?sponsor=1"
@ -6457,9 +6441,9 @@
}
},
"node_modules/electron-to-chromium": {
"version": "1.5.20",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.20.tgz",
"integrity": "sha512-74mdl6Fs1HHzK9SUX4CKFxAtAe3nUns48y79TskHNAG6fGOlLfyKA4j855x+0b5u8rWJIrlaG9tcTPstMlwjIw==",
"version": "1.5.22",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.22.tgz",
"integrity": "sha512-tKYm5YHPU1djz0O+CGJ+oJIvimtsCcwR2Z9w7Skh08lUdyzXY5djods3q+z2JkWdb7tCcmM//eVavSRAiaPRNg==",
"license": "ISC"
},
"node_modules/emoji-regex": {
@ -6486,19 +6470,6 @@
"node": ">= 0.8"
}
},
"node_modules/encoding-sniffer": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz",
"integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==",
"license": "MIT",
"dependencies": {
"iconv-lite": "^0.6.3",
"whatwg-encoding": "^3.1.1"
},
"funding": {
"url": "https://github.com/fb55/encoding-sniffer?sponsor=1"
}
},
"node_modules/engine.io": {
"version": "6.5.5",
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz",
@ -6576,9 +6547,9 @@
}
},
"node_modules/envinfo": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz",
"integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==",
"version": "7.14.0",
"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz",
"integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==",
"license": "MIT",
"bin": {
"envinfo": "dist/cli.js"
@ -7017,6 +6988,25 @@
"node": ">=16.0.0"
}
},
"node_modules/eslint-plugin-html/node_modules/htmlparser2": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz",
"integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==",
"funding": [
"https://github.com/fb55/htmlparser2?sponsor=1",
{
"type": "github",
"url": "https://github.com/sponsors/fb55"
}
],
"license": "MIT",
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3",
"domutils": "^3.1.0",
"entities": "^4.5.0"
}
},
"node_modules/eslint-plugin-import": {
"version": "2.30.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz",
@ -8813,9 +8803,9 @@
"license": "MIT"
},
"node_modules/htmlparser2": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz",
"integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==",
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
"integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
"funding": [
"https://github.com/fb55/htmlparser2?sponsor=1",
{
@ -8827,8 +8817,8 @@
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3",
"domutils": "^3.1.0",
"entities": "^4.5.0"
"domutils": "^3.0.1",
"entities": "^4.4.0"
}
},
"node_modules/http-errors": {
@ -8879,12 +8869,12 @@
}
},
"node_modules/iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
@ -11432,18 +11422,6 @@
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
"node_modules/parse5-parser-stream": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz",
"integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==",
"license": "MIT",
"dependencies": {
"parse5": "^7.0.0"
},
"funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@ -13319,18 +13297,6 @@
"node": ">= 0.8"
}
},
"node_modules/raw-body/node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@ -15316,15 +15282,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/undici": {
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz",
"integrity": "sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==",
"license": "MIT",
"engines": {
"node": ">=18.17"
}
},
"node_modules/undici-types": {
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
@ -16250,27 +16207,6 @@
"url": "https://opencollective.com/webpack"
}
},
"node_modules/whatwg-encoding": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
"integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
"license": "MIT",
"dependencies": {
"iconv-lite": "0.6.3"
},
"engines": {
"node": ">=18"
}
},
"node_modules/whatwg-mimetype": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
"integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",

View file

@ -28,26 +28,26 @@
"@babel/register": "^7.24.6",
"@babel/runtime": "^7.25.6",
"@lcdp/offline-plugin": "^5.1.1",
"@vvo/tzdb": "^6.144.0",
"axios": "^1.7.6",
"@vvo/tzdb": "^6.145.0",
"axios": "^1.7.7",
"axios-mock-adapter": "^2.0.0",
"babel-loader": "^9.1.3",
"babel-plugin-istanbul": "^7.0.0",
"browserslist": "^4.23.3",
"chai": "^5.1.1",
"cheerio": "^1.0.0",
"cheerio": "1.0.0-rc.12",
"chrome-finder": "^1.0.7",
"core-js": "^3.38.1",
"cross-env": "^7.0.3",
"css-loader": "^7.1.2",
"cssnano": "^7.0.5",
"cssnano": "^7.0.6",
"easygettext": "^2.17.0",
"eslint": ">=8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-config-standard": "^17.1.0",
"eslint-formatter-pretty": "^6.0.1",
"eslint-plugin-html": "^8.1.1",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-import": "^2.30.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-promise": "^6.6.0",
@ -73,17 +73,17 @@
"mocha": "^10.7.3",
"node-storage-shim": "^2.0.1",
"photoswipe": "^4.1.3",
"postcss": "^8.4.41",
"postcss": "^8.4.45",
"postcss-import": "^16.1.0",
"postcss-loader": "^8.1.1",
"postcss-preset-env": "^10.0.2",
"postcss-preset-env": "^10.0.3",
"postcss-reporter": "^7.1.0",
"postcss-url": "^10.1.3",
"prettier": "^3.3.3",
"pubsub-js": "^1.9.4",
"regenerator-runtime": "^0.14.1",
"resolve-url-loader": "^5.0.0",
"sass": "^1.77.8",
"sass": "^1.78.0",
"sass-loader": "^16.0.1",
"server": "^1.0.39",
"sockette": "^2.0.6",

View file

@ -122,27 +122,6 @@ export default {
collectionRoute: this.$route.meta?.collectionRoute ? this.$route.meta.collectionRoute : "albums",
navIcon: this.$rtl ? "navigate_before" : "navigate_next",
searchExpanded: false,
options: {
views: [
{ value: "mosaic", text: this.$gettext("Mosaic") },
{ value: "cards", text: this.$gettext("Cards") },
{ value: "list", text: this.$gettext("List") },
],
countries: countries,
cameras: cameras,
sorting: [
{ value: "newest", text: this.$gettext("Newest First") },
{ value: "oldest", text: this.$gettext("Oldest First") },
{ value: "added", text: this.$gettext("Recently Added") },
{ value: "edited", text: this.$gettext("Recently Edited") },
{ value: "title", text: this.$gettext("Picture Title") },
{ value: "name", text: this.$gettext("File Name") },
{ value: "size", text: this.$gettext("File Size") },
{ value: "duration", text: this.$gettext("Video Duration") },
{ value: "similar", text: this.$gettext("Visual Similarity") },
{ value: "relevance", text: this.$gettext("Most Relevant") },
],
},
dialog: {
share: false,
upload: false,

View file

@ -145,7 +145,7 @@
hide-details
color="secondary-dark"
background-color="secondary"
:items="options.sorting"
:items="sortOptions"
@change="
(v) => {
updateQuery({ order: v });
@ -306,6 +306,7 @@ export default {
data() {
const features = this.$config.settings().features;
const readonly = this.$config.get("readonly");
return {
experimental: this.$config.get("experimental"),
isFullScreen: !!document.fullscreenElement,
@ -330,18 +331,6 @@ export default {
{ value: "cards", text: this.$gettext("Cards") },
{ value: "list", text: this.$gettext("List") },
],
sorting: [
{ value: "newest", text: this.$gettext("Newest First") },
{ value: "oldest", text: this.$gettext("Oldest First") },
{ value: "added", text: this.$gettext("Recently Added") },
{ value: "edited", text: this.$gettext("Recently Edited") },
{ value: "title", text: this.$gettext("Picture Title") },
{ value: "name", text: this.$gettext("File Name") },
{ value: "size", text: this.$gettext("File Size") },
{ value: "duration", text: this.$gettext("Video Duration") },
{ value: "similar", text: this.$gettext("Visual Similarity") },
{ value: "relevance", text: this.$gettext("Most Relevant") },
],
},
dialog: {
delete: false,
@ -355,12 +344,54 @@ export default {
cameraOptions() {
return this.all.cameras.concat(this.config.cameras);
},
lensOptions() {
return this.all.lenses.concat(this.config.lenses);
},
categoryOptions() {
return this.all.categories.concat(this.config.categories);
},
sortOptions() {
let result;
switch (this.context) {
case "archive":
result = [
{ value: "newest", text: this.$gettext("Newest First") },
{ value: "oldest", text: this.$gettext("Oldest First") },
{ value: "added", text: this.$gettext("Recently Added") },
{ value: "deleted", text: this.$gettext("Recently Deleted") },
{ value: "title", text: this.$gettext("Picture Title") },
{ value: "name", text: this.$gettext("File Name") },
{ value: "size", text: this.$gettext("File Size") },
{ value: "duration", text: this.$gettext("Video Duration") },
];
break;
case "review":
result = [
{ value: "newest", text: this.$gettext("Newest First") },
{ value: "oldest", text: this.$gettext("Oldest First") },
{ value: "added", text: this.$gettext("Recently Added") },
{ value: "title", text: this.$gettext("Picture Title") },
{ value: "name", text: this.$gettext("File Name") },
{ value: "size", text: this.$gettext("File Size") },
{ value: "duration", text: this.$gettext("Video Duration") },
{ value: "similar", text: this.$gettext("Visual Similarity") },
];
break;
default:
result = [
{ value: "newest", text: this.$gettext("Newest First") },
{ value: "oldest", text: this.$gettext("Oldest First") },
{ value: "added", text: this.$gettext("Recently Added") },
{ value: "edited", text: this.$gettext("Recently Edited") },
{ value: "title", text: this.$gettext("Picture Title") },
{ value: "name", text: this.$gettext("File Name") },
{ value: "size", text: this.$gettext("File Size") },
{ value: "duration", text: this.$gettext("Video Duration") },
{ value: "similar", text: this.$gettext("Visual Similarity") },
{ value: "relevance", text: this.$gettext("Most Relevant") },
];
}
return result;
},
},
methods: {
colorOptions() {

View file

@ -79,12 +79,10 @@ export default {
{ value: "newest", text: this.$gettext("Newest First") },
{ value: "oldest", text: this.$gettext("Oldest First") },
{ value: "added", text: this.$gettext("Recently Added") },
{ value: "edited", text: this.$gettext("Recently Edited") },
{ value: "title", text: this.$gettext("Picture Title") },
{ value: "name", text: this.$gettext("File Name") },
{ value: "size", text: this.$gettext("File Size") },
{ value: "duration", text: this.$gettext("Video Duration") },
{ value: "similar", text: this.$gettext("Visual Similarity") },
{ value: "relevance", text: this.$gettext("Most Relevant") },
],
categories: this.$config.albumCategories(),

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -246,17 +246,34 @@ export default {
return "newest";
}
let queryParam = this.$route.query["order"];
let storedType = window.localStorage.getItem("photos_order");
let storageKey;
let defaultOrder;
if (queryParam) {
window.localStorage.setItem("photos_order", queryParam);
return queryParam;
} else if (storedType) {
return storedType;
switch (this.context) {
case "archive":
storageKey = "archive_order";
defaultOrder = "deleted";
break;
case "review":
storageKey = "review_order";
defaultOrder = "added";
break;
default:
storageKey = "photos_order";
defaultOrder = "newest";
}
return "newest";
let queryOrder = this.$route.query["order"];
let storageOrder = window.localStorage.getItem(storageKey);
if (queryOrder) {
window.localStorage.setItem(storageKey, queryOrder);
return queryOrder;
} else if (storageOrder) {
return storageOrder;
}
return defaultOrder;
},
openDate(index) {
const photo = this.results[index];

View file

@ -174,6 +174,8 @@ func searchPhotos(f form.SearchPhotos, sess *entity.Session, resultCols string)
s = s.Where("photos.edited_at IS NOT NULL").Order("photos.edited_at DESC, files.media_id")
case sortby.Updated:
s = s.Where("photos.updated_at > photos.created_at").Order("photos.updated_at DESC, files.media_id")
case sortby.Deleted:
s = s.Order("photos.deleted_at DESC, files.media_id")
case sortby.Relevance:
if f.Label != "" {
s = s.Order("photos.photo_quality DESC, photos_labels.uncertainty ASC, files.time_index")

View file

@ -972,7 +972,7 @@ func TestPhotos(t *testing.T) {
assert.IsType(t, PhotoResults{}, photos)
})
t.Run("search all recently edited", func(t *testing.T) {
t.Run("RecentlyEdited", func(t *testing.T) {
var frm form.SearchPhotos
frm.Query = ""
@ -1004,6 +1004,38 @@ func TestPhotos(t *testing.T) {
}
}
})
t.Run("RecentlyDeleted", func(t *testing.T) {
var frm form.SearchPhotos
frm.Query = ""
frm.Count = 10
frm.Offset = 0
frm.Order = sortby.Deleted
// Parse query string and filter.
if err := frm.ParseQueryString(); err != nil {
t.Fatal(err)
}
photos, _, err := Photos(frm)
if err != nil {
t.Fatal(err)
}
assert.GreaterOrEqual(t, len(photos), 1)
for _, r := range photos {
assert.IsType(t, Photo{}, r)
assert.NotEmpty(t, r.ID)
assert.NotEmpty(t, r.CameraID)
assert.NotEmpty(t, r.LensID)
if fix, ok := entity.PhotoFixtures[r.PhotoName]; ok {
assert.Equal(t, fix.PhotoName, r.PhotoName)
}
}
})
t.Run("search unstacked panoramas", func(t *testing.T) {
var frm form.SearchPhotos

View file

@ -6,12 +6,13 @@ const (
Duration = "duration"
Size = "size"
Count = "count"
Newest = "newest"
Oldest = "oldest"
Added = "added"
Imported = "imported"
Edited = "edited"
Updated = "updated"
Newest = "newest"
Oldest = "oldest"
Deleted = "deleted"
Place = "place"
Moment = "moment"
Favorites = "favorites"