Compare commits

...

549 Commits

Author SHA1 Message Date
Neeraj
2e193d3ac0 [auth] Misc fixes & locale improvements (#5432)
## Description

## Tests
2025-03-25 10:43:08 +05:30
Neeraj Gupta
4a1540b63b Bump version 2025-03-25 10:39:38 +05:30
Neeraj Gupta
18b71dbc0c [auth] Increase initial window height 2025-03-25 10:34:49 +05:30
Neeraj Gupta
b3ba9a6aa7 [auth] Change macos min target from 10.14 to 10.15 2025-03-25 10:32:32 +05:30
Neeraj Gupta
e2878ec454 [auth] Enable l10n for Romanian & Hebrew language 2025-03-25 10:25:09 +05:30
Neeraj Gupta
cfebf632dc l10n generated changes 2025-03-25 10:18:34 +05:30
Neeraj Gupta
b97e77a4f8 [auth] Support both Chinese Simplified and Traditional 2025-03-25 10:17:14 +05:30
Neeraj Gupta
9df375b2e9 [auth] Require min ios 13.0 for cuptertino_http 2025-03-25 10:16:01 +05:30
Manav Rathi
e0f9e6f586 [web] Video streaming WIP - Part x/x (#5431) 2025-03-25 10:13:56 +05:30
Manav Rathi
fa32ab55c6 LF 2025-03-25 10:09:30 +05:30
Manav Rathi
fcd6a621e0 +hls.js 2025-03-25 10:01:45 +05:30
Manav Rathi
afea991e16 elsewhere 2025-03-25 09:55:14 +05:30
Manav Rathi
2d245ea8e4 URL 2025-03-25 09:55:14 +05:30
Manav Rathi
f29ed595de More notes 2025-03-25 09:55:13 +05:30
github-actions[bot]
b901e4b210 [auth] New translations (#5330)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-03-25 09:43:55 +05:30
Manav Rathi
17c8d9d372 [desktop] Update icons (#5430)
Also update Electron to pick the latest patch release in the current
series.
2025-03-25 09:16:03 +05:30
Manav Rathi
9319aeee6f Update icons
general note of commands which were needed:

    mkdir build/icon.iconset
    touch build/icon.iconset/icon_512x512@2x.png
    iconutil --convert icns --output build/icon.icns build/icon.iconset
    # general resizing
    sips -Z 48 build/taskbar-icon@3x.png

for the icns while just the above worked, here is fuller script that also uses
the size variants (rom
https://stackoverflow.com/questions/12306223/how-to-manually-create-icns-files-using-iconutil),
the final asset used this.

    mkdir MyIcon.iconset
    sips -z 16 16     Icon1024.png --out MyIcon.iconset/icon_16x16.png
    sips -z 32 32     Icon1024.png --out MyIcon.iconset/icon_16x16@2x.png
    sips -z 32 32     Icon1024.png --out MyIcon.iconset/icon_32x32.png
    sips -z 64 64     Icon1024.png --out MyIcon.iconset/icon_32x32@2x.png
    sips -z 128 128   Icon1024.png --out MyIcon.iconset/icon_128x128.png
    sips -z 256 256   Icon1024.png --out MyIcon.iconset/icon_128x128@2x.png
    sips -z 256 256   Icon1024.png --out MyIcon.iconset/icon_256x256.png
    sips -z 512 512   Icon1024.png --out MyIcon.iconset/icon_256x256@2x.png
    sips -z 512 512   Icon1024.png --out MyIcon.iconset/icon_512x512.png
    cp Icon1024.png MyIcon.iconset/icon_512x512@2x.png
    iconutil -c icns MyIcon.iconset
    rm -R MyIcon.iconset

for the taskbar icons I used this ad-hoc script:

    #!/bin/sh

    set -e

    sips -Z 16 ~/Downloads/Taskbar.png --out build/taskbar-icon.png
    sips -Z 32 ~/Downloads/Taskbar.png --out build/taskbar-icon@2x.png
    sips -Z 48 ~/Downloads/Taskbar.png --out build/taskbar-icon@3x.png

    sips -Z 16 ~/Downloads/Taskbar-Template.png --out build/taskbar-icon-Template.png
    sips -Z 32 ~/Downloads/Taskbar-Template.png --out build/taskbar-icon-Template@2x.png
    sips -Z 48 ~/Downloads/Taskbar-Template.png --out build/taskbar-icon-Template@3x.png
2025-03-25 09:04:04 +05:30
github-actions[bot]
7dfa822b0f [mobile] New translations (#5421)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-03-25 06:39:15 +05:30
antoniohg
edf1fe19e5 [auth][icon] add Pionex custom icon and entry to the icon data (#5394)
## Description
Create a custom icon for Pionex, one of the most popular crypto trading
bot platform
## Tests
Icon change only, no code changes.
2025-03-25 06:37:59 +05:30
mangesh
164df3edef [server] log.Error log.Info (#5425) 2025-03-25 06:36:54 +05:30
Neeraj
bce91b6d38 [mob] Fix npe in featureFlag service (#5429)
## Description

## Tests
2025-03-25 06:36:17 +05:30
Neeraj
7829913c48 [auth][icon] Patient Access (#5413)
## Description
Hi, sincere apologies if there are any issues I’ve created. I’m new to
pull requests. I attach a Patient Access icon for Ente Auth. If
everything goes well I (if it’s okay) will be happy to help in the
future.

Kind regards,
Jack
2025-03-25 06:14:30 +05:30
Neeraj Gupta
ca40eaa377 [mob] Fix npe in featureFlag service 2025-03-25 06:13:18 +05:30
Manav Rathi
67a0ff55b4 Update electron 2025-03-24 19:10:01 +05:30
Manav Rathi
9d87aa2228 [web] Dockerfile accounts fix (#5424)
try_files $uri/ matches the passkeys/ folder in accounts app, causing
nginx to
try loading (e.g.)  http://localhost:3001/passkeys/?xxx instead of
http://localhost:3001/passkeys?xxx

The way Next is currently generating the static renders, we anyways
don't need
the slug/index.html lookup, the only index.html we have is at the root,
rest of
them are of the form slug.html.
2025-03-24 11:56:51 +05:30
Manav Rathi
fe3c3f8a49 [web] Dockerfile accounts fix
try_files $uri/ matches the passkeys/ folder in accounts app, causing nginx to
try loading (e.g.)  http://localhost:3001/passkeys/?xxx instead of
http://localhost:3001/passkeys?xxx

The way Next is currently generating the static renders, we anyways don't need
the slug/index.html lookup, the only index.html we have is at the root, rest of
them are of the form slug.html.
2025-03-24 11:37:50 +05:30
Manav Rathi
c2ba851076 [web] New translations (#5420)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-03-24 10:48:16 +05:30
Crowdin Bot
ba8e8302c7 New Crowdin translations by GitHub Action 2025-03-24 00:37:55 +00:00
Prateek Sunal
f37777885e [auth] Fix drop review copy (#5412) 2025-03-23 00:04:43 +05:30
mngshm
ffdf5960c0 log.Error log.Info 2025-03-23 00:00:25 +05:30
Aman Raj Singh Mourya
bb6b4ba49d minor fix 2025-03-22 23:59:34 +05:30
Jack Roberts
3d3f200168 Add files via upload 2025-03-22 18:13:03 +00:00
Jack Roberts
40649f172a Update custom-icons.json 2025-03-22 18:11:37 +00:00
Aman Raj Singh Mourya
b8f144132b [auth] fix copy 2025-03-22 22:53:57 +05:30
Manav Rathi
4b3cc007aa [docs] Add callout for the importance of museum.yaml (#5406) 2025-03-21 20:37:50 +05:30
Manav Rathi
803d36c915 Add callout 2025-03-21 20:26:04 +05:30
Prateek Sunal
3c789e9758 [mob] remove filler as a title and use years ago instead (#5403)
## Description

Remove filler title and use proper locals.

## Tests
2025-03-21 17:15:29 +05:30
Prateek Sunal
e430d4a47d chore: bump version number 2025-03-21 17:12:48 +05:30
Prateek Sunal
fa88396072 fix: check for blockers inside lock as well 2025-03-21 17:09:10 +05:30
Manav Rathi
f4760187ab [web] Fix viewer close on deletion of last file (#5405) 2025-03-21 17:04:52 +05:30
Prateek Sunal
3644993964 refactor: replace S.load with LanguageService for localization 2025-03-21 17:04:00 +05:30
Prateek Sunal
4bdf879a50 refactor: rename variable 'locale' to 'local' for clarity 2025-03-21 17:02:58 +05:30
Prateek Sunal
6484419839 fix: revert to original like 2025-03-21 17:02:35 +05:30
Prateek Sunal
1440c7e07a chore: remove getTitle 2025-03-21 17:00:43 +05:30
Prateek Sunal
85c899b41d Merge remote-tracking branch 'origin/memories_fillers' into fix-filler-title 2025-03-21 16:59:13 +05:30
Manav Rathi
a4ab3168ad Add note 2025-03-21 16:59:10 +05:30
Manav Rathi
5a524fa5b0 Fix viewer close on deletion of last file 2025-03-21 16:57:05 +05:30
Prateek Sunal
c597c2596c feat(language): integrate LanguageService for localized titles and dates 2025-03-21 16:52:16 +05:30
laurenspriem
916c748479 Clear internal flag in moments 2025-03-21 16:48:12 +05:30
laurenspriem
45ef2b6976 Remove backup on memories widget 2025-03-21 16:46:11 +05:30
laurenspriem
a4141bb296 Fix fillers showing filler when ML disabled 2025-03-21 16:45:56 +05:30
Prateek Sunal
4f6eff1034 fix(memory-widget): remove filler as a title and use years ago instead 2025-03-21 16:38:46 +05:30
Manav Rathi
0ab2e2834a [docs] Add a misc FAQ page (#5402) 2025-03-21 15:07:02 +05:30
Manav Rathi
d84bdb645b Title 2025-03-21 15:04:05 +05:30
Manav Rathi
99bb2b1d98 [docs] Add a misc FAQ page 2025-03-21 15:02:54 +05:30
Vishnu Mohandas
0dcb185744 [mob][photos] v1 🚀 (#5400) 2025-03-21 13:46:49 +05:30
Manav Rathi
12ba72e87c [server] Autogenerate credentials during quickstart (#5395) 2025-03-21 13:40:44 +05:30
ashilkn
350a0159c9 v1 🚀 2025-03-21 13:37:14 +05:30
Manav Rathi
f5f323cf3e Improve UX 2025-03-21 13:35:04 +05:30
Laurens Priem
f493f4d444 [mob][photos] Memory final fix (#5398)
## Description

Last minor fix for memories
2025-03-21 13:27:51 +05:30
Ashil
85cc0af308 [mob][photos] Handle if InheritedWidget is not an ancestor (#5399) 2025-03-21 13:18:23 +05:30
ashilkn
2d88f4f6d7 Use maybeOf instead of .of to avoid null check error if the InheritedWidget is not an ancestor 2025-03-21 13:10:46 +05:30
Manav Rathi
8b52d5583c Mention open port 2025-03-21 13:08:14 +05:30
Manav Rathi
3fdbd8c735 Inline and split 2025-03-21 12:52:48 +05:30
Manav Rathi
dbb2ae79c6 Remove unnecessary forwards
localhost is user's host
2025-03-21 12:28:14 +05:30
Manav Rathi
58ffbc5eb4 Start implementing outline 2025-03-21 12:20:24 +05:30
laurenspriem
1a764779ba Do the same for magic cache 2025-03-21 12:19:30 +05:30
Vishnu Mohandas
7a35558175 [mob] Update changelog (#5397) 2025-03-21 12:18:07 +05:30
vishnukvmd
d7f5ee6039 All green 2025-03-21 12:17:29 +05:30
Manav Rathi
e8cf80bfde Update links 2025-03-21 12:15:48 +05:30
laurenspriem
f03d269a5f Only clear cache if there is cache 2025-03-21 12:13:16 +05:30
Vishnu Mohandas
e286696552 [mob] Update copy for iOS widget (#5396) 2025-03-21 12:13:06 +05:30
vishnukvmd
8142a7460b Update copy for iOS widget 2025-03-21 12:12:29 +05:30
Manav Rathi
2216c2c746 Outline new approach and move doc 2025-03-21 12:06:52 +05:30
Manav Rathi
d5488954b3 creds are autogened 2025-03-21 09:23:21 +05:30
Manav Rathi
a6f9f3565d fix 2025-03-21 08:55:38 +05:30
Manav Rathi
aada6bf415 tr 2025-03-21 08:30:38 +05:30
Manav Rathi
822d74b65b base64url
Test harness:

while true; do gen_jwt_secret | node -e 'const s = require("fs").readFileSync(0, "utf8").trim(); const ls = require("libsodium-wrappers-sumo"); ls.ready.then(() => console.log(s, ls.from_base64(s, 5).length))'; sleep 1; done
2025-03-21 08:23:00 +05:30
Manav Rathi
cfc76b7e14 Disable b64 wrap 2025-03-21 07:38:54 +05:30
Manav Rathi
bb8a25bf63 autogen 2025-03-20 21:52:38 +05:30
Manav Rathi
74eff4d50b Apparently more portable 2025-03-20 21:03:26 +05:30
Manav Rathi
d01fdd966f b check 2025-03-20 20:59:38 +05:30
Manav Rathi
0758c8a623 Outline 2025-03-20 20:47:11 +05:30
Manav Rathi
47e6419e23 Prep 2025-03-20 20:34:50 +05:30
Prateek Sunal
137208f088 [mob][photos] make bottom caption of fullscreen memory better looking (#5391) 2025-03-20 20:09:28 +05:30
Prateek Sunal
e69d466ff2 [mob][photos] refactor home widget (#5389)
## Description

Refactor home widget and separate memory home widget services.

## Tests
2025-03-20 20:06:38 +05:30
ashilkn
ff9473425c Make bottom caption of fullscreen memory better looking 2025-03-20 20:05:29 +05:30
Prateek Sunal
34dd088a9d fix: streamline memory widget initialization by removing login checks and adding blocker validation 2025-03-20 20:03:10 +05:30
Prateek Sunal
92fa3488b4 fix: don't keep updating if show memories is off 2025-03-20 19:59:33 +05:30
Prateek Sunal
a5c9ef207d chore: bump again 2025-03-20 19:51:50 +05:30
Prateek Sunal
4ebbb75ef6 fix: enhance memory widget initialization and logging 2025-03-20 19:50:37 +05:30
Prateek Sunal
b5909ac3b2 fix: don't duplicate complete icon set 2025-03-20 19:50:14 +05:30
Prateek Sunal
ea0c02a662 fix: update iOS class name as well 2025-03-20 19:06:17 +05:30
Prateek Sunal
25e4cae14b fix: update android class name 2025-03-20 18:54:44 +05:30
Prateek Sunal
4611db3983 fix(memory-hw): update copies, auto logout clear behavior, 2025-03-20 18:51:57 +05:30
Prateek Sunal
ca7ff8cd16 refactor(memory-home-widget): streamline memory update logic and improve synchronization handling 2025-03-20 18:26:25 +05:30
Manav Rathi
c872f9177d [server] Add docker compose version check to quickstart script (#5390) 2025-03-20 17:48:40 +05:30
Manav Rathi
b82df80864 mention start_interval in troubleshooting docs 2025-03-20 17:45:58 +05:30
Manav Rathi
c3fe7ab171 HEAD => main 2025-03-20 17:42:17 +05:30
Manav Rathi
f2acf75b4a min ver check 2025-03-20 17:34:01 +05:30
Prateek Sunal
9327238d19 fix(home-widget-service): remove unnecessary ignore call in init method 2025-03-20 17:26:17 +05:30
Prateek Sunal
7342963f96 fix(home-widget-service): correct ignore call in init method 2025-03-20 17:24:14 +05:30
Prateek Sunal
3579d44c78 Merge remote-tracking branch 'origin/main' into final-memory-winget 2025-03-20 17:20:55 +05:30
Prateek Sunal
35f5c7271b refactor(home-widget): use MemoryHomeWidgetService and update related methods 2025-03-20 17:20:49 +05:30
Laurens Priem
6521e09056 [mob][photos] Fix widget infinite load (#5388)
## Description

fix infinite loop issue

## Tests
2025-03-20 17:14:09 +05:30
laurenspriem
aa57c1a827 Fix widget infinite load 2025-03-20 17:11:31 +05:30
Manav Rathi
a0b4315842 docker check 2025-03-20 17:06:42 +05:30
Manav Rathi
4254a54071 [server][web] Quickstart doc cleanup (#5386) 2025-03-20 16:45:54 +05:30
Manav Rathi
df7d49d2cc Update 2025-03-20 16:35:28 +05:30
Manav Rathi
0a33a44752 Update 2025-03-20 16:25:38 +05:30
Vishnu Mohandas
bf52a6923d [mobile] Fix path to icon (#5384) 2025-03-20 16:19:59 +05:30
vishnukvmd
778c72e33b Rename in correct case 2025-03-20 16:18:34 +05:30
vishnukvmd
eb874b8907 Temporary rename 2025-03-20 16:18:16 +05:30
Manav Rathi
c06175cf11 Doc 2025-03-20 16:10:02 +05:30
Vishnu Mohandas
b4a5c0c594 [mob] Update splash image (#5382)
## Tests
- [x] Tested on emulator for both light and dark modes
2025-03-20 14:55:39 +05:30
vishnukvmd
8830bb65a7 Update splash image 2025-03-20 14:39:25 +05:30
Laurens Priem
36bc214497 [mob][photos] Fix memories fresh login issue (#5381)
## Description

Fix memories fresh login issue

## Tests
2025-03-20 14:14:30 +05:30
Laurens Priem
0f08280f2f Merge branch 'main' into memories_login_regression 2025-03-20 14:12:17 +05:30
laurenspriem
292187ee9c Bump for internal release 2025-03-20 14:09:36 +05:30
laurenspriem
ee7fba3c11 Fix memories fresh loging 2025-03-20 14:08:06 +05:30
Manav Rathi
b37c2bc047 Update 2025-03-20 13:58:39 +05:30
laurenspriem
29ef3d4522 Remove redundant lines 2025-03-20 13:55:28 +05:30
Manav Rathi
08d6fa3b6b Rearrange 2025-03-20 13:54:24 +05:30
laurenspriem
0d181361a7 Cleanup 2025-03-20 13:48:00 +05:30
Manav Rathi
f4d4e1ad6b doc 2025-03-20 13:46:26 +05:30
Manav Rathi
d91201a25b [server] Rename hello.sh to quickstart.sh (#5380) 2025-03-20 13:10:56 +05:30
Manav Rathi
fbf0f934fb [server] Rename hello.sh to quickstart.sh 2025-03-20 13:08:09 +05:30
Manav Rathi
5abc106494 [server] Create quickstart hello (#5379) 2025-03-20 12:51:24 +05:30
Manav Rathi
9ffba2fe91 Fancier 2025-03-20 12:45:27 +05:30
Neeraj
4f55310145 [mob] Update change log (#5378)
## Description

## Tests
2025-03-20 12:31:01 +05:30
Neeraj Gupta
ee7f6c3021 update changelog version 2025-03-20 12:27:14 +05:30
Neeraj Gupta
940de19b7d Bump version 2025-03-20 12:24:23 +05:30
Neeraj Gupta
38c17bd813 Change title 2025-03-20 12:23:21 +05:30
Neeraj Gupta
82fb3324a7 Add translation 2025-03-20 12:22:26 +05:30
Manav Rathi
f7a6a5e115 Create quickstart hello 2025-03-20 12:18:50 +05:30
Neeraj Gupta
bdda47656c Extract strings 2025-03-20 12:17:03 +05:30
Neeraj Gupta
cc1b1a70f0 Delete unused strings 2025-03-20 12:11:03 +05:30
Neeraj Gupta
8b22d1e03f Update change log 2025-03-20 11:53:40 +05:30
Manav Rathi
b4d22996c8 [web] Increase yarn install timeout (#5377)
Workaround for the image build failing no the arm64 runners (it works
fine on the amd64 runner):
https://github.com/ente-io/ente/actions/runs/13962703146/job/39086814540
2025-03-20 11:22:14 +05:30
Manav Rathi
cd20b22eae [web] Increase yarn install timeout
Workaround for the image build failing no the arm64 runners (it works fine on
the amd64 runner):
https://github.com/ente-io/ente/actions/runs/13962703146/job/39086814540
2025-03-20 11:20:38 +05:30
Manav Rathi
149fba11f1 [web] Add workflow to publish Docker images (#5376) 2025-03-20 11:06:54 +05:30
Manav Rathi
1da0455b77 Add web variant 2025-03-20 11:03:53 +05:30
Manav Rathi
9222b029b2 Increas hamming distance 2025-03-20 10:54:11 +05:30
Manav Rathi
938e2dcadb Tweak 2025-03-20 10:50:31 +05:30
Manav Rathi
ebf85c15c3 [server] Change server/ghcr => ghcr/server (#5375)
In prep for its new baby sibling, ghcr/web.
2025-03-20 10:47:20 +05:30
Manav Rathi
91494f7823 [server] Change server/ghcr => ghcr/server
In prep for its new baby sibling, ghcr/web.
2025-03-20 10:42:42 +05:30
Manav Rathi
39f7af7932 [server] Add quickstart variant of docker compose - WIP (#5374)
Pending items (should be done shortly):
- Publish and use the web docker image instead of the placeholder
- Add hello.sh
2025-03-20 10:36:40 +05:30
Manav Rathi
960399b0a5 Add web 2025-03-20 10:27:01 +05:30
Manav Rathi
9a93cc121c Rejig 2025-03-20 10:14:42 +05:30
Manav Rathi
6d3cb97ab0 ditto and swap 2025-03-20 09:42:09 +05:30
Manav Rathi
970c1229c4 Use default network 2025-03-20 09:37:53 +05:30
Manav Rathi
f213e9ad8c Outline 2025-03-20 09:33:11 +05:30
Manav Rathi
d943586faf Remove extra volume
This is an appendage from when this compose file was used for a test network,
and not relevant to self hosting, at least not in the starter sample.
2025-03-20 08:04:05 +05:30
Manav Rathi
27fe549e15 Shorten 2025-03-20 08:02:55 +05:30
Vishnu Mohandas
c1d1a3540a [mob][photos] resync memories on widget tap (#5373)
## Description

Resync memories on widget tap.

## Tests
2025-03-20 02:19:53 +05:30
Prateek Sunal
df64413478 fix: improve memory sync logic in HomeWidgetService 2025-03-20 02:15:02 +05:30
Prateek Sunal
2cd31826e7 fix: rename changeMemories & tap behavior fix 2025-03-20 01:54:47 +05:30
Prateek Sunal
a5ef3461d8 [mob][photos] memory widget revamp (#5343)
## Description

Supercharged memory widget with title, sub title and on tap behavior and a nice preview image.

## Tests
2025-03-20 01:08:31 +05:30
Prateek Sunal
97e5b251c1 chore: bump version 2025-03-20 01:06:32 +05:30
Prateek Sunal
fd31cb3433 fix: update preview snapshot 2025-03-20 01:06:07 +05:30
Prateek Sunal
c1b6006f12 fix: update preview image base 64 and remove unwanted text 2025-03-20 00:59:39 +05:30
Prateek Sunal
5d72070890 feat(memories): introduce MemorySeenEvent and update widget subscriptions 2025-03-20 00:33:52 +05:30
Prateek Sunal
4e3bec7ad7 fix(memory-widget: add init method for service and update ios widget 2025-03-20 00:14:29 +05:30
Prateek Sunal
a002b26114 Merge remote-tracking branch 'origin/main' into migrate-things 2025-03-19 23:58:48 +05:30
Prateek Sunal
99e6425408 refactor(home_widget_service): simplify initHomeWidget parameters and improve memory sync logic 2025-03-19 23:58:39 +05:30
Manav Rathi
daae621770 [server] Inline config in compose file, and prune unnecessary ports (#5372) 2025-03-19 21:05:35 +05:30
Manav Rathi
c56801c024 Notes 2025-03-19 20:42:44 +05:30
Manav Rathi
551d099c4a Reduce default ports 2025-03-19 20:35:47 +05:30
Manav Rathi
d615614985 Stop exposing postgres externally entirely
Museum can directly access it via the shared network
2025-03-19 20:29:14 +05:30
Manav Rathi
d80b220ad4 Avoid using default postgres port 2025-03-19 20:25:53 +05:30
Manav Rathi
3916d2b7d8 Prune 2025-03-19 20:21:15 +05:30
Manav Rathi
4cdc72bc29 Move config inline 2025-03-19 20:09:23 +05:30
Manav Rathi
b5e429ebc5 [server] Remove extra container by using a post_start lifecycle hook (#5370) 2025-03-19 19:55:17 +05:30
Manav Rathi
c329b30e49 [server] Remove extra container by using a post_start lifecycle hook 2025-03-19 19:50:55 +05:30
Laurens Priem
0285cd6b8c [mob][photos] Memories minor fixes and changes (#5368)
## Description

Minor fixes and changes

## Tests

Tested in debug mode on my pixel phone.
2025-03-19 19:31:14 +05:30
Manav Rathi
f145e0b424 [server] Inline the minio provision script (#5369)
This reduces a sidecar file that is needed by the Docker compose file
(which is a prerequisite for a future change where we will provide a
zero-build variant that doesn't require cloning the repo).
2025-03-19 19:12:17 +05:30
Manav Rathi
a4bc596b66 Inline 2025-03-19 18:25:41 +05:30
laurenspriem
5637d533ed add todo for later 2025-03-19 18:21:13 +05:30
laurenspriem
f498a986c9 Don't force compute when we have backup cache 2025-03-19 18:06:55 +05:30
Prateek Sunal
97935a5890 fix(memory-widget): this will change everything
sync logic is separated
2025-03-19 17:57:57 +05:30
laurenspriem
c5e7f233a7 Reduce birthday duration 2025-03-19 17:35:58 +05:30
Manav Rathi
675121f243 outline 2025-03-19 17:31:46 +05:30
laurenspriem
543fec4e4e error handling in getMemories 2025-03-19 17:26:41 +05:30
Prateek Sunal
5b3fa5e141 fix(home_widget_service): replace MemoriesService with memoriesCacheService for memory visibility check 2025-03-19 17:15:39 +05:30
Prateek Sunal
0e5bed8053 Merge remote-tracking branch 'origin/memories_qa' into migrate-things 2025-03-19 17:13:44 +05:30
Prateek Sunal
8d7333a223 feat(home_widget_service): add subscription for memories changed event and improve widget initialization logic 2025-03-19 17:13:40 +05:30
Manav Rathi
20b873d266 [web] Make the endpoints configurable without rebuilding the image (#5367)
Sibling of https://github.com/ente-io/ente/pull/5364.

**Tested by**
```sh
docker build -t web-test .

# Uses provided values
docker run -it --rm -p 3000:3000 -p 3090:3002 -e ENTE_API_ORIGIN=http://localhost:8090 -e ENTE_ALBUMS_ORIGIN=http://localhost:3090 web-test

# Uses defaults
docker run -it --rm -p 3000:3000 -p 3002:3002 web-test 
```
2025-03-19 17:09:52 +05:30
Manav Rathi
a80c724d0f Placeholder 2025-03-19 16:50:55 +05:30
laurenspriem
c45e4ad1d1 Prioritize last met over birthday 2025-03-19 16:36:50 +05:30
Prateek Sunal
7201e796fb fix(home_widget_service): update text when clearing widget 2025-03-19 16:29:35 +05:30
Prateek Sunal
2fdb0ccbe4 feat(home-widget): update slideshow preview android 2025-03-19 16:29:11 +05:30
laurenspriem
e05701fce2 Remove old memories service completely 2025-03-19 16:26:44 +05:30
Prateek Sunal
14b2f1aa94 fix(memory-widget): default state text align and padding + default state logic when memories are cached 2025-03-19 16:14:02 +05:30
laurenspriem
533b2193be Remove old memories widget 2025-03-19 16:07:49 +05:30
laurenspriem
603e0bdb28 cosmetic change 2025-03-19 16:07:29 +05:30
laurenspriem
8b0267cce7 Cache fillers if ML disabled 2025-03-19 16:05:05 +05:30
Manav Rathi
dfda91b99b Runtime configurable env vars 2025-03-19 16:04:36 +05:30
Prateek Sunal
43f3d4a5fe fix(slideshow-widget): remove default title and subtitle text 2025-03-19 15:26:34 +05:30
Prateek Sunal
184852295f fix(memories-cache): log warning when memory not found by generatedFileID 2025-03-19 15:20:10 +05:30
Prateek Sunal
38fd244811 fix(memory-widget): onTap widget should redirect to memory page 2025-03-19 15:18:19 +05:30
Prateek Sunal
3024384628 fix(home-widget): update memories check to showAnyMemories 2025-03-19 15:05:30 +05:30
Prateek Sunal
55ec76d5f6 Merge remote-tracking branch 'origin/memories_qa' into migrate-things 2025-03-19 15:05:01 +05:30
Prateek Sunal
2e9517d75f fix(memory-w): add force sync option for widget 2025-03-19 15:01:52 +05:30
laurenspriem
8aacb503c1 Memories widget api attempt 2025-03-19 14:54:46 +05:30
laurenspriem
743205f4c8 Fix duplicates in time memories 2025-03-19 14:54:25 +05:30
laurenspriem
80188cb8ea Copy change 2025-03-19 14:29:29 +05:30
laurenspriem
f21ed45fee Fix shuffle clip memories 2025-03-19 13:24:48 +05:30
Manav Rathi
a28932c319 [web] Don't block page load on malformed feature flags (#5365) 2025-03-19 13:22:21 +05:30
laurenspriem
e6761ac703 Add logs 2025-03-19 13:19:29 +05:30
Manav Rathi
c120cfc74b [web] Don't block page load on malformed feature flags 2025-03-19 13:19:10 +05:30
laurenspriem
6a3b5a7f0e move old memories code 2025-03-19 12:56:55 +05:30
laurenspriem
8308652d17 Move seen memories to end properly 2025-03-19 12:32:22 +05:30
laurenspriem
8e572c39d3 Don't use old memories service for marking seen 2025-03-19 12:18:54 +05:30
laurenspriem
fd40383482 extra null safety check 2025-03-19 11:34:22 +05:30
laurenspriem
b79f72930a Handle deleted files in cache 2025-03-19 11:24:39 +05:30
Neeraj
40f3ed7aad [mob] Fix formatBytes for TB unit (#5352)
## Description

## Tests
2025-03-19 10:45:50 +05:30
Manav Rathi
9c54e3f002 [web] Add web dockerfile (#5364)
References: Various community docker image examples, in particular 

* https://help.ente.io/self-hosting/faq/sharing#dockerfile-example by @
Dylanger on community discord
* https://github.com/DanteMS/ente-web by @DanteMS
* The OG community guide at
https://help.ente.io/self-hosting/guides/external-s3 by @Bramas

Thank you.

In a subsequent PR I'll also add cron jobs to publish this, add docs
etc.

## Tested by

```
docker build -t web-test .
docker run -it --rm -p 3000:3000 -p 3002:3002 -p 3003:3003 web-test 
```
2025-03-19 10:17:40 +05:30
laurenspriem
9e7833bf93 Early stop if no persons 2025-03-19 10:09:55 +05:30
Manav Rathi
0b9242c527 Add web dockerfile 2025-03-19 09:47:23 +05:30
Prateek Sunal
3912f00fb7 chore: bump build 2025-03-18 23:16:02 +05:30
Prateek Sunal
7c58dbf551 fix: only sync when memory change 2025-03-18 23:13:43 +05:30
Prateek Sunal
705c9fbf86 chore: bump number 2025-03-18 21:56:47 +05:30
Prateek Sunal
d004bfa83d Merge remote-tracking branch 'origin/main' into migrate-things 2025-03-18 21:55:55 +05:30
Manav Rathi
64d4c69159 [web] Video streaming WIP - Part 1/x (#5359) 2025-03-18 20:52:22 +05:30
Manav Rathi
f3ac886616 Not realistically happening soon, so avoid a leftover fork 2025-03-18 20:46:04 +05:30
Manav Rathi
4fef527ac2 LF 2025-03-18 20:46:00 +05:30
Manav Rathi
e9344c2ddc example 2025-03-18 20:38:18 +05:30
Vishnu Mohandas
23039eba18 [mob] Update notification icon (#5358)
## Tests
<img width="338" alt="Screenshot 2025-03-18 at 7 56 20 PM"
src="https://github.com/user-attachments/assets/4e8c56ce-95d3-4bc3-a561-b11da4d21111"
/>
2025-03-18 20:35:52 +05:30
Laurens Priem
46c7eb140e [mob][photos] Various memories fixes (#5357)
## Description

## Tests
2025-03-18 20:35:31 +05:30
Manav Rathi
280d29ffda throw on exceptional cases 2025-03-18 20:17:48 +05:30
Manav Rathi
e0843485d5 pl 2025-03-18 20:10:41 +05:30
Manav Rathi
8b427bccad dec 2025-03-18 19:56:54 +05:30
vishnukvmd
e291255838 Update notification icon 2025-03-18 19:55:39 +05:30
Manav Rathi
08594222e0 link 2025-03-18 19:40:33 +05:30
laurenspriem
26f7f85e75 Clear cache debug option 2025-03-18 19:29:16 +05:30
Manav Rathi
4ece954c3a Move 2025-03-18 19:23:23 +05:30
Prateek Sunal
c0b83df2c3 fix: overlay 2025-03-18 19:23:01 +05:30
laurenspriem
a741d4126b Fix persons not showing 2025-03-18 19:16:48 +05:30
Manav Rathi
6ef977be9c Sketch 2025-03-18 19:14:16 +05:30
Prateek Sunal
67ff3c9093 fix(android-widget): remove unnecessary attributes from gradient definition 2025-03-18 18:56:56 +05:30
Prateek Sunal
f21abd5133 feat(widget): android widget with title, subTitle, tap action & fixes for iOS widget 2025-03-18 18:54:28 +05:30
laurenspriem
04ad4a24c8 random clip memories 2025-03-18 18:50:38 +05:30
laurenspriem
86675c66bc Update clip copies 2025-03-18 18:48:03 +05:30
laurenspriem
b7ef4a4adb cleanup 2025-03-18 18:31:59 +05:30
Manav Rathi
78c35e2571 Sketch 2025-03-18 18:26:05 +05:30
laurenspriem
f9d42393a9 memories translations 2025-03-18 18:25:29 +05:30
laurenspriem
fb15ff540a Create titles on main thread 2025-03-18 17:39:38 +05:30
Manav Rathi
8f4f66987c [web] Enum cleanup (towards enabling isolatedDeclarations) (#5355)
Part 2 of https://github.com/ente-io/ente/pull/5353
2025-03-18 16:45:08 +05:30
Manav Rathi
935456bd16 For now 2025-03-18 16:40:07 +05:30
Manav Rathi
2a55215c62 Start enabling 2025-03-18 16:20:42 +05:30
Manav Rathi
16d2539bbf conv 2025-03-18 15:55:05 +05:30
Manav Rathi
2a883e48ca conv 2025-03-18 15:48:51 +05:30
Manav Rathi
96fa0a8472 conv 2025-03-18 15:43:53 +05:30
Manav Rathi
0c00433bec conv 2025-03-18 15:31:56 +05:30
Ashil
a05cf1168f [mob][photos] Use new asset for splash screen (#5354) 2025-03-18 15:22:06 +05:30
Manav Rathi
76360d7100 Tweak logging 2025-03-18 15:15:35 +05:30
Prateek Sunal
91e4ab3e4d fix(memories): sync on iOS 2025-03-18 15:11:12 +05:30
Manav Rathi
a2475c32e9 [web] Enum cleanup (towards enabling isolatedModules) - Part 1 (#5353) 2025-03-18 15:09:44 +05:30
Manav Rathi
7182ce015d conv 2025-03-18 14:57:17 +05:30
Prateek Sunal
dfca616ba5 fix: bg color on tinted mode 2025-03-18 14:49:20 +05:30
Manav Rathi
bad4ae47a4 conv 2025-03-18 14:38:39 +05:30
ashilkn
0d05b9134a Use new asset for splash screen 2025-03-18 14:34:26 +05:30
Manav Rathi
2b784d80c3 conv 2025-03-18 14:32:40 +05:30
Manav Rathi
48eec72bf6 conv UploadResult 2025-03-18 14:26:15 +05:30
Manav Rathi
b065e20d65 conv 2025-03-18 13:58:31 +05:30
Manav Rathi
5e0991aa9c conv 2025-03-18 13:44:09 +05:30
Manav Rathi
05b0e84a2a conv 2025-03-18 13:29:27 +05:30
laurenspriem
4a478e67e3 update clip queries 2025-03-18 13:18:01 +05:30
Manav Rathi
80eb4deece Fix 2025-03-18 13:06:02 +05:30
laurenspriem
614c3e0548 Randonmize person memories pick 2025-03-18 13:00:41 +05:30
Manav Rathi
30da80f058 conv 2025-03-18 13:00:40 +05:30
Neeraj Gupta
582709f4f5 [mob] Fix formatBytes for TB unit 2025-03-18 12:58:13 +05:30
Manav Rathi
62a8b2dc88 conv 2025-03-18 12:48:05 +05:30
laurenspriem
2fa9561c8c Adjusting people clip queries to prevent NSFW 2025-03-18 11:57:55 +05:30
Neeraj
f26a2f6c83 [mob] Avoid redundant event (#5351)
## Description

## Tests
2025-03-18 11:11:56 +05:30
Neeraj Gupta
c145412b9f Avoid redundant event 2025-03-18 11:06:39 +05:30
laurenspriem
d854019897 Better logging of memories update 2025-03-18 10:28:25 +05:30
Manav Rathi
d3d65d26cf [web] Refactor file viewer favorite to match archive code paths (#5350) 2025-03-18 10:20:04 +05:30
Manav Rathi
8c16c41b90 Omit empty collection name row in hidden section 2025-03-18 10:12:16 +05:30
Manav Rathi
58ce181a40 Fin 2025-03-18 09:59:34 +05:30
Manav Rathi
fb7fe05716 trigger 2025-03-18 09:45:36 +05:30
Manav Rathi
9551861ed7 clear 2025-03-18 09:21:47 +05:30
Manav Rathi
fb7d18e749 hook up 2025-03-18 09:14:28 +05:30
Manav Rathi
c3af3fada1 propogate 2025-03-18 08:46:48 +05:30
Manav Rathi
0455f7bd23 ditto wip 2025-03-18 08:26:13 +05:30
Ashil
7057e732d8 [mob][photos] Reupload iOS icon assets with unique names + Remove unused Asset set (#5346) 2025-03-18 05:53:19 +05:30
ashilkn
ecbb0e3ea7 [mob][photos] Remove unused Asset set 2025-03-17 23:11:27 +05:30
ashilkn
74116263a3 [mob][photos] Reupload iOS icon assets with unique names 2025-03-17 22:56:36 +05:30
Ashil
361a73075e [mob][photos] Support for iOS tinted icons + clean up (#5342)
### Different icons (Green, Light, Dark & OG) under different icon
themes (Light, Dark, Automatic & Tinted):


https://github.com/user-attachments/assets/2387cbab-59cc-4b27-a7b7-f57097460553



https://github.com/user-attachments/assets/c7e94283-f787-48de-a174-48b950f8b978



https://github.com/user-attachments/assets/c64f4999-c204-4b6e-a911-d3c7457bf916



https://github.com/user-attachments/assets/9e4ac258-a084-410b-a8c0-60a409366527
2025-03-17 22:41:17 +05:30
Manav Rathi
aa72fc2e39 [web] Gallery reducer nomenclature cleanup (#5345) 2025-03-17 20:47:22 +05:30
Prateek Sunal
f9365016c3 Merge remote-tracking branch 'origin/main' into migrate-things 2025-03-17 20:24:11 +05:30
Prateek Sunal
4ed8c2004a chore: bump things 2025-03-17 20:24:02 +05:30
Prateek Sunal
3424700cfe [mob] feat(memories): make iOS release ready 2025-03-17 20:21:35 +05:30
Manav Rathi
85143b9a24 Rename 2025-03-17 20:18:52 +05:30
Manav Rathi
278c082a38 Update gallery 2025-03-17 20:10:29 +05:30
Manav Rathi
8dee052ebb [web] Gallery reducer nomenclature cleanup 2025-03-17 19:57:28 +05:30
Vishnu Mohandas
c224b5c8f8 docs-updatedfaq (#5336)
## Description

## update faq
2025-03-17 19:50:19 +05:30
Manav Rathi
42edba6680 [web] Outline sync code (#5344) 2025-03-17 18:58:06 +05:30
Manav Rathi
d58af3f88d Upd 2025-03-17 18:48:02 +05:30
Manav Rathi
4c1bdcf3d0 Systematize 2025-03-17 18:37:32 +05:30
Prateek Sunal
2976fd7269 Merge branch 'main' into migrate-things 2025-03-17 18:30:21 +05:30
Manav Rathi
df17ac3c91 Reuse 2025-03-17 18:17:45 +05:30
Manav Rathi
8575bd83ac Also colln 2025-03-17 18:03:24 +05:30
Manav Rathi
be046cd906 Gen 2025-03-17 17:51:14 +05:30
Prateek Sunal
f0d23fe873 [mob] fix(memories): iOS tint, hide when disabled, sync on change, store generatedId 2025-03-17 17:38:13 +05:30
Neeraj
bdd6adcee3 [mob][photos] Minor fixes for memories and shift date (#5341)
## Description

Small fixes for memories and shift date

## Tests
2025-03-17 17:26:45 +05:30
ashilkn
5791bfdf76 [mob][photos] Add iOS tinted asset for OG icon to avoid an edge case where the new tinted icon is coming up instead of the old one 2025-03-17 17:09:24 +05:30
ashilkn
592e6c914b [mob][photos] Update iOS tinted icon asset 2025-03-17 16:59:07 +05:30
ashilkn
7f58b58ea9 [mob][photos] Use 'Single size' config for old app icon on iOS 2025-03-17 16:51:23 +05:30
laurenspriem
8220f5a484 [mob][photos] Less empty space 2025-03-17 16:47:57 +05:30
Neeraj
acfaf79178 [mob] SqlDB mixin class for common operations (#5338)
## Description

## Tests
2025-03-17 16:25:11 +05:30
Manav Rathi
a8cff32d04 [web] New translations (#5340)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-03-17 16:07:47 +05:30
Crowdin Bot
b2f5b58fe9 New Crowdin translations by GitHub Action 2025-03-17 10:35:44 +00:00
Manav Rathi
e36e99fa57 [web] Add an archive action in the file viewer (#5339) 2025-03-17 16:04:59 +05:30
laurenspriem
2aad26b048 [mob][photos] Fix dateformat 2025-03-17 16:01:58 +05:30
Manav Rathi
19f3cc1141 tr 2025-03-17 15:53:14 +05:30
Manav Rathi
89b8e98cd2 Fix 2025-03-17 15:48:20 +05:30
laurenspriem
7a4fa1c2ac [mob][photos] Copy 2025-03-17 15:47:01 +05:30
Manav Rathi
d032df105b Ref 2 2025-03-17 15:38:57 +05:30
laurenspriem
c1cca99973 [mob][photos] Fix you and me memory 2025-03-17 15:31:17 +05:30
Neeraj Gupta
3017f189fd [mob] Rename 2025-03-17 15:29:47 +05:30
ashilkn
71865607b7 [mob][photos] Delete unused Asset set 'AppIcon-dev' from iOS Asset Catalog 2025-03-17 15:29:07 +05:30
ashilkn
20c8d4cefa [mob][photos] Add support for iOS icon themes on the new v1 icons 2025-03-17 15:25:20 +05:30
Neeraj Gupta
109203d331 [mob] Move migrate in common mixin class 2025-03-17 15:23:16 +05:30
laurenspriem
e807747079 [mob][photos] Compute trigger 2025-03-17 15:18:06 +05:30
Manav Rathi
0024b7a400 Ref 2025-03-17 15:14:37 +05:30
Manav Rathi
7f6974697a Align 2025-03-17 15:04:22 +05:30
Neeraj Gupta
632d6119d2 [mob] move 2025-03-17 15:03:42 +05:30
Manav Rathi
ac5fc4b893 Integrate 2025-03-17 14:33:11 +05:30
Jay
f2c8383cb7 docs-updatedfaq 2025-03-17 14:19:36 +05:30
Manav Rathi
76ad97e59e Clear 2025-03-17 14:12:44 +05:30
Manav Rathi
3ad0a260e0 reorient 2025-03-17 14:05:14 +05:30
Manav Rathi
dff8ef8512 redo wip 3 2025-03-17 13:16:13 +05:30
Manav Rathi
2d003d8359 redo wip 2 2025-03-17 13:16:13 +05:30
Manav Rathi
a5e1cd2a5c redo wip 2025-03-17 13:16:13 +05:30
Manav Rathi
57f43a20e3 Part 2025-03-17 13:16:13 +05:30
Manav Rathi
0ec76545c5 Return a new file 2025-03-17 13:16:13 +05:30
Manav Rathi
346cb175b4 Outline 2025-03-17 13:16:12 +05:30
Manav Rathi
efb6656c28 Pick the latest from files 2025-03-17 13:16:12 +05:30
Manav Rathi
1f8fa69f8b Towards new layering 2025-03-17 13:16:12 +05:30
Manav Rathi
400157a46d Use alt 2025-03-17 13:16:12 +05:30
Manav Rathi
a70d2b9c05 Alt 2025-03-17 13:16:12 +05:30
Manav Rathi
0849f6d85c note 2 2025-03-17 13:16:12 +05:30
Manav Rathi
a488e4bb9f Note 1 2025-03-17 13:16:12 +05:30
Manav Rathi
df2678f358 Clear on error 2025-03-17 13:16:12 +05:30
Manav Rathi
f7d5a305b7 Handle more cases 2025-03-17 13:16:12 +05:30
Manav Rathi
0b45e6c3c0 scope 2025-03-17 13:16:12 +05:30
Manav Rathi
8f87d141ad shortcut 2025-03-17 13:16:12 +05:30
Manav Rathi
06e60d60ca Fix 2025-03-17 13:16:12 +05:30
Manav Rathi
c366d7e282 Ref 2025-03-17 13:16:12 +05:30
Manav Rathi
1db7d3aa90 All 3 2025-03-17 13:16:12 +05:30
Manav Rathi
2ba4bce241 vis 1 2025-03-17 13:16:12 +05:30
Manav Rathi
e71379e725 Forward 2025-03-17 13:16:12 +05:30
Manav Rathi
f8e1736254 wip gallery changes 2025-03-17 13:16:12 +05:30
Manav Rathi
5b896125f8 reducer 2 2025-03-17 13:16:12 +05:30
Manav Rathi
f2a3ebf1c5 wip reducer 2025-03-17 13:16:12 +05:30
Manav Rathi
810d9a7acd Sketch 2025-03-17 13:16:12 +05:30
Manav Rathi
a8e06372af sketch 2025-03-17 13:16:12 +05:30
Manav Rathi
4e6e02e300 [desktop] Minor ML tweaks (#5335) 2025-03-17 12:48:55 +05:30
Manav Rathi
accf820978 Tweak positioning 2025-03-17 12:45:07 +05:30
Manav Rathi
71646c4136 log to help debug a customer's support issue 2025-03-17 12:41:09 +05:30
Manav Rathi
7e4e72979f [desktop] Stop force resets on upload of large folders (#5334) 2025-03-17 12:37:30 +05:30
Manav Rathi
20d17ec817 [desktop] Stop force resets 2025-03-17 12:35:22 +05:30
mangesh
546f438b59 [docs] remove unnecessary dep (#5331) 2025-03-17 12:11:53 +05:30
laurenspriem
49b280d2b0 [mob][photos] Fix consistent time format 2025-03-17 11:42:20 +05:30
Manav Rathi
3461710b79 [desktop] Regular dep updates (#5333) 2025-03-17 11:07:58 +05:30
Manav Rathi
9de85946bf [desktop] Regular dep updates 2025-03-17 11:04:24 +05:30
laurenspriem
32a5399c58 [mob][photos] Log faceIDs 2025-03-17 10:55:05 +05:30
Laurens Priem
74b02130a5 Cluster remove copy (#5332)
## Description

- Added delete file option in cluster page (it's already there for named
persons, should be here too)
- Similar copy between cluster and named person for removing file
2025-03-17 10:48:47 +05:30
laurenspriem
c6da46d6fe [mob][photos] Similar copy between cluster and person 2025-03-17 10:41:19 +05:30
laurenspriem
6ad6db84ae [mob][photos] Add delete option for cluster files 2025-03-17 10:38:44 +05:30
mngshm
9825ab2a6f remove unnecessary dep & focus only on docker/compose 2025-03-17 10:21:16 +05:30
Manav Rathi
de567f9c5b [web] New translations (#5328)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-03-17 09:53:13 +05:30
Crowdin Bot
be00a108c6 New Crowdin translations by GitHub Action 2025-03-17 00:37:47 +00:00
Neeraj
2532ebc34e [auth][mob] Fix change-password flow immediately after login (#5320)
## Description

## Tests
2025-03-15 09:35:43 +05:30
Neeraj Gupta
00db0ebf25 [auth] Fix change password flow post login 2025-03-15 09:32:54 +05:30
Neeraj Gupta
f67764f9fe [mob] Fix change password on login->immedidate change password flow 2025-03-15 09:30:50 +05:30
Prateek Sunal
31652347d1 Merge remote-tracking branch 'origin/main' into migrate-things 2025-03-15 01:27:28 +05:30
Prateek Sunal
59f3687c97 fix: new captureFile with thumbnail and notify via toast when updated home widget 2025-03-15 01:27:25 +05:30
Prateek Sunal
1b501025c4 fix: fetch memories (#5319)
## Description

## Tests
2025-03-14 22:24:48 +05:30
Prateek Sunal
60203e7b0b fix: fetch memories 2025-03-14 22:09:50 +05:30
Neeraj
7fe914258e fix: add IconGreen (#5318)
## Description

## Tests
2025-03-14 21:58:45 +05:30
Prateek Sunal
4d37231561 fix: add IconGreen 2025-03-14 21:56:19 +05:30
Neeraj
9a4027de24 [mob] iOS home widget + memories (#5297)
## Description

This PR implements widgets for iOS, bringing memories to your home
screen.

## Tests
2025-03-14 21:49:52 +05:30
Prateek Sunal
b48a0aed42 chore: bump lock 2025-03-14 21:43:07 +05:30
Prateek Sunal
39082c71b9 Merge remote-tracking branch 'origin/main' into home-widget-ios-lesgo 2025-03-14 21:38:10 +05:30
Prateek Sunal
2e7f76bdba chore: push as usual 2025-03-14 21:37:30 +05:30
Neeraj
0ec87cd10f [mob] Fix ios debug build (#5317)
## Description

## Tests
2025-03-14 21:36:06 +05:30
Prateek Sunal
4a58909f03 chore: bump version 2025-03-14 21:35:33 +05:30
Neeraj Gupta
b4a32ff28a [mob] Fix ios debug build 2025-03-14 21:34:30 +05:30
Prateek Sunal
7e3d0952a7 feat: push all 2025-03-14 20:02:51 +05:30
Prateek Sunal
0168118920 Merge remote-tracking branch 'origin/main' into home-widget-ios-lesgo 2025-03-14 19:53:58 +05:30
Neeraj
8819c7ec09 [mob][photos] Memories (#5316)
## Description

## Tests
2025-03-14 19:40:15 +05:30
laurenspriem
d7c3d3d89f [mob][photos] Wait on update 2025-03-14 19:26:40 +05:30
laurenspriem
4dea737f5f [mob][photos] Fix show all activities 2025-03-14 19:26:10 +05:30
Prateek Sunal
36dd02d6f0 Merge remote-tracking branch 'origin/home-widget-ios-lesgo' into home-widget-ios-lesgo 2025-03-14 19:10:25 +05:30
Prateek Sunal
7b1c770705 Merge remote-tracking branch 'origin/home-widget-ios-lesgo' into home-widget-ios-lesgo 2025-03-14 19:09:51 +05:30
Prateek Sunal
8733758504 fix: push changes 2025-03-14 19:09:46 +05:30
Neeraj Gupta
3f476ec770 [mob] Handle empty list 2025-03-14 19:09:41 +05:30
Neeraj Gupta
31c490734b [mob] Fix typo 2025-03-14 18:57:35 +05:30
Prateek Sunal
f5acad963f fix: height and width 2025-03-14 18:53:40 +05:30
laurenspriem
7adebef19e [mob][photos] Resolved todos 2025-03-14 18:51:45 +05:30
Prateek Sunal
f1e477f140 Merge remote-tracking branch 'origin/home-widget-ios-lesgo' into home-widget-ios-lesgo 2025-03-14 18:48:56 +05:30
Prateek Sunal
b3a9ed0105 fix: finalize logic of things 2025-03-14 18:48:38 +05:30
Neeraj Gupta
920e318074 [mob] Fix bad state 2025-03-14 18:45:32 +05:30
laurenspriem
47f76dc40e [mob][photos] Park base locations for now 2025-03-14 17:59:00 +05:30
laurenspriem
ed7b646067 [mob][photos] Remove internal flag 2025-03-14 17:50:29 +05:30
laurenspriem
fd8a324f58 [mob][photos] Show seen memories last 2025-03-14 17:33:47 +05:30
laurenspriem
f05c3c98a7 [mob][photos] Clip memories 2025-03-14 16:49:52 +05:30
Prateek Sunal
35ab57f316 fix: fetch memory instead of favorites now 2025-03-14 16:05:10 +05:30
Prateek Sunal
42a60fcf85 Merge remote-tracking branch 'origin/memories_api_widget' into home-widget-ios-lesgo 2025-03-14 16:03:50 +05:30
Prateek Sunal
732d2fca97 Merge remote-tracking branch 'origin/main' into home-widget-ios-lesgo 2025-03-14 16:03:43 +05:30
laurenspriem
ae2c47f236 [mob][photos] Don't show hidden persons 2025-03-14 14:30:37 +05:30
laurenspriem
883e0f5a52 [mob][photos] Queue to recompute when people are added 2025-03-14 14:28:24 +05:30
laurenspriem
fc79d3d967 [mob][photos] Remove unneeded condition 2025-03-14 14:15:04 +05:30
Vishnu Mohandas
97f1951ba1 Icon for v1 (#5313)
## Description
New icons + icon switcher + splashscreen.

<img
src="https://github.com/user-attachments/assets/b3753ecb-bf50-4dff-b004-7360f0d36cde"
width="222px"/>
<img
src="https://github.com/user-attachments/assets/f57ca067-54aa-471d-bf74-bece72675846"
width="222px"/>

## Tests
- [x] Android
- [x] iOS 
- [x] Circle
- [x] Squircle
- [x] Monochrome
2025-03-14 13:55:45 +05:30
laurenspriem
7aead5fe11 [mob][photos] Remove limit 2025-03-14 13:49:28 +05:30
vishnukvmd
bc75cd460f Merge branch 'main' into icon 2025-03-14 13:40:43 +05:30
vishnukvmd
cdcfb35053 OG monochrome 2025-03-14 13:38:36 +05:30
vishnukvmd
5b0530013e Update monochrome icon 2025-03-14 13:34:45 +05:30
laurenspriem
71399e01f0 [mob][photos] Increase memories refresh frequency 2025-03-14 13:11:02 +05:30
laurenspriem
8245ba0f9b [mob][photos] Remove more loop syntax 2025-03-14 13:03:25 +05:30
laurenspriem
78067230aa [mob][photos] todo 2025-03-14 12:59:53 +05:30
laurenspriem
41365619b5 [mob][photos] Remove unneeded loop syntax 2025-03-14 12:57:17 +05:30
vishnukvmd
c15000dd67 Setup monochrome icon 2025-03-14 12:40:05 +05:30
vishnukvmd
7f795407d8 Generate light mode icon 2025-03-14 12:32:40 +05:30
vishnukvmd
1c44f077ba Generate dark mode icon 2025-03-14 12:32:40 +05:30
vishnukvmd
0f0270a8bd Generate default icon 2025-03-14 12:32:40 +05:30
vishnukvmd
dc2aebbffc Update e 2025-03-14 12:32:40 +05:30
vishnukvmd
91ff3f55a3 Setup monochrome 2025-03-14 12:32:39 +05:30
laurenspriem
eb19d0af97 [mob][photos] Move constants 2025-03-14 12:28:58 +05:30
laurenspriem
e099aa0e0f [mob][photos] Always show month memories 2025-03-14 11:59:28 +05:30
laurenspriem
24f0638975 [mob][photos] standardize titles 2025-03-14 11:41:05 +05:30
laurenspriem
f0328f6563 [mob][photos] Add more people activities 2025-03-14 11:23:22 +05:30
laurenspriem
60afab62b0 [mob][photos] Only recompute when going into moments section 2025-03-14 10:46:13 +05:30
laurenspriem
0e3609542c [mob][photos] Force compute new cache when needed 2025-03-14 10:15:03 +05:30
laurenspriem
5c65f6a30d [mob][photos] Memory calculations in computer 2025-03-14 10:06:49 +05:30
laurenspriem
8e0a5e4419 [mob][photos] Null safety check 2025-03-14 10:05:31 +05:30
laurenspriem
0d99c90d9f [mob][photos] Log calc time for memories update 2025-03-14 09:40:05 +05:30
Prateek Sunal
b57f553d8d Merge remote-tracking branch 'origin/main' into home-widget-ios-lesgo 2025-03-14 04:18:21 +05:30
Prateek Sunal
1394d539f0 feat: a working prototype for iOS 2025-03-14 04:18:12 +05:30
Ashil
16c2358b4d [mob][photos] Ensure that the shared data received through the intent is a photo or video before showing a dialog specific to shared photo/video. (#5310) 2025-03-13 19:04:28 +05:30
ashilkn
18671730c5 [mob][photos] Extract string 2025-03-13 18:47:40 +05:30
ashilkn
79ddde8777 [mob][photos] Remove unused file 2025-03-13 18:44:57 +05:30
ashilkn
0702ee98bc [mob][photos] Ensure that the shared data received through the intent is a photo or video before showing a dialog specific to shared media 2025-03-13 18:36:10 +05:30
laurenspriem
7391602302 [mob][photos] works even if no ML data 2025-03-13 16:19:04 +05:30
laurenspriem
1e96044a51 [mob][photos] Separate data gathering and calculations 2025-03-13 15:59:34 +05:30
ashilkn
b0a1cf0ca1 Merge branch 'main' into icon 2025-03-13 14:54:37 +05:30
Neeraj
4b862f52fc [server] Update from address for family related emails (#5308)
## Description

## Tests
2025-03-13 14:21:37 +05:30
Neeraj Gupta
629d0e69cd [server] Update from address for family related emails 2025-03-13 14:18:57 +05:30
ashilkn
8e220f474c [mob][photos] Make radio buttons tappable in app icon selector 2025-03-13 14:05:38 +05:30
Neeraj
f49cf78b2d [mob] Render image with high filter quality (#5306)
## Description

## Tests
2025-03-13 12:32:59 +05:30
Neeraj Gupta
7ca49bb753 [mob] Render image with high filter quality 2025-03-13 12:15:49 +05:30
vishnukvmd
5526a46434 Add monochrome 2025-03-13 12:07:23 +05:30
laurenspriem
1675cfc388 [mob][photos] Simplify get maps 2025-03-13 11:49:51 +05:30
laurenspriem
05f91d233c [mob][photos] Better safety checking 2025-03-13 11:41:52 +05:30
laurenspriem
217eaaea98 [mob][photos] Fallback if ML is off 2025-03-13 10:43:12 +05:30
Prateek Sunal
5670de7e01 [mob] lint fixes (#5298)
## Description

From 44 issues down to 7 issues for lint. Leftovers are related to
[`isPasswordInput`](2ccd92519b/mobile/lib/ui/components/text_input_widget.dart (L41))
and [`flutter_map`](https://pub.dev/packages/flutter_map) deprecated
params.

<img width="995" alt="image"
src="https://github.com/user-attachments/assets/a1f164bd-6be1-477f-87b2-9a28ab3adfec"
/>


## Tests
2025-03-13 09:49:14 +05:30
Ashil
d62dd4d63a [mob][photos] Update favourite icon in File's app bar (#5304)
## Description


https://github.com/user-attachments/assets/99f0e0cd-d38a-4f7b-ad3e-c75ed43c6d0b
2025-03-13 05:46:51 +05:30
ashilkn
deb458801a [mob][photos] Add haptics when favouriting from file app bar 2025-03-13 01:38:52 +05:30
ashilkn
a616e0b67e [mob][photos] Update file app bar's favourite icon's colors 2025-03-13 01:08:58 +05:30
vishnukvmd
21cc52987c Update docs 2025-03-13 00:00:22 +05:30
vishnukvmd
4009078fb0 Delete unused file 2025-03-12 23:58:56 +05:30
vishnukvmd
b82cbfb025 Sample commit for adding icon 2025-03-12 23:57:52 +05:30
vishnukvmd
40ae8d91c3 Add OG icon 2025-03-12 23:55:17 +05:30
vishnukvmd
8aab6513f2 Fix icons 2025-03-12 23:29:18 +05:30
vishnukvmd
cf3da97a50 Simplify 2025-03-12 23:08:20 +05:30
vishnukvmd
24f2ac2d8b Remove debug 2025-03-12 18:34:40 +05:30
Prateek Sunal
f27807622d fix: update code 2025-03-12 18:29:36 +05:30
ashilkn
7a090910cc Merge branch 'icon_picker_ui' into icon 2025-03-12 18:25:18 +05:30
ashilkn
50add97171 [mob][photos] chore 2025-03-12 18:24:49 +05:30
ashilkn
de7cd585ba [mob][photos] Show available icons in app icon selection screen and get selection working 2025-03-12 17:22:35 +05:30
laurenspriem
9cfd8a7671 [mob][photos] Don't use location tag for trips 2025-03-12 16:42:59 +05:30
Prateek Sunal
ab89b28ccc [mob] chore: remove unused imports 2025-03-12 16:37:52 +05:30
Prateek Sunal
fc7203d2ab [mob] fix: remove unused 2025-03-12 16:36:55 +05:30
vishnukvmd
2f7a6c7fd1 Unbreak flutter run by removing LAUNCHER nodes per flavor 2025-03-12 15:55:06 +05:30
Prateek Sunal
6746c64a66 Merge remote-tracking branch 'origin/main' into home-widget-ios-lesgo 2025-03-12 15:44:26 +05:30
Prateek Sunal
2578dec249 [mob] feat: update slideshow widget code to support iOS 2025-03-12 15:42:12 +05:30
vishnukvmd
185da3fa9a Remove unused flavor 2025-03-12 15:30:26 +05:30
Neeraj
2ccd92519b [auth] remove ubuntu-20.04 runner & more (#5232)
## Description

Remove deprecated ubuntu-20.04 workflow and merge it with the latest.

## Tests
2025-03-12 15:16:52 +05:30
Laurens Priem
b96c350c2e [mob][photos] Bulk edit date (#5131)
## Description

Improved the edit date functionality:
- Bulk edit date
- Shift dates
- New edit date UI more in line with Ente designs

## Design

<img
src="https://github.com/user-attachments/assets/ce20c6f6-5ade-4e1b-8c2f-3dd7e9612fcd"
width="300px">

<img
src="https://github.com/user-attachments/assets/66f3f68b-8557-4859-a5cf-f70f692187c5"
width="300px">

<img
src="https://github.com/user-attachments/assets/973f1ff5-9a54-4ab0-afb7-0cc68d4421d6"
width="300px">

<img
src="https://github.com/user-attachments/assets/906e5106-7264-4c60-aeb6-6f1d1586e9ec"
width="300px">

<img
src="https://github.com/user-attachments/assets/6b786bd5-58d7-4e66-85b0-73f7ef5eb817"
width="300px">

<img
src="https://github.com/user-attachments/assets/458daf34-6047-4a0a-8feb-9683dd2d7374"
width="300px">

<img
src="https://github.com/user-attachments/assets/85da4b34-8e47-40f2-ba56-05fb0818f6e3"
width="300px">


## Tests

Tested in debug mode on my pixel phone.
2025-03-12 15:16:20 +05:30
laurenspriem
0625571fdc [mob][photos] Use existing update mmd method 2025-03-12 15:12:33 +05:30
vishnukvmd
5e2fbf9c7f Remove duplicate entries from launcher, breaking flutter run 2025-03-12 15:07:01 +05:30
vishnukvmd
84f329ea9c Update 2025-03-12 15:07:01 +05:30
ashilkn
f8decd42f1 Merge branch 'icon' into icon_picker_ui 2025-03-12 14:12:37 +05:30
ashilkn
f92b7b3ea8 [mob][photos] Update spalsh screen 2025-03-12 14:02:57 +05:30
Neeraj
70418d70a7 docs-ios backup (#5293)
## Description

## add iOS album backup faq
2025-03-12 13:54:25 +05:30
Manav Rathi
c12335d5fe [web] Make the accountsUrl optional when pk is not set (#5296) 2025-03-12 13:21:26 +05:30
Manav Rathi
a9887cb235 [web] Make the accountsUrl optional when pk is not set 2025-03-12 13:15:49 +05:30
Manav Rathi
f7c47674d1 [web] File viewer code cleanup (#5294)
Cleaning pending leftovers from old viewer.
2025-03-12 12:52:14 +05:30
laurenspriem
2e70eb678d [mob][photos] Unscrew translations 2025-03-12 12:26:49 +05:30
Manav Rathi
c8b07fcae5 FileThumbnail 2025-03-12 12:18:14 +05:30
Jay
6d31ecbe2f docs-ios backup 2025-03-12 12:13:28 +05:30
laurenspriem
8375c54b9b Merge branch 'main' into bulk_edit_date 2025-03-12 12:07:57 +05:30
laurenspriem
117e4f3475 [mob][photos] Re-organize 2025-03-12 11:51:51 +05:30
laurenspriem
7f6d4027a5 [mob][photos] Properly update mmd 2025-03-12 11:23:43 +05:30
laurenspriem
faf2f39990 [mob][photos] Forgot earlier commit 2025-03-12 11:23:06 +05:30
Manav Rathi
4312b024f6 cleanup 2025-03-12 10:49:23 +05:30
Manav Rathi
500ecc3966 Prune 2025-03-12 10:34:03 +05:30
Manav Rathi
f92db38ca1 uncontext 2025-03-12 10:28:05 +05:30
Manav Rathi
c07f2f4775 types 2025-03-12 10:21:33 +05:30
Manav Rathi
57a226ed2a Rename 2025-03-12 09:35:43 +05:30
Manav Rathi
367d373c18 Semantic + better layout for long descriptions 2025-03-12 09:14:24 +05:30
laurenspriem
fc9bac09ef [mob][photos] Remove old code 2025-03-11 19:21:39 +05:30
laurenspriem
5d15905736 [mob][photos] Use in file info too 2025-03-11 19:19:33 +05:30
laurenspriem
39bb4b4400 [mob][photos] Option to not show header 2025-03-11 19:07:04 +05:30
laurenspriem
30b3af8691 [mob][photos] Extract strings 2025-03-11 17:20:22 +05:30
laurenspriem
890b8a5ac7 [mob][photos] Give option in file selection actions 2025-03-11 16:46:27 +05:30
laurenspriem
07de44b235 [mob][photos] show day of week in picker 2025-03-11 16:40:23 +05:30
laurenspriem
c62cde415f [mob][photos] Contain file name 2025-03-11 14:33:24 +05:30
laurenspriem
83404a646e [mob][photos] Align tiles 2025-03-11 14:26:49 +05:30
Prateek Sunal
45c878aa35 Merge remote-tracking branch 'origin/main' into home-widget-ios-lesgo 2025-03-11 13:29:28 +05:30
laurenspriem
54be18dac6 [mob][photos] Align components 2025-03-11 13:17:45 +05:30
laurenspriem
a1c74bb0b2 [mob][photos] newrange fix 2025-03-11 12:51:38 +05:30
laurenspriem
1977129a68 [mob][photos] am/pm 2025-03-11 10:06:49 +05:30
ashilkn
cfb2e5f1bd [mob][photos] Scaffold app icon selection screen 2025-03-10 22:32:50 +05:30
vishnukvmd
6552562d83 Fix colors 2025-03-10 21:03:45 +05:30
vishnukvmd
226d2b6925 Refactor 2025-03-10 20:55:10 +05:30
vishnukvmd
26e903b1f1 Try new plugin 2025-03-10 20:53:51 +05:30
vishnukvmd
701676beeb Update xml colors 2025-03-10 20:53:46 +05:30
vishnukvmd
fe9c236b71 Try new plugin 2025-03-10 20:53:34 +05:30
vishnukvmd
df20a6185b Fix iOS 2025-03-10 20:53:25 +05:30
Prateek Sunal
9c18de33e6 feat: widget on iOS 2025-03-10 19:32:40 +05:30
vishnukvmd
8dd1180c85 Update 2025-03-10 18:02:19 +05:30
vishnukvmd
3dec686458 Update icons 2025-03-10 17:42:40 +05:30
vishnukvmd
ac57a5d90d Update icons 2025-03-10 17:40:00 +05:30
laurenspriem
afb80f2131 [mob][photos] use ente colours everywhere 2025-03-10 16:07:09 +05:30
laurenspriem
7c520655a3 [mob][photos] Add new range UI 2025-03-10 16:02:45 +05:30
laurenspriem
812dffc231 [mob][photos] single file header 2025-03-10 15:16:28 +05:30
laurenspriem
5898aebcf1 [mob][photos] max shift setting 2025-03-10 14:51:53 +05:30
laurenspriem
439664fcca [mob][photos] edit dates logic 2025-03-10 14:42:41 +05:30
laurenspriem
7c8599a370 [mob][photos] confirmation button 2025-03-10 14:30:07 +05:30
laurenspriem
340ca6500a [mob][photos] DateTime picker widget 2025-03-10 11:57:03 +05:30
vishnukvmd
04c591a38c Setup icons for Android 2025-03-08 17:49:30 +05:30
vishnukvmd
06c126544d Setup icons for iOS 2025-03-08 17:49:25 +05:30
vishnukvmd
53a45f7cdc Compress dev icon 2025-03-08 17:38:29 +05:30
vishnukvmd
7d664986ac Generate new icons 2025-03-08 17:37:51 +05:30
vishnukvmd
c4c542bc25 Drop dev icon generator 2025-03-08 17:37:44 +05:30
laurenspriem
7ff9031ac0 [mob][photos] Next screen 2025-03-08 14:19:52 +05:30
laurenspriem
0ad3878bbd [mob][photos] stateful widget controlling flow 2025-03-08 13:28:16 +05:30
laurenspriem
013f83cc39 [mob][photos] extract widgets 2025-03-08 13:19:32 +05:30
vishnukvmd
ee6e389fca Setup base icons 2025-03-08 11:37:56 +05:30
vishnukvmd
de252b4ad8 Upgrade icon package 2025-03-08 11:37:52 +05:30
Prateek Sunal
54c8d5851b [auth] fix(workflow): remove soon to be deprecated ubuntu-20.04 workflow and switch source to ente-io of flutter_distributor 2025-03-05 19:23:53 +05:30
laurenspriem
2a98ed4815 Merge branch 'main' into bulk_edit_date 2025-03-05 11:48:23 +05:30
laurenspriem
a2b0c06a5b [mob][photos] Prettify 2025-03-03 13:31:25 +05:30
laurenspriem
d8fd5add26 [mob][photos] First bottom sheet 2025-03-03 11:56:38 +05:30
laurenspriem
0774d53efc [mob][photos] Cleanup duplicate code 2025-02-18 11:25:59 +05:30
laurenspriem
d41f1da48d [mob][photos] Add bulk edit date option 2025-02-18 11:24:08 +05:30
746 changed files with 21643 additions and 8395 deletions

View File

@@ -32,8 +32,8 @@ env:
FLUTTER_VERSION: "3.24.3"
jobs:
build-ubuntu:
runs-on: ubuntu-20.04
build-linux-latest:
runs-on: ubuntu-latest
defaults:
run:
@@ -90,22 +90,31 @@ jobs:
- name: Install dependencies for desktop build
run: |
sudo apt-get update -y
sudo apt-get install -y libsecret-1-dev libsodium-dev libfuse2 ninja-build libgtk-3-dev dpkg-dev pkg-config libsqlite3-dev locate appindicator3-0.1 libappindicator3-dev libffi-dev libtiff5
sudo apt-get install -y libsecret-1-dev libsodium-dev libfuse2 ninja-build libgtk-3-dev dpkg-dev pkg-config rpm patchelf libsqlite3-dev locate libayatana-appindicator3-dev libffi-dev libtiff6 xz-utils libarchive-tools libcurl4-openssl-dev
sudo updatedb --localpaths='/usr/lib/x86_64-linux-gnu'
- name: Install appimagetool
run: |
wget -O appimagetool "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
chmod +x appimagetool
mv appimagetool /usr/local/bin/
- name: Build desktop app
run: |
flutter config --enable-linux-desktop
# dart pub global activate flutter_distributor
dart pub global activate --source git https://github.com/prateekmedia/flutter_distributor --git-ref develop --git-path packages/flutter_distributor
dart pub global activate --source git https://github.com/ente-io/flutter_distributor_fork --git-ref develop --git-path packages/flutter_distributor
# RPM
flutter_distributor package --platform=linux --targets=rpm --skip-clean
mv dist/**/*-*-linux.rpm artifacts/ente-${{ github.ref_name }}-x86_64.rpm
# APPIMAGE
flutter_distributor package --platform=linux --targets=appimage --skip-clean
mv dist/**/*-*-linux.AppImage artifacts/ente-${{ github.ref_name }}-x86_64.AppImage
# DEB
flutter_distributor package --platform=linux --targets=deb --skip-clean
mv dist/**/*-*-linux.deb artifacts/ente-${{ github.ref_name }}-x86_64.deb
env:
LIBSODIUM_USE_PKGCONFIG: 1
- name: Generate checksums and push to artifacts
run: |
sha256sum artifacts/ente-* > artifacts/sha256sum-apk-deb
- name: Generate checksums
run: sha256sum artifacts/ente-* >> artifacts/sha256sum-rpm-appimage
- name: Create a draft GitHub release
uses: ncipollo/release-action@v1
@@ -125,67 +134,6 @@ jobs:
releaseFiles: auth/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
track: internal
build-fedora-etc:
runs-on: ubuntu-latest
defaults:
run:
working-directory: auth
steps:
- name: Checkout code and submodules
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Flutter ${{ env.FLUTTER_VERSION }}
uses: subosito/flutter-action@v2
with:
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Create artifacts directory
run: mkdir artifacts
- name: Install dependencies for desktop build
run: |
sudo apt-get update -y
sudo apt-get install -y libsecret-1-dev libsodium-dev libfuse2 ninja-build libgtk-3-dev dpkg-dev pkg-config rpm patchelf libsqlite3-dev locate libayatana-appindicator3-dev libffi-dev libtiff6 xz-utils libarchive-tools libcurl4-openssl-dev
sudo updatedb --localpaths='/usr/lib/x86_64-linux-gnu'
- name: Install appimagetool
run: |
wget -O appimagetool "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
chmod +x appimagetool
mv appimagetool /usr/local/bin/
- name: Build desktop app
run: |
flutter config --enable-linux-desktop
# dart pub global activate flutter_distributor
dart pub global activate --source git https://github.com/prateekmedia/flutter_distributor --git-ref develop --git-path packages/flutter_distributor
# Run below command if it is a beta or nightly
if [[ ${{ github.ref }} =~ beta|nightly ]]; then
flutter_distributor package --platform=linux --targets=pacman --skip-clean
mv dist/**/*-*-linux.pacman artifacts/ente-${{ github.ref_name }}-x86_64.pacman
fi
flutter_distributor package --platform=linux --targets=rpm --skip-clean
mv dist/**/*-*-linux.rpm artifacts/ente-${{ github.ref_name }}-x86_64.rpm
flutter_distributor package --platform=linux --targets=appimage --skip-clean
mv dist/**/*-*-linux.AppImage artifacts/ente-${{ github.ref_name }}-x86_64.AppImage
- name: Generate checksums
run: sha256sum artifacts/ente-* >> artifacts/sha256sum-rpm-appimage
- name: Create a draft GitHub release
uses: ncipollo/release-action@v1
with:
artifacts: "auth/artifacts/*"
draft: true
allowUpdates: true
updateOnlyUnreleased: true
build-windows:
runs-on: windows-latest
@@ -213,7 +161,7 @@ jobs:
run: |
flutter config --enable-windows-desktop
# dart pub global activate flutter_distributor
dart pub global activate --source git https://github.com/prateekmedia/flutter_distributor --git-ref develop --git-path packages/flutter_distributor
dart pub global activate --source git https://github.com/ente-io/flutter_distributor_fork --git-ref develop --git-path packages/flutter_distributor
make innoinstall
flutter_distributor package --platform=windows --targets=exe --skip-clean
mv dist/**/*-windows-setup.exe artifacts/ente-${{ github.ref_name }}-installer.exe

View File

@@ -36,6 +36,6 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Update branch server/ghcr to point to source commit
- name: Update branch ghcr/server to point to source commit
run: |
git push -f origin HEAD:refs/heads/server/ghcr
git push -f origin HEAD:refs/heads/ghcr/server

34
.github/workflows/web-publish-ghcr.yml vendored Normal file
View File

@@ -0,0 +1,34 @@
name: "Publish ghcr (web)"
on:
# Run automatically every Wednesday, at 07:00 UTC.
schedule:
- cron: '0 7 * * 3'
# Run manually if needed to publish out of schedule.
workflow_dispatch:
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Build and push
uses: mr-smithers-excellent/docker-build-push@v6
with:
dockerfile: web/Dockerfile
directory: web
# Resultant package name will be ghcr.io/ente-io/web
image: web
registry: ghcr.io
enableBuildKit: true
multiPlatform: true
platform: linux/amd64,linux/arm64
tags: ${{ github.sha }}, latest
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Update branch ghcr/web to point to source commit
run: |
git push -f origin HEAD:refs/heads/ghcr/web

View File

@@ -842,6 +842,10 @@
{
"title": "Parsec"
},
{
"title": "Patient Access",
"slug": "patient_access"
},
{
"title": "PayPal"
},
@@ -867,6 +871,10 @@
{
"title": "Pingvin Share"
},
{
"title": "Pionex",
"slug": "pionex"
},
{
"title": "Plutus",
"hex": "DEC685"

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<rect id="Artboard1" x="0" y="0" width="512" height="512" style="fill:none;"/>
<g id="Artboard11" serif:id="Artboard1">
<g transform="matrix(2.44447,0,0,2.44447,256,256)">
<g transform="matrix(1,0,0,1,-94.85,-84.1)">
<clipPath id="_clip1">
<rect x="0" y="0" width="189.7" height="168.2"/>
</clipPath>
<g clip-path="url(#_clip1)">
<g transform="matrix(1,0,0,1,-0.61524,-0.898391)">
<path d="M173.9,17.6C152.361,-3.884 116.993,-3.929 95.4,17.5C116.63,38.944 116.585,74.011 95.3,95.4C93.1,97.6 90.3,98.7 88.6,101.1C81.3,111.4 88.5,117.8 97.1,126.6L113.6,143.6C118.2,148.1 119,151.1 120.7,149.6L174,96.3C184.431,85.887 190.299,71.739 190.299,57C190.299,42.212 184.392,28.021 173.9,17.6Z" style="fill:url(#_Linear2);fill-rule:nonzero;"/>
</g>
<g transform="matrix(1,0,0,1,-0.61524,-0.898391)">
<path d="M95.6,17.1C85.167,6.707 71.026,0.865 56.3,0.865C25.752,0.865 0.615,26.002 0.615,56.55C0.615,71.35 6.515,85.555 17,96L43.2,69.8L43.1,69.7C39.759,66.235 37.89,61.604 37.89,56.79C37.89,46.586 46.286,38.19 56.49,38.19C61.304,38.19 65.935,40.059 69.4,43.4L69.5,43.5L95.1,18L95.8,17.3L95.6,17.1Z" style="fill:url(#_Linear3);fill-rule:nonzero;"/>
</g>
<g transform="matrix(1,0,0,1,-0.61524,-0.898391)">
<path d="M88.9,116.3C85.228,112.435 85.318,106.257 89.1,102.5C89.241,102.337 89.41,102.202 89.6,102.1C92.944,99.141 96.022,95.895 98.8,92.4C116.335,71.396 116.037,40.462 98.1,19.8C97.3,18.9 96.4,18 95.7,17.3L69.5,43.4C72.841,46.865 74.71,51.496 74.71,56.31C74.71,66.514 66.314,74.91 56.11,74.91C51.296,74.91 46.665,73.041 43.2,69.7L17,96L86.4,165.3C91.479,170.365 99.821,170.365 104.9,165.3L121.4,148.8" style="fill:rgb(50,50,93);fill-rule:nonzero;"/>
</g>
</g>
</g>
</g>
</g>
<defs>
<linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(125.407,10.9269,-10.9269,125.407,103.088,88.1467)"><stop offset="0" style="stop-color:rgb(211,54,138);stop-opacity:1"/><stop offset="0.28" style="stop-color:rgb(221,76,126);stop-opacity:1"/><stop offset="0.68" style="stop-color:rgb(234,92,123);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(255,117,117);stop-opacity:1"/></linearGradient>
<linearGradient id="_Linear3" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(92.07,6.44,-6.44,92.07,1.06,45.85)"><stop offset="0" style="stop-color:rgb(3,142,245);stop-opacity:1"/><stop offset="0.17" style="stop-color:rgb(3,142,245);stop-opacity:1"/><stop offset="0.38" style="stop-color:rgb(69,112,252);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(72,105,253);stop-opacity:1"/></linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 719 165"><defs><style>.cls-1{fill:#ff7028;}.cls-2{fill:url(#linear-gradient);}.cls-3{fill:url(#linear-gradient-2);}.cls-4{fill:url(#linear-gradient-3);}.cls-5{opacity:0.6;}.cls-6{fill:url(#linear-gradient-4);}.cls-7{fill:url(#linear-gradient-5);}.cls-8{fill:none;}</style><linearGradient id="linear-gradient" x1="62.83" y1="375.51" x2="211.47" y2="375.51" gradientTransform="matrix(1, 0, 0, -1, 0, 752)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff7028"/><stop offset="1" stop-color="#ffcd4d"/></linearGradient><linearGradient id="linear-gradient-2" x1="183.61" y1="411.83" x2="-4.86" y2="411.83" xlink:href="#linear-gradient"/><linearGradient id="linear-gradient-3" x1="130.7" y1="356.24" x2="14.99" y2="356.24" xlink:href="#linear-gradient"/><linearGradient id="linear-gradient-4" x1="60.26" y1="347.69" x2="92.91" y2="347.69" gradientTransform="matrix(1, 0, 0, -1, 0, 752)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c44100"/><stop offset="1" stop-color="#c84300" stop-opacity="0"/></linearGradient><linearGradient id="linear-gradient-5" x1="229.03" y1="414.54" x2="52.03" y2="362.3" xlink:href="#linear-gradient"/></defs><title>pionexlogo-freelogovectors.net</title><path class="cls-1" d="M238.72,331.52H192.09V433.2h28.85V406.62h17.78c27.84,0,45.33-14.38,45.33-37.48S266.56,331.52,238.72,331.52ZM237,384h-16V354.18h16c11.95,0,17.93,5.52,17.93,15S248.92,384,237,384Z" transform="translate(-15 -293)"/><path class="cls-1" d="M311.36,345.76c10.2,0,16.9-6.39,16.9-15.11,0-8.28-6.7-14.23-16.9-14.23s-16.91,6.39-16.91,14.67S301.16,345.76,311.36,345.76ZM297.51,433.2H325.2V354.47H297.51Z" transform="translate(-15 -293)"/><path class="cls-1" d="M382.84,434.51c26.09,0,44.59-17,44.59-40.82s-18.5-40.52-44.59-40.52c-25.8,0-44.6,16.84-44.6,40.52S357,434.51,382.84,434.51Zm0-21.94c-9.33,0-16.61-6.82-16.61-18.88s7.28-18.59,16.61-18.59,16.61,6.68,16.61,18.59S392.31,412.57,382.84,412.57Z" transform="translate(-15 -293)"/><path class="cls-1" d="M491.71,353.17c-9.91,0-18.8,3.34-25.07,9.87v-8.57H440.26V433.2H468V395.14c0-13.07,6.85-18.59,15.74-18.59,8,0,13,4.79,13,16.12V433.2h27.69v-45C524.35,363.77,510.21,353.17,491.71,353.17Z" transform="translate(-15 -293)"/><path class="cls-1" d="M623.61,394c0-26-18.94-40.81-42.26-40.81-24.92,0-43.43,16.84-43.43,40.52s18.22,40.82,46.34,40.82c15,0,26.09-4.36,33.67-12.79l-14.58-15.1c-5.39,4.65-10.49,6.82-18.21,6.82-10.2,0-17-4.64-19.39-12.63h57.42C623.32,398.63,623.61,396,623.61,394Zm-42.12-21.21c8.6,0,14.72,5.23,16.18,13.51H565.32C566.92,378,572.9,372.77,581.49,372.77Z" transform="translate(-15 -293)"/><path class="cls-1" d="M716,433.2l-30.17-40.38L715,354.47H685.69l-14.58,19.9-14-19.9H625.94l29.14,39.37-30,39.36h30l15.16-20.63,14.14,20.63Z" transform="translate(-15 -293)"/><path class="cls-2" d="M67.42,373.41a28.79,28.79,0,0,1,25.32-15.08h72.59A36.33,36.33,0,0,1,129,394.65H55.91Z" transform="translate(-15 -293)"/><path class="cls-3" d="M67.42,343.25a28.79,28.79,0,0,0,25.32,15.08h72.59A36.33,36.33,0,0,0,129,322H55.91Z" transform="translate(-15 -293)"/><path class="cls-4" d="M64.8,378.12a37.81,37.81,0,0,1,33.25-19.8H124.7L92.83,417.17a30.6,30.6,0,0,1-26.9,16H35Z" transform="translate(-15 -293)"/><g class="cls-5"><path class="cls-6" d="M94.55,413.91c-12-17-31.55-19.1-38.77-19.2H105Z" transform="translate(-15 -293)"/></g><path class="cls-7" d="M92.7,358.34a28.81,28.81,0,0,0-25.35,15.1L55.91,394.65H105l19.67-36.31Z" transform="translate(-15 -293)"/><rect class="cls-8" width="719" height="165"/></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
platform :ios, '12.0'
platform :ios, '13.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

View File

@@ -4,6 +4,9 @@ PODS:
- connectivity_plus (0.0.1):
- Flutter
- FlutterMacOS
- cupertino_http (0.0.1):
- Flutter
- FlutterMacOS
- device_info_plus (0.0.1):
- Flutter
- DKImagePickerController/Core (4.3.9):
@@ -71,6 +74,8 @@ PODS:
- move_to_background (0.0.1):
- Flutter
- MTBBarcodeScanner (5.0.11)
- objective_c (0.0.1):
- Flutter
- OrderedSet (6.0.3)
- package_info_plus (0.4.5):
- Flutter
@@ -82,9 +87,9 @@ PODS:
- qr_code_scanner (0.2.0):
- Flutter
- MTBBarcodeScanner
- SDWebImage (5.20.0):
- SDWebImage/Core (= 5.20.0)
- SDWebImage/Core (5.20.0)
- SDWebImage (5.21.0):
- SDWebImage/Core (= 5.21.0)
- SDWebImage/Core (5.21.0)
- Sentry/HybridSDK (8.36.0)
- sentry_flutter (8.9.0):
- Flutter
@@ -126,6 +131,7 @@ PODS:
DEPENDENCIES:
- app_links (from `.symlinks/plugins/app_links/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`)
- cupertino_http (from `.symlinks/plugins/cupertino_http/darwin`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- file_saver (from `.symlinks/plugins/file_saver/ios`)
@@ -140,6 +146,7 @@ DEPENDENCIES:
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`)
- move_to_background (from `.symlinks/plugins/move_to_background/ios`)
- objective_c (from `.symlinks/plugins/objective_c/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- privacy_screen (from `.symlinks/plugins/privacy_screen/ios`)
@@ -169,6 +176,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/app_links/ios"
connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/darwin"
cupertino_http:
:path: ".symlinks/plugins/cupertino_http/darwin"
device_info_plus:
:path: ".symlinks/plugins/device_info_plus/ios"
file_picker:
@@ -197,6 +206,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/local_auth_darwin/darwin"
move_to_background:
:path: ".symlinks/plugins/move_to_background/ios"
objective_c:
:path: ".symlinks/plugins/objective_c/ios"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
path_provider_foundation:
@@ -223,6 +234,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
app_links: e7a6750a915a9e161c58d91bc610e8cd1d4d0ad0
connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
cupertino_http: 947a233f40cfea55167a49f2facc18434ea117ba
device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
@@ -240,12 +252,13 @@ SPEC CHECKSUMS:
local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3
move_to_background: 39a5b79b26d577b0372cbe8a8c55e7aa9fcd3a2d
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
objective_c: 77e887b5ba1827970907e10e832eec1683f3431d
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
privacy_screen: 1a131c052ceb3c3659934b003b0d397c2381a24e
qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e
SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8
SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868
Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57
sentry_flutter: 0eb93e5279eb41e2392212afe1ccd2fecb4f8cbe
share_plus: 8875f4f2500512ea181eef553c3e27dba5135aad
@@ -258,6 +271,6 @@ SPEC CHECKSUMS:
Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
PODFILE CHECKSUM: b4e3a7eabb03395b66e81fc061789f61526ee6bb
PODFILE CHECKSUM: 78f002751f1a8f65042b8da97902ba4124271c5a
COCOAPODS: 1.16.2

View File

@@ -366,6 +366,7 @@
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Ente Auth";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -440,6 +441,7 @@
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Ente Auth";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -608,6 +610,7 @@
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Ente Auth";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -682,6 +685,7 @@
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Ente Auth";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -850,6 +854,7 @@
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Ente Auth";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",

View File

@@ -54,10 +54,26 @@
"viewLogsAction": "Паглядзець журнал",
"preparingLogsTitle": "Падрыхтоўка журнала...",
"emailLogsTitle": "Адправіць журнал па электроннай пошце",
"exportLogsAction": "Экспартаваць журнал",
"reportABug": "Паведаміць пра памылку",
"reportBug": "Паведаміць пра памылку",
"contactSupport": "Звярнуцца ў службу падтрымкі",
"blog": "Блог",
"verifyPassword": "Праверыць пароль",
"pleaseWait": "Пачакайце...",
"generatingEncryptionKeysTitle": "Генерацыя ключоў шыфравання...",
"recreatePassword": "Стварыць пароль паўторна",
"useRecoveryKey": "Выкарыстоўваць ключ аднаўлення",
"incorrectPasswordTitle": "Няправільны пароль",
"welcomeBack": "З вяртаннем!",
"changePassword": "Змяніць пароль",
"data": "Даныя",
"importCodes": "Імпартаваць коды",
"passwordEmptyError": "Пароль не можа быць пустым",
"importFromApp": "Імпартаваць коды з {appName}",
"exportCodes": "Экспартаваць коды",
"importLabel": "Імпарт",
"selectFile": "Выбраць файл",
"yes": "Так",
"no": "Не",
"email": "Электронная пошта",

View File

@@ -499,11 +499,16 @@
"appLockOfflineModeWarning": "Избрахте да продължите без резервни копия. Ако забравите паролата на приложението си, ще бъдете заключени от достъп до вашите данни.",
"duplicateCodes": "Повтарящи се кодове",
"noDuplicates": "✨ Няма дубликати",
"youveNoDuplicateCodesThatCanBeCleared": "Нямате повтарящи се кодове, които могат да бъдат изчистени",
"deduplicateCodes": "Премахване на повтарящи се кодове",
"deselectAll": "Демаркиране на всички",
"selectAll": "Избиране на всички",
"deleteDuplicates": "Изтриване на дубликатите",
"plainHTML": "Обикновен HTML",
"tellUsWhatYouThink": "Кажете ни какво мислите",
"supportEnte": "Подкрепете <bold-green>ente</bold-green>",
"giveUsAStarOnGithub": "Дайте ни звезда в GitHub",
"free5GB": "5GB безплатни в <bold-green>ente</bold-green> Photos",
"freeStorageOffer": "10% отстъпка в <bold-green>ente</bold-green> Photos",
"freeStorageOfferDescription": "Използвайте промокод „AUTH“, за да получите 10% отстъпка през първата година"
}

View File

@@ -505,7 +505,6 @@
"deleteDuplicates": "Elimina duplicats",
"plainHTML": "HTML pla",
"tellUsWhatYouThink": "Digueu-nos què us sembla",
"dropReview": "Deixa una ressenya a l'App/Play Store",
"supportEnte": "Donar suport a <bold-green>ente</bold-green>",
"giveUsAStarOnGithub": "Dona'ns una estrella a Github",
"free5GB": "5 GB gratuïts a <bold-green>ente</bold-green> Photos",

View File

@@ -147,6 +147,7 @@
"leaveFamily": "Familie verlassen",
"leaveFamilyMessage": "Sind Sie sicher, dass Sie den Familien-Plan verlassen wollen?",
"inFamilyPlanMessage": "Sie haben einen Familien-Plan!",
"hintForMobile": "Lange drücken, um den Code zu bearbeiten oder zu entfernen.",
"hintForDesktop": "Klicken Sie mit der rechten Maustaste auf einen Code zum Bearbeiten oder Entfernen.",
"scan": "Scannen",
"scanACode": "Scan einen Code",
@@ -456,6 +457,8 @@
"customEndpoint": "Mit {endpoint} verbunden",
"pinText": "Anpinnen",
"unpinText": "Lösen",
"pinnedCodeMessage": "{code} wurde angepinnt",
"unpinnedCodeMessage": "{code} wird nicht weiter angepinnt",
"pinned": "Angeheftet",
"tags": "Tags",
"createNewTag": "Neuen Tag erstellen",
@@ -495,12 +498,17 @@
"authToViewPasskey": "Bitte authentifizieren, um deinen Passkey zu sehen",
"duplicateCodes": "Doppelte Codes",
"noDuplicates": "✨ Keine Duplikate",
"youveNoDuplicateCodesThatCanBeCleared": "Du hast keine doppelten Codes, die bereinigt werden können",
"deselectAll": "Alle abwählen",
"selectAll": "Alles auswählen",
"deleteDuplicates": "Duplikate löschen",
"plainHTML": "Reines HTML",
"tellUsWhatYouThink": "Sagen Sie uns, was Sie denken",
"dropReview": "Eine Bewertung im App/Play Store ablegen",
"dropReviewAndroid": "Hinterlasse eine Rezension im Google Play Store",
"supportEnte": "Support <bold-green>ente</bold-green>",
"giveUsAStarOnGithub": "Gib uns einen Stern auf Github",
"loginWithAuthAccount": "Mit Ihrem Auth Account anmelden"
"free5GB": "5GB kostenlos auf <bold-green>ente</bold-green> Photos",
"loginWithAuthAccount": "Mit Ihrem Auth Account anmelden",
"freeStorageOffer": "10% Rabatt für <bold-green>ente</bold-green> Photos",
"freeStorageOfferDescription": "Verwende den Code \"AUTH\", um 10% im 1. Jahr zu sparen"
}

View File

@@ -506,7 +506,8 @@
"deleteDuplicates": "Delete duplicates",
"plainHTML": "Plain HTML",
"tellUsWhatYouThink": "Tell us what you think",
"dropReview": "Drop a review on the App/Play Store",
"dropReviewiOS": "Drop a review on the App Store",
"dropReviewAndroid": "Drop a review on the Play Store",
"supportEnte": "Support <bold-green>ente</bold-green>",
"giveUsAStarOnGithub": "Give us a star on Github",
"free5GB": "5GB free on <bold-green>ente</bold-green> Photos",

View File

@@ -506,7 +506,6 @@
"deleteDuplicates": "Eliminar duplicados",
"plainHTML": "HTML plano",
"tellUsWhatYouThink": "Cuéntanos cuál es su opinión",
"dropReview": "Danos una reseña en la App/Play Store",
"supportEnte": "Apoya a <bold-green>ente</bold-green>",
"giveUsAStarOnGithub": "Danos una estrella en GitHub",
"free5GB": "5 GB gratis en <bold-green>ente</bold-green> Fotos",

View File

@@ -505,7 +505,6 @@
"deleteDuplicates": "Supprimer les doublons",
"plainHTML": "HTML Pur",
"tellUsWhatYouThink": "Dites-nous ce que vous pensez",
"dropReview": "Déposez un avis sur l'App/Play Store",
"supportEnte": "Soutenir <bold-green>Ente</bold-green>",
"giveUsAStarOnGithub": "Donnez-nous une étoile sur Github",
"free5GB": "5 Go gratuits sur <bold-green>Ente</bold-green> Photos",

View File

@@ -505,7 +505,6 @@
"deleteDuplicates": "Ismétlődések törlése",
"plainHTML": "Sima HTML kód",
"tellUsWhatYouThink": "Mondja el mit gondol",
"dropReview": "Írjon véleményt az App/Play Store-ban",
"supportEnte": "Támogassa <bold-green>ente <bold-green>",
"giveUsAStarOnGithub": "Adj nekünk egy csillagot a Githubon",
"free5GB": "5GB ingyen <bold-green>ente <bold-green> Photos",

View File

@@ -504,5 +504,14 @@
"deselectAll": "Deselezionare tutti",
"selectAll": "Seleziona tutti",
"deleteDuplicates": "Elimina i duplicati",
"plainHTML": "HTML semplice"
"plainHTML": "HTML semplice",
"tellUsWhatYouThink": "Dicci cosa ne pensi",
"dropReviewiOS": "Lascia una recensione sull'App Store",
"dropReviewAndroid": "Lascia una recensione sul Play Store",
"supportEnte": "Supporta <bold-green>ente</bold-green>",
"giveUsAStarOnGithub": "Dacci una stella su Github",
"free5GB": "5GB gratis su <bold-green>ente</bold-green> Foto",
"loginWithAuthAccount": "Accedi con il tuo account Auth",
"freeStorageOffer": "10% di sconto su <bold-green>ente</bold-green> Foto",
"freeStorageOfferDescription": "Utilizzare il codice \"AUTH\" per ottenere il 10% di sconto al primo anno"
}

View File

@@ -506,7 +506,6 @@
"deleteDuplicates": "重複を削除",
"plainHTML": "Plain HTML",
"tellUsWhatYouThink": "ご意見をお聞かせください",
"dropReview": "App/Playストアにレビューを投稿する",
"supportEnte": "<bold-green>ente</bold-green>をサポートする",
"giveUsAStarOnGithub": "Githubで星をつける",
"free5GB": "<bold-green>ente</bold-green>フォトで5GB無料",

View File

@@ -0,0 +1,69 @@
{
"account": "Konts",
"unlock": "Atbloķēt",
"codeSecretKeyHint": "Slepenā atslēga",
"notes": "Piezīmes",
"codeAccountHint": "Konts (jūs@domēns.lv)",
"codeTagHint": "Birka",
"saveAction": "Saglabāt",
"selectFile": "Atlasīt failu",
"ok": "Labi",
"cancel": "Atcelt",
"yes": "Jā",
"no": "Nē",
"email": "E-pasts",
"support": "Atbalsts",
"settings": "Iestatījumi",
"delete": "Dzēst",
"enterYourPasswordHint": "Ievadiet savu paroli",
"enterEmailHint": "Ievadiet savu e-pasta adresi",
"invalidEmailTitle": "Nederīga e-pasta adrese",
"invalidEmailMessage": "Lūdzu ievadiet derīgu e-pasta adresi.",
"deleteAccount": "Dzēst kontu",
"noDeleteAccountAction": "Nē, dzēst kontu",
"createNewAccount": "Izveidot jaunu kontu",
"weakStrength": "Vāja",
"strongStrength": "Spēcīga",
"moderateStrength": "Vidēji spēcīga",
"confirmPassword": "Apstiprināt paroli",
"close": "Aizvērt",
"selectLanguage": "Atlasīt valodu",
"language": "Valoda",
"security": "Drošība",
"search": "Meklēt",
"restore": "Atjaunot",
"error": "Kļūda",
"saveKey": "Saglabāt atslēgu",
"save": "Saglabāt",
"createAccount": "Izveidot kontu",
"password": "Parole",
"encryption": "Šifrēšana",
"howItWorks": "Kā tas darbojas",
"exit": "Iziet",
"invalidKey": "Nederīga atslēga",
"downloadUpdate": "Lejupielādēt",
"updateAvailable": "Pieejams atjauninājums",
"update": "Atjaunināt",
"warning": "Brīdinājums",
"thisDevice": "Šī ierīce",
"thisEmailIsAlreadyInUse": "Šis e-pasts jau tiek izmantots",
"emailChangedTo": "E-pasts nomainīts uz {newEmail}",
"enterPassword": "Ievadiet paroli",
"encrypted": "Šifrēts",
"confirmAccountDeleteTitle": "Apstiprināt konta dzēšanu",
"androidCancelButton": "Atcelt",
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"noInternetConnection": "Nav interneta savienojums",
"developerSettings": "Izstrādātāja iestatījumi",
"pinText": "Piespraust",
"unpinText": "Atspraust",
"tags": "Birkas",
"createNewTag": "Izveidot jaunu birku",
"tag": "Birka",
"create": "Izveidot",
"editTag": "Rediģēt birku",
"deleteTagTitle": "Dzēst birku?",
"hideContent": "Slēpt saturu"
}

View File

@@ -499,13 +499,13 @@
"appLockOfflineModeWarning": "Je hebt ervoor gekozen om verder te gaan zonder backups. Als je jouw applock vergeet, wordt je uitgesloten van toegang tot je gegevens.",
"duplicateCodes": "Dubbele codes",
"noDuplicates": "✨ Geen dubbele",
"youveNoDuplicateCodesThatCanBeCleared": "Je hebt geen dubbele codes die kunnen worden gewist",
"deduplicateCodes": "Dubbele codes",
"deselectAll": "Alles deselecteren",
"selectAll": "Alles selecteren",
"deleteDuplicates": "Dubbelen verwijderen",
"plainHTML": "Alleen HTML",
"tellUsWhatYouThink": "Vertel ons wat je vindt",
"dropReview": "Laat een beoordeling achter in de App/Play Store",
"supportEnte": "Steun <bold-green>ente</bold-green>",
"giveUsAStarOnGithub": "Geef ons een ster op Github",
"free5GB": "5GB gratis op <bold-green>ente</bold-green> Photos",

View File

@@ -506,7 +506,8 @@
"deleteDuplicates": "Usuń duplikaty",
"plainHTML": "Zwykły HTML",
"tellUsWhatYouThink": "Wyraź swoją opinię",
"dropReview": "Napisz recenzję w App Store/Play Store",
"dropReviewiOS": "Napisz recenzję w App Store",
"dropReviewAndroid": "Napisz recenzję w Play Store",
"supportEnte": "Wesprzyj <bold-green>ente</bold-green>",
"giveUsAStarOnGithub": "Daj nam gwiazdkę na Githubie",
"free5GB": "5 GB za darmo na zdjęcia <bold-green>ente</bold-green>",

View File

@@ -506,7 +506,8 @@
"deleteDuplicates": "Excluir duplicados",
"plainHTML": "HTML simples",
"tellUsWhatYouThink": "Diga-nos o que pensa",
"dropReview": "Deixe uma avaliação na App/Play Store",
"dropReviewiOS": "Deixe uma avaliação na App Store",
"dropReviewAndroid": "Deixe uma avaliação na Play Store",
"supportEnte": "Apoie o <bold-green>ente.io</bold-green>",
"giveUsAStarOnGithub": "Dê-nos uma estrela no Github",
"free5GB": "5GB grátis no <bold-green>ente</bold-green> Photos",

View File

@@ -493,5 +493,10 @@
"duplicateCodes": "Дублировать коды",
"noDuplicates": "✨ Дубликатов нет",
"selectAll": "Выбрать все",
"plainHTML": "Обычный HTML"
"plainHTML": "Обычный HTML",
"tellUsWhatYouThink": "Расскажите нам, что вы думаете",
"free5GB": "5GB бесплатно на <bold-green>ente</bold-green> фото",
"loginWithAuthAccount": "Войти с помощью учетной записи Auth",
"freeStorageOffer": "Скидка 10% на <bold-green>ente</bold-green> фото",
"freeStorageOfferDescription": "Используйте код \"AUTH\", чтобы получить скидку 10% в первый год"
}

View File

@@ -506,7 +506,6 @@
"deleteDuplicates": "Izbriši dvojnike",
"plainHTML": "Navadni HTML",
"tellUsWhatYouThink": "Povejte nam kaj mislite",
"dropReview": "Napišite oceno v trgovini App/Play Store",
"supportEnte": "Podpiraj <bold-green>ente</bold-green>",
"giveUsAStarOnGithub": "Dajte nam zvezdico na Githubu",
"free5GB": "5 GB zastonj na <bold-green>ente</bold-green> fotografije",

View File

@@ -274,6 +274,7 @@
"tryAgain": "Försök igen",
"viewRecoveryKey": "Visa återställningsnyckel",
"confirmRecoveryKey": "Bekräfta återställningsnyckel",
"recoveryKeyVerifyReason": "Din återställningsnyckel är det enda sättet att återställa dina foton om du glömmer ditt lösenord. Du hittar din återställningsnyckel i Inställningar > Säkerhet.\n\nAnge din återställningsnyckel här för att verifiera att du har sparat den ordentligt.",
"confirmYourRecoveryKey": "Bekräfta din återställningsnyckel",
"confirm": "Bekräfta",
"emailYourLogs": "Maila dina loggar",
@@ -358,6 +359,7 @@
"theRecoveryKeyYouEnteredIsIncorrect": "Återställningsnyckeln du angav är felaktig",
"enterPassword": "Ange lösenord",
"selectExportFormat": "Välj exportformat",
"exportDialogDesc": "Krypterad export skyddas av ett lösenord som du väljer.",
"encrypted": "Krypterad",
"plainText": "Enkel text",
"passwordToEncryptExport": "Lösenord för att kryptera export",
@@ -365,6 +367,7 @@
"useOffline": "Använd utan säkerhetskopior",
"signInToBackup": "Logga in för att säkerhetskopiera dina koder",
"singIn": "Logga in",
"sigInBackupReminder": "Vänligen exportera dina koder för att säkerställa att du har en säkerhetskopia som du kan återställa från.",
"showLargeIcons": "Visa stora ikoner",
"compactMode": "Kompakt läge",
"shouldHideCode": "Dölj koder",

View File

@@ -499,9 +499,17 @@
"appLockOfflineModeWarning": "Bạn đã chọn tiếp tục mà không có bản sao lưu. Nếu bạn quên khóa ứng dụng, bạn sẽ bị khóa khỏi việc truy cập dữ liệu của mình.",
"duplicateCodes": "Mã trùng lặp",
"noDuplicates": "✨ Không có trùng lặp",
"youveNoDuplicateCodesThatCanBeCleared": "Bạn không có mã nào bị trùng để xóa",
"deduplicateCodes": "Loại bỏ mã trùng lặp",
"deselectAll": "Bỏ chọn tất cả",
"selectAll": "Chọn tất cả",
"deleteDuplicates": "Xóa trùng lặp",
"plainHTML": "HTML thuần"
"plainHTML": "HTML thuần",
"tellUsWhatYouThink": "Hãy cho chúng tôi biết bạn nghĩ gì",
"supportEnte": "Hỗ trợ <bold-green>ente</bold-green>",
"giveUsAStarOnGithub": "Cho chúng tôi ngôi sao trên Github",
"free5GB": "Miễn phí 5GB cho <bold-green>ente</bold-green> Hình ảnh",
"loginWithAuthAccount": "Đăng nhập bằng tài khoản Ente Auth",
"freeStorageOffer": "Giảm giá 10% cho <bold-green>ente</bold-green> Hình ảnh",
"freeStorageOfferDescription": "Sử dụng mã giảm giá \"AUTH\" để được giảm 10% trong năm đầu tiên"
}

View File

@@ -0,0 +1,517 @@
{
"account": "账户",
"unlock": "解锁",
"recoveryKey": "恢复密钥",
"counterAppBarTitle": "计数器",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "妥善保管您的两步验证码",
"onBoardingGetStarted": "开始",
"setupFirstAccount": "设置您的第一个账户",
"importScanQrCode": "扫描二维码",
"qrCode": "二维码",
"importEnterSetupKey": "输入设置密钥",
"importAccountPageTitle": "输入账户详细信息",
"secretCanNotBeEmpty": "密码不能为空",
"bothIssuerAndAccountCanNotBeEmpty": "发行人和账户均不能为空",
"incorrectDetails": "详细信息不正确",
"pleaseVerifyDetails": "请验证详细信息并重试",
"codeIssuerHint": "发行人",
"codeSecretKeyHint": "密钥",
"secret": "密钥",
"all": "全部",
"notes": "备注",
"notesLengthLimit": "备注最多可以包含 {count} 个字符",
"@notesLengthLimit": {
"description": "Text to indicate the maximum number of characters allowed for notes",
"placeholders": {
"count": {
"description": "The maximum number of characters allowed for notes",
"type": "int",
"example": "100"
}
}
},
"codeAccountHint": "账户 (you@domain.com)",
"codeTagHint": "标签",
"accountKeyType": "密钥类型",
"sessionExpired": "会话已过期",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "请重新登录",
"loggingOut": "正在登出...",
"timeBasedKeyType": "基于时间 (TOTP)",
"counterBasedKeyType": "基于计数器 (HOTP)",
"saveAction": "保存",
"nextTotpTitle": "下一个",
"deleteCodeTitle": "要删除代码吗?",
"deleteCodeMessage": "您确定要删除此代码吗?此操作不可逆。",
"trashCode": "要删除代码吗?",
"trashCodeMessage": "您确定要删除 {account} 的代码吗?",
"trash": "删除",
"viewLogsAction": "查看日志",
"sendLogsDescription": "这将发送日志以帮助我们调试您的问题。虽然我们采取预防措施确保不记录敏感信息,但我们建议您在共享这些日志之前先查看它们。",
"preparingLogsTitle": "正在准备日志...",
"emailLogsTitle": "电子邮件日志",
"emailLogsMessage": "请将日志发送至 {email}",
"@emailLogsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"copyEmailAction": "复制电子邮件",
"exportLogsAction": "导出日志",
"reportABug": "报告错误",
"crashAndErrorReporting": "崩溃和错误报告",
"reportBug": "报告错误",
"emailUsMessage": "请给我们发送电子邮件至 {email}",
"@emailUsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"contactSupport": "联系支持",
"rateUsOnStore": "在 {storeName} 上给我们评分",
"blog": "博客",
"merchandise": "商品",
"verifyPassword": "验证密码",
"pleaseWait": "请稍候...",
"generatingEncryptionKeysTitle": "正在生成加密密钥...",
"recreatePassword": "重新创建密码",
"recreatePasswordMessage": "当前设备的功能不足以验证您的密码,因此我们需要以一种适用于所有设备的方式重新生成一次密码。\n\n请使用您的恢复密钥登录并重新生成您的密码如果您愿意可以再次使用相同的密码。",
"useRecoveryKey": "使用恢复密钥",
"incorrectPasswordTitle": "密码错误",
"welcomeBack": "欢迎回来!",
"emailAlreadyRegistered": "电子邮件地址已被注册。",
"emailNotRegistered": "电子邮件地址未注册。",
"madeWithLoveAtPrefix": "用❤️制作 ",
"supportDevs": "订阅 <bold-green>ente</bold-green> 以支持我们",
"supportDiscount": "使用优惠码“AUTH”可享受首年 10% 折扣",
"changeEmail": "修改邮箱",
"changePassword": "修改密码",
"data": "数据",
"importCodes": "导入代码",
"importTypePlainText": "纯文本",
"importTypeEnteEncrypted": "Ente 加密导出",
"passwordForDecryptingExport": "用来解密导出的密码",
"passwordEmptyError": "密码不能为空",
"importFromApp": "从 {appName} 导入代码",
"importGoogleAuthGuide": "使用“转移账户”选项将您的账户从 Google Authenticator 导出到二维码。然后使用另一台设备扫描二维码。\n\n提示您可以使用笔记本电脑的摄像头拍摄二维码的照片。",
"importSelectJsonFile": "选择 JSON 文件",
"importSelectAppExport": "选择 {appName} 的导出文件",
"importEnteEncGuide": "选择从 Ente 导出的 JSON 加密文件",
"importRaivoGuide": "使用 Raivo 设置中的“将 OTP 导出到 Zip 存档”选项。\n\n解压 zip 文件并导入 JSON 文件。",
"importBitwardenGuide": "使用 Bitwarden 工具中的“导出密码库”选项并导入未加密的 JSON 文件。",
"importAegisGuide": "使用 Aegis 设置中的“导出密码库”选项。\n\n如果您的密码库已加密则需要输入密码库密码才能解密密码库。",
"import2FasGuide": "使用 2FAS 中的“设置 -> 备份 -> 导出”选项。\n\n如果您的备份已加密则需要输入密码来解密备份",
"importLastpassGuide": "使用 Lastpass Authenticator 设置中的“转移账户”选项,然后按“将账户导出到文件”。导入下载的 JSON。",
"exportCodes": "导出代码",
"importLabel": "导入",
"importInstruction": "请选择一个包含以下格式的代码列表的文件",
"importCodeDelimiterInfo": "代码可以用逗号或换行符分隔",
"selectFile": "选择文件",
"emailVerificationToggle": "电子邮件验证",
"emailVerificationEnableWarning": "为避免被锁在您的账户之外,请在启用电子邮件验证之前确保在 Ente Auth 之外存储电子邮件两步验证的副本。",
"authToChangeEmailVerificationSetting": "请进行身份验证以更改电子邮件验证",
"authenticateGeneric": "请验证",
"authToViewYourRecoveryKey": "请验证以查看您的恢复密钥",
"authToChangeYourEmail": "请验证以更改您的电子邮件",
"authToChangeYourPassword": "请验证以更改密码",
"authToViewSecrets": "请进行身份验证以查看您的密钥",
"authToInitiateSignIn": "请进行身份验证以启动登录进行备份。",
"ok": "确定",
"cancel": "取消",
"yes": "是",
"no": "否",
"email": "电子邮件地址",
"support": "支持",
"general": "通用",
"settings": "设置",
"copied": "已复制",
"pleaseTryAgain": "请重试",
"existingUser": "已注册用户",
"newUser": "初来 Ente",
"delete": "删除",
"enterYourPasswordHint": "输入您的密码",
"forgotPassword": "忘记密码",
"oops": "哎呀",
"suggestFeatures": "建议新功能",
"faq": "常见问题",
"somethingWentWrongMessage": "出了点问题,请重试",
"leaveFamily": "离开家庭",
"leaveFamilyMessage": "您确定要离开家庭计划吗?",
"inFamilyPlanMessage": "你在一个家庭计划中!",
"hintForMobile": "长按代码即可编辑或删除。",
"hintForDesktop": "右键单击代码即可编辑或删除。",
"scan": "扫描",
"scanACode": "扫描代码",
"verify": "验证",
"verifyEmail": "验证电子邮件",
"enterCodeHint": "从你的身份验证器应用中\n输入6位数字代码",
"lostDeviceTitle": "丢失了设备吗?",
"twoFactorAuthTitle": "两步验证",
"passkeyAuthTitle": "通行密钥验证",
"verifyPasskey": "验证通行密钥",
"loginWithTOTP": "使用 TOTP 登录",
"recoverAccount": "恢复账户",
"enterRecoveryKeyHint": "输入您的恢复密钥",
"recover": "恢复",
"contactSupportViaEmailMessage": "请从您注册的电子邮件地址拖放一封邮件到 {email}",
"@contactSupportViaEmailMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"invalidQRCode": "二维码无效",
"noRecoveryKeyTitle": "没有恢复密钥吗?",
"enterEmailHint": "请输入您的电子邮件地址",
"invalidEmailTitle": "无效的电子邮件地址",
"invalidEmailMessage": "请输入一个有效的电子邮件地址。",
"deleteAccount": "删除账户",
"deleteAccountQuery": "我们很抱歉看到您离开。您面临一些问题?",
"yesSendFeedbackAction": "是,发送反馈",
"noDeleteAccountAction": "否,删除账户",
"initiateAccountDeleteTitle": "请进行身份验证以启动账户删除",
"sendEmail": "发送电子邮件",
"createNewAccount": "创建新账号",
"weakStrength": "弱",
"strongStrength": "强",
"moderateStrength": "中",
"confirmPassword": "请确认密码",
"close": "关闭",
"oopsSomethingWentWrong": "哎呀,出了点问题。",
"selectLanguage": "选择语言",
"language": "语言",
"social": "社交媒体",
"security": "安全",
"lockscreen": "锁屏",
"authToChangeLockscreenSetting": "请验证以更改锁屏设置",
"deviceLockEnablePreSteps": "要启用设备锁,请在系统设置中设置设备密码或屏幕锁。",
"viewActiveSessions": "查看活动会话",
"authToViewYourActiveSessions": "请验证以查看您的活动会话",
"searchHint": "搜索...",
"search": "搜索",
"sorryUnableToGenCode": "对不起,无法为 {issuerName} 生成代码",
"noResult": "无结果",
"addCode": "添加代码",
"scanAQrCode": "扫描二维码",
"enterDetailsManually": "手动输入详细信息",
"edit": "编辑",
"share": "分享",
"shareCodes": "分享代码",
"shareCodesDuration": "选择您要分享代码的期限。",
"restore": "恢复",
"copiedToClipboard": "已复制到剪贴板",
"copiedNextToClipboard": "已将下一个代码复制到剪贴板",
"error": "错误",
"recoveryKeyCopiedToClipboard": "恢复密钥已复制到剪贴板",
"recoveryKeyOnForgotPassword": "如果您忘记了密码,恢复数据的唯一方法就是使用此密钥。",
"recoveryKeySaveDescription": "我们不会存储此密钥请将此24个单词密钥保存在一个安全的地方。",
"doThisLater": "稍后再做",
"saveKey": "保存密钥",
"save": "保存",
"send": "发送",
"saveOrSendDescription": "您想将其保存到您的内置存储(默认情况下为“下载”文件夹)还是将其发送到其他应用程序?",
"saveOnlyDescription": "您想将其保存到您的内置存储中(默认情况下为“下载”文件夹)吗?",
"back": "返回",
"createAccount": "创建账户",
"passwordStrength": "密码强度: {passwordStrengthValue}",
"@passwordStrength": {
"description": "Text to indicate the password strength",
"placeholders": {
"passwordStrengthValue": {
"description": "The strength of the password as a string",
"type": "String",
"example": "Weak or Moderate or Strong"
}
},
"message": "Password Strength: {passwordStrengthText}"
},
"password": "密码",
"signUpTerms": "我同意 <u-terms>服务条款</u-terms> 和 <u-policy>隐私政策</u-policy>",
"privacyPolicyTitle": "隐私政策",
"termsOfServicesTitle": "服务条款",
"encryption": "加密",
"setPasswordTitle": "设置密码",
"changePasswordTitle": "修改密码",
"resetPasswordTitle": "重置密码",
"encryptionKeys": "加密密钥",
"passwordWarning": "我们不储存这个密码,所以如果忘记, <underline>我们不能解密您的数据</underline>",
"enterPasswordToEncrypt": "输入我们可以用来加密您的数据的密码",
"enterNewPasswordToEncrypt": "输入我们可以用来加密您的数据的新密码",
"passwordChangedSuccessfully": "密码修改成功",
"generatingEncryptionKeys": "正在生成加密密钥...",
"continueLabel": "继续",
"insecureDevice": "设备不安全",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "抱歉,我们无法在此设备上生成安全密钥。\n\n请使用其他设备注册。",
"howItWorks": "工作原理",
"ackPasswordLostWarning": "我明白,如果我丢失密码,我可能会丢失我的数据,因为我的数据是 <underline>端到端加密的</underline>。",
"loginTerms": "点击登录后,我同意 <u-terms>服务条款</u-terms> 和 <u-policy>隐私政策</u-policy>",
"logInLabel": "登录",
"logout": "登出",
"areYouSureYouWantToLogout": "您确定要登出吗?",
"yesLogout": "是的,登出",
"exit": "退出",
"theme": "主题",
"lightTheme": "浅色",
"darkTheme": "深色",
"systemTheme": "系统",
"verifyingRecoveryKey": "正在验证恢复密钥...",
"recoveryKeyVerified": "恢复密钥已验证",
"recoveryKeySuccessBody": "太棒了! 您的恢复密钥是有效的。 感谢您的验证。\n\n请记住要安全备份您的恢复密钥。",
"invalidRecoveryKey": "您输入的恢复密钥无效。请确保它包含24个单词并检查每个单词的拼写。\n\n如果您输入了旧的恢复码请确保它长度为64个字符并检查其中每个字符。",
"recreatePasswordTitle": "重新创建密码",
"recreatePasswordBody": "当前设备的功能不足以验证您的密码,但我们可以以适用于所有设备的方式重新生成。\n\n请使用您的恢复密钥登录并重新生成您的密码如果您愿意可以再次使用相同的密码。",
"invalidKey": "密钥无效",
"tryAgain": "请再试一次",
"viewRecoveryKey": "查看恢复密钥",
"confirmRecoveryKey": "确认恢复密钥",
"recoveryKeyVerifyReason": "如果您忘记了您的密码,您的恢复密钥是恢复您的照片的唯一途径。 您可以在“设置 > 账户”中找到您的恢复密钥。\n\n请在此输入您的恢复密钥以确认您已经正确地保存了它。",
"confirmYourRecoveryKey": "确认您的恢复密钥",
"confirm": "确认",
"emailYourLogs": "通过电子邮件发送您的日志",
"pleaseSendTheLogsTo": "请将日志发送至 \n{toEmail}",
"copyEmailAddress": "复制电子邮件地址",
"exportLogs": "导出日志",
"enterYourRecoveryKey": "输入您的恢复密钥",
"tempErrorContactSupportIfPersists": "看起来出了点问题。 请稍后重试。 如果错误仍然存在,请联系我们的支持团队。",
"networkHostLookUpErr": "无法连接到 Ente请检查您的网络设置如果错误仍然存请联系支持。",
"networkConnectionRefusedErr": "无法连接到 Ente请稍后重试。如果错误仍然存请联系支持人员。",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "看起来出了点问题。 请稍后重试。 如果错误仍然存在,请联系我们的支持团队。",
"about": "关于",
"weAreOpenSource": "我们是开源的!",
"privacy": "隐私",
"terms": "条款",
"checkForUpdates": "检查更新",
"checkStatus": "检查状态",
"downloadUpdate": "下载",
"criticalUpdateAvailable": "有重要更新可用",
"updateAvailable": "有可用的更新",
"update": "更新",
"checking": "正在检查...",
"youAreOnTheLatestVersion": "当前为最新版本",
"warning": "警告",
"exportWarningDesc": "导出的文件包含敏感信息。请安全存储。",
"iUnderStand": "了解",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "请验证以导出您的代码",
"importSuccessTitle": "耶!",
"importSuccessDesc": "您已导入了 {count} 个代码!",
"@importSuccessDesc": {
"placeholders": {
"count": {
"description": "The number of codes imported",
"type": "int",
"example": "1"
}
}
},
"sorry": "抱歉",
"importFailureDesc": "无法解析所选文件。\n如果您需要帮助请发邮件给 support@ente.io",
"pendingSyncs": "警告",
"pendingSyncsWarningBody": "您的一些代码尚未备份。\n\n请确保您在登出之前备份这些代码。",
"checkInboxAndSpamFolder": "请检查您的收件箱 (或者是在您的“垃圾邮件”列表内) 以完成验证",
"tapToEnterCode": "点击以输入代码",
"resendEmail": "重新发送电子邮件",
"weHaveSendEmailTo": "我们已经发送邮件到 <green>{email}</green>",
"@weHaveSendEmailTo": {
"description": "Text to indicate that we have sent a mail to the user",
"placeholders": {
"email": {
"description": "The email address of the user",
"type": "String",
"example": "example@ente.io"
}
}
},
"manualSort": "自定义",
"editOrder": "编辑顺序",
"mostFrequentlyUsed": "经常使用",
"mostRecentlyUsed": "最近使用",
"activeSessions": "已登录的设备",
"somethingWentWrongPleaseTryAgain": "出了点问题,请重试",
"thisWillLogYouOutOfThisDevice": "这将使您登出该设备!",
"thisWillLogYouOutOfTheFollowingDevice": "这将使您登出以下设备:",
"terminateSession": "是否终止会话?",
"terminate": "终止",
"thisDevice": "此设备",
"toResetVerifyEmail": "要重置您的密码,请先验证您的电子邮件。",
"thisEmailIsAlreadyInUse": "该电子邮件已被使用",
"verificationFailedPleaseTryAgain": "验证失败,请再试一次",
"yourVerificationCodeHasExpired": "您的验证码已过期",
"incorrectCode": "验证码错误",
"sorryTheCodeYouveEnteredIsIncorrect": "抱歉,您输入的验证码不正确",
"emailChangedTo": "电子邮件已更改为 {newEmail}",
"authenticationFailedPleaseTryAgain": "认证失败,请重试",
"authenticationSuccessful": "认证成功!",
"twofactorAuthenticationSuccessfullyReset": "两步验证已成功重置",
"incorrectRecoveryKey": "恢复密钥不正确",
"theRecoveryKeyYouEnteredIsIncorrect": "您输入的恢复密钥不正确",
"enterPassword": "输入密码",
"selectExportFormat": "选择导出格式",
"exportDialogDesc": "加密导出将由您选择的密码保护。",
"encrypted": "已加密",
"plainText": "纯文本",
"passwordToEncryptExport": "用来加密导出的密码",
"export": "导出",
"useOffline": "无需备份即可使用",
"signInToBackup": "登录以备份您的代码",
"singIn": "登录",
"sigInBackupReminder": "请导出您的代码以确保您有可以恢复的备份。",
"offlineModeWarning": "您已选择在不进行备份的情况下继续操作。请手动备份以确保您的代码安全。",
"showLargeIcons": "显示大图标",
"compactMode": "紧凑模式",
"shouldHideCode": "隐藏代码",
"doubleTapToViewHiddenCode": "您可以双击条目来查看代码",
"focusOnSearchBar": "应用启动后聚焦搜索",
"confirmUpdatingkey": "您确定要更新此密钥吗?",
"minimizeAppOnCopy": "复制时最小化应用",
"editCodeAuthMessage": "编辑代码需要身份验证",
"deleteCodeAuthMessage": "删除代码需要身份验证",
"showQRAuthMessage": "显示二维码需要身份验证",
"confirmAccountDeleteTitle": "确认删除账户",
"confirmAccountDeleteMessage": "如果您使用其他 Ente 应用程序,该账户将会与其他应用程序链接。\n\n在所有 Ente 应用程序中,您上传的数据将被安排用于删除,并且您的账户将被永久删除。",
"androidBiometricHint": "验证身份",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "未能识别,请重试。",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "成功",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "取消",
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"androidSignInTitle": "需要进行身份验证",
"@androidSignInTitle": {
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
},
"androidBiometricRequiredTitle": "需要进行生物识别认证",
"@androidBiometricRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsRequiredTitle": "需要设备凭据",
"@androidDeviceCredentialsRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsSetupDescription": "需要设备凭据",
"@androidDeviceCredentialsSetupDescription": {
"description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
},
"goToSettings": "前往设置",
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
},
"androidGoToSettingsDescription": "您的设备上未设置生物识别身份验证。转到“设置 > 安全”以添加生物识别身份验证。",
"@androidGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure biometric on their device. It shows in a dialog on Android side."
},
"iOSLockOut": "生物识别身份验证已禁用。请锁定并解锁屏幕以启用该功能。",
"@iOSLockOut": {
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
},
"iOSGoToSettingsDescription": "您的设备上未设置生物识别身份验证。请在您的手机上启用 触控 ID 或 面容 ID。",
"@iOSGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side."
},
"iOSOkButton": "好",
"@iOSOkButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
},
"noInternetConnection": "无互联网连接",
"pleaseCheckYourInternetConnectionAndTryAgain": "请检查您的互联网连接,然后重试。",
"signOutFromOtherDevices": "从其他设备登出",
"signOutOtherBody": "如果您认为有人可能知道您的密码,您可以强制所有其他使用您账户的设备登出。",
"signOutOtherDevices": "登出其他设备",
"doNotSignOut": "不要登出",
"hearUsWhereTitle": "您是怎么知道 Ente 的?(可选)",
"hearUsExplanation": "我们不跟踪应用程序安装情况。如果您告诉我们您是在哪里找到我们的,将会有所帮助!",
"recoveryKeySaved": "恢复密钥已保存在下载文件夹中!",
"waitingForBrowserRequest": "正在等待浏览器请求...",
"waitingForVerification": "等待验证...",
"passkey": "通行密钥",
"passKeyPendingVerification": "仍需验证",
"loginSessionExpired": "会话已过期",
"loginSessionExpiredDetails": "您的会话已过期。请重新登录。",
"developerSettingsWarning": "您确定要修改开发者设置吗?",
"developerSettings": "开发者设置",
"serverEndpoint": "服务器端点",
"invalidEndpoint": "端点无效",
"invalidEndpointMessage": "抱歉,您输入的端点无效。请输入有效的端点,然后重试。",
"endpointUpdatedMessage": "端点更新成功",
"customEndpoint": "已连接至 {endpoint}",
"pinText": "置顶",
"unpinText": "取消置顶",
"pinnedCodeMessage": "{code} 已被置顶",
"unpinnedCodeMessage": "{code} 已被取消置顶",
"pinned": "已置顶",
"tags": "标签",
"createNewTag": "创建新标签",
"tag": "标签",
"create": "创建",
"editTag": "编辑标签",
"deleteTagTitle": "要删除标签吗?",
"deleteTagMessage": "您确定要删除此标签吗?此操作是不可逆的。",
"somethingWentWrongParsingCode": "我们无法解析 {x} 代码。",
"updateNotAvailable": "更新不可用",
"viewRawCodes": "查看原始代码",
"rawCodes": "原始代码",
"rawCodeData": "原始代码数据",
"appLock": "应用锁",
"noSystemLockFound": "未找到系统锁",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "要启用应用锁,请在系统设置中设置设备密码或屏幕锁定。",
"autoLock": "自动锁定",
"immediately": "立即",
"reEnterPassword": "再次输入密码",
"reEnterPin": "再次输入 PIN 码",
"next": "下一步",
"tooManyIncorrectAttempts": "错误的尝试次数过多",
"tapToUnlock": "点击解锁",
"setNewPassword": "设置新密码",
"deviceLock": "设备锁",
"hideContent": "隐藏内容",
"hideContentDescriptionAndroid": "在应用切换器中隐藏应用内容并禁用屏幕截图",
"hideContentDescriptioniOS": "在应用切换器中隐藏应用内容",
"autoLockFeatureDescription": "应用程序进入后台后锁定的时间",
"appLockDescription": "在设备的默认锁定屏幕和带有 PIN 或密码的自定义锁定屏幕之间进行选择。",
"pinLock": "Pin 锁定",
"enterPin": "输入 PIN 码",
"setNewPin": "设置新 PIN 码",
"importFailureDescNew": "无法解析选定的文件。",
"appLockNotEnabled": "应用锁未启用",
"appLockNotEnabledDescription": "请从“安全”>“应用锁”启用应用锁",
"authToViewPasskey": "请验证身份以查看通行密钥",
"appLockOfflineModeWarning": "您已选择继续而不备份。如果您忘记了应用锁,您将无法访问数据。",
"duplicateCodes": "重复代码",
"noDuplicates": "✨ 没有重复",
"youveNoDuplicateCodesThatCanBeCleared": "您没有可清除的重复代码",
"deduplicateCodes": "删除重复代码",
"deselectAll": "取消全选",
"selectAll": "全选",
"deleteDuplicates": "删除重复项",
"plainHTML": "Plain HTML",
"tellUsWhatYouThink": "告诉我们您的想法",
"dropReviewiOS": "在 App Store 上发表评测",
"dropReviewAndroid": "在 Play 商店上发表评测",
"supportEnte": "支持 <bold-green>ente</bold-green>",
"giveUsAStarOnGithub": "在 Github 上给我们一个星标",
"free5GB": "<bold-green>ente</bold-green> Photos 上 5GB 可用空间",
"loginWithAuthAccount": "使用您的认证账户登录",
"freeStorageOffer": "购买 <bold-green>ente</bold-green> Photos 可享受 10% 优惠",
"freeStorageOfferDescription": "使用优惠码“AUTH”可享受首年 10% 折扣"
}

View File

@@ -0,0 +1,515 @@
{
"account": "帳戶",
"unlock": "解鎖",
"recoveryKey": "復原密鑰",
"counterAppBarTitle": "計數器",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "妥善保管您的雙重驗證碼",
"onBoardingGetStarted": "開始",
"setupFirstAccount": "設定您的第一個帳戶",
"importScanQrCode": "掃描 QR 碼",
"qrCode": "QR 碼",
"importEnterSetupKey": "輸入設定金鑰",
"importAccountPageTitle": "輸入帳戶詳細資訊",
"secretCanNotBeEmpty": "密碼不能為空",
"bothIssuerAndAccountCanNotBeEmpty": "發行方和帳戶均不能為空",
"incorrectDetails": "詳細資訊不正確",
"pleaseVerifyDetails": "請確認詳細資訊並重試",
"codeIssuerHint": "發行方",
"codeSecretKeyHint": "金鑰",
"secret": "金鑰",
"all": "所有",
"notes": "備註",
"notesLengthLimit": "備註最多可以包含 {count} 個字元",
"@notesLengthLimit": {
"description": "Text to indicate the maximum number of characters allowed for notes",
"placeholders": {
"count": {
"description": "The maximum number of characters allowed for notes",
"type": "int",
"example": "100"
}
}
},
"codeAccountHint": "帳戶 (you@domain.com)",
"codeTagHint": "標籤",
"accountKeyType": "金鑰類型",
"sessionExpired": "工作階段已過期",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "請重新登錄",
"loggingOut": "正在登出...",
"timeBasedKeyType": "基於時間 (TOTP)",
"counterBasedKeyType": "基於計數器 (HOTP)",
"saveAction": "儲存",
"nextTotpTitle": "下一個",
"deleteCodeTitle": "要刪除程式碼嗎?",
"deleteCodeMessage": "您確定要刪除此程式碼嗎?此操作不可逆。",
"trashCode": "要刪除程式碼嗎?",
"trashCodeMessage": "您確定要刪除 {account} 的程式碼嗎?",
"trash": "刪除",
"viewLogsAction": "查看日誌",
"sendLogsDescription": "這將傳送日誌以幫助我們偵錯您的問題。雖然我們採取預防措施確保不記錄敏感資訊,但我們建議您在共享這些日誌之前先查看它們。",
"preparingLogsTitle": "正在準備日誌...",
"emailLogsTitle": "電子郵件日誌",
"emailLogsMessage": "請將日誌傳送至 {email}",
"@emailLogsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"copyEmailAction": "複製電子郵件",
"exportLogsAction": "匯出日誌",
"reportABug": "報告錯誤",
"crashAndErrorReporting": "當機和錯誤報告",
"reportBug": "報告錯誤",
"emailUsMessage": "請給我們傳送電子郵件至 {email}",
"@emailUsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"contactSupport": "聯絡支援",
"rateUsOnStore": "在 {storeName} 上給我們評分",
"blog": "部落格",
"merchandise": "商品",
"verifyPassword": "驗證密碼",
"pleaseWait": "請稍候...",
"generatingEncryptionKeysTitle": "正在產生加密金鑰...",
"recreatePassword": "重新建立密碼",
"recreatePasswordMessage": "目前裝置的功能不足以驗證您的密碼,因此我們需要以一種適用於所有裝置的方式重新產生一次密碼。\n\n請使用您的復原密鑰登錄並重新產生您的密碼如果您願意可以再次使用相同的密碼。",
"useRecoveryKey": "使用復原密鑰",
"incorrectPasswordTitle": "密碼錯誤",
"welcomeBack": "歡迎回來!",
"emailAlreadyRegistered": "電子郵件地址已被註冊。",
"emailNotRegistered": "電子郵件地址未註冊。",
"madeWithLoveAtPrefix": "用❤️製作 ",
"supportDevs": "訂閱 <bold-green>ente</bold-green> 以支援我們",
"supportDiscount": "使用優惠碼“AUTH”可享受首年 10% 折扣",
"changeEmail": "修改信箱",
"changePassword": "修改密碼",
"data": "資料",
"importCodes": "匯入程式碼",
"importTypePlainText": "純文字",
"importTypeEnteEncrypted": "Ente 加密匯出",
"passwordForDecryptingExport": "用來解密匯出的密碼",
"passwordEmptyError": "密碼不能為空",
"importFromApp": "從 {appName} 匯入程式碼",
"importGoogleAuthGuide": "使用“轉移帳戶”選項將您的帳戶從 Google Authenticator 匯出到QR 碼。然後使用另一台裝置掃描 QR 碼。\n\n提示您可以使用筆記型電腦的攝影機拍攝QR 碼的照片。",
"importSelectJsonFile": "選擇 JSON 檔案",
"importSelectAppExport": "選擇 {appName} 的匯出檔案",
"importEnteEncGuide": "選擇從 Ente 匯出的 JSON 加密檔案",
"importRaivoGuide": "使用 Raivo 設定中的“將 OTP 匯出到 Zip 存檔”選項。\n\n解壓 zip 檔案並匯入 JSON 檔案。",
"importBitwardenGuide": "使用 Bitwarden 工具中的“匯出密碼庫”選項並匯入未加密的 JSON 檔案。",
"importAegisGuide": "使用 Aegis 設定中的“匯出密碼庫”選項。\n\n如果您的密碼庫已加密則需要輸入密碼庫密碼才能解密密碼庫。",
"import2FasGuide": "使用 2FAS 中的“設定 -> 備份 -> 匯出”選項。\n\n如果您的備份已加密則需要輸入密碼來解密備份",
"importLastpassGuide": "使用 Lastpass Authenticator 設定中的“轉移帳戶”選項,然後按“將帳戶匯出到檔案”。匯入下載的 JSON。",
"exportCodes": "匯出程式碼",
"importLabel": "匯入",
"importInstruction": "請選擇一個包含以下格式的程式碼列表的檔案",
"importCodeDelimiterInfo": "程式碼可以用逗號或分行符號分隔",
"selectFile": "選擇檔案",
"emailVerificationToggle": "電子郵件驗證",
"emailVerificationEnableWarning": "為避免被鎖在您的帳戶之外,請在啟用電子郵件驗證之前確保在 Ente Auth 之外儲存電子郵件二步驟驗證的副本。",
"authToChangeEmailVerificationSetting": "請進行身份驗證以更改電子郵件驗證",
"authenticateGeneric": "請確認",
"authToViewYourRecoveryKey": "請確認以查看您的復原密鑰",
"authToChangeYourEmail": "請確認以更改您的電子郵件",
"authToChangeYourPassword": "請確認以更改密碼",
"authToViewSecrets": "請進行身份驗證以查看您的金鑰",
"authToInitiateSignIn": "請進行身份驗證以啟動登錄進行備份。",
"ok": "確定",
"cancel": "取消",
"yes": "是",
"no": "否",
"email": "電子郵件地址",
"support": "支援",
"general": "一般",
"settings": "設定",
"copied": "已複製",
"pleaseTryAgain": "請重試",
"existingUser": "已註冊使用者",
"newUser": "初來 Ente",
"delete": "刪除",
"enterYourPasswordHint": "輸入您的密碼",
"forgotPassword": "忘記密碼",
"oops": "哎呀",
"suggestFeatures": "建議新功能",
"faq": "常見問題",
"somethingWentWrongMessage": "出了點問題,請重試",
"leaveFamily": "離開家庭",
"leaveFamilyMessage": "您確定要離開家庭計畫嗎?",
"inFamilyPlanMessage": "你在一個家庭計畫中!",
"hintForMobile": "長按程式碼即可編輯或刪除。",
"hintForDesktop": "右鍵點選程式碼即可編輯或刪除。",
"scan": "掃描",
"scanACode": "掃描程式碼",
"verify": "驗證",
"verifyEmail": "驗證電子郵件",
"enterCodeHint": "從你的身份驗證器APP中\n輸入6位數字程式碼",
"lostDeviceTitle": "遺失了裝置嗎?",
"twoFactorAuthTitle": "二步驟驗證",
"passkeyAuthTitle": "通行金鑰驗證",
"verifyPasskey": "驗證通行金鑰",
"loginWithTOTP": "使用 TOTP 登錄",
"recoverAccount": "恢復帳戶",
"enterRecoveryKeyHint": "輸入您的復原密鑰",
"recover": "恢復",
"contactSupportViaEmailMessage": "請從您註冊的電子郵件地址拖放一封郵件到 {email}",
"@contactSupportViaEmailMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"invalidQRCode": "QR 碼無效",
"noRecoveryKeyTitle": "沒有復原密鑰嗎?",
"enterEmailHint": "請輸入您的電子郵件地址",
"invalidEmailTitle": "無效的電子郵件地址",
"invalidEmailMessage": "請輸入一個有效的電子郵件地址。",
"deleteAccount": "刪除帳戶",
"deleteAccountQuery": "我們很抱歉看到您要刪除帳戶。您似乎面臨著一些問題?",
"yesSendFeedbackAction": "是,傳送回饋",
"noDeleteAccountAction": "否,刪除帳戶",
"initiateAccountDeleteTitle": "請進行身份驗證以啟動帳戶刪除",
"sendEmail": "傳送電子郵件",
"createNewAccount": "建立新帳號",
"weakStrength": "弱",
"strongStrength": "強",
"moderateStrength": "中",
"confirmPassword": "請確認密碼",
"close": "關閉",
"oopsSomethingWentWrong": "哎呀,出了點問題。",
"selectLanguage": "選擇語言",
"language": "語言",
"social": "社交媒體",
"security": "安全",
"lockscreen": "鎖定螢幕",
"authToChangeLockscreenSetting": "請確認以更改鎖定螢幕設定",
"deviceLockEnablePreSteps": "要啟用裝置鎖,請在系統設定中設定裝置密碼或螢幕鎖。",
"viewActiveSessions": "查看活動工作階段",
"authToViewYourActiveSessions": "請確認以查看您的活動工作階段",
"searchHint": "搜尋...",
"search": "搜尋",
"sorryUnableToGenCode": "對不起,無法為 {issuerName} 產生程式碼",
"noResult": "無結果",
"addCode": "加入程式碼",
"scanAQrCode": "掃描 QR 碼",
"enterDetailsManually": "手動輸入詳細資訊",
"edit": "編輯",
"share": "分享",
"shareCodes": "分享程式碼",
"shareCodesDuration": "選擇您要分享程式碼的期限。",
"restore": "恢復",
"copiedToClipboard": "已複製到剪貼簿",
"copiedNextToClipboard": "已將下一個程式碼複製到剪貼簿",
"error": "錯誤",
"recoveryKeyCopiedToClipboard": "復原密鑰已複製到剪貼簿",
"recoveryKeyOnForgotPassword": "如果您忘記了密碼,恢復資料的唯一方法就是使用此金鑰。",
"recoveryKeySaveDescription": "我們不會儲存此金鑰請將此24個單詞金鑰儲存在一個安全的地方。",
"doThisLater": "稍後再做",
"saveKey": "儲存金鑰",
"save": "儲存",
"send": "傳送",
"saveOrSendDescription": "您想將其儲存到您的內建儲存預設情況下為“下載”資料夾還是將其傳送到其他APP",
"saveOnlyDescription": "您想將其儲存到您的內建儲存中(預設情況下為“下載”資料夾)嗎?",
"back": "返回",
"createAccount": "建立帳戶",
"passwordStrength": "密碼強度: {passwordStrengthValue}",
"@passwordStrength": {
"description": "Text to indicate the password strength",
"placeholders": {
"passwordStrengthValue": {
"description": "The strength of the password as a string",
"type": "String",
"example": "Weak or Moderate or Strong"
}
},
"message": "Password Strength: {passwordStrengthText}"
},
"password": "密碼",
"signUpTerms": "我同意 <u-terms>服務條款</u-terms> 和 <u-policy>隱私政策</u-policy>",
"privacyPolicyTitle": "隱私政策",
"termsOfServicesTitle": "服務條款",
"encryption": "加密",
"setPasswordTitle": "設定密碼",
"changePasswordTitle": "修改密碼",
"resetPasswordTitle": "重設密碼",
"encryptionKeys": "加密金鑰",
"passwordWarning": "我們不會儲存這個密碼,所以如果忘記, <underline>我們無法解密您的資料</underline>",
"enterPasswordToEncrypt": "輸入我們可以用來加密您的資料的密碼",
"enterNewPasswordToEncrypt": "輸入我們可以用來加密您的資料的新密碼",
"passwordChangedSuccessfully": "密碼修改成功",
"generatingEncryptionKeys": "正在產生加密金鑰...",
"continueLabel": "繼續",
"insecureDevice": "裝置不安全",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "抱歉,我們無法在此裝置上產生安全金鑰。\n\n請使用其他裝置註冊。",
"howItWorks": "工作原理",
"ackPasswordLostWarning": "我明白,如果我遺失密碼,我可能會遺失我的資料,因為我的資料是 <underline>端到端加密的</underline>。",
"loginTerms": "點選登錄後,我同意 <u-terms>服務條款</u-terms> 和 <u-policy>隱私政策</u-policy>",
"logInLabel": "登錄",
"logout": "登出",
"areYouSureYouWantToLogout": "您確定要登出嗎?",
"yesLogout": "是的,登出",
"exit": "退出",
"theme": "主題",
"lightTheme": "淺色",
"darkTheme": "深色",
"systemTheme": "系統",
"verifyingRecoveryKey": "正在驗證復原密鑰...",
"recoveryKeyVerified": "復原密鑰已驗證",
"recoveryKeySuccessBody": "太棒了! 您的復原密鑰是有效的。 感謝您的驗證。\n\n請記住要安全備份您的復原密鑰。",
"invalidRecoveryKey": "您輸入的復原密鑰無效。請確保它包含24個單詞並檢查每個單詞的拼寫。\n\n如果您輸入了舊的恢復碼請確保它長度為64個字元並檢查其中每個字元。",
"recreatePasswordTitle": "重新建立密碼",
"recreatePasswordBody": "目前裝置的功能不足以驗證您的密碼,但我們可以以適用於所有裝置的方式重新產生。\n\n請使用您的復原密鑰登錄並重新產生您的密碼如果您願意可以再次使用相同的密碼。",
"invalidKey": "金鑰無效",
"tryAgain": "請再試一次",
"viewRecoveryKey": "查看復原密鑰",
"confirmRecoveryKey": "確認復原密鑰",
"recoveryKeyVerifyReason": "如果您忘記了您的密碼,您的復原密鑰是恢復您的照片的唯一途徑。 您可以在“設定 > 帳戶”中找到您的復原密鑰。\n\n請在此輸入您的復原密鑰以確認您已經正確地儲存了它。",
"confirmYourRecoveryKey": "確認您的復原密鑰",
"confirm": "確認",
"emailYourLogs": "通過電子郵件傳送您的日誌",
"pleaseSendTheLogsTo": "請將日誌傳送至 \n{toEmail}",
"copyEmailAddress": "複製電子郵件地址",
"exportLogs": "匯出日誌",
"enterYourRecoveryKey": "輸入您的復原密鑰",
"tempErrorContactSupportIfPersists": "看起來出了點問題。 請稍後重試。 如果錯誤仍然存在,請聯絡我們的支援團隊。",
"networkHostLookUpErr": "無法連接到 Ente請檢查您的網路設定如果錯誤仍然存請聯絡支援。",
"networkConnectionRefusedErr": "無法連接到 Ente請稍後重試。如果錯誤仍然存請聯絡支援人員。",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "看起來出了點問題。 請稍後重試。 如果錯誤仍然存在,請聯絡我們的支援團隊。",
"about": "關於",
"weAreOpenSource": "我們是開放原始碼的!",
"privacy": "隱私",
"terms": "條款",
"checkForUpdates": "檢查更新",
"checkStatus": "檢查狀態",
"downloadUpdate": "下載",
"criticalUpdateAvailable": "有重要更新可用",
"updateAvailable": "有可用的更新",
"update": "更新",
"checking": "正在檢查...",
"youAreOnTheLatestVersion": "目前為最新版本",
"warning": "警告",
"exportWarningDesc": "匯出的檔案包含敏感資訊。請安全儲存。",
"iUnderStand": "瞭解",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "請確認以匯出您的程式碼",
"importSuccessTitle": "耶!",
"importSuccessDesc": "您已匯入了 {count} 個程式碼!",
"@importSuccessDesc": {
"placeholders": {
"count": {
"description": "The number of codes imported",
"type": "int",
"example": "1"
}
}
},
"sorry": "抱歉",
"importFailureDesc": "無法解析所選檔案。\n如果您需要幫助請發郵件給 support@ente.io",
"pendingSyncs": "警告",
"pendingSyncsWarningBody": "您的一些程式碼尚未備份。\n\n請確保您在登出之前備份這些程式碼。",
"checkInboxAndSpamFolder": "請檢查您的收件箱 (或者是在您的“垃圾郵件”列表內) 以完成驗證",
"tapToEnterCode": "點選以輸入程式碼",
"resendEmail": "重新傳送電子郵件",
"weHaveSendEmailTo": "我們已經傳送郵件到 <green>{email}</green>",
"@weHaveSendEmailTo": {
"description": "Text to indicate that we have sent a mail to the user",
"placeholders": {
"email": {
"description": "The email address of the user",
"type": "String",
"example": "example@ente.io"
}
}
},
"manualSort": "自訂",
"editOrder": "編輯順序",
"mostFrequentlyUsed": "經常使用",
"mostRecentlyUsed": "最近使用",
"activeSessions": "已登錄的裝置",
"somethingWentWrongPleaseTryAgain": "出了點問題,請重試",
"thisWillLogYouOutOfThisDevice": "這將使您登出該裝置!",
"thisWillLogYouOutOfTheFollowingDevice": "這將使您登出以下裝置:",
"terminateSession": "是否終止工作階段?",
"terminate": "終止",
"thisDevice": "此裝置",
"toResetVerifyEmail": "要重設您的密碼,請先驗證您的電子郵件。",
"thisEmailIsAlreadyInUse": "該電子郵件已被使用",
"verificationFailedPleaseTryAgain": "驗證失敗,請再試一次",
"yourVerificationCodeHasExpired": "您的驗證碼已過期",
"incorrectCode": "驗證碼錯誤",
"sorryTheCodeYouveEnteredIsIncorrect": "抱歉,您輸入的驗證碼不正確",
"emailChangedTo": "電子郵件已更改為 {newEmail}",
"authenticationFailedPleaseTryAgain": "認證失敗,請重試",
"authenticationSuccessful": "認證成功!",
"twofactorAuthenticationSuccessfullyReset": "二步驟驗證已成功重設",
"incorrectRecoveryKey": "復原密鑰不正確",
"theRecoveryKeyYouEnteredIsIncorrect": "您輸入的復原密鑰不正確",
"enterPassword": "輸入密碼",
"selectExportFormat": "選擇匯出格式",
"exportDialogDesc": "加密匯出將由您選擇的密碼保護。",
"encrypted": "已加密",
"plainText": "純文字",
"passwordToEncryptExport": "用來加密匯出的密碼",
"export": "匯出",
"useOffline": "無需備份即可使用",
"signInToBackup": "登錄以備份您的程式碼",
"singIn": "登錄",
"sigInBackupReminder": "請匯出您的程式碼以確保您有可以恢復的備份。",
"offlineModeWarning": "您已選擇在不進行備份的情況下繼續操作。請手動備份以確保您的程式碼安全。",
"showLargeIcons": "顯示大圖示",
"compactMode": "緊湊模式",
"shouldHideCode": "隱藏程式碼",
"doubleTapToViewHiddenCode": "您可以連按兩下條目來查看程式碼",
"focusOnSearchBar": "APP啟動後聚焦搜尋",
"confirmUpdatingkey": "您確定要更新此金鑰嗎?",
"minimizeAppOnCopy": "複製時最小化APP",
"editCodeAuthMessage": "編輯程式碼需要身份驗證",
"deleteCodeAuthMessage": "刪除程式碼需要身份驗證",
"showQRAuthMessage": "顯示QR 碼需要身份驗證",
"confirmAccountDeleteTitle": "確認刪除帳戶",
"confirmAccountDeleteMessage": "如果您使用其他 Ente APP該帳戶將會與其他APP連結。\n\n在所有 Ente APP中您上傳的資料將被安排用於刪除並且您的帳戶將被永久刪除。",
"androidBiometricHint": "驗證身份",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "未能辨識,請重試。",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "成功",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "取消",
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"androidSignInTitle": "需要進行身份驗證",
"@androidSignInTitle": {
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
},
"androidBiometricRequiredTitle": "需要進行生物辨識認證",
"@androidBiometricRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsRequiredTitle": "需要裝置憑據",
"@androidDeviceCredentialsRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsSetupDescription": "需要裝置憑據",
"@androidDeviceCredentialsSetupDescription": {
"description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
},
"goToSettings": "前往設定",
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
},
"androidGoToSettingsDescription": "您的裝置上未設定生物辨識身份驗證。轉到“設定 > 安全”以加入生物辨識身份驗證。",
"@androidGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure biometric on their device. It shows in a dialog on Android side."
},
"iOSLockOut": "生物辨識身份驗證已停用。請鎖定並解鎖螢幕以啟用該功能。",
"@iOSLockOut": {
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
},
"iOSGoToSettingsDescription": "您的裝置上未設定生物辨識身份驗證。請在您的手機上啟用 觸控 ID 或 面容 ID。",
"@iOSGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side."
},
"iOSOkButton": "好",
"@iOSOkButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
},
"noInternetConnection": "無網際網路連接",
"pleaseCheckYourInternetConnectionAndTryAgain": "請檢查您的網際網路連接,然後重試。",
"signOutFromOtherDevices": "從其他裝置登出",
"signOutOtherBody": "如果您認為有人可能知道您的密碼,您可以強制所有其他使用您帳戶的裝置登出。",
"signOutOtherDevices": "登出其他裝置",
"doNotSignOut": "不要登出",
"hearUsWhereTitle": "您是怎麼知道 Ente 的?(可選)",
"hearUsExplanation": "我們不跟蹤APP安裝情況。如果您告訴我們您是在哪裡找到我們的將會有所幫助",
"recoveryKeySaved": "復原密鑰已儲存在下載資料夾中!",
"waitingForBrowserRequest": "正在等待瀏覽器請求...",
"waitingForVerification": "等待驗證...",
"passkey": "通行金鑰",
"passKeyPendingVerification": "仍需驗證",
"loginSessionExpired": "工作階段已過期",
"loginSessionExpiredDetails": "您的工作階段已過期。請重新登錄。",
"developerSettingsWarning": "您確定要修改開發者設定嗎?",
"developerSettings": "開發者設定",
"serverEndpoint": "伺服器端點",
"invalidEndpoint": "端點無效",
"invalidEndpointMessage": "抱歉,您輸入的端點無效。請輸入有效的端點,然後重試。",
"endpointUpdatedMessage": "端點更新成功",
"customEndpoint": "已連接至 {endpoint}",
"pinText": "置頂",
"unpinText": "取消置頂",
"pinnedCodeMessage": "{code} 已被置頂",
"unpinnedCodeMessage": "{code} 已被取消置頂",
"pinned": "已置頂",
"tags": "標籤",
"createNewTag": "建立新標籤",
"tag": "標籤",
"create": "建立",
"editTag": "編輯標籤",
"deleteTagTitle": "要刪除標籤嗎?",
"deleteTagMessage": "您確定要刪除此標籤嗎?此操作是不可逆的。",
"somethingWentWrongParsingCode": "我們無法解析 {x} 程式碼。",
"updateNotAvailable": "更新不可用",
"viewRawCodes": "查看原始程式碼",
"rawCodes": "原始程式碼",
"rawCodeData": "原始程式碼資料",
"appLock": "APP鎖",
"noSystemLockFound": "未找到系統鎖",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "要啟用APP鎖請在系統設定中設定裝置密碼或螢幕鎖定。",
"autoLock": "自動鎖定",
"immediately": "立即",
"reEnterPassword": "再次輸入密碼",
"reEnterPin": "再次輸入 PIN 碼",
"next": "下一步",
"tooManyIncorrectAttempts": "錯誤的嘗試次數過多",
"tapToUnlock": "點選解鎖",
"setNewPassword": "設定新密碼",
"deviceLock": "裝置鎖",
"hideContent": "隱藏內容",
"hideContentDescriptionAndroid": "在APP切換器中隱藏APP內容並停用螢幕截圖",
"hideContentDescriptioniOS": "在APP切換器中隱藏APP內容",
"autoLockFeatureDescription": "APP進入後台後鎖定的時間",
"appLockDescription": "在裝置的預設鎖定螢幕和帶有 PIN 或密碼的自訂鎖定螢幕之間進行選擇。",
"pinLock": "Pin 鎖定",
"enterPin": "輸入 PIN 碼",
"setNewPin": "設定新 PIN 碼",
"importFailureDescNew": "無法解析選定的檔案。",
"appLockNotEnabled": "APP鎖未啟用",
"appLockNotEnabledDescription": "請從“安全”>“APP鎖”啟用APP鎖",
"authToViewPasskey": "請確認身份以查看通行金鑰",
"appLockOfflineModeWarning": "您已選擇繼續而不備份。如果您忘記了APP鎖您將無法訪問資料。",
"duplicateCodes": "重複程式碼",
"noDuplicates": "✨ 沒有重複",
"youveNoDuplicateCodesThatCanBeCleared": "你沒有任何可清除的重複代碼",
"deduplicateCodes": "刪除重複程式碼",
"deselectAll": "取消全選",
"selectAll": "全選",
"deleteDuplicates": "刪除重複項",
"plainHTML": "Plain HTML",
"tellUsWhatYouThink": "告訴我們您的想法",
"supportEnte": "支援 <bold-green>ente</bold-green>",
"giveUsAStarOnGithub": "在 Github 上給我們一個星標",
"free5GB": "<bold-green>ente</bold-green> Photos 上 5GB 可用空間",
"loginWithAuthAccount": "使用您的認證帳戶登錄",
"freeStorageOffer": "購買 <bold-green>ente</bold-green> Photos 可享受 10% 優惠",
"freeStorageOfferDescription": "使用優惠碼“AUTH”可享受首年 10% 折扣"
}

View File

@@ -15,6 +15,7 @@ const List<Locale> appSupportedLocales = <Locale>[
Locale('es', 'ES'),
Locale('fa'),
Locale('fr'),
Locale('he'),
Locale('hu'),
Locale('id'),
Locale('it'),
@@ -25,6 +26,7 @@ const List<Locale> appSupportedLocales = <Locale>[
Locale('pl'),
Locale('pt'),
Locale('pt', 'BR'),
Locale('ro'),
Locale('ru'),
Locale('sl'),
Locale('sk'),
@@ -32,6 +34,7 @@ const List<Locale> appSupportedLocales = <Locale>[
Locale('uk'),
Locale('vi'),
Locale("zh", "CN"),
Locale("zh", "TW"),
];
Locale? autoDetectedLocale;

View File

@@ -350,6 +350,7 @@ class UserService {
userPassword,
_config.getKeyAttributes()!,
);
_config.resetVolatilePassword();
page = const HomePage();
} else {
throw Exception("unexpected response during passkey verification");

View File

@@ -6,8 +6,8 @@ import 'package:shared_preferences/shared_preferences.dart';
import 'package:window_manager/window_manager.dart';
class WindowListenerService {
static const double minWindowHeight = 600.0;
static const double minWindowWidth = 800.0;
static const double initialWindowHeight = 1200.0;
static const double initialWindowWidth = 800.0;
static const double maxWindowHeight = 8192.0;
static const double maxWindowWidth = 8192.0;
late SharedPreferences _preferences;
@@ -23,9 +23,9 @@ class WindowListenerService {
Size getWindowSize() {
final double windowWidth =
_preferences.getDouble('windowWidth') ?? minWindowWidth;
_preferences.getDouble('windowWidth') ?? initialWindowWidth;
final double windowHeight =
_preferences.getDouble('windowHeight') ?? minWindowHeight;
_preferences.getDouble('windowHeight') ?? initialWindowHeight;
final w = windowWidth.clamp(200.0, maxWindowWidth);
final h = windowHeight.clamp(400.0, maxWindowHeight);
return Size(w, h);

View File

@@ -147,6 +147,8 @@ class _ItemsWidgetState extends State<ItemsWidget> {
return 'Français';
case 'de':
return 'Deutsch';
case 'he':
return 'עברית';
case 'hu':
return 'Magyar';
case 'id':
@@ -166,6 +168,8 @@ class _ItemsWidgetState extends State<ItemsWidget> {
default:
return 'Português';
}
case 'ro':
return 'Română';
case 'ru':
return 'Русский';
case 'sl':
@@ -181,6 +185,13 @@ class _ItemsWidgetState extends State<ItemsWidget> {
case 'fi':
return 'Suomi';
case 'zh':
if (locale.countryCode == 'TW') {
return '中文 (台灣)';
} else if (locale.countryCode == 'HK') {
return '中文 (香港)';
} else if (locale.countryCode == 'CN') {
return '中文 (中国)';
}
switch (locale.scriptCode) {
case 'Hans':
return '中文 (简体)';

View File

@@ -1,3 +1,5 @@
import 'dart:io';
import 'package:ente_auth/core/configuration.dart';
import 'package:ente_auth/l10n/l10n.dart';
import 'package:ente_auth/models/user_details.dart';
@@ -35,7 +37,9 @@ class NotificationBannerWidget extends StatelessWidget {
[
BannerWidget(
text: l10n.tellUsWhatYouThink,
subText: l10n.dropReview,
subText: Platform.isIOS
? l10n.dropReviewiOS
: l10n.dropReviewAndroid,
type: BannerType.rateUs,
),
sectionSpacing,
@@ -84,7 +88,8 @@ class NotificationBannerWidget extends StatelessWidget {
[
BannerWidget(
text: l10n.tellUsWhatYouThink,
subText: l10n.dropReview,
subText:
Platform.isIOS ? l10n.dropReviewiOS : l10n.dropReviewAndroid,
type: BannerType.rateUs,
),
sectionSpacing,

View File

@@ -17,6 +17,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST
jni
)
set(PLUGIN_BUNDLED_LIBRARIES)

View File

@@ -1,4 +1,4 @@
platform :osx, '10.14'
platform :osx, '10.15'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

View File

@@ -4,6 +4,9 @@ PODS:
- connectivity_plus (0.0.1):
- Flutter
- FlutterMacOS
- cupertino_http (0.0.1):
- Flutter
- FlutterMacOS
- device_info_plus (0.0.1):
- FlutterMacOS
- file_saver (0.0.1):
@@ -21,6 +24,8 @@ PODS:
- local_auth_darwin (0.0.1):
- Flutter
- FlutterMacOS
- objective_c (0.0.1):
- FlutterMacOS
- OrderedSet (6.0.3)
- package_info_plus (0.0.1):
- FlutterMacOS
@@ -72,6 +77,7 @@ PODS:
DEPENDENCIES:
- app_links (from `Flutter/ephemeral/.symlinks/plugins/app_links/macos`)
- connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin`)
- cupertino_http (from `Flutter/ephemeral/.symlinks/plugins/cupertino_http/darwin`)
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
- file_saver (from `Flutter/ephemeral/.symlinks/plugins/file_saver/macos`)
- flutter_inappwebview_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos`)
@@ -80,6 +86,7 @@ DEPENDENCIES:
- flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
- local_auth_darwin (from `Flutter/ephemeral/.symlinks/plugins/local_auth_darwin/darwin`)
- objective_c (from `Flutter/ephemeral/.symlinks/plugins/objective_c/macos`)
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
- screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`)
@@ -104,6 +111,8 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/app_links/macos
connectivity_plus:
:path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin
cupertino_http:
:path: Flutter/ephemeral/.symlinks/plugins/cupertino_http/darwin
device_info_plus:
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
file_saver:
@@ -120,6 +129,8 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral
local_auth_darwin:
:path: Flutter/ephemeral/.symlinks/plugins/local_auth_darwin/darwin
objective_c:
:path: Flutter/ephemeral/.symlinks/plugins/objective_c/macos
package_info_plus:
:path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
path_provider_foundation:
@@ -148,6 +159,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
app_links: 10e0a0ab602ffaf34d142cd4862f29d34b303b2a
connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
cupertino_http: 947a233f40cfea55167a49f2facc18434ea117ba
device_info_plus: 5401765fde0b8d062a2f8eb65510fb17e77cf07f
file_saver: 44e6fbf666677faf097302460e214e977fdd977b
flutter_inappwebview_macos: bdf207b8f4ebd58e86ae06cd96b147de99a67c9b
@@ -156,6 +168,7 @@ SPEC CHECKSUMS:
flutter_secure_storage_macos: 59459653abe1adb92abbc8ea747d79f8d19866c9
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3
objective_c: e5f8194456e8fc943e034d1af00510a1bc29c067
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
@@ -172,6 +185,6 @@ SPEC CHECKSUMS:
url_launcher_macos: c82c93949963e55b228a30115bd219499a6fe404
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
PODFILE CHECKSUM: f401c31c8f7c5571f6f565c78915d54338812dab
PODFILE CHECKSUM: 6ff827273ace187339fc5d3684072a26ad85c298
COCOAPODS: 1.16.2

View File

@@ -428,7 +428,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.14;
MACOSX_DEPLOYMENT_TARGET = 10.15;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.ente.auth.mac;
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -560,7 +560,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.14;
MACOSX_DEPLOYMENT_TARGET = 10.15;
PRODUCT_BUNDLE_IDENTIFIER = io.ente.auth.mac;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -587,7 +587,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.14;
MACOSX_DEPLOYMENT_TARGET = 10.15;
OTHER_CODE_SIGN_FLAGS = "--timestamp";
PRODUCT_BUNDLE_IDENTIFIER = io.ente.auth.mac;
PROVISIONING_PROFILE_SPECIFIER = "";

View File

@@ -250,10 +250,10 @@ packages:
dependency: "direct main"
description:
name: collection
sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev"
source: hosted
version: "1.19.0"
version: "1.18.0"
confetti:
dependency: "direct main"
description:

View File

@@ -1,7 +1,7 @@
name: ente_auth
description: ente two-factor authenticator
version: 4.3.2+432
version: 4.3.3+433
publish_to: none
environment:

View File

@@ -20,6 +20,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST
jni
sentry_flutter
)

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 989 B

After

Width:  |  Height:  |  Size: 918 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 607 B

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 259 B

After

Width:  |  Height:  |  Size: 935 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 458 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 655 B

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@@ -41,14 +41,14 @@
"onnxruntime-node": "^1.20.1"
},
"devDependencies": {
"@eslint/js": "^9.21.0",
"@eslint/js": "^9.22.0",
"@tsconfig/node20": "^20.1.4",
"@types/auto-launch": "^5.0.5",
"@types/ffmpeg-static": "^3.0.3",
"ajv": "^8.17.1",
"concurrently": "^9.1.2",
"cross-env": "^7.0.3",
"electron": "^34.3.1",
"electron": "^34.3.4",
"electron-builder": "^26.0.0",
"eslint": "^9",
"prettier": "3.5.3",
@@ -56,7 +56,7 @@
"prettier-plugin-packagejson": "^2.5.10",
"shx": "^0.3.4",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript-eslint": "^8.26.1"
},
"packageManager": "yarn@1.22.22",
"productName": "ente"

View File

@@ -404,10 +404,11 @@ const createMainWindow = () => {
// "The unresponsive event is fired when Chromium detects that your
// webContents is not responding to input messages for > 30 seconds."
window.webContents.on("unresponsive", () => {
log.error(
"MainWindow's webContents are unresponsive, will restart the renderer process",
);
window.webContents.forcefullyCrashRenderer();
// There is a known case when this can happen: When the user to select a
// folder to upload (Upload > Folder), the browser callback to us takes
// some time. When trying to upload very large folders on slower Windows
// machines, this can take up to 30 seconds.
log.warn("MainWindow's webContents are unresponsive");
});
window.on("close", (event) => {

View File

@@ -177,10 +177,10 @@
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06"
integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==
"@eslint/js@^9.21.0":
version "9.21.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.21.0.tgz#4303ef4e07226d87c395b8fad5278763e9c15c08"
integrity sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==
"@eslint/js@^9.22.0":
version "9.22.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.22.0.tgz#4ff53649ded7cbce90b444b494c234137fa1aa3d"
integrity sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==
"@eslint/object-schema@^2.1.4":
version "2.1.4"
@@ -392,62 +392,62 @@
dependencies:
"@types/node" "*"
"@typescript-eslint/eslint-plugin@8.26.0":
version "8.26.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.0.tgz#7e880faf91f89471c30c141951e15f0eb3a0599e"
integrity sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==
"@typescript-eslint/eslint-plugin@8.26.1":
version "8.26.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.1.tgz#3e48eb847924161843b092c87a9b65176b53782f"
integrity sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==
dependencies:
"@eslint-community/regexpp" "^4.10.0"
"@typescript-eslint/scope-manager" "8.26.0"
"@typescript-eslint/type-utils" "8.26.0"
"@typescript-eslint/utils" "8.26.0"
"@typescript-eslint/visitor-keys" "8.26.0"
"@typescript-eslint/scope-manager" "8.26.1"
"@typescript-eslint/type-utils" "8.26.1"
"@typescript-eslint/utils" "8.26.1"
"@typescript-eslint/visitor-keys" "8.26.1"
graphemer "^1.4.0"
ignore "^5.3.1"
natural-compare "^1.4.0"
ts-api-utils "^2.0.1"
"@typescript-eslint/parser@8.26.0":
version "8.26.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.26.0.tgz#9b4d2198e89f64fb81e83167eedd89a827d843a9"
integrity sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==
"@typescript-eslint/parser@8.26.1":
version "8.26.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.26.1.tgz#0e2f915a497519fc43f52cf2ecbfa607ff56f72e"
integrity sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==
dependencies:
"@typescript-eslint/scope-manager" "8.26.0"
"@typescript-eslint/types" "8.26.0"
"@typescript-eslint/typescript-estree" "8.26.0"
"@typescript-eslint/visitor-keys" "8.26.0"
"@typescript-eslint/scope-manager" "8.26.1"
"@typescript-eslint/types" "8.26.1"
"@typescript-eslint/typescript-estree" "8.26.1"
"@typescript-eslint/visitor-keys" "8.26.1"
debug "^4.3.4"
"@typescript-eslint/scope-manager@8.26.0":
version "8.26.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz#b06623fad54a3a77fadab5f652ef75ed3780b545"
integrity sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==
"@typescript-eslint/scope-manager@8.26.1":
version "8.26.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.26.1.tgz#5e6ad0ac258ccf79462e91c3f43a3f1f7f31a6cc"
integrity sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==
dependencies:
"@typescript-eslint/types" "8.26.0"
"@typescript-eslint/visitor-keys" "8.26.0"
"@typescript-eslint/types" "8.26.1"
"@typescript-eslint/visitor-keys" "8.26.1"
"@typescript-eslint/type-utils@8.26.0":
version "8.26.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.26.0.tgz#9ee8cc98184b5f66326578de9c097edc89da6f68"
integrity sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==
"@typescript-eslint/type-utils@8.26.1":
version "8.26.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.26.1.tgz#462f0bae09de72ac6e8e1af2ebe588c23224d7f8"
integrity sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==
dependencies:
"@typescript-eslint/typescript-estree" "8.26.0"
"@typescript-eslint/utils" "8.26.0"
"@typescript-eslint/typescript-estree" "8.26.1"
"@typescript-eslint/utils" "8.26.1"
debug "^4.3.4"
ts-api-utils "^2.0.1"
"@typescript-eslint/types@8.26.0":
version "8.26.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.26.0.tgz#c4e93a8faf3a38a8d8adb007dc7834f1c89ee7bf"
integrity sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==
"@typescript-eslint/types@8.26.1":
version "8.26.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.26.1.tgz#d5978721670cff263348d5062773389231a64132"
integrity sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==
"@typescript-eslint/typescript-estree@8.26.0":
version "8.26.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz#128972172005a7376e34ed2ecba4e29363b0cad1"
integrity sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==
"@typescript-eslint/typescript-estree@8.26.1":
version "8.26.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.1.tgz#eb0e4ce31753683d83be53441a409fd5f0b34afd"
integrity sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==
dependencies:
"@typescript-eslint/types" "8.26.0"
"@typescript-eslint/visitor-keys" "8.26.0"
"@typescript-eslint/types" "8.26.1"
"@typescript-eslint/visitor-keys" "8.26.1"
debug "^4.3.4"
fast-glob "^3.3.2"
is-glob "^4.0.3"
@@ -455,22 +455,22 @@
semver "^7.6.0"
ts-api-utils "^2.0.1"
"@typescript-eslint/utils@8.26.0":
version "8.26.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.26.0.tgz#845d20ed8378a5594e6445f54e53b972aee7b3e6"
integrity sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==
"@typescript-eslint/utils@8.26.1":
version "8.26.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.26.1.tgz#54cc58469955f25577f659753b71a0e117a0539f"
integrity sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
"@typescript-eslint/scope-manager" "8.26.0"
"@typescript-eslint/types" "8.26.0"
"@typescript-eslint/typescript-estree" "8.26.0"
"@typescript-eslint/scope-manager" "8.26.1"
"@typescript-eslint/types" "8.26.1"
"@typescript-eslint/typescript-estree" "8.26.1"
"@typescript-eslint/visitor-keys@8.26.0":
version "8.26.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz#a4876216756c69130ea958df3b77222c2ad95290"
integrity sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==
"@typescript-eslint/visitor-keys@8.26.1":
version "8.26.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.1.tgz#c5267fcc82795cf10280363023837deacad2647c"
integrity sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==
dependencies:
"@typescript-eslint/types" "8.26.0"
"@typescript-eslint/types" "8.26.1"
eslint-visitor-keys "^4.2.0"
"@xmldom/xmldom@^0.8.8":
@@ -1264,10 +1264,10 @@ electron-updater@^6.4.0:
semver "^7.6.3"
tiny-typed-emitter "^2.1.0"
electron@^34.3.1:
version "34.3.1"
resolved "https://registry.yarnpkg.com/electron/-/electron-34.3.1.tgz#2c337a496d923463a2c7be7eaab191ad8220459b"
integrity sha512-Vsgxc4FDGg7hjduKyvTP5qfNDxZHTliZIiWD1HlR5hHXx3BFjyVv3db/uEH1GaCU0KKyeNsBXRwS4WAOMaSH5g==
electron@^34.3.4:
version "34.3.4"
resolved "https://registry.yarnpkg.com/electron/-/electron-34.3.4.tgz#3acbcb5fe1aabfa926dddce23de28da9e6023cc5"
integrity sha512-bIsjBh5EN229K4orJpVfjLb7JEoCYkUVg3tS981E1elEjvhBITqwm+K1j9goEqMIlxqYWgogREYpSZRQ+aLWgQ==
dependencies:
"@electron/get" "^2.0.0"
"@types/node" "^20.9.0"
@@ -3209,14 +3209,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.26.0:
version "8.26.0"
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.26.0.tgz#f44cafdaa6edc99e3612b33b791eb77a56286320"
integrity sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA==
typescript-eslint@^8.26.1:
version "8.26.1"
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.26.1.tgz#d17a638a7543bc535157b83cdf5876513c71493b"
integrity sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==
dependencies:
"@typescript-eslint/eslint-plugin" "8.26.0"
"@typescript-eslint/parser" "8.26.0"
"@typescript-eslint/utils" "8.26.0"
"@typescript-eslint/eslint-plugin" "8.26.1"
"@typescript-eslint/parser" "8.26.1"
"@typescript-eslint/utils" "8.26.1"
typescript@^5.4.3:
version "5.5.4"

View File

@@ -142,6 +142,7 @@ export const sidebar = [
text: "Video streaming",
link: "/photos/faq/video-streaming",
},
{ text: "Misc", link: "/photos/faq/misc" },
],
},
{
@@ -311,6 +312,10 @@ export const sidebar = [
text: "Uploads",
link: "/self-hosting/troubleshooting/uploads",
},
{
text: "Docker",
link: "/self-hosting/troubleshooting/docker",
},
{
text: "Yarn",
link: "/self-hosting/troubleshooting/yarn",

View File

@@ -115,4 +115,28 @@ clicking on "Your map" under "Locations" on the search screen.
## How to reset my password if I lost it?
On the login page, enter your email and click on Forgot Password. Then, enter your recovery key and create a new password.
On the login page, enter your email and click on Forgot Password. Then, enter your recovery key and create a new password.
# iOS Album Backup and Organization in Ente
### How does Ente handle photos that are part of multiple iOS albums?
When you select multiple albums for backup, Ente prioritizes uploading each photo to the album with the fewest photos. This means a photo will only be uploaded once, even if it exists in multiple albums on your device. If you create new albums on your device after the initial backup, those photos may not appear in the corresponding Ente album if they were already uploaded to a different album.
### Why dont all photos from a new iOS album appear in the corresponding Ente album?
If you create a new album on your device after the initial backup, the photos in that album may have already been uploaded to another album in Ente. To fix this, go to the "On Device" album in Ente, select all photos, and manually add them to the corresponding album in Ente.
### What happens if I reorganize my photos in the iOS Photos app after backing up?
Reorganizing photos in the iOS Photos app (e.g., moving photos to new albums) wont automatically reflect in Ente. Youll need to manually add those photos to the corresponding albums in Ente to maintain consistency.
### Can I search for photos using the descriptions Ive added?
Yes, descriptions are searchable, making it easier to find specific photos later.
To do this, open the photo, tap the (i) button, and enter your description.
### How does the deduplication feature work on the desktop app?
If the app finds exact duplicates, it will show them in the deduplication. When you delete a duplicate, the app keeps one copy and creates a symlink for the other duplicate. This helps save storage space.
### What happens if I lose access to my email address? Can I use my recovery key to bypass email verification?
No, the recovery key does not bypass email verification. For security reasons, we do not disable or bypass email verification unless the account owner reaches out to us and successfully verifies their identity by providing details about their account.
If you lose access to your email, please contact our support team at support@ente.io

View File

@@ -0,0 +1,20 @@
---
title: Miscellaneous general FAQ
description: Unsorted frequently asked questions about Ente Photos
---
# Miscellaneous FAQ
## Exif Description
Ente will try to read as much information from Exif when the image is uploaded,
but after that, only the fields which have been parsed into Ente can be
searched.
The app still show all the fields in the raw Exif data in the file info panel
when someone taps on the "View all Exif" option, but otherwise the app is
unaware of these fields.
In particular, for the description associated with a photo, the exact logic to
determine the description from the Exif when uploading the image can be seen
[in this part of the code](https://github.com/ente-io/ente/blob/0dcb185744da469848b41b668fe4b647226b6fe2/web/packages/gallery/services/exif.ts#L609-L620).

View File

@@ -12,6 +12,11 @@ verification code by:
- Reading it from the DB (otts table)
> [!TIP]
>
> You can also configure your instance to send out emails so that you can get
> your verification code via emails by using the `smtp` section in the config.
You can also set pre-defined hardcoded OTTs for certain users when running
locally by creating a `museum.yaml` and adding the `internal.hardcoded-ott`
configuration setting to it. See

View File

@@ -9,11 +9,11 @@ description:
> [!NOTE]
>
> This is a community contributed guide, and some of these steps might be out of
> sync with the upstream documentation. If something is not working correctly,
> please also see the latest
> [READMEs](https://github.com/ente-io/ente/blob/main/server/README.md) in the
> repository and/or other guides in [self-hosting](/self-hosting/).
> This is a community contributed guide, and some of these steps ~~might be~~
> ARE out of sync with the upstream changes. This document is retained for
> reference purposes, but if something is not working correctly, please see the
> latest [READMEs](https://github.com/ente-io/ente/blob/main/server/README.md)
> in the repository and/or other guides in [self-hosting](/self-hosting/).
This guide is for self hosting the server and the web application of Ente Photos
using docker compose and an external S3 bucket. So we assume that you already

View File

@@ -30,10 +30,6 @@ longer term, then it is recommended to follow the Docker approach.
> [!IMPORTANT]
>
> This docker image is still in testing stage and it might show up with some
> unknown variables in different scenarios. But this image has been tested on a
> production Ente site.
>
> Recurring changes might be made by the team or from community if more
> improvements can be made so that we are able to build a full-fledged docker
> image.
@@ -50,8 +46,8 @@ COPY apps/ .
RUN corepack enable
# Endpoint for Ente Server
ENV NEXT_PUBLIC_ENTE_ENDPOINT=https://your-ente-endpoint.com
ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://your-albums-endpoint.com
ENV NEXT_PUBLIC_ENTE_ENDPOINT=https://changeme.com
ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://changeme.com
RUN yarn cache clean
RUN yarn install --network-timeout 1000000000
@@ -142,75 +138,6 @@ docker compose up -d # --build
docker compose logs <container-name>
```
## Without Docker / Docker compose
One way to run all the apps together without Docker is by using
[PM2](https://pm2.keymetrics.io/) in this setup. The configuration and usage is
very simple and just needs one configuration file for it. You can run the apps
both in dev server mode as well as static files.
The below configuration will run the apps in dev server mode.
### Install PM2
```sh
npm install pm2@latest
```
Copy the below contents to a file called `ecosystem.config.js` inside the
`ente/web` directory.
```js
module.exports = {
apps: [
{
name: "photos",
script: "yarn workspace photos next dev",
env: {
NODE_ENV: "development",
PORT: "3000"
}
},
{
name: "accounts",
script: "yarn workspace accounts next dev",
env: {
NODE_ENV: "development",
PORT: "3001"
}
},
{
name: "auth",
script: "yarn workspace auth next dev",
env: {
NODE_ENV: "development",
PORT: "3002"
}
},
{
name: "cast",
script: "yarn workspace cast next dev",
env: {
NODE_ENV: "development",
PORT: "3003"
}
}
]
};
```
Finally, start pm2.
```sh
pm2 start
# for logs
pm2 logs all
```
## Configure App Endpoints
> [!NOTE]

View File

@@ -14,7 +14,34 @@ the same code we use for our own cloud service.
> [blog post](https://ente.io/blog/open-sourcing-our-server/) announcing the
> open sourcing of our server useful.
## Getting started
## Getting started - Quickstart
Install [Docker](https://www.docker.com). Then, paste the following command in a
your terminal:
```sh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ente-io/ente/main/server/quickstart.sh)"
```
> [!TIP]
>
> For more details about what this does, see [the quickstart
> README](https://github.com/ente-io/ente/blob/main/server/docs/quickstart.md).
That's about it. If you open http://localhost:3000, you will be able to create
an account on a Ente Photos web app running on your machine, and this web app
will be connecting to the server running on your local machine at
`localhost:8080`. The verification code will be shown in the server logs.
For the mobile or desktop apps, you don't even need to build, and can install
normal Ente apps and configure them to use your
[custom self-hosted server](guides/custom-server/).
## Getting started - From source
The quickstart method above uses pre-built images. Alternatively, if you want to
build the self hosted server images from source, you can use the steps in this
section.
#### Installing Docker
@@ -30,11 +57,6 @@ cd ente/server
docker compose up --build
```
> [!TIP]
>
> You can also use a pre-built Docker image from `ghcr.io/ente-io/server`
> ([More info](https://github.com/ente-io/ente/blob/main/server/docs/docker.md))
Install the necessary dependencies for running the web client
```sh
@@ -53,15 +75,6 @@ yarn install
NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 yarn dev
```
That's about it. If you open http://localhost:3000, you will be able to create
an account on a Ente Photos web app running on your machine, and this web app
will be connecting to the server running on your local machine at
`localhost:8080`.
For the mobile apps, you don't even need to build, and can install normal Ente
apps and configure them to use your
[custom self-hosted server](guides/custom-server/).
> If you want to build the mobile apps from source, see the instructions
> [here](guides/mobile-build).

View File

@@ -0,0 +1,72 @@
---
title: Docker errors
description: Fixing docker related errors when trying to self host Ente
---
# Docker
## configs
Remember to restart your cluster to ensure changes that you make in the
`configs` section in `compose.yaml` get picked up.
```sh
docker compose down
docker compose up
```
## post_start
The `server/compose.yaml` Docker compose file uses the "post_start" lifecycle
hook to provision the MinIO instance.
The lifecycle hook **requires Docker Compose version 2.30.0+**, and if you're
using an older version of docker compose you will see an error like this:
```
validating compose.yaml: services.minio Additional property post_start is not allowed
```
The easiest way to resolve this is to upgrade your Docker compose.
If you cannot update your Docker compose version, then alternatively you can
perform the same configuration by removing the "post_start" hook, and adding a
new service definition:
```yaml
minio-provision:
image: minio/mc
depends_on:
- minio
volumes:
- minio-data:/data
networks:
- internal
entrypoint: |
sh -c '
#!/bin/sh
while ! mc config host add h0 http://minio:3200 changeme changeme1234
do
echo "waiting for minio..."
sleep 0.5
done
cd /data
mc mb -p b2-eu-cen
mc mb -p wasabi-eu-central-2-v3
mc mb -p scw-eu-fr-v3
'
```
## start_interval
Similar to the `post_start` case above, if you are seeing an error like
```
services.postgres.healthcheck Additional property start_interval is not allowed
```
You will need to upgrade your Docker compose version to a newer version that
supports the `start_interval` property on the health check.

View File

@@ -5,7 +5,8 @@ description: Fixing yarn install errors when trying to self host Ente
# Yarn
If your `yarn install` is failing, make sure you are using Yarn Classic
If your `yarn install` is failing, make sure you are using Yarn v1 (also known
as "Yarn Classic"):
- https://classic.yarnpkg.com/lang/en/docs/install

View File

@@ -2,6 +2,7 @@ plugins {
id "com.android.application"
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
id 'org.jetbrains.kotlin.plugin.serialization' version '2.1.10'
}
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
@@ -81,10 +82,6 @@ android {
dimension "default"
applicationIdSuffix ".dev"
}
face {
dimension "default"
applicationIdSuffix ".face"
}
playstore {
dimension "default"
}
@@ -137,7 +134,8 @@ flutter {
dependencies {
implementation 'io.sentry:sentry-android:2.0.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.21"
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.21'
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0'
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
implementation 'com.microsoft.onnxruntime:onnxruntime-android:1.8.1'

View File

@@ -1,5 +1,27 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="io.ente.photos">
<!-- Adding the following block to prevent the app from having multiple
launcher entries. We can remove this along with the `LAUNCHER` category from
main/AndroidManifest.xml once
https://github.com/flutter/flutter/issues/38965 is fixed. -->
<application>
<activity android:name=".MainActivity"
android:launchMode="singleTask"
android:theme="@style/LaunchTheme"
android:exported="true"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER" tools:node="remove"/>
</intent-filter>
</activity>
</application>
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->

View File

@@ -1,10 +0,0 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="io.ente.photos">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

View File

@@ -1,4 +0,0 @@
<resources>
<string name="app_name">Ente Face</string>
<string name="backup">backup face</string>
</resources>

View File

@@ -1,4 +1,25 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
package="io.ente.photos">
<!-- Adding the following block to prevent the app from having multiple
launcher entries. We can remove this along with the `LAUNCHER` category from
main/AndroidManifest.xml once
https://github.com/flutter/flutter/issues/38965 is fixed. -->
<application>
<activity android:name=".MainActivity"
android:launchMode="singleTask"
android:theme="@style/LaunchTheme"
android:exported="true"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER" tools:node="remove"/>
</intent-filter>
</activity>
</application>
<uses-permission android:name="com.android.vending.BILLING" tools:node="remove"/>
</manifest>

View File

@@ -0,0 +1,24 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="io.ente.photos">
<!-- Adding the following block to prevent the app from having multiple
launcher entries. We can remove this along with the `LAUNCHER` category from
main/AndroidManifest.xml once
https://github.com/flutter/flutter/issues/38965 is fixed. -->
<application>
<activity android:name=".MainActivity"
android:launchMode="singleTask"
android:theme="@style/LaunchTheme"
android:exported="true"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER" tools:node="remove"/>
</intent-filter>
</activity>
</application>
</manifest>

View File

@@ -3,7 +3,7 @@
package="io.ente.photos">
<application android:name="${applicationName}"
android:label="@string/app_name"
android:icon="@mipmap/launcher_icon"
android:icon="@mipmap/icon_green"
android:usesCleartextTraffic="true"
android:requestLegacyExternalStorage="true"
android:allowBackup="false"
@@ -17,8 +17,11 @@
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="es.antonborri.home_widget.action.LAUNCH" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@@ -85,6 +88,50 @@
</intent-filter>
</activity>
<activity-alias
android:name="${applicationId}.IconGreen"
android:icon="@mipmap/icon_green"
android:enabled="true"
android:exported="true"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity-alias>
<activity-alias
android:name="${applicationId}.IconLight"
android:icon="@mipmap/icon_light"
android:enabled="false"
android:exported="true"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity-alias>
<activity-alias
android:name="${applicationId}.IconDark"
android:icon="@mipmap/icon_dark"
android:enabled="false"
android:exported="true"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity-alias>
<activity-alias
android:name="${applicationId}.IconOG"
android:icon="@mipmap/icon_og"
android:enabled="false"
android:exported="true"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity-alias>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
@@ -96,12 +143,12 @@
android:value="https://2235e5c99219488ea93da34b9ac1cb68@sentry.ente.io/4" />
<meta-data android:name="firebase_analytics_collection_deactivated"
android:value="true" />
<receiver android:name="SlideshowWidgetProvider" android:label="Favorites" android:exported="true">
<receiver android:name="EnteMemoryWidgetProvider" android:label="Memories" android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/slideshow_widget" />
android:resource="@xml/memory_widget" />
</receiver>
</application>

View File

@@ -0,0 +1,198 @@
package io.ente.photos
import android.appwidget.AppWidgetManager
import android.content.Context
import android.content.SharedPreferences
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.drawable.BitmapDrawable
import android.net.Uri
import android.util.Log
import android.view.View
import android.widget.RemoteViews
import androidx.core.content.ContextCompat
import es.antonborri.home_widget.HomeWidgetLaunchIntent
import es.antonborri.home_widget.HomeWidgetProvider
import java.io.File
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
@Serializable
data class MemoryFileData(val title: String?, val subText: String?, val generatedId: Int?)
class EnteMemoryWidgetProvider : HomeWidgetProvider() {
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray,
widgetData: SharedPreferences
) {
appWidgetIds.forEach { widgetId ->
val views =
RemoteViews(context.packageName, R.layout.memory_widget_layout)
.apply {
val totalMemories =
widgetData.getInt("totalMemories", 0)
var randomNumber = -1
var imagePath: String? = null
if (totalMemories > 0) {
randomNumber =
(0 until totalMemories!!).random()
imagePath =
widgetData.getString(
"memory_widget_" +
randomNumber,
null
)
}
var imageExists: Boolean = false
if (imagePath != null) {
val imageFile = File(imagePath)
imageExists = imageFile.exists()
}
if (imageExists) {
val data =
widgetData.getString(
"memory_widget_${randomNumber}_data",
null
)
val decoded: MemoryFileData? =
data?.let {
Json.decodeFromString<
MemoryFileData>(it)
}
val title = decoded?.title
val subText = decoded?.subText
val generatedId = decoded?.generatedId
val deepLinkUri =
Uri.parse(
"memorywidget://message?generatedId=${generatedId}&homeWidget"
)
val pendingIntent =
HomeWidgetLaunchIntent.getActivity(
context,
MainActivity::class.java,
deepLinkUri
)
setOnClickPendingIntent(
R.id.widget_container,
pendingIntent
)
Log.d(
"EnteMemoryWidgetProvider",
"Image exists: $imagePath"
)
setViewVisibility(
R.id.widget_img,
View.VISIBLE
)
setViewVisibility(
R.id.widget_placeholder_container,
View.VISIBLE
)
setViewVisibility(
R.id.widget_subtitle,
View.VISIBLE
)
setViewVisibility(
R.id.widget_title,
View.VISIBLE
)
setViewVisibility(
R.id.widget_overlay,
View.VISIBLE
)
setViewVisibility(
R.id.widget_placeholder,
View.GONE
)
setViewVisibility(
R.id.widget_placeholder_text,
View.GONE
)
setViewVisibility(
R.id.widget_placeholder_container,
View.GONE
)
val bitmap: Bitmap =
BitmapFactory.decodeFile(imagePath)
setImageViewBitmap(R.id.widget_img, bitmap)
setTextViewText(R.id.widget_title, title)
setTextViewText(
R.id.widget_subtitle,
subText
)
} else {
// Open App on Widget Click
val pendingIntent =
HomeWidgetLaunchIntent.getActivity(
context,
MainActivity::class.java
)
setOnClickPendingIntent(
R.id.widget_container,
pendingIntent
)
Log.d(
"EnteMemoryWidgetProvider",
"Image doesn't exists"
)
setViewVisibility(
R.id.widget_img,
View.GONE
)
setViewVisibility(
R.id.widget_placeholder_container,
View.GONE
)
setViewVisibility(
R.id.widget_subtitle,
View.GONE
)
setViewVisibility(
R.id.widget_title,
View.GONE
)
setViewVisibility(
R.id.widget_overlay,
View.GONE
)
setViewVisibility(
R.id.widget_placeholder,
View.VISIBLE
)
setViewVisibility(
R.id.widget_placeholder_text,
View.VISIBLE
)
setViewVisibility(
R.id.widget_placeholder_container,
View.VISIBLE
)
val drawable =
ContextCompat.getDrawable(
context,
R.drawable
.ic_home_widget_default
)
val bitmap =
(drawable as BitmapDrawable).bitmap
setImageViewBitmap(
R.id.widget_placeholder,
bitmap
)
}
}
appWidgetManager.updateAppWidget(widgetId, views)
}
}
}

View File

@@ -1,67 +0,0 @@
package io.ente.photos
import android.appwidget.AppWidgetManager
import android.content.Context
import android.content.SharedPreferences
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.drawable.BitmapDrawable
import android.util.Log
import android.view.View
import android.widget.RemoteViews
import androidx.core.content.ContextCompat
import es.antonborri.home_widget.HomeWidgetLaunchIntent
import es.antonborri.home_widget.HomeWidgetProvider
import java.io.File
class SlideshowWidgetProvider : HomeWidgetProvider() {
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray,
widgetData: SharedPreferences
) {
appWidgetIds.forEach { widgetId ->
val views =
RemoteViews(context.packageName, R.layout.slideshow_layout).apply {
// Open App on Widget Click
val pendingIntent =
HomeWidgetLaunchIntent.getActivity(
context,
MainActivity::class.java
)
setOnClickPendingIntent(R.id.widget_container, pendingIntent)
// Show Images saved with `renderFlutterWidget`
val imagePath = widgetData.getString("slideshow", null)
var imageExists: Boolean = false
if (imagePath != null) {
val imageFile = File(imagePath)
imageExists = imageFile.exists()
}
if (imageExists) {
Log.d("SlideshowWidgetProvider", "Image exists: $imagePath")
setViewVisibility(R.id.widget_img, View.VISIBLE)
setViewVisibility(R.id.widget_placeholder, View.GONE)
val bitmap: Bitmap = BitmapFactory.decodeFile(imagePath)
setImageViewBitmap(R.id.widget_img, bitmap)
} else {
Log.d("SlideshowWidgetProvider", "Image doesn't exists")
setViewVisibility(R.id.widget_img, View.GONE)
setViewVisibility(R.id.widget_placeholder, View.VISIBLE)
val drawable =
ContextCompat.getDrawable(
context,
R.drawable.ic_home_widget_default
)
val bitmap = (drawable as BitmapDrawable).bitmap
setImageViewBitmap(R.id.widget_placeholder, bitmap)
}
}
appWidgetManager.updateAppWidget(widgetId, views)
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 B

After

Width:  |  Height:  |  Size: 69 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 B

After

Width:  |  Height:  |  Size: 69 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 69 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

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