Merge remote-tracking branch 'origin/main' into video_file_preview

This commit is contained in:
Neeraj Gupta
2024-09-06 12:02:34 +05:30
22 changed files with 311 additions and 266 deletions

View File

@@ -2,8 +2,8 @@ PODS:
- app_links (1.0.0):
- FlutterMacOS
- connectivity_plus (0.0.1):
- Flutter
- FlutterMacOS
- ReachabilitySwift
- desktop_webview_window (0.0.1):
- FlutterMacOS
- device_info_plus (0.0.1):
@@ -29,14 +29,13 @@ PODS:
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- ReachabilitySwift (5.2.3)
- screen_retriever (0.0.1):
- FlutterMacOS
- Sentry/HybridSDK (8.25.0)
- sentry_flutter (7.20.2):
- Sentry/HybridSDK (8.33.0)
- sentry_flutter (8.7.0):
- Flutter
- FlutterMacOS
- Sentry/HybridSDK (= 8.25.0)
- Sentry/HybridSDK (= 8.33.0)
- share_plus (0.0.1):
- FlutterMacOS
- shared_preferences_foundation (0.0.1):
@@ -47,16 +46,16 @@ PODS:
- sqflite (0.0.3):
- Flutter
- FlutterMacOS
- "sqlite3 (3.46.0+1)":
- "sqlite3/common (= 3.46.0+1)"
- "sqlite3/common (3.46.0+1)"
- "sqlite3/dbstatvtab (3.46.0+1)":
- "sqlite3 (3.46.1+1)":
- "sqlite3/common (= 3.46.1+1)"
- "sqlite3/common (3.46.1+1)"
- "sqlite3/dbstatvtab (3.46.1+1)":
- sqlite3/common
- "sqlite3/fts5 (3.46.0+1)":
- "sqlite3/fts5 (3.46.1+1)":
- sqlite3/common
- "sqlite3/perf-threadsafe (3.46.0+1)":
- "sqlite3/perf-threadsafe (3.46.1+1)":
- sqlite3/common
- "sqlite3/rtree (3.46.0+1)":
- "sqlite3/rtree (3.46.1+1)":
- sqlite3/common
- sqlite3_flutter_libs (0.0.1):
- FlutterMacOS
@@ -74,7 +73,7 @@ PODS:
DEPENDENCIES:
- app_links (from `Flutter/ephemeral/.symlinks/plugins/app_links/macos`)
- connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos`)
- connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin`)
- desktop_webview_window (from `Flutter/ephemeral/.symlinks/plugins/desktop_webview_window/macos`)
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
- file_saver (from `Flutter/ephemeral/.symlinks/plugins/file_saver/macos`)
@@ -100,7 +99,6 @@ DEPENDENCIES:
SPEC REPOS:
trunk:
- OrderedSet
- ReachabilitySwift
- Sentry
- sqlite3
@@ -108,7 +106,7 @@ EXTERNAL SOURCES:
app_links:
:path: Flutter/ephemeral/.symlinks/plugins/app_links/macos
connectivity_plus:
:path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos
:path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin
desktop_webview_window:
:path: Flutter/ephemeral/.symlinks/plugins/desktop_webview_window/macos
device_info_plus:
@@ -154,7 +152,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
app_links: 10e0a0ab602ffaf34d142cd4862f29d34b303b2a
connectivity_plus: 18d3c32514c886e046de60e9c13895109866c747
connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
desktop_webview_window: d4365e71bcd4e1aa0c14cf0377aa24db0c16a7e2
device_info_plus: 5401765fde0b8d062a2f8eb65510fb17e77cf07f
file_saver: 44e6fbf666677faf097302460e214e977fdd977b
@@ -165,17 +163,16 @@ SPEC CHECKSUMS:
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
package_info_plus: 02d7a575e80f194102bef286361c6c326e4c29ce
package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
ReachabilitySwift: 7f151ff156cea1481a8411701195ac6a984f4979
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
Sentry: cd86fc55628f5b7c572cabe66cc8f95a9d2f165a
sentry_flutter: 0cf2507eb90ff7a6aa3304e900dd7f08edbbefdf
share_plus: 76dd39142738f7a68dd57b05093b5e8193f220f7
Sentry: 8560050221424aef0bebc8e31eedf00af80f90a6
sentry_flutter: e26b861f744e5037a3faf9bf56603ec65d658a61
share_plus: 36537c04ce0c3e3f5bd297ce4318b6d5ee5fd6cf
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
sodium_libs: d39bd76697736cb11ce4a0be73b9b4bc64466d6f
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
sqlite3: 292c3e1bfe89f64e51ea7fc7dab9182a017c8630
sqlite3: 0bb0e6389d824e40296f531b858a2a0b71c0d2fb
sqlite3_flutter_libs: 5ca46c1a04eddfbeeb5b16566164aa7ad1616e7b
tray_manager: 9064e219c56d75c476e46b9a21182087930baf90
url_launcher_macos: 5f437abeda8c85500ceb03f5c1938a8c5a705399

View File

@@ -1,11 +1,15 @@
# CHANGELOG
## v1.7.4 (Unreleased)
## v1.7.5 (Unreleased)
- .
## v1.7.4
- Improved date search, including support for day of week and hour of day.
- Fix video thumbnail generation and upload on Intel macOS.
- Club a photo and video into a live photo only if both are within 2 minutes.
- .
- Fix an issue causing ZIP uploads to sometimes fail.
## v1.7.3

View File

@@ -1,6 +1,6 @@
{
"name": "ente",
"version": "1.7.4-beta",
"version": "1.7.5-beta",
"private": true,
"description": "Desktop client for Ente Photos",
"repository": "github:ente-io/photos-desktop",
@@ -37,10 +37,10 @@
"lru-cache": "^11.0.0",
"next-electron-server": "^1.0.0",
"node-stream-zip": "^1.15.0",
"onnxruntime-node": "^1.19.0"
"onnxruntime-node": "^1.19.2"
},
"devDependencies": {
"@eslint/js": "^9.9.0",
"@eslint/js": "^9.9.1",
"@tsconfig/node20": "^20.1.4",
"@types/auto-launch": "^5.0.5",
"@types/eslint__js": "^8.42.3",
@@ -53,10 +53,10 @@
"eslint": "^9",
"prettier": "^3.3.3",
"prettier-plugin-organize-imports": "^4.0.0",
"prettier-plugin-packagejson": "^2.5.1",
"prettier-plugin-packagejson": "^2.5.2",
"shx": "^0.3.4",
"typescript": "^5.5.4",
"typescript-eslint": "^8.2.0"
"typescript-eslint": "^8.4.0"
},
"packageManager": "yarn@1.22.22",
"productName": "ente"

View File

@@ -61,10 +61,13 @@ export const migrateLegacyWatchStoreIfNeeded = () => {
// this'll be undefined, so tell ESLint to calm down.
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (!collectionMapping) {
// eslint-disable-next-line @typescript-eslint/no-deprecated
collectionMapping = watch.uploadStrategy == 1 ? "parent" : "root";
needsUpdate = true;
}
// eslint-disable-next-line @typescript-eslint/no-deprecated
if (watch.rootFolderName) {
// eslint-disable-next-line @typescript-eslint/no-deprecated
delete watch.rootFolderName;
needsUpdate = true;
}

View File

@@ -8,9 +8,9 @@
integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==
"@babel/runtime@^7.21.0":
version "7.25.4"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.4.tgz#6ef37d678428306e7d75f054d5b1bdb8cf8aa8ee"
integrity sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==
version "7.25.6"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2"
integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==
dependencies:
regenerator-runtime "^0.14.0"
@@ -122,10 +122,10 @@
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae"
integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==
"@eslint/config-array@^0.17.1":
version "0.17.1"
resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.17.1.tgz#d9b8b8b6b946f47388f32bedfd3adf29ca8f8910"
integrity sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==
"@eslint/config-array@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.18.0.tgz#37d8fe656e0d5e3dbaea7758ea56540867fd074d"
integrity sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==
dependencies:
"@eslint/object-schema" "^2.1.4"
debug "^4.3.1"
@@ -146,10 +146,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
"@eslint/js@9.9.0", "@eslint/js@^9.9.0":
version "9.9.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.0.tgz#d8437adda50b3ed4401964517b64b4f59b0e2638"
integrity sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==
"@eslint/js@9.9.1", "@eslint/js@^9.9.1":
version "9.9.1"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06"
integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==
"@eslint/object-schema@^2.1.4":
version "2.1.4"
@@ -287,9 +287,9 @@
"@types/ms" "*"
"@types/eslint@*":
version "9.6.0"
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.0.tgz#51d4fe4d0316da9e9f2c80884f2c20ed5fb022ff"
integrity sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==
version "9.6.1"
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584"
integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==
dependencies:
"@types/estree" "*"
"@types/json-schema" "*"
@@ -341,9 +341,9 @@
integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==
"@types/node@*":
version "22.5.0"
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.0.tgz#10f01fe9465166b4cab72e75f60d8b99d019f958"
integrity sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==
version "22.5.4"
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.4.tgz#83f7d1f65bc2ed223bdbf57c7884f1d5a4fa84e8"
integrity sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==
dependencies:
undici-types "~6.19.2"
@@ -353,9 +353,9 @@
integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==
"@types/node@^20.9.0":
version "20.16.1"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.16.1.tgz#0b44b15271d0e2191ca68faf1fbe506e06aed732"
integrity sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==
version "20.16.5"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.16.5.tgz#d43c7f973b32ffdf9aa7bd4f80e1072310fd7a53"
integrity sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==
dependencies:
undici-types "~6.19.2"
@@ -386,85 +386,85 @@
dependencies:
"@types/node" "*"
"@typescript-eslint/eslint-plugin@8.2.0":
version "8.2.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.2.0.tgz#bf50e9c8dac6bdf15dd1b52ca29448550903558e"
integrity sha512-02tJIs655em7fvt9gps/+4k4OsKULYGtLBPJfOsmOq1+3cdClYiF0+d6mHu6qDnTcg88wJBkcPLpQhq7FyDz0A==
"@typescript-eslint/eslint-plugin@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.4.0.tgz#188c65610ef875a086404b5bfe105df936b035da"
integrity sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==
dependencies:
"@eslint-community/regexpp" "^4.10.0"
"@typescript-eslint/scope-manager" "8.2.0"
"@typescript-eslint/type-utils" "8.2.0"
"@typescript-eslint/utils" "8.2.0"
"@typescript-eslint/visitor-keys" "8.2.0"
"@typescript-eslint/scope-manager" "8.4.0"
"@typescript-eslint/type-utils" "8.4.0"
"@typescript-eslint/utils" "8.4.0"
"@typescript-eslint/visitor-keys" "8.4.0"
graphemer "^1.4.0"
ignore "^5.3.1"
natural-compare "^1.4.0"
ts-api-utils "^1.3.0"
"@typescript-eslint/parser@8.2.0":
version "8.2.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.2.0.tgz#de3993304feb98576d9ffbf10c83ca1bcb68a5dd"
integrity sha512-j3Di+o0lHgPrb7FxL3fdEy6LJ/j2NE8u+AP/5cQ9SKb+JLH6V6UHDqJ+e0hXBkHP1wn1YDFjYCS9LBQsZDlDEg==
"@typescript-eslint/parser@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.4.0.tgz#36b7cd7643a1c190d49dc0278192b2450f615a6f"
integrity sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==
dependencies:
"@typescript-eslint/scope-manager" "8.2.0"
"@typescript-eslint/types" "8.2.0"
"@typescript-eslint/typescript-estree" "8.2.0"
"@typescript-eslint/visitor-keys" "8.2.0"
"@typescript-eslint/scope-manager" "8.4.0"
"@typescript-eslint/types" "8.4.0"
"@typescript-eslint/typescript-estree" "8.4.0"
"@typescript-eslint/visitor-keys" "8.4.0"
debug "^4.3.4"
"@typescript-eslint/scope-manager@8.2.0":
version "8.2.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz#4a4bd7e7df5522acc8795c3b6f21e8c41b951138"
integrity sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==
"@typescript-eslint/scope-manager@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz#8a13d3c0044513d7960348db6f4789d2a06fa4b4"
integrity sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==
dependencies:
"@typescript-eslint/types" "8.2.0"
"@typescript-eslint/visitor-keys" "8.2.0"
"@typescript-eslint/types" "8.4.0"
"@typescript-eslint/visitor-keys" "8.4.0"
"@typescript-eslint/type-utils@8.2.0":
version "8.2.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.2.0.tgz#5cd7fef50f492e5a0f508bdd40678861a57c3549"
integrity sha512-g1CfXGFMQdT5S+0PSO0fvGXUaiSkl73U1n9LTK5aRAFnPlJ8dLKkXr4AaLFvPedW8lVDoMgLLE3JN98ZZfsj0w==
"@typescript-eslint/type-utils@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.4.0.tgz#4a91b5789f41946adb56d73e2fb4639fdcf37af7"
integrity sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==
dependencies:
"@typescript-eslint/typescript-estree" "8.2.0"
"@typescript-eslint/utils" "8.2.0"
"@typescript-eslint/typescript-estree" "8.4.0"
"@typescript-eslint/utils" "8.4.0"
debug "^4.3.4"
ts-api-utils "^1.3.0"
"@typescript-eslint/types@8.2.0":
version "8.2.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.2.0.tgz#dfe9895a2812f7c6bf7af863054c22a67060420c"
integrity sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==
"@typescript-eslint/types@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.4.0.tgz#b44d6a90a317a6d97a3e5fabda5196089eec6171"
integrity sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==
"@typescript-eslint/typescript-estree@8.2.0":
version "8.2.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz#fbdb93a1c7ac7f1f96ae2de4fc97cd64c60ae894"
integrity sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==
"@typescript-eslint/typescript-estree@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.4.0.tgz#00ed79ae049e124db37315cde1531a900a048482"
integrity sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==
dependencies:
"@typescript-eslint/types" "8.2.0"
"@typescript-eslint/visitor-keys" "8.2.0"
"@typescript-eslint/types" "8.4.0"
"@typescript-eslint/visitor-keys" "8.4.0"
debug "^4.3.4"
globby "^11.1.0"
fast-glob "^3.3.2"
is-glob "^4.0.3"
minimatch "^9.0.4"
semver "^7.6.0"
ts-api-utils "^1.3.0"
"@typescript-eslint/utils@8.2.0":
version "8.2.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.2.0.tgz#02d442285925f28d520587185f295f932702e733"
integrity sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg==
"@typescript-eslint/utils@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.4.0.tgz#35c552a404858c853a1f62ba6df2214f1988afc3"
integrity sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
"@typescript-eslint/scope-manager" "8.2.0"
"@typescript-eslint/types" "8.2.0"
"@typescript-eslint/typescript-estree" "8.2.0"
"@typescript-eslint/scope-manager" "8.4.0"
"@typescript-eslint/types" "8.4.0"
"@typescript-eslint/typescript-estree" "8.4.0"
"@typescript-eslint/visitor-keys@8.2.0":
version "8.2.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz#f6abb3b6508898a117175ddc11f9b9869cc96834"
integrity sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==
"@typescript-eslint/visitor-keys@8.4.0":
version "8.4.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz#1e8a8b8fd3647db1e42361fdd8de3e1679dec9d2"
integrity sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==
dependencies:
"@typescript-eslint/types" "8.2.0"
"@typescript-eslint/types" "8.4.0"
eslint-visitor-keys "^3.4.3"
"@xmldom/xmldom@^0.8.8":
@@ -629,11 +629,6 @@ argparse@^2.0.1:
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
array-union@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
assert-plus@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
@@ -1343,9 +1338,9 @@ es6-error@^4.1.1:
integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
escalade@^3.1.1:
version "3.1.2"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
version "3.2.0"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
escape-string-regexp@^4.0.0:
version "4.0.0"
@@ -1371,15 +1366,15 @@ eslint-visitor-keys@^4.0.0:
integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==
eslint@^9:
version "9.9.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.9.0.tgz#8d214e69ae4debeca7ae97daebbefe462072d975"
integrity sha512-JfiKJrbx0506OEerjK2Y1QlldtBxkAlLxT5OEcRF8uaQ86noDe2k31Vw9rnSWv+MXZHj7OOUV/dA0AhdLFcyvA==
version "9.9.1"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.9.1.tgz#147ac9305d56696fb84cf5bdecafd6517ddc77ec"
integrity sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.11.0"
"@eslint/config-array" "^0.17.1"
"@eslint/config-array" "^0.18.0"
"@eslint/eslintrc" "^3.1.0"
"@eslint/js" "9.9.0"
"@eslint/js" "9.9.1"
"@humanwhocodes/module-importer" "^1.0.1"
"@humanwhocodes/retry" "^0.3.0"
"@nodelib/fs.walk" "^1.2.8"
@@ -1469,7 +1464,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
fast-glob@^3.2.9, fast-glob@^3.3.0:
fast-glob@^3.3.0, fast-glob@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
@@ -1765,18 +1760,6 @@ globalthis@^1.0.1:
define-properties "^1.2.1"
gopd "^1.0.1"
globby@^11.1.0:
version "11.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
dependencies:
array-union "^2.1.0"
dir-glob "^3.0.1"
fast-glob "^3.2.9"
ignore "^5.2.0"
merge2 "^1.4.1"
slash "^3.0.0"
globby@^13.1.2:
version "13.2.2"
resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592"
@@ -2276,9 +2259,9 @@ merge2@^1.3.0, merge2@^1.4.1:
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
micromatch@^4.0.4:
version "4.0.7"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5"
integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==
version "4.0.8"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
dependencies:
braces "^3.0.3"
picomatch "^2.3.1"
@@ -2554,17 +2537,17 @@ onetime@^5.1.0, onetime@^5.1.2:
dependencies:
mimic-fn "^2.1.0"
onnxruntime-common@1.19.0:
version "1.19.0"
resolved "https://registry.yarnpkg.com/onnxruntime-common/-/onnxruntime-common-1.19.0.tgz#1d913321caa5eda76775c496d9f0f831dd30bec6"
integrity sha512-Oo16UIJ/xLOtZDVGcL4bL8EP8MiNFztyBmR3pB14D+cl/UCpOgHHzEk0MADSmYXQ0FgyEegPXtOFcJqhq1YRsw==
onnxruntime-common@1.19.2:
version "1.19.2"
resolved "https://registry.yarnpkg.com/onnxruntime-common/-/onnxruntime-common-1.19.2.tgz#39447d703aef6499f71487cb8970f58752234523"
integrity sha512-a4R7wYEVFbZBlp0BfhpbFWqe4opCor3KM+5Wm22Az3NGDcQMiU2hfG/0MfnBs+1ZrlSGmlgWeMcXQkDk1UFb8Q==
onnxruntime-node@^1.19.0:
version "1.19.0"
resolved "https://registry.yarnpkg.com/onnxruntime-node/-/onnxruntime-node-1.19.0.tgz#7ce538eb400cf2370023e7f07f7e7a4d7589cc1f"
integrity sha512-JivYcrZ9H9YPpHnP+5rTVTJjzuD+ZB0TsB0//e2La0ViYNG0hmTvnwFgmRoes6F7E1PyVMpyRftmcl9pnIWsnw==
onnxruntime-node@^1.19.2:
version "1.19.2"
resolved "https://registry.yarnpkg.com/onnxruntime-node/-/onnxruntime-node-1.19.2.tgz#2f2e1c9286c97291030770c085fb403647538ad7"
integrity sha512-9eHMP/HKbbeUcqte1JYzaaRC8JPn7ojWeCeoyShO86TOR97OCyIyAIOGX3V95ErjslVhJRXY8Em/caIUc0hm1Q==
dependencies:
onnxruntime-common "1.19.0"
onnxruntime-common "1.19.2"
tar "^7.0.1"
optionator@^0.9.3:
@@ -2735,12 +2718,12 @@ prettier-plugin-organize-imports@^4.0.0:
resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.0.0.tgz#a69acf024ea3c8eb650c81f664693826ca853534"
integrity sha512-vnKSdgv9aOlqKeEFGhf9SCBsTyzDSyScy1k7E0R1Uo4L0cTcOV7c1XQaT7jfXIOc/p08WLBfN2QUQA9zDSZMxA==
prettier-plugin-packagejson@^2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.1.tgz#026742dee06e3de0d32b0546abcc51413943942a"
integrity sha512-6i4PW1KxEA+VrokYNGeI/q8qQX3u5DNBc7eLr9GX4OrvWr9DMls1lhbuNopkKG7Li9rTNxerWnYQyjxoUO4ROA==
prettier-plugin-packagejson@^2.5.2:
version "2.5.2"
resolved "https://registry.yarnpkg.com/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.2.tgz#25e8531e15b04e1f68ee7ee4a4b111bd5bea6fcc"
integrity sha512-w+TmoLv2pIa+siplW1cCj2ujEXQQS6z7wmWLOiLQK/2QVl7Wy6xh/ZUpqQw8tbKMXDodmSW4GONxlA33xpdNOg==
dependencies:
sort-package-json "2.10.0"
sort-package-json "2.10.1"
synckit "0.9.1"
prettier@^3.3.3:
@@ -3037,11 +3020,6 @@ simple-update-notifier@2.0.0:
dependencies:
semver "^7.5.3"
slash@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
slash@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
@@ -3083,10 +3061,10 @@ sort-object-keys@^1.1.3:
resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz#bff833fe85cab147b34742e45863453c1e190b45"
integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==
sort-package-json@2.10.0:
version "2.10.0"
resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-2.10.0.tgz#6be07424bf3b7db9fbb1bdd69e7945f301026d8a"
integrity sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g==
sort-package-json@2.10.1:
version "2.10.1"
resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-2.10.1.tgz#18e7fa0172233cb2d4d926f7c99e6bfcf4d1d25c"
integrity sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==
dependencies:
detect-indent "^7.0.1"
detect-newline "^4.0.0"
@@ -3273,9 +3251,9 @@ ts-api-utils@^1.3.0:
integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==
tslib@^2.1.0, tslib@^2.6.2:
version "2.6.3"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0"
integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==
version "2.7.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01"
integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==
type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
@@ -3299,14 +3277,14 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
typescript-eslint@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.2.0.tgz#90d75636b663a9f5e391e9b3a33f3031236a25c8"
integrity sha512-DmnqaPcML0xYwUzgNbM1XaKXpEb7BShYf2P1tkUmmcl8hyeG7Pj08Er7R9bNy6AufabywzJcOybQAtnD/c9DGw==
typescript-eslint@^8.4.0:
version "8.4.0"
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.4.0.tgz#3fa38bd279994cdb40ba9264ef5262a17cf4cfa0"
integrity sha512-67qoc3zQZe3CAkO0ua17+7aCLI0dU+sSQd1eKPGq06QE4rfQjstVXR6woHO5qQvGUa550NfGckT4tzh3b3c8Pw==
dependencies:
"@typescript-eslint/eslint-plugin" "8.2.0"
"@typescript-eslint/parser" "8.2.0"
"@typescript-eslint/utils" "8.2.0"
"@typescript-eslint/eslint-plugin" "8.4.0"
"@typescript-eslint/parser" "8.4.0"
"@typescript-eslint/utils" "8.4.0"
typescript@^5.4.3, typescript@^5.5.4:
version "5.5.4"

View File

@@ -1,43 +1,52 @@
---
title: Unable to login on Windows Desktop
description:
Troubleshooting when you are not able to login or register on Ente Auth app on Windows
Troubleshooting when you are not able to login or register on Ente Auth app
on Windows
---
# Windows Login Error
### HandshakeException: Handshake error in client
This error usually happens when the Trusted Root certificates on your Windows machine are outdated.
This error usually happens when the Trusted Root certificates on your Windows
machine are outdated.
To update the Trusted Root Certificates on Windows, you can use the `certutil` command. Here are the steps to do so:
To update the Trusted Root Certificates on Windows, you can use the `certutil`
command. Here are the steps to do so:
1. **Open Command Prompt as Administrator**:
- Press `Windows + X` and select `Command Prompt (Admin)` or `Windows PowerShell (Admin)`.
1. **Open Command Prompt as Administrator**:
- Press `Windows + X` and select `Command Prompt (Admin)` or
`Windows PowerShell (Admin)`.
2. **Run the following command to update the root certificates**:
```bash
certutil -generateSSTFromWU roots.sst
```
This command will generate a file named `roots.sst` that contains the latest root certificates from Windows Update.
```bash
certutil -generateSSTFromWU roots.sst
```
This command will generate a file named `roots.sst` that contains the latest
root certificates from Windows Update.
3. **Install the new root certificates**:
```bash
certutil -addstore -f ROOT roots.sst
```
This command will add the certificates from the `roots.sst` file to the Trusted Root Certification Authorities store.
4. **Clean up**:
After the installation, you can delete the `roots.sst` file if you no longer need it:
```bash
del roots.sst
```
```bash
certutil -addstore -f ROOT roots.sst
```
Make sure to restart your application after updating the certificates to ensure the changes take effect.
This command will add the certificates from the `roots.sst` file to the
Trusted Root Certification Authorities store.
If the above steps don't resolve the issue, please follow [this guide](https://woshub.com/updating-trusted-root-certificates-in-windows-10/#h2_3) to update your trusted root certicates, and try again.
4. **Clean up**: After the installation, you can delete the `roots.sst` file if
you no longer need it:
```bash
del roots.sst
```
Make sure to restart your application after updating the certificates to ensure
the changes take effect.
If the above steps don't resolve the issue, please follow
[this guide](https://woshub.com/updating-trusted-root-certificates-in-windows-10/#h2_3)
to update your trusted root certicates, and try again.

View File

@@ -74,8 +74,8 @@ items, in case the original owner were to delete it from their own library.
We plan to tackle these complexities in the future, by copying a reference to
the item that was shared, instead of the actual file, so that your storage will
only get consumed if the original owner deletes it from their library. If this
sounds useful to you, please participate in [this
discussion](https://github.com/ente-io/ente/discussions/790).
sounds useful to you, please participate in
[this discussion](https://github.com/ente-io/ente/discussions/790).
## Technical details

View File

@@ -14,7 +14,10 @@ storage namespace. The same user account works for both of them.
Yes, if you wish, you can self-host the server and use it only for the 2FA auth
app. The starter Docker compose will work fine for either Photos or Auth (or
both!)
both!).
> You currently don't need to configure the S3 object storage (e.g. minio
> containers) if you're only using your self hosted Ente instance for auth.
### Can I use the server with _X_ as the object storage?

View File

@@ -81,6 +81,22 @@ Set the S3 bucket `endpoint` in `credentials.yaml` to a `yourserverip:3200` or
some such IP/hostname that accessible from both where you are running the Ente
clients (e.g. the mobile app) and also from within the Docker compose cluster.
### Example
An example `museum.yaml` when you're trying to connect to museum running on your
computer from your phone on the same WiFi network:
```
s3:
are_local_buckets: true
b2-eu-cen:
key: test
secret: testtest
endpoint: http://<YOUR-WIFI-IP>:3200
region: eu-central-2
bucket: b2-eu-cen
```
### 403 Forbidden
If museum (`2`) is able to make a network connection to your S3 bucket (`3`) but

View File

@@ -250,6 +250,7 @@ class UploadLocksDB {
}
final row = rows.first;
final objectKey = row[_trackUploadTable.columnObjectKey] as String;
final encFileSize = row[_trackUploadTable.columnEncryptedFileSize] as int;
final partsStatus = await db.query(
_partsTable.table,
where: '${_partsTable.columnObjectKey} = ?',
@@ -285,6 +286,7 @@ class UploadLocksDB {
.byName(row[_trackUploadTable.columnStatus] as String),
partUploadStatus: partUploadStatus,
partETags: partETags,
encFileSize: encFileSize,
partSize: row[_trackUploadTable.columnPartSize] as int,
);
}

View File

@@ -73,6 +73,7 @@ class FFProbeKeys {
static const sideDataList = 'side_data_list';
static const rotation = 'rotation';
static const sideDataType = 'side_data_type';
static const sampleAspectRatio = 'sample_aspect_ratio';
}
class MediaStreamTypes {

View File

@@ -35,16 +35,31 @@ class FFProbeProps {
int? get width {
if (_width == null || _height == null) return null;
final intWidth = int.tryParse(_width!);
if (_rotation == null) {
return intWidth;
} else {
if ((_rotation! ~/ 90).isEven) {
return intWidth;
} else {
return int.tryParse(_height!);
int? finalWidth = int.tryParse(_width!);
if (propData?[FFProbeKeys.sampleAspectRatio] != null &&
finalWidth != null) {
finalWidth = _calculateWidthConsideringSAR(finalWidth);
}
if (_rotation != null) {
if ((_rotation! ~/ 90).isOdd) {
finalWidth = int.tryParse(_height!);
}
}
return finalWidth;
}
/// To know more, read about Sample Aspect Ratio (SAR), Display Aspect Ratio (DAR)
/// and Pixel Aspect Ratio (PAR)
int _calculateWidthConsideringSAR(int width) {
final List<String> sar =
propData![FFProbeKeys.sampleAspectRatio].toString().split(":");
if (sar.length == 2) {
final int sarWidth = int.tryParse(sar[0]) ?? 1;
final int sarHeight = int.tryParse(sar[1]) ?? 1;
return (width * (sarWidth / sarHeight)).toInt();
} else {
return width;
}
}
int? get height {
@@ -202,6 +217,8 @@ class FFProbeProps {
parsedData[FFProbeKeys.rotation] = result._rotation;
}
}
} else if (key == FFProbeKeys.sampleAspectRatio) {
parsedData[key] = stream[key];
}
}
}

View File

@@ -33,6 +33,7 @@ class MultipartInfo {
final List<bool>? partUploadStatus;
final Map<int, String>? partETags;
final int? partSize;
final int encFileSize;
final MultipartUploadURLs urls;
final MultipartStatus status;
@@ -41,6 +42,7 @@ class MultipartInfo {
this.partETags,
this.partSize,
this.status = MultipartStatus.pending,
required this.encFileSize,
required this.urls,
});
}

View File

@@ -148,10 +148,11 @@ class MultiPartUploader {
Future<String> putMultipartFile(
MultipartUploadURLs urls,
File encryptedFile,
int fileSize,
) async {
// upload individual parts and get their etags
final etags = await _uploadParts(
MultipartInfo(urls: urls),
MultipartInfo(urls: urls, encFileSize: fileSize),
encryptedFile,
);
@@ -180,6 +181,11 @@ class MultiPartUploader {
}
final int encFileLength = encryptedFile.lengthSync();
if (encFileLength != partInfo.encFileSize) {
throw Exception(
"File size mismatch. Expected ${partInfo.encFileSize} but got $encFileLength",
);
}
// Start parts upload
int count = 0;
while (i < partsLength) {

View File

@@ -127,6 +127,7 @@ class _PanoramaViewerScreenState extends State<PanoramaViewerScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: isVisible ? AppBar() : null,
body: Stack(
children: [
Panorama(

View File

@@ -531,13 +531,16 @@ class FileUploader {
: null;
bool multipartEntryExists = existingMultipartEncFileName != null;
final String uniqueID = const Uuid().v4().toString();
final String uniqueID =
'${const Uuid().v4().toString()}_${file.generatedID}';
final encryptedFilePath = multipartEntryExists
? '$tempDirectory$existingMultipartEncFileName'
: '$tempDirectory$uploadTempFilePrefix${uniqueID}_file.encrypted';
final encryptedThumbnailPath =
'$tempDirectory$uploadTempFilePrefix${uniqueID}_thumb.encrypted';
late final int encFileSize;
late final int encThumbSize;
var uploadCompleted = false;
// This flag is used to decide whether to clear the iOS origin file cache
@@ -585,7 +588,7 @@ class FileUploader {
final encryptedFileExists = File(encryptedFilePath).existsSync();
// If the multipart entry exists but the encrypted file doesn't, it means
// that we'll have to reupload as the nonce is lost
// that we'll have to re-upload as the nonce is lost
if (multipartEntryExists) {
final bool updateWithDiffKey = isUpdatedFile &&
multiPartFileEncResult != null &&
@@ -623,6 +626,7 @@ class FileUploader {
} else {
thumbnailData = mediaUploadData.thumbnail;
}
encFileSize = await encryptedFile.length();
final EncryptionResult encryptedThumbnailData =
await CryptoUtil.encryptChaCha(
@@ -635,21 +639,24 @@ class FileUploader {
final encryptedThumbnailFile = File(encryptedThumbnailPath);
await encryptedThumbnailFile
.writeAsBytes(encryptedThumbnailData.encryptedData!);
encThumbSize = await encryptedThumbnailFile.length();
// Calculate the number of parts for the file.
final count = await _multiPartUploader.calculatePartCount(
await encryptedFile.length(),
);
final count = await _multiPartUploader.calculatePartCount(encFileSize);
late String fileObjectKey;
late String thumbnailObjectKey;
if (count <= 1) {
final thumbnailUploadURL = await _getUploadURL();
thumbnailObjectKey =
await _putFile(thumbnailUploadURL, encryptedThumbnailFile);
thumbnailObjectKey = await _putFile(
thumbnailUploadURL,
encryptedThumbnailFile,
encThumbSize,
);
final fileUploadURL = await _getUploadURL();
fileObjectKey = await _putFile(fileUploadURL, encryptedFile);
fileObjectKey =
await _putFile(fileUploadURL, encryptedFile, encFileSize);
} else {
isMultipartUpload = true;
_logger.finest(
@@ -672,13 +679,14 @@ class FileUploader {
collectionID,
fileUploadURLs,
encFileName,
await encryptedFile.length(),
encFileSize,
fileAttributes.key!,
fileAttributes.header!,
);
fileObjectKey = await _multiPartUploader.putMultipartFile(
fileUploadURLs,
encryptedFile,
encFileSize,
);
}
// in case of multipart, upload the thumbnail towards the end to avoid
@@ -686,8 +694,11 @@ class FileUploader {
// In regular upload, always upload the thumbnail first to keep existing behaviour
//
final thumbnailUploadURL = await _getUploadURL();
thumbnailObjectKey =
await _putFile(thumbnailUploadURL, encryptedThumbnailFile);
thumbnailObjectKey = await _putFile(
thumbnailUploadURL,
encryptedThumbnailFile,
encThumbSize,
);
}
final metadata = await file.getMetadataForUpload(mediaUploadData);
@@ -713,10 +724,10 @@ class FileUploader {
file,
fileObjectKey,
fileDecryptionHeader,
await encryptedFile.length(),
encFileSize,
thumbnailObjectKey,
thumbnailDecryptionHeader,
await encryptedThumbnailFile.length(),
encThumbSize,
encryptedMetadata,
metadataDecryptionHeader,
);
@@ -762,10 +773,10 @@ class FileUploader {
fileAttributes,
fileObjectKey,
fileDecryptionHeader,
await encryptedFile.length(),
encFileSize,
thumbnailObjectKey,
thumbnailDecryptionHeader,
await encryptedThumbnailFile.length(),
encThumbSize,
encryptedMetadata,
metadataDecryptionHeader,
pubMetadata: pubMetadataRequest,
@@ -1266,11 +1277,10 @@ class FileUploader {
Future<String> _putFile(
UploadURL uploadURL,
File file, {
int? contentLength,
File file,
int fileSize, {
int attempt = 1,
}) async {
final fileSize = contentLength ?? await file.length();
_logger.info(
"Putting object for " +
file.toString() +
@@ -1297,22 +1307,14 @@ class FileUploader {
return uploadURL.objectKey;
} on DioError catch (e) {
if (e.message.startsWith(
"HttpException: Content size exceeds specified contentLength.",
) &&
attempt == 1) {
return _putFile(
uploadURL,
file,
contentLength: (await file.readAsBytes()).length,
attempt: 2,
);
if (e.message.startsWith("HttpException: Content size")) {
rethrow;
} else if (attempt < kMaximumUploadAttempts) {
final newUploadURL = await _getUploadURL();
return _putFile(
newUploadURL,
file,
contentLength: (await file.readAsBytes()).length,
fileSize,
attempt: attempt + 1,
);
} else {

View File

@@ -1297,18 +1297,18 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a"
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
url: "https://pub.dev"
source: hosted
version: "10.0.4"
version: "10.0.5"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8"
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
url: "https://pub.dev"
source: hosted
version: "3.0.3"
version: "3.0.5"
leak_tracker_testing:
dependency: transitive
description:
@@ -1441,10 +1441,10 @@ packages:
dependency: transitive
description:
name: material_color_utilities
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
url: "https://pub.dev"
source: hosted
version: "0.8.0"
version: "0.11.1"
media_extension:
dependency: "direct main"
description:
@@ -1529,10 +1529,10 @@ packages:
dependency: transitive
description:
name: meta
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
url: "https://pub.dev"
source: hosted
version: "1.12.0"
version: "1.15.0"
mgrs_dart:
dependency: transitive
description:
@@ -1901,10 +1901,10 @@ packages:
dependency: transitive
description:
name: platform
sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
url: "https://pub.dev"
source: hosted
version: "3.1.4"
version: "3.1.5"
plugin_platform_interface:
dependency: transitive
description:
@@ -2410,26 +2410,26 @@ packages:
dependency: "direct dev"
description:
name: test
sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073"
sha256: "7ee44229615f8f642b68120165ae4c2a75fe77ae2065b1e55ae4711f6cf0899e"
url: "https://pub.dev"
source: hosted
version: "1.25.2"
version: "1.25.7"
test_api:
dependency: transitive
description:
name: test_api
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
url: "https://pub.dev"
source: hosted
version: "0.7.0"
version: "0.7.2"
test_core:
dependency: transitive
description:
name: test_core
sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4"
sha256: "55ea5a652e38a1dfb32943a7973f3681a60f872f8c3a05a14664ad54ef9c6696"
url: "https://pub.dev"
source: hosted
version: "0.6.0"
version: "0.6.4"
timezone:
dependency: transitive
description:
@@ -2602,10 +2602,10 @@ packages:
dependency: "direct main"
description:
name: uuid
sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313"
sha256: f33d6bb662f0e4f79dcd7ada2e6170f3b3a2530c28fc41f49a411ddedd576a77
url: "https://pub.dev"
source: hosted
version: "3.0.7"
version: "4.5.0"
vector_graphics:
dependency: transitive
description:
@@ -2708,10 +2708,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
url: "https://pub.dev"
source: hosted
version: "14.2.1"
version: "14.2.5"
volume_controller:
dependency: transitive
description:

View File

@@ -173,7 +173,7 @@ dependencies:
tuple: ^2.0.0
uni_links: ^0.5.1
url_launcher: ^6.0.3
uuid: ^3.0.7
uuid: ^4.5.0
video_editor:
git:
url: https://github.com/prateekmedia/video_editor.git

View File

@@ -5,12 +5,13 @@
# load one of the files from the `configurations/` directory. If not present,
# then by default `local.yaml` (this file) will get loaded.
#
# 2. Then, museum will look for a file named `museum.yaml` in the current
# working directory. If found, this file will also be loaded, and entries
# specified therein will override the defaults specified here.
# 2. If the "credentials-file" config option is set then museum will look for
# that file. If found, that file will also be loaded, and entries specified
# therein will override the defaults specified here.
#
# 3. If the "credentials-file" config option is set, then museum will also load
# that and merge it in.
# 3. Then, museum will look for a file named `museum.yaml` (gitignored) in the
# current working directory. If found, this file will also be loaded and
# merged.
#
# 4. Config can be overridden with via environment variables (details below).
#

View File

@@ -47,11 +47,6 @@ func ConfigureViper(environment string) error {
return err
}
err = mergeConfigFileIfExists("museum.yaml")
if err != nil {
return err
}
credentialsFile := viper.GetString("credentials-file")
if credentialsFile == "" {
credentialsFile = "credentials.yaml"
@@ -61,6 +56,11 @@ func ConfigureViper(environment string) error {
return err
}
err = mergeConfigFileIfExists("museum.yaml")
if err != nil {
return err
}
return nil
}

View File

@@ -76,20 +76,23 @@ const ChangelogContent: React.FC = () => {
return (
<StyledUL>
<li>
<Typography color="primary">
{ut("Improved date search")}
</Typography>
<Typography>
<Typography color="primary">
{ut("Support for Passkeys")}
</Typography>
{ut(
"Passkeys can now be used as a second factor authentication mechanism.",
)}
Search for photos by day of week (<i>Wednesday</i>) or hour
of day (<i>8 pm</i>) in addition to the existing search by
partial dates (<i>20 July</i>, or even <i>2021</i>) and
relative dates (<i>Last month</i>,<i>Yesterday</i>).
</Typography>
</li>
<li>
<Typography color="primary">{ut("Window size")}</Typography>
<Typography color="primary">
{ut("Faster magic search")}
</Typography>
<Typography>
{ut(
"The app's window will remember its size and position.",
"The magic search beta, where you can search for photos just by typing whatever is in them, just got faster.",
)}
</Typography>
</li>

View File

@@ -26,7 +26,7 @@ import type { Electron } from "@/base/types/ipc";
* The what's new dialog sets the saved version to the current one whenever it
* is shown.
*/
const changelogVersion = 1;
const changelogVersion = 2;
/**
* Return true if we should show the {@link WhatsNew} dialog.