Compare commits

...

2086 Commits

Author SHA1 Message Date
Manav Rathi
e8c6c88f64 [desktop] Update translation (#2765) 2024-08-20 21:21:01 +05:30
Manav Rathi
f2f4bf2fd7 [desktop] Update translation 2024-08-20 21:13:56 +05:30
Ashil
019457be02 [mob][auth] Option to add pin/passcode without having a system lock (#2738) 2024-08-20 19:36:10 +05:30
Ashil
73b7b2e190 [mob][auth] local_auth upgrade & work around for new applock key (#2752) 2024-08-20 18:11:06 +05:30
Aman Raj Singh Mourya
eb568080dd [mob][auth] Used better names 2024-08-20 15:56:40 +05:30
Manav Rathi
fe82faf80f [doc] Large upload troubleshooting (#2761) 2024-08-20 11:28:36 +05:30
Manav Rathi
00eb440c01 [doc] Large upload troubleshooting 2024-08-20 11:26:10 +05:30
Manav Rathi
38662f6b6c [web] New translations (#2760)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-08-20 10:59:26 +05:30
Crowdin Bot
029b43b13d New Crowdin translations by GitHub Action 2024-08-20 05:29:06 +00:00
Manav Rathi
468d429ecc Add workaround for Polish plurals (#2759)
Instead of foo_other, i18n seems to fallback to the base language
translation for languages like Polish that have multiple plurals.

Use the workaround mentioned here:
https://github.com/i18next/i18next/issues/1851#issuecomment-1464017036
2024-08-20 10:46:35 +05:30
Manav Rathi
19c6ebefd3 Add note 2024-08-20 10:45:20 +05:30
Manav Rathi
5cd093c413 Add workaround for Polish plurals
Instead of foo_other, i18n seems to fallback to the base language translation
for languages like Polish that have multiple plurals.

Use the workaround mentioned here: https://github.com/i18next/i18next/issues/1851#issuecomment-1464017036
2024-08-20 10:37:18 +05:30
Manav Rathi
8fed43ec00 [web] New translations (#2758)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-08-20 10:26:57 +05:30
Crowdin Bot
6ba92298dd New Crowdin translations by GitHub Action 2024-08-20 04:49:15 +00:00
Manav Rathi
88d6f78741 [web] Further refactoring of the crypto layering (#2755)
\+ tweaks to the indexing process
2024-08-19 21:20:27 +05:30
Manav Rathi
0a35291084 Lint fix 2024-08-19 21:16:00 +05:30
Manav Rathi
adefb78cac Updated Mastodon links (#2754)
Changed the links in the social section and readme to Fosstodon instead
of mstdn
2024-08-19 21:08:43 +05:30
Brogio
8c5b07b3ce Update README.md 2024-08-19 17:14:31 +02:00
Brogio
8d667f86b1 Update social_section_widget.dart 2024-08-19 17:10:50 +02:00
Brogio
f7666deb5a Update social_section_widget.dart
Updated Mastodon link
2024-08-19 17:10:07 +02:00
Aman Raj Singh Mourya
1323525cd8 [mob][auth] Independent applock implemented 2024-08-19 18:59:03 +05:30
Aman Raj Singh Mourya
f84054b4ce [mob][auth] macOS pin/passcode support 2024-08-19 17:36:04 +05:30
Aman Raj Singh Mourya
bc94882234 [mob][auth] Upgraded local_auth 2.2.0 -> 2.3.0 2024-08-19 17:34:50 +05:30
Aman Raj Singh Mourya
95a03ef86d [mob][auth] Minor fixes 2024-08-19 17:06:48 +05:30
Aman Raj Singh Mourya
48c29700a4 [mob][auth] Work around for new applock key 2024-08-19 16:47:47 +05:30
Manav Rathi
d7d5b0aa9b [web] New translations (#2750)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-08-19 16:29:23 +05:30
Manav Rathi
63d65a4311 Expose decryptBlob to main thread 2024-08-19 15:55:07 +05:30
Manav Rathi
d6151a89e8 Fix 2024-08-19 15:46:52 +05:30
Manav Rathi
e6f26e62ae Fix jumping 2024-08-19 15:40:57 +05:30
Manav Rathi
3f9a7e08a1 Better state during initial load 2024-08-19 15:36:30 +05:30
Manav Rathi
c39fcb3968 Use 2024-08-19 15:19:26 +05:30
Manav Rathi
c0e48c7ada keygen 2024-08-19 15:19:26 +05:30
Manav Rathi
62c32d02ce Start treating it as a gateway 2024-08-19 15:19:26 +05:30
Manav Rathi
5640086932 Remove unnecessary conversion attempt 2024-08-19 15:19:26 +05:30
Crowdin Bot
b443d5f472 New Crowdin translations by GitHub Action 2024-08-19 09:44:48 +00:00
Manav Rathi
81b913cb79 [desktop] Indexing tweaks (#2749) 2024-08-19 15:14:05 +05:30
Manav Rathi
769b3ab21f i18n 2024-08-19 15:05:31 +05:30
Manav Rathi
a43c0baa46 Avoid non-greppable context APIs for i18n 2024-08-19 15:00:49 +05:30
Manav Rathi
d7fb8cf82b Handle the idle transition in the UI 2024-08-19 14:56:01 +05:30
Manav Rathi
d96d4773cf Fix status during live uploads 2024-08-19 14:42:46 +05:30
Manav Rathi
cf3b757021 Most recent file IDs first 2024-08-19 14:31:51 +05:30
Manav Rathi
fed7864b11 Fetching state 2024-08-19 13:49:36 +05:30
Neeraj Gupta
60cee41a44 [auth] New translations (#2746)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-08-19 12:14:15 +05:30
Ashil
8e3183ed8f [mob][photos] Workaround for android 10 free up space issue (#2637) 2024-08-19 11:51:23 +05:30
Manav Rathi
c4b47dcc14 [web] New translations (#2744)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-08-19 09:55:55 +05:30
Neeraj Gupta
2856bfb7f4 [mobile] New translations (#2745)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-08-19 07:19:08 +05:30
Crowdin Bot
6bdafc0ed2 New Crowdin translations by GitHub Action 2024-08-19 01:16:45 +00:00
Crowdin Bot
21764a520f New Crowdin translations by GitHub Action 2024-08-19 01:04:15 +00:00
Crowdin Bot
4a19bfdcde New Crowdin translations by GitHub Action 2024-08-19 00:31:56 +00:00
Vishnu Mohandas
3d41b555b6 fix: fdroid icon background (#2741)
## Description

Fdroid icon for auth was white, whilst we have already moved to purple
gradient. This PR adds the same adaptive background for fdroid as it is
for normal build.

The below Fdroid build recipe regenerates the icons that's why it was
not correct before:

3bbf65e8f0/metadata/io.ente.auth.yml (L58)
2024-08-18 22:19:33 +05:30
Prateek Sunal
92e0d82123 fix: fdroid icon background 2024-08-18 22:16:09 +05:30
Neeraj Gupta
9b9c7e91f4 [mob] use blur instead of blurhash in panorama (#2739)
## Description

Blurhash was not perfect, so replaced it with gaussian blur (20)
instead.

## Tests
2024-08-18 07:56:50 +05:30
Prateek Sunal
0c94613fdf Merge remote-tracking branch 'origin/main' into mob-pano 2024-08-17 22:36:37 +05:30
Prateek Sunal
54c699b6d5 fix: use blur instead of blurhash in panorama 2024-08-17 22:36:01 +05:30
Manav Rathi
d3f3679fb0 [web] Iterate on the cluster related crypto (#2737) 2024-08-17 22:18:30 +05:30
Manav Rathi
505dc7c20d Fix 2024-08-17 22:03:52 +05:30
Manav Rathi
8601662ea1 Un2 2024-08-17 21:51:50 +05:30
Manav Rathi
08c3b172d9 Update types 2024-08-17 21:49:39 +05:30
Manav Rathi
76da94cf78 Add the variant 2024-08-17 21:42:13 +05:30
Manav Rathi
0240b37032 Denoise 2024-08-17 21:33:15 +05:30
Manav Rathi
9ae5006a4a Mig 2024-08-17 21:30:54 +05:30
Manav Rathi
0ee84db02f Mig 2024-08-17 21:29:40 +05:30
Manav Rathi
b329085940 Mig 2024-08-17 21:25:57 +05:30
Manav Rathi
de3943e69c Prune 2024-08-17 21:22:54 +05:30
Manav Rathi
069cf82bbb Mig 2024-08-17 21:21:09 +05:30
Manav Rathi
eafa662cc0 Prune 2024-08-17 21:13:48 +05:30
Manav Rathi
6488c4fa0e Sigh 2024-08-17 21:10:11 +05:30
Manav Rathi
25f1087685 Unused 2024-08-17 21:05:49 +05:30
Manav Rathi
788ce53388 Use 2024-08-17 21:04:02 +05:30
Manav Rathi
757ff5cd9a New 2024-08-17 21:02:34 +05:30
Manav Rathi
68e5d842e5 Tweak 2024-08-17 20:57:20 +05:30
Manav Rathi
fdfaadfb1e Use 2024-08-17 20:56:05 +05:30
Manav Rathi
0fcd21f61d Use 2024-08-17 20:53:10 +05:30
Manav Rathi
4fa3b177c6 Use 2024-08-17 20:48:41 +05:30
Manav Rathi
2775917e44 Parallel hierarchy 2024-08-17 20:45:17 +05:30
Manav Rathi
360113c3ac Use newer pattern in more places 2024-08-17 20:21:49 +05:30
Aman Raj Singh Mourya
f338e40876 [mob][auth] Option to add pin/passcode without a having a systemLock 2024-08-17 19:48:06 +05:30
Aman Raj Singh Mourya
3a4246b82d [mob][auth] Added key to check if appLock is set or not 2024-08-17 19:47:10 +05:30
Aman Raj Singh Mourya
fbc6137b3e [mob][auth] Directly route to appLock in case of no systemLock found 2024-08-17 19:33:54 +05:30
Manav Rathi
5c09359738 Remove unnecessary conversion 2024-08-17 18:54:50 +05:30
Manav Rathi
90ffb68b51 key variants too 2024-08-17 18:53:00 +05:30
Manav Rathi
d1b7177a53 We need both 2024-08-17 18:49:41 +05:30
Manav Rathi
890ed7dd4b Cleanup 2024-08-17 18:43:31 +05:30
Manav Rathi
25b9a36554 Fix
crypto_secretbox_easy takes a string, but that's a UTF-8 string, not the base64 one that we're looking for.
2024-08-17 18:30:37 +05:30
Manav Rathi
cf6508be4a Enc 2024-08-17 17:33:22 +05:30
Manav Rathi
153be4990a Rearrange 2024-08-17 17:13:16 +05:30
Manav Rathi
f3e947f47e Match the types 2024-08-17 17:10:06 +05:30
Manav Rathi
f0b86323c3 Attempt to curb the combinatorial explosion 2024-08-17 17:00:47 +05:30
Manav Rathi
dbe98acbd7 Dec 2024-08-17 16:38:51 +05:30
Manav Rathi
93d48f6d6f Fix 2024-08-17 11:14:02 +05:30
Manav Rathi
d91462773a Use same nomenclature as the architecture document 2024-08-17 11:07:11 +05:30
Manav Rathi
3962f3a133 Use same nomenclature as the architecture document 2024-08-17 11:07:11 +05:30
Manav Rathi
bc192e5b00 Hold remote to the delete invariant 2024-08-17 11:07:11 +05:30
Manav Rathi
462adf7429 Nomenclature 2024-08-17 11:07:11 +05:30
Neeraj Gupta
78a727c750 [auth] Improve recovery input validation (#2735)
## Description

## Tests
2024-08-17 06:57:58 +05:30
Neeraj Gupta
3676151dde [auth] Bump version 3.1.2 2024-08-17 06:52:04 +05:30
Neeraj Gupta
9f23403604 Use word position 2024-08-17 06:51:16 +05:30
Neeraj Gupta
eace1150f5 [auth] Improve error message for invalid recovery input 2024-08-17 06:46:53 +05:30
Manav Rathi
191e32463f [desktop] Hide People header until we start showing clusters (#2730) 2024-08-16 18:10:12 +05:30
Manav Rathi
0a59597301 Padding at the top 2024-08-16 18:07:22 +05:30
Manav Rathi
f89e3793ec Hide People header until we start showing clusters 2024-08-16 17:59:26 +05:30
Manav Rathi
201b2eda67 [desktop] Improve robustness of cluster disabling condition (#2729)
Otherwise the code reaches the isInternalUser on logout, triggered by
the search service, and at a point when it does not have the auth token
anymore. Doesn't impact production builds, but doesn't hurt to make the
check more robust say for people who're trying dev builds.
2024-08-16 17:47:58 +05:30
Manav Rathi
c5ee50b3a2 [desktop] Improve robustness of cluster disabling condition
Otherwise the code reaches the isInternalUser on logout, triggered by the search
service, and at a point when it does not have the auth token anymore. Doesn't
impact production builds, but doesn't hurt to make the check more robust say for
people who're trying dev builds.
2024-08-16 17:41:13 +05:30
Manav Rathi
b5b4d1df65 [web] Crypto: Use Box vs Blob to classify secretbox vs secretstream-one-shot (#2728) 2024-08-16 17:37:11 +05:30
Manav Rathi
2d5faa3964 Dec 2024-08-16 17:05:39 +05:30
Manav Rathi
371fda4e97 B64 2024-08-16 16:51:38 +05:30
Manav Rathi
44bdb016a8 Swap 2024-08-16 16:34:06 +05:30
Manav Rathi
763d9727e6 Dec 2024-08-16 16:26:44 +05:30
Manav Rathi
38d39c123d Dec types 2024-08-16 16:21:48 +05:30
Manav Rathi
3b0ec7ce71 Use 2024-08-16 16:06:15 +05:30
Manav Rathi
2e0ad673cf B64 variant 2024-08-16 16:03:13 +05:30
Manav Rathi
0de05fdc36 Remove duplication 2024-08-16 16:00:04 +05:30
Vishnu Mohandas
a19e4879db Update Google Photos Takeout Instructions (#2648)
Simplify instructions
Remove note
Expand step 9 to incorporate note

## Description
Raises an important caveat closer to a relevant step. 
## Tests
N/A
2024-08-16 15:58:18 +05:30
Manav Rathi
fcad2157bc Update 2024-08-16 15:53:16 +05:30
Manav Rathi
94a40838a3 Box variant 2024-08-16 15:48:36 +05:30
Manav Rathi
54efdd1072 Use existing primitive 2024-08-16 15:48:36 +05:30
Manav Rathi
797dcc4a1e Streamline 2024-08-16 15:48:36 +05:30
Manav Rathi
ed6dc3ca6c Tweak 2024-08-16 15:48:36 +05:30
Manav Rathi
4fda7c3c86 Move 2024-08-16 15:48:36 +05:30
Manav Rathi
cbb36214a3 New terms 2024-08-16 15:48:36 +05:30
Manav Rathi
7e03462891 Terminology 2024-08-16 15:48:36 +05:30
Manav Rathi
f37220bf20 Terminology 2024-08-16 15:48:35 +05:30
Manav Rathi
1a6ae93a7a More 2024-08-16 15:48:35 +05:30
Manav Rathi
5e67bf90c5 Outline 2024-08-16 15:48:35 +05:30
Manav Rathi
89fd65d925 [desktop] person => cgroup (#2727)
https://github.com/ente-io/ente/pull/2718
2024-08-16 15:45:54 +05:30
Manav Rathi
ddf530f236 sync 2024-08-16 15:29:53 +05:30
Manav Rathi
3bc41f253b Propagate 2024-08-16 15:22:02 +05:30
Manav Rathi
2ae98148ae Fin db 2024-08-16 15:19:43 +05:30
Manav Rathi
3f20f572d2 Propagate 2024-08-16 15:16:58 +05:30
Manav Rathi
f5738f8460 CGroup 2024-08-16 15:07:09 +05:30
Manav Rathi
4f0145e6d3 Remove unused 2024-08-16 14:32:29 +05:30
Manav Rathi
37bbefa16b [desktop] Sync ML status immediately on login (#2726) 2024-08-16 14:24:04 +05:30
Manav Rathi
e3d7b14442 Use 2024-08-16 14:05:14 +05:30
Manav Rathi
b04831d4df Split ML status sync 2024-08-16 13:34:19 +05:30
Manav Rathi
b9102a4074 [web] Log during logout (#2723)
Helps in tracing event sequences in logs.
2024-08-16 13:17:19 +05:30
Neeraj Gupta
d94f8be520 [mob] Bypass map permission dialog if already given (#2722)
## Description

## Tests
2024-08-16 13:15:03 +05:30
Neeraj Gupta
811aba2baf [mob] Remove unused field 2024-08-16 13:14:24 +05:30
Manav Rathi
a31a761933 [web] Log during logout
Helps in tracing event sequences in logs
2024-08-16 13:08:00 +05:30
Neeraj Gupta
c69280a3d7 [mob] ios build change 2024-08-16 13:06:02 +05:30
Neeraj Gupta
32fa1b1466 [mob]Bypass map permission dialog if already given 2024-08-16 13:05:51 +05:30
Neeraj Gupta
b88b81615d [server] Enable multi-part upload flag for mobile (#2721)
## Description

## Tests
2024-08-16 12:27:50 +05:30
Neeraj Gupta
741107e950 [server] Enable multi-part upload flag for mobile 2024-08-16 12:27:10 +05:30
Manav Rathi
4dbf8cbd54 [docs] Add note about avoiding NAS (#2720) 2024-08-16 12:19:16 +05:30
Manav Rathi
6627faed8c Add sidebar entry 2024-08-16 12:18:58 +05:30
Manav Rathi
29b81a468c [docs] Add note about avoiding NAS 2024-08-16 12:16:16 +05:30
Neeraj Gupta
10087c3cc0 [server] Switch to nano_id for entity_data (#2718)
## Description

## Tests
Tested locally that new location tag were getting created, and we are
able to delete or edit existing tag.
2024-08-16 12:10:23 +05:30
Neeraj Gupta
175fe103e5 rename 2024-08-16 11:56:41 +05:30
Neeraj Gupta
c759d37fd3 Add entity type validation 2024-08-16 11:40:31 +05:30
Neeraj Gupta
05df5962ef Use nanoId for entity_data.id 2024-08-16 11:10:28 +05:30
Neeraj Gupta
9f043eba24 [server] Change entity_data.id from uuid to string 2024-08-16 10:30:18 +05:30
Ashil
b35b6a5983 [mob][photos] Remove feature flag from panorama viewer feature (#2715) 2024-08-16 10:28:36 +05:30
Ashil
2fe45ff10f [mob][photos] Add more logs on deleting local files (#2713) 2024-08-16 10:28:24 +05:30
ashilkn
c599ca2d80 [mob][photos] Remove feature flag from panorama viewer feature 2024-08-16 09:44:50 +05:30
Manav Rathi
27b20b4fc7 [docs] Mention Firefox jitter in auth FAQ (#2714) 2024-08-16 09:43:02 +05:30
Manav Rathi
4028041c90 Update README.md (#2705)
I updated the sentence "Ente Photos is a paid service, but we offer a
free trial. You can also clone this repository and choose to self host."
to reflect that Ente now offers a permanent free option with 5GB of free
storage.
2024-08-16 09:42:22 +05:30
Manav Rathi
53a292f97d yarn pretty 2024-08-16 09:40:46 +05:30
Manav Rathi
eff5b4fef4 Mention in FAQ
https://github.com/ente-io/ente/issues/2657#issuecomment-2283088810
2024-08-16 09:39:36 +05:30
ashilkn
a999eddbfe [mob][photos] Add more logs on deleting local files 2024-08-16 09:36:56 +05:30
Neeraj Gupta
555f23a519 [cli] Fix temp file deletion on windows (#2712)
## Description

## Tests
2024-08-16 09:20:04 +05:30
Neeraj Gupta
1fd238a89a [cli] Fix temp file deletion on windows 2024-08-16 09:19:26 +05:30
Vishnu Mohandas
ed1ee18e74 Update icon for Panorama view (#2710) 2024-08-15 19:18:23 +05:30
vishnukvmd
ddcc93c692 Update icon for Panorama view 2024-08-15 18:52:25 +05:30
Vishnu Mohandas
0e81dfb31a [docs] Minor update (#2709) 2024-08-15 17:35:32 +05:30
vishnukvmd
3418e69b95 [docs] Minor update 2024-08-15 17:34:36 +05:30
Vishnu Mohandas
ea18da295e [mob] Bump version 2024-08-15 17:26:09 +05:30
Brogio
d0e77e1673 Update README.md
Removed free trial
2024-08-14 17:29:20 +02:00
Ashil
f638b41508 [mob][photos] Use native video player (#2700)
## Description

- Use (Native video
player)[https://pub.dev/packages/native_video_player] for video
playback. With this, HDR videos can be played without tone-mapping to
SDR, preserving the full HDR quality and dynamic range.
**Note**: HDR will be supported only if the device supports it. Also,
only video formats that are supported by the device will be playable.
- Better UX/UX for video player.
- Also see #2694 
- Closes #1350 #832 #1166 



https://github.com/user-attachments/assets/f62bdff6-3218-4314-bd8b-651a6a3f8586



## Tests

- Tested playback on both iOS and Android devices with remote, local and
shared media videos.
2024-08-14 18:11:10 +05:30
Ashil
a5c0ae81bf [mob][photos] Update android target SDK (#2675)
No behavioural changes added in API level 34 

https://developer.android.com/reference/android/os/Build.VERSION_CODES#VANILLA_ICE_CREAM


https://medium.com/androiddevelopers/picking-your-compilesdkversion-minsdkversion-targetsdkversion-a098a0341ebd#.fo6h6k65r

Looks safe to update without testing.
2024-08-14 18:10:57 +05:30
Ashil
46e585dbf7 [mob][photos] Fix Safe area issues (#2703) 2024-08-14 17:33:45 +05:30
ashilkn
d2536241f7 [mob][photos] chore 2024-08-14 17:32:26 +05:30
ashilkn
ecbd2b4480 [mob][photos] Fix safearea issues 2024-08-14 17:21:23 +05:30
Neeraj Gupta
37dec0018c [cli] Skip export with bad time stamp (#2702)
## Description

## Tests
2024-08-14 17:14:51 +05:30
Neeraj Gupta
39e505a3ec update docs 2024-08-14 17:14:35 +05:30
Neeraj Gupta
ae98af9f8c bump cli version 2024-08-14 17:12:49 +05:30
Neeraj Gupta
5bd7170755 [cli] Fix error log 2024-08-14 17:11:13 +05:30
Neeraj Gupta
ab17ae71d0 [cli] Continue export on bad timestamp marshal error 2024-08-14 17:10:58 +05:30
ashilkn
f40f39984a [mob][photos] Fix safearea issues 2024-08-14 16:53:22 +05:30
Neeraj Gupta
fda7722adb [mob] Add option under advance settings to enable multi part upload (#2697)
## Description

## Tests
- Verified that by turning off the flag from server, we are not seeing
the option to enable multi part upload.
2024-08-14 16:36:23 +05:30
Neeraj Gupta
4fc1d708b9 [server] Add auth key validation (#2696)
## Description
This avoids the 5xx error for authEntity which happens when we try to
create an auth entity without reporting the corresponding key

## Tests
2024-08-14 16:35:42 +05:30
Manav Rathi
efb89e710c [desktop] Clustering WIP - Part 2/x (#2701) 2024-08-14 16:06:17 +05:30
Neeraj Gupta
359572f4b2 Remove keyValidation from diff 2024-08-14 16:05:22 +05:30
Manav Rathi
5d9d3457ec [server] Use the go.sum cache during CI lint (#2699)
Unrelated to the lint failures, I noticed that we were not using the
go.sum file during the lint steps.
2024-08-14 16:02:27 +05:30
ashilkn
1e3a726eaa [mob] Fix 'skip' button being under navigation bar 2024-08-14 15:52:34 +05:30
Manav Rathi
e21a4b4f9e Handle deleted better 2024-08-14 15:39:04 +05:30
ashilkn
0753b59e4a [mob][photos] Pause new video player if app is not in fg 2024-08-14 15:34:14 +05:30
Manav Rathi
e946749b2e Fixes for person v2 2024-08-14 15:29:28 +05:30
Manav Rathi
b6b87c196f Update comment 2024-08-14 15:20:05 +05:30
Manav Rathi
367a715aa8 Reduce CLIP threshold to 0.175 2024-08-14 15:19:10 +05:30
Manav Rathi
6a8fe71000 Extra 2024-08-14 14:38:33 +05:30
Manav Rathi
bb56fddd45 lf 2024-08-14 14:20:23 +05:30
Manav Rathi
4e1d80380c pv2 2024-08-14 14:00:39 +05:30
Manav Rathi
fd1f3c6710 Sync 1 2024-08-14 13:51:43 +05:30
Manav Rathi
ee5acf6a2e Sketch 2024-08-14 13:46:27 +05:30
Manav Rathi
3a85e9dcae ek type 2024-08-14 13:04:08 +05:30
Manav Rathi
dffe364c51 Read ss 2024-08-14 12:49:21 +05:30
Manav Rathi
da4ba85c7c wip ek 2024-08-14 12:26:11 +05:30
ashilkn
b99e835d79 [mob][photos] Refactoring 2024-08-14 12:21:35 +05:30
Manav Rathi
62652ea617 [server] Send 5xx if query to validate token fails (#2695)
## Description

## Tests
2024-08-14 11:56:46 +05:30
ashilkn
7e36ad357b [mob][photos] Chore 2024-08-14 11:47:48 +05:30
Manav Rathi
4ea6f1cbfc [server] Fix lint failures on CI 2024-08-14 11:30:32 +05:30
Manav Rathi
c164b0710a key 2024-08-14 11:24:29 +05:30
Neeraj Gupta
d8b338a1e8 [cli] Add filters for Export (#2596)
## Description

Feature: Add support for selective export with filters for account,
albums, and options to exclude hidden or shared files.

    Flags Added:
        --shared: Include shared albums in export (default: true).
        --hidden: Include hidden albums in export (default: true).
        --albums: Comma-separated list of album names to export.
--emails: Comma-separated list of emails of the accounts that needs to
be exported

Behavior: By default, both hidden and shared albums are exported.

## Tests
Tested locally
2024-08-14 11:23:50 +05:30
Manav Rathi
81885d6814 Tweak 2024-08-14 11:21:04 +05:30
Neeraj Gupta
7b402e46bd [mob] Control the enable multipart option via feature flag 2024-08-14 11:20:30 +05:30
Manav Rathi
ad156bc33a Diff 2024-08-14 11:16:26 +05:30
Manav Rathi
050bbfbbb3 Discussion 2024-08-14 11:11:43 +05:30
Neeraj Gupta
7ba4aebf86 [mob] Add toggle button to enable multipart upload 2024-08-14 11:09:43 +05:30
Neeraj Gupta
1eea5ffab1 [mob] Switch to 20MB for multipart upload 2024-08-14 11:09:03 +05:30
Neeraj Gupta
04343b2a6c [server] Add auth key validation 2024-08-14 10:43:18 +05:30
Neeraj Gupta
9d48fa4a50 [server] Send 5xx if query to validate token fails 2024-08-14 10:22:57 +05:30
Manav Rathi
1314b8ccbb sync 2 2024-08-14 09:48:08 +05:30
Manav Rathi
d5d0e98197 Person 2024-08-14 09:11:56 +05:30
Manav Rathi
82b8658268 lint-fix 2024-08-14 08:45:00 +05:30
Manav Rathi
f802e87215 To search person 2024-08-13 21:03:22 +05:30
Manav Rathi
565546755a Split the type 2024-08-13 21:03:22 +05:30
Manav Rathi
113bd9744e Update all 2024-08-13 21:03:22 +05:30
Manav Rathi
3097810f2c Top scorer 2024-08-13 21:03:22 +05:30
Manav Rathi
207f9c50cf Clean 2024-08-13 21:03:22 +05:30
Manav Rathi
1c9a14cfdc Tweak 2024-08-13 21:03:22 +05:30
Manav Rathi
5e4f0d4caf A2 2024-08-13 21:03:22 +05:30
Manav Rathi
7f9391f89f Parse 2024-08-13 21:03:22 +05:30
Manav Rathi
614c312876 Tentative DB schema 2024-08-13 21:03:22 +05:30
Manav Rathi
5081dc904b Enhance 2024-08-13 21:03:22 +05:30
Manav Rathi
ef7b978cd5 Outline 2024-08-13 21:03:22 +05:30
Manav Rathi
2376327e52 zt 2024-08-13 21:03:22 +05:30
Ashil
f264461390 [mob][photos] Fullscreen UX improvements (#2694)
## Description

- Snapping when tapping to remove controls + app and bottom bar from a
photo or video is no more.
- System navigation bar has been change to be transparent.
- On iOS, nothing changes visually. 

#### Before:


https://github.com/user-attachments/assets/4665ec52-31d8-4cab-8ca1-d830579c0f60


https://github.com/user-attachments/assets/95adf062-260a-4b23-810f-550c83c2e562

#### After:


https://github.com/user-attachments/assets/75307e63-df21-490b-ab6f-ef7c4de66c06


https://github.com/user-attachments/assets/83f89387-7fc2-41c3-a55a-3b2d62ef5bfb
2024-08-13 20:20:56 +05:30
ashilkn
0c097b38f4 [mob][photos] chore 2024-08-13 20:19:10 +05:30
ashilkn
e74aac0023 [mob][photos] Remove listener 2024-08-13 19:59:40 +05:30
ashilkn
8d0e3e972f [mob][photos] Fix or make UI and layout better of the system navigation bar, home bottom navigation bar and the search widget 2024-08-13 19:49:41 +05:30
ashilkn
c10eb97511 [mob][photos] Fix screen snapping when toggling to full screen when viewing items + imporve full screen UX on the new native video player 2024-08-13 17:48:36 +05:30
ashilkn
6fa5571e19 Merge branch 'main' into use_native_video_player 2024-08-13 15:37:03 +05:30
Manav Rathi
49f069c9cf Add timeout for replication lock query & allow updating metadata with less keys (#2692)
## Description

## Tests
2024-08-13 15:25:24 +05:30
Neeraj Gupta
2228874898 [Fix] Handle case when existing metadata is null 2024-08-13 15:22:02 +05:30
Manav Rathi
c6bdeeb722 [server] Minor tweaks to the new FileData API URLs (#2689)
- Start with leading slash for easier greppability
- Omit trailing slash for consistency

No production clients are using this yet, so should be safe.

Tested the two embedding related ones on localhost.
2024-08-13 15:19:11 +05:30
Neeraj Gupta
8299c029ec Add 10 second timeout while locking row for replication 2024-08-13 15:17:33 +05:30
Neeraj Gupta
9132fc5ec8 Allow updating metadata with fewer keys 2024-08-13 15:15:40 +05:30
Manav Rathi
8a67eb7417 [web] Fix width of all albums dialog (#2691)
Fixes bug introduced in 1c0261bc5c
2024-08-13 13:49:47 +05:30
Manav Rathi
b0c18f9fd4 [web] Fix width of all albums dialog
Fixes bug introduced in 1c0261bc5c
2024-08-13 13:41:55 +05:30
Manav Rathi
91de9c38cc [desktop] Tweak the integration of the new file data APIs (#2690) 2024-08-13 13:32:08 +05:30
Manav Rathi
3980d6b614 Nomen 2024-08-13 13:27:03 +05:30
Manav Rathi
fd6cab6c26 Add CHANGELOG entry 2024-08-13 13:19:36 +05:30
Manav Rathi
3604fbe352 Clarify and note 2024-08-13 13:18:57 +05:30
Manav Rathi
9422398922 New and fold 2024-08-13 13:15:29 +05:30
Manav Rathi
cb8a5a72f5 Rename 2024-08-13 13:11:19 +05:30
Manav Rathi
3b63089b42 Fin2 2024-08-13 12:58:31 +05:30
Manav Rathi
eb2520e55c Fin 2024-08-13 12:48:33 +05:30
Manav Rathi
96948c8699 Fix context 2024-08-13 12:24:21 +05:30
Manav Rathi
0e04dd7393 [web] New translations (#2688)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-08-13 12:20:01 +05:30
Manav Rathi
d9d4ffa9e7 [server] Minor tweaks to the new FileData API URLs
- Start with leading slash for easier greppability
- Omit trailing slash for consistency

No production clients are using this yet, so should be safe.
2024-08-13 12:17:53 +05:30
Manav Rathi
ff1c20288f More 2024-08-13 12:13:57 +05:30
Manav Rathi
55bd59ec6a WIP cleanup 2024-08-13 12:07:48 +05:30
Manav Rathi
520647d77f Split 2024-08-13 12:07:48 +05:30
Manav Rathi
fa91430276 Rename 2024-08-13 12:07:48 +05:30
Crowdin Bot
a995a2ff0c New Crowdin translations by GitHub Action 2024-08-13 06:36:03 +00:00
Manav Rathi
28a97a39b2 [desktop] Update consent prompts (#2687) 2024-08-13 12:05:14 +05:30
Manav Rathi
dd74a0d6c3 [desktop] Update consent prompts 2024-08-13 11:39:32 +05:30
Manav Rathi
3c92ac9100 [web] New translations (#2677)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-08-13 11:28:13 +05:30
Crowdin Bot
048c5aa540 New Crowdin translations by GitHub Action 2024-08-13 05:50:21 +00:00
Neeraj Gupta
f1d828455d [server] Skip logging large payloads on successful requests (#2683)
## Description

## Tests
2024-08-13 11:20:08 +05:30
Manav Rathi
efcad99737 [web] Remove the potentially confusing modification time from UI (#2685)
Also, gracefully handle a missing modification time and public magic
metadata.
2024-08-13 11:18:54 +05:30
Manav Rathi
146b4ac296 Remove the confusing modification time option from the UI
It is not the upload time
2024-08-13 11:06:18 +05:30
Manav Rathi
0c3a676572 Handle missing pub magic mdt 2024-08-13 11:04:38 +05:30
Manav Rathi
c23ba06b0d Dedup 2024-08-13 10:59:20 +05:30
Manav Rathi
6b30bb52b8 Same file also doesn't have public magic metadata
file id 52422
2024-08-13 10:53:20 +05:30
Manav Rathi
6f1ddb892f Gracefully handle a missing modification time 2024-08-13 10:46:49 +05:30
Neeraj Gupta
7b610dbc34 [server] Log request body in output for error 2024-08-13 10:26:57 +05:30
Neeraj Gupta
5d0c337bfb [server] Reduce log noise 2024-08-13 10:22:16 +05:30
Prateek Sunal
2274be94c3 [auth] don't use privacy screen for desktop (#2680)
## Description

## Tests
2024-08-12 22:09:34 +05:30
Prateek Sunal
546820542a chore: bump version 2024-08-12 22:06:58 +05:30
Prateek Sunal
0a66098ee6 fix(auth): don't use privacy screen for desktop 2024-08-12 22:06:25 +05:30
Neeraj Gupta
cfadd700ff [server][file-data] Fix query to mark replication as done 2024-08-12 21:59:00 +05:30
Neeraj Gupta
6fc24f6900 Reduce ctx timeout duration 2024-08-12 21:39:49 +05:30
Neeraj Gupta
ff72590958 Fix bug in GetAndLockUnreplicatedObject query 2024-08-12 21:39:49 +05:30
Manav Rathi
f38d9deb11 [desktop] [docs] Rename ML (#2676) 2024-08-12 20:26:27 +05:30
Manav Rathi
bcc5cde399 Rename doc 2024-08-12 20:22:10 +05:30
Manav Rathi
c3eafb50b6 Change translations 2024-08-12 20:18:19 +05:30
ashilkn
0d82f6ec65 [mob][photos] Update android target SDK 2024-08-12 19:58:39 +05:30
Shamshid
c1ee9a5d37 [Auth] fix Booking and Blockchain icons (#2656)
Fix Booking.com and Blockchain.com icons loading issue
2024-08-12 18:08:54 +05:30
Vishnu Mohandas
a61d62d862 Minor update 2024-08-12 18:01:32 +05:30
Neeraj Gupta
988d1ef895 [server] Fix multi part get url (#2672)
## Description

## Tests
2024-08-12 17:14:37 +05:30
Neeraj Gupta
c62842e6bb Fix multi part get 2024-08-12 17:13:32 +05:30
Manav Rathi
644827aea1 [desktop] Use new ML apis (#2670) 2024-08-12 16:40:37 +05:30
Neeraj Gupta
54bca8570e [server] Minor fixes (#2671)
## Description

## Tests
2024-08-12 16:40:26 +05:30
Neeraj Gupta
641a9c9e1a [server] Minor fixes 2024-08-12 16:39:36 +05:30
Manav Rathi
3feeb40a9e Update 2024-08-12 16:29:47 +05:30
Manav Rathi
17de43a857 worker's can't localStorage 2024-08-12 16:27:25 +05:30
Neeraj Gupta
6259a97f0e [server] Add support for file-data (#2662)
## Description

## Tests
2024-08-12 16:21:09 +05:30
Manav Rathi
b4ba6834e9 Use newer file-data APIs 2024-08-12 16:20:03 +05:30
Neeraj Gupta
ac64aadb3a [sever][replication] Avoid long running txn during replication (#2669)
## Description
Going forward, we pick a row for replication, and immediately mark
replication attempt. Once that's done, we try to replicate the object,
and update it's status without any transaction.

The initial locking and marking the replication attempt should ideally
ensure that no other worker will pick up the row for replication for
next 24hours.

## Tests
2024-08-12 16:09:41 +05:30
Prateek Sunal
be21ef9c50 [auth] allow without backups use for windows (#2650)
## Description

Windows client without pin/password should also be able to use the app,
without backups as they can set app lock afterwards.

## Tests
2024-08-12 15:54:52 +05:30
Neeraj Gupta
4ce3362186 document 2024-08-12 15:52:46 +05:30
Neeraj Gupta
8b33612879 clean up 2024-08-12 15:49:14 +05:30
Neeraj Gupta
992ac53a27 [sever][replication] Avoid long txn during replication 2024-08-12 15:41:29 +05:30
Manav Rathi
fc63e683a7 [web] New translations (#2668)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-08-12 14:45:07 +05:30
Neeraj Gupta
06bd039a80 Update index query 2024-08-12 14:43:48 +05:30
Crowdin Bot
d37f7a5314 New Crowdin translations by GitHub Action 2024-08-12 09:12:38 +00:00
Manav Rathi
6266d16544 [web] Tweak translation keys (#2667) 2024-08-12 14:41:48 +05:30
Manav Rathi
f2ae7c6ff9 Rename 2024-08-12 14:36:34 +05:30
Manav Rathi
04fd2d4410 echo '494m502\nwq' | ed -s $f 2024-08-12 14:35:07 +05:30
Manav Rathi
0c3ef07b3b [web] Rename tr keys 2024-08-12 14:32:45 +05:30
Ashil
6aee3a50f5 [mob][photos] Fix Autofill Issue with Proton Pass in App Lock (#2664) 2024-08-12 14:28:47 +05:30
Manav Rathi
7cc3e1cf99 [web] New translations (#2666)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-08-12 14:24:56 +05:30
Crowdin Bot
e8d804468e New Crowdin translations by GitHub Action 2024-08-12 08:53:59 +00:00
Manav Rathi
ea01c43e6a [desktop] Towards public beta of advanced (ML) search - Part 2/x (#2665) 2024-08-12 14:23:17 +05:30
Aman Raj Singh Mourya
e8a78cd818 [mob][photos] Auto-fill password for Applock 2024-08-12 14:07:08 +05:30
Manav Rathi
20fb9e99f0 context 2024-08-12 14:05:18 +05:30
ashilkn
fd0925f59e [mob][photos] Improve video loading UI 2024-08-12 13:33:58 +05:30
Neeraj Gupta
a6c5d03286 rename 2024-08-12 13:21:11 +05:30
Neeraj Gupta
1564d9c0ca refactor 2024-08-12 13:10:54 +05:30
Manav Rathi
3502fcac5e Move strings to translations 2024-08-12 13:10:15 +05:30
ashilkn
9c48cf4dc3 [mob][photos] Fix minor UI issue 2024-08-12 13:09:37 +05:30
Neeraj Gupta
c88dd22e9c [server] Add bucket b6 2024-08-12 13:07:55 +05:30
Neeraj Gupta
108e103e64 Add an icon to open the active location on Maps (#2663)
## Description

This change introduces a navigate button on the top-right corner that
will use [maps_launcher](https://pub.dev/packages/maps_launcher) to open
the center-point of the view port (by default the location of the photo
that was opened) in the device's default maps application.

<img width="200"
src="https://github.com/user-attachments/assets/baca54b8-5757-4c9b-a10f-3fccead2f142"/>
2024-08-12 13:04:52 +05:30
Neeraj Gupta
0c392a22a4 [server] Rename 2024-08-12 13:04:13 +05:30
Neeraj Gupta
4a13b04b1c [server] Update db script 2024-08-12 13:03:51 +05:30
ashilkn
ac5da3ac1e [mob][photos] commit pubspec.lock and Podfile.lock changes 2024-08-12 13:01:39 +05:30
Manav Rathi
bbac3a2a94 Update key 2024-08-12 12:54:58 +05:30
vishnukvmd
bcf29d971e Fix more warnings 2024-08-12 12:49:45 +05:30
vishnukvmd
ec8bd5bc7f Fix lint warnings 2024-08-12 12:46:25 +05:30
vishnukvmd
43e711274e Add an icon to open the active location on Maps 2024-08-12 12:39:41 +05:30
github-actions[bot]
930c080dcf [auth] New translations (#2660)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2024-08-12 12:14:45 +05:30
github-actions[bot]
9be3051671 [mobile] New translations (#2659)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2024-08-12 12:13:54 +05:30
Manav Rathi
7a113a3aba Preciser 2024-08-12 11:50:59 +05:30
Manav Rathi
d1b7d942b1 [desktop] [docs] Towards public beta of advanced (ML) search (#2661) 2024-08-12 11:14:57 +05:30
Manav Rathi
2830d32c79 Shorten 2024-08-12 11:10:18 +05:30
Manav Rathi
92adb3ad6f Remove old one 2024-08-12 11:05:50 +05:30
Manav Rathi
83e9b18eba Update link 2024-08-12 10:38:05 +05:30
Manav Rathi
a70a3c7078 edit 2024-08-12 10:27:33 +05:30
Manav Rathi
66726846da d1 2024-08-12 10:23:25 +05:30
Manav Rathi
f80e91a65c [web] New translations (#2658)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-08-12 09:53:23 +05:30
Crowdin Bot
62a979656f New Crowdin translations by GitHub Action 2024-08-12 00:32:10 +00:00
Manav Rathi
e618f13041 [web] Improve layering of the crypto abstractions (#2651) 2024-08-10 20:40:10 +05:30
Manav Rathi
215899f35a Nicer 2024-08-10 20:28:35 +05:30
Manav Rathi
004dd3bd0c Rearrange to make webpack happy
Something in the previous arrangement was causing webpack to not pack
worker/worker.ts as a web worker.
2024-08-10 20:28:17 +05:30
Manav Rathi
98a9fc39ec Direct 2024-08-10 20:12:36 +05:30
Manav Rathi
e6250e2cc3 Reorder 2024-08-10 20:11:29 +05:30
Manav Rathi
ccceb8c26a Direct 2024-08-10 20:10:02 +05:30
Manav Rathi
a7fcf7da9b Fixes 2024-08-10 20:04:50 +05:30
Manav Rathi
2b7ee9f42f Forward 2024-08-10 20:03:40 +05:30
Manav Rathi
de03265675 Leftovers 2024-08-10 20:00:16 +05:30
Manav Rathi
b7de8ca9e5 Update import 2024-08-10 19:57:12 +05:30
Manav Rathi
b8830144be Remove the no longer needed indirection 2024-08-10 19:55:24 +05:30
Manav Rathi
8acc5ac62d Propagate 2024-08-10 19:50:36 +05:30
Manav Rathi
041ad135c9 Use during upload 2024-08-10 19:31:20 +05:30
Manav Rathi
ff7718a878 Fin 2024-08-10 19:17:23 +05:30
Manav Rathi
95cfdc4eaa Rearrange 2024-08-10 19:11:24 +05:30
ashilkn
7bbf926986 [mob][photos] Bump up version to 0.9.17 2024-08-10 18:23:46 +05:30
ashilkn
df234660a0 [mob][photos] chore 2024-08-10 18:19:40 +05:30
ashilkn
f89bc22dc4 Merge branch 'main' into use_native_video_player 2024-08-10 18:15:00 +05:30
Manav Rathi
e29c9288c0 Abstract 2024-08-10 18:02:44 +05:30
ashilkn
cbdf6ea0e3 [mob][photos] Fix UI for native video player on memories 2024-08-10 17:58:01 +05:30
Manav Rathi
50d7d7e9a1 Proxy 2024-08-10 17:55:39 +05:30
Manav Rathi
d6bf243701 More 2024-08-10 17:53:12 +05:30
Manav Rathi
4e49a352be Integrate 2024-08-10 17:39:29 +05:30
ashilkn
de1f287c1c [mob][photos] Keep video playing until the currently playing video completely off the screen 2024-08-10 17:37:29 +05:30
Neeraj Gupta
bac660f7a0 [server] Lint fix 2024-08-10 17:20:03 +05:30
Neeraj Gupta
97c9253127 [server] Support for reporting preview video 2024-08-10 17:16:35 +05:30
Manav Rathi
d5d7786b24 Types 2024-08-10 17:09:43 +05:30
ashilkn
1aa38253a3 [mob][photos] Chore 2024-08-10 16:42:54 +05:30
ashilkn
c27017e77e [mob][photos] UX improvements on native video player 2024-08-10 16:41:01 +05:30
Manav Rathi
ca9726969c Impl 2 2024-08-10 16:32:30 +05:30
Manav Rathi
f5b6145da1 Impl 1 2024-08-10 16:32:30 +05:30
Manav Rathi
231e831c75 Refactor 2024-08-10 16:32:30 +05:30
Manav Rathi
85020a490e Rearrange 2024-08-10 16:32:30 +05:30
Manav Rathi
d13c23f2d8 Doc 2024-08-10 16:32:30 +05:30
Manav Rathi
a029b16851 Transparent but handrolled proxy 2024-08-10 16:32:29 +05:30
Ashil
5044a0c33f [mob][photos] Guest view final changes (#2645) 2024-08-10 16:17:42 +05:30
ashilkn
c079ed12ca [mob][photos] UX improvements on native video player 2024-08-10 16:12:22 +05:30
Prateek Sunal
18b0bd4996 fix(auth): allow without backups for windows 2024-08-10 16:00:31 +05:30
ashilkn
9abd9e126c [mob][photos] Fix seeking UX issue when video just started playing 2024-08-10 15:49:33 +05:30
ashilkn
f7345102a2 [mob][photos] Do not hide controls when seeking + Hide controls after seeking + do not surface controls when video starts over when playing in loop: 2024-08-10 15:31:30 +05:30
Neeraj Gupta
407364b626 Add Shakepay and Newton Crypto icons (#2634)
## Description

* Adds icons for Shakepay and Newton Crypto exchanges
* Shakepay icon derived from [press
kit](https://shakepay.com/images/shakepay_media_assets_2023.zip)
* Newton icon derived from [homepage](https://newton.co) (their press
kit leads to 404)

## Tests
2024-08-10 15:24:07 +05:30
ludespeedny
23da3b1c84 Custom icons for auth (#2646)
Added "enom" as a custom icon and added the entry in custom-icons.json
file.
2024-08-10 15:23:35 +05:30
vktr2b
42c3482423 Added & Improved Logos (#2642)
## Description
Added logos for:

- Infomaniak
- OpenObserve
- Vikunja
- SMSPool
- SMTP2GO

Improvements / Minor Changes 

- Brave Icon config
- Crypto.com Icon config
2024-08-10 15:23:04 +05:30
Manav Rathi
4ea95c7d77 [desktop] Use MobileCLIP for magic search (#2649) 2024-08-10 14:08:37 +05:30
Manav Rathi
ac8a5b491d Update refs 2024-08-10 13:47:10 +05:30
Manav Rathi
72bce123a5 Cleanup 2024-08-10 13:42:26 +05:30
Manav Rathi
5bbc2615e4 Tune the threshold for MobileCLIP
Experimentation.

- 0.15 was noisy
- 0.23 was too strict
2024-08-10 13:39:14 +05:30
Manav Rathi
1f28fdada2 Bilinear 2024-08-10 13:11:18 +05:30
Manav Rathi
b503f75999 Don't need the mean/std 2024-08-10 13:09:23 +05:30
Jaspal Suri
fb867bd351 Update Google Photos Takeout Instructions
Simplify instructions
Remove note
Expand step 9 to incorporate note
2024-08-10 00:06:10 -07:00
Manav Rathi
5ce8d9838f 224 => 256
https://github.com/apple/ml-mobileclip/blob/main/mobileclip/configs/mobileclip_s2.json
2024-08-10 09:51:37 +05:30
Manav Rathi
93c5825364 Add MobileCLIP URLs 2024-08-10 09:47:10 +05:30
Manav Rathi
82ecbe6866 [desktop] Clustering - Part 2/x (#2647) 2024-08-10 09:33:25 +05:30
Manav Rathi
62e27916b7 lf 2024-08-10 09:09:50 +05:30
ashilkn
4cb0a5306a [mob][photos] Hide/show controls when necessary in native video player 2024-08-09 22:26:07 +05:30
ashilkn
5e7febd8f2 [mob][photos] Added comment 2024-08-09 21:04:56 +05:30
ashilkn
73c4fd3488 [mob][photos] Only initialize native video player and load video when the file is completely visible
Without this, if two high res potrait videos are loaded, one of them goes blank
2024-08-09 21:03:11 +05:30
Manav Rathi
5d28f75c1a Dedup 2024-08-09 20:30:03 +05:30
ashilkn
ac27a22ddb [mob][photos] UX improvements in native video player 2024-08-09 20:28:19 +05:30
Manav Rathi
e7e74c17f8 Fix debug flow 2024-08-09 20:24:56 +05:30
Prateek Sunal
4d8e80041d [mob][panorama] update panorama checking mechanism (#2532)
## Description

Panorama was getting checked every time and was not getting cached. This
PR creates mediaType to classify image whether it's panorama or not.

- If a image can be panorama (Any side Dimensions >8000px and 2 * height
>= width or 2 * width >= height) it will try to check metadata if image
could be panorama.
- Opening details pane will check metadata if image is panorama or not.
- Gyroscope button is introduced along with proper panoramic view
instead of 360* view for Images that have Cropped metadata.
2024-08-09 20:22:12 +05:30
Prateek Sunal
72cdb2424a Merge branch 'main' into mobile-panorama-fix 2024-08-09 20:21:49 +05:30
Prateek Sunal
38c3e73638 fix: move panorama icon to middle 2024-08-09 20:18:28 +05:30
ashilkn
e0fbc64f08 [mob][photos] Handle errors 2024-08-09 19:36:59 +05:30
ashilkn
41a304a18c [mob][photos] log errors from native video player if any 2024-08-09 19:30:07 +05:30
ashilkn
09c3d9e025 [mob][photos] UI fixes on native video player 2024-08-09 19:15:19 +05:30
ashilkn
03f0db92ad [mob][photos] Remove unnecessary delay 2024-08-09 19:08:59 +05:30
ashilkn
1e7c1396e0 [mob][photos] Delete cache only on iOS 2024-08-09 19:03:03 +05:30
ashilkn
6b8473a958 [mob][photos] UI fix for play pause button 2024-08-09 18:58:29 +05:30
ashilkn
c4770e8645 [mob][photos] Refactoring 2024-08-09 18:19:08 +05:30
Aman Raj Singh Mourya
2d768c9c61 [mob][photos] Fallback for no device lock found for guest view and extracted strings 2024-08-09 16:44:44 +05:30
Manav Rathi
839727393b Debugging code 2024-08-09 16:17:09 +05:30
Neeraj Gupta
251a627219 delete 2024-08-09 15:51:38 +05:30
Neeraj Gupta
cd2fde2c2e [server] 1/n Support for persisting preview video 2024-08-09 15:50:29 +05:30
Manav Rathi
7bde0dea8c test harness 2024-08-09 15:48:30 +05:30
Manav Rathi
46082796d7 Decrypt 2024-08-09 15:36:15 +05:30
Manav Rathi
7d52f917c1 [docs] Clarifications (#2644) 2024-08-09 14:50:08 +05:30
Manav Rathi
980ff741ba yarn pretty 2024-08-09 14:48:08 +05:30
Manav Rathi
286517338e pretty 2024-08-09 14:47:23 +05:30
Manav Rathi
e5eb9fee7a [docs] Clarifications 2024-08-09 14:46:22 +05:30
Manav Rathi
8f167d81fc Types 2024-08-09 14:36:27 +05:30
Manav Rathi
1c84b32608 Specifize 2024-08-09 14:22:26 +05:30
Vishnu Mohandas
1e3110ca9c [docs] updated Googletakeout (#2643) 2024-08-09 14:15:44 +05:30
Vishnu Mohandas
0412c37bf5 Update index.md 2024-08-09 14:14:52 +05:30
Manav Rathi
777ce3f4a8 Sketch 2024-08-09 13:41:39 +05:30
Manav Rathi
5fa719f3e9 Sketch 2024-08-09 13:26:32 +05:30
Neeraj Gupta
7834662340 [server] Clean up 2024-08-09 13:08:46 +05:30
Manav Rathi
29d7403cda Non-trivial ones 2024-08-09 12:43:56 +05:30
ashilkn
46a7880f05 [mob][photos] Extract strings 2024-08-09 12:41:04 +05:30
Neeraj Gupta
ffbd76b88b [server] Support for replicating ml data 2024-08-09 12:40:52 +05:30
ashilkn
762daa6bd5 [mob][photos] Change icon of guest view 2024-08-09 12:33:45 +05:30
Manav Rathi
890ea6c8d1 Closer 2024-08-09 12:33:33 +05:30
Ashil
fdf3b6e85d [mob][photos] Swipe lock for multiple files (#2631) 2024-08-09 12:13:51 +05:30
Manav Rathi
cfcfade152 People list 2024-08-09 12:00:31 +05:30
Neeraj Gupta
da09a5261b [server] Fix key look up 2024-08-09 11:57:21 +05:30
Manav Rathi
5c7c4ad35a Fix 2024-08-09 11:41:59 +05:30
Manav Rathi
771327a551 gen 2024-08-09 11:35:50 +05:30
Manav Rathi
526546da59 Promise 2024-08-09 11:30:21 +05:30
Jay
a32a9dea3f [docs] updated googletakeout 2024-08-09 11:18:17 +05:30
Manav Rathi
69627ee8d6 Start moving the plumbing out 2024-08-09 11:14:23 +05:30
Manav Rathi
292a8eb00f Group state 2024-08-09 10:33:24 +05:30
Manav Rathi
685680c6da Integrate 2024-08-09 09:48:01 +05:30
Prateek Sunal
8db29a25a4 fix: review changes 2024-08-09 02:41:44 +05:30
Prateek Sunal
10d6caa4e1 fix: review changes 2024-08-09 02:40:03 +05:30
Prateek Sunal
fb2c17c510 fix: update panorama package to support sensor tweaks 2024-08-09 02:32:14 +05:30
Aman Raj Singh Mourya
5925dfb3fc [mob][photos] Minor fixes 2024-08-08 21:41:46 +05:30
Manav Rathi
65b0a061b7 [desktop] Cluster - Initial steps (#2640)
- No functional changes
- Also add nanoid dep
2024-08-08 21:01:41 +05:30
Manav Rathi
7c435b9ae5 [web] Fix referrer policy (#2639)
Ref: https://web.dev/articles/referrer-best-practices
2024-08-08 20:20:29 +05:30
Manav Rathi
7dcfe12d1d [web] Fix referrer policy
Ref: https://web.dev/articles/referrer-best-practices
2024-08-08 20:17:16 +05:30
ashilkn
b4500ef4d7 [mob][photos] Workaround for android 10 free up space issue
Workaround for deletedIDs being empty on android 10
2024-08-08 15:26:14 +05:30
Neeraj Gupta
4920ecf643 rename 2024-08-08 14:44:42 +05:30
Neeraj Gupta
58e55a7a00 [server] Clean up 2024-08-08 14:19:50 +05:30
Neeraj Gupta
86ad432d5b [server] Implement file data deleted using existing table as queue 2024-08-08 14:16:40 +05:30
Manav Rathi
0fcecc7786 [web] Improve handling of cancelled sub updates (#2635)
This fixes an issue where a user with a cancelled _and_ expired
subscription would try to purchase a plan, and would instead get
redirected to the updated subscription flow in stripe (instead of the
buy flow).

Smoke tested a few scenarios locally.
2024-08-08 14:15:55 +05:30
Manav Rathi
a3c51044c4 Unused 2024-08-08 14:02:24 +05:30
Manav Rathi
488c239cf2 Use 2024-08-08 13:59:44 +05:30
Manav Rathi
d26aafc5f4 Flowchart 2024-08-08 13:57:17 +05:30
Neeraj Gupta
272d17615e [server] Remove fileData cleanup via queue 2024-08-08 13:03:34 +05:30
Neeraj Gupta
50f6fd7440 Add request to get preview url 2024-08-08 12:51:42 +05:30
Manav Rathi
5ad1bacf3e Swap 2024-08-08 12:46:13 +05:30
Manav Rathi
1c8512ad81 wip harness 2024-08-08 12:38:33 +05:30
Manav Rathi
c784831ded Test 2024-08-08 12:35:04 +05:30
Manav Rathi
d53d39b400 Loop 2024-08-08 12:27:19 +05:30
ashilkn
eaf6147f2b Merge branch 'main' into guest_view 2024-08-08 12:12:12 +05:30
Manav Rathi
e31f0b042d Sketch 2024-08-08 12:05:20 +05:30
Neeraj Gupta
2eb0cb3487 Update DB Schema 2024-08-08 12:04:05 +05:30
Manav Rathi
395fe16d8a dp 2024-08-08 11:52:30 +05:30
Manav Rathi
ce421eded4 nanoids 2024-08-08 11:17:18 +05:30
Manav Rathi
5cc8479354 Outline 2 2024-08-08 10:50:49 +05:30
Manav Rathi
08303d2bb6 Outline 2024-08-08 10:36:48 +05:30
httpjamesm
00d0cfe72c feat: add shakepay and newton icon metadata 2024-08-08 00:12:51 -04:00
httpjamesm
f3b13042ca feat: newton crypto icon 2024-08-08 00:11:42 -04:00
httpjamesm
6fbc807225 feat: shakepay icon 2024-08-08 00:09:55 -04:00
Manav Rathi
9ec1affcbb docs: section links Method (#2633)
## Description
Link separate by hyphen for scrolling through intended section title.
## Tests
2024-08-08 09:13:05 +05:30
Guspan Tanadi
67d0fb1c31 docs: section links Method 2024-08-08 07:32:39 +07:00
Prateek Sunal
b6602d052f Merge remote-tracking branch 'origin/main' into mobile-panorama-fix 2024-08-08 04:01:24 +05:30
Prateek Sunal
7cafa9ccb6 fix(mob/panorama): add background pattern 2024-08-08 04:00:59 +05:30
Aman Raj Singh Mourya
b7bd8c83ba [mob][photos] Swipe lock for multiple files 2024-08-08 00:44:27 +05:30
Manav Rathi
36de2db175 [web] Finalize migration to new Exif library (#2630) 2024-08-07 21:07:37 +05:30
Prateek Sunal
a09794304c [auth] redirect support issues to github discussion (#2605)
## Description

same as title
2024-08-07 20:22:55 +05:30
Manav Rathi
fe97828328 Remove debug log 2024-08-07 19:50:00 +05:30
ashilkn
3652430b59 [mob][photos] Set volume to full in native video player 2024-08-07 18:57:27 +05:30
ashilkn
553e62dfae [mob][photos] Minor UI enhancements on native video player controls 2024-08-07 17:55:55 +05:30
ashilkn
a4c0c8b999 [mob][photos] Show duration and current position in duration in the native video player 2024-08-07 17:44:19 +05:30
Neeraj Gupta
1bb4940e14 Handle deletion from inFlight replica 2024-08-07 16:46:02 +05:30
Manav Rathi
959f887d2f Remove unused flexibility 2024-08-07 16:08:20 +05:30
ashilkn
7910d92d34 [mob][photos] Theme changes to seek bar 2024-08-07 16:00:13 +05:30
Manav Rathi
6967d1235e derived 2024-08-07 15:55:10 +05:30
Manav Rathi
ca1039884f Remove exif extraction during indexing 2024-08-07 15:50:10 +05:30
ashilkn
551c151f1e [mob][photos] Seek bar minor improvement 2024-08-07 15:47:50 +05:30
Manav Rathi
777f9e9704 - @xmldom/xmldom
(In next commit we'll remove it from the indexer)
2024-08-07 15:42:44 +05:30
ashilkn
af758d4e85 [mob][photos] Make dragging of seek bar interactive, both in the seek bar widget and in the video 2024-08-07 15:39:09 +05:30
Manav Rathi
527dfc3721 Remove exifr 2024-08-07 15:34:55 +05:30
Neeraj Gupta
5f14057b65 Update schema to add in-flight list of regions 2024-08-07 15:34:21 +05:30
Manav Rathi
8cde8d6d66 [web] Use new Exif library during uploads (#2629) 2024-08-07 15:16:51 +05:30
ashilkn
7795625708 [mob][photos] Move SeekBar and PlayPauseButton widgets to separate files 2024-08-07 15:07:52 +05:30
Manav Rathi
0b279111dd Use during uploads 2024-08-07 15:07:50 +05:30
ashilkn
c572fc171c [mob][photos] Make seeking work (only when seeking ends) 2024-08-07 14:58:38 +05:30
ashilkn
d452d1acb0 [mob][photos] Stop animating seek bar after being seeked when video is paused 2024-08-07 14:57:28 +05:30
Manav Rathi
1fdeebed28 Integrate 2024-08-07 14:37:12 +05:30
dnred
139d3b99a1 Change Auth mobile apps' names to "Ente Auth" (#2622)
## Description

Changed the name of the Auth mobile app to "Ente Auth" on both Android
and iOS to make it consistent with the naming of Ente Photos and to also
make it consistent on both platforms.
2024-08-07 14:34:01 +05:30
Manav Rathi
0a3182be53 Not deprecated 2024-08-07 14:15:12 +05:30
Shamshid
1db7bf2902 [Auth] Add 3 new icons (#2627)
## Description

Add icons for:
- [Booking.com](http://booking.com/)
- [Blockchain.com](https://blockchain.com/)
- [BitOasis](https://bitoasis.net/)
2024-08-07 14:07:14 +05:30
Manav Rathi
920b4e6823 Unnull 2024-08-07 13:55:18 +05:30
Manav Rathi
fe399762f5 Doc 2024-08-07 13:22:15 +05:30
Manav Rathi
9a60bf3ba6 Doc 2024-08-07 13:06:46 +05:30
Manav Rathi
862495c29e Up 2024-08-07 13:00:59 +05:30
Manav Rathi
5c0a80415d Give both a shot 2024-08-07 12:56:59 +05:30
Neeraj Gupta
075096258f Rename 2024-08-07 12:56:39 +05:30
Manav Rathi
728c3a80f4 Scaffold 2024-08-07 12:47:19 +05:30
Manav Rathi
6adbb82d54 p1 2024-08-07 12:40:18 +05:30
ashilkn
4c02e8ffa3 [mob][photos] Create seek bar that moves with video and animate the seek bar between each second with also handling edge cases
The native video player package that is used only emits an event at each second when the video is played. For a good looking seek bar, have animate it in between seconds
2024-08-07 12:31:15 +05:30
Manav Rathi
1fc1d3f4c0 Rearrange 2024-08-07 12:30:49 +05:30
Manav Rathi
05725dfdeb lay of the land 2024-08-07 12:26:02 +05:30
Manav Rathi
25c97dea48 Switch 2024-08-07 12:21:17 +05:30
Manav Rathi
9cc8469ed9 Remove unused 2024-08-07 12:04:34 +05:30
Manav Rathi
fead530786 Use in fixer 2024-08-07 11:41:29 +05:30
Manav Rathi
4d6b57b96c [web] Use the new date/time persistence format for edits (#2628) 2024-08-07 11:13:42 +05:30
Manav Rathi
74e50a8e37 Show from both places 2024-08-07 11:02:17 +05:30
Manav Rathi
62436db1c3 Add sync variant 2024-08-07 10:56:25 +05:30
Manav Rathi
f4adea5a60 Add wrapper 2024-08-07 10:33:53 +05:30
Manav Rathi
7ecfa20f03 Up 2024-08-07 10:19:12 +05:30
Manav Rathi
71b909d950 Outline 2024-08-07 10:15:14 +05:30
Manav Rathi
36673997dd lf 2024-08-07 09:37:05 +05:30
Manav Rathi
5d16f5735b Inline 2024-08-06 20:39:34 +05:30
Manav Rathi
8e284c1139 Don't use the offset 2024-08-06 20:30:05 +05:30
Manav Rathi
657ea68122 Keep in sync 2024-08-06 20:21:56 +05:30
Manav Rathi
a6cc6f24d0 Use newer fields 2024-08-06 20:05:27 +05:30
Neeraj Gupta
98a6bf9164 Store bucketID for temp objects 2024-08-06 17:01:06 +05:30
ashilkn
4abbb5c591 [mob][photos] Fix unexpected behaviour of play pause button 2024-08-06 16:34:56 +05:30
ashilkn
5351377ae7 [mob][photos] Make play pause controls for native video player 2024-08-06 16:29:16 +05:30
Manav Rathi
af4064b97a Prepare for merge 2024-08-06 16:24:40 +05:30
Neeraj Gupta
84fa8f343b clean up 2024-08-06 15:34:27 +05:30
Neeraj Gupta
ec91e75780 [server] Handle fileData cleanup on file Deletion 2024-08-06 15:31:53 +05:30
Manav Rathi
9ceae94071 Update docs 2024-08-06 15:30:38 +05:30
Manav Rathi
962a260e4b Copy over another hack 2024-08-06 15:27:05 +05:30
Manav Rathi
d30773e68a Fix 2024-08-06 15:22:38 +05:30
Manav Rathi
2c6298d6c3 Test 2 2024-08-06 14:56:21 +05:30
Manav Rathi
07786140f9 Give it a spin 2024-08-06 14:47:30 +05:30
Manav Rathi
7d36808bb5 Sprinkled with TODOs, but a checkpoint 2024-08-06 14:28:51 +05:30
Manav Rathi
a61ea9338e Add note about Zod and exactOptionalPropertyTypes 2024-08-06 14:07:21 +05:30
Manav Rathi
1c4ae46270 wip 1 2024-08-06 13:53:55 +05:30
Manav Rathi
1570b0a551 Entry point 2024-08-06 13:06:26 +05:30
ashilkn
eab1be3753 [mob][photos] Add native_video_player to pubspec.yaml 2024-08-06 12:42:45 +05:30
ashilkn
51f0cfff06 Merge branch 'main' into use_native_video_player 2024-08-06 11:32:50 +05:30
Ashil
b8cb480d23 [mob][photos] Fix bug in parsing rotation metadata from video using FFProbe (#2595)
### Description

Parse width and height of video correctly using FFProbe by 
- Considering both `coded_height` & `height` + `coded_width` + `width`
keys to parse height and width of video. Came across two videos where
`coded_width` and `coded_height` were both `0` where as `height` and
`width` had the correct values.
- Parse `rotation` from `side_data_list` and consider `rotation` for
accurate (i.e, not flipped) dimensions.

Have made sure the correct height and width of the video is shown on the
video's file info. Sometimes there could be a slight difference from
what a user would expect, if the `coded_side` is different from `side`
(`side` is `width` or `height`). Will be fixing this in future.
Ref:
https://superuser.com/questions/1523944/whats-the-difference-between-coded-width-and-width-in-ffprobe
2024-08-06 11:25:13 +05:30
Prateek Sunal
d9bd96ce34 Merge remote-tracking branch 'origin/main' into mobile-panorama-fix 2024-08-06 02:31:52 +05:30
Manav Rathi
a821d1f283 [web] Magic metadata related refactoring (#2621)
This is mostly prep, no (major) changes to the functional codepaths yet.
2024-08-05 20:56:46 +05:30
Manav Rathi
4470fe0425 Clean 2024-08-05 20:41:22 +05:30
Manav Rathi
296bcbc8c2 Move and grow 2024-08-05 20:33:54 +05:30
Manav Rathi
f38d432bf9 It's also used for collections 2024-08-05 20:22:33 +05:30
Manav Rathi
543b180137 Rename II 2024-08-05 20:20:58 +05:30
Manav Rathi
2e683bb625 Doc 2024-08-05 20:19:10 +05:30
Manav Rathi
164d875324 Rename 2024-08-05 20:11:48 +05:30
Manav Rathi
70d691207c Doc 2024-08-05 20:04:21 +05:30
Manav Rathi
b12f981f5b Sibling 2024-08-05 20:00:17 +05:30
Manav Rathi
28ca94265d More 2024-08-05 19:54:20 +05:30
Manav Rathi
b16a717776 Doc 2024-08-05 19:15:39 +05:30
Manav Rathi
20ac146b50 Remove unnecessary alias 2024-08-05 18:25:44 +05:30
ashilkn
2916bcfda8 [mob][photos] chore 2024-08-05 18:24:29 +05:30
Manav Rathi
b91d854a92 New 2024-08-05 18:14:50 +05:30
ashilkn
f69214461d [mob][photos] Add todo comment 2024-08-05 18:09:07 +05:30
Crowdin Bot
cbb1a57ffe New Crowdin translations by GitHub Action 2024-08-05 18:06:28 +05:30
Neeraj Gupta
543aa6b9cf Clean up 2024-08-05 17:46:00 +05:30
Neeraj Gupta
744d6bc6ea Add helper method to empty bucket for given user 2024-08-05 17:35:05 +05:30
Neeraj Gupta
81c3626c6c Rename 2024-08-05 17:31:12 +05:30
Neeraj Gupta
27eb5ecc2b [server] Update DB Script 2024-08-05 16:44:34 +05:30
Neeraj Gupta
18d58a9eee [server] Parse config for file-data buckets 2024-08-05 16:44:01 +05:30
Manav Rathi
9991f0bfc0 [web] Better standardize the crypto nomenclature used in code (#2620) 2024-08-05 15:44:49 +05:30
Manav Rathi
9640d485a2 Rename 2024-08-05 15:37:46 +05:30
Manav Rathi
9b896c5c2f Dedup 2024-08-05 15:37:29 +05:30
Manav Rathi
838840bfa8 Decrypt thumb 2024-08-05 15:36:34 +05:30
Manav Rathi
2952c4a4c6 Consistency 2024-08-05 15:19:20 +05:30
ashilkn
e1713851b3 [mob][photos] Show accurate height and width in file info for a video 2024-08-05 15:09:16 +05:30
Manav Rathi
2d1a8e5b85 Doc 2024-08-05 15:08:47 +05:30
Manav Rathi
a59b11c9f8 Rearrange 2024-08-05 15:04:46 +05:30
Manav Rathi
40c360a1bd Rename 2024-08-05 15:03:55 +05:30
Manav Rathi
d599a6dcfa Thumb 2024-08-05 15:03:39 +05:30
Manav Rathi
219cc405da Terms 2024-08-05 14:58:35 +05:30
Manav Rathi
8cabf13e5a lint 2024-08-05 14:46:16 +05:30
Manav Rathi
f8c12ba127 Rename 2024-08-05 14:44:37 +05:30
Manav Rathi
9583b31bfc Prune 2024-08-05 14:44:03 +05:30
Manav Rathi
506dc36c69 Rest 2024-08-05 14:43:36 +05:30
Manav Rathi
61935a0037 More 2024-08-05 14:41:56 +05:30
Manav Rathi
25541ecd3a More 2024-08-05 14:41:05 +05:30
Manav Rathi
5e3cae39ec Entities too 2024-08-05 14:38:21 +05:30
Manav Rathi
e60506586e Prune 2024-08-05 14:33:29 +05:30
Manav Rathi
0d8a49317a Upload 2024-08-05 14:32:57 +05:30
Manav Rathi
6b52f1e53b all but 1 2024-08-05 14:26:45 +05:30
Manav Rathi
9ff4aa47d0 Collection 2024-08-05 14:22:28 +05:30
Manav Rathi
edbe40d2fa Use 2024-08-05 14:21:03 +05:30
Manav Rathi
4c28646ecc Expand to collections 2024-08-05 14:20:03 +05:30
Manav Rathi
8ec2d3e87c Forward 2024-08-05 14:01:46 +05:30
Crowdin Bot
2a00313159 New Crowdin translations by GitHub Action 2024-08-05 14:01:35 +05:30
Manav Rathi
22b2c49b63 metadata 2024-08-05 13:57:05 +05:30
Manav Rathi
13ab0d4309 enc new 2024-08-05 13:49:21 +05:30
Manav Rathi
5536f7ac03 Update the embedding layer 2024-08-05 13:42:55 +05:30
Manav Rathi
bd42650b9e More docs etc 2024-08-05 13:28:02 +05:30
Manav Rathi
13f31a7d09 Dec 2024-08-05 12:12:14 +05:30
Manav Rathi
124552eda3 New 2024-08-05 12:04:38 +05:30
Manav Rathi
a9359d15d3 Doc 2024-08-05 11:39:31 +05:30
Manav Rathi
15f80e3fa6 Ontology 2024-08-05 11:33:16 +05:30
Manav Rathi
2dcc199556 Unused 2024-08-05 11:10:56 +05:30
Manav Rathi
9bce3bba7c Rename and prune 2024-08-05 11:07:57 +05:30
Manav Rathi
32a602725a Unnest 2024-08-05 10:34:01 +05:30
Manav Rathi
0bff899713 Doc 2024-08-05 10:31:07 +05:30
Neeraj Gupta
d0fd868705 Merge branch 'main' into file_data 2024-08-05 10:24:02 +05:30
Manav Rathi
a02a4ca5c1 [web] New translations (#2616)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-08-05 09:53:17 +05:30
Crowdin Bot
2860a94dae New Crowdin translations by GitHub Action 2024-08-05 00:31:53 +00:00
Manav Rathi
ccc20c5bbd [server] Mention extra in docs (#2613)
Ref: https://github.com/ente-io/ente/pull/2607
2024-08-03 18:13:30 +05:30
Manav Rathi
98de9082b9 [server] Mention extra in docs
Ref: https://github.com/ente-io/ente/pull/2607
2024-08-03 18:11:15 +05:30
Manav Rathi
c703f46243 [web] Miscellaneous improvements (#2612) 2024-08-03 18:02:43 +05:30
Manav Rathi
6bd9607c94 allow setting extra parameter for dsn (#2607)
## Description
For https://github.com/ente-io/ente/discussions/2603
2024-08-03 18:01:32 +05:30
Manav Rathi
d68c04a8fb Increase tap area for better mobile UX 2024-08-03 17:57:41 +05:30
Manav Rathi
eea4958ee7 Non-ente ext links 2024-08-03 17:42:49 +05:30
Manav Rathi
6feb3b7897 Move 2024-08-03 17:20:21 +05:30
Manav Rathi
17e57b7486 Inline 2024-08-03 17:14:21 +05:30
Manav Rathi
9673aa1c19 Remove redundant preload
We show the img tag immediately
2024-08-03 17:11:27 +05:30
Manav Rathi
ebf51b99c8 Remove unused image (and its preload) 2024-08-03 17:05:41 +05:30
Manav Rathi
56c4b39d75 Button already handles this 2024-08-03 16:41:33 +05:30
Neeraj Gupta
14d003dd8f [server] Add API to update referral code 2024-08-03 16:39:15 +05:30
Manav Rathi
a01077a1a4 Inline 2024-08-03 16:38:27 +05:30
Neeraj Gupta
29cf5b91a5 [server] Fix deviceLimit tracker 2024-08-03 16:37:00 +05:30
Neeraj Gupta
3392e39f7c [server] Change default link expiry to never 2024-08-03 16:37:00 +05:30
Manav Rathi
c604078736 Prune 2024-08-03 16:31:36 +05:30
Manav Rathi
80dccca62c Accurater 2024-08-03 16:11:59 +05:30
Manav Rathi
04d632b50e Opt
https://mui.com/material-ui/react-use-media-query/#client-side-only-rendering
2024-08-03 16:09:40 +05:30
Neeraj Gupta
c41933edc4 [server] Fix typo (#2608)
## Description

## Tests
2024-08-03 16:07:17 +05:30
Neeraj Gupta
d1dc977d5e [server] Add struct for fileData config 2024-08-03 16:06:47 +05:30
Manav Rathi
0db9bd04a1 Inline 2024-08-03 16:04:41 +05:30
Manav Rathi
179acd7e47 Prune more 2024-08-03 16:00:04 +05:30
Manav Rathi
97486818d8 [web] Use pointer media query to approximate mobile device detection 2024-08-03 15:51:49 +05:30
Vishnu Mohandas
22cff206b3 Update README.md 2024-08-03 15:35:52 +05:30
Manav Rathi
b8e20eb263 [web] Start using new Exif library during date modifications (#2604) 2024-08-03 10:15:31 +05:30
Manav Rathi
d530562552 Update docs 2024-08-03 10:14:30 +05:30
Manav Rathi
ef38b639eb Fix appearance in the info drawer 2024-08-03 10:10:36 +05:30
Manav Rathi
7db35fd8bd I don't see a pen icon anymore
Not sure what this was for
2024-08-03 09:54:19 +05:30
Manav Rathi
59d772f609 Fix the layout shift 2024-08-03 09:54:06 +05:30
Manav Rathi
d5e54214da Fix another bunch of issues
This also fixes the problem with the separator (the colon in 08:54) not aligning
in the default orientation.
2024-08-03 08:57:51 +05:30
Manav Rathi
1227991300 Customize the paper slot the new way 2024-08-03 08:42:16 +05:30
Manav Rathi
cf81d25b6a Migrate renderInput 2024-08-03 08:35:01 +05:30
Manav Rathi
cc596ae4f0 freshen 2024-08-03 06:14:49 +05:30
John Doe
dbab1bad55 allow setting extra parameter for dsn 2024-08-02 21:09:23 +01:00
ashilkn
7c202a4edb [mob][photos] Consider the 'width' and 'height' key also when parsing dimensions of video 2024-08-02 17:26:36 +05:30
Prateek Sunal
289718f7f6 fix(auth/support): update support email to auth@ente.io 2024-08-02 16:40:39 +05:30
Prateek Sunal
986c00f4e8 fix(auth/support): remove support email and redirect to github discussions 2024-08-02 16:36:05 +05:30
Manav Rathi
025b8f7bcf Handle initial option 2024-08-02 15:24:58 +05:30
Victor Muthiani
5f7b411b67 [Auth] Add new icons and fix some icons (#2559)
## Description
1. Icons added:

- Ecitizen Kenya
- Bitget Wallet

2. Fixed icons that were invisble:

- Crypto
- 1xbet

3. Updated icons to cater for both dark and light mode:

- Github
- OKX 
- Bitmart

4. Reduced deriv.svg icon width
2024-08-02 15:22:01 +05:30
Manav Rathi
487cf125c1 Lint fix 2024-08-02 15:17:51 +05:30
Neeraj Gupta
e32cd7b64c [server] Expose API to get and put metadata 2024-08-02 15:09:52 +05:30
Manav Rathi
839b86ce88 uncon 2024-08-02 14:58:51 +05:30
Manav Rathi
2ebfc79420 Handle initial value 2024-08-02 14:54:50 +05:30
Manav Rathi
eb848eb4c6 The other place 2024-08-02 14:51:30 +05:30
Manav Rathi
ea36517832 Move back
Too many requisites first need to be moved to move those functions to new.
2024-08-02 14:49:55 +05:30
Manav Rathi
0bbb15337f Rework 2024-08-02 14:35:11 +05:30
Manav Rathi
8a2d3600e9 wip move 2024-08-02 14:21:51 +05:30
Manav Rathi
4335df1634 mig wip 2024-08-02 13:58:09 +05:30
Manav Rathi
967149c04b New home 2024-08-02 13:44:31 +05:30
Manav Rathi
a19179cacd Fix type 2024-08-02 13:42:12 +05:30
ashilkn
4f3fe73daa [mob][photos] Fix getVideoPropsAsync failing in native video player because a normal file and not the origin file was being passed to it in case of locally available vidoes 2024-08-02 13:33:32 +05:30
Manav Rathi
edc3337192 2 2024-08-02 13:33:10 +05:30
Manav Rathi
0241e408e1 Make it work 1
Rely on default 1900 instead of 1800
2024-08-02 13:18:50 +05:30
Manav Rathi
32469adcc5 Update MUI date picker to try and obtain the UTC functionality
Per https://mui.com/blog/mui-x-v6/#decoupling-versions-from-mui-core, the
version of MUI X is now decoupled from MUI core so this should work even when
our MUI remains at 5.

Migration:
- https://mui.com/x/migration/migration-pickers-v5/
- https://mui.com/x/migration/migration-tree-view-v6/
2024-08-02 12:28:26 +05:30
Manav Rathi
c8fcac8b55 (doesn't work) attempt to use UTC dates
We need to update MUI
2024-08-02 12:24:13 +05:30
Manav Rathi
fa89ed3a7c Switch to dayjs for UTC support 2024-08-02 12:14:30 +05:30
Manav Rathi
1364feeac8 Scope 2024-08-02 11:55:29 +05:30
Manav Rathi
3bf81dda3b Make it work 2024-08-02 11:51:03 +05:30
Manav Rathi
066c41a6df Upgrade 2024-08-02 11:38:10 +05:30
Manav Rathi
57dd8b0c67 Doc 2024-08-02 11:21:25 +05:30
Manav Rathi
54d97c222e Fix lint 2024-08-02 11:14:31 +05:30
Manav Rathi
ee233eab71 Tweak 2024-08-02 11:07:41 +05:30
Manav Rathi
706c288220 Remove unused prop 2024-08-02 10:48:47 +05:30
Manav Rathi
93b7d71543 Use the mui option 2024-08-02 10:47:04 +05:30
Manav Rathi
d6433155db New home 2024-08-02 10:42:51 +05:30
Manav Rathi
993943ccfa Prep 2024-08-02 10:41:28 +05:30
Manav Rathi
99c6c22fe1 [web] Non functional code rearrangement for the plan list (#2597) 2024-08-01 21:19:04 +05:30
Manav Rathi
bf6dc59429 Up 2024-08-01 21:12:07 +05:30
Manav Rathi
7c71277759 Inline 2024-08-01 21:11:10 +05:30
Manav Rathi
88996eddea Inline 2024-08-01 21:08:26 +05:30
Manav Rathi
dbd2addeea Scope 2024-08-01 21:06:44 +05:30
Manav Rathi
ab652ee3fe Inline 2024-08-01 21:05:04 +05:30
Manav Rathi
d14b18867a Remove unused 2024-08-01 21:00:16 +05:30
Manav Rathi
cfe2e96227 Inline 2024-08-01 20:59:26 +05:30
Manav Rathi
ad0b8ae017 Inline 2024-08-01 20:55:52 +05:30
Manav Rathi
7e5577ecd7 Inline 2024-08-01 20:53:19 +05:30
Manav Rathi
cd73a736f4 Remove unused 2024-08-01 20:51:44 +05:30
Manav Rathi
0a03df9242 Inline 2024-08-01 20:50:03 +05:30
Manav Rathi
1c4a6ca8b1 Remove unused 2024-08-01 20:39:28 +05:30
Manav Rathi
f15729d73f Inline 2024-08-01 20:37:14 +05:30
Manav Rathi
8edf6d8253 Remove unnecessary cast 2024-08-01 20:36:18 +05:30
Aman Raj Singh Mourya
43525128eb [mob][photos] Multi-Item Selection and Deletion Feature for Quick Links (#2589)
**Description**
This PR introduces a new feature that allows users to select multiple
links from quick links and delete them in one action.
2024-08-01 20:21:47 +05:30
Aman Raj Singh Mourya
ea585903b7 Merge branch 'quick_links' of https://github.com/ente-io/ente into quick_links 2024-08-01 20:17:32 +05:30
Aman Raj Singh Mourya
42c508b9ce [mob][photos] Use string for ValueKey 2024-08-01 20:16:56 +05:30
ashilkn
2fd960eb0e Merge branch 'main' into quick_links 2024-08-01 20:10:43 +05:30
Aman Raj Singh Mourya
e72c858315 [mob][photos] Fixed animation 2024-08-01 19:55:47 +05:30
Aman Raj Singh Mourya
2af07d9211 [mob][photos] Added animation 2024-08-01 19:55:19 +05:30
Aman Raj Singh Mourya
5f40b2e251 [mob][photos] Extracted strings 2024-08-01 19:31:21 +05:30
Ashil
50b6616680 [mob][auth] Bump up to v3.1.0 (#2582) 2024-08-01 19:25:43 +05:30
Ashil
ca3b477d4c [mob][photo] Fix incorrect SQLite syntax (missing whitespace) (#2587) 2024-08-01 19:25:17 +05:30
Neeraj Gupta
395f0384a0 [cli] Add option to exlude shared or hidden folders 2024-08-01 19:13:03 +05:30
Aman Raj Singh Mourya
1c1135a9b2 [mob][photos] Minor UI changes 2024-08-01 19:03:25 +05:30
ashilkn
31318f10d6 [mob][photos] Set aspect ratio of video 2024-08-01 18:38:34 +05:30
Aman Raj Singh Mourya
105ab79cdb [mob][photos] Changed dialog copy 2024-08-01 18:19:27 +05:30
Neeraj Gupta
0526c63681 [cli] Extend export command to pass filters 2024-08-01 17:52:58 +05:30
Neeraj Gupta
7d8a7257b4 [cli] Add list of filters 2024-08-01 17:46:05 +05:30
ashilkn
af5e9b51e1 [mob][photos] Fix bug in parsing rotation metadata from video using FFProbe 2024-08-01 16:51:36 +05:30
Manav Rathi
884ff970ad [desktop] Make the Exif backfill optional (#2594) 2024-08-01 16:33:53 +05:30
Manav Rathi
22f4a3751f [desktop] Don't use the indexable-files API (#2593)
Discussed. It is meant for mobile app use cases - us using it also on
desktop (where the constraints are different) doesn't really improve on
much latency and adds the overhead of extra API requests on each sync.

Supercedes: https://github.com/ente-io/ente/pull/2591
2024-08-01 16:33:06 +05:30
Manav Rathi
e640302ce0 [desktop] Make the exif backfill optional 2024-08-01 16:30:41 +05:30
Manav Rathi
4e51d76791 [desktop] Don't use the indexable-files API
Discussed. It is meant for mobile app use cases - us using it also on desktop
(where the constraints are different) doesn't really improve on much latency and
adds the overhead of extra API requests on each sync.
2024-08-01 16:12:21 +05:30
ashilkn
9b5b1d297b [mob][photos] Start integrating native_video_player 2024-08-01 15:52:41 +05:30
Manav Rathi
be00f015a7 [desktop] Handle logout for utility process (#2592) 2024-08-01 15:30:58 +05:30
Manav Rathi
9c883eebc6 [desktop] Handle logout for utility process 2024-08-01 15:27:14 +05:30
ashilkn
d5b5b9bd51 [mob][photos] Rename VideoWidgetNew to VideoWidgetMediaKit 2024-08-01 14:53:38 +05:30
Ashil
50f601b66b [mob][photos] Handle/fix issues with media dimensions (#2580)
## Description

- Stopped updating image width and height in public metadata since the
these could be incorrect (width and height inverted to be precise).
- Parse `rotation` metadata from video metadata when parsing video
properties with `ffprobe` to get the correct video width and height
considering `rotation`.
2024-08-01 14:46:02 +05:30
Neeraj Gupta
bfe5632477 [server] Support for inserting and fetching s3 metadata 2024-08-01 13:24:46 +05:30
Neeraj Gupta
a67bc6aee7 [server] Add bucket5 2024-08-01 13:24:25 +05:30
Manav Rathi
c0011ef10b [desktop] Pull existing embeddings first before starting on indexing (#2591)
Speeds up the initial sync on a new client.
2024-08-01 12:36:14 +05:30
Manav Rathi
985de0a5ce Fix the actual issue described in 940c647d50 2024-08-01 12:26:27 +05:30
Manav Rathi
940c647d50 Prevent multiple ticks from being enqueued
Noticed multiple ticks when uploading an item, which brought back focus into the
app and caused wakeUp also to get triggered because of sync. Not sure if this
was the issue, but felt like a potential one.
2024-08-01 12:19:06 +05:30
Manav Rathi
97bbf4811f Save 2024-08-01 11:45:25 +05:30
Manav Rathi
eed991a7b2 Construct the scaffolding 2024-08-01 11:22:10 +05:30
Manav Rathi
5a362b5d45 Move wip 2024-08-01 11:06:41 +05:30
Manav Rathi
523af2600a pull wip 2024-08-01 10:49:45 +05:30
Manav Rathi
f869447c7d File IDs 2024-08-01 10:41:31 +05:30
Manav Rathi
586d8f86f7 Up 2024-08-01 10:32:47 +05:30
Manav Rathi
c369db9453 Impl handler for /embeddings/indexed-files
https://github.com/ente-io/ente/pull/2511/
2024-08-01 10:15:04 +05:30
Manav Rathi
c4103f9136 Restore the pull scaffolding
Partially reverts 61b98a9964
2024-08-01 09:49:54 +05:30
Aman Raj Singh Mourya
ba9d656b38 [mob][photos] Added dialog box for confirmation 2024-07-31 19:47:08 +05:30
Vishnu Mohandas
31493541a1 Update pricing faq (#2588)
## Description

## Tests
2024-07-31 19:34:42 +05:30
vishnukvmd
af90bfade7 Update pricing faq 2024-07-31 19:33:35 +05:30
ashilkn
95e342830b [mob][photo] Fix incorrectly formatted query (missing whitespace) 2024-07-31 18:20:53 +05:30
Manav Rathi
eb2557b2b0 [desktop] Use a utility process for ML indexing (#2583)
* This ensures that the UI remains responsive when indexing is running.
* This allows us to parallelize the in-flight networking etc instead of
waterfalling everything.
* The actual CPU intensive indexing is still serial.
2024-07-31 16:27:28 +05:30
Manav Rathi
9ae979abbe [web] New translations (#2586)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-07-31 15:54:48 +05:30
Crowdin Bot
03805b6e75 New Crowdin translations by GitHub Action 2024-07-31 10:23:46 +00:00
Manav Rathi
b10d674711 [web] Free forever copy changes (#2585) 2024-07-31 15:53:00 +05:30
Aman Raj Singh Mourya
6361859a1b [mob][photos] Batch operation to delete quick links 2024-07-31 15:52:07 +05:30
Manav Rathi
e2f1d7488b [web] Free forever copy changes 2024-07-31 15:49:36 +05:30
Manav Rathi
8a39e4330b [web] New translations (#2584)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-07-31 15:45:29 +05:30
Crowdin Bot
81d1b15aaf New Crowdin translations by GitHub Action 2024-07-31 10:14:24 +00:00
Manav Rathi
f925d4cf27 Update plan IDs for pricing-v4 (#2573) 2024-07-31 15:32:24 +05:30
vishnukvmd
d52ea49a96 Update plan IDs for pricing-v4 2024-07-31 15:30:14 +05:30
Manav Rathi
0bc360c55c Add link 2024-07-31 15:21:52 +05:30
Manav Rathi
154fffd620 Clean unused 2024-07-31 15:11:23 +05:30
Manav Rathi
46cc696ccd Avoid jargon people might not understand 2024-07-31 14:58:24 +05:30
Manav Rathi
5e055b6039 opt unnecessary uploads 2024-07-31 14:44:42 +05:30
Manav Rathi
59cc01053a Handle refresh 2024-07-31 14:35:47 +05:30
Manav Rathi
1b0fe5fd4c Tighten timings 2024-07-31 14:19:25 +05:30
Manav Rathi
bf6aa5f840 Fix 2024-07-31 14:08:16 +05:30
Manav Rathi
ef32313807 x4 2024-07-31 14:04:29 +05:30
Neeraj Gupta
5bd75a8567 [server] Add req/res model files 2024-07-31 13:42:31 +05:30
Manav Rathi
ebbb9a61ee Don't fail on exif errors 2024-07-31 13:14:09 +05:30
Neeraj Gupta
b9b22fa4dc [server] Add DB triggers for validating row sanity 2024-07-31 13:04:51 +05:30
ashilkn
3d730f4d14 [mob][auth] Bump up to v3.1.0 2024-07-31 12:55:57 +05:30
Manav Rathi
4647f9fac2 Undup and scope 2024-07-31 12:47:52 +05:30
Manav Rathi
192e491acb Match the documented behaviour 2024-07-31 12:46:09 +05:30
Ashil
627a34a231 [mob][auth] Lockscreen option auth (#2465)
### Pull Request Description

*Features Added:*

1. *App Lock Options:*
- *Device Lock*: Users can set the app lock to utilize the device's
default lock mechanism (e.g., fingerprint, face recognition, or device
PIN/password).
- *Custom PIN/Password*: Users have the option to set a custom PIN or
password for app lock.

2. *Authentication for App Lock Settings:*
- When users attempt to change the app lock settings, they must
authenticate using the currently set PIN/password or, if none is set,
the device lock.

3. *App Lock on Background and Quit:*
- The app will prompt for authentication when it is brought back to the
foreground after being in the background or when the app is restarted.
4. *Incremental Lock Timer:*
- A timer mechanism is implemented which starts at 30 seconds after few
incorrect unlock attempts.
- The lockout time doubles after each incorrect attempt, increasing
delay penalties.
- After 10 incorrect attempts, the user is automatically logged out.
2024-07-31 12:43:15 +05:30
Manav Rathi
3a5843f532 tail 2024-07-31 12:34:30 +05:30
Manav Rathi
5a3838be34 Route via workers 2024-07-31 12:30:15 +05:30
Manav Rathi
e55a7facc3 Replace our homebrew RPC 2024-07-31 12:11:53 +05:30
Manav Rathi
6ad27a2d42 Cleanup 2024-07-31 11:58:22 +05:30
ashilkn
423f0b6719 [mob][auth] Reorder security section 2024-07-31 11:50:10 +05:30
Manav Rathi
62f723e50c Adapt 2024-07-31 11:33:18 +05:30
Manav Rathi
a97e01171a Commit incorrect but original motivations 2024-07-31 11:27:15 +05:30
Manav Rathi
daed8a72da Only once 2024-07-31 10:17:08 +05:30
Manav Rathi
b69d23028b Remove test code 2024-07-31 09:56:45 +05:30
Manav Rathi
1ae0f9723c Fix 1 2024-07-31 09:56:00 +05:30
Manav Rathi
f2f7b483fd comlink wip 2024-07-31 09:40:08 +05:30
Manav Rathi
95facd60e0 integrate wip 1 2024-07-31 09:20:35 +05:30
Aman Raj Singh Mourya
30cecf53b3 [mob][auth] Hide content default value set to true when applock enabled 2024-07-30 22:02:50 +05:30
Aman Raj Singh Mourya
2101817b23 [mob][auth] Code clean up 2024-07-30 21:49:40 +05:30
Manav Rathi
7baacc6a77 For real - 1 2024-07-30 20:22:09 +05:30
Manav Rathi
65cfcc27a8 Rearrange 2024-07-30 20:00:21 +05:30
Manav Rathi
3f3d10f57b Error 2 2024-07-30 19:53:39 +05:30
Manav Rathi
18cb596d57 Error 1 2024-07-30 19:41:51 +05:30
Manav Rathi
4ca40085c1 init 2024-07-30 19:13:54 +05:30
ashilkn
878d22fd4a [mob][auth]: Show auto lock feature only on mobile 2024-07-30 18:46:03 +05:30
ashilkn
c3c2dd5cc6 [mob][auth] Fix 'App lock' not working onTap from security section on macOS and Linux 2024-07-30 18:14:59 +05:30
ashilkn
08ba58d790 [mob][photos] Write getters to access correct height and width considering the rotation data and keep the raw codec height and width properties private in FFProbeProps 2024-07-30 17:30:20 +05:30
ashilkn
60d9a819f4 [mob][photos] Rename 2024-07-30 16:52:36 +05:30
ashilkn
6842218d2b [mob][photos] Remove unnecessary int to double conversion 2024-07-30 16:37:10 +05:30
ashilkn
3f0855d9a4 [mob][photos] write getter for video dimensions considering rotation in FFProbeProps 2024-07-30 16:27:43 +05:30
ashilkn
b2556e893b [mob][photos] Parse rotation also when parsing video properties using ffprobe 2024-07-30 16:18:30 +05:30
Manav Rathi
81b52419a5 debug strings 2024-07-30 16:03:57 +05:30
Manav Rathi
e66e9251db Fancier 2024-07-30 15:48:44 +05:30
Manav Rathi
37367f7260 Logging 1 2024-07-30 15:41:48 +05:30
ashilkn
48e566ae68 [mob][photos] Stop updating dimension in pubmmd as it could be inverted for some images 2024-07-30 15:40:17 +05:30
Manav Rathi
29877d119c Let it flow 2024-07-30 14:51:40 +05:30
Manav Rathi
c124cdff20 Fix ordering 2024-07-30 14:49:31 +05:30
Manav Rathi
3d83786f6c Workaround 2024-07-30 14:46:54 +05:30
Aman Raj Singh Mourya
a14a8b0cfb [mob][auth] Lockscreen fixes 2024-07-30 14:40:32 +05:30
Manav Rathi
d92a31d8d8 Indicate error 2024-07-30 14:27:27 +05:30
Manav Rathi
3eaa9b449a IPC 2024-07-30 14:16:10 +05:30
Manav Rathi
b28e8c2fb4 IPC 2024-07-30 13:41:58 +05:30
Manav Rathi
24bc175f1c Forward 2024-07-30 13:21:31 +05:30
Manav Rathi
e54910f8d0 Fix origin 2024-07-30 12:44:22 +05:30
Manav Rathi
0195a9b494 Add workaround 2024-07-30 12:43:07 +05:30
Manav Rathi
ea8bb4529f We need to go via the preload 2024-07-30 12:29:11 +05:30
Manav Rathi
180389f3e2 Can't circumvert that way 2024-07-30 12:00:44 +05:30
Manav Rathi
7d42f23abf Send to the right person 2024-07-30 11:48:00 +05:30
Manav Rathi
4087c6ef4e Fix path 2024-07-30 11:39:58 +05:30
Manav Rathi
67a9417528 Scaffold 2024-07-30 11:37:46 +05:30
Manav Rathi
1e720b4b7d Scaffold 2024-07-30 11:23:32 +05:30
Manav Rathi
1a9170632e Take 1 2024-07-30 11:16:04 +05:30
Neeraj Gupta
3a962cfe52 [server] Extend ObjectType instead of creating new enum 2024-07-30 10:30:57 +05:30
Manav Rathi
65d2bfe1c1 Split on the main/utility axis 2024-07-30 10:19:03 +05:30
Manav Rathi
82f808e533 Outline 2024-07-30 09:59:33 +05:30
Ashil
27ae4b83c4 [mob][photos] Subscription screen redesign (#2576) 2024-07-29 22:54:34 +05:30
ashilkn
142a4ddbc4 [mob][photo] Bump up to v0.9.16 2024-07-29 21:44:18 +05:30
ashilkn
406404f8d0 Merge branch 'main' into subscription_screen_redesign 2024-07-29 21:43:19 +05:30
ashilkn
088cec2716 [mob][photos] Fix on tap not working on free plan when onboarding 2024-07-29 21:38:45 +05:30
Manav Rathi
cf6336d100 [web] Minor tweak for the indexer (#2577)
Continuation of https://github.com/ente-io/ente/pull/2574.
2024-07-29 21:13:00 +05:30
Aman Raj Singh Mourya
c6bf6bd7b6 [mob][photos] Changed max quick link count to 4 2024-07-29 21:09:49 +05:30
Manav Rathi
3dbdea472b Add a top level catch handler instead of silent swallows 2024-07-29 20:46:05 +05:30
ashilkn
d5711095f9 [mob][photos] Change border of plans in subscription screen 2024-07-29 19:34:47 +05:30
ashilkn
2a3fe8c49f [mob][photos] Copy stripe subscription page changes to store subscription page 2024-07-29 19:22:53 +05:30
ashilkn
7d94ef0bbd [mob][photos] Subscription page final UI tweaks 2024-07-29 17:56:58 +05:30
ashilkn
4e589840ff [mob][photos] Subscription page UI improvements 2024-07-29 17:15:03 +05:30
Neeraj Gupta
3571281bef [auth] New translations (#2568)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-07-29 17:03:03 +05:30
Neeraj Gupta
7b0ec2991a [mobile] New translations (#2567)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-07-29 17:00:03 +05:30
Ashil
3572efc02b [mob][photos] Add preview to the album link (#2553) 2024-07-29 16:14:26 +05:30
Manav Rathi
3013d68203 [web] Exif - Migrate to a maintained library - Part 6/x (#2574) 2024-07-29 16:12:19 +05:30
Aman Raj Singh Mourya
c7857110ac [mob][photos] Minor changes 2024-07-29 16:11:52 +05:30
Manav Rathi
505e1de14c lint 2024-07-29 16:09:33 +05:30
Manav Rathi
d116c5ccb1 Prune false positives for times picked from file names 2024-07-29 15:59:55 +05:30
Aman Raj Singh Mourya
8f08ab18fc [mob][photos] MInor changes 2024-07-29 15:56:48 +05:30
Neeraj Gupta
dc143bbaaf [server] Minor fix 2024-07-29 15:48:22 +05:30
Neeraj Gupta
8f8f5d2f51 [server] Avoid redirect 2024-07-29 15:47:44 +05:30
Manav Rathi
aad7300e4b Take 2 2024-07-29 15:41:44 +05:30
Neeraj Gupta
2cc87140ed Add basic endpoint to unblock testing 2024-07-29 15:37:58 +05:30
Manav Rathi
0290991e2c DOMParser is not available in web workers
Exif extraction from XMP thus fails with the following console warning

    Warning: DOMParser is not available. It is needed to be able to parse XMP tags

Thus we need to explicitly take a dep on xmldom.
2024-07-29 15:16:33 +05:30
Manav Rathi
9e2e8e4d63 Fix 2024-07-29 14:54:31 +05:30
Aman Raj Singh Mourya
509b7bda67 [mob][photos] Moving code to share_util.dart 2024-07-29 14:48:42 +05:30
Manav Rathi
30db24721a Fix video spinner 2024-07-29 14:46:29 +05:30
Manav Rathi
b121daa607 Trace 2024-07-29 14:40:11 +05:30
Manav Rathi
bae717dc69 Prepare for internal users 2024-07-29 14:19:17 +05:30
Manav Rathi
b61e4f4ac6 Integrate exif 2024-07-29 13:55:37 +05:30
Manav Rathi
a7e0c5b61d Use the new server enum 2024-07-29 13:20:25 +05:30
Manav Rathi
7a2d925737 [server] Stop exposing /metrics for self-hosted users (#2569)
Doesn't impact Ente's production instances since this endpoint was
disallowed on the load balancer, but instead of requiring the same for
folks who are self hosting we modify the source to not expose /metrics
on :8080 (they'll still be available on :2112).

Refs:
-
2199a42d96/middleware.go (L345)
- https://github.com/ente-io/ente/discussions/2562
2024-07-29 12:05:07 +05:30
Vishnu Mohandas
84ee895b93 Fix typo (#2570) 2024-07-29 11:56:53 +05:30
Vishnu Mohandas
92068fbbd6 Fix typo 2024-07-29 11:56:40 +05:30
Neeraj Gupta
950b2bb997 [server] Update db script 2024-07-29 11:42:14 +05:30
Manav Rathi
d989a3b631 [server] Stop exposing /metrics for self-hosted users
Doesn't impact Ente's production instances since this endpoint was disallowed on
the load balancer, but instead of requiring the same for folks who are self
hosting we modify the source to not expose /metrics on :8080 (they'll still be
available on :2112).

Refs:
- 2199a42d96/middleware.go (L345)
- https://github.com/ente-io/ente/discussions/2562
2024-07-29 11:22:34 +05:30
Ashil
a8c9c33aaa [mob][photos]App lock screen UI improvements (#2536) 2024-07-29 11:22:12 +05:30
Neeraj Gupta
198dab9f58 [server] Add db script to store data 2024-07-29 10:37:13 +05:30
Manav Rathi
184e6090fd [web] New translations (#2566)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-07-29 09:51:49 +05:30
Crowdin Bot
d1417f364a New Crowdin translations by GitHub Action 2024-07-29 01:16:41 +00:00
Crowdin Bot
d2a6440cba New Crowdin translations by GitHub Action 2024-07-29 01:04:16 +00:00
Crowdin Bot
f09a8c4c51 New Crowdin translations by GitHub Action 2024-07-29 00:31:41 +00:00
Manav Rathi
8d91b857fb [web] Exif - Migrate to a maintained library - Part 5/x (#2558)
Things are reaching a state where we can flip the switch.
2024-07-27 21:51:26 +05:30
Manav Rathi
d1a74da4a4 Rely on the lib's formatters 2024-07-27 21:35:43 +05:30
Manav Rathi
08833390bc Retain previous behaviour 2024-07-27 20:24:59 +05:30
Manav Rathi
e1923fdebd Prone to confusion between the object and the type 2024-07-27 20:13:06 +05:30
Manav Rathi
06be08a382 Fix accidental aliasing 2024-07-27 20:08:56 +05:30
Manav Rathi
99066b8fea Use 2024-07-27 20:02:06 +05:30
Manav Rathi
487fd62feb Rearrange 2024-07-27 20:00:34 +05:30
Manav Rathi
26c40ab2ec Test
Chrome, Safari, Firefox, Node.js (macOS)

    const parseMetadataDate = (s) => {
        const timestamp = new Date(s).getTime() * 1000;
        if (isNaN(timestamp)) return undefined;

        let offsetTime;
        let sWithoutOffset;

        const m = s.match(/Z|[+-]\d\d:?\d\d$/);
        if (m?.index) {
            sWithoutOffset = s.substring(0, m.index);
            offsetTime = s.substring(m.index);
        } else {
            sWithoutOffset = s;
        }

        const date = new Date(
            sWithoutOffset + (sWithoutOffset.length <= 10 ? "" : "Z"),
        );
        const dateTime = dropLast(date.toISOString());

        return { dateTime, offsetTime, timestamp };
    };

    const dropLast = (s) => (s ? s.substring(0, s.length - 1) : s);

    const test = () => {
        console.log(parseMetadataDate("2023"));
        console.log(parseMetadataDate("2023-08"));
        console.log(parseMetadataDate("2023-08-23"));
        console.log(parseMetadataDate("2023-08-23T18:03:00"));
        console.log(parseMetadataDate("2023-08-23T18:03:00+05:30"));
        console.log(parseMetadataDate("2023-08-23T18:03:00.000+05:30"));
        console.log(parseMetadataDate("2023-08-23T12:33:00.000Z"));
    };

    test();
2024-07-27 19:45:15 +05:30
Manav Rathi
4deb9c8f13 Impl wip 2024-07-27 19:22:41 +05:30
ashilkn
efab8918f2 [mob][photos] Many changes to subscription page 2024-07-27 17:47:13 +05:30
Manav Rathi
74c5b22927 Outline 2024-07-27 17:42:54 +05:30
Manav Rathi
8b30d52e94 New home 2024-07-27 16:03:29 +05:30
ashilkn
b5d577f090 [mob][photos] Tweak animation 2024-07-27 13:23:11 +05:30
ashilkn
6440b2176d [mob][photos] Update font size in subscription screen 2024-07-27 13:17:12 +05:30
ashilkn
d3d859f252 [mob][photos] Update asset 2024-07-27 12:56:16 +05:30
ashilkn
63fe67d677 [mob][photos] Add animation when to price when switching between monthly and yearly plans 2024-07-27 12:48:07 +05:30
Neeraj Gupta
23d4156a12 [server] Make linter happy and new entityType: person_v2 (#2545)
## Description

## Tests
2024-07-27 12:36:50 +05:30
ashilkn
41f59ec9ca [mob][photos] Move SubscriptionToggle widget to subscription_common_widgets.dart 2024-07-27 12:16:47 +05:30
ashilkn
bebaa76085 [mob][photos] Show which plan is popular and active in subscription screen 2024-07-27 12:09:43 +05:30
Manav Rathi
c28b6e3a62 Stay within JavaScript
https://www.typescriptlang.org/docs/handbook/enums.html#objects-vs-enums
2024-07-27 10:29:46 +05:30
Manav Rathi
19304daeab Auto rename didn't catch this 2024-07-27 10:24:12 +05:30
Manav Rathi
5c0942f2b7 Remove unused 2024-07-27 10:15:41 +05:30
Manav Rathi
1adab703b8 Rename FILE_TYPE 2024-07-27 10:14:19 +05:30
Manav Rathi
9613361151 Outline 2024-07-27 10:04:47 +05:30
Manav Rathi
77fcd04613 [web] Exif - Migrate to a maintained library - Part x/x (#2556) 2024-07-27 08:56:28 +05:30
Manav Rathi
47f22cf7e4 [desktop] Attempts to improve large drag drops on Windows (#2555)
Trying to diagnose a customer issue where they reported that the
renderer was crashing when trying to drag and drop a 1TB folder on
Windows. Fixing some things that popped out in the memory allocations or
the CPU time when testing with a synthetic workflow (on macOS) - these
may or may not fix their issue, but these are anyway improvements and
will only make things better.
2024-07-26 21:21:48 +05:30
Manav Rathi
90cd6502c1 [desktop] Attempts to improve large drag drops on Windows
Trying to diagnose a customer issue where they reported that the renderer was
crashing when trying to drag and drop a 1TB folder on Windows. Fixing some
things that popped out in the memory allocations or the CPU time when testing
with a synthetic workflow (on macOS) - these may or may not fix their issue, but
these are anyway improvements and will only make things better.
2024-07-26 21:18:17 +05:30
ashilkn
b2103e3893 [mob][photos] Update subscription page colors 2024-07-26 20:09:02 +05:30
ashilkn
6d5af2e6a5 [mob][photos] Update colors and text style 2024-07-26 19:43:25 +05:30
ashilkn
ef1429685b [mob][photos] Make subscription toggle work 2024-07-26 19:19:42 +05:30
ashilkn
fc93deb575 [mob][photos] Create new subscription toggle 2024-07-26 18:50:11 +05:30
Aman Raj Singh Mourya
8bbef91103 [mob][photos] Add preview to the album link 2024-07-26 18:02:17 +05:30
Manav Rathi
7f357d0f65 lint 2024-07-26 16:11:06 +05:30
ashilkn
87e3aa4d11 [mob][photos] Redesign header widget of subscription page 2024-07-26 16:09:35 +05:30
Manav Rathi
6c7f8e5fae Mention we're ignoring NaNs too 2024-07-26 15:25:17 +05:30
Manav Rathi
b637f2fe08 Handle exif subsecs 2024-07-26 15:15:32 +05:30
Manav Rathi
5995730659 Rearrange 2024-07-26 14:54:51 +05:30
Manav Rathi
689d3c4c82 New lib works in more cases than before 2024-07-26 14:46:52 +05:30
Manav Rathi
d9a8eafbe3 Tweak 2024-07-26 14:29:56 +05:30
Manav Rathi
e14e06dc1a Handle errors 2024-07-26 14:22:09 +05:30
Manav Rathi
ce4063c892 There is always some data (from the image itself e.g.) 2024-07-26 13:33:48 +05:30
ashilkn
f01b3b9def [mob][photos] Redesign app bar of subscription screen 2024-07-26 13:29:33 +05:30
Manav Rathi
8cde630e01 Tweaks 2024-07-26 13:09:39 +05:30
Manav Rathi
55a86cc85c Test 1 2024-07-26 13:04:20 +05:30
Manav Rathi
8bf88c2059 Full listing 2024-07-26 12:51:47 +05:30
ashilkn
af42c42141 [mob][photos] Make borders, bg color, stroke color and padding same as design on SubscriptionPlanWidget 2024-07-26 12:49:07 +05:30
Manav Rathi
0d01ed5c00 Full listing 2024-07-26 12:38:50 +05:30
ashilkn
3edc323272 [mob][photos] Redesign and change logic in SubscriptionPlanWidget to match new design 2024-07-26 12:20:39 +05:30
Manav Rathi
f6c8e13816 Update wip 2024-07-26 12:07:59 +05:30
Manav Rathi
beace4cbde Parse wip 2024-07-26 11:57:46 +05:30
Manav Rathi
bac49c7058 Ontology wip 2024-07-26 11:03:18 +05:30
Manav Rathi
76faf4c1d7 Use raw exif - wip 1 2024-07-26 09:42:57 +05:30
Manav Rathi
47ded8b302 Dates 2024-07-25 21:07:18 +05:30
Manav Rathi
1501e055a9 Rename 2024-07-25 20:56:25 +05:30
Manav Rathi
2cb9c915aa Narrow down scope: index => extract raw exif 2024-07-25 20:49:36 +05:30
Ashil
8072b2943a [mob][photos] Improve UX on "Create new account" screen (#2548)
## Description

Since the app doesn't let a user create an account with a weak password
and since isn't clear for the user how the app classifies a password as
"Weak", "Moderate" or "Strong", users would find it hard to come up with
a moderate or strong password. Also, the app wasn't surfacing the
strength every time.

All these UX issues have been fixed in this PR. 
 
Before: 


https://github.com/user-attachments/assets/c9630c44-4591-4bdd-a05d-8098ff5afef8

After:


https://github.com/user-attachments/assets/a9c1abfa-de1e-44c6-9f7e-157abe4f8de3


## Tests

Tested new account creation flow, did not find any regressions and can't
think of any that could have been introduced.
2024-07-25 19:51:57 +05:30
Manav Rathi
b4ea15f00b Tweak the debug logging 2024-07-25 19:02:32 +05:30
Manav Rathi
191f1fd097 creationTime will always be present 2024-07-25 15:51:46 +05:30
ashilkn
fb25888129 [mob][photos] Release resources in dispose() and increase tap area of password strength info 2024-07-25 15:08:24 +05:30
Vishnu Mohandas
f0d5c7d51f Add breakdown of AppStore's privacy disclosure (#2549) 2024-07-25 15:06:39 +05:30
vishnukvmd
d5b59765aa Add breakdown of AppStore's privacy disclosure 2024-07-25 15:05:51 +05:30
ashilkn
d847141eb7 [mob][photos] Extract string 2024-07-25 13:43:04 +05:30
ashilkn
5d417f3825 [mob][photos] Give info to user how password strength is calculated in 'Create new account' screen 2024-07-25 13:40:51 +05:30
ashilkn
422a36319e [mob][photos] Create reuseble infoDialog 2024-07-25 13:36:07 +05:30
Aman Raj Singh Mourya
10e19ffae2 [mob][auth] Minor UI changes 2024-07-25 13:22:06 +05:30
Aman Raj Singh Mourya
28b9d5512f [mob][auth] Add animation when toggling app lock 2024-07-25 13:19:19 +05:30
ashilkn
939363fd7a [mob][photos] Always show password strength when needed in create new account screen 2024-07-25 12:55:26 +05:30
Neeraj Gupta
584db778ee [server] Add person_v2 entity type 2024-07-25 11:51:29 +05:30
Neeraj Gupta
336aa7ac5f [server] Make linter happy 2024-07-25 11:47:06 +05:30
Neeraj Gupta
4bcec9d43b [server] Temporarily disable fetch from Wasabi (#2544)
## Description

## Tests
2024-07-25 11:41:18 +05:30
Ashil
e5239e588b [mob][photos] Reorder security section in settings for consistent UI (#2538) 2024-07-25 11:40:55 +05:30
Neeraj Gupta
553c153155 [server] Temporarily disable fetch from Wasabi 2024-07-25 11:39:19 +05:30
Manav Rathi
a4a4b7f941 debug logging 2024-07-25 09:51:50 +05:30
Manav Rathi
89a8a45935 [web] Exif - New library migration - Part 4/x (#2542) 2024-07-24 21:05:33 +05:30
Manav Rathi
adf68a82c5 Add some debugging code 2024-07-24 21:00:51 +05:30
Manav Rathi
0d313825d6 debug logging 2024-07-24 20:46:37 +05:30
Manav Rathi
218a5ce5f9 Tie together 2024-07-24 20:42:49 +05:30
Manav Rathi
719f056841 Interface 2024-07-24 20:28:03 +05:30
Manav Rathi
c835984e40 Single date 2024-07-24 20:08:08 +05:30
Manav Rathi
5a36e37e93 Fuse 2024-07-24 19:54:39 +05:30
Manav Rathi
16ec4db546 Use 2024-07-24 19:41:31 +05:30
Manav Rathi
ae0b701319 Parse IPTC dates 2024-07-24 19:29:04 +05:30
ashilkn
31043f5f4e [mob][photos] Reorder security section in settings for consistent UI 2024-07-24 18:59:12 +05:30
Manav Rathi
4e29f1e03a Return pairs 2024-07-24 18:44:52 +05:30
ashilkn
dafa155903 Revert "[mob][photos] Fix internal release workflow failing"
This reverts commit 5764734f14.
2024-07-24 18:37:26 +05:30
Ashil
f3a69b0d0b [mob][photos] Fix internal release workflow failing (#2537)
To fix
`Changes cannot be sent for review automatically. Please set the query
parameter changesNotSentForReview to true. Once committed, the changes
in this edit can be sent for review from the Google Play Console UI.`
2024-07-24 18:23:53 +05:30
ashilkn
5764734f14 [mob][photos] Fix internal release workflow failing 2024-07-24 18:18:36 +05:30
ashilkn
2be4c7e470 [mob][photos] Minor UI changes 2024-07-24 17:52:44 +05:30
ashilkn
87ed684ce9 [mob][photos] Add animation when toggling app lock 2024-07-24 17:46:48 +05:30
Aman Raj Singh Mourya
3fd7100dd7 [mob][auth] Used better names 2024-07-24 17:26:49 +05:30
ashilkn
1545f75217 [mob][photos] Bump up to v0.9.15 2024-07-24 17:26:01 +05:30
Ashil
816061774e [mob][photos] Show app content (#2522)
**Toggle Implementation:** Added a new feature in the app settings to
enable or disable the visibility of app content in app switcher mode.
2024-07-24 17:20:26 +05:30
ashilkn
4451d39ac9 [mob][photos] Revert change to remove bug 2024-07-24 17:15:28 +05:30
ashilkn
12fbc6c801 [mob][photos] Use better names 2024-07-24 17:11:51 +05:30
Aman Raj Singh Mourya
386a2f841e [mob][auth] Extracted strings 2024-07-24 16:35:47 +05:30
Aman Raj Singh Mourya
275e521c40 [mob][auth] Fixes 2024-07-24 16:12:31 +05:30
ashilkn
2f6530d6d6 [mob][photos] Add comment for context 2024-07-24 16:02:25 +05:30
ashilkn
40f0829f6b [mob][photos] Make code better readable 2024-07-24 16:00:18 +05:30
Manav Rathi
cb0be8a624 [web] Exif - New library migration - Part 3/x (#2534) 2024-07-24 15:36:38 +05:30
Manav Rathi
3da9361271 Make the linter happy 2024-07-24 15:32:18 +05:30
Neeraj Gupta
aab6bb47b1 [server] Add new type for derived data (#2533)
## Description

## Tests
Tested locally, both DB insertion & value for client.
2024-07-24 15:27:33 +05:30
Manav Rathi
65863d1b8f Match the current order 2024-07-24 15:26:30 +05:30
Manav Rathi
7b80c5bf77 Do it as per the XMP spec
This is the format I've seen in all the XMP files I've encountered so far too
(not relying on this evidence, just that it corroborates what the spec says).

The wording in the exiftool spec was confusing, I now think what it means is
that _exiftool_ will use that format, not XMP.
2024-07-24 15:18:40 +05:30
Neeraj Gupta
626bc71b25 [server] Use req header for client info 2024-07-24 15:02:28 +05:30
Manav Rathi
1bcf232d25 Split 2024-07-24 14:53:18 +05:30
Aman Raj Singh Mourya
b1907ff091 [mob][photos] Extracted strings 2024-07-24 14:46:15 +05:30
Aman Raj Singh Mourya
940c02bbbc [mob][photos] Merge branch 'main' into show_app_content 2024-07-24 14:31:55 +05:30
Manav Rathi
66ed561d07 ExifReader trims the exif: or tiff: prefix from the XMP tags
12360dd8f3/src/xmp-tags.js (L252)
2024-07-24 14:17:13 +05:30
Neeraj Gupta
66e1062cd3 [server] Add derived model type 2024-07-24 13:56:48 +05:30
Manav Rathi
bd8057ede3 Dimensions 2024-07-24 13:53:23 +05:30
Aman Raj Singh Mourya
9c5d958250 [mob][photos] Minor fixes 2024-07-24 13:35:01 +05:30
Manav Rathi
db52780cee Lat lng 2024-07-24 13:00:01 +05:30
Manav Rathi
0730ba72a6 Build up 2024-07-24 12:54:37 +05:30
Manav Rathi
2ff6a2f73c XMP 2024-07-24 12:27:32 +05:30
Manav Rathi
f5f0af2ed8 Rely on the JS parser 2024-07-24 12:08:47 +05:30
Prateek Sunal
4f14fafa34 fix(panorama): update panorama checking mechanism to reduce checks 2024-07-24 11:59:35 +05:30
Manav Rathi
65f2c92d41 Parse 2 2024-07-24 11:56:57 +05:30
Manav Rathi
b37fbab2dc Parse 1 2024-07-24 11:51:02 +05:30
Neeraj Gupta
7c7299aa09 CLI: Allow setting secrets path via env var (#2426)
## Description

Adds a new enviroment variable `ENTE_CLI_SECRETS_PATH`, that allows
specifying the path to a `secrets.txt` like the one used in the
dockerized version. If no path is provided, the old behaviour is
maintained.

The configuration variable and behaviour is analog to the already
present `ENTE_CONFIG_PATH` variable, which allows specifying a
configuration.

This provides a solution for people running without gnome-keyring
(https://github.com/ente-io/ente/issues/722 and
https://github.com/ente-io/ente/issues/1328)
2024-07-24 11:31:41 +05:30
Ashil
005d786535 [mob][photos] Fix appbar getting clipped on custom font and display size on pixel 7 (#2526) 2024-07-24 11:30:48 +05:30
Manav Rathi
f17600a7c8 Separate 2024-07-24 11:27:38 +05:30
Manav Rathi
18ac20fd80 Sketch 2024-07-24 11:26:05 +05:30
Manav Rathi
870697daf8 Outline 2024-07-24 11:09:20 +05:30
Manav Rathi
ea0cc47c9c Outline 2024-07-24 10:39:37 +05:30
Aman Raj Singh Mourya
869ecb832e [mob][auth] Minor fixes and used better names 2024-07-23 23:30:36 +05:30
Aman Raj Singh Mourya
1e5cbc8422 [mob][photos] Minor changes 2024-07-23 21:59:59 +05:30
Manav Rathi
feeda425a5 [desktop] Further clarify the comment (#2528)
Updates 79fcf18f62
2024-07-23 20:00:45 +05:30
Manav Rathi
7d8961fbc5 [desktop] Further clarify the comment
Updates 79fcf18f62
2024-07-23 19:55:36 +05:30
Manav Rathi
79fcf18f62 [desktop] Fix desktop app direct uploads when self-hosting (#2527)
It seems that Backblaze returns `null` as the ACAO response if the
scheme is not http(s), even if we have set allowedOrigins to "*". The
desktop app has a custom scheme, "ente://app", which is thus causing B2
to return null.

    # Works:
curl -v -X OPTIONS -H 'Origin: http://example.org' -H
'Access-Control-Request-Method: PUT'
'https://xxx.s3.eu-central-003.backblazeb2.com/yyy'

    # Fails:
curl -v -X OPTIONS -H 'Origin: ente://example.org' -H
'Access-Control-Request-Method: PUT'
'https://xxx.s3.eu-central-003.backblazeb2.com/yyy'

Ref:
https://github.com/ente-io/ente/discussions/2461#discussioncomment-10125881
2024-07-23 19:47:28 +05:30
Manav Rathi
7f28d2bfe9 [desktop] Fix desktop app direct uploads when self-hosting
It seems that Backblaze returns `null` as the ACAO response if the scheme is not
http(s), even if we have set allowedOrigins to "*". The desktop app has a custom
scheme, "ente://app", which is thus causing B2 to return null.

    # Works:
    curl -v -X OPTIONS -H 'Origin: http://example.org' -H 'Access-Control-Request-Method: PUT' 'https://xxx.s3.eu-central-003.backblazeb2.com/yyy'

    # Fails:
    curl -v -X OPTIONS -H 'Origin: ente://example.org' -H 'Access-Control-Request-Method: PUT' 'https://xxx.s3.eu-central-003.backblazeb2.com/yyy'

Ref: https://github.com/ente-io/ente/discussions/2461#discussioncomment-10125881
2024-07-23 19:44:34 +05:30
ashilkn
dbed9fb91c [mob][photos] Fix appbar getting clipped on custom font and display size on pixel 7 2024-07-23 18:45:12 +05:30
ashilkn
a73de2848e [mob][auth] Remove unused import 2024-07-23 17:19:04 +05:30
ashilkn
875b079850 [mob] Minor refactor 2024-07-23 17:17:04 +05:30
ashilkn
47203af4ff [mob][auth] Bump up pinput 2024-07-23 17:13:30 +05:30
ashilkn
8a35b71bb8 [mob][auth] Extract strings 2024-07-23 17:12:58 +05:30
Manav Rathi
3e02c748ce Delete the raw xmp 2024-07-23 16:20:53 +05:30
Manav Rathi
4b7fe45963 Prune embedded thumbnails and images
Ref:
- https://github.com/mattiasw/ExifReader/issues/108#issuecomment-752422822
2024-07-23 16:15:34 +05:30
Manav Rathi
af66c55444 Determine the flags 2024-07-23 15:58:51 +05:30
ashilkn
439a7771b0 Merge branch 'main' into lockscreen_option_auth 2024-07-23 15:55:35 +05:30
Manav Rathi
e4a288d6cf Move to separate file 2024-07-23 15:13:35 +05:30
Aman Raj Singh Mourya
39a693edac [mob][photos] Quick fixes 2024-07-23 15:04:19 +05:30
Aman Raj Singh Mourya
57ec8771fb [mob][photos] Show app content fixes 2024-07-23 14:05:57 +05:30
Ashil
088b4b9cff [mob][photos] Animate visibility toggling of appbar and bottom bar when toggling swipe lock (#2520) 2024-07-23 11:57:01 +05:30
ashilkn
6cb5c06ea8 [mob][photos] Animate visibility toggling of appbar and bottom bar when toggling swipe lock 2024-07-23 11:49:05 +05:30
Manav Rathi
cfb8c6a192 [docs] Mention mobile app for iCloud imports (#2519) 2024-07-23 10:52:53 +05:30
Manav Rathi
e7a399ff48 [docs] Mention mobile app for iCloud imports 2024-07-23 10:50:22 +05:30
Manav Rathi
7364b4f3ef [web] Exif improvements - Part 2/x (#2516)
Refs:
-
https://photo.stackexchange.com/questions/130570/can-i-assume-the-datetimeoriginal-of-an-image-without-an-offsettimeoriginal-is-a
2024-07-22 21:30:44 +05:30
Manav Rathi
339182b73f [web] Exif improvments
Refs:
- https://photo.stackexchange.com/questions/130570/can-i-assume-the-datetimeoriginal-of-an-image-without-an-offsettimeoriginal-is-a
2024-07-22 21:27:57 +05:30
Manav Rathi
6a9befd566 [web] Exif write-back improvements (#2515) 2024-07-22 21:04:32 +05:30
Manav Rathi
fc03d2196d Tell eslint that we want the ? 2024-07-22 21:01:36 +05:30
Manav Rathi
3ff3841565 zero pad 2024-07-22 20:48:40 +05:30
Aman Raj Singh Mourya
5c28780bc0 [mob][photos] Add Swipe Restriction and Authentication for Media Files (#2502)
This PR introduces a feature to lock individual media files (photos,
live photos, and videos) in the gallery.
This feature ensures that sensitive content remains protected,
especially when the device is handed to others.

Key aspects include:
- **Locking Mechanism:** Users can lock a media file, which hides all
other options and restricts access when the device is handed to others..
- **Authentication:** To view other files, users must authenticate via
the device's lock screen or a custom app PIN/pattern.
- **Swipe Restriction:** Swiping to navigate other files triggers an
authentication prompt to ensure secure access.
2024-07-22 19:50:00 +05:30
Manav Rathi
6e37a78d54 [docs] Document the Google Takeout Intel macOS video thumbnail scenario (#2514)
Ref:
- https://github.com/ente-io/ente/issues/2189#issuecomment-2184095189
- https://discord.com/channels/948937918347608085/1254116633237127198
2024-07-22 19:29:34 +05:30
Manav Rathi
d20e880bed Add doc note 2024-07-22 19:23:22 +05:30
Manav Rathi
2568e4cbb4 Document the case from user logs
[rndr] [error] Native thumbnail generation failed: Error: Error invoking remote method 'ffmpegExec': Error: Command failed: '/Applications/ente.app/Contents/Resources/app.asar.unpacked/node_modules/ffmpeg-static/ffmpeg' -i /var/folders/61/8lm3qh2s1vx9905_jkvgcsqh0000gn/T/ente/9P6wsR5mPA -ss '00:00:00' -vframes 1 -vf 'scale=-1:720' '/var/folders/61/8lm3qh2s1vx9
905_jkvgcsqh0000gn/T/ente/wvkVRFNgpy.jpeg'

    /bin/sh: /Applications/ente.app/Contents/Resources/app.asar.unpacked/node_modules/ffmpeg-static/ffmpeg: Bad CPU type in executable

    [rndr] [warn] Not using browser based thumbnail generation fallback for video at path takeout-xxx.zip,Takeout/yyy.mp4
2024-07-22 19:05:41 +05:30
ashilkn
4cfc38c4db [mob][photos] Resolve merge conflicts and merge main 2024-07-22 17:12:06 +05:30
ashilkn
27cd567225 [mob][photos] Remove unused translations 2024-07-22 16:49:34 +05:30
Neeraj Gupta
cdbf8c5f09 [server] Use regular go context in repo (#2512)
## Description

## Tests
2024-07-22 16:32:39 +05:30
Aman Raj Singh Mourya
e0beb414f9 [mob][auth] Removed app lock subtitle from the setting_section_widget 2024-07-22 16:32:34 +05:30
Neeraj Gupta
f35d2773aa [server]Use regular go context in repo 2024-07-22 16:29:20 +05:30
Aman Raj Singh Mourya
78306ccf1d [mob][auth] Implemented logic for show app content 2024-07-22 16:27:12 +05:30
ashilkn
310e20598e [mob][photos] Extract strings 2024-07-22 16:24:55 +05:30
Neeraj Gupta
c5731e8894 [server] Add API to return indexed files for given model (#2511)
## Description
Planning to consume this API on mobile to fetch already indexed files 

## Tests
Tested locally
2024-07-22 16:19:51 +05:30
Neeraj Gupta
40a4f783f7 [server] Add API to return indexed files for given model 2024-07-22 16:15:25 +05:30
Ashil
6afd47ce3c Autolock options implemented (#2420) 2024-07-22 15:42:37 +05:30
Aman Raj Singh Mourya
972b7b82dd [mob][photos] Quick fixes and fallback when no system lock found 2024-07-22 15:28:09 +05:30
Manav Rathi
19e7c2d65c Fix 2024-07-22 15:25:53 +05:30
Manav Rathi
cff6570ebb Move to a layer that should be dealing with the piexifjs internals 2024-07-22 15:23:37 +05:30
Manav Rathi
3b1fd78fbe Selective handling 2024-07-22 15:21:35 +05:30
Manav Rathi
ca8ae8c6e7 Fix the fallback 2024-07-22 15:16:58 +05:30
Manav Rathi
09036bb57f Move the catch up 2024-07-22 15:02:36 +05:30
Aman Raj Singh Mourya
e3e58eb9c2 [mob][auth] Show app content option added 2024-07-22 14:58:03 +05:30
Manav Rathi
9e81591c63 Rearrange 2024-07-22 14:52:16 +05:30
Manav Rathi
fda6f68688 The default type deduced by tsc from the JS works
This file was apparently never in use (its extension was not .d.ts).
2024-07-22 14:43:11 +05:30
Manav Rathi
bd2e8bb728 Rename 2024-07-22 14:42:44 +05:30
Manav Rathi
c918a796af Add types 2024-07-22 14:27:02 +05:30
ashilkn
85413e6269 [mob][photos] Resolve merge conflicts and merge main 2024-07-22 14:23:01 +05:30
ashilkn
87bd90870b [mob][photos] Extract strings 2024-07-22 14:18:28 +05:30
Manav Rathi
67d1d6c597 Move 2024-07-22 13:57:59 +05:30
Manav Rathi
d59e50ff93 Mention why 2024-07-22 13:52:54 +05:30
Manav Rathi
c92e08c8d4 Rewrite
to the same result
2024-07-22 13:43:53 +05:30
Manav Rathi
67df790d28 Shorten
We don't have a CSP yet (it is report only, and there we already allow data:)

Ref:
- https://stackoverflow.com/questions/12168909/blob-from-dataurl
2024-07-22 12:09:50 +05:30
Manav Rathi
34e13caa77 Doc 2024-07-22 11:55:16 +05:30
Manav Rathi
5a79658e58 Tweak 2024-07-22 11:39:59 +05:30
Manav Rathi
f97d5b19d9 Inline
I did try and search both in git history and on the internet if caching the
FileReader itself has any performance benefits, but I didn't find anything.
2024-07-22 11:37:44 +05:30
Neeraj Gupta
1972239bb0 [auth] New translations (#2508)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-07-22 10:23:58 +05:30
Neeraj Gupta
1da1aee845 [mobile] New translations (#2507)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-07-22 10:23:05 +05:30
Manav Rathi
d4accf09f9 [web] New translations (#2506)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-07-22 09:57:31 +05:30
Crowdin Bot
e1dac063f6 New Crowdin translations by GitHub Action 2024-07-22 01:16:50 +00:00
Crowdin Bot
3954464648 New Crowdin translations by GitHub Action 2024-07-22 01:04:08 +00:00
Crowdin Bot
068b5e6dd2 New Crowdin translations by GitHub Action 2024-07-22 00:32:01 +00:00
Aman Raj Singh Mourya
3fbe161576 [mob][photos] Fixes 2024-07-21 23:46:11 +05:30
Aman Raj Singh Mourya
1381cfc6e4 [mob][photos] Used privacy_screen instead of secure_app_switcher to hide app content 2024-07-21 23:44:55 +05:30
Manav Rathi
ab3bb113ea [web] Dialog related refactoring (#2503) 2024-07-20 21:25:07 +05:30
Manav Rathi
92fae72760 Move and merge 2024-07-20 21:13:26 +05:30
Manav Rathi
4834cfb3ff Inline 2024-07-20 21:03:22 +05:30
Manav Rathi
542de42875 Remove from context 2024-07-20 20:58:49 +05:30
Manav Rathi
b57c6ba556 Rem unused 2024-07-20 20:56:15 +05:30
Manav Rathi
046275a09c Inline 2024-07-20 20:55:48 +05:30
Manav Rathi
0a3ee6e7bb Remove unused 2024-07-20 20:54:55 +05:30
Manav Rathi
caf6728876 Inline 2024-07-20 20:53:26 +05:30
Manav Rathi
e23bce3537 Inline 2024-07-20 20:52:55 +05:30
Manav Rathi
2adb93fb1b Inline 2024-07-20 20:51:47 +05:30
Manav Rathi
c0b80315ec Remove unused prop 2024-07-20 20:47:46 +05:30
Manav Rathi
4f41a32647 More 2024-07-20 20:43:22 +05:30
Manav Rathi
eadff3b7b3 More 2024-07-20 20:34:12 +05:30
Manav Rathi
eb8fa6db84 Make the connection explicit 2024-07-20 20:27:47 +05:30
Manav Rathi
8202c9b4d3 Reuse pattern 2024-07-20 20:26:28 +05:30
Manav Rathi
1c0261bc5c Remove default props 2024-07-20 20:13:14 +05:30
Aman Raj Singh Mourya
254fb418ce [mob][photos] Auto lock default time set to 5 seconds 2024-07-20 20:03:56 +05:30
Manav Rathi
e55de904b4 Fix the width restriction when going fullscreen 2024-07-20 19:56:04 +05:30
Manav Rathi
296dc21e88 Systematize 2024-07-20 19:14:28 +05:30
ashilkn
73b57ffb34 Merge branch 'main' into autolock_options 2024-07-20 18:27:13 +05:30
Aman Raj Singh Mourya
e73bb0d374 [mob][photos] Used PopScope instead of WillPopScope 2024-07-20 17:54:43 +05:30
Aman Raj Singh Mourya
b8cb1332c6 [mob][photos] File lock implemented 2024-07-20 16:16:54 +05:30
Manav Rathi
1cf2b24049 [web] Prominently indicate the enabled state of the continuous export switch (#2501) 2024-07-20 14:35:55 +05:30
Manav Rathi
e7dbbbf74b Tweak 2024-07-20 14:17:26 +05:30
Manav Rathi
d7f96863b2 Remove duplicate 2024-07-20 14:07:19 +05:30
Manav Rathi
22d2f7a520 [web] Prominently indicate the enabled state of the switch
color="accent" was not doing anything, it appeared gray in both enabled and disabled states.
2024-07-20 14:04:52 +05:30
Manav Rathi
e72aa6e7e6 [web] Remove unnecessary eventemitter dependency (#2499) 2024-07-20 13:51:32 +05:30
Manav Rathi
9e83a4de81 [web] Remove unnecessary eventemitter dependency 2024-07-20 13:44:55 +05:30
Manav Rathi
f15851e6de Remove unused code path 2024-07-20 13:44:01 +05:30
Manav Rathi
b0b7ec5347 Direct 2024-07-20 13:41:08 +05:30
Manav Rathi
5a128f1e48 [web] New translations (#2498)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-07-20 13:02:57 +05:30
Crowdin Bot
77de820c45 New Crowdin translations by GitHub Action 2024-07-20 07:32:19 +00:00
Manav Rathi
16acbc6dfa [web] Translation improvements (#2497) 2024-07-20 12:28:13 +05:30
Manav Rathi
11f127781f Remove unnecessary space 2024-07-20 12:19:21 +05:30
Manav Rathi
8c32a25a6e Rename 2024-07-20 12:17:46 +05:30
Manav Rathi
9aec0903cf Rename 2024-07-20 12:15:36 +05:30
Manav Rathi
d2aeb3101c EXIF => Exif
The standard uses "Exif"
2024-07-20 12:12:22 +05:30
Manav Rathi
a4142ff800 Rename 2024-07-20 12:08:51 +05:30
Manav Rathi
122e3bb5f8 Move 2024-07-20 12:06:43 +05:30
Manav Rathi
a7d93861b6 Move 2024-07-20 12:03:12 +05:30
Manav Rathi
5a48aeb2ab Remove ref of non-existent formatter 2024-07-20 11:33:22 +05:30
Manav Rathi
40c489ebf0 Rename 2024-07-20 11:32:18 +05:30
Manav Rathi
f388d912f9 Rename 2024-07-20 11:31:08 +05:30
Manav Rathi
df2ae4f60b Move 2024-07-20 11:28:54 +05:30
Manav Rathi
cd67fdbb8b Rename 2024-07-20 11:25:24 +05:30
Manav Rathi
e427e7df13 Move 153m138\nwq 2024-07-20 11:24:27 +05:30
Manav Rathi
23d9e2db45 Rename 2024-07-20 11:17:11 +05:30
Manav Rathi
dd68a0d3de Rename 2024-07-20 11:15:35 +05:30
Manav Rathi
9166c5c80d New convention 2024-07-20 11:14:54 +05:30
Manav Rathi
ffda45faf7 Rename 2024-07-20 11:13:06 +05:30
Manav Rathi
8d9be5b7b7 Rename 2024-07-20 11:12:09 +05:30
Manav Rathi
37f676c0e9 Rename 2024-07-20 11:10:22 +05:30
Manav Rathi
ade3a41fa1 echo '68,70m162\nwq' | ed -s $f
Move chunks using
for f in packages/base/locales/**/translation.json; do echo '68,70m162\nwq' | ed -s $f; done
2024-07-20 11:08:16 +05:30
Manav Rathi
dab0e610db Rename 2024-07-20 10:16:49 +05:30
Manav Rathi
3060916d47 Fix 2024-07-20 10:11:08 +05:30
Manav Rathi
1cf51cb7b3 Use new formatter 2024-07-20 10:11:04 +05:30
Manav Rathi
68de8c9f48 Add a custom cached formatter 2024-07-19 20:59:21 +05:30
atyabbin
3cabafe128 Dashboard with some changes (#2494) 2024-07-19 17:27:23 +05:30
atyabbin
92d4329aac Solved lint issues 2024-07-19 16:51:25 +05:30
atyabbin
9c23020e05 Changed UserComponent.tsx 2024-07-19 16:39:04 +05:30
Manav Rathi
8600400179 [desktop] Extract Exif during indexing - Part 1/x (#2493) 2024-07-19 15:52:03 +05:30
Manav Rathi
bee3875e89 Add note 2024-07-19 15:43:23 +05:30
Manav Rathi
be06e5ae25 lf 2024-07-19 15:34:31 +05:30
Manav Rathi
e7c470a9ff Tentative 2024-07-19 15:22:52 +05:30
Manav Rathi
4bdb1c7922 Explore 2024-07-19 15:01:32 +05:30
Manav Rathi
9c04c9075e Tie it together 2024-07-19 13:38:15 +05:30
atyabbin
664f89aeec Changes in App.tsx 2024-07-19 13:14:54 +05:30
atyabbin
4c7f2c7c4e Reduced the space between input fields and the tabs section 2024-07-19 13:12:25 +05:30
atyabbin
c387b59c78 Dashboard with the new UI (#2486) 2024-07-19 12:41:31 +05:30
Neeraj Gupta
3881be0ace [mob] bump version: 0.9.14+914 (#2492)
## Description

## Tests
2024-07-19 11:25:51 +05:30
Neeraj Gupta
d1c66dbdcf [mob] bump version: 0.9.14+914 2024-07-19 11:25:29 +05:30
Manav Rathi
8c9195e783 Fix crop 2024-07-19 11:17:22 +05:30
Manav Rathi
1b59a5bf87 Rework lower 2024-07-19 11:11:05 +05:30
Manav Rathi
41851c97be wip scaffold 2024-07-19 10:46:07 +05:30
Manav Rathi
67e41f4bcd wip scaffold 2024-07-19 10:13:43 +05:30
Manav Rathi
941b02f750 (start) Switch to a more maintained library 2024-07-19 09:57:13 +05:30
Manav Rathi
0ace569e97 Start scaffolding 2024-07-19 09:44:27 +05:30
Manav Rathi
b07d82ebc2 Restore developability 2024-07-19 09:27:06 +05:30
Manav Rathi
51f1a88c21 [desktop] Change name of model to disallow even WIP uploads (#2491)
Just in case someone goes out of their way to build from source, enable
the WIP dev flag and upload WIP embeddings.
2024-07-19 06:25:11 +05:30
Manav Rathi
16a11a663e [desktop] Change name of model to disallow even WIP uploads
Just in case someone goes out of their way to build from source, enable the WIP dev flag and upload WIP embeddings.
2024-07-19 06:21:32 +05:30
Aman Raj Singh Mourya
5b3b3b577b [mob][photos] Hide content when app is in background using secure_app_switcher 2024-07-18 23:52:13 +05:30
Manav Rathi
7b0646987b [web] Add a hook for detecting mobile sized screens (#2490) 2024-07-18 21:21:16 +05:30
Manav Rathi
82b12fcb37 Type 2024-07-18 21:18:18 +05:30
Manav Rathi
cf7020ab78 Use prebuilt dialog box 2024-07-18 21:08:25 +05:30
Manav Rathi
5fa65da58e Use 2024-07-18 20:40:41 +05:30
Manav Rathi
471a6eff0d [web] Add a hook for detecting mobile sized screens 2024-07-18 20:31:12 +05:30
Manav Rathi
8ac27aef31 [web] Move @/new/shared into @/base (#2489) 2024-07-18 19:42:34 +05:30
Manav Rathi
6e0cbb2a37 Update ref 2024-07-18 19:35:46 +05:30
Manav Rathi
88e05f63cd Merge @/new/shared into @/base 2024-07-18 19:33:27 +05:30
Manav Rathi
19ccf8a788 Unused 2024-07-18 19:18:30 +05:30
Manav Rathi
21563a62ed Inline 2024-07-18 19:17:09 +05:30
Manav Rathi
3c0d12250e Inline 2024-07-18 19:14:58 +05:30
Manav Rathi
084f4cc055 Unused 2024-07-18 19:09:19 +05:30
Manav Rathi
2071bd07ae 404 2024-07-18 19:06:37 +05:30
Manav Rathi
7f5dec216d Remove usused 2024-07-18 19:02:14 +05:30
Manav Rathi
88cd8f4349 [web] New translations (#2488)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-07-18 19:01:40 +05:30
Crowdin Bot
578485d6ce New Crowdin translations by GitHub Action 2024-07-18 13:29:39 +00:00
Manav Rathi
0947c5ebea [web] @/next => @/base (#2487) 2024-07-18 18:58:59 +05:30
Manav Rathi
7d13666a2e @/next => @/base 2024-07-18 18:55:33 +05:30
Manav Rathi
27cc2aee51 Remove unused 2024-07-18 18:46:17 +05:30
atyabbin
371a1805f0 Updated some new components 2024-07-18 18:42:40 +05:30
atyabbin
0c6d27c134 Full dashboard 2024-07-18 17:58:42 +05:30
Manav Rathi
ca61dd5637 [desktop] Include app version in X-Client-Package (#2485) 2024-07-18 15:55:22 +05:30
Manav Rathi
1b039de35d Fix path 2024-07-18 15:49:11 +05:30
Manav Rathi
cc0dea5c34 Use the same source 2024-07-18 15:48:26 +05:30
Manav Rathi
46a12ed698 [desktop] Include app version in X-Client-Package 2024-07-18 15:45:40 +05:30
Manav Rathi
46cbff4018 [desktop] ML new combined format - Part 2/2 (#2484)
Continues (and except minor touchups) and completes
https://github.com/ente-io/ente/pull/2460
2024-07-18 15:31:48 +05:30
Aman Raj Singh Mourya
b114b6674e [mob][photos] Upgrade pinput pakage from 2.0.2 -> 5.0.0 (#2483) 2024-07-18 15:17:26 +05:30
Manav Rathi
53a418c2cd Fix 2024-07-18 15:14:44 +05:30
Aman Raj Singh Mourya
cf7791f9f8 [mob][photos] Upgrade pinput pakage from 2.0.2 -> 5.0.0 2024-07-18 15:13:26 +05:30
Neeraj Gupta
80d021ba90 [mob] Disable panorama for external users (#2482)
## Description

## Tests
2024-07-18 14:49:00 +05:30
Neeraj Gupta
2078e139c1 [mob] Bump version: v0.9.12 2024-07-18 14:44:29 +05:30
Neeraj Gupta
3b10c909b1 [mob][photos] Disable panorama check 2024-07-18 14:44:06 +05:30
Prateek Sunal
0616c12a21 [mobile] add placeholder for favorites slideshow widget (#2481)
## Description


![image](https://github.com/user-attachments/assets/e6865b9d-cbdf-4c45-96f7-97ac2652617c)
2024-07-18 14:40:07 +05:30
Aman Raj Singh Mourya
e5a5d9c08d [mob][photos] Auto lock time changed 2024-07-18 14:32:49 +05:30
Manav Rathi
ecbed8c02a Prep for merge 2024-07-18 14:23:53 +05:30
Manav Rathi
a9f47fe362 fix: yarn workspace photos run tsc 2024-07-18 14:14:47 +05:30
Prateek Sunal
8b40465a05 feat(homewidget): add placeholder for Favorites slideshow widget 2024-07-18 14:06:27 +05:30
Manav Rathi
33bf7f7754 Cleanup 2024-07-18 14:04:35 +05:30
Manav Rathi
a1cb4ea2e9 Within the same tx 2024-07-18 13:59:57 +05:30
Prateek Sunal
745b0dece0 fix(auth/code): add option to view raw codes in case of parse fail (#2474)
## Description

![Screenshot 2024-07-17
190450](https://github.com/user-attachments/assets/886fc943-8462-48c6-a713-bae7a606f034)



![image](https://github.com/user-attachments/assets/ee750d07-5901-4864-88c9-7166abd9f1d1)


## Tests
2024-07-18 13:33:40 +05:30
Manav Rathi
2d2140eaca Reuse 2024-07-18 13:24:33 +05:30
Manav Rathi
e49ebdfc2e Handle versioning 2024-07-18 13:20:46 +05:30
Manav Rathi
07c2d3cf28 Upsert 2 2024-07-18 13:04:08 +05:30
Neeraj Gupta
ec94b1197c [mob] Panorama state fix (#2480)
## Description

## Tests
2024-07-18 13:00:44 +05:30
Neeraj Gupta
af469ac23b [mob] Panorama state fix 2024-07-18 12:56:21 +05:30
Manav Rathi
df9c153714 Upsert 1 2024-07-18 12:43:19 +05:30
Manav Rathi
6d1e3f99d6 Annotate 2024-07-18 12:29:27 +05:30
Neeraj Gupta
18fd8734a6 [mobile] add panorama viewer (#2362)
## Description

## Tests
2024-07-18 12:21:29 +05:30
Neeraj Gupta
87383ea038 [mob] Bump version 2024-07-18 12:19:38 +05:30
Neeraj Gupta
fdd84b3bc0 [mob] Enable video info for everyone 2024-07-18 12:19:21 +05:30
Manav Rathi
e916694fa6 Raw 2024-07-18 12:12:56 +05:30
Neeraj Gupta
6166aa5e00 -mRefactor 2024-07-18 12:02:04 +05:30
Manav Rathi
a2f719d215 Keep both 2024-07-18 11:55:04 +05:30
Neeraj Gupta
e2fde47c89 refactor 2024-07-18 11:45:20 +05:30
Neeraj Gupta
c3c8881e0c refactor 2024-07-18 11:43:04 +05:30
Neeraj Gupta
87bc359175 Use image w/h props for pano check 2024-07-18 11:40:22 +05:30
Neeraj Gupta
392763a4b0 Add backbutton for pano images 2024-07-18 11:33:35 +05:30
Neeraj Gupta
db27eb718f [ios] build changes 2024-07-18 11:24:22 +05:30
Neeraj Gupta
4faf71b164 Merge branch 'main' into mobile-panorama 2024-07-18 11:14:12 +05:30
Manav Rathi
806a77290e [infra] Metabase update README (#2479) 2024-07-18 10:56:05 +05:30
Manav Rathi
234618e8ae Fix accidentally uncommitted change 2024-07-18 10:55:29 +05:30
Manav Rathi
cdbd79c077 [infra] Import metabase conf (#2478) 2024-07-18 10:16:02 +05:30
Manav Rathi
1115f93086 Add update instructions 2024-07-18 10:09:37 +05:30
Manav Rathi
6d04ed1f8f [infra] Import metabase conf 2024-07-18 09:57:50 +05:30
Prateek Sunal
f2057cbaa8 fix(auth/connectivity): try to fix certificate issue on windows 11 (#2472)
## Description

## Tests
2024-07-17 19:06:42 +05:30
Prateek Sunal
fde8484768 fix(auth/code): add option to view raw codes in case of parse fail 2024-07-17 19:01:41 +05:30
Neeraj Gupta
5dd8c0a292 [mob] Minor UX improvement (#2473)
## Description

## Tests
2024-07-17 17:11:14 +05:30
Neeraj Gupta
3554376152 Improve UI 2024-07-17 16:54:45 +05:30
Prateek Sunal
ad87a08477 fix(auth/connectivity): try to fix certificate issue on windows 11 2024-07-17 16:47:58 +05:30
Neeraj Gupta
6c4a2a9dcd [mob] Enable polish language (#2470)
## Description

## Tests
2024-07-17 16:04:31 +05:30
Neeraj Gupta
2242bdb2f8 fix(auth/import): remove cross button from import page (#2469)
## Description

## Tests
2024-07-17 15:57:43 +05:30
Neeraj Gupta
ddea1fde28 Enable polish 2024-07-17 15:56:49 +05:30
Neeraj Gupta
0ad7636d54 Fix locale 2024-07-17 15:56:38 +05:30
Prateek Sunal
c794eabf23 Merge remote-tracking branch 'origin/main' into auth-fixes 2024-07-17 15:41:40 +05:30
Prateek Sunal
de8a48287b chore(auth): lint fixes 2024-07-17 15:40:21 +05:30
Prateek Sunal
d9471e406c fix(auth/import): remove cross button from import page 2024-07-17 15:38:51 +05:30
Neeraj Gupta
70162c17d1 [mob] Use video probe data for getting location during upload (#2468)
## Description

## Tests
2024-07-17 15:16:09 +05:30
Neeraj Gupta
62f0825522 generated strings 2024-07-17 15:14:09 +05:30
Neeraj Gupta
826e549462 bump version 2024-07-17 15:13:51 +05:30
Neeraj Gupta
dac589b6b8 Backfill video location when fileInfo is viewed 2024-07-17 15:13:35 +05:30
Neeraj Gupta
600cbc15d2 Switch back to new video player 2024-07-17 15:03:48 +05:30
Neeraj Gupta
f33cea212f Use ffprobe for getting video location in Android 2024-07-17 15:01:26 +05:30
Neeraj Gupta
95369097a5 Merge metadata streams 2024-07-17 14:57:54 +05:30
Neeraj Gupta
087e84b7ba Remove border 2024-07-17 14:18:09 +05:30
Neeraj Gupta
7744b8101b Refactor 2024-07-17 14:10:07 +05:30
Neeraj Gupta
5d078b06be [mob] Show video metadata inside fileInfo (#2466)
## Description

## Tests
2024-07-16 18:02:29 +05:30
Neeraj Gupta
24aff0b9c1 bump version 2024-07-16 18:00:19 +05:30
Neeraj Gupta
fd001a9181 Fix lint 2024-07-16 17:59:56 +05:30
Neeraj Gupta
d6a970274c Format fps value 2024-07-16 17:57:02 +05:30
Neeraj Gupta
428b3e2cd6 Enable drag to close 2024-07-16 17:49:49 +05:30
atyabbin
bd3e0c9289 Deleted Sidbar.tsx 2024-07-16 17:47:11 +05:30
Neeraj Gupta
1c5154ac26 Show dims and fps in the video info dialog 2024-07-16 17:47:10 +05:30
Neeraj Gupta
2b7dc88281 iOS build changes 2024-07-16 17:39:02 +05:30
Neeraj Gupta
95c92b0572 Show fps, bitrate and dim for video 2024-07-16 17:38:52 +05:30
Neeraj Gupta
c28b4934c4 Parse make, model and location for iPhone Videos 2024-07-16 16:52:55 +05:30
Manav Rathi
7af91eeada fetch 2024-07-16 16:33:29 +05:30
atyabbin
827ac9ddf7 Dashboard with imporved UI 2024-07-16 16:21:59 +05:30
Manav Rathi
5ddf6c98cf nw 2024-07-16 15:56:23 +05:30
Manav Rathi
0c75eb7ff5 Prep 2024-07-16 15:46:11 +05:30
Neeraj Gupta
92b188bc21 Improve UI 2024-07-16 15:44:36 +05:30
Neeraj Gupta
daaa1d7423 Format creation time 2024-07-16 15:35:46 +05:30
Aman Raj Singh Mourya
5f08e44e58 [mob][auth] Auto lock fixes 2024-07-16 15:23:21 +05:30
Manav Rathi
0dc06c430a Prep 2024-07-16 15:17:51 +05:30
Manav Rathi
f6715ad9c2 Start pruning the diff 2024-07-16 15:03:46 +05:30
Manav Rathi
8abd541519 Sketch 2024-07-16 14:52:57 +05:30
Neeraj Gupta
f2ed6802d2 [mob] Rename 2024-07-16 14:48:38 +05:30
Neeraj Gupta
aeeed9cd11 [mob] Rename 2024-07-16 14:45:34 +05:30
Manav Rathi
e7f2ffbc9d Restore width and height
..(discussed)
2024-07-16 14:42:48 +05:30
Neeraj Gupta
e2ef2eacc4 [mob] Display video metadata in file info 2024-07-16 14:12:46 +05:30
Manav Rathi
61b98a9964 Pull out pull 2024-07-16 14:12:13 +05:30
Manav Rathi
3ae6c72332 Convert more 2024-07-16 13:54:49 +05:30
Manav Rathi
900a7942ab Continue 2024-07-16 13:02:12 +05:30
Manav Rathi
2dbfa17a45 Propagate 2024-07-16 12:33:57 +05:30
Manav Rathi
f44a476285 Another way 2024-07-16 12:18:52 +05:30
Manav Rathi
6515d1e750 WIP refactor data structure 2024-07-16 12:12:41 +05:30
Manav Rathi
fd49211a0a gz 2024-07-16 11:24:33 +05:30
Manav Rathi
0840c6146e Scaffold up 2024-07-16 11:03:53 +05:30
Manav Rathi
63ff5ac573 Make space for new format 2024-07-16 10:53:31 +05:30
Manav Rathi
2bf695af48 New 2024-07-16 10:12:23 +05:30
Manav Rathi
02b6dd9ba6 We can destructure arrays into existing lets 2024-07-16 09:50:30 +05:30
Manav Rathi
8a642c40ea Merge steps 2024-07-16 09:47:14 +05:30
Manav Rathi
9dc8a054f8 Fix typo (#2462) 2024-07-15 22:00:35 +05:30
Manav Rathi
c1f4a9f0d6 Fix typo 2024-07-15 21:59:16 +05:30
Ashil
b2e43624ba [mob][photos] Init magic cache service only if internal user (#2445) 2024-07-15 18:23:30 +05:30
Neeraj Gupta
8f5210d0a2 Fix grammar in CLI readme (#2449) 2024-07-15 18:21:29 +05:30
Neeraj Gupta
803e8b3a14 [auth] Add new icons (#2452)
Add Instant Gaming, Teleport and Mistral icons.

<!--- Describe your changes in detail -->

## Type of Change

<!--- Put an `x` in all the boxes that apply: -->

- [x] 🖼️ New icon
- [ ]  New feature (non-breaking change which adds functionality)
- [ ] 🛠️ Bug fix (non-breaking change which fixes an issue)
- [ ]  Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] 🧹 Code refactor
- [ ]  Build configuration change
- [ ] 📝 Documentation
- [ ] 🗑️ Chore
2024-07-15 18:21:10 +05:30
Neeraj Gupta
177bab2961 [mobile] New translations (#2454)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-07-15 18:20:34 +05:30
Neeraj Gupta
f2894d1d62 [auth] New translations (#2455)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-07-15 18:20:01 +05:30
Manav Rathi
1a39d2b648 [desktop] ML new derived data format - Part 1/x (#2460) 2024-07-15 16:22:49 +05:30
Manav Rathi
d6908ffda3 Fix 2024-07-15 16:16:17 +05:30
Manav Rathi
73ee6f5284 Mark bad images as failed instead of retrying indefinitely 2024-07-15 16:11:39 +05:30
Aman Raj Singh Mourya
ab9c097a32 [mob][photos] Removed App lock subtitle in Settings 2024-07-15 15:59:52 +05:30
Manav Rathi
32750599b9 Outline 2024-07-15 14:41:39 +05:30
Manav Rathi
e054247359 Rely on ML flag 2024-07-15 14:35:07 +05:30
Manav Rathi
6dca5c2a8b Fix p nesting warning 2024-07-15 14:28:50 +05:30
Manav Rathi
3941c05229 Simplify UI 2024-07-15 14:25:07 +05:30
Manav Rathi
1a61c02602 Simplify 2024-07-15 14:13:53 +05:30
Manav Rathi
bc45261efa Handle the API quirk 2024-07-15 13:35:03 +05:30
Manav Rathi
bd884c9db8 [web] [desktop] Enable Polish translations (#2459)
A big hats off to the person who did 0-99% 🇵🇱 over the weekend!
2024-07-15 12:28:16 +05:30
Aman Raj Singh Mourya
82f3cd19be [mob][photos] Auto lock options fixes 2024-07-15 12:02:54 +05:30
Manav Rathi
326b347bc6 [web] [desktop] Enable Polish translations
A big hats off to the person who did 0-99% over the weekend!
2024-07-15 11:59:40 +05:30
Manav Rathi
03b8b69080 [web] ML related translation fixes (#2458) 2024-07-15 10:38:33 +05:30
Manav Rathi
839a94fcef Fix markup in translations 2024-07-15 10:30:54 +05:30
Manav Rathi
39c600de46 Remove out of date translations that don't reflect source string 2024-07-15 10:29:49 +05:30
Manav Rathi
6226f43b5a Update 2024-07-15 10:28:23 +05:30
Neeraj Gupta
74f4698fd6 [mob] Format brand 2024-07-15 10:21:19 +05:30
Manav Rathi
428288338f Fix casing 2024-07-15 09:59:30 +05:30
Manav Rathi
e254cfd752 Rename 2024-07-15 09:55:44 +05:30
Manav Rathi
c22b7fb218 [web] New translations (#2457)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-07-15 09:53:46 +05:30
Crowdin Bot
34db62cefa New Crowdin translations by GitHub Action 2024-07-15 04:23:15 +00:00
Manav Rathi
ab7d894ed2 [web] Prune unused translations (#2456)
Reduce work for translators in new languages
2024-07-15 09:52:27 +05:30
Manav Rathi
8c8cff5f80 [web] Prune unused translations
Reduce work for translators in new languages
2024-07-15 09:51:46 +05:30
Manav Rathi
98671760dd [web] New translations (#2453)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-07-15 09:47:55 +05:30
Crowdin Bot
b7b5977b85 New Crowdin translations by GitHub Action 2024-07-15 01:16:52 +00:00
Crowdin Bot
a3cbfc52c7 New Crowdin translations by GitHub Action 2024-07-15 01:04:12 +00:00
Crowdin Bot
c843656fa3 New Crowdin translations by GitHub Action 2024-07-15 00:31:52 +00:00
Aman Raj Singh Mourya
147be37fdb [mob][auth] Removed dialog box on auto-logout 2024-07-14 22:58:17 +05:30
Eseltwift
a8be3be3b4 Add Instant Gaming, Teleport and Mistral icons. 2024-07-13 22:05:33 +02:00
Manav Rathi
057521e0e4 [desktop] Throttle ML status updates (#2450) 2024-07-13 19:10:55 +05:30
Manav Rathi
86b70ec325 Commentary 2024-07-13 18:13:16 +05:30
Manav Rathi
166474a1b5 Add a throttle 2024-07-13 18:02:06 +05:30
dnred
faee7cc642 fix typo in CLI readme 2024-07-13 13:02:41 +02:00
Manav Rathi
ebe76cbd1b [desktop] Fix yarn dev flakiness when renderer is not ready (#2448) 2024-07-13 15:19:43 +05:30
Manav Rathi
5b23e32c7d Meh 2024-07-13 15:14:47 +05:30
Manav Rathi
a10ca66e57 [desktop] Fix yarn dev flakiness when renderer is not ready
...by the time the main window is ready to open it.
2024-07-13 14:56:09 +05:30
Aman Raj Singh Mourya
9292dc6d04 [mob][auth] Do not show CustomPinKeypad on Desktop 2024-07-13 14:45:45 +05:30
ashilkn
89ff4cf43e [mob][photos] Initialise MagicCacheService only if internal user 2024-07-13 14:26:07 +05:30
Neeraj Gupta
c552ab61f9 [cli] Fix typo with ente account url constant (#2440)
## Description
I noticed there was a typo in the EnteAccountUrl constant for the CLI,
which resulted in an incorrect URL being generated when asking the user
to verify their passkey.

## Tests
I didn't see tests in the project, but I did build the cli project and
manually tested `cli.exe` by adding my ente account and verifying the
URL that's generated is correct now.

```
Nick  ~\..\ente\cli  .\cli.exe account add
Enter app type (default: photos):
Use default app type: photos
Enter export directory: .\
Enter email address: redacted@pm.me
Enter OTP: 123456
Open this url in browser to verify passkey: https://accounts.ente.io/passkeys/verify?redacted
Press enter once you have completed the passkey verification
```
2024-07-13 11:42:24 +05:30
Manav Rathi
f724c998a6 [desktop] Graceful shutdown in dev mode (#2444)
Ref: https://github.com/electron/electron/issues/22048
2024-07-13 11:24:57 +05:30
Manav Rathi
86f79575aa [desktop] Graceful shutdown in dev mode 2024-07-13 11:23:52 +05:30
Manav Rathi
2f2265e85d [desktop] Update deps (#2442)
Notable:

- Electron 30.2.0
  https://github.com/electron/electron/releases
2024-07-13 10:19:26 +05:30
Manav Rathi
2c506c9cc2 npx npm-check-updates --interactive --target greatest 2024-07-13 10:16:54 +05:30
Manav Rathi
4528dc2d2a [desktop] Update deps
- Electron 30.2.0
  https://github.com/electron/electron/releases
2024-07-13 10:11:08 +05:30
Manav Rathi
3e301cabec [desktop] Don't show what's new on fresh installs (#2441)
Also: Stylistic tweaks
2024-07-13 10:00:24 +05:30
Manav Rathi
d72813dd07 Stylistic tweaks 2024-07-13 09:56:11 +05:30
Manav Rathi
6e9dd8d4c8 [desktop] Don't show what's new on fresh installs 2024-07-13 08:56:32 +05:30
Nicholas DiMucci
33dcf48127 Fix typo with ente account url in cli. 2024-07-12 21:05:38 -04:00
Manav Rathi
b525e91aa1 [docs] Mark the desktop custom server option as released (#2439)
+ yarn pretty
2024-07-12 21:41:33 +05:30
Manav Rathi
392ed6e212 yarn pretty 2024-07-12 21:40:49 +05:30
Manav Rathi
653761137a [docs] Mark the desktop custom server option as released 2024-07-12 21:40:07 +05:30
Manav Rathi
ec4644158b [desktop] Fix post release checklist instructions (#2438) 2024-07-12 21:18:54 +05:30
Manav Rathi
a6dda741cb [desktop] Fix post release checklist instructions 2024-07-12 21:17:11 +05:30
Manav Rathi
43fd13c00f [desktop] Start the next release sequence for 1.7.3 (#2437) 2024-07-12 20:50:36 +05:30
Manav Rathi
b0677049cb [desktop] Start the next release sequence for 1.7.3 2024-07-12 20:47:05 +05:30
Prateek Sunal
e0952de376 fix(mobile): update panorama logic 2024-07-12 17:50:07 +05:30
Neeraj Gupta
c941783fd3 [mob] Expose and log video metadata 2024-07-12 17:45:30 +05:30
Manav Rathi
20a8df378c [desktop] Release v1.7.2 (#2434) 2024-07-12 17:12:23 +05:30
Aman Raj Singh Mourya
0ce9ceba12 [mob][auth] Used memLimitInteractive instead of memLimitSensitive to avoid delay 2024-07-12 16:48:33 +05:30
Aman Raj Singh Mourya
fb0d938cb5 [mob][auth] Implemented Pin/Password hashing using ente_crypto 2024-07-12 15:58:23 +05:30
Manav Rathi
d9ec95b8ab photosd-v1.7.2 2024-07-12 15:52:35 +05:30
Manav Rathi
c16b6a7d43 -rc => -beta to be clearer 2024-07-12 15:52:32 +05:30
Neeraj Gupta
d3dccb1bea [mobile] Add FFProbe Metadata (#2054)
## Description

This PR adds support for fetching location and creationTime using
ffprobe (if available).

## Tests
2024-07-12 15:30:50 +05:30
Neeraj Gupta
f115ce4a0d [mob] Fix lint 2024-07-12 15:27:53 +05:30
Neeraj Gupta
7c8febfc1b Merge remote-tracking branch 'origin/main' into mobile-ffprobe 2024-07-12 14:30:54 +05:30
Neeraj Gupta
bffbc6041b [mob] Add missing tr file for Turkish (#2432)
## Description

## Tests
2024-07-12 14:04:41 +05:30
Neeraj Gupta
7640789f08 [mob] Fix dependencies order 2024-07-12 14:04:19 +05:30
Neeraj Gupta
95c04b554c [mob] Add missing tr file for Turkish 2024-07-12 13:59:03 +05:30
Manav Rathi
5e15fccb75 [accounts] Restore the passkey workaround for Safari (#2431)
This restores the workaround I'd removed in
4d84e966b0.

    listItem.transports = ["usb", "nfc", "ble", "internal"];

- This PR should fix the passkey verification on Safari:
https://github.com/ente-io/ente/issues/2406

- Sibling PR that fixes the passkey registration:
https://github.com/ente-io/ente/pull/2429
2024-07-12 13:49:15 +05:30
Manav Rathi
7047383e09 [accounts] Restore the workaround for Safari
This restores the workaround I'd removed in
4d84e966b0.

    listItem.transports = ["usb", "nfc", "ble", "internal"];

- This PR fixes the passkey verification on Safari.

- Sibling PR that fixes the passkey registration: https://github.com/ente-io/ente/pull/2429/files
2024-07-12 13:45:59 +05:30
Manav Rathi
f02bd096b0 [server] Add a workaround for Safari to recognize Yubikeys (#2429)
Safari just doesn't recognize the Yubikey (macOS/iOS, NFC/USB, doesn't
matter) if display name is set to the empty string. Safari's long
description doesn't care to mention this requirement:
https://webkit.org/blog/11312/meet-face-id-and-touch-id-for-the-web/

Tested on localhost with Safari macOS. Will test on iOS post deployment.
2024-07-12 12:57:13 +05:30
Manav Rathi
617ae0701b [server] [cli] Fix docker "FROM AS" case warnings (#2430)
With the latest Docker update (27.0.3), it now warns about the "FROM"
and "AS" in the Dockerfile not matching. E.g. when building the server
docker image:

> WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match
(line 1)
2024-07-12 12:56:53 +05:30
Prateek Sunal
7854503661 Merge remote-tracking branch 'origin' into mobile-panorama 2024-07-12 12:06:55 +05:30
Neeraj Gupta
8e136ecdc1 Fix: don't edit location/time in the file object 2024-07-12 12:05:42 +05:30
Prateek Sunal
9ca2e1d91f fix(mobile): compute panorama whenever 2024-07-12 12:04:55 +05:30
Manav Rathi
0ea408379a [server] [cli] Fix docker "FROM AS" case warnings
With the latest Docker update (27.0.3), it now warns about the "FROM" and "AS"
in the Dockerfile not matching. E.g. when building the server docker image:

> WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 1)
2024-07-12 11:19:37 +05:30
Manav Rathi
eeab98c768 [server] Add a workaround for Safari to recognize Yubikeys
Safari just doesn't recognize the Yubikey (macOS/iOS, NFC/USB, doesn't matter)
if display name is set to the empty string. Safari's long description doesn't
care to mention this requirement:
https://webkit.org/blog/11312/meet-face-id-and-touch-id-for-the-web/

Tested on localhost with Safari macOS. Will test on iOS post deployment.
2024-07-12 11:10:56 +05:30
Pablo Ovelleiro Corral
97b5577d68 CLI: Allow setting secrets path via env var
Adds a new enviroment variable `ENTE_CLI_SECRETS_PATH`, that allows
specifying the path to a `secrets.txt` like the one used in the
dockerized version. If no path is provided, the old behaviour is maintained.
2024-07-11 18:38:52 +02:00
Manav Rathi
e881c15026 [desktop] Consolidate face and CLIP pipelines - Part 3/3 (#2424)
Continuation, and finalization, of
https://github.com/ente-io/ente/pull/2408

While the integration is complete, there is a server side integration we
still need to do. That in turn will have an impact on the embedding
formats. So for now, disable ML for the beta users too so that we can
put out the regular release that was schedule to go out this week
(otherwise the beta users will end up in a half-way state).
2024-07-11 20:30:05 +05:30
Manav Rathi
21b6316996 Disable ML for everyone while it is WIP
Preparing for merge and the interim release
2024-07-11 20:19:01 +05:30
Manav Rathi
349a5021a5 Debounce never calls the underyling if it keeps getting called within wait 2024-07-11 20:07:31 +05:30
Neeraj Gupta
4aa92ffc43 Merge remote-tracking branch 'origin/main' into mobile-ffprobe 2024-07-11 18:35:06 +05:30
Neeraj Gupta
3f5a8a503b [auth] Fix json (#2423)
## Description

## Tests
2024-07-11 18:34:39 +05:30
Neeraj Gupta
9fe894e368 [auth] Fix json 2024-07-11 18:34:14 +05:30
Ashil
e537ba0a9a [mob][photos] Bump up to v0.9.7 (#2421) 2024-07-11 16:03:18 +05:30
ashilkn
5033ab2fed [mob][photos] bump up to v0.9.7 2024-07-11 16:01:11 +05:30
Ashil
987cc1c520 [mob][photos] Lockscreen Fixes (#2398) 2024-07-11 15:54:37 +05:30
Manav Rathi
4773c7c262 Debounce 2024-07-11 15:16:39 +05:30
Manav Rathi
936e0470e6 Live update 2024-07-11 14:56:55 +05:30
Neeraj Gupta
ecbb71a97b Merge remote-tracking branch 'origin' into mobile-ffprobe 2024-07-11 14:39:57 +05:30
Manav Rathi
544a5a9ccc Use consistent key 2024-07-11 14:39:45 +05:30
Aman Raj Singh Mourya
fd2c22dc5f [mob][photos] Auto lock implemented and UI fixes 2024-07-11 14:32:57 +05:30
Manav Rathi
fdcc6b6997 Tweak and lint 2024-07-11 14:21:01 +05:30
Manav Rathi
73ad758191 Fix 2024-07-11 14:18:10 +05:30
Manav Rathi
a3dc691885 Use in search bar 2024-07-11 14:13:58 +05:30
Manav Rathi
b25dbfc10b wip separate flag 2024-07-11 14:02:55 +05:30
Manav Rathi
13c042f692 Remove scaffolding code 2024-07-11 13:53:27 +05:30
Manav Rathi
62e4a6c344 Dot product 2024-07-11 13:50:22 +05:30
Manav Rathi
8dad88eca6 Disable ripples on the background item for toggles 2024-07-11 13:43:04 +05:30
Manav Rathi
6ccb61b425 Enhance 2024-07-11 13:40:57 +05:30
Victor Muthiani
b402c6ae32 [Auth] Add 2 new icons and optimize 2 icons (#2411)
## Description

New icons:
- Deriv
- Airtm

Optimized icons
- Yahoo
- Bitget
2024-07-11 12:43:59 +05:30
Manav Rathi
52251ad654 Improve UI feedback 2024-07-11 12:37:37 +05:30
Manav Rathi
5ff9f408eb Touchups 2024-07-11 12:07:42 +05:30
Manav Rathi
06bf2ddad4 Integrate 2024-07-11 12:00:59 +05:30
Manav Rathi
0214ccf680 Integrate 2024-07-11 11:43:49 +05:30
Manav Rathi
2e1fde906e The type annotation for _mlStatusSnapshot is required 2024-07-11 11:15:53 +05:30
Manav Rathi
df4364525d Hook it up 2024-07-11 11:00:22 +05:30
Manav Rathi
661d0383fb Scaffold 2024-07-11 10:41:37 +05:30
Manav Rathi
6f577d150a wip useSyncExternalStore 2024-07-11 10:37:57 +05:30
Manav Rathi
6086e139e4 Degrade gracefully 2024-07-11 10:06:52 +05:30
Manav Rathi
5fef9b21e5 Template 2024-07-11 10:00:54 +05:30
Manav Rathi
7069e15b79 Duals 2024-07-10 20:49:19 +05:30
Manav Rathi
44e165b8ee Rework 2024-07-10 20:41:07 +05:30
Manav Rathi
b0b82aabd8 Face => ML 2024-07-10 20:03:52 +05:30
Manav Rathi
d043658331 Modify 2024-07-10 19:42:13 +05:30
Manav Rathi
9616640fce Fix p nesting warning 2024-07-10 19:34:46 +05:30
Manav Rathi
10e55b6739 Newer 2024-07-10 19:28:00 +05:30
Manav Rathi
d661f4ac1f Space 2024-07-10 19:14:04 +05:30
Manav Rathi
2865b33fc2 lf 2024-07-10 16:01:04 +05:30
Manav Rathi
0f4459112e Context 2024-07-10 15:59:51 +05:30
Manav Rathi
f9b8c5287d Work towards 2024-07-10 15:51:53 +05:30
Manav Rathi
2ac968fdf6 Fixed 2024-07-10 15:34:23 +05:30
Vishnu Mohandas
440f9293d8 Incorporate suggestions (#2414) 2024-07-10 15:26:16 +05:30
vishnukvmd
d1968e46e5 Incorporate suggestions 2024-07-10 15:25:54 +05:30
Manav Rathi
70b74fc285 Continue 2024-07-10 15:08:09 +05:30
Manav Rathi
c92a117e8d [docs] Improve send logs instructions (#2413) 2024-07-10 14:52:34 +05:30
Manav Rathi
d7371392fe [docs] Improve send logs instructions 2024-07-10 14:50:13 +05:30
Manav Rathi
b5972a6395 r4 2024-07-10 14:35:00 +05:30
Manav Rathi
ebfd8909a9 Move to its final place 2024-07-10 14:32:36 +05:30
Manav Rathi
83d6d99469 r3 2024-07-10 14:32:01 +05:30
Manav Rathi
1322e5df79 r2 2024-07-10 14:23:44 +05:30
Manav Rathi
3b951f237f wip refactor 2024-07-10 14:16:28 +05:30
Manav Rathi
162107b3a9 Fix 2024-07-10 13:40:39 +05:30
Manav Rathi
54936303c8 Tweaks 2024-07-10 13:40:11 +05:30
Manav Rathi
8830a60ecf Move up 2024-07-10 13:34:54 +05:30
Manav Rathi
071a63a81c Outer 2024-07-10 13:27:00 +05:30
Aman Raj Singh Mourya
d06586eb1c [mob][auth] Auto lock duration added to the app_lock file 2024-07-10 13:21:52 +05:30
Manav Rathi
aa6e5c9234 Start fixing lint issues 2024-07-10 13:17:50 +05:30
Manav Rathi
5c916374f3 Move 2024-07-10 13:04:48 +05:30
Manav Rathi
c5cd6cbbca Use new 2024-07-10 13:03:25 +05:30
Manav Rathi
cfad9f841e flags 2024-07-10 12:53:06 +05:30
Manav Rathi
6d09d1f9b7 rs 1 2024-07-10 12:39:51 +05:30
Manav Rathi
e1ce2e5e84 Cont 2024-07-10 12:22:45 +05:30
Manav Rathi
6f40cbe27e Agenda 2024-07-10 12:08:22 +05:30
Manav Rathi
8e10c8bec6 Move 2024-07-10 11:33:07 +05:30
Manav Rathi
eb271088a4 Move 2024-07-10 11:02:01 +05:30
Manav Rathi
fde6e14440 Move 2024-07-10 11:00:43 +05:30
Manav Rathi
cd433aa39e Move 2024-07-10 10:58:57 +05:30
Manav Rathi
2510226a57 Consolidate 2024-07-10 10:54:27 +05:30
Manav Rathi
ecd4201304 Fix warnings 2024-07-10 10:49:11 +05:30
Manav Rathi
4d11623f77 Fix warnings 2024-07-10 10:47:41 +05:30
Manav Rathi
4519dc94b8 Move 2024-07-10 10:45:40 +05:30
Manav Rathi
57ff75b855 lf 2024-07-10 10:22:50 +05:30
Manav Rathi
d4be782b9c Silence a warning to avoid changing behaviour for now 2024-07-10 10:22:14 +05:30
Manav Rathi
24858ab73b Move 2024-07-10 10:17:44 +05:30
Manav Rathi
99545f0038 [web] Enhance log.debug (#2412) 2024-07-10 09:44:59 +05:30
Manav Rathi
072ee3861b lf 2024-07-10 09:36:34 +05:30
Manav Rathi
881993ed65 Match 2024-07-10 09:32:14 +05:30
Manav Rathi
83516a7f27 More 2024-07-10 09:28:54 +05:30
Aman Raj Singh Mourya
e39ba3c578 [mob][auth] Added Auto lock UI 2024-07-10 00:24:50 +05:30
Aman Raj Singh Mourya
8117a2929c [mob][photos] Used better names 2024-07-10 00:13:10 +05:30
Aman Raj Singh Mourya
5089721507 [mob][photos] Autolock time delay implemented 2024-07-09 23:46:34 +05:30
Manav Rathi
8821372515 [web] Enhance log.debug 2024-07-09 21:30:23 +05:30
Manav Rathi
825a215213 [desktop] Consolidate face and CLIP pipelines - Part 2/x (#2408)
* Continuation of https://github.com/ente-io/ente/pull/2391
* CLIP indexing (and search) is disabled for now until the new format is
finalized
2024-07-09 20:51:20 +05:30
Manav Rathi
be61cd08b8 Prepare for merge to main 2024-07-09 20:38:55 +05:30
Manav Rathi
bab30ec508 lf 2024-07-09 20:35:41 +05:30
Manav Rathi
064af381c5 Move 2024-07-09 19:42:57 +05:30
Manav Rathi
840b415254 Reframe 2024-07-09 19:41:23 +05:30
Manav Rathi
711c858d06 Debug logs 2024-07-09 19:35:43 +05:30
Manav Rathi
4f60cabdd0 math 2024-07-09 19:33:11 +05:30
Manav Rathi
8fbcef4221 tsc 2024-07-09 16:03:27 +05:30
Manav Rathi
49bfe5aabb Restore search 2024-07-09 15:35:46 +05:30
Manav Rathi
11584ce089 Simplify 2024-07-09 15:34:47 +05:30
Manav Rathi
b8b2d58734 Clip matches 2024-07-09 15:29:34 +05:30
Aman Raj Singh Mourya
4af03ad2dd [mob][photos] Implemented Auto lock options 2024-07-09 15:10:39 +05:30
Manav Rathi
920685e15c lint 2024-07-09 14:56:49 +05:30
Manav Rathi
56fe538f07 Tie 2024-07-09 14:55:27 +05:30
Manav Rathi
942231c521 Prune 2024-07-09 14:45:26 +05:30
Manav Rathi
c5b10b14d1 Desktop changes 2024-07-09 14:42:06 +05:30
Manav Rathi
df80d9c355 Prune 2024-07-09 14:40:04 +05:30
Manav Rathi
e90ab70cc8 Remove unused dep 2024-07-09 14:34:34 +05:30
Manav Rathi
53dc3bace9 Untie 2024-07-09 14:30:31 +05:30
Manav Rathi
82ec83caf3 Remove 2 2024-07-09 14:24:45 +05:30
Manav Rathi
2f5c966892 Remove old 2024-07-09 14:22:59 +05:30
Manav Rathi
45b1f82032 wip towards removal 2024-07-09 14:08:58 +05:30
Manav Rathi
cb148ea3b1 both 2024-07-09 13:52:26 +05:30
Manav Rathi
ed660c36df Remove unnecessary return 2024-07-09 13:30:17 +05:30
Manav Rathi
2920e04aa5 Pull both 2024-07-09 13:26:30 +05:30
Manav Rathi
ca44202fcd remote 2024-07-09 13:14:24 +05:30
Manav Rathi
023610cebd Remove the need for null assertions 2024-07-09 12:39:55 +05:30
Manav Rathi
d11e94c939 Silence warning 2024-07-09 12:37:33 +05:30
Manav Rathi
cfb1b8423b Continue 2024-07-09 12:33:09 +05:30
Manav Rathi
4d84e966b0 db done 2024-07-09 12:09:38 +05:30
Manav Rathi
3bef2e8268 generalize 2024-07-09 12:05:42 +05:30
Manav Rathi
f2bcf1744f generalize 2024-07-09 11:51:00 +05:30
Manav Rathi
8d4629254c Agenda 2024-07-09 11:40:24 +05:30
Aman Raj Singh Mourya
a0980a9638 [mob][photos] Lockscreen Fixes 2024-07-09 11:24:50 +05:30
Manav Rathi
4fada9bdf9 face => ml 2024-07-09 11:13:22 +05:30
Manav Rathi
2bc95782a6 db 2 2024-07-09 11:01:03 +05:30
Manav Rathi
b36c4398c1 wip DB changes for clip 2024-07-09 11:01:03 +05:30
Manav Rathi
e183e1f9dd [meta] Change translation cron schedule Tue => Mon (#2397) 2024-07-09 10:48:52 +05:30
Manav Rathi
a8c267e2b0 [meta] Change translation cron schedule Tue => Mon 2024-07-09 10:48:05 +05:30
Neeraj Gupta
8d8b113ef8 [auth] New translations (#2393)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-07-09 10:47:22 +05:30
Neeraj Gupta
6f389cb64d [mobile] New translations (#2339)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-07-09 10:47:00 +05:30
Neeraj Gupta
f534984c0e Added 2 icons and optimised 1 icon (#2343)
## Description
Added bitmart and htx icon optimised coindcx icon.
## Tests
2024-07-09 10:46:47 +05:30
Manav Rathi
a7e5de7493 [web] New translations (#2396)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-07-09 10:42:20 +05:30
Crowdin Bot
49ca581904 New Crowdin translations by GitHub Action 2024-07-09 05:01:06 +00:00
Manav Rathi
e82e243b77 [web] Translation improvements (#2395) 2024-07-09 10:30:23 +05:30
Manav Rathi
26f421c77e Tweak 2024-07-09 10:25:42 +05:30
Manav Rathi
d4f0384f13 Move to tr 2024-07-09 10:20:07 +05:30
Manav Rathi
2a07684de0 More 2024-07-09 10:14:38 +05:30
Manav Rathi
e4f86794be More 2024-07-09 10:10:54 +05:30
Manav Rathi
b5a3821933 More 2024-07-09 10:06:02 +05:30
Manav Rathi
c7defa31f5 Match the casing of the en version 2024-07-09 10:03:48 +05:30
Manav Rathi
374b803ecc Migrate 2024-07-09 10:00:04 +05:30
Manav Rathi
0769ba2fff [web] New translations (#2392)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-07-09 09:54:11 +05:30
Crowdin Bot
95dc3d1e6c New Crowdin translations by GitHub Action 2024-07-09 02:11:09 +00:00
Crowdin Bot
da5270daa7 New Crowdin translations by GitHub Action 2024-07-09 02:00:58 +00:00
Crowdin Bot
a3de155a10 New Crowdin translations by GitHub Action 2024-07-09 01:46:46 +00:00
Neeraj Gupta
a761c06396 [auth] New translations (#2340)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-07-08 17:47:50 +05:30
Ashil
369680b4a8 bump up to v0.9.6 (#2384)
## Description

## Tests
2024-07-08 17:47:02 +05:30
Manav Rathi
24ea02c521 [desktop] Consolidate face and CLIP pipelines - Part 1/x (#2391) 2024-07-08 15:54:16 +05:30
Manav Rathi
1fb95f7d7d Reuse 2024-07-08 15:48:45 +05:30
Manav Rathi
c82ef796f2 Extract 2024-07-08 15:37:20 +05:30
Manav Rathi
f1c76adb38 Towards CLIP 2024-07-08 15:23:26 +05:30
Manav Rathi
46db1c240c [desktop] Fix CLIP preprocessing (#2389)
Fix format mismatch (ref: https://github.com/ente-io/ente/pull/2342)
2024-07-08 14:45:24 +05:30
Manav Rathi
8b5ad13595 Fix format mismatch 2024-07-08 14:40:41 +05:30
Manav Rathi
6511179766 Introduce bounds checking 2024-07-08 14:36:58 +05:30
Manav Rathi
bbacbb08b6 doc 2024-07-08 14:20:43 +05:30
ashilkn
67ca028dbf bump up to v0.9.6 2024-07-06 17:24:59 +05:30
Aman Raj Singh Mourya
7a06cf2364 [mob][auth] Added logout option on lockscreen 2024-07-06 17:08:24 +05:30
Manav Rathi
2f2d988eaa [web] Improve JPEG 2000 handling (#2383)
- Let supporting browsers (e.g. Safari) upload them.
- Let them be indexed by converting to JPEG.
2024-07-06 17:05:03 +05:30
Aman Raj Singh Mourya
45331de54e [mob][photos] Custom keypad position fixed 2024-07-06 16:58:26 +05:30
Manav Rathi
d0f585fc97 Special case jp2 rendering 2024-07-06 16:57:46 +05:30
Prateek Sunal
d8f275a388 fix(mobile): add panorama detection 2024-07-06 16:35:36 +05:30
atyabbin
2e35b1eeb4 First view of the dashboard with new UI 2024-07-06 16:33:26 +05:30
Manav Rathi
c86be54ac1 [desktop] Handle jp2 and simplify 2024-07-06 16:21:43 +05:30
Vishnu Mohandas
d24c116d14 [mob][photos] Prepare for release v0.9.5 (#2381) 2024-07-06 16:09:48 +05:30
ashilkn
a279c442b8 [mob][photos] Update change log and change log version 2024-07-06 15:48:33 +05:30
ashilkn
5b76225542 [mob][photos] Remove feature flag on select all feature 2024-07-06 15:16:20 +05:30
ashilkn
e2f2921d78 bump up to v 0.9.5 2024-07-06 15:05:30 +05:30
Ashil
86584e7424 [mob][photos] Lockscreen Fixes (#2367) 2024-07-06 15:01:27 +05:30
Ashil
05a400102a [mob][photos] Added button to logout from Lockscreen (#2379) 2024-07-06 14:59:51 +05:30
Manav Rathi
9c7c0b9592 [web] Fix duplication emotion instances (#2378)
Something's wrong with yarn's resolution algorithm, but let's leave that
be until we migrate off classic. 11.11.4 doesn't have anything we need,
so use 11.11.3 that seems to not result in dupes.

The warning was

gallery.js:16547 You are loading @emotion/react when it is already
loaded. Running multiple instances may cause problems. This can happen
if multiple versions are used, or if multiple builds of the same version
are used.

Ref:
- https://github.com/ente-io/ente/pull/2372
2024-07-06 14:46:22 +05:30
Aman Raj Singh Mourya
e807712cdc [mob][photos] Added button to logout from Lockscreen 2024-07-06 14:44:45 +05:30
Manav Rathi
e468ecc98c [web] Fix duplication emotion instances
Something's wrong with yarn's resolution algorithm, but let's leave that be
until we migrate off classic. 11.11.4 doesn't have anything we need, so use
11.11.3 that seems to not result in dupes.

The warning was

    gallery.js:16547 You are loading @emotion/react when it is already loaded. Running multiple instances may cause problems. This can happen if multiple versions are used, or if multiple builds of the same version are used.

Ref:
- https://github.com/ente-io/ente/pull/2372
2024-07-06 14:41:43 +05:30
Manav Rathi
dc80aac487 [desktop] Consider HTTP 4xx errors when PUT-ing embeddings as perm failures (#2377)
Also continue processing the liveQ even if embeddings pull fails.
2024-07-06 14:24:37 +05:30
Manav Rathi
1a06fce8f2 lf 2024-07-06 14:21:37 +05:30
Manav Rathi
933212ba59 Use elsewhere 2024-07-06 14:16:45 +05:30
Manav Rathi
26d8ecda08 tokens 2024-07-06 14:07:49 +05:30
Manav Rathi
8fc897ad16 Ok 2024-07-06 14:02:32 +05:30
Manav Rathi
53a8de9ac4 Shorten 2024-07-06 14:00:50 +05:30
Manav Rathi
a99a179ef9 Nicer error logs on desktop 2024-07-06 13:40:00 +05:30
Manav Rathi
cdba99a7c2 Use elsewhere 2024-07-06 13:23:55 +05:30
Manav Rathi
b03b9fd314 Let the liveQ be processed 2024-07-06 11:02:10 +05:30
Manav Rathi
4019afdd90 [desktop] Consider HTTP 4xx errors when PUT-ing embeddings as perm failures
Ref:
- https://github.com/ente-io/ente/pull/2369
- https://github.com/ente-io/ente/pull/2368
2024-07-06 10:23:33 +05:30
Manav Rathi
c12130d357 [desktop] Update eslint to fix warnings introduced after update to TypeScript 5.5 (#2375) 2024-07-06 09:47:00 +05:30
Manav Rathi
4427352f51 Handle update 2024-07-06 09:44:38 +05:30
Manav Rathi
ac06f67891 Update the typescript-eslint v8 alpha 2024-07-06 09:37:57 +05:30
ashilkn
27dab94782 [mob][photos] Immediately logout if too many attempts on lockscreen 2024-07-06 09:37:49 +05:30
Manav Rathi
99616b46a1 [desktop] Upgrade eslint (within the 9x series) 2024-07-06 09:26:45 +05:30
ashilkn
d72a561a9b [mob][photos] Minor UI fix on lock screen password entry page 2024-07-06 08:57:14 +05:30
ashilkn
75baee00c2 [mob][photos] Fix unexpected animation in lockscreen 2024-07-06 08:35:34 +05:30
Manav Rathi
8b696b1242 [web] Various minor chores (#2372)
See commit messages for details.
2024-07-05 20:43:36 +05:30
Manav Rathi
aebe12bd9e Fix 2024-07-05 20:37:58 +05:30
Manav Rathi
fcb86da03c Update some dependencies (minor versions); pin otpauth
Pin otpauth since upstream changed from jsSHA some other library, and we'd need
to do the same for our steam codes implementation to avoid increasing the bundle
size.

https://github.com/hectorm/otpauth/pull/505

---

For the rest of the updates, Scanned the CHANGELOGs (linked):

@emotion/react, @emotion/styled
- https://github.com/emotion-js/emotion/releases

@mui/icons-material, @mui/material
https://github.com/mui/material-ui/releases

get-user-locale
https://github.com/wojtekmaj/get-user-locale/releases

i18next, i18next-resources-to-backend, react-i18next
https://github.com/i18next/i18next/releases

ml-matrix
https://github.com/mljs/matrix/releases

next
Doesn't have a changelog. Rely on hope.
See: https://github.com/vercel/next.js/discussions/65212

react, react-dom, @types/react, @types/react-dom
https://github.com/facebook/react/blob/main/CHANGELOG.md

react-virtualized-auto-sizer
https://github.com/bvaughn/react-virtualized-auto-sizer/releases

@types/chromecast-caf-receiver, @types/leaflet
Minor updates, type only
2024-07-05 20:31:37 +05:30
Manav Rathi
99af0ff294 Update to vite 5.3.3 (payments)
https://github.com/vitejs/vite/blob/v5.3.3/packages/vite/CHANGELOG.md

Also update sibling @vitejs/plugin-react
2024-07-05 19:49:48 +05:30
Manav Rathi
7cef60f8b9 Inline 2024-07-05 19:39:20 +05:30
Manav Rathi
31b6572e17 New convention 2024-07-05 19:37:27 +05:30
Manav Rathi
d07a46f514 Tense 2024-07-05 19:36:35 +05:30
Manav Rathi
547d03049a [web] Start using TypeScript 5.5 goodies
We updated to 5.5 in https://github.com/ente-io/ente/pull/2351, but I was
waiting for the VS Code release with 5.5 to also go out (so that we don't see
the editor squigglies).
2024-07-05 19:34:47 +05:30
Manav Rathi
18ab41b9ec [workers] Restrict CORS ACAH headers to the whitelist (#2371) 2024-07-05 18:45:22 +05:30
Manav Rathi
e9938c2ac4 [workers] Restrict CORS ACAH headers to the whitelist 2024-07-05 18:17:34 +05:30
Manav Rathi
089ed89045 [meta] Prettier 3.3 (#2370)
No breaking changes that affect us.

https://prettier.io/blog/2024/06/01/3.3.0
2024-07-05 17:55:53 +05:30
Manav Rathi
9c11a7f4b7 [meta] Prettier 3.3
No breaking changes that affect us.

https://prettier.io/blog/2024/06/01/3.3.0
2024-07-05 17:51:07 +05:30
Manav Rathi
543fb835f3 [server] Increase HTTP request body size to prevent 413 Too Large errors (#2369)
Allow HTTP request body up to 4 MB. The default is 1 MB, which is too
small for face embeddings for photos with more than a couple of hundred
faces.

Roughly, each face embedding is 4KB, but encrypting and base-64-ing the
embedding also has a 30% addition (just from one sample I saw), so this
should allow photos with ~700 faces to go through.

Ref:
-
https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
2024-07-05 14:20:31 +05:30
Manav Rathi
0b3ca8db69 [server] Increase HTTP request body size to prevent 413 Too Large errors
Allow HTTP request body up to 4 MB. The default is 1 MB, which is too small for
face embeddings for photos with more than a couple of hundred faces.

Roughly, each face embedding is 4KB, but encrypting and base-64-ing the
embedding also has a 30% addition (just from one sample I saw), so this should
allow photos with ~700 faces to go through.

Ref:
- https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
2024-07-05 14:08:10 +05:30
Aman Raj Singh Mourya
05e7863bdc [mob][photos] Lock count fixed 2024-07-05 13:32:17 +05:30
Manav Rathi
a2ee8a2ee9 [desktop] Embed faces in batches to prevent memory pressure crash (#2368) 2024-07-05 12:54:06 +05:30
Manav Rathi
969154baff [desktop] Embed faces in batches to prevent memory pressure crash 2024-07-05 11:53:52 +05:30
Aman Raj Singh Mourya
27525907af [mob][photos] Lock screen Clean Up 2024-07-05 11:46:38 +05:30
Aman Raj Singh Mourya
92e89d3589 [mob][photos] Timer animation fixed 2024-07-05 11:36:43 +05:30
Manav Rathi
9898a7c221 [desktop] Update Electron 30.0.9 => 30.1.2 (#2366)
- Update Electron 30.0.9 => 30.1.2
- Revert to the now un-deprecated API that we were using earlier
- Upgrade lru-cache
2024-07-05 10:59:47 +05:30
Manav Rathi
ef788b16b9 Upgrade lru-cache 2024-07-05 10:57:48 +05:30
Manav Rathi
5f7577309a Revert to the now un-deprecated API that we were using earlier
https://github.com/electron/electron/pull/42411
2024-07-05 10:53:13 +05:30
Manav Rathi
cd39e5e9cd Update Electron 30.0.9 => 30.1.2
https://github.com/electron/electron/releases/tag/v30.1.2
2024-07-05 10:48:04 +05:30
Manav Rathi
588662d1ce [desktop] Only attempt indexing after a successful pull (#2365) 2024-07-05 10:45:56 +05:30
Manav Rathi
4f98e72a58 [desktop] Only attempt indexing after a successful pull 2024-07-05 09:38:03 +05:30
Manav Rathi
5bd3f6076b [infra] Teach copycat db how to restore specific versions (#2363) 2024-07-04 22:08:19 +05:30
Manav Rathi
adcdba3f8f Update SCW cli version
No specific changes, just bringing it up to speed. No breaking changes I noticed in the CHANGELOG
https://github.com/scaleway/scaleway-cli/releases
2024-07-04 22:06:57 +05:30
Manav Rathi
5c4c6f2677 Allow restoring specific backups 2024-07-04 22:06:46 +05:30
Prateek Sunal
db5229170b Merge branch 'main' into mobile-panorama 2024-07-04 21:08:40 +05:30
Prateek Sunal
aec3157efe chore(mobile): lint fixes 2024-07-04 21:05:44 +05:30
Prateek Sunal
c594f05423 feat(mobile): add panorama viewer 2024-07-04 21:05:18 +05:30
Manav Rathi
f217d85b70 [desktop] Allow live indexing during uploads (#2361)
Saves on an unnecessary download.

With this final piece in place, the face indexing part is feature
complete.
2024-07-04 20:31:25 +05:30
Manav Rathi
52448cd2a2 Shorten 2024-07-04 20:26:31 +05:30
Manav Rathi
dca76f304c Increase liveq limit 2024-07-04 20:19:30 +05:30
Manav Rathi
26f6ab0464 Use uploadItem 2024-07-04 20:11:50 +05:30
Manav Rathi
90c01a19a5 Tweak 2024-07-04 19:26:00 +05:30
Manav Rathi
38e23ca1b5 Rename 2024-07-04 19:20:19 +05:30
Manav Rathi
5698ee12a3 Doc 2024-07-04 19:05:19 +05:30
Manav Rathi
c3bbceae49 delegate 2024-07-04 18:45:13 +05:30
Manav Rathi
95ef21ae4f Forward the upload item 2024-07-04 17:39:30 +05:30
Aman Raj Singh Mourya
9982c73d5a [mob][auth] Implemented Lock screen 2024-07-04 16:55:33 +05:30
Manav Rathi
0ce729a312 Expand 2024-07-04 15:19:11 +05:30
Manav Rathi
73b78916de Ref 2024-07-04 15:16:59 +05:30
Manav Rathi
864e4c6dd1 Rename 2024-07-04 15:16:19 +05:30
Manav Rathi
00de818e65 Index new 2024-07-04 15:12:28 +05:30
Manav Rathi
41fe7ad794 Doc and rearrange 2024-07-04 15:07:10 +05:30
Manav Rathi
13843bf52d [desktop] Regenerate face crops whenever needed (#2358) 2024-07-04 14:14:23 +05:30
Manav Rathi
6d630e0c2a Misc 2024-07-04 14:06:04 +05:30
Manav Rathi
7bd10ed78b Trigger 2024-07-04 13:54:14 +05:30
Manav Rathi
ce0442a5dd Regen if needed 2024-07-04 13:42:56 +05:30
Manav Rathi
b950fde3f2 Regen upper 2024-07-04 13:31:59 +05:30
Manav Rathi
1ab844da36 regen lower 2024-07-04 13:13:44 +05:30
Manav Rathi
eb7611a6d1 Fix warnings on opening drawer 2024-07-04 12:53:26 +05:30
Manav Rathi
ce045fb680 Cleanup 2024-07-04 12:41:02 +05:30
Manav Rathi
594d0e7ea0 The missing bit (as compared to mobile) 2024-07-04 12:17:54 +05:30
Aman Raj Singh Mourya
8c79aedd19 [mob][photos] Implemeted Applock to set custom pin/password (#2130)
This PR add the following features
1. **Device Lock:** If the user's device has a screen lock (PIN,
fingerprint, etc.), it will be used for initial authentication.
2. **Custom PIN/Passwprd**: Users can set a custom PIN/Password for app
access, independent of the device lock.

<br/>
<img width="300"
src="https://github.com/ente-io/ente/assets/146618155/54b044d1-d361-4ed8-a138-87b4838d75fc">
<img align="left" width="300"
src="https://github.com/ente-io/ente/assets/146618155/9bb90ab7-2d97-472e-90da-945a3a043533">

<br/>

<img width="300"
src="https://github.com/ente-io/ente/assets/146618155/8207605f-3495-4f62-bc34-b5a8ec64ab0a">
<img align="left" width="300"
src="https://github.com/ente-io/ente/assets/146618155/9f5fb83f-37a1-4214-b27e-4433b40a8773">
2024-07-04 12:12:40 +05:30
Manav Rathi
401ae85f40 take 3 2024-07-04 12:08:58 +05:30
Manav Rathi
3065b392f3 cmp 2024-07-04 11:44:43 +05:30
Manav Rathi
2a587039b0 gen2 2024-07-04 11:10:22 +05:30
Manav Rathi
6af39d52e3 Impl 2024-07-04 11:07:11 +05:30
Manav Rathi
e15dbc2023 Outline 2024-07-04 10:57:45 +05:30
Manav Rathi
ed2c63cf03 Port the mobile algo
Function: generateFaceThumbnailsUsingCanvas
File: mobile/lib/utils/image_ml_util.dart
2024-07-04 10:28:48 +05:30
Manav Rathi
b04538ada2 Rename and merge 2024-07-04 10:00:19 +05:30
Manav Rathi
52cd2d30a1 Agenda 2024-07-04 09:44:43 +05:30
Manav Rathi
0d0d501518 Swap 2024-07-04 09:28:48 +05:30
Manav Rathi
5b7dcddab3 [desktop] Fetch face indexes - Part 7/7 (#2357)
There still remain things to fix (e.g. the live sync), but now overall
the fetch + index flow is complete.
2024-07-03 21:03:21 +05:30
Manav Rathi
809b02cb26 Last trace 2024-07-03 20:33:39 +05:30
ashilkn
cb94d95d94 [mob][photos] Bump up to v0.9.4 2024-07-03 20:13:46 +05:30
ashilkn
4665cac03d [mob][photos] Extract strings 2024-07-03 20:11:40 +05:30
ashilkn
98d1a1c219 [mob][photos] Remove old assets 2024-07-03 19:43:15 +05:30
Manav Rathi
3b4897b86a Omit middleman 2024-07-03 19:37:20 +05:30
ashilkn
1042332f5b [mob][photos] Add title to error dialog when there is no system lock 2024-07-03 19:34:57 +05:30
ashilkn
c71850be07 [mob][photos] Change lock screen background asset 2024-07-03 19:21:16 +05:30
Manav Rathi
c0a6918c09 Trim 2024-07-03 18:18:16 +05:30
Manav Rathi
c66a74d1c7 Cleanup 2024-07-03 18:09:15 +05:30
Aman Raj Singh Mourya
80881816f3 [mob][photos] Lock screen UI tweaks (#2355) 2024-07-03 17:51:08 +05:30
Aman Raj Singh Mourya
39a3a48fd3 [mob][photos] show error dialog on no device lock enabled 2024-07-03 17:50:30 +05:30
ashilkn
5dbe46092a [mob][photos] lock screen UI tweaks 2024-07-03 17:35:41 +05:30
Aman Raj Singh Mourya
6e6da8152d [mob][photos] UI update 2024-07-03 16:20:24 +05:30
ashilkn
f570773f23 [mob][photos] Use better names 2024-07-03 15:49:13 +05:30
Manav Rathi
b43e6e5981 Lint fix 2024-07-03 15:09:51 +05:30
ashilkn
2dc7d19784 Merge branch 'main' into lockscreen_options 2024-07-03 14:57:55 +05:30
Aman Raj Singh Mourya
c789684c31 [mob][photos] Tap anywhere on Lock screen to unlock 2024-07-03 14:53:35 +05:30
Manav Rathi
d539eb9b1b hook to upload events 2024-07-03 14:44:31 +05:30
Manav Rathi
c8f3df3969 Reorder 2024-07-03 14:34:15 +05:30
Manav Rathi
5f771e923c New flow 2024-07-03 14:31:46 +05:30
Manav Rathi
8acb2a1b98 Clarify 2024-07-03 14:09:32 +05:30
Manav Rathi
0fa0bf124a Only reset the idle duration on non-empty pulls 2024-07-03 14:07:42 +05:30
Manav Rathi
1b6d362314 Handle first run 2024-07-03 13:58:47 +05:30
Manav Rathi
1987f2354a Test run 2024-07-03 13:34:50 +05:30
Manav Rathi
2ab2a13dc0 Download manager 2024-07-03 13:33:17 +05:30
Manav Rathi
70e198ee7f Intertwine 2024-07-03 13:17:30 +05:30
Aman Raj Singh Mourya
b3e7bab0cb [mob][photos] UI update 2024-07-03 13:17:25 +05:30
Aman Raj Singh Mourya
23acf45d6b Merge branch 'lockscreen_options' of https://github.com/ente-io/ente into lockscreen_options 2024-07-03 13:13:34 +05:30
Aman Raj Singh Mourya
4ad8d0c0fd [mob][photos] UI update 2024-07-03 13:08:43 +05:30
Manav Rathi
da06653c6a Implicit state machine 2024-07-03 12:41:38 +05:30
Manav Rathi
ea47936231 ua and more 2024-07-03 12:25:23 +05:30
Manav Rathi
fc46552b0f Batch 2024-07-03 11:50:45 +05:30
Manav Rathi
532a9f64ff Read 2024-07-03 11:45:49 +05:30
Manav Rathi
910013572d Make the user's ID accessible to web workers 2024-07-03 11:44:31 +05:30
Manav Rathi
c61263f179 Support nums and bools 2024-07-03 11:34:21 +05:30
Manav Rathi
206a8a538a Start using it 2024-07-03 11:12:10 +05:30
Manav Rathi
9e69798d79 In memory flag 2024-07-03 11:03:02 +05:30
Manav Rathi
5948714aff S2 2024-07-03 10:42:45 +05:30
Manav Rathi
08a23d8733 Sketch 2024-07-03 10:22:18 +05:30
Manav Rathi
0814fd42d1 [web] Misc minor tsc improvements (#2352) 2024-07-02 21:43:26 +05:30
Manav Rathi
dbe3e9a7d8 New convention 2024-07-02 21:29:02 +05:30
Manav Rathi
94f5822e72 Works 2024-07-02 21:17:41 +05:30
Manav Rathi
851cd77c50 ditto 2024-07-02 21:15:37 +05:30
Manav Rathi
2709298df0 Isolate 2024-07-02 21:15:02 +05:30
Manav Rathi
eee9a32b9a [web] TypeScript 5.5 (#2351) 2024-07-02 21:03:04 +05:30
Manav Rathi
4a84309e23 Apparently 2024-07-02 20:57:54 +05:30
Manav Rathi
6aeaea65ca [web] TypeScript 5.5 2024-07-02 20:43:15 +05:30
Ashil
61eb8d4282 [mob][photos] Lock screen clean up + refactor (#2350) 2024-07-02 20:07:31 +05:30
ashilkn
a3b19162f4 [mob][photos] Clean up 2024-07-02 20:04:18 +05:30
Manav Rathi
c8d0ccfe6a [desktop] Fetch face indexes - Part 6/x (#2349) 2024-07-02 20:01:42 +05:30
Manav Rathi
bb31f44227 Prepare for merge 2024-07-02 19:58:12 +05:30
ashilkn
6ab5015b9d [mob][photos] Refactor + use better variable names 2024-07-02 19:42:25 +05:30
Manav Rathi
d77b9d06f9 lf 2024-07-02 19:24:21 +05:30
Manav Rathi
9758b85e96 Prune 2024-07-02 19:22:45 +05:30
Manav Rathi
e8445d99fb Tweak 2024-07-02 19:17:22 +05:30
Manav Rathi
177a04830b Match face DB 2024-07-02 19:10:15 +05:30
Manav Rathi
3861e48737 Prune 2024-07-02 19:03:18 +05:30
Manav Rathi
f60ff6d8df Rename and shuffle 2024-07-02 18:59:50 +05:30
ashilkn
365e8e6eb8 [mob][photos] Make custom key pad for pin a separate widget and reuse it instead of writing duplicates of it 2024-07-02 18:19:16 +05:30
Manav Rathi
f757c996e7 [desktop] Fetch face indexes - Part 5/x (#2348) 2024-07-02 15:53:13 +05:30
ashilkn
71e7e660b2 [mob][photos] Use better keys + make members private 2024-07-02 15:46:01 +05:30
Manav Rathi
ff94ceb254 Fix condition 2024-07-02 15:44:02 +05:30
Manav Rathi
54b0374680 Parse array 2024-07-02 15:41:24 +05:30
Manav Rathi
33ab6809e2 Cleanup 2024-07-02 15:31:24 +05:30
Manav Rathi
c9a2494ac8 Test 2024-07-02 15:17:51 +05:30
ashilkn
03ded09cb4 [mob][photos] Use consistent names for all lock screen related classes and file names 2024-07-02 15:17:07 +05:30
Manav Rathi
e28a6b5290 Add custom error
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error
2024-07-02 15:12:07 +05:30
ashilkn
f6e4d4c7c9 [mob][photos]
Clean up main.dart
2024-07-02 15:04:06 +05:30
Manav Rathi
8031f27feb Sanity check 2024-07-02 14:53:35 +05:30
ashilkn
ec04becd0e [mob][photos] Clean up configuration.dart 2024-07-02 14:44:22 +05:30
Manav Rathi
1a4b3199f1 new 2024-07-02 14:15:55 +05:30
Manav Rathi
f7137b721e Move 2024-07-02 13:56:53 +05:30
Manav Rathi
080d5630a8 imports 2024-07-02 13:52:58 +05:30
Manav Rathi
af61774d93 Give tsc a helping hand 2024-07-02 13:49:51 +05:30
Manav Rathi
0e1b490371 Assert 2024-07-02 13:47:27 +05:30
Manav Rathi
6bb126e58f Move 2024-07-02 13:34:43 +05:30
Manav Rathi
369ff7833c Fix 2024-07-02 13:32:10 +05:30
Manav Rathi
658a258ddc Fix 2024-07-02 13:31:12 +05:30
Manav Rathi
9c377d9ced fix 2024-07-02 13:27:16 +05:30
Manav Rathi
c27f4a64df assert 2024-07-02 13:22:31 +05:30
Manav Rathi
4d9b7d7632 fix 2024-07-02 13:18:20 +05:30
Manav Rathi
1f00330fd4 fix or neuter or workaround 2024-07-02 13:14:22 +05:30
Manav Rathi
6c178a4476 fix 2024-07-02 13:07:47 +05:30
Manav Rathi
f3bd395f11 New loc 2024-07-02 13:04:51 +05:30
Manav Rathi
9d30ffc96f [desktop] Fix CI lint errors (#2344)
Ref: https://github.com/ente-io/ente/pull/2342
2024-07-02 12:32:46 +05:30
Manav Rathi
8fe0a31da3 [desktop] Fix CI lint errors
https://github.com/ente-io/ente/pull/2342
2024-07-02 12:30:38 +05:30
Nikunj Kumar Nakum
06fae3836e Merge branch 'ente-io:main' into main 2024-07-02 12:29:22 +05:30
Manav Rathi
6ee237716e [desktop] Fetch face indexes - Part 4/x (#2341)
This mostly moves a few files that are transitively used by f-index.ts
to new (so that we can move f-index.ts to new and call it from the
worker therein).
2024-07-02 12:28:11 +05:30
Nikunj Kumar Nakum
d86ce619c0 Update custom-icons.json
added bitmart and htx
2024-07-02 12:26:37 +05:30
Manav Rathi
93b264443c next line 2024-07-02 12:25:21 +05:30
Manav Rathi
47e8474466 wc 2024-07-02 12:21:39 +05:30
Manav Rathi
dd80b2174f Try once more 2024-07-02 12:18:32 +05:30
Laurens Priem
fa28d6d6db [web][photos] Correct clip preprocessing (#2342)
## Description

Fixed issues with the old clip preprocessing.

## Tests

Not tested, but confident it's correct. Should compare embeddings
between platforms after all web changes are done.
2024-07-02 12:10:29 +05:30
Manav Rathi
f8e5bd3d66 Workaround failures on GitHub action 2024-07-02 12:07:45 +05:30
laurenspriem
ff2d838b64 [web][photos] Correct clip preprocessing 2024-07-02 12:06:41 +05:30
Aman Raj Singh Mourya
9fd94c63d9 [mob][photos] lockscreen UI updated 2024-07-02 11:52:47 +05:30
Manav Rathi
8abcd39966 Fix warning 2024-07-02 11:48:48 +05:30
Manav Rathi
a65e0ddfa4 lf 2024-07-02 11:47:30 +05:30
Manav Rathi
406e7bd5bd tsc 2024-07-02 11:41:44 +05:30
Manav Rathi
a7f0dc74fd tsc 2024-07-02 11:26:11 +05:30
Manav Rathi
b49d1323db tsc 2024-07-02 11:14:35 +05:30
Manav Rathi
16b79bcf4a tsc 2024-07-02 11:11:06 +05:30
Manav Rathi
16e197455b Update imports 2024-07-02 11:00:38 +05:30
Manav Rathi
cd27168f5f Move 2024-07-02 10:58:59 +05:30
Manav Rathi
1c7f25723e Conv 2024-07-02 10:58:27 +05:30
Manav Rathi
025fe35999 tsc transitive 2024-07-02 10:55:57 +05:30
Manav Rathi
892a90d83b esl 2024-07-02 10:51:44 +05:30
Manav Rathi
94f179ebab Fix esl 2024-07-02 10:41:06 +05:30
Manav Rathi
f2ea1a05c1 Fix tsc 2024-07-02 10:38:51 +05:30
Manav Rathi
b88d6d26a6 Fix tsc 2024-07-02 10:37:44 +05:30
Manav Rathi
18194dc61a Fix tsc 2024-07-02 10:35:29 +05:30
Manav Rathi
f7324d5388 Move 2024-07-02 10:22:04 +05:30
Manav Rathi
93488e149d move and merge 2024-07-02 10:15:40 +05:30
Crowdin Bot
23b0ea67ae New Crowdin translations by GitHub Action 2024-07-02 02:10:11 +00:00
Nikunj Kumar Nakum
a2599f3415 updated coindcx icon and added 2 more icons
added new HTX and bitmart icons
2024-07-02 00:15:33 +05:30
Manav Rathi
2cce5fb17c Move more 2024-07-01 20:44:09 +05:30
Manav Rathi
9205907588 Inline 2024-07-01 20:33:28 +05:30
Manav Rathi
a282c6cb40 Move more 2024-07-01 20:28:32 +05:30
Manav Rathi
cec60520d9 Move 2024-07-01 20:16:57 +05:30
Manav Rathi
5c0f183740 lf 2024-07-01 20:09:49 +05:30
Manav Rathi
03150482f7 Use our check 2024-07-01 20:07:25 +05:30
Manav Rathi
5fcb1de540 Rename etc 2024-07-01 20:06:48 +05:30
Manav Rathi
157f3696e4 Move 2024-07-01 19:58:28 +05:30
Neeraj Gupta
a60c50fe97 [mob] Avoid FileUploader cache clear in case of autoLogout (#2335)
## Description

## Tests
2024-07-01 16:48:57 +05:30
Victor Muthiani
6544ed3d3d [auth] Icons for Yahoo, OKX, 1XBET, Bitget, & Crypto.com (#2291)
## Description
Added Yahoo,okx,1xbet,bitget & crypto.com icons
uploaded respective optimized svgs and updated the json file
2024-07-01 16:46:57 +05:30
Laurens Priem
b4d0eb843b [mob][photos] Fix german translation (#2337)
## Description

Fixed translation.
2024-07-01 16:45:44 +05:30
laurenspriem
c40a051f5f [mob][photos] Fix german translation 2024-07-01 16:43:54 +05:30
Manav Rathi
0b76287f80 [desktop] Fetch face indexes - Part 3/x (#2336) 2024-07-01 16:25:08 +05:30
Manav Rathi
df85e70a37 lf 2024-07-01 16:23:28 +05:30
Manav Rathi
9734797bac Comment out for now 2024-07-01 16:19:24 +05:30
Manav Rathi
b430aeb7c4 Shorten 2024-07-01 15:55:08 +05:30
Manav Rathi
ff0f940798 Shorten 2024-07-01 15:32:15 +05:30
Manav Rathi
5988052521 Fix 2024-07-01 15:29:32 +05:30
Manav Rathi
c929d3dc74 Simplify 2024-07-01 15:10:57 +05:30
Manav Rathi
bf2873821d Allow to be set/get from webworkers 2024-07-01 14:54:42 +05:30
Manav Rathi
eaecf91aa1 Rearrange 2024-07-01 14:52:11 +05:30
Neeraj Gupta
49f96dbea1 [mob] Avoid FileUploader cache clear in case of autoLogout 2024-07-01 14:43:53 +05:30
Manav Rathi
b9972e131a [web] Update case of some recently touched l10n keys (#2334) 2024-07-01 14:25:10 +05:30
Manav Rathi
c318a15236 Update l10n keys 2024-07-01 14:22:21 +05:30
Manav Rathi
1a545aeef6 [web] New translations (#2333)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-07-01 14:19:19 +05:30
Crowdin Bot
d40d119b82 New Crowdin translations by GitHub Action 2024-07-01 08:48:44 +00:00
Manav Rathi
e71410af4e [web] Allow web workers to access token to make API calls (#2332) 2024-07-01 14:16:32 +05:30
Manav Rathi
612e81d74e tsc 2024-07-01 13:53:29 +05:30
Manav Rathi
bf1f4b26cf Keep separate 2024-07-01 13:51:43 +05:30
Manav Rathi
de7b80a352 Fix 2024-07-01 13:48:29 +05:30
Manav Rathi
cf3728eee8 Migrate 2024-07-01 13:46:48 +05:30
Manav Rathi
5b9c173b0e Clean 2024-07-01 13:37:17 +05:30
Manav Rathi
4179d183bd Unenum 2024-07-01 13:32:51 +05:30
Manav Rathi
fbae7b6fd0 Inline 2024-07-01 13:27:57 +05:30
Manav Rathi
62c9b2afc2 Remove dependency 2024-07-01 13:22:22 +05:30
Manav Rathi
cd81bbe19e Scope 2024-07-01 13:20:11 +05:30
Manav Rathi
39a6b3cd6b Make the context more specific 2024-07-01 13:20:11 +05:30
Manav Rathi
d14a6591d2 Assert that accounts has no local state 2024-07-01 13:20:11 +05:30
Manav Rathi
6b6edfb5bf Reduce state 2024-07-01 13:20:11 +05:30
Manav Rathi
7b20bbd5a2 Reorder 2024-07-01 13:20:11 +05:30
Manav Rathi
61a62f5656 Reduce local state for accounts 2024-07-01 13:20:11 +05:30
Manav Rathi
0376af8d38 Read from kv 2024-07-01 13:20:11 +05:30
Manav Rathi
85aaf94c89 4 2024-07-01 13:20:11 +05:30
Manav Rathi
af53585f6c 3 2024-07-01 13:20:11 +05:30
Manav Rathi
22fbf0a1be 2 2024-07-01 13:20:11 +05:30
Manav Rathi
4acd17f06b Funnel point 2024-07-01 13:20:11 +05:30
Manav Rathi
05e7a998e2 [desktop] Use clip-bpe-js as the Tokenizer (#2331)
Replace the inlined code with the library.

Tested by comparing the produced embeddings on a few sample prompts
(were exactly the same).
2024-07-01 13:05:31 +05:30
Manav Rathi
bbc44d6ac1 [desktop] Use clip-bpe-js as the Tokenizer
Replace the inlined code with the library.

Tested by comparing the produced embeddings on a few sample prompts (were
exactly the same).
2024-07-01 13:03:07 +05:30
Manav Rathi
b1da1dfe05 [infra] Change prometheus scrape interval to 60s (the default) (#2330) 2024-07-01 11:47:12 +05:30
Manav Rathi
26c1dda600 [infra] Change prometheus scrape interval to 60s (the default) 2024-07-01 11:42:11 +05:30
Manav Rathi
2f0112d5de [web] Make the client package available to web worker code (#2329) 2024-07-01 09:55:41 +05:30
Manav Rathi
ca0fa88bb5 Incl x-c-p in all API fetches 2024-06-30 18:58:35 +05:30
Manav Rathi
45093fcc0c Inline 2024-06-30 18:44:25 +05:30
Manav Rathi
776915e659 Continue painting 2024-06-30 18:22:58 +05:30
Manav Rathi
4a14017cff cast 2024-06-30 18:14:27 +05:30
Manav Rathi
67e054a26d Continue second pass 2024-06-30 18:03:08 +05:30
Manav Rathi
6f073b007b isDesktop 2024-06-30 17:58:22 +05:30
Manav Rathi
284799bc7a Second pass 2024-06-30 17:54:11 +05:30
Manav Rathi
54c54d50c6 Static pkg name 2024-06-30 17:52:52 +05:30
Manav Rathi
f11960981a Use static app name 2024-06-30 17:41:56 +05:30
Manav Rathi
9973e5c701 Test 2024-06-30 08:07:38 +05:30
Manav Rathi
8fbc7b3937 Case 2024-06-30 07:58:14 +05:30
Manav Rathi
d09a7b290b New constant 2024-06-30 07:55:24 +05:30
Manav Rathi
bd627a6e54 Case 2024-06-30 07:49:21 +05:30
Manav Rathi
3ddd5bff2d Add cross-env (shx doesn't allow this)
https://github.com/shelljs/shx/issues/127
2024-06-29 21:48:50 +05:30
Manav Rathi
f7b7bae0af The plan
But will Windows play along...
2024-06-29 21:19:46 +05:30
Ashil
62c3ca3ecc [mob][photos] Fix: Intermittent disappearance of favorite album on 'On Ente' section. (#2314)
## Description

Quite possible the on ente section is built before favorites service is
finished initialising which is causing this issue. Reloading after init
is complete should fix this bug

## Tests

Tested and working fine.
2024-06-29 14:39:21 +05:30
Ashil
a967d2fbd0 [mob][photos] Unselect all selected items on system back navigation (#2315) 2024-06-29 14:39:12 +05:30
Aman Raj Singh Mourya
3c86a9bc06 [mob][photos] Added time delay for invalid attempts 2024-06-29 14:19:47 +05:30
Manav Rathi
450981a5fb [desktop] Fetch face indexes - Part 2/x (#2320)
Continuation of https://github.com/ente-io/ente/pull/2297
2024-06-29 12:01:52 +05:30
Manav Rathi
ad2dabcc96 Fix again 2024-06-29 11:43:15 +05:30
Manav Rathi
8b16b4632f Renames 2024-06-29 11:36:45 +05:30
Manav Rathi
bb37630bae Nicer 2024-06-29 11:32:21 +05:30
Manav Rathi
66cb95e32c Fix hanging paren 2024-06-29 11:31:43 +05:30
Manav Rathi
ea51cdfc77 Remove unused 2024-06-29 11:18:46 +05:30
Manav Rathi
4d41f2d64c Remove unused 2024-06-29 11:15:43 +05:30
Manav Rathi
266796f619 wa 2024-06-29 10:52:43 +05:30
Manav Rathi
57a587301b Hook back into the app 2024-06-29 10:44:29 +05:30
Manav Rathi
90c15774d7 Extract 2024-06-29 10:44:29 +05:30
Manav Rathi
7d46de139e Logout 2024-06-29 10:44:29 +05:30
Manav Rathi
dd3243492a Use module state 2024-06-29 10:44:29 +05:30
Manav Rathi
ea7619d405 Potential entry point 2024-06-29 10:44:29 +05:30
Manav Rathi
7d8ade7fe4 Extract 2024-06-29 10:44:29 +05:30
Manav Rathi
ddf18bd036 Handle versioning 2024-06-29 10:44:27 +05:30
Manav Rathi
84a03dafe3 Isolate what changes 2024-06-29 10:44:02 +05:30
Manav Rathi
dc5b0b4393 Save 2024-06-29 10:44:02 +05:30
Manav Rathi
36d8c2a427 Specific-er than sync 2024-06-29 10:44:02 +05:30
Manav Rathi
b63a15a521 Move trash handling to existing sync 2024-06-29 10:44:02 +05:30
Manav Rathi
53452344f3 Lints 2024-06-29 10:44:02 +05:30
Manav Rathi
a119d544af prune prep 2024-06-29 10:44:02 +05:30
Manav Rathi
67d9e650ba Include files from trash 2024-06-29 10:44:02 +05:30
Manav Rathi
61d35159fa Dup 2024-06-29 10:44:02 +05:30
Manav Rathi
593ece7681 Compile 2024-06-29 10:44:01 +05:30
Manav Rathi
45a103f66a New layer 2024-06-29 10:42:28 +05:30
Manav Rathi
27c6474f06 Doc all 2024-06-29 10:42:28 +05:30
Manav Rathi
660f6c645b Rearrange 2024-06-29 10:42:28 +05:30
Manav Rathi
90cffef7be Doc 2024-06-29 10:42:28 +05:30
Manav Rathi
d6f30546b9 Rearrange 2024-06-29 10:42:28 +05:30
Manav Rathi
a9e0aa13ff Inline 2024-06-29 10:42:28 +05:30
Manav Rathi
1496b60895 Inline 2024-06-29 10:42:28 +05:30
Manav Rathi
2f7923b097 Rearrange 2024-06-29 10:42:28 +05:30
Manav Rathi
d5d7efd657 doc 3 2024-06-29 10:42:28 +05:30
Manav Rathi
c4b93019d5 doc 2 2024-06-29 10:42:28 +05:30
Manav Rathi
0943d1db8c wip doc 2024-06-29 10:42:28 +05:30
Manav Rathi
822e82d709 [desktop] Speed up reconciliation (#2319)
- Do an upfront directory listing.
- Avoid JSON parsing (the various LivePhoto functions we were callling
were internally doing it), and even when we have to, don't do it twice
(I tested, the JSON parsing does have a noticeable impact)

@ua741 Monkey testing shows it to be _*almost_ O(1) compared to the
earlier O(n). _*almost_ is with many caveats:
- The recursive ls is still multi-second (takes ~5s for 300k files on my
SSD)
- The loop is now almost instantaneous for people who don't have live
photos or have already synced, but there is still one JSON parse (in the
else branch) that'll run for initial exports or people with many live
photos
2024-06-29 09:32:11 +05:30
Manav Rathi
51eec12af5 Avoid JSON parsing, and even when we have to, don't do it twice 2024-06-29 09:14:17 +05:30
Manav Rathi
5da4028ebf [desktop] Speed up reconciliation by doing an upfront directory listing 2024-06-29 08:31:28 +05:30
Manav Rathi
26626797ff [web] Minor localization fixes (#2317) 2024-06-29 08:12:59 +05:30
Manav Rathi
ee3ddad4d1 Fix 2024-06-29 08:11:02 +05:30
Manav Rathi
730ca2119c Fix typo 2024-06-29 08:09:24 +05:30
Manav Rathi
58127591d0 Mark as pending translation 2024-06-29 08:08:55 +05:30
Manav Rathi
c9eaa2df12 Fix 2024-06-29 08:03:36 +05:30
Manav Rathi
66549445d1 [web] Fix download notification text overflow (#2316)
Fix overflowing file name on download success notification in case the
file name is very long and without any spaces.
2024-06-28 22:25:15 +05:30
Manav Rathi
f167839ddc Fix overflowing file name on download success notification
Ellipse text in notifications. This wasn't happening earlier if the file name
was long, without spaces to act as breaks.
2024-06-28 22:20:32 +05:30
Manav Rathi
6f0a36acde Inline 2024-06-28 22:13:13 +05:30
Ashil
1463d4199e [mob][photos] upgrade photo_manager (#2301) 2024-06-28 19:04:54 +05:30
ashilkn
094d4053fb [mob][photos] unselect all selected items on system back navigation 2024-06-28 18:52:36 +05:30
ashilkn
0a4abada00 [mob][photos] add debouncer to reloading user collections tab on FavoritesServiceInitCompleteEvent 2024-06-28 16:38:48 +05:30
ashilkn
6bf00c40a0 [mob][photos] Fix: Intermittent disappearance of favorite album on 'On Ente' section
Quite possible the on ente section is built before favorites service is finished initialising which is causing this issue. Reloading after init is compelte should fix this bug
2024-06-28 15:55:46 +05:30
Manav Rathi
959d5c78b2 [desktop] Add logging to help trace memory pressure issues (#2312)
The previous fix did not help the user:
https://discord.com/channels/948937918347608085/1253299055472410645

But I've also been unable to reproduce this on Linux too. Modifying this
code to just log (so that we can better understand before adding ad-hoc
workarounds).
2024-06-28 14:33:52 +05:30
Neeraj Gupta
2ea9b4ba84 [mob] Fix Send link option position for person and unamed group (#2313)
## Description

## Tests
2024-06-28 14:33:44 +05:30
Neeraj Gupta
9df98f8ffb [mob] Show create link for unamed group 2024-06-28 14:30:56 +05:30
Manav Rathi
a58fa405f7 [desktop] Add logging to help trace memory pressure issues
The previous fix did not help the user
https://discord.com/channels/948937918347608085/1253299055472410645

But I've also been unable to reproduce this on Linux.

Modifying this code to just log (so that we can better understand before adding
a workaround).
2024-06-28 14:28:58 +05:30
Neeraj Gupta
120fb38d3f [mob]Extract strings 2024-06-28 13:47:45 +05:30
Manav Rathi
471db8e8c1 [desktop] Reconcile exported files with disk on app start and resync (#2310) 2024-06-28 13:46:28 +05:30
Neeraj Gupta
8613f5e73f [mob] Keep send link as first option 2024-06-28 13:38:23 +05:30
Manav Rathi
22fc61633b [desktop] Reconcile exported files with disk on app start and resync 2024-06-28 13:35:34 +05:30
Manav Rathi
22e7bcb3b0 [desktop] Add CHANGELOG entries for upcoming release (#2309) 2024-06-28 13:26:49 +05:30
Manav Rathi
3aeaf365ca [desktop] Add CHANGELOG entries for upcoming release 2024-06-28 13:24:43 +05:30
Manav Rathi
5140d6c938 [web] Move custom apiOrigin to IndexDB (#2306)
Earlier we were storing the custom API origin setting in local storage.
Local storage is not accessible from web workers, which is a problem in
general (and in particular, this caused face indexing to fail since we
were not able to put the embeddings to remote since that code runs in a
web worker).

Move this to a Indexed DB. Do this in a way we can reuse the same table
for more such ad-hoc keys.
2024-06-27 20:44:21 +05:30
Manav Rathi
c7d5dde9f7 Sigh 2024-06-27 20:30:53 +05:30
Manav Rathi
b84470f574 Fix 2024-06-27 20:13:31 +05:30
Manav Rathi
29a496c039 Fix 2024-06-27 20:11:30 +05:30
Manav Rathi
9f9038ff97 Note 2024-06-27 20:08:47 +05:30
Manav Rathi
d33ba285a6 Replace 2024-06-27 20:06:17 +05:30
Manav Rathi
640fd48e70 Hobgoblin 2024-06-27 20:00:17 +05:30
Manav Rathi
52d7914ad0 Ergonomic kv 2024-06-27 19:58:55 +05:30
Manav Rathi
554a90eec5 Clear on logout 2024-06-27 16:36:30 +05:30
Manav Rathi
3555adae09 Move to correct place 2024-06-27 16:34:19 +05:30
Manav Rathi
ab63ed53df Fix 2024-06-27 16:29:10 +05:30
Manav Rathi
c4c53cd59f Touchups 2024-06-27 16:22:46 +05:30
Manav Rathi
e86b095480 Fin 2024-06-27 16:21:10 +05:30
Manav Rathi
55b2934c62 Continue 2024-06-27 16:20:17 +05:30
Manav Rathi
3f96209dbb Continue 2024-06-27 16:14:05 +05:30
Manav Rathi
9241c2e595 Retain leading slash
Looks pathy-ier
2024-06-27 16:03:19 +05:30
atyabbin
65c72f6cf5 Showing usage data in GB in the fetch table 2024-06-27 15:59:39 +05:30
Manav Rathi
94f4dcb9be more 2024-06-27 15:57:36 +05:30
Manav Rathi
f543b402f8 New abstraction 2024-06-27 15:40:35 +05:30
Manav Rathi
1b77c899da The rest 2024-06-27 15:33:00 +05:30
Manav Rathi
1aef9cf179 Update dev-settings page 2024-06-27 15:13:36 +05:30
Manav Rathi
f0b3c4a30a idb-keyval 2024-06-27 14:38:45 +05:30
Neeraj Gupta
0def478b0d Dashboard Improvement (#2304)
Added the required modifications for the URL
2024-06-27 14:23:33 +05:30
atyabbin
f11cc82e44 modification in URL for update subscription 2024-06-27 14:16:29 +05:30
Manav Rathi
a3d7c53395 [web] New translations (#2302)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-06-27 13:39:30 +05:30
Aman Raj Singh Mourya
b4e0eb8491 Merge branch 'lockscreen_options' of https://github.com/ente-io/ente into lockscreen_options 2024-06-27 13:34:34 +05:30
Aman Raj Singh Mourya
bdbed2aa17 [mob][photos] Show errorText with border on invalid Pin 2024-06-27 13:33:40 +05:30
Aman Raj Singh Mourya
2652f39c21 [mob][photos] Fix visibility toggle disappearing on error state in lockscreen (#2303) 2024-06-27 13:32:37 +05:30
ashilkn
6f95272400 [mob][photos] Deprecate isPasswordInput in TextInputWidget, since the widget is becoming bloated and hard to maintain. Will be create a separate PasswordInputWidget instead in future 2024-06-27 12:54:26 +05:30
Crowdin Bot
92b4d52a40 New Crowdin translations by GitHub Action 2024-06-27 07:24:24 +00:00
Manav Rathi
083b7b3d95 [web] Notify user to logout when they change their password elsewhere (#2230)
See code comments for the why and how.

**Tests**

- [x] Normal login
- [x] Normal login but after entering incorrect password once
- [x] Login after changing password
- Superceded by next item: ~~Change password on different browser,
opening tab in earlier browser shows logout prompt~~
- [x] Change password on different browser (with logOutOtherDevices:
false), opening tab in earlier browser transparently logs in
- [ ] Same case, but even if earlier browser was already on the enter
password page
- [x] Change password on same browser, then open another tab. Doesn't
prompt to logout.
- [x] Fresh signup
2024-06-27 12:53:44 +05:30
ashilkn
20c33fd00b [mob][photos] Workaround for visibility icon disappearing when password is wrong in lock screen password 2024-06-27 12:50:39 +05:30
ashilkn
1d5366c6b6 [mob][photos] upgrade photo_manager 2024-06-27 10:05:43 +05:30
Laurens Priem
e2e36e285f Face cooldown (#2300)
## Description

- Remove cooldown timer in FaceMlService
- Only load face ML models when actually doing indexing
- Small refactor of FaceMlService

## Tests

Tested in debug mode on my pixel phone.
2024-06-27 06:12:52 +05:30
laurenspriem
c5bcc1992c [mob][photos] Small fix 2024-06-26 23:53:48 +05:30
laurenspriem
2c9b0e77ba [mob][photos] Force run on ML page 2024-06-26 23:11:23 +05:30
laurenspriem
ca7096b87c [mob][photos] Rename 2024-06-26 23:09:27 +05:30
laurenspriem
3a8b2cf7b8 [mob][photos] Small fix 2024-06-26 23:06:10 +05:30
laurenspriem
69bfaf2033 [mob][photos] Only load models when actually indexing locally 2024-06-26 22:00:31 +05:30
laurenspriem
0d12f17576 [mob][photos] Remove cooldown 2024-06-26 18:58:53 +05:30
Manav Rathi
80d5d7e44e [desktop] Fetch face indexes - Part 1/x (#2297)
No functional changes yet, just prep.
2024-06-26 15:27:12 +05:30
Manav Rathi
bfa4806d47 Remove unnecessary automatically made edits 2024-06-26 15:08:37 +05:30
Manav Rathi
2c3bd39ab6 read files 2024-06-26 15:03:37 +05:30
Manav Rathi
1d0cbc527a loop 2024-06-26 15:03:37 +05:30
Manav Rathi
4c8e6853be sync time 2024-06-26 15:03:37 +05:30
Manav Rathi
4839aaaf6d types 2024-06-26 15:03:37 +05:30
Manav Rathi
7cac870a68 API 2024-06-26 15:03:37 +05:30
Manav Rathi
a5a7c4fcb2 Sketch 2024-06-26 15:03:37 +05:30
Manav Rathi
3d91e1c481 doc 2024-06-26 15:03:37 +05:30
Manav Rathi
3193139118 [desktop] Fix stream.end not always being emitted (#2296)
This caused the reference counts to not be zero when we'd go to clear
the cache in `clearPendingUploads`.

Bug introduced in the nightly build, but didn't have any negative impact
except printing an error in the logs because of the unhandled promise
rejection.

Ref: https://github.com/nodejs/node/issues/10871#issuecomment-650150155
2024-06-26 15:00:58 +05:30
Manav Rathi
c354c80b1f [desktop] Fix stream.end not always being emitted
Ref: https://github.com/nodejs/node/issues/10871#issuecomment-650150155
2024-06-26 14:50:43 +05:30
Aman Raj Singh Mourya
59b132edf8 [mob][photos] moved funtions to lockscreen_setting.dart from configuration.dart 2024-06-26 14:02:27 +05:30
Manav Rathi
b67af0145a [desktop] Ensure cached zips are also marked closeable on errors (#2294) 2024-06-26 10:27:21 +05:30
Manav Rathi
a3bb8fa911 [desktop] Ensure cached zips are also marked closeable on errors 2024-06-26 10:24:04 +05:30
Manav Rathi
2d3e3c91d2 [desktop] Google takeout UX improvements (#2290) 2024-06-25 20:54:23 +05:30
Manav Rathi
baec693c72 lf 2024-06-25 20:13:15 +05:30
Manav Rathi
362179ba8d Retry hint 2024-06-25 20:07:57 +05:30
Manav Rathi
f55c33a4d6 FAQ link 2024-06-25 19:52:44 +05:30
Manav Rathi
083eb2fc7a Scan 2024-06-25 19:50:27 +05:30
Manav Rathi
df50a3b759 Fix 2024-06-25 19:48:33 +05:30
Manav Rathi
4e7045fe71 Tweak 2024-06-25 19:44:37 +05:30
Manav Rathi
9be81955af Handle state 2024-06-25 19:37:09 +05:30
Manav Rathi
477f093437 Tweak copy 2024-06-25 19:07:20 +05:30
Manav Rathi
b2d29ccbf8 Takeout opts 2024-06-25 18:59:40 +05:30
Manav Rathi
0b0701271e Split 2024-06-25 18:14:02 +05:30
Manav Rathi
c318167909 Cleanup 2024-06-25 18:14:02 +05:30
Manav Rathi
89ee10ea57 Clean 2024-06-25 18:14:02 +05:30
Manav Rathi
a310eca1c2 Update import 2024-06-25 15:58:30 +05:30
Manav Rathi
1cd5536eb1 Update message 2024-06-25 15:58:30 +05:30
Manav Rathi
5b411ce55a Fix lint 2024-06-25 15:58:30 +05:30
Manav Rathi
012aae17ec Fix formatting 2024-06-25 15:58:29 +05:30
Manav Rathi
e6b4d220a3 Fix 2024-06-25 15:58:29 +05:30
Manav Rathi
c988c30910 Validate in the other places where we request the password 2024-06-25 15:58:29 +05:30
Manav Rathi
3ae1b18bf1 Comment 2024-06-25 15:58:29 +05:30
Manav Rathi
a093c1dd34 Flatten 2024-06-25 15:58:29 +05:30
Manav Rathi
25a79e4146 Before computing with the keyattributes 2024-06-25 15:58:29 +05:30
Manav Rathi
47630408b6 We need the SRP attributes to detect changes 2024-06-25 15:58:29 +05:30
Manav Rathi
9c0a66b036 Cleanup 2024-06-25 15:58:29 +05:30
Manav Rathi
d8650aa33d router.reload is an undocumented, semi-deprecated, oneliner
Ref:
- https://github.com/vercel/next.js/discussions/53517
- https://github.com/vercel/next.js/blob/canary/packages/next/src/shared/lib/router/router.ts#L1007-L1009
2024-06-25 15:58:29 +05:30
Manav Rathi
a6645bce8b Wait for validity check to complete before verification 2024-06-25 15:58:29 +05:30
Manav Rathi
05816a3894 Note the field 2024-06-25 15:58:28 +05:30
Manav Rathi
e4e75b573f Reduce indentation 2024-06-25 15:58:28 +05:30
Manav Rathi
3f6ef61204 Use 2024-06-25 15:58:28 +05:30
Manav Rathi
326f7d647e validity 2024-06-25 15:58:28 +05:30
Manav Rathi
3d7e425f48 WIP 2024-06-25 15:58:28 +05:30
Manav Rathi
767f2479af wip 2024-06-25 15:58:28 +05:30
Manav Rathi
edceebd8fb The error in the background is potentially confusing too 2024-06-25 15:58:28 +05:30
Manav Rathi
685a3ca4c7 Upd 2024-06-25 15:58:27 +05:30
Manav Rathi
3a4dc21470 Component state for this component needs refactoring, for now read from source 2024-06-25 15:58:27 +05:30
Manav Rathi
ce3233a01f Also do it on incorrect password entry 2024-06-25 15:58:27 +05:30
Manav Rathi
2f8abd5b7f Give it a chance to kick in 2024-06-25 15:58:27 +05:30
Manav Rathi
f5d6037e31 Use the value 2024-06-25 15:58:27 +05:30
Manav Rathi
a03c8e3a55 Sketch 2024-06-25 15:58:27 +05:30
Manav Rathi
f64b0238c9 [server] Return key attributes in the session-validity response (#2288)
Smoke tested locally. Was also more thoroughly tested as part of
https://github.com/ente-io/ente/pull/2230.
2024-06-25 15:53:59 +05:30
Manav Rathi
06e7626206 [server] Return key attributes in the session-validity response 2024-06-25 15:25:04 +05:30
Ashil
a6dae9a661 [mob][photos] Fix file bottom bar not disappearing when in fullscreen (#2286)
## Description

When viewing photos/videos and enabling fullscreen (with a tap on
scree), the bottom bar wasn't disappearing like it used to. This PR
fixes this regression.
2024-06-25 14:21:25 +05:30
Manav Rathi
3d84937d06 [web] New translations (#2277)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-06-25 13:17:34 +05:30
Manav Rathi
2bc8cca55f [desktop] Cache the handle to the zip files to improve metadata parsing speed (#2287)
This should _significantly_ (hours => seconds) improve the performance
of the metadata parsing step during import of large Google Takeout zips,
and bring them to par as if the user had drag-and-dropped the unzipped
folder instead.

In my monkey tests, it seems that beyond a certain zip size (few GBs),
reopening the handle to a stream zip overshadows the time taken to read
the individual JSONs. This effect seems to grow very big for big zips to
a point where the metadata parsing step takes hours.

But note that I'm only testing this on synthetic exemplars I've created.
After merging it'll also need testing on more realistic huge takeout
examples.
2024-06-25 13:17:04 +05:30
Manav Rathi
24691b8652 Seems to work without it 2024-06-25 13:10:52 +05:30
ashilkn
522d1da0e9 [mob][photos] Fix file bottom bar not disappearing when in fullscreen 2024-06-25 13:09:24 +05:30
Manav Rathi
cef1dee2a0 Rely 2024-06-25 12:57:18 +05:30
Manav Rathi
3220da556d Use 2024-06-25 12:56:49 +05:30
Neeraj Gupta
ea6e098583 [auth][windows] Update letsencrypt root cert (#2285)
## Description

## Tests
2024-06-25 12:42:10 +05:30
Neeraj Gupta
610a5d8dcb [auth] Whitelist for windows only 2024-06-25 12:41:56 +05:30
Prateek Sunal
73a53994f3 chore(mobile): add adapted from header in relevant files 2024-06-25 12:37:35 +05:30
Ashil
f67dc4893f [mob][photos] Cache results for Magic section (only visible to internal users) (#2282)
## Description

- Use cached results for magic section so that it does't anymore have to
wait for ML framework to be initialised and doesn't have to re-compute
results every time, which means faster loading of the search tab.
- For internal users, all results in
[here](https://discover.ente.io/v1.json) will show up.
- For non-internal users, once available, results will be limited to 4.
- 4 random prompts are selected from
[here](https://discover.ente.io/v1.json) with non-empty results and are
cached.
- The cache updates when the data updates
[here](https://discover.ente.io/v1.json) (checks size to compare) or in
3 days since the last update.
2024-06-25 12:33:39 +05:30
Neeraj Gupta
185bed19aa [auth] Bump version 2024-06-25 12:29:39 +05:30
Neeraj Gupta
3094d74b6a [auth] Add latest letsencrypt ca 2024-06-25 12:29:25 +05:30
Manav Rathi
5c3cfb7403 Clear 2024-06-25 12:20:59 +05:30
Manav Rathi
5d0926ebb2 Impl 2024-06-25 12:16:23 +05:30
Manav Rathi
a49c7834d8 Cache the handle to the zip files - prep 2024-06-25 12:07:14 +05:30
Neeraj Gupta
2f327b1929 [mobile] New translations (#2278)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2024-06-25 12:00:54 +05:30
Neeraj Gupta
b7892f4257 [auth] New translations (#2279)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2024-06-25 12:00:25 +05:30
Neeraj Gupta
f5bcdd0d9e [mob][photos] Fix build failing (#2284)
```lib/core/error-reporting/super_logging.dart:20:8: Error: Error when reading 'lib/services/machine_learning/face_ml/face_ml_exceptions.dart': No such file or directory
import "package:photos/services/machine_learning/face_ml/face_ml_exceptions.dart";
       ^
lib/core/error-reporting/super_logging.dart:239:20: Error: 'CouldNotRetrieveAnyFileData' isn't a type.
      if (error is CouldNotRetrieveAnyFileData ||
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^
Target kernel_snapshot failed: Exception


FAILURE: Build failed with an exception.
2024-06-25 11:59:43 +05:30
ashilkn
6736ad73ec [mob][photos] Fix build failing 2024-06-25 10:51:19 +05:30
ashilkn
75dcf18d75 [mob][photos] Minor UI fix 2024-06-25 10:15:16 +05:30
ashilkn
e722024f8f [mob][photos] Catch any exceptions or errors when getting results for magic section and return an empty list to avoid showing a blank search tab 2024-06-25 10:13:43 +05:30
Manav Rathi
a714c0d70b [docs] Configure custom server - web/desktop (#2281) 2024-06-25 10:02:35 +05:30
Manav Rathi
51bcf02b96 [docs] Configure custom server - web/desktop 2024-06-25 10:01:01 +05:30
ashilkn
fcb79907cf [mob][photos] Remove code that was for handling edge cases when magic section was depending on newly computed results every time instead of using cache 2024-06-25 09:51:25 +05:30
ashilkn
35b42d4743 [mob][photos] clean up 2024-06-25 09:43:50 +05:30
ashilkn
8fae7719b5 [mob][photos] Update magic cache every 3 days 2024-06-25 09:31:24 +05:30
Crowdin Bot
64aa3ac0e8 New Crowdin translations by GitHub Action 2024-06-25 02:09:30 +00:00
Crowdin Bot
c7f3390e59 New Crowdin translations by GitHub Action 2024-06-25 01:59:59 +00:00
Crowdin Bot
b9a71060ec New Crowdin translations by GitHub Action 2024-06-25 01:45:24 +00:00
Manav Rathi
d095f52051 [web] Dev settings: avoid the red error state before first submit (#2274) 2024-06-24 20:08:49 +05:30
Manav Rathi
153850742d Avoid the red error state before first submit 2024-06-24 19:59:54 +05:30
Laurens Priem
c2cdb4e38b Face cleanup (#2273)
## Description

Cleaned up a lot of old and unused code.

## Tests

Tested in debug mode on my pixel phone.
2024-06-24 18:26:00 +05:30
laurenspriem
33ab69e2d8 Merge branch 'main' into face_cleanup 2024-06-24 17:50:16 +05:30
laurenspriem
b95e93778b [mob][photos] old code 2024-06-24 17:35:41 +05:30
laurenspriem
160f279464 [mob][photos] Remove old face crop widget 2024-06-24 17:33:35 +05:30
ashilkn
69bd1c8670 Merge branch 'main' into cache_magic_section 2024-06-24 17:31:58 +05:30
ashilkn
b21fe76b3f [mob][photos] Save magic cache to local path instead of saving it in shared preferences 2024-06-24 17:30:33 +05:30
laurenspriem
6ea449bd83 [mob][photos] Move ml exceptions 2024-06-24 17:29:21 +05:30
ashilkn
b99b2d1381 [mob][photos] Remove commented out code that was used before using data from magic cache 2024-06-24 16:55:36 +05:30
ashilkn
84f2c6d102 [mob][photos] Show 4 instead of 6 magic results in magic section for non-internal users 2024-06-24 16:53:20 +05:30
ashilkn
908e37f56f [mob][photos] Update MagicCache every 3 days 2024-06-24 16:48:25 +05:30
Manav Rathi
108ff34763 [web] New translations (#2272)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2024-06-24 16:11:45 +05:30
Crowdin Bot
8ce3126c92 New Crowdin translations by GitHub Action 2024-06-24 10:38:53 +00:00
Manav Rathi
b1006e0843 [web/desktop] Allow self-hosters to set custom endpoints (#2271) 2024-06-24 16:08:05 +05:30
Manav Rathi
ca0af1f53a Also on standalone pages 2024-06-24 16:04:25 +05:30
ashilkn
9cb4420bbf [mob][photos] Show magic section in search tab from cached results 2024-06-24 15:43:56 +05:30
ashilkn
98c444fab9 [mob][photos] Make methods private 2024-06-24 15:43:16 +05:30
Manav Rathi
51c9094da4 Prevent layout shift 2024-06-24 15:39:03 +05:30
ashilkn
815a730d59 [mob][photos] Schedule update magic cache in 10 seconds if remote asset has changed 2024-06-24 15:29:56 +05:30
Manav Rathi
4651c6f6d1 Reactive 2024-06-24 15:29:06 +05:30
ashilkn
11666eeb33 [mob][photos] Write function that selected 4 prompts from list of prompts at random and returns them as MagicCache objects 2024-06-24 15:28:31 +05:30
Laurens Priem
18ec275d75 Clip fix unusable formats (#2270)
## Description

When a certain image format cannot be decoded, clip will store a local
empty result instead of infinitely retrying.
2024-06-24 15:22:08 +05:30
Manav Rathi
073c22ae47 Reuse 2024-06-24 15:11:55 +05:30
Manav Rathi
6926167f3d System props 2024-06-24 15:09:19 +05:30
Manav Rathi
899d1ff6a4 Custom component 2024-06-24 15:08:18 +05:30
laurenspriem
47128ab52d [mob][photos] Store local empty clip result on errors 2024-06-24 15:04:01 +05:30
Manav Rathi
21fa0ee7a7 On email verification page 2024-06-24 14:47:29 +05:30
Manav Rathi
04f4103314 Landing page 2024-06-24 13:46:56 +05:30
atyabbin
66b23d111d Dashboard improvement (#2264)
Added options for Delete Account and Update Subscription in the
dashboard, Clicking on Update Subscription option opens a popup window
for taking user input
2024-06-24 13:18:24 +05:30
Manav Rathi
eccde54afe Use same format in sidebar 2024-06-24 11:44:01 +05:30
Manav Rathi
2db166bcf7 Add a convenience function to avoid code duplication 2024-06-24 11:42:49 +05:30
Manav Rathi
e81e088b02 Also show in signup section 2024-06-24 11:36:33 +05:30
Manav Rathi
9e3a3d852e Show on login 2024-06-24 11:21:00 +05:30
Manav Rathi
f40c277aa8 Show in sidebar 2024-06-24 11:00:45 +05:30
laurenspriem
ef0396983b [mob][photos] Remove unused method 2024-06-24 10:59:57 +05:30
ashilkn
f5873d2ade [mob][photos] MagicCache model and MagicCacheService 2024-06-24 10:19:36 +05:30
ashilkn
adb358ba5c [mob][photos] Write function in RemoteAssetService that returns the asset when given a remote path if it's different from the existing local copy of asset. Else return null 2024-06-24 10:11:18 +05:30
Manav Rathi
ea4da2c2a4 Fin 2024-06-23 20:23:19 +05:30
Manav Rathi
72de042b53 Inline 2024-06-23 20:22:28 +05:30
Manav Rathi
57a674fd26 Skip on our own prod 2024-06-23 20:17:19 +05:30
Manav Rathi
66f9dc98ee Rearrange 2024-06-23 20:12:05 +05:30
Manav Rathi
ff714f3420 Rename 2024-06-23 20:10:06 +05:30
Manav Rathi
6b4416c3a9 l10n keys 2024-06-23 20:07:18 +05:30
Manav Rathi
704e89c903 allow empty 2024-06-23 20:01:54 +05:30
Manav Rathi
f34ecc1016 Fix imports - This + preceding commits fix SSR 2024-06-23 19:59:53 +05:30
Manav Rathi
4c1462e18a Remove unused 2024-06-23 19:52:55 +05:30
Manav Rathi
bcbf03fa51 Move 2024-06-23 19:52:01 +05:30
Manav Rathi
2436d2fcaa Move 2024-06-23 19:32:59 +05:30
Manav Rathi
6cf942ec9e Also handle arbitrary validation errors 2024-06-23 19:18:22 +05:30
Manav Rathi
fcffd688d6 Deal with worker urls 2024-06-23 19:15:07 +05:30
Manav Rathi
669ae855f1 Prevent layout shift 2024-06-23 18:54:58 +05:30
Manav Rathi
3b3c802aa4 Validate URLs 2024-06-23 18:24:11 +05:30
Manav Rathi
86538a6d23 Connect 2024-06-23 17:23:07 +05:30
Manav Rathi
815666bbe7 Assert a pong 2024-06-23 17:17:39 +05:30
Manav Rathi
5a52d79a88 Uncomplicate
There are many things the form can do better, but going against the grain of the
libraries we're using is resulting in a more broken interaction (e.g. keyboard
nav).
2024-06-23 17:03:14 +05:30
Manav Rathi
ec2d9a80fc Compare to actual state 2024-06-23 16:50:30 +05:30
Manav Rathi
65764fa982 Conditional 2024-06-23 16:07:21 +05:30
Manav Rathi
9579e30a68 Conditional 2024-06-23 15:55:32 +05:30
Manav Rathi
37b5b69955 Trailing button 2024-06-23 15:43:37 +05:30
Neeraj Gupta
ead9ed0904 [photos] Fix minor errors + remove noise from sentry (#2265)
## Description

## Tests
2024-06-23 13:14:49 +05:30
Neeraj Gupta
b2f13c4b3d [photos] Fix late init error 2024-06-23 13:12:13 +05:30
Neeraj Gupta
a3ce66b87f [photos] Bump version 2024-06-23 13:11:16 +05:30
Neeraj Gupta
f30d1fe45f [photos] Skip sending handled error to sentry 2024-06-23 13:10:49 +05:30
Neeraj Gupta
f8d1851311 [mob] Fix range error in getUploadedFiles 2024-06-23 12:24:44 +05:30
atyabbin
206e387834 Modified calender for date picking 2024-06-23 11:37:20 +05:30
atyabbin
567dfb7e6b Added options for delete account and update subscription 2024-06-23 11:13:59 +05:30
Neeraj Gupta
279bdc1e66 [cli] Add admin cmd to disable passkey (#2250)
## Description

## Tests
2024-06-23 10:38:24 +05:30
Neeraj Gupta
169e70cc0f [cli] Bump version cli-v0.1.17 2024-06-23 10:38:00 +05:30
Neeraj Gupta
f108ee2bff [FIX(auth)] also move the pacman build to artifacts (#2259)
## Description

## Tests
2024-06-23 09:51:25 +05:30
Manav Rathi
e390d73af4 [server] Reduce DB healthcheck interval in starter Docker compose template (#2263)
The museum container depends on the postgres container being up and the
DB being ready to accept connections. To enforce this dependency, we use
the healthcheck attribute.

See: https://docs.docker.com/compose/startup-order/

The value of the healthcheck interval was set to 1s since the default
(30s) caused each `docker compose up` to require at least 30 seconds on
each startup, which was prohibitive. The downside is that the
healthchecks continue to run beyond the startup phase too, and for small
VMs, this caused a lot of unnecessary CPU usage.

Thankfully, now Docker has a new option for a different healthcheck
during the start phase:

> start interval is the time between health checks during the start
period. This
  option requires Docker Engine version 25.0 or later.

They were added in Docker compose 2.20.2, released an year ago
(2023-07-19).

https://docs.docker.com/compose/release-notes/#2202
2024-06-23 09:32:30 +05:30
Manav Rathi
0f1d45587e [server] Reduce DB healthcheck interval in starter Docker compose template
The museum container depends on the postgres container being up and the DB being
ready to accept connections. To enforce this dependency, we use the healthcheck
attribute.

See: https://docs.docker.com/compose/startup-order/

The value of the healthcheck interval was set to 1s since the default (30s)
caused each `docker compose up` to require at least 30 seconds on each startup,
which was prohibitive. The downside is that the healthchecks continue to run
beyond the startup phase too, and for small VMs, this caused a lot of
unnecessary CPU usage.

Thankfully, now Docker has a new option for a different healthcheck during the
start phase:

> start interval is the time between health checks during the start period. This
  option requires Docker Engine version 25.0 or later.

They were added in Docker compose 2.20.2, released an year ago (2023-07-19).

https://docs.docker.com/compose/release-notes/#2202
2024-06-23 09:22:51 +05:30
Manav Rathi
5854a9e10a document @mui/material-icons 2024-06-23 09:08:27 +05:30
Manav Rathi
94cd1991ce autoFocus 2024-06-23 08:50:53 +05:30
Manav Rathi
46644d9d4d Save 2024-06-23 08:47:53 +05:30
Manav Rathi
93dec0a9f4 Tweaks 2024-06-23 08:47:53 +05:30
Manav Rathi
c79507a5d4 use 2024-06-23 08:47:53 +05:30
Manav Rathi
a170acb28b ut 2024-06-23 08:47:53 +05:30
Manav Rathi
7a2f08f49a ex 2024-06-23 08:47:53 +05:30
Manav Rathi
6ea003a9a1 Styling 2024-06-23 08:47:53 +05:30
Manav Rathi
c54c4022ad Errors 2024-06-23 08:47:53 +05:30
Manav Rathi
445af59829 Form 2024-06-23 08:47:53 +05:30
Manav Rathi
7f573f2181 Doc and roll 2024-06-23 08:47:53 +05:30
Manav Rathi
a9dc8da07c Update formik and move it to @/new
Read throught the release notes, saw only backwards compatible minor and patch changes.

https://github.com/jaredpalmer/formik/releases
2024-06-23 08:47:53 +05:30
Manav Rathi
c2d2612f33 Simplify 2024-06-23 08:47:53 +05:30
Manav Rathi
3aa3fbba6d Close on esc but not backdrop clicks 2024-06-23 08:47:53 +05:30
Manav Rathi
35c8970d20 Ignore button taps 2024-06-23 08:47:53 +05:30
Manav Rathi
0f076e19be Reset 2024-06-23 08:47:53 +05:30
Manav Rathi
306430d67d Sketch 2024-06-23 08:47:53 +05:30
Manav Rathi
a28c983c06 [server] Tweak verification email (#2260)
Despite all of our efforts, gmail insists on marking our verification
emails to new users as spam. We have already changed our mail delivery
providers; non-gmail users don't face this problem; and even for gmail,
(a) existing Ente users also get these mails correctly with
SPF/DKIM/DMARC PASS, and (b)non-verification emails get delivered (in
the anecdotal reports we've received).

As an attempt at some voodoo, try changing the subject and content of
the mail, to try and rule out some faulty gmail classifier that uses the
email body.

**Tested**

- [x] Locally, by changing SendTemplatedEmail to log only
2024-06-23 00:13:00 +05:30
Manav Rathi
53140de879 [server] Tweak verification email
Despite all of our efforts, gmail insists on marking our verification emails to
new users as spam. We have already changed our mail delivery providers;
non-gmail users don't face this problem; and even for gmail, (a) existing Ente
users also get these mails correctly with SPF/DKIM/DMARC PASS, and (b)
non-verification emails get delivered (in the anecdotal reports we've received).

As an attempt at some voodoo, try changing the subject and content of the mail,
to try and rule out some faulty gmail classifier that uses the email body.
2024-06-23 00:07:31 +05:30
Prateek Sunal
3c5ea83f8a fix: pacman scripts 2024-06-23 00:01:17 +05:30
Neeraj Gupta
fccf7e3149 [cli] Update docs 2024-06-22 20:48:35 +05:30
Neeraj Gupta
4042a5876e [cli] improve log 2024-06-22 20:48:02 +05:30
laurenspriem
716f5f1be2 [mob][photos] Cleanup face DB 2024-06-22 18:38:10 +05:30
laurenspriem
a0d8dd9b9e [mob][photos] Cleanup face models 2024-06-22 18:30:55 +05:30
laurenspriem
897245d6c1 [mob][photos] Cleanup alignment 2024-06-22 18:23:53 +05:30
laurenspriem
99e4d098e3 [mob][photos] Cleanup detection 2024-06-22 18:20:53 +05:30
laurenspriem
b276344f1e [mob][photos] Cleanup face result 2024-06-22 18:17:38 +05:30
Neeraj Gupta
e77ebef801 [cli] Add admin cmd to disable passkey 2024-06-22 17:54:06 +05:30
laurenspriem
87e2a32d49 [mob][photos] Remove old mlVersions 2024-06-22 13:54:42 +05:30
laurenspriem
af11ff21f4 [mob][photos] Cleanup exceptions 2024-06-22 13:02:23 +05:30
laurenspriem
aab7e39ab3 [mob][photos] Cleanup feedback 2024-06-22 12:53:35 +05:30
laurenspriem
7c535adff1 [mob][photos] Make blur detection static method 2024-06-22 00:36:07 +05:30
laurenspriem
c8effce8fc [mob][photos] More cleanup 2024-06-22 00:33:26 +05:30
laurenspriem
2855181de9 [mob][photos] Cleanup face embedding service 2024-06-22 00:31:56 +05:30
laurenspriem
25515c4403 [mob][photos] Cleanup detections 2024-06-22 00:27:38 +05:30
Aman Raj Singh Mourya
3fe0faff6a [mob][photos] Implement hashing and salting for storing custom PIN/password in secure storage 2024-06-21 18:03:39 +05:30
Aman Raj Singh Mourya
fc7e7f4c88 [mob][photos] resolved PR comments 2024-06-20 12:57:14 +05:30
Aman Raj Singh Mourya
39d232a937 [mob][photos] landscape mode keyboard configured 2024-06-19 18:26:36 +05:30
laurenspriem
950d6a9622 [mob][photos] Rename 2024-06-19 18:11:01 +05:30
laurenspriem
e2da01dd5b [mob][photos] Simplify SimilarityTransform 2024-06-19 18:06:24 +05:30
laurenspriem
6954c960d8 [mob][photos] Remove redundant clustering code 2024-06-19 17:46:25 +05:30
laurenspriem
0c790e64f8 [mob][photos] Rename arcface 2024-06-19 17:43:22 +05:30
Aman Raj Singh Mourya
1d9f4e27c7 [mob][photos] changes to the Pinput container 2024-06-18 18:59:01 +05:30
laurenspriem
848f3a0f6b [mob][photos] Cleanup image utils 2024-06-18 18:17:40 +05:30
laurenspriem
7edfc15b67 [mob][photos] Cleanup ImageMlIsolate 2024-06-18 17:56:20 +05:30
laurenspriem
e3e6e8e244 [mob][photos] Cleanup FaceEmbeddingService 2024-06-18 17:35:38 +05:30
laurenspriem
089d1a2389 [mob][photos] Cleanup face detection service 2024-06-18 17:11:08 +05:30
Aman Raj Singh Mourya
aeb3e2be24 [mob][photos] implemeted custom keyboard 2024-06-18 13:37:32 +05:30
Aman Raj Singh Mourya
89e7cfb357 [mob][photos] Add Animation to the lock icon & errorBorder on wrong password 2024-06-15 15:17:28 +05:30
Ashil
4e7b575c18 Error state for text input widget (#2139)
## Description

Surface error state in `TextInputWidget` if password entered is
incorrect.
2024-06-14 15:33:59 +05:30
ashilkn
c6d9b7d875 [mob][photos] Log from TextInputWidge when password is wrong 2024-06-14 15:31:05 +05:30
ashilkn
b63bd89512 [mob][photos] Show password wrong state in TextInputField 2024-06-14 15:28:53 +05:30
ashilkn
da59a29ea2 Merge branch 'main' into lockscreen_options 2024-06-14 13:58:37 +05:30
Aman Raj Singh Mourya
a135f46775 [mob][photos] Added Haptic feedback to pin/password input 2024-06-14 11:48:15 +05:30
Aman Raj Singh Mourya
b20e8a5d17 [mob][photos] upgraded Pinput pakage and Added custom password input widget 2024-06-13 01:21:06 +05:30
Aman Raj Singh Mourya
11da0704c6 [mob][photos] show lock when app starts & authenticate to change lock settings 2024-06-11 18:17:25 +05:30
Aman Raj Singh Mourya
d3c7ba6874 [mob][photos] added the dynamicFAV and made seprate function for each type of lock 2024-06-10 18:06:24 +05:30
Aman Raj Singh Mourya
d94fe56318 [mob][photos] update the UI acc. to the new figma design 2024-06-10 15:19:09 +05:30
Aman Raj Singh Mourya
53b1dc9b67 [mob][photos] function of the lockscreen completed 2024-06-09 00:41:32 +05:30
Aman Raj Singh Mourya
d2b6ca53f8 Merge branch 'main' of https://github.com/ente-io/ente into lockscreen_options 2024-06-08 13:14:27 +05:30
Prateek Sunal
d694f2796b chore(mobile): move models to ffmpeg folder 2024-06-08 01:48:36 +05:30
Prateek Sunal
5dd42b5a07 chore(mobile): import dart typed_dart instead of flutter foundation 2024-06-08 01:46:03 +05:30
Prateek Sunal
cd8709be9d chore(mobile): import dart async for StreamSubscription 2024-06-08 01:45:04 +05:30
Prateek Sunal
4a9c09e896 fix(mobile): revert intl_en.arb change (again) 2024-06-08 01:44:06 +05:30
Prateek Sunal
6de7b840ae fix(mobile): revert intl_en.arb change (again) 2024-06-08 01:43:43 +05:30
Prateek Sunal
f34d2afced fix(mobile): revert intl_en.arb change 2024-06-08 01:42:54 +05:30
Prateek Sunal
d41a8d7a11 fix(mobile): revert intl_en.arb change 2024-06-08 01:42:13 +05:30
Prateek Sunal
ed9cb9668c Merge branch 'mobile-videoeditor' into mobile-ffprobe 2024-06-08 01:23:05 +05:30
Prateek Sunal
f8fa6adad8 Merge branch 'mobile-videoeditor' into mobile-ffprobe 2024-06-08 01:19:02 +05:30
Prateek Sunal
c1acc3eca1 fix(mobile): add ffprobe parser 2024-06-08 01:14:54 +05:30
Aman Raj Singh Mourya
1cd0440453 [mob][photos] added logic of Pin and Password screen 2024-06-07 01:57:59 +05:30
Aman Raj Singh Mourya
356d119fb9 [mob][photos] password screen added 2024-06-06 00:37:19 +05:30
Aman Raj Singh Mourya
5b89ef972f lock option screen added 2024-06-05 02:27:55 +05:30
991 changed files with 54629 additions and 23421 deletions

View File

@@ -2,8 +2,9 @@ name: "Sync Crowdin translations (auth)"
on:
schedule:
# Run Mondays at ~6:30 AM IST
# See: [Note: Run workflow on specific days of the week]
- cron: "50 1 * * 2"
- cron: "50 0 * * 1"
# Also allow manually running the workflow.
workflow_dispatch:

View File

@@ -2,8 +2,9 @@ name: "Sync Crowdin translations (mobile)"
on:
schedule:
# Run Mondays at ~6:30 AM IST
# See: [Note: Run workflow on specific days of the week]
- cron: "40 1 * * 2"
- cron: "40 0 * * 1"
# Also allow manually running the workflow.
workflow_dispatch:

View File

@@ -21,7 +21,8 @@ jobs:
- name: Setup go
uses: actions/setup-go@v5
with:
go-version-file: "server/go.mod"
go-version-file: server/go.mod
cache-dependency-path: server/go.sum
cache: true
- name: Install dependencies

View File

@@ -5,10 +5,12 @@ on:
branches: [main]
paths:
# Run workflow when web's en-US/translation.json is changed
- "web/packages/next/locales/en-US/translation.json"
- "web/packages/base/locales/en-US/translation.json"
# Or the workflow itself is changed
- ".github/workflows/web-crowdin.yml"
schedule:
# Run Mondays at ~6:00 AM IST
#
# [Note: Run workflow on specific days of the week]
#
# The last (5th) component of the cron syntax denotes the day of the
@@ -16,7 +18,7 @@ on:
# and FRI, this can be set to `2,5`.
#
# See also: [Note: Run workflow every 24 hours]
- cron: "20 1 * * 2"
- cron: "20 0 * * 1"
# Also allow manually running the workflow.
workflow_dispatch:

View File

@@ -35,8 +35,8 @@ platform. Private sharing. Collaborative albums. Family plans. Easy import,
easier export. Background uploads. The list goes on. And of course, all of this,
while being fully end-to-end encrypted.
Ente Photos is a paid service, but we offer a free trial. You can also clone
this repository and choose to self host.
Ente Photos is a paid service, but we offer 5GB of free storage.
You can also clone this repository and choose to self-host.
<br />
@@ -99,7 +99,7 @@ connect with the community.
[![Discord](https://img.shields.io/discord/948937918347608085?style=for-the-badge&logo=Discord&logoColor=white&label=Discord)](https://discord.gg/z2YVKkycX3)
[![Ente's Blog RSS](https://img.shields.io/badge/blog-rss-F88900?style=for-the-badge&logo=rss&logoColor=white)](https://ente.io/blog/rss.xml)
[![Twitter](.github/assets/twitter.svg)](https://twitter.com/enteio) &nbsp; [![Mastodon](.github/assets/mastodon.svg)](https://mstdn.social/@ente)
[![Twitter](.github/assets/twitter.svg)](https://twitter.com/enteio) &nbsp; [![Mastodon](.github/assets/mastodon.svg)](https://fosstodon.org/@ente)
---

View File

@@ -1,7 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application android:name="${applicationName}"
android:label="Auth"
android:label="Ente Auth"
android:icon="@mipmap/launcher_icon"
android:usesCleartextTraffic="true"
android:requestLegacyExternalStorage="true"

View File

@@ -36,5 +36,5 @@ file, that adheres to the above format.
SUPPORT
If you need help, please reach out to support@ente.io, and a human will get in touch with you.
If you need help, please visit @ https://github.com/ente-io/ente/discussions/new?category=q-a, and someone will get in touch with you.
If you have feature requests, please create an issue @ https://github.com/ente-io/ente

View File

@@ -1,5 +1,7 @@
{
"icons": [
{ "title": "1xBet"
},
{
"title": "3Commas"
},
@@ -10,6 +12,10 @@
{
"title": "Airtable"
},
{
"title": "airtm",
"hex": "000000"
},
{
"title": "Anycoin Direct",
"slug": "anycoindirect"
@@ -20,9 +26,23 @@
{
"title": "Bitfinex"
},
{
"title": "bitget"
},
{
"titile":"bitget wallet",
"slug":"bitget_wallet"
},
{
"title": "Bitmart",
"hex":"000000"
},
{
"title": "BitMEX"
},
{
"title": "BitOasis"
},
{
"title": "BitSkins"
},
@@ -43,6 +63,15 @@
"Bloom Host Billing"
]
},
{
"title": "Blockchain",
"altNames": [
"blockchain.com",
"blockchain.com Wallet",
"blockchain.com Exchange"
],
"slug": "blockchain"
},
{
"title": "BorgBase",
"altNames": [
@@ -50,9 +79,21 @@
],
"slug": "BorgBase"
},
{
"title": "Booking",
"slug": "booking",
"altNames":[
"Booking.com"
]
},
{
"title": "Brave Creators",
"slug": "brave_creators"
"slug": "brave_creators",
"altNames":[
"Brave",
"Brave Rewards",
"Brave Browser"
]
},
{
"title": "Bybit"
@@ -92,6 +133,15 @@
{
"title": "Crowdpear"
},
{
"title": "Crypto.com",
"slug": "crypto",
"altNames": [
"crypto",
"Crypto.com",
"Crypto com"
]
},
{
"title": "DCS",
"altNames": [
@@ -102,6 +152,9 @@
{
"title": "DEGIRO"
},
{
"title": "deriv"
},
{
"title": "DirectAdmin"
},
@@ -118,10 +171,18 @@
"title": "dus.net",
"slug": "dusnet"
},
{
"title":"ecitizen kenya",
"slug":"ecitizen_kenya"
},
{
"title": "ente",
"hex": "1DB954"
},
{
"title": "enom"
},
{
"title": "Epic Games",
"slug": "epic_games",
@@ -143,7 +204,7 @@
},
{
"title": "GitHub",
"hex": "858585"
"hex": "000000"
},
{
"title": "GitLab"
@@ -171,13 +232,24 @@
{
"title": "Hivelocity"
},
{
"title": "HTX"
},
{
"title": "IceDrive",
"slug": "Icedrive"
},
{
"titile": "Infomaniak",
"slug": "infomaniak"
},
{
"title": "ING"
},
{
"title": "Instant Gaming",
"slug": "instant_gaming"
},
{
"title": "Instagram"
},
@@ -185,8 +257,9 @@
"title": "INWX"
},
{
"title": "Itch.io",
"slug": "itch_io"
"title": "Itch",
"slug": "itch_io",
"hex": "e7685e"
},
{
"title": "IVPN",
@@ -273,6 +346,13 @@
{
"title": "Mintos"
},
{
"title": "Mistral",
"altNames": [
"Mistral AI",
"MistralAI"
]
},
{
"title": "Mozilla"
},
@@ -317,6 +397,16 @@
{
"title": "Odido"
},
{
"titile": "OpenObserve",
"slug": "open_observe",
"altNames":[
"openobserve.ai",
"openobserve ai"
]
},
{ "title": "okx",
"hex": "000000" },
{
"title": "Parsec"
},
@@ -419,6 +509,18 @@
{
"title": "Skinport"
},
{
"title": "SMSPool",
"slug": "sms_pool_net",
"altNames": [
"smspool.net",
"smspool net"
]
},
{
"title": "SMTP2GO",
"slug": "smtp2go"
},
{
"title": "Snapchat"
},
@@ -446,6 +548,13 @@
"Techlore Forums"
]
},
{
"title": "Teleport",
"altNames": [
"Gravitational Teleport",
"GoTeleport"
]
},
{
"title": "Termius",
"hex": "858585"
@@ -498,6 +607,10 @@
"slug": "uphold",
"hex": "6FE68A"
},
{
"titile": "Vikunja",
"slug": "vikunja"
},
{
"title": "WHMCS"
},
@@ -534,6 +647,8 @@
],
"slug": "Yandex"
},
{ "title": "yahoo" },
{
"title": "YNAB",
"altNames": [
@@ -541,6 +656,15 @@
],
"slug": "ynab",
"hex": "3B5EDA"
},
{
"title": "Shakepay",
"slug": "shakepay"
},
{
"title": "Newton",
"altNames": ["Newton Crypto"],
"slug": "newton"
}
]
}
}

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="5.9 24.02 400 231.77"><path d="M324.87 255.78h57.56l-83.04-125.82L405.9 24.02h-94.98L99.24 236.59 138.2 24.02H86.1L6.28 76.43l-.38 59.88 48.23-22.93-6.64 19.66c-7.37 40.91-14.91 81.82-22.1 122.75l154.9-.21 64.16-68.37 26.3 39.91c13.83 18.25 28.08 26.4 54.12 28.66m-125.11-144.9-55.92-86.86h63.89c17.79 1.74 35.7 8.06 47.3 22.88l3.69 5.25z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#12326e"></path></svg>

After

Width:  |  Height:  |  Size: 481 B

View File

@@ -0,0 +1,10 @@
<?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 24 24" 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;">
<g transform="matrix(0.179104,0,0,0.179104,0,9.49254)">
<path d="M73.245,0C80.736,0 86.81,6.269 86.81,14.001C86.81,21.733 80.736,28 73.245,28C65.754,28 59.68,21.733 59.68,14.001C59.68,6.269 65.754,0 73.245,0ZM73.245,21.646C77.043,21.646 80.21,18.222 80.21,14.001C80.21,9.779 77.043,6.356 73.245,6.356C69.447,6.356 66.28,9.779 66.28,14.001C66.28,18.222 69.447,21.646 73.245,21.646ZM123.068,0C129.157,0 133.186,5.123 133.186,13.632L133.186,26.895C133.186,27.099 133.021,27.264 132.818,27.264L127.162,27.264C126.959,27.264 126.796,27.099 126.796,26.895L126.796,13.632C126.796,9.544 125.156,6.447 121.471,6.447C118.066,6.447 115.586,9.981 115.586,15.29L115.586,26.895C115.586,27.099 115.423,27.264 115.221,27.264L109.354,27.264C109.153,27.264 108.989,27.099 108.989,26.895L108.989,13.632C108.989,9.544 107.295,6.447 103.49,6.447C100.089,6.447 97.61,9.369 97.449,14.731L97.449,26.895C97.449,27.099 97.285,27.264 97.082,27.264L91.217,27.264C91.015,27.264 90.85,27.099 90.85,26.895L90.85,1.131C90.85,0.927 91.015,0.762 91.217,0.762L96.928,0.762C97.119,0.762 97.279,0.908 97.294,1.1L97.449,2.967C99.402,1.146 101.961,0 105.139,0C108.833,0 111.79,1.77 113.604,4.952C115.586,1.989 118.682,0 123.068,0ZM45.017,0C51.305,0 55.649,5.123 55.649,13.632L55.649,26.895C55.649,27.099 55.484,27.264 55.282,27.264L49.415,27.264C49.214,27.264 49.049,27.099 49.049,26.895L49.049,13.632C49.049,9.544 47.173,6.447 43.368,6.447C39.963,6.447 37.135,9.378 36.96,14.757L36.96,26.895C36.96,27.099 36.795,27.264 36.593,27.264L30.728,27.264C30.525,27.264 30.361,27.099 30.361,26.895L30.361,1.131C30.361,0.927 30.525,0.762 30.728,0.762L36.437,0.762C36.628,0.762 36.788,0.911 36.803,1.103L36.96,3.198C39.012,1.244 41.706,0 45.017,0Z" style="fill:rgb(73,72,77);"/>
</g>
<g transform="matrix(0.179104,0,0,0.179104,0,9.49254)">
<path d="M20.839,19.015C20.692,18.893 20.475,18.904 20.343,19.044C18.914,20.561 16.549,21.737 13.931,21.737C12.409,21.737 10.811,21.341 9.727,20.497L26.082,8.544C26.223,8.442 26.273,8.255 26.201,8.096C25.081,5.635 21.335,0 13.931,0C6.237,0 0,6.267 0,13.999C0,21.655 6.237,28 13.931,28C18.277,28 22.676,26.073 25.218,23.135C25.351,22.981 25.328,22.745 25.171,22.615L20.839,19.015ZM13.931,6.263C15.451,6.263 16.982,6.635 18.073,7.56L6.478,16.025C5.159,11.239 9.116,6.263 13.931,6.263Z" style="fill:rgb(255,64,8);"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-738.2 149.1 435.4 102.8" xml:space="preserve"><path d="M-612.2 149.1h-18.4v99.6h18.4zm-104.1 79 25.4-55 14 30.2zm79.3 20.7-17.9-38.7 17.4-11-8.9-15-15.9 10-17.4-37.6c-1.1-2.3-2.7-4.2-4.7-5.5s-4.4-2-6.7-1.9c-2.4.1-4.7.9-6.6 2.3s-3.4 3.3-4.3 5.5l-34.9 75.5-.1.2c-2.3 5.7-.8 12.2 3.8 16.2 4.5 3.9 10.8 4.2 15.6.9l48.2-30.3 13.7 29.5zm54.3-53.1h27.3c14.1 0 18.8-7.7 18.8-16.4s-4.7-15.9-18.7-15.9h-27.4zm30.9-46.6c26.2 0 34.6 14.6 34.6 30 0 11.6-5.8 23.7-21.5 27.9l24.7 41.7h-20.8l-23-39.1h-24.9v39.1H-601v-99.6zm40.1 15.4h35v84.2h18.4v-84.2h35v-15.4h-88.4zm123.9-15.4H-415v99.6h16.6v-72.1c0-4.5-.3-8.6-.7-12.1h.5c.5 2.7 1.9 7.9 3.2 11.6l27.3 72.5h17.3l27.3-72.5c1.5-3.8 3.1-9.4 3.5-11.6h.5c-.4 3.6-.7 8-.7 12.1v72.1h17.2v-99.6h-27.4l-25.8 69.5c-1.5 4.2-2.3 6.7-2.8 10.1h-.3c-.5-3-1.2-5.2-2.3-8.7-.1-.4-.3-.9-.4-1.4z" style="fill:#050505"/></svg>

After

Width:  |  Height:  |  Size: 892 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="40" height="40" rx="8.711" fill="#00f0ff"/><path d="M18.46 15.767h7.468l7.64 7.592c.498.493.5 1.297.006 1.793L23.775 35h-7.693l2.326-2.261 8.54-8.486-8.432-8.487" fill="#1b1b1b"/><path d="M21.53 24.234h-7.47l-7.64-7.592a1.267 1.267 0 0 1-.005-1.793L16.214 5h7.693l-2.326 2.261-8.54 8.486 8.432 8.487" fill="#1b1b1b"/></svg>

After

Width:  |  Height:  |  Size: 410 B

View File

@@ -0,0 +1 @@
<svg width="96" height="96" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><rect width="36" height="36" rx="18" fill="#54FFF5"/><g filter="url(#b)"><path d="M1.896 27.928c-6.02 16.936 26.181 12.153 43.035 7.644 17.248-5.724 5.326-30.957-7.045-31.515-12.37-.559 1.534 11.667-8.974 15.16-10.509 3.491-19.491-12.46-27.016 8.71" fill="#fff"/></g><g filter="url(#c)"><path d="M12.025-6.445C8.867-15.073-2.379-3.375-7.608 3.552-12.595 11.087.423 17.598 5.53 14.067c5.107-3.532-4.436-4.22-1.399-8.812s11.842-.915 7.895-11.7" fill="#00FFF0" fill-opacity=".67"/></g><g filter="url(#d)"><path d="M13.568 31.7c-4.308-14.494-22.86-6.861-31.599-1.234C-26.436 37.13-6.479 56.298 1.81 55.317c8.29-.98-6.65-9.324-1.53-13.388 5.118-4.063 18.672 7.886 13.288-10.23" fill="#9D81FF"/></g><g filter="url(#e)"><path d="M39.673-15.098c-9.291-11.064-22.592-1.915-28.081 4.042C6.788-4.31 31.539 8.046 38.408 5.928s-9.367-6.5-6.444-10.611c2.922-4.112 19.324 3.415 7.71-10.415" fill="#4D94FF"/></g><path fill-rule="evenodd" clip-rule="evenodd" d="M13.105 21.493h6.115l-6.956-7.001 7.045-7.001 1.92-1.866H14.88L6.797 13.75a1.045 1.045 0 0 0 .004 1.48zm3.676-6.985h-.047zm0 0 6.955 7-7.045 7.001-1.92 1.866h6.348l8.084-8.124a1.045 1.045 0 0 0-.004-1.48l-6.304-6.263z" fill="#000"/></g><defs><filter id="b" x="-12.69" y="-9.807" width="80.094" height="63.481" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur stdDeviation="6.923" result="effect1_foregroundBlur_2029_330"/></filter><filter id="c" x="-22.572" y="-23.342" width="49.443" height="52.243" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur stdDeviation="6.923" result="effect1_foregroundBlur_2029_330"/></filter><filter id="d" x="-33.901" y="9.511" width="62.557" height="59.688" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur stdDeviation="6.923" result="effect1_foregroundBlur_2029_330"/></filter><filter id="e" x="-2.868" y="-34.139" width="60.496" height="54.155" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur stdDeviation="6.923" result="effect1_foregroundBlur_2029_330"/></filter><clipPath id="a"><rect width="36" height="36" rx="18" fill="#fff"/></clipPath></defs></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" class="logo" viewBox="0 0 500 500">
<g fill="#fff">
<path d="M307.382 358.988H153.698v13.428h153.684v-13.428zm-115.22 83.526H76.885v13.43h115.277v-13.43zm-76.984-83.468h-76.7v13.428h76.7v-13.428zm192.204-38.864H192.105v13.428h115.277v-13.428zm-153.797 0H76.942v13.428h76.643v-13.428zM307.38 146.585H115.236v13.428H307.38v-13.428zm-153.795-44.664h-76.7v13.428h76.7v-13.428z"/>
<path d="M409.287 231.022v-.34A153.91 153.91 0 0 0 276.144.3h-160.91v19.232H276.6a134.58 134.58 0 0 1 106.653 53.207 134.574 134.574 0 0 1 22.564 117.033 117.661 117.661 0 0 0-63.274-132.566A117.668 117.668 0 0 0 291.45 45.42H153.7v19.232h137.92a98.265 98.265 0 0 1 93.597 128.078 76.986 76.986 0 0 0-13.255-66.509 76.985 76.985 0 0 0-60.713-30.218H191.764v19.402H310.68a57.81 57.81 0 0 1 50.186 86.316 154.248 154.248 0 0 0-53.714-9.673H153.528v19.23h153.625a134.624 134.624 0 0 1 132.234 109.474 115.392 115.392 0 0 0-112.32-89.559H115.179v19.062h212.175a96.05 96.05 0 0 1 62.678 23.55 96.055 96.055 0 0 1 32.058 58.781 76.87 76.87 0 0 0-75.505-62.986H115.292v19.233h231.236a57.637 57.637 0 1 1 0 115.276H76.885v19.232h269.7a76.872 76.872 0 0 0 75.504-62.988 96.047 96.047 0 0 1-95.021 82.163H230.34v19.23h96.727a115.44 115.44 0 0 0 110.838-83.697A134.673 134.673 0 0 1 307.44 480.466H115.463V499.7h191.69a153.629 153.629 0 0 0 149.901-190.401 153.642 153.642 0 0 0-47.482-78.388l-.285.112z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" clip-rule="evenodd" viewBox="0 0 30 30">
<path fill="#03ceaa" d="M10.898 0v5.108L7.367 1.575l-.08-.079-.079.079-5.633 5.636-.08.08.08.079 3.531 3.533H0v8.195h5.106L1.575 22.63l-.08.079.08.08 5.633 5.636.079.079.08-.079 3.531-3.533V30h8.19v-5.108l3.531 3.533.08.079.079-.079 5.633-5.636.08-.08-.08-.079-3.531-3.532h5.106v-8.195H24.88l3.531-3.533.08-.079-.08-.08-5.633-5.636-.079-.079-.08.079-3.531 3.533V0h-8.19Zm1.651 6.543h4.888V1.652h-4.888v4.891Zm6.693.748 3.457-3.458 3.456 3.458-3.456 3.458-3.457-3.458Zm-15.411 0 3.456-3.458 3.457 3.458-3.457 3.458-3.456-3.458Zm4.36 10.528v-5.638l3.985-3.986h5.635l3.984 3.986v5.638l-3.984 3.986h-5.635l-3.985-3.986Zm15.256-.374h4.888v-4.89h-4.888v4.89Zm-21.796 0H6.54v-4.89H1.651v4.89Zm17.591 5.264 3.457-3.458 3.456 3.458-3.456 3.459-3.457-3.459Zm-15.411 0 3.456-3.458 3.457 3.458-3.457 3.459-3.456-3.459Zm8.718 5.639h4.888v-4.89h-4.888v4.89Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" clip-rule="evenodd" viewBox="0 0 24 24">
<path fill="#3d89f5" d="M2.053 8.723.958 9.818a3.12 3.12 0 0 0 0 4.5l8.82 8.91c.21.213.453.39.72.524V12.953l-8.445-4.23Z"/>
<path fill="#1656b9" d="m21.946 8.723 1.095 1.095a3.12 3.12 0 0 1 0 4.5l-8.822 8.91c-.21.213-.452.39-.72.524V12.953l8.447-4.23Z"/>
<path fill="#85b5f8" d="M19.827 6.488 14.307.953a3.133 3.133 0 0 0-4.5 0L4.272 6.488l7.755 3.87 7.8-3.87Z"/>
</svg>

After

Width:  |  Height:  |  Size: 545 B

View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" clip-rule="evenodd" viewBox="0 0 192 193">
<path fill="#003b95" fill-rule="nonzero" d="M37.8 0h116.5C175.1 0 192 16.9 192 37.8v116.5c0 20.9-16.9 37.8-37.8 37.8H37.8C16.9 192 0 175.1 0 154.2V37.8C0 16.9 16.9 0 37.8 0Z"/>
<path fill="#fff" fill-rule="nonzero" d="M144.2 143.8c6.7 0 12.1-5.5 12.1-12.2 0-6.7-5.4-12.2-12.1-12.2-6.7 0-12.1 5.4-12.1 12.2 0 6.7 5.5 12.2 12.1 12.2ZM106.7 91.9l-3.1-1.7 2.7-2.3c3.2-2.7 8.4-8.8 8.4-19.3 0-16.1-12.5-26.5-31.8-26.5H58.4c-5.7.2-10.3 4.9-10.4 10.6V144h35.4c21.5 0 35.4-11.7 35.4-29.8-.1-9.8-4.6-18.1-12.1-22.3ZM67.6 66c0-4.7 2-7 6.4-7.3h8.8c7.5 0 12 4.5 12 12.1 0 5.8-3.1 12.4-11.8 12.4H67.6V66Zm17.2 60.7H67.6v-20.5c0-4.4 1.7-6.7 5.5-7.2h11.7c8.4 0 13.8 5.3 13.8 13.8 0 8.8-5.3 13.9-13.8 13.9Z"/>
</svg>

After

Width:  |  Height:  |  Size: 874 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 500 500">
<path fill="#182954" d="m75.705 269.386 12.606 10.812a40.902 40.902 0 0 1-8.642 8.853 53.365 53.365 0 0 1-13.599 7.73 45.769 45.769 0 0 1-16.998 3.094 49.02 49.02 0 0 1-25.212-6.466A45.84 45.84 0 0 1 6.72 275.84a50.83 50.83 0 0 1-6.212-25.287 52.621 52.621 0 0 1 3.525-19.394 49.28 49.28 0 0 1 10.2-16.022 46.603 46.603 0 0 1 15.44-10.812 49.626 49.626 0 0 1 19.969-3.938 45.9 45.9 0 0 1 23.51 5.48A49.016 49.016 0 0 1 88.308 219.5l-12.744 11.244A39.368 39.368 0 0 0 64.938 220.2a27.358 27.358 0 0 0-15.296-3.933 27.636 27.636 0 0 0-16.147 4.632 30.695 30.695 0 0 0-10.478 12.508 38.957 38.957 0 0 0-3.688 16.879 36.724 36.724 0 0 0 3.684 16.442 29.719 29.719 0 0 0 10.184 11.793 27.208 27.208 0 0 0 15.44 4.358c4.608.197 9.203-.62 13.456-2.391a27.765 27.765 0 0 0 8.214-5.622l5.381-5.481M93.275 264.047a35.477 35.477 0 0 1 4.535-17.71 34.84 34.84 0 0 1 12.748-12.929 39.497 39.497 0 0 1 18.838-4.778 39.497 39.497 0 0 1 18.838 4.778 34.846 34.846 0 0 1 12.749 12.928 36.889 36.889 0 0 1 4.532 17.709 36.891 36.891 0 0 1-4.532 17.708 36.519 36.519 0 0 1-13.365 13.153 36.875 36.875 0 0 1-18.181 4.837 36.88 36.88 0 0 1-18.203-4.756 36.513 36.513 0 0 1-13.424-13.092 35.479 35.479 0 0 1-4.535-17.707v-.141zm35.979 21.224a16.949 16.949 0 0 0 10.623-3.23c2.804-2.121 5-4.93 6.375-8.151a24.848 24.848 0 0 0 2.124-9.698 24.293 24.293 0 0 0-2.124-9.697 20.265 20.265 0 0 0-6.375-8.15 19.056 19.056 0 0 0-10.623-3.233 19.057 19.057 0 0 0-10.625 3.233 20.118 20.118 0 0 0-6.231 8.009 24.296 24.296 0 0 0-2.125 9.697 24.713 24.713 0 0 0 2.125 9.839 19.985 19.985 0 0 0 6.374 8.15 16.949 16.949 0 0 0 10.624 3.231M168.905 202.628h16.856v17.71h-16.856v-17.71zm0 28.11h16.856v66.758h-16.856v-66.758zM192.416 297.495V230.88h16.147l.42 7.589a35.937 35.937 0 0 1 7.505-5.905 23.656 23.656 0 0 1 12.749-3.094 24.38 24.38 0 0 1 10.396 1.612 24.22 24.22 0 0 1 8.726 5.836 29.047 29.047 0 0 1 6.66 20.097v40.477H238.02v-40.335a13.257 13.257 0 0 0-.76-5.278 13.337 13.337 0 0 0-2.78-4.561 12.19 12.19 0 0 0-4.164-2.694 12.27 12.27 0 0 0-4.902-.82 14.974 14.974 0 0 0-6.377 1.24 14.87 14.87 0 0 0-5.236 3.82 18.046 18.046 0 0 0-4.534 12.51v36.118l-16.851.004z"/>
<path fill="#FA4A29" d="m463.25 246.618 29.754-44.007h-28.187l-15.44 24.596-15.883-24.596h-31.163l1.416 1.967-.993-.416a63.329 63.329 0 0 0-23.083-4.046 50.453 50.453 0 0 0-25.92 6.607 46.609 46.609 0 0 0-14.308 12.929 40.334 40.334 0 0 0-15.582-11.806 65.028 65.028 0 0 0-26.344-5.077h-36.686v94.727h36.544a64.026 64.026 0 0 0 26.344-5.202A41.612 41.612 0 0 0 339.3 280.63c3.87 5.299 8.846 9.709 14.59 12.928a51.44 51.44 0 0 0 25.777 6.325 55.023 55.023 0 0 0 24.646-5.34l-1.982 2.953h27.76l18.558-29.108 19.122 29.108h31.73l-36.252-50.878zm-147.452 21.624a25.772 25.772 0 0 1-8.902 5.504 25.916 25.916 0 0 1-10.376 1.523h-10.334v-50.573h10.338c3.62-.305 7.264.165 10.685 1.378a25.427 25.427 0 0 1 9.147 5.65 26.146 26.146 0 0 1 6.374 18.271 24.821 24.821 0 0 1-1.597 9.836 24.965 24.965 0 0 1-5.343 8.436l.008-.025zm101.549 6.911-12.04-11.228a38.572 38.572 0 0 1-10.197 9.149 27.09 27.09 0 0 1-13.6 2.952 25.509 25.509 0 0 1-13.314-3.372 22.838 22.838 0 0 1-8.8-9.415 29.459 29.459 0 0 1-3.118-13.63c-.091-4.623.929-9.2 2.975-13.353a23.258 23.258 0 0 1 8.642-9.415 25.653 25.653 0 0 1 13.738-3.513 24.798 24.798 0 0 1 12.748 3.23 32.061 32.061 0 0 1 9.639 8.733l12.606-12.508 18.415 26.28-17.694 26.09z"/>
<path fill="#182954" d="m75.006 269.464 12.657 10.855a41.066 41.066 0 0 1-8.676 8.889 53.579 53.579 0 0 1-13.654 7.76 45.952 45.952 0 0 1-17.066 3.107 49.217 49.217 0 0 1-25.313-6.492 46.023 46.023 0 0 1-17.21-17.64A51.033 51.033 0 0 1-.49 250.556a52.832 52.832 0 0 1 3.538-19.472 49.477 49.477 0 0 1 10.242-16.086 46.79 46.79 0 0 1 15.5-10.855 49.825 49.825 0 0 1 20.05-3.954 46.083 46.083 0 0 1 23.605 5.503 49.212 49.212 0 0 1 15.215 13.685l-12.795 11.29a39.526 39.526 0 0 0-10.667-10.584 27.467 27.467 0 0 0-15.358-3.95 27.747 27.747 0 0 0-16.212 4.651 30.818 30.818 0 0 0-10.52 12.559 39.113 39.113 0 0 0-3.702 16.946 36.87 36.87 0 0 0 3.699 16.508 29.838 29.838 0 0 0 10.224 11.84 27.317 27.317 0 0 0 15.501 4.376 31.64 31.64 0 0 0 13.511-2.401 27.877 27.877 0 0 0 8.247-5.644l5.403-5.503m17.656-5.362a35.619 35.619 0 0 1 4.553-17.781 34.98 34.98 0 0 1 12.8-12.98 39.655 39.655 0 0 1 18.913-4.797 39.66 39.66 0 0 1 18.913 4.797 34.985 34.985 0 0 1 12.8 12.98 37.037 37.037 0 0 1 4.55 17.779 37.04 37.04 0 0 1-4.55 17.78 36.665 36.665 0 0 1-13.418 13.205 37.023 37.023 0 0 1-18.254 4.856 37.027 37.027 0 0 1-18.276-4.774A36.659 36.659 0 0 1 97.2 282.022a35.62 35.62 0 0 1-4.553-17.777v-.142zm36.123 21.31a17.017 17.017 0 0 0 10.666-3.244 20.199 20.199 0 0 0 6.4-8.184 24.947 24.947 0 0 0 2.133-9.736 24.391 24.391 0 0 0-2.133-9.736 20.347 20.347 0 0 0-6.4-8.183 19.133 19.133 0 0 0-10.666-3.245c-3.803 0-7.518 1.13-10.667 3.245a20.2 20.2 0 0 0-6.256 8.041 24.393 24.393 0 0 0-2.134 9.736 24.812 24.812 0 0 0 2.134 9.878 20.065 20.065 0 0 0 6.4 8.184 17.017 17.017 0 0 0 10.666 3.244m39.667-82.975h16.924v17.781H168.58v-17.781zm0 28.223h16.924v67.026H168.58V230.66zm23.605 67.025v-66.884h16.212l.42 7.62a36.08 36.08 0 0 1 7.537-5.929 23.751 23.751 0 0 1 12.8-3.106c3.556-.227 7.12.326 10.438 1.618a24.317 24.317 0 0 1 8.76 5.86 29.164 29.164 0 0 1 6.687 20.177v40.64h-17.067v-40.498a13.31 13.31 0 0 0-.763-5.298 13.39 13.39 0 0 0-2.792-4.58 12.239 12.239 0 0 0-4.18-2.705 12.32 12.32 0 0 0-4.921-.823c-2.2-.058-4.388.367-6.403 1.245a14.929 14.929 0 0 0-5.257 3.836 18.118 18.118 0 0 0-4.552 12.559v36.264l-16.919.004z"/>
<path fill="#FA4A29" d="m464.104 246.605 29.874-44.184h-28.3l-15.502 24.695-15.946-24.695h-31.288l1.421 1.975-.997-.418a63.582 63.582 0 0 0-23.175-4.062 50.655 50.655 0 0 0-26.025 6.634 46.796 46.796 0 0 0-14.365 12.98 40.496 40.496 0 0 0-15.644-11.853 65.288 65.288 0 0 0-26.45-5.098h-36.833v95.107h36.691a64.283 64.283 0 0 0 26.45-5.223 41.778 41.778 0 0 0 15.643-11.71 45.958 45.958 0 0 0 14.647 12.98 51.646 51.646 0 0 0 25.882 6.35 55.244 55.244 0 0 0 24.744-5.361l-1.99 2.964h27.872l18.631-29.225 19.2 29.225H500.5l-36.396-51.081zm-148.042 21.71a25.875 25.875 0 0 1-8.938 5.526 26.02 26.02 0 0 1-10.417 1.53H286.33v-50.777h10.38a25.677 25.677 0 0 1 10.727 1.384 25.529 25.529 0 0 1 9.184 5.672 26.25 26.25 0 0 1 6.4 18.345 24.92 24.92 0 0 1-1.604 9.876 25.065 25.065 0 0 1-5.365 8.469l.009-.025zm101.955 6.939L405.93 263.98a38.727 38.727 0 0 1-10.237 9.185 27.198 27.198 0 0 1-13.654 2.965 25.611 25.611 0 0 1-13.368-3.386 22.93 22.93 0 0 1-8.836-9.453 29.577 29.577 0 0 1-3.13-13.685 29.036 29.036 0 0 1 2.987-13.406 23.352 23.352 0 0 1 8.676-9.452 25.756 25.756 0 0 1 13.793-3.528 24.898 24.898 0 0 1 12.8 3.244 32.19 32.19 0 0 1 9.677 8.767l12.657-12.558 18.488 26.386-17.765 26.194z"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="167.1 0 2165.8 2500"><path style="fill:none" d="M0 0h2500v2500H0z"></path><path d="M1250 0 167.1 625v1250L1250 2500l1082.9-625V625zm0 0L167.1 625v1250L1250 2500l1082.9-625V625z" style="fill:#fff"></path><path d="M1677.5 2011.7h-154.1L1339 1842.4v-86.8l191-182.3v-288.6l249.6-162.8 284.3 214.8zm-638-455.7 28.2-271.3-93.3-243.1h551.2l-91.2 243.1 26.1 271.3zm125.9 286.4-184.5 171.4H824.6l-388.5-677.1L722.6 1124l251.7 160.6v288.6l191 182.3zm-342.9-1302h852.9l102 434H722.7zM1250 0 167.1 625v1250L1250 2500l1082.9-625V625z" style="fill:#03316c"></path></svg>

After

Width:  |  Height:  |  Size: 628 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256"><path d="M224 8c-.619 9.67-2.292 19.13-3.972 28.658l-.922 5.291q-1.246 7.144-2.504 14.287l-1.572 8.946q-2.46 14.025-4.935 28.05a16286 16286 0 0 0-5.661 32.272 11916 11916 0 0 1-4.395 25.025q-1.319 7.454-2.615 14.912a3013 3013 0 0 1-2.472 14.031q-.453 2.56-.893 5.121c-3.557 20.69-10.695 38.973-28.286 51.75-9.94 6.797-20.185 11.71-32.443 11.834l-3.38.039-3.634.022-3.779.025q-3.963.021-7.925.032-4.026.014-8.05.062c-3.895.043-7.788.059-11.683.069l-3.578.053c-17.241-.044-32.268-6.26-44.5-18.362C42.035 225.056 38.91 219.267 36 213l-1.375-2.937c-8.245-21.528-2.25-51.57 6.848-72.012C52.983 115.06 71.683 97.549 96 89c10.453-3.18 20.413-4.153 31.281-4.098l3.194.005c3.342.005 6.683.018 10.025.03l6.828.014q8.336.017 16.672.049l.456-2.765A5148 5148 0 0 1 176 15q8.805-1.505 17.615-2.99 2.994-.507 5.988-1.02 4.311-.734 8.624-1.459l2.69-.464C215.333 8.331 219.503 7.82 224 8M90.125 142.813c-8.985 10.66-11.885 24.665-11.477 38.468C79.55 188.25 82.955 194.174 88 199c7.78 5.626 15.988 5.808 25.214 5.707 2.35-.02 4.693.02 7.042.064 7.436.046 13.762-.18 19.998-4.701 5.69-6.744 6.89-14.473 8.324-22.925l.656-3.697q.679-3.85 1.34-7.703c.676-3.932 1.37-7.861 2.067-11.79l1.312-7.498.625-3.558.568-3.318.501-2.908c.342-2.593.418-5.06.353-7.673q-8.242-.112-16.486-.165-2.798-.022-5.594-.061c-17.177-.235-31.31.9-43.795 14.039" fill="#FF444F"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"><path d="M32 2C19.7 2 9.1 9.4 4.5 20h55C54.9 9.4 44.3 2 32 2" fill="#3e4347"/><path d="M32 62c12.3 0 22.9-7.4 27.5-18h-55C9.1 54.6 19.7 62 32 62" fill="#75a843"/><path d="M62 32c0-2.8-.4-5.5-1.1-8H3.1C2.4 26.5 2 29.2 2 32s.4 5.5 1.1 8h57.8c.7-2.5 1.1-5.2 1.1-8" fill="#c94747"/><g fill="#fff"><path d="M3.7 42c.2.7.5 1.3.8 2h55c.3-.7.6-1.3.8-2s.4-1.3.6-2H3.1c.2.7.4 1.3.6 2m56.6-20c-.2-.7-.5-1.3-.8-2h-55c-.3.7-.6 1.3-.8 2s-.4 1.3-.6 2h57.8c-.2-.7-.4-1.3-.6-2"/><path d="m20.2 52.3.7.4 19.3-33.4c1.1-.3 1.7-1.4 2.4-2.4.4-.7 2.1-3.6 2.8-7.3-2.9 2.5-4.5 5.3-4.9 6.1-.6 1.1-1.2 2.1-.9 3.3z"/><path d="m43.8 52.3-.7.4-19.3-33.4c-1.1-.3-1.7-1.4-2.4-2.4-.4-.7-2.1-3.6-2.8-7.3 2.9 2.5 4.5 5.3 4.9 6.1.6 1.1 1.2 2.1.9 3.3z"/></g><path d="M40 32c0 11-8 20-8 20s-8-9-8-20 8-20 8-20 8 9 8 20" fill="#c94747"/><path d="M26.1 40c1.7-1.7 2.9-4.6 2.9-8s-1.1-6.3-2.9-8c-.7 2.3-1.1 5.1-1.1 8s.4 5.7 1.1 8m11.8-16c-1.7 1.7-2.9 4.6-2.9 8s1.1 6.3 2.9 8c.7-2.3 1.1-5.1 1.1-8s-.4-5.7-1.1-8" fill="#3e4347"/><g fill="#fff"><ellipse cx="32" cy="32" rx="1.6" ry="2.4"/><path d="M31.4 12.7c-.6 1.7-1 4.9-1 8.4 0 3.6.4 6.7 1 8.4.2-2.5.4-5.3.4-8.4 0-3-.1-5.9-.4-8.4m1.2 0c.6 1.7 1 4.9 1 8.4 0 3.6-.4 6.7-1 8.4-.2-2.5-.4-5.3-.4-8.4 0-3 .1-5.9.4-8.4m-1.2 21.7c-.6 1.7-1 4.9-1 8.4 0 3.6.4 6.7 1 8.4.2-2.5.4-5.3.4-8.4 0-3-.1-5.9-.4-8.4m1.2 0c.6 1.7 1 4.9 1 8.4 0 3.6-.4 6.7-1 8.4-.2-2.5-.4-5.3-.4-8.4 0-3 .1-5.9.4-8.4"/></g></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500">
<g clip-path="url(#a)">
<path fill="#fff" d="M301.399 153.471c1.48-73.53-40.157-137.614-61.84-153.005-.098-.1-2.022-1.16-1.874 1.726 0 .05-.05.05-.05.099-2.219 138.897-73.628 176.315-112.38 227.227-86.16 113.194-14.281 242.323 78.86 266.792 1.578.395 5.895 1.677 14.06 3.355 4.266.912 5.5-2.714 2.367-8.116-11.124-19.363-30.932-52.046-34.854-94.028-8.904-97.482 113.984-158.506 115.71-244.05z"/>
<path fill="#008CD6" d="M348.339 200.56c-.74-.543-1.776-.494-1.875.444-1.973 17.66-20.25 54.315-44.325 88.577-81.005 115.513-40.207 167.904-8.51 204.262 5.846 6.734 8.756 5.23 11.84.444 2.86-4.563 7.227-10.36 25.949-19.215 2.91-1.381 73.604-38.923 81.276-124.393 7.4-82.681-45.633-134.974-64.355-150.12z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 790 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
<circle cx="512" cy="512" r="512" style="fill:#0098ff"/>
<path d="M696.8 281H475.66v225.45L545.88 427h115.5l-88.17 83.75 93.71 156.49H560.66l-49.93-96.66-35.07 33.82v62.83h-96.1V281H327.2a46.2 46.2 0 0 0-46.2 46.2v369.6a46.2 46.2 0 0 0 46.2 46.2h369.6a46.2 46.2 0 0 0 46.2-46.2V327.2a46.2 46.2 0 0 0-46.2-46.2z" style="fill:#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 557 B

View File

@@ -0,0 +1,19 @@
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M42.3044 77.0441C33.8578 77.0441 25.6439 72.6653 21.1175 64.8302C14.3699 53.1508 18.3751 38.2158 30.0626 31.4721L78.9366 3.27575C90.6254 -3.46792 105.571 0.534679 112.319 12.2141C119.066 23.8936 115.062 38.8286 103.374 45.5723L54.5009 73.7686C50.7944 75.9145 46.5873 77.0444 42.3044 77.0441Z" fill="url(#paint0_linear_154_309)"/>
<path d="M408.844 235.902L66.7177 433.284V348.692L335.121 193.755L286.49 165.698L30.0615 313.446C22.5003 317.808 17.8424 325.869 17.8424 334.593V475.58C17.8433 479.868 18.973 484.079 21.118 487.792C23.2629 491.504 26.3475 494.586 30.0615 496.728C33.7768 498.873 37.9911 500.001 42.2807 500C46.5703 500 50.7844 498.872 54.4999 496.728L469.94 257.051C477.501 252.689 482.159 244.627 482.159 235.902C482.159 227.178 477.501 219.117 469.94 214.756L348.167 144.501C347.907 144.344 347.643 144.192 347.377 144.046L225.564 73.7685C218.003 69.4069 208.689 69.4069 201.127 73.7685L30.0629 172.459C18.3741 179.203 14.3702 194.136 21.1178 205.817C25.6442 213.651 33.8581 218.031 42.3046 218.031C46.587 218.03 50.7935 216.901 54.4999 214.756L213.344 123.114L408.844 235.904V235.902Z" fill="url(#paint1_linear_154_309)"/>
<path d="M408.844 235.902L66.7177 433.284V348.692L82.1938 339.759L54.4972 299.366L30.0615 313.446C22.5003 317.808 17.8424 325.869 17.8424 334.593V475.58C17.8433 479.868 18.973 484.079 21.118 487.792C23.2629 491.504 26.3475 494.586 30.0615 496.728C33.7768 498.873 37.9911 500.001 42.2807 500C46.5703 500 50.7844 498.872 54.4999 496.728L469.94 257.051C477.501 252.689 482.159 244.627 482.159 235.902C482.159 227.178 477.501 219.117 469.94 214.756L348.167 144.501C347.907 144.344 347.643 144.192 347.377 144.046L225.564 73.7685C218.003 69.4069 208.689 69.4069 201.127 73.7685L30.0629 172.459C18.3741 179.203 14.3702 194.136 21.1178 205.817C25.6442 213.651 33.8581 218.031 42.3046 218.031C46.587 218.03 50.7935 216.901 54.4999 214.756L213.344 123.114L408.844 235.902Z" fill="url(#paint2_linear_154_309)"/>
<defs>
<linearGradient id="paint0_linear_154_309" x1="31.2204" y1="111.73" x2="108.384" y2="0.000287497" gradientUnits="userSpaceOnUse">
<stop offset="0.26" stop-color="#FF670D"/>
<stop offset="1" stop-color="#FF5317"/>
</linearGradient>
<linearGradient id="paint1_linear_154_309" x1="86.5912" y1="285.221" x2="187.325" y2="109.662" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF7207"/>
<stop offset="1" stop-color="#FF7208" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint2_linear_154_309" x1="35.1941" y1="500" x2="482.158" y2="227.227" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF8000"/>
<stop offset="1" stop-color="#FF4020"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,8 @@
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 22.72H90.9091V113.629V113.629V204.538V295.447H0V204.538V113.629V113.629V22.72ZM363.636 22.72H454.545V113.629H363.636V22.72ZM363.636 113.629L363.636 204.538H272.727V113.629L363.636 113.629ZM90.9091 295.447H0V386.357V477.266H90.9091V386.357V295.447ZM181.818 295.447H272.727V386.357H181.818V295.447ZM454.545 295.447H363.636V386.357V477.266H454.545V386.357V295.447Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M409.091 386.356H500V477.266H409.091V386.356ZM45.4551 386.356H136.364V477.266H45.4551V386.356Z" fill="#EA3326"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.4551 295.448H136.364V386.357H45.4551V295.448ZM318.182 295.448H227.273V386.357H318.182V295.448ZM500 295.448H409.091V386.357H500V295.448Z" fill="#EB5829"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.4551 204.538H136.364H136.364H227.273H318.182H409.091H500V295.447H409.091H318.182H227.273H136.364H136.364H45.4551V204.538Z" fill="#EE792F"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.4551 113.629H136.364L227.273 113.629V204.538L136.364 204.538L136.364 204.538L45.4551 204.538V113.629ZM409.091 113.629H500V204.538H409.091H318.182V113.629H409.091Z" fill="#F2A73B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.4551 22.72H136.364V113.629H45.4551V22.72ZM409.091 22.72H500V113.629H409.091V22.72Z" fill="#F7D046"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.2324 2.78628H21.214V21.2136H9.76734V8.77878C9.76734 8.05185 9.17804 7.46255 8.4511 7.46255C7.72416 7.46255 7.13486 8.05185 7.13486 8.77878V22.5298C7.13486 23.2568 7.72416 23.8461 8.4511 23.8461H22.5302C23.2572 23.8461 23.8465 23.2568 23.8465 22.5298V1.47005C23.8465 0.743108 23.2572 0.153809 22.5302 0.153809H20.2324C19.5055 0.153809 18.9162 0.743108 18.9162 1.47005C18.9162 2.19698 19.5055 2.78628 20.2324 2.78628Z" fill="currentColor"></path>
<path d="M3.76836 21.2136H2.78677V2.78632H14.2331V15.2211C14.2331 15.9481 14.8224 16.5374 15.5493 16.5374C16.2763 16.5374 16.8656 15.9481 16.8656 15.2211V1.47008C16.8656 0.743141 16.2763 0.153841 15.5493 0.153841H1.47053C0.743596 0.153841 0.154297 0.743141 0.154297 1.47008V22.5299C0.154297 23.2568 0.743596 23.8461 1.47053 23.8461H3.76836C4.49529 23.8461 5.08459 23.2568 5.08459 22.5299C5.08459 21.8029 4.49529 21.2136 3.76836 21.2136Z" fill="#2FE1B9"></path>
</svg>

After

Width:  |  Height:  |  Size: 1022 B

View File

@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="157.42708mm"
height="44.185417mm"
viewBox="0 0 157.42708 44.185417"
version="1.1"
id="svg8"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
sodipodi:docname="okx logo.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.98994949"
inkscape:cx="567.26578"
inkscape:cy="219.28838"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:pagecheckerboard="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="1912"
inkscape:window-y="70"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-62.058587,-90.445746)">
<g
style="fill:#000000"
id="g886"
transform="matrix(0.39972707,0,0,0.34817986,61.931647,90.445746)">
<path
id="path839"
d="M 115.822,0 H 2.94268 C 2.24645,0 1.57875,0.297103 1.08644,0.825953 0.594137,1.3548 0.317566,2.07208 0.317566,2.81999 V 124.079 c 0,0.748 0.276571,1.466 0.768874,1.995 0.49231,0.528 1.16001,0.825 1.85624,0.825 H 115.822 c 0.697,0 1.364,-0.297 1.857,-0.825 0.492,-0.529 0.769,-1.247 0.769,-1.995 V 2.81999 c 0,-0.74791 -0.277,-1.46519 -0.769,-1.994037 C 117.186,0.297103 116.519,0 115.822,0 Z M 79.0709,81.7797 c 0,0.7479 -0.2766,1.4651 -0.7689,1.994 -0.4923,0.5288 -1.16,0.8259 -1.8562,0.8259 H 42.3193 c -0.6962,0 -1.3639,-0.2971 -1.8562,-0.8259 -0.4923,-0.5289 -0.7689,-1.2461 -0.7689,-1.994 V 45.1198 c 0,-0.7479 0.2766,-1.4652 0.7689,-1.994 0.4923,-0.5289 1.16,-0.826 1.8562,-0.826 h 34.1265 c 0.6962,0 1.3639,0.2971 1.8562,0.826 0.4923,0.5288 0.7689,1.2461 0.7689,1.994 z"
inkscape:connector-curvature="0"
style="fill:#000000" />
<path
id="path841"
d="m 352.131,42.305 h -34.127 c -1.449,0 -2.625,1.2625 -2.625,2.82 v 36.6598 c 0,1.5574 1.176,2.82 2.625,2.82 h 34.127 c 1.45,0 2.625,-1.2626 2.625,-2.82 V 45.125 c 0,-1.5575 -1.175,-2.82 -2.625,-2.82 z"
inkscape:connector-curvature="0"
style="fill:#000000" />
<path
id="path843"
d="m 312.763,0.00204468 h -34.126 c -1.45,0 -2.625,1.26255532 -2.625,2.81998532 V 39.4819 c 0,1.5574 1.175,2.82 2.625,2.82 h 34.126 c 1.45,0 2.626,-1.2626 2.626,-2.82 V 2.82203 c 0,-1.55743 -1.176,-2.81998532 -2.626,-2.81998532 z"
inkscape:connector-curvature="0"
style="fill:#000000" />
<path
id="path845"
d="m 391.529,0.00204468 h -34.127 c -1.449,0 -2.625,1.26255532 -2.625,2.81998532 V 39.4819 c 0,1.5574 1.176,2.82 2.625,2.82 h 34.127 c 1.45,0 2.625,-1.2626 2.625,-2.82 V 2.82203 c 0,-1.55743 -1.175,-2.81998532 -2.625,-2.81998532 z"
inkscape:connector-curvature="0"
style="fill:#000000" />
<path
id="path847"
d="m 312.763,84.6038 h -34.126 c -1.45,0 -2.625,1.2625 -2.625,2.8199 v 36.6603 c 0,1.557 1.175,2.82 2.625,2.82 h 34.126 c 1.45,0 2.626,-1.263 2.626,-2.82 V 87.4237 c 0,-1.5574 -1.176,-2.8199 -2.626,-2.8199 z"
inkscape:connector-curvature="0"
style="fill:#000000" />
<path
id="path849"
d="m 391.529,84.6038 h -34.127 c -1.449,0 -2.625,1.2625 -2.625,2.8199 v 36.6603 c 0,1.557 1.176,2.82 2.625,2.82 h 34.127 c 1.45,0 2.625,-1.263 2.625,-2.82 V 87.4237 c 0,-1.5574 -1.175,-2.8199 -2.625,-2.8199 z"
inkscape:connector-curvature="0"
style="fill:#000000" />
<path
id="path851"
d="m 253.651,0.00204468 h -34.126 c -1.45,0 -2.626,1.26255532 -2.626,2.81998532 V 39.4819 c 0,1.5574 1.176,2.82 2.626,2.82 h 34.126 c 1.45,0 2.625,-1.2626 2.625,-2.82 V 2.82203 c 0,-1.55743 -1.175,-2.81998532 -2.625,-2.81998532 z"
inkscape:connector-curvature="0"
style="fill:#000000" />
<path
id="path853"
d="m 253.651,84.6038 h -34.126 c -1.45,0 -2.626,1.2625 -2.626,2.8199 v 36.6603 c 0,1.557 1.176,2.82 2.626,2.82 h 34.126 c 1.45,0 2.625,-1.263 2.625,-2.82 V 87.4237 c 0,-1.5574 -1.175,-2.8199 -2.625,-2.8199 z"
inkscape:connector-curvature="0"
style="fill:#000000" />
<path
id="path855"
d="m 216.888,45.0881 c 0,-0.7479 -0.277,-1.4652 -0.769,-1.994 -0.492,-0.5289 -1.16,-0.826 -1.856,-0.826 H 177.511 V 2.81999 c 0,-0.74791 -0.277,-1.46519 -0.769,-1.994037 C 176.25,0.297103 175.582,0 174.886,0 H 140.76 c -0.697,0 -1.364,0.297103 -1.857,0.825953 -0.492,0.528847 -0.769,1.246127 -0.769,1.994037 V 124.016 c 0,0.748 0.277,1.465 0.769,1.994 0.493,0.529 1.16,0.826 1.857,0.826 h 34.126 c 0.696,0 1.364,-0.297 1.856,-0.826 0.492,-0.529 0.769,-1.246 0.769,-1.994 V 84.5679 h 36.752 c 0.696,0 1.364,-0.2971 1.856,-0.8259 0.492,-0.5289 0.769,-1.2462 0.769,-1.9941 z"
inkscape:connector-curvature="0"
style="fill:#000000" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -0,0 +1,39 @@
<svg width="498" height="499" viewBox="0 0 498 499" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M411.491 249.489C411.491 254.498 411.243 259.461 410.814 264.38H318.347L311.288 250.053L261.062 350.343L219.497 230.446L191.171 324.058L153.304 264.38H88.0809C87.6524 259.461 87.4043 254.498 87.4043 249.489C87.4043 244.48 87.6524 239.493 88.0809 234.575H169.745L181.563 253.211L217.693 133.991L266.069 273.879L311.513 183.065L336.773 234.575H410.746C411.197 239.493 411.491 244.547 411.491 249.489Z" fill="#444444"/>
<path d="M277.276 40.9205C277.132 49.4665 274.393 57.7665 269.422 64.7181C264.451 71.6697 257.484 76.9441 249.446 79.8408C227.172 79.8408 205.116 84.2302 184.538 92.7583C163.96 101.286 145.263 113.786 129.514 129.544C113.765 145.302 101.273 164.009 92.751 184.597C84.2292 205.184 79.8446 227.25 79.8476 249.533C76.9636 241.367 71.6193 234.295 64.5508 229.294C57.4824 224.292 49.0376 221.607 40.3798 221.607C31.7221 221.607 23.2773 224.292 16.2089 229.294C9.14043 234.295 3.79611 241.367 0.912119 249.533C0.90323 216.878 7.32551 184.541 19.8121 154.369C32.2987 124.198 50.6048 96.7832 73.6848 73.6914C96.7648 50.5996 124.166 32.2832 154.324 19.7887C184.482 7.29408 216.805 0.866146 249.446 0.872074C257.664 3.83466 264.758 9.28105 269.745 16.4566C274.731 23.6322 277.363 32.1817 277.276 40.9205Z" fill="url(#paint0_linear_430_3947)"/>
<path d="M497.934 249.488C495.05 257.655 489.706 264.726 482.637 269.728C475.569 274.729 467.124 277.415 458.466 277.415C449.809 277.415 441.364 274.729 434.295 269.728C427.227 264.726 421.883 257.655 418.999 249.488C418.987 204.503 401.12 161.362 369.326 129.551C337.532 97.7388 294.412 79.8588 249.445 79.8408C257.609 76.9556 264.677 71.609 269.676 64.5376C274.676 57.4662 277.36 49.0179 277.36 40.3564C277.36 31.695 274.676 23.2467 269.676 16.1753C264.677 9.10385 257.609 3.75728 249.445 0.87207C282.079 0.87207 314.394 7.30288 344.543 19.7973C374.693 32.2917 402.087 50.605 425.161 73.6914C448.236 96.7779 466.539 124.185 479.026 154.349C491.512 184.512 497.937 216.841 497.934 249.488Z" fill="url(#paint1_linear_430_3947)"/>
<path d="M497.933 249.488C497.936 282.134 491.511 314.462 479.024 344.624C466.537 374.786 448.234 402.192 425.159 425.276C402.084 448.361 374.69 466.672 344.54 479.164C314.391 491.656 282.077 498.084 249.444 498.081C241.281 495.196 234.213 489.849 229.213 482.778C224.214 475.707 221.529 467.258 221.529 458.597C221.529 449.935 224.214 441.487 229.213 434.416C234.213 427.344 241.281 421.998 249.444 419.112C271.718 419.115 293.774 414.729 314.354 406.203C334.933 397.678 353.632 385.181 369.383 369.425C385.134 353.67 397.629 334.964 406.153 314.377C414.678 293.791 419.065 271.726 419.065 249.442C421.949 257.609 427.293 264.68 434.362 269.682C441.43 274.683 449.875 277.369 458.533 277.369C467.191 277.369 475.635 274.683 482.704 269.682C489.772 264.68 495.117 257.609 498.001 249.442L497.933 249.488Z" fill="url(#paint2_linear_430_3947)"/>
<path d="M249.446 498.083C183.542 498.083 120.338 471.892 73.7377 425.271C27.137 378.651 0.957031 315.42 0.957031 249.489C3.84102 241.322 9.18534 234.251 16.2538 229.25C23.3222 224.248 31.767 221.562 40.4247 221.562C49.0825 221.562 57.5273 224.248 64.5957 229.25C71.6642 234.251 77.0085 241.322 79.8925 249.489C79.8925 294.488 97.7608 337.645 129.567 369.464C145.315 385.219 164.012 397.717 184.588 406.244C205.165 414.771 227.219 419.159 249.491 419.159C241.328 422.044 234.259 427.391 229.26 434.462C224.261 441.534 221.576 449.982 221.576 458.644C221.576 467.305 224.261 475.753 229.26 482.825C234.259 489.896 241.328 495.243 249.491 498.128L249.446 498.083Z" fill="url(#paint3_linear_430_3947)"/>
<defs>
<linearGradient id="paint0_linear_430_3947" x1="0.957225" y1="125.169" x2="277.276" y2="125.169" gradientUnits="userSpaceOnUse">
<stop stop-color="#D1C6E0"/>
<stop offset="0.35" stop-color="#9274B2"/>
<stop offset="0.71" stop-color="#652F8D"/>
<stop offset="1" stop-color="#2B1143"/>
</linearGradient>
<linearGradient id="paint1_linear_430_3947" x1="249.445" y1="139.09" x2="497.934" y2="139.09" gradientUnits="userSpaceOnUse">
<stop offset="0.01" stop-color="#82C2DF"/>
<stop offset="0.3" stop-color="#3CAFD9"/>
<stop offset="0.59" stop-color="#0379B8"/>
<stop offset="0.7" stop-color="#006DAC"/>
<stop offset="0.73" stop-color="#006AA9"/>
<stop offset="0.91" stop-color="#334C84"/>
<stop offset="1" stop-color="#3A447A"/>
</linearGradient>
<linearGradient id="paint2_linear_430_3947" x1="240.4" y1="466.797" x2="581.559" y2="212.975" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C6237"/>
<stop offset="0.406444" stop-color="#31BB77"/>
<stop offset="0.752196" stop-color="#5BC792"/>
<stop offset="0.98" stop-color="#B1E9CD"/>
</linearGradient>
<linearGradient id="paint3_linear_430_3947" x1="0.957031" y1="359.865" x2="249.446" y2="359.865" gradientUnits="userSpaceOnUse">
<stop stop-color="#931B1E"/>
<stop offset="0.32" stop-color="#ED4725"/>
<stop offset="0.38" stop-color="#EE5F26"/>
<stop offset="0.53" stop-color="#F08F27"/>
<stop offset="0.74" stop-color="#F5C321"/>
<stop offset="0.88" stop-color="#F8D718"/>
<stop offset="1" stop-color="#F6DF65"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 545.5 445.6" style="enable-background:new 0 0 545.5 445.6;" xml:space="preserve">
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#00A2FF;}
</style>
<g>
<path class="st0" d="M302.5,316.3c-2.1-0.5-4.2-1-6.2-1.4c-14.7-2.9-29.8-3-44.5-0.3c-1.8,0.3-3.6,0.7-5.4,1.2
c-11.2,2.8-13.9,9.2-8.8,19.4c5.8,12,15.1,20.8,27.2,26.7c5.9,3,12.9,2.9,18.7-0.2c11.9-5.9,21.4-15.7,27-27.7
C314.8,324.4,312.7,318.9,302.5,316.3z"/>
<path class="st0" d="M507.2,11.2c-34-35.7-158.2,24.1-184.7,37.4c-3.3,1.7-7,2.6-10.8,2.6h-38.3l-38.7,0.1c-3.8,0-7.5-0.9-10.9-2.6
C197.3,35.3,73.2-24.4,39.3,11.2C1.2,51.2-11.1,314.6,11,340.4c11.5,13.4,90,57.8,152.4,81.5c23,8.9,62.5,23.7,110,23.7
c46.1,0,87.8-14,109.2-23.5c98.7-43.3,140.2-67.4,151.7-80.8C556.3,315.5,545.3,51.2,507.2,11.2z M374.2,66.8
c0,0,25.3-18.2,61.9-27.1c5-1.2,10.1-1.8,15.3-1.7c18.6,0,32.8,12.1,37.3,30.9c0,0,8.3,36.7,8.7,69.9c0.1,11.1-8.4,18.9-18.9,18.9
c-2.8,0-5.6-0.7-8.1-1.9h-0.1l-97.2-56l0,0c-5.3-3.1-8.7-8.6-9.2-14.7c0-0.5-0.1-1-0.1-1.5C363.8,76.3,368,70.9,374.2,66.8
L374.2,66.8z M57.1,69c4.4-18.9,18.7-30.9,37.3-30.9c5.2-0.1,10.3,0.4,15.3,1.7c36.6,8.9,61.9,27.1,61.9,27.1
c6.3,4.1,10.4,9.5,10.4,16.8c0,0.5,0,1-0.1,1.5c-0.5,6.1-3.9,11.6-9.2,14.7l0,0L75.4,156h-0.1c-2.5,1.2-5.3,1.8-8.1,1.9
c-10.4,0-19-7.8-18.9-18.9C48.8,105.6,57.1,69,57.1,69L57.1,69z M133.8,261.9l-0.1,0.1l-41.8,27.6c-12.1,8-16.2,12.1-19.3,17.7
c-2.7,4.7-3.6,10.2-3.7,15.6c0,6.1-2.2,9.9-3.9,11.7c-4,4.1-8.9,5-14.5,3.5c-2.4-0.6-4.7-1.7-6.6-3.3c-20-16.4-22.3-48.4-5.1-71.2
c10.8-14.4,18.4-18.5,64.1-48.6s52.5-35.4,70-39.7c27.7-6.8,56.2,7.9,63.4,32.8c0.7,2.4,0.8,4.9,0.4,7.3c-0.8,5.7-3.5,9.9-8.9,11.9
c-2.3,0.9-6.7,1.3-12.3-1c-5-2.2-10.4-3.2-15.8-2.8c-6.4,0.7-11.8,2.8-23.9,10.7L134,261.8L133.8,261.9z M385,364.2
c-7.9,9.8-17.8,19.2-28.6,24.9c-55,29.2-110.9,29-165.9-0.2c-10.6-5.6-20.3-14.8-28.1-24.4c-14.3-17.7-13.8-39.8-0.5-58.5
c8.1-11.4,18.8-19.5,30.6-26c25.5-13.9,52.7-19.7,81.2-19.9c29.5,0.3,57.9,5.9,83.5,21.8c10.6,6.6,20.1,14.9,27.9,24.7
C399.2,324.3,399,346.8,385,364.2L385,364.2z M501.9,334.8c-1.9,1.6-4.2,2.7-6.6,3.3c-5.5,1.5-10.5,0.7-14.5-3.5
c-1.7-1.8-3.9-5.6-3.9-11.7c0.1-5.4-1.1-10.8-3.7-15.6c-3.1-5.6-7.2-9.7-19.3-17.7L412,262l-0.1-0.1l-0.1-0.1L370,234.2
c-12.1-8-17.5-10.1-23.9-10.7c-5.4-0.6-10.8,0.7-15.8,2.8c-5.6,2.4-10,1.9-12.3,1c-5.4-2-8.1-6.2-8.9-11.9
c-0.4-2.4-0.3-4.9,0.4-7.3c7.2-24.8,35.7-39.6,63.4-32.8c17.5,4.3,24.3,9.6,70,39.7c45.7,30.1,53.3,34.3,64.1,48.6
C524.2,286.4,521.9,318.5,501.9,334.8L501.9,334.8z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,10 @@
<svg width="114" height="47" viewBox="0 0 114 47" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M51.2384 0H9.40916C6.91615 0.00798102 4.52753 1.00186 2.76469 2.76469C1.00186 4.52753 0.00798102 6.91615 0 9.40916L0 27.582C0.0078085 30.075 1.00163 32.4638 2.7645 34.2266C4.52737 35.9895 6.91609 36.9833 9.40916 36.9911H40.0383L51.3154 46.1371V36.9911C53.7957 36.9643 56.1658 35.9621 57.9127 34.2012C59.6597 32.4403 60.6431 30.0624 60.6502 27.582V9.40916C60.6419 6.9158 59.6476 4.52698 57.8842 2.76415C56.1209 1.00132 53.7318 0.00763233 51.2384 0Z" fill="#224ABE"/>
<path d="M72.2326 9.89356C73.1071 9.8842 73.9779 10.0091 74.8145 10.264C75.5491 10.4849 76.2303 10.8549 76.8154 11.351C77.3708 11.8338 77.8135 12.4326 78.1123 13.1052C78.7382 14.6244 78.7382 16.3294 78.1123 17.8486C77.8138 18.5213 77.371 19.1201 76.8154 19.6027C76.2302 20.0987 75.549 20.4687 74.8145 20.6897C73.9778 20.9445 73.1071 21.0694 72.2326 21.0602H70.0612V27.1893H66.3555V9.89356H72.2326ZM70.0612 17.7749H72.3076C72.9682 17.8018 73.6167 17.5918 74.1361 17.1827C74.3625 16.9654 74.5428 16.7046 74.6659 16.4159C74.789 16.1273 74.8524 15.8167 74.8524 15.5029C74.8524 15.189 74.789 14.8785 74.6659 14.5898C74.5428 14.3011 74.3625 14.0403 74.1361 13.823C73.6167 13.4138 72.9682 13.2038 72.3076 13.2308H70.0593L70.0612 17.7749Z" fill="#224ABE"/>
<path d="M79.4944 20.7325C79.4871 19.8818 79.6519 19.0385 79.9788 18.2531C80.3057 17.4677 80.7879 16.7565 81.3966 16.1622C82.002 15.5775 82.715 15.1158 83.4962 14.8028C85.18 14.1445 87.05 14.1445 88.7338 14.8028C89.5149 15.116 90.2278 15.5777 90.8333 16.1622C91.4407 16.7583 91.9231 17.4695 92.2524 18.2543C92.5818 19.039 92.7514 19.8815 92.7514 20.7325C92.7514 21.5835 92.5818 22.426 92.2524 23.2108C91.9231 23.9955 91.4407 24.7067 90.8333 25.3029C90.2281 25.8876 89.5151 26.3491 88.7338 26.6616C87.0501 27.3206 85.1798 27.3206 83.4962 26.6616C82.7148 26.3492 82.0017 25.8877 81.3966 25.3029C80.7879 24.7085 80.3057 23.9973 79.9788 23.2119C79.6519 22.4265 79.4871 21.5832 79.4944 20.7325ZM83.0521 20.7325C83.0476 21.1571 83.1316 21.5779 83.2988 21.9682C83.4555 22.3341 83.6774 22.6685 83.9535 22.9552C84.2289 23.2376 84.5565 23.464 84.9181 23.6217C85.48 23.8617 86.1013 23.9265 86.7006 23.8075C87.2999 23.6886 87.8494 23.3915 88.2771 22.9552C88.5534 22.6687 88.7753 22.3342 88.9317 21.9682C89.0947 21.5767 89.1787 21.1569 89.1787 20.7328C89.1787 20.3088 89.0947 19.889 88.9317 19.4975C88.774 19.1314 88.5511 18.7969 88.2738 18.5105C87.8461 18.0742 87.2966 17.7771 86.6973 17.6582C86.098 17.5392 85.4767 17.604 84.9148 17.844C84.5533 18.002 84.2258 18.2283 83.9502 18.5105C83.6742 18.7973 83.4524 19.1317 83.2955 19.4975C83.1298 19.8879 83.0465 20.3085 83.0521 20.7325Z" fill="#224ABE"/>
<path d="M94.5647 20.7323C94.5574 19.8816 94.7222 19.0383 95.0491 18.2529C95.376 17.4675 95.8582 16.7563 96.4669 16.1619C97.0722 15.5772 97.7853 15.1155 98.5666 14.8025C100.25 14.1443 102.12 14.1443 103.803 14.8025C104.585 15.1157 105.298 15.5773 105.903 16.1619C106.51 16.7582 106.993 17.4694 107.322 18.2541C107.651 19.0389 107.821 19.8813 107.821 20.7323C107.821 21.5833 107.651 22.4257 107.322 23.2104C106.993 23.9952 106.51 24.7064 105.903 25.3026C105.298 25.8874 104.585 26.3489 103.803 26.6614C102.12 27.3204 100.25 27.3204 98.5666 26.6614C97.7851 26.349 97.072 25.8875 96.4669 25.3026C95.8582 24.7083 95.376 23.9971 95.0491 23.2117C94.7222 22.4263 94.5574 21.583 94.5647 20.7323ZM98.1224 20.7323C98.1182 21.1568 98.2022 21.5776 98.3691 21.968C98.5266 22.3342 98.7496 22.6687 99.0271 22.9549C99.3025 23.2374 99.6302 23.4637 99.9918 23.6215C100.554 23.8613 101.175 23.926 101.775 23.8071C102.374 23.6882 102.923 23.3912 103.351 22.9549C103.629 22.6685 103.852 22.3341 104.009 21.968C104.172 21.5765 104.256 21.1566 104.256 20.7326C104.256 20.3086 104.172 19.8887 104.009 19.4973C103.852 19.1312 103.629 18.7968 103.351 18.5103C102.924 18.074 102.374 17.7769 101.775 17.658C101.175 17.5391 100.554 17.6038 99.9918 17.8438C99.6303 18.0017 99.3027 18.228 99.0271 18.5103C98.7498 18.7967 98.5268 19.1311 98.3691 19.4973C98.2026 19.8875 98.1189 20.308 98.1231 20.7323H98.1224Z" fill="#224ABE"/>
<path d="M113.507 9.89404V27.1878H109.9V9.89404H113.507Z" fill="#224ABE"/>
<path d="M8.76285 21.4469C9.03704 22.1328 9.49428 22.7303 10.0847 23.1741C10.6644 23.6106 11.3726 23.8421 12.0982 23.8321C12.652 23.8475 13.1979 23.6982 13.6668 23.4031C13.8758 23.2731 14.0465 23.09 14.1616 22.8724C14.2766 22.6549 14.3318 22.4107 14.3215 22.1648C14.3215 21.3866 13.7205 20.7911 12.5186 20.3783L10.4433 19.6638C9.31171 19.3025 8.27973 18.6828 7.42912 17.8537C7.05614 17.4609 6.76559 16.9974 6.57461 16.4906C6.38362 15.9838 6.29607 15.4438 6.31712 14.9026C6.30603 14.1936 6.44927 13.4906 6.73692 12.8425C7.01137 12.2378 7.41576 11.7011 7.92129 11.2705C8.44924 10.8233 9.05689 10.4797 9.71232 10.2579C10.4402 10.0125 11.2044 9.89166 11.9725 9.90061C13.2075 9.88661 14.422 10.2165 15.4802 10.8534C16.5198 11.4741 17.3459 12.3964 17.8489 13.4978L14.761 15.2132C14.5069 14.6697 14.1404 14.1862 13.6859 13.7946C13.2284 13.4035 12.6426 13.1954 12.0409 13.2103C11.5434 13.1862 11.052 13.3288 10.6447 13.6156C10.4757 13.7376 10.339 13.899 10.2465 14.0858C10.154 14.2725 10.1084 14.4791 10.1137 14.6874C10.109 14.8733 10.1466 15.0577 10.2236 15.2269C10.3007 15.396 10.4152 15.5455 10.5585 15.6639C10.9272 15.958 11.3454 16.1839 11.7935 16.3311L14.0418 17.1647C15.2203 17.5328 16.2868 18.1926 17.1423 19.0828C17.8174 19.8746 18.1741 20.8891 18.1431 21.9292C18.1578 22.7049 17.984 23.4727 17.6364 24.1663C17.31 24.8043 16.851 25.3652 16.2902 25.8113C15.7102 26.265 15.0534 26.6109 14.3511 26.8325C13.6047 27.0725 12.825 27.1931 12.0409 27.1898C11.3399 27.1929 10.6417 27.1006 9.96564 26.9154C9.32263 26.7399 8.70737 26.4752 8.13776 26.1291C7.57392 25.784 7.06641 25.3544 6.63296 24.8552C6.17983 24.3333 5.82033 23.7369 5.57031 23.0925L8.76285 21.4469Z" fill="#FAFAFA"/>
<path d="M39.5921 9.89404V27.1878H35.9857V16.2811L31.4844 27.1878H28.8308L24.3499 16.3304V27.1872H20.7441V9.89404H25.2651L30.2296 21.9259L35.6646 9.89404H39.5921Z" fill="#FAFAFA"/>
<path d="M45.5596 21.447C45.8338 22.1329 46.2911 22.7304 46.8815 23.1742C47.4612 23.6107 48.1694 23.8422 48.895 23.8322C49.4488 23.8476 49.9947 23.6983 50.4636 23.4032C50.6726 23.2733 50.8434 23.0901 50.9584 22.8726C51.0734 22.655 51.1286 22.4108 51.1183 22.1649C51.1183 21.3867 50.5173 20.7912 49.3154 20.3784L47.2415 19.6606C46.1098 19.2994 45.0779 18.6796 44.2272 17.8505C43.8543 17.4577 43.5637 16.9943 43.3727 16.4874C43.1817 15.9806 43.0942 15.4406 43.1152 14.8994C43.1042 14.1904 43.2474 13.4874 43.535 12.8393C43.8095 12.2346 44.2139 11.6979 44.7194 11.2674C45.2474 10.8201 45.855 10.4766 46.5104 10.2547C47.2383 10.0093 48.0025 9.88846 48.7706 9.89744C50.0056 9.88344 51.2201 10.2133 52.2783 10.8502C53.3196 11.4692 54.1478 12.3904 54.653 13.4913L51.565 15.2067C51.3109 14.6632 50.9445 14.1797 50.4899 13.7881C50.0323 13.3974 49.4465 13.1893 48.845 13.2038C48.3476 13.1798 47.8565 13.3225 47.4494 13.6091C47.2804 13.7312 47.1438 13.8926 47.0513 14.0793C46.9587 14.2661 46.9131 14.4726 46.9184 14.681C46.9137 14.8668 46.9513 15.0513 47.0283 15.2204C47.1054 15.3896 47.2199 15.539 47.3632 15.6574C47.7319 15.9515 48.1501 16.1775 48.5982 16.3246L50.8465 17.1583C52.025 17.5264 53.0915 18.1861 53.9469 19.0763C54.6221 19.8681 54.9788 20.8826 54.9477 21.9227C54.9625 22.6985 54.7887 23.4662 54.4411 24.1599C54.1147 24.7979 53.6557 25.3587 53.0949 25.8048C52.5151 26.2598 51.8583 26.6068 51.1558 26.8293C50.4093 27.0694 49.6297 27.1899 48.8456 27.1866C48.1448 27.1897 47.4469 27.0974 46.771 26.9122C46.128 26.7367 45.5127 26.4721 44.9431 26.1259C44.3784 25.781 43.8699 25.3514 43.4357 24.8521C42.9826 24.3301 42.6231 23.7338 42.373 23.0893L45.5596 21.447Z" fill="#FAFAFA"/>
</svg>

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0.6000006198883057 0.9885644912719727 95 37.2114372253418" enable-background="new 0 0 96 39"><path fill="#ABD3FF" d="M54.6 38.2c-.4 0-.8-.1-1.1-.4-.7-.5-.9-1.5-.4-2.3.1-.2 11.3-18.8 5.5-28-1.2-1.9-2.5-3-4-3-2.8-.1-5.9 3-6.9 4.3-.6.8-1.7.9-2.5.3-.8-.6-.9-1.7-.3-2.5.2-.2 4.6-5.9 9.8-5.6 2.7.1 5 1.7 6.8 4.7 4.3 6.9 1.3 17.3-1.7 24.2 3.1-2.2 7-4.3 10.6-4.9 1-.1 1.9.5 2 1.5.1 1-.5 1.9-1.5 2-6.9 1.1-15.1 9.1-15.2 9.2-.2.4-.7.5-1.1.5z"></path><g fill="#fff"><path d="M11.5 23.5c0 .9-.2 1.8-.7 2.5s-1.2 1.3-2.1 1.7-2 .6-3.3.6c-1 0-1.9-.1-2.6-.2-.7-.1-1.4-.4-2.2-.7v-3.6c.8.4 1.6.7 2.5.9.8.2 1.6.3 2.3.3.6 0 1.1-.1 1.4-.3.3-.2.4-.5.4-.8 0-.2-.1-.4-.2-.5 0-.2-.2-.4-.5-.5-.3-.2-1-.5-2.1-1-1-.4-1.8-.9-2.3-1.3-.5-.4-.9-.9-1.1-1.4-.2-.5-.4-1.2-.4-1.9 0-1.4.5-2.5 1.6-3.2 1-.8 2.5-1.2 4.3-1.2 1.6 0 3.3.4 4.9 1.1l-1.2 3c-1.5-.6-2.7-1-3.8-1-.5 0-.9.1-1.2.3-.2.2-.4.5-.4.7 0 .3.2.6.5.8.3.2 1.2.7 2.6 1.3 1.3.6 2.3 1.2 2.8 1.9s.8 1.5.8 2.5zM20.3 28.1l-3.2-10.9H17c.1 1.9.2 3.3.2 4.3V28h-3.7V13h5.6l3.3 10.7h.1L25.6 13h5.6v15.1h-3.9V20.4s.1-1.4.1-3.1h-.1l-3.1 10.8h-3.9zM40.6 28.1h-4.2V16.3h-3.8V13h11.8v3.3h-3.8v11.8zM57.5 17.8c0 1.7-.5 3-1.5 3.9-1 .9-2.5 1.4-4.4 1.4h-1.2v5h-4.2V13h5.4c2 0 3.5.4 4.4 1.2 1 .9 1.5 2.1 1.5 3.6zm-7.1 2h.8c.6 0 1.1-.2 1.5-.5.4-.3.6-.8.6-1.4 0-1-.6-1.5-1.8-1.5h-1.1v3.4zM72 19.3h6.7v8.1c-1.8.6-3.8.9-6 .9-2.4 0-4.3-.7-5.6-2-1.3-1.3-2-3.3-2-5.8 0-2.4.7-4.3 2.2-5.7 1.4-1.4 3.5-2 6-2 1 0 1.9.1 2.8.3.9.2 1.6.4 2.3.7L77 16.9c-1.1-.5-2.4-.8-3.7-.8-1.2 0-2.2.4-2.9 1.2-.7.8-1 1.9-1 3.3s.3 2.5.9 3.2c.6.7 1.5 1.1 2.6 1.1.6 0 1.2-.1 1.7-.2v-2.4H72v-3zM95.6 20.5c0 2.5-.6 4.5-1.9 5.8s-3.2 2-5.7 2c-2.4 0-4.3-.7-5.6-2-1.3-1.3-2-3.3-2-5.8s.7-4.4 1.9-5.8 3.2-2 5.7-2 4.4.7 5.6 2 2 3.3 2 5.8zm-10.7 0c0 2.9 1.1 4.4 3.2 4.4 1.1 0 1.9-.4 2.4-1.1.5-.7.8-1.8.8-3.3 0-1.5-.3-2.6-.8-3.3-.5-.7-1.3-1.1-2.3-1.1-2.3 0-3.3 1.5-3.3 4.4z"></path></g></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,10 @@
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_154_102)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M297.647 4.78775C299.464 5.07025 301.17 5.85037 302.58 7.04373C303.991 8.23707 305.052 9.79823 305.649 11.5583L305.999 12.85L318.014 75.3062C334.084 81.5487 349.235 89.9877 363.046 100.389L368.086 104.347L428.753 83.3683C432.661 81.6601 436.838 82.8893 439.78 86.285C460.64 109.972 477.591 138.554 487.424 168.574C488.164 170.248 488.382 172.11 488.047 173.912C487.713 175.714 486.842 177.369 485.553 178.657L484.483 179.552L436.345 221.01C438.072 230.28 438.566 240.3 438.566 250.05C438.566 257.904 438.238 265.862 437.229 273.465L436.345 279.112L484.483 320.611C486.153 321.812 487.359 323.564 487.896 325.567C488.433 327.568 488.266 329.698 487.424 331.589C477.613 361.63 460.682 390.17 439.801 413.836C437.167 416.877 433.588 418.19 430.07 417.232L428.753 416.774L368.107 395.774C354.797 406.629 339.923 415.565 324.041 422.357L318.034 424.816L305.999 487.313C305.584 489.358 304.561 491.226 303.069 492.668C301.577 494.108 299.685 495.052 297.647 495.375C281.93 498.292 266.213 500 250.023 500C233.813 500 218.095 498.292 202.378 495.375C200.559 495.092 198.851 494.312 197.438 493.119C196.023 491.926 194.958 490.366 194.354 488.605L194.026 487.313L182.011 424.816C165.665 418.593 150.284 410.026 136.341 399.379L131.919 395.774L71.2717 416.774C67.363 418.482 63.187 417.252 60.2246 413.836C39.3439 390.17 22.4131 361.63 12.6001 331.589C11.8637 329.914 11.6483 328.054 11.9828 326.252C12.3172 324.45 13.1856 322.795 14.4722 321.506L15.542 320.611L63.6601 279.112C62.0471 269.513 61.3034 259.786 61.4383 250.05C61.4383 242.258 61.7469 234.28 62.755 226.655L63.6601 221.03L15.5214 179.552C13.8514 178.351 12.6452 176.599 12.1087 174.596C11.5722 172.594 11.7386 170.465 12.5796 168.574C22.3925 138.554 39.3233 109.972 60.204 86.285C61.3417 84.8444 62.8613 83.7618 64.5845 83.1642C66.3078 82.5664 68.1636 82.4783 69.9346 82.9101L71.2717 83.3475L131.919 104.326C145.41 93.2005 160.453 84.1583 176.56 77.4936L182.011 75.2854L194.026 12.8292C194.435 10.7811 195.457 8.9099 196.949 7.46812C198.444 6.02634 200.338 5.08349 202.378 4.76692C233.817 -1.58897 266.188 -1.58897 297.627 4.76692L297.647 4.78775ZM250.002 103.722C170.017 103.722 105.257 169.219 105.257 250.008C105.257 330.798 170.059 396.295 250.002 396.295C329.946 396.295 394.747 330.798 394.747 250.008C394.747 169.219 329.946 103.722 249.982 103.722H250.002ZM341.61 229.676V186.136H158.395V229.676H228.196V334.256H271.809V229.676H341.61Z" fill="#512FC9"/>
</g>
<defs>
<clipPath id="clip0_154_102">
<rect width="500" height="500" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 256 256" width="256" height="256">
<path d="M2268.2 2512.3a953.7 953.7 0 0 1-50 57c-180.5 189.5-426.2 294-691.6 294A953.7 953.7 0 0 1 847.8 2582a952.7 952.7 0 0 1-281.2-678.8 953.8 953.8 0 0 1 281.2-678.9 953.7 953.7 0 0 1 678.8-281.1 953.7 953.7 0 0 1 678.8 281.1 953.7 953.7 0 0 1 281.2 678.9c0 219.2-78.9 437.2-218.4 609" style="fill:#196aff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.36633128" transform="matrix(.13333 0 0 -.13333 -75.5 381.8)"/>
<path d="M1823.7 1650.9c35.7 104.2 94.7 136.1 102 297 2.6 56.5-14.7 236-14.7 236s28 72-25.8 152.3c-83.5 124.3-255.4 132.8-345.7 132.8-90.3 0-260.2-8.5-343.7-132.8C1142 2256 1170 2184 1170 2184s-9.5-92.4-16.7-173.8c-1.7-19.1.1-94.7 2.4-113a453 453 0 0 1 25.8-96.2c14.4-39.6 36.8-79.9 54-120.5 51.8-122.8 8.4-274.9 11.1-407.3 2.2-94-20-189.3-28.7-281.2a960.4 960.4 0 0 1 308.7-50.6 958.6 958.6 0 0 1 344.9 63.6c-20.4 115-44.1 224.2-47.8 265.9-10.6 125.9-41.3 259.4 0 380" style="fill:#fff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.36655635" transform="matrix(.13333 0 0 -.13333 -75.5 381.8)"/>
<path d="M1162.9 2383.9c1.1-18.8 3-38 8.3-56.2 1.6-5.7 4-19.7 11.4-21.8 9-2.6 25.9 8.3 32.3 13 12.3 9 23.9 18.5 36.2 27.6 8 6 16.5 10.5 24.3 16.5 8.4 6.6 14.7 14.5 21.7 22.2 8.4 9.4 14.8 19 21.3 29.5 5.1 8.2 37.1 13.5 42.2 21 5.6 8.3 1 18.6 1 28.7 0 74.2 4.4 147.6 6.1 220.3 1.8 50 21.4 109.2-53.4 85.8-160.3-50-158.5-271.3-151.4-386.6M1869.1 2279.7c-1.6 1.8-4.2 3.2-6.3 4.8a208 208 0 0 0-25.1 21.5c-9.4 9.6-19.2 19-28.2 28.9-7.9 8.7-17.3 16.6-25 25.6-5.1 6-10 12.3-14.6 18.5-2.3 3.2-3.5 7-5.3 10.4-2.7 5-40 10.1-36.2 15 6.3 8.3 20.3 15.4 23.7 25 17.2 48.6 24.8 244.5 26.8 294.5 5.4 127.8 117.6-6.3 137.2-57.7 57-149.7 23.2-258.8-46.3-386.6" style="fill:#fff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.36633128" transform="matrix(.13333 0 0 -.13333 -75.5 381.8)"/>
<path d="M1716.5 1787.9c-.1 73.8-9.3 103.6-50.4 139.7-25.8 22.6-55.9 31.2-103.8 30-47.9 1.2-82.4-13.4-107.3-39.2-37.5-39-47.4-62-47.5-135.9 0-39.9 43-128.1 55.7-148.5 21.3-36 60.6-48.9 99.1-46.2 38.6-2.7 77.9 10.3 99.1 46.2 12.8 20.4 55.1 107 55 153.9" style="fill:#f1e6d3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.36633128" transform="matrix(.13333 0 0 -.13333 -75.5 381.8)"/>
<path d="M1226.6 2316c-9.6 86.2-38.6 240 61.5 331.3 11 10.1 14-24.2 15.8-38 2.6-19 0-73.5.4-92.6.7-36.1 8.3-55 4.7-71.5-9.6-45-17.3-42.2-26.5-69.6-18.3-54.4-53.3-83-55.9-59.5M1851.7 2333c10.3-18.2 37 80.3 45.4 123.2 8 40.3 18 93.8 4 133.9-7.4 21.5-53 84.5-58.4 62.9-2-8.5-3.2-71.1-8.3-101.1-6.4-37.1-18-73.8-18-111.6-.2-84.5 25.3-88 35.3-107.2" style="fill:#f1d7d4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.36633128" transform="matrix(.13333 0 0 -.13333 -75.5 381.8)"/>
<path d="M1522 1319.7c-2.2-6.5-18.6-11.4-24.8-13.3-14.9-4.9-28.1 6.9-36.4 16.8-11.6 13.7-11.3 35.6-16.2 51.6-2.9 9.7-19.5 11-24.5 2-16.6-29.8-81.1 26.4-66.1 45.2 9.9 12.3-13.8 23.2-23.6 11-29-36.1 49-103.4 93.6-85.2 2-9 4-18 8-26.6 7.4-16.9 23.9-27.8 41-37 23.1-12.4 68.2 9.5 75 30.3 4.9 14.5-21.2 19.7-26 5.2M1727.6 1538.2c2.4-10 2.8-44-16-25.4-7.5 7.5-22.6 3-23.2-7-1.4-23.4-24.9-24-45.1-16.9-16 5.6-24.6-16.6-8.6-22.1 29.7-10.4 62-4.6 74.7 17.8 10.1-4.7 21.5-6 30.7 2.6 16 15 18.4 36.2 13.7 55.7-3.5 14.8-29.7 10.1-26.2-4.7M1775 1049.2c-7-14.3-19.8-13.4-33.6-7.4-10.1 4.4-22.6-2.8-19.6-13 6.2-20.6-19.7-26.6-37.3-19.3-15.4 6.5-28.8-13.8-13.2-20.3 31.6-13.2 71.7-1.6 77.5 26.2 20.4-3.3 39.8 2.4 49.4 22.3 6.7 13.6-16.4 25.4-23.2 11.5M1569.8 2153.3c-3.3-20.2-41.1 3.3-50.5 9.7-8.3 5.5-19 2.1-20-7.3-1.4-12.7-18.5-9-26.3-7.4-14.8 3-27.4 12.2-27.7 26-.4 13.6 8.2 27.7 12.6 40.4 2.9 8-8.7 17-17.2 11.5-15.2-9.7-88.7-18.5-59.4 13.6 9.3 10.2-7.1 24.8-16.6 14.5-13.5-14.8-22.6-48.7 6.6-56 15.5-3.7 37.8-3.5 56.8.8-8-25.5-9.6-48.8 23.2-65.1 22.1-11.1 52.5-11 65.4 6 27.2-14.5 69.7-28.7 75.6 7.8 2.1 13-20.4 18.5-22.5 5.5" style="fill:#faeee0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.36633128" transform="matrix(.13333 0 0 -.13333 -75.5 381.8)"/>
<path d="M1443 1685.6c39.4-3.4 78.8-12.3 118.5-10.9 25.4 1 51.7 4.5 76.8 8.2 18.2 2.7 40.5 6 52.7 19.4 1-45-92.6-59.1-128.9-60-42.1-1-89.5 17.2-119 43.3" style="fill:#494949;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.36633128" transform="matrix(.13333 0 0 -.13333 -75.5 381.8)"/>
<path d="M1549.4 1779.5a353.5 353.5 0 0 1-2.7-87.3c.7-7.6-1.3-25.7 8.8-29.5 8.2-3 18.3 2.7 19.7 10.1 2.2 12.5-3 28.2-3.5 41-.5 14.9 0 29.8 1.6 44.7 1 8.8 5.9 20.7-4.2 27-7.4 4.5-18.3 2.8-19.7-6" style="fill:#494949;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.36633128" transform="matrix(.13333 0 0 -.13333 -75.5 381.8)"/>
<path d="M1626 1849.7c-23.7-1-45.7-14.2-63.4-27-16.1 10.7-40.5 20.5-60.7 14.8-12-3.4-1.1-7.1 4-10.3 9.2-6.2 16.8-14.2 23.7-22.4 10.3-12.6 19.6-25.8 30.7-38 7.6 5.6 15 11.1 21.6 17.6 3.1 3 28.5 37 32.4 42.7 2.4 3.6 5 7.4 7.8 10.8 2.9 3.5 11 9 3.9 11.8" style="fill:#494949;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.36633128" transform="matrix(.13333 0 0 -.13333 -75.5 381.8)"/>
<path d="M1326.5 2010c11.7 30.3 24.3 68.4 56.3 62.4 24.2-5.2 56.7-86.2 36-78.2-11.3 4.4-20.3 41.1-41.4 46-13.4 3-32-43.6-50-48.4-8.7-2.3-4.3 10.4-.9 18.2M1670.6 2010c11.7 30.3 24.2 68.4 56.3 62.4 24.2-5.2 56.7-86.2 35.9-78.2-11.3 4.4-20.2 41.1-41.3 46-13.5 3-32-43.6-50-48.4-8.7-2.3-4.4 10.4-1 18.2" style="fill:#2c3844;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.36633128" transform="matrix(.13333 0 0 -.13333 -75.5 381.8)"/>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><circle cx="512" cy="512" r="512" style="fill:#6001d2"/><path d="M256 390.61h101.45l59.06 151 59.83-151H575L426.38 748.15H327l40.66-94.74Zm332.7 143.54a61.36 61.36 0 1 0 61.37 61.35 61.36 61.36 0 0 0-61.37-61.35M768 275.85H657.83l-98.09 235.67h110.55Z" style="fill:#fff"/></svg>

After

Width:  |  Height:  |  Size: 344 B

View File

@@ -36,5 +36,5 @@ file, that adheres to the above format.
SUPPORT
If you need help, please reach out to support@ente.io, and a human will get in touch with you.
If you need help, please visit @ https://github.com/ente-io/ente/discussions/new?category=q-a, and someone will get in touch with you.
If you have feature requests, please create an issue @ https://github.com/ente-io/ente

View File

@@ -2,5 +2,4 @@ flutter_icons:
android: "launcher_icon"
image_path: "assets/generation-icons/icon-light.png"
adaptive_icon_foreground: "assets/generation-icons/icon-light-adaptive-fg.png"
adaptive_icon_background: "#ffffff"
adaptive_icon_background: "assets/generation-icons/icon-light-adaptive-bg.png"

View File

@@ -7,7 +7,7 @@
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>auth</string>
<string>Ente Auth</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>

View File

@@ -13,6 +13,7 @@ import 'package:ente_auth/models/key_attributes.dart';
import 'package:ente_auth/models/key_gen_result.dart';
import 'package:ente_auth/models/private_key_attributes.dart';
import 'package:ente_auth/store/authenticator_db.dart';
import 'package:ente_auth/utils/lock_screen_settings.dart';
import 'package:ente_crypto_dart/ente_crypto_dart.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:logging/logging.dart';
@@ -140,6 +141,7 @@ class Configuration {
iOptions: _secureStorageOptionsIOS,
);
}
await LockScreenSettings.instance.removePinAndPassword();
await AuthenticatorDB.instance.clearTable();
_key = null;
_cachedToken = null;
@@ -283,9 +285,20 @@ class Configuration {
Future<void> recover(String recoveryKey) async {
// check if user has entered mnemonic code
if (recoveryKey.contains(' ')) {
if (recoveryKey.split(' ').length != mnemonicKeyWordCount) {
final split = recoveryKey.split(' ');
if (split.length != mnemonicKeyWordCount) {
String wordThatIsFollowedByEmptySpaceInSplit = '';
for (int i = 0; i < split.length; i++) {
String word = split[i];
if (word.isEmpty) {
wordThatIsFollowedByEmptySpaceInSplit =
'\n\nExtra space after word at position $i';
break;
}
}
throw AssertionError(
'recovery code should have $mnemonicKeyWordCount words',
'\nRecovery code should have $mnemonicKeyWordCount words, '
'found ${split.length} words instead.$wordThatIsFollowedByEmptySpaceInSplit',
);
}
recoveryKey = bip39.mnemonicToEntropy(recoveryKey);
@@ -469,7 +482,13 @@ class Configuration {
await _preferences.setBool(hasOptedForOfflineModeKey, true);
}
bool shouldShowLockScreen() {
Future<bool> shouldShowLockScreen() async {
final bool isPin = await LockScreenSettings.instance.isPinSet();
final bool isPass = await LockScreenSettings.instance.isPasswordSet();
return isPin || isPass || shouldShowSystemLockScreen();
}
bool shouldShowSystemLockScreen() {
if (_preferences.containsKey(keyShouldShowLockScreen)) {
return _preferences.getBool(keyShouldShowLockScreen)!;
} else {
@@ -477,7 +496,7 @@ class Configuration {
}
}
Future<void> setShouldShowLockScreen(bool value) {
Future<void> setSystemLockScreen(bool value) {
return _preferences.setBool(keyShouldShowLockScreen, value);
}

View File

@@ -32,8 +32,6 @@ const mnemonicKeyWordCount = 24;
// https://stackoverflow.com/a/61162219
const dragSensitivity = 8;
const supportEmail = 'support@ente.io';
// Default values for various feature flags
class FFDefault {
static const bool enableStripe = true;

View File

@@ -1,10 +1,8 @@
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:dio/io.dart';
import 'package:ente_auth/core/configuration.dart';
import 'package:ente_auth/core/event_bus.dart';
import 'package:ente_auth/core/win_http_client.dart';
import 'package:ente_auth/events/endpoint_updated_event.dart';
import 'package:ente_auth/utils/package_info_util.dart';
import 'package:ente_auth/utils/platform_util.dart';
@@ -52,19 +50,6 @@ class Network {
},
),
);
if (Platform.isWindows) {
final customHttpClient = windowsHttpClient();
_enteDio.httpClientAdapter = IOHttpClientAdapter(
createHttpClient: () {
return customHttpClient;
},
);
_dio.httpClientAdapter = IOHttpClientAdapter(
createHttpClient: () {
return customHttpClient;
},
);
}
_setupInterceptors(endpoint);
Bus.instance.on<EndpointUpdatedEvent>().listen((event) {

View File

@@ -1,20 +1,46 @@
// Inspired from https://github.com/netfarm/lehttp_overrides
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:logging/logging.dart';
// expired
const String kSha1DstX3 = 'DAC9024F54D8F6DF94935FB1732638CA6AD77C13';
/*
Reference from
https://github.com/realm/realm-dart/blob/main/packages/realm_dart/lib/src/handles/native/default_client.dart
https://github.com/realm/realm-dart/pull/1378
*/
HttpClient windowsHttpClient() {
final logger = Logger("WindowsHttpClient");
const isrgRootX1CertPEM = // The root certificate used by lets encrypt
'''
subject=CN=ISRG Root X1,O=Internet Security Research Group,C=US
issuer=CN=DST Root CA X3,O=Digital Signature Trust Co.
-----BEGIN CERTIFICATE-----
// ISRG Root X1
const String kIsrgRootX1 = '''-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
-----END CERTIFICATE-----''';
const String kIsrgRootX1Alt = '''-----BEGIN CERTIFICATE-----
MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTIxMDEyMDE5MTQwM1oXDTI0MDkzMDE4MTQwM1ow
@@ -44,28 +70,77 @@ MA0GCSqGSIb3DQEBCwUAA4IBAQAKcwBslm7/DlLQrt2M51oGrS+o44+/yQoDFVDC
WCLKTVXkcGdtwlfFRjlBz4pYg1htmf5X6DYO8A4jqv2Il9DjXA6USbW1FzXSLr9O
he8Y4IWS6wY7bCkjCWDcRQJMEhg76fsO3txE+FiYruq9RUWhiF1myv4Q6W+CyBFC
Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5
-----END CERTIFICATE-----''';
-----END CERTIFICATE-----
''';
if (Platform.isWindows) {
final context = SecurityContext(withTrustedRoots: true);
try {
logger.info('Adding certificate to trusted certificates');
context.setTrustedCertificatesBytes(
const AsciiEncoder().convert(isrgRootX1CertPEM),
);
logger.info("Certificate added to trusted certificates");
return HttpClient(context: context);
} on TlsException catch (e) {
logger.warning(
"Error adding certificate to trusted certificates: ${e.osError?.message}",
);
// certificate is already trusted. Nothing to do here
if (e.osError?.message.contains("CERT_ALREADY_IN_HASH_TABLE") != true) {
rethrow;
} else {
return HttpClient();
}
}
const String kLetsEncryptCert = '''-----BEGIN CERTIFICATE-----
MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw
WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP
R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx
sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm
NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg
Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG
/kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC
AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB
Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA
FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw
AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw
Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB
gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W
PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl
ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz
CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm
lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4
avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2
yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O
yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids
hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+
HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv
MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX
nLRbwHOoq7hHwg==
-----END CERTIFICATE-----
''';
String _hexConverter(Uint8List bytes) {
final StringBuffer buffer = StringBuffer();
for (int part in bytes) {
buffer.write('${part < 16 ? '0' : ''}${part.toRadixString(16)}');
}
return buffer.toString().toUpperCase();
}
class WindowsHttpOverrides extends HttpOverrides {
static bool? _initRootCert;
final bool allowExpiredDSTX3;
static bool _addRootCert() {
if (Platform.isWindows) {
final List<int> cert = ascii.encode(kIsrgRootX1);
SecurityContext.defaultContext.setTrustedCertificatesBytes(cert);
final List<int> certAlt = ascii.encode(kIsrgRootX1Alt);
SecurityContext.defaultContext.setTrustedCertificatesBytes(certAlt);
final List<int> certAlt2 = ascii.encode(kLetsEncryptCert);
SecurityContext.defaultContext.setTrustedCertificatesBytes(certAlt2);
}
return true;
}
WindowsHttpOverrides({this.allowExpiredDSTX3 = false}) {
_initRootCert ??= _addRootCert();
}
@override
HttpClient createHttpClient(SecurityContext? context) {
final HttpClient client = super.createHttpClient(context);
if (allowExpiredDSTX3) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) =>
_hexConverter(cert.sha1) == kSha1DstX3;
}
return client;
}
throw UnsupportedError("This platform is not supported");
}

View File

@@ -6,11 +6,11 @@
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "النسخ الاحتياطي لأوامر 2FA",
"onBoardingGetStarted": "إبدأ الآن",
"onBoardingBody": "النسخ الاحتياطي لشيفرات الاستيثاق ذي العاملين",
"onBoardingGetStarted": "ابدأ الآن",
"setupFirstAccount": "إعداد الحساب الأول الخاص بك",
"importScanQrCode": "مسح رمز QR",
"qrCode": "رمز QR",
"importScanQrCode": "مسح شيفرة الاستجابة السريعة",
"qrCode": "شيفرة الاستجابة السريعة",
"importEnterSetupKey": "أدخِل مفتاح الإعداد",
"importAccountPageTitle": "أدخل تفاصيل الحساب",
"secretCanNotBeEmpty": "لا يمكن أن يكون رمز السر فارغ",
@@ -20,6 +20,8 @@
"codeIssuerHint": "المصدِّر",
"codeSecretKeyHint": "الرمز السري",
"codeAccountHint": "الحساب (you@domain.com)",
"codeTagHint": "وسم",
"accountKeyType": "نوع المفتاح",
"sessionExpired": "انتهت صلاحية الجلسة",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
@@ -31,10 +33,10 @@
"saveAction": "حفظ",
"nextTotpTitle": "التالي",
"deleteCodeTitle": "حذف الرمز؟",
"deleteCodeMessage": "هل أنت متأكد من أنك تريد حذف هذا الرمز ؟ هذا الإجراء لا رجعة فيه.",
"viewLogsAction": "عرض السجل",
"sendLogsDescription": "هذا سوف يرسل عبر السجلات لمساعدتنا على تصحيح مشكلتك. وبينما نتخذ الاحتياطات لضمان عدم تسجيل المعلومات الحساسة، نشجعك على رؤية هذه السجلات قبل تقاسمها.",
"preparingLogsTitle": "جاري إعداد السجلات...",
"deleteCodeMessage": "هل أنت متأكد من أنك تريد حذف هذه الشيفرة؟ هذا الإجراء لا رجعة فيه.",
"viewLogsAction": "عرض السجلات",
"sendLogsDescription": "سوف يُرسل هذا السجلات لنا لمساعدتنا على تصحيح مشكلتك. بينما نتخذ الاحتياطات لضمان عدم تسجيل المعلومات الحساسة، نشجعك على رؤية هذه السجلات قبل مشاركتها.",
"preparingLogsTitle": "جارٍ إعداد السجلات...",
"emailLogsTitle": "سجلات البريد الإلكتروني",
"emailLogsMessage": "الرجاء إرسال السجلات إلى {email}",
"@emailLogsMessage": {
@@ -69,21 +71,23 @@
"useRecoveryKey": "استخدم مفتاح الاسترداد",
"incorrectPasswordTitle": "كلمة المرور غير صحيحة",
"welcomeBack": "مرحبًا مجددًا!",
"madeWithLoveAtPrefix": "مصنوعة مع ❤️ في ",
"madeWithLoveAtPrefix": "مصنوعة بـ❤️ في ",
"supportDevs": "اشترك في <bold-green>ente</bold-green> لدعمنا",
"supportDiscount": "استخدم رمز القسيمة \"AUTH\" للحصول على 10% خصم من السنة الأولى",
"changeEmail": "تغيير البريد الإلكتروني",
"changePassword": "تغيير كلمة المرور",
"changeEmail": "غير البريد الإلكتروني",
"changePassword": "غير كلمة المرور",
"data": "البيانات",
"importCodes": "رمزالاستيراد",
"importTypePlainText": "نص عادي",
"importCodes": "استورد شيفرات",
"importTypePlainText": "نص بسيط",
"importTypeEnteEncrypted": "تصدير Ente Ecrypted",
"passwordForDecryptingExport": "كلمة المرور لفك تشفير التصدير",
"passwordEmptyError": "لا يمكن أن تكون كلمة المرور فارغة",
"importFromApp": "استيراد الرموز من {appName}",
"importGoogleAuthGuide": "قم بتصدير حساباتك من Google Authenticator إلى رمز QR code باستخدام خيار \"Transfer Accounts\" ثم استخدم جهازًا آخر لمسح رمز الاستجابة السريعة ضوئيًا.\n\nنصيحة: يمكنك استخدام كاميرا الويب الخاصة بالكمبيوتر المحمول لالتقاط صورة لرمز الاستجابة السريعة.",
"importSelectJsonFile": "حدد ملف JSON",
"importSelectAppExport": "حدد ملف التصدير {appName}",
"importRaivoGuide": "استخدم خيار تصدير OTP إلى أرشيف Zip في إعدادات Raivo.\n\nاستخرج ملف zip واسترد ملف JSON.",
"importFromApp": "استورد الشيفرات من {appName}",
"importGoogleAuthGuide": "صدر حساباتك من Google Authenticator إلى شيفرة استجابة سريعة باستخدام خيار \"نقل الحسابات\" ثم استخدم جهازًا آخر لمسح شيفرة الاستجابة السريعة ضوئيًا.\n\nنصيحة: يمكنك استخدام كاميرا الشبكة الخاصة بحاسوبك المحمول لالتقاط صورة لشيفرة الاستجابة السريعة.",
"importSelectJsonFile": "انتقِ ملف JSON",
"importSelectAppExport": "حدد ملف التصدير الخاص بـ{appName}",
"importEnteEncGuide": "اختر ملف JSON المشفر المصدَّر من Ente",
"importRaivoGuide": "استخدم خيار \"صدر كلمات المرور لمرة واحدة إلى أرشيف Zip\" في إعدادات Raivo.\n\nاستخرج ملف الـzip واسترد ملف الـJSON.",
"importBitwardenGuide": "استخدم خيار \"تصدير خزانة\" داخل أدوات Bitwarden واستيراد ملف JSON غير مشفر.",
"importAegisGuide": "استخدم خيار \"Export the vault\" في إعدادات Aegis.\n\nإذا كان المخزن الخاص بك مشفرًا، فستحتاج إلى إدخال كلمة مرور المخزن لفك تشفير المخزن.",
"import2FasGuide": "استخدم خيار \"الإعدادات -> النسخ الاحتياطي - التصدير\" في 2FAS.\n\nإذا تم تشفير النسخة الاحتياطية، سوف تحتاج إلى إدخال كلمة المرور لفك تشفير النسخة الاحتياطية",
@@ -112,18 +116,22 @@
"copied": "تم النسخ",
"pleaseTryAgain": "حاول مرة اخرى",
"existingUser": "المستخدم موجود",
"newUser": "جديد في Ente",
"delete": "حذف",
"enterYourPasswordHint": "أدخل كلمة المرور الخاصة بك",
"forgotPassword": "هل نسيت كلمة المرور",
"oops": "عذرًا",
"suggestFeatures": "اقتراح ميزة",
"faq": "الأسئلة الأكثر شيوعاً",
"faq_q_1": "إلى أي مدى Auth آمن؟",
"faq_a_1": "كل الشيفرات التي تنسخها احتياطيا بواسطة Auth تخزن مشفرة من الطرفين. يعني هذا أنك وحدك من يمكنك الوصول لشيفراتك. تطبيقاتنا مفتوحة المصدر وتشفيرنا تم اختباره من جهات خارجية.",
"faq_q_2": "هل يمكنني الوصول إلى رموزي على سطح المكتب؟",
"faq_a_2": "يمكنك الوصول إلى رموزك على الويب @ auth.ente.io.",
"faq_q_3": "كيف يمكنني حذف الرموز؟",
"faq_a_3": "يمكنك حذف الرمز عن طريق السحب لليسار على هذا العنصر.",
"faq_q_4": "كيف يمكنني دعم هذا المشروع؟",
"faq_a_4": "يمكنك دعم تطوير هذا المشروع عن طريق الاشتراك في تطبيق الصور @ ente.io.",
"faq_q_5": "كيف يمكنني تفعيل قفل FaceID في Auth",
"faq_a_5": "يمكنك تمكين قفل FaceID تحت الإعدادات => الحماية => قفل الشاشة.",
"somethingWentWrongMessage": "حدث خطأ ما، يرجى المحاولة مرة أخرى",
"leaveFamily": "مغادرة خطة العائلة",
@@ -150,6 +158,7 @@
}
}
},
"invalidQRCode": "شيفرة استجابة سريعة غير صالحة",
"noRecoveryKeyTitle": "لا يوجد مفتاح استرجاع؟",
"enterEmailHint": "أدخل عنوان البريد الإلكتروني الخاص بك",
"invalidEmailTitle": "عنوان البريد الإلكتروني غير صالح",
@@ -194,6 +203,8 @@
"saveKey": "حفظ المفتاح",
"save": "حفظ",
"send": "إرسال",
"saveOrSendDescription": "هل تريد حفظه إلى السعة التخزينية الخاصة بك (مجلد التنزيلات افتراضيا) أم إرساله إلى تطبيقات أخرى؟",
"saveOnlyDescription": "هل تريد حفظه إلى السعة التخزينية الخاصة بك (مجلد التنزيلات افتراضيا)؟",
"back": "الرجوع",
"createAccount": "إنشاء حساب",
"passwordStrength": "قوة كلمة المرور: {passwordStrengthValue}",
@@ -252,12 +263,15 @@
"exportLogs": "تصدير السجلات",
"enterYourRecoveryKey": "أدخل رمز الاسترداد",
"tempErrorContactSupportIfPersists": "يبدو أنه حدث خطأ ما. الرجاء إعادة المحاولة لاحقا. إذا استمر الخطأ، يرجى الاتصال بفريق الدعم.",
"networkHostLookUpErr": "تعذر الاتصال بـEnte، فضلا تحقق من إعدادات الشبكة الخاصة بك وتواصل مع الدعم إذا استمر الخطأ.",
"networkConnectionRefusedErr": "تعذر الإتصال بـEnte، فضلا أعد المحاولة لاحقا. إذا استمر الخطأ، فضلا تواصل مع الدعم.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "يبدو أنه حدث خطأ ما. الرجاء إعادة المحاولة لاحقا. إذا استمر الخطأ، يرجى الاتصال بفريق الدعم.",
"about": "حول",
"weAreOpenSource": "الخدمة مفتوحة المصدر!",
"privacy": "الخصوصية",
"terms": "الشروط",
"checkForUpdates": "بحث عن تحديثات",
"checkStatus": "تحقق من الحالة",
"downloadUpdate": "تحميل",
"criticalUpdateAvailable": "تحديث حاسم متوفر",
"updateAvailable": "التحديث متاح",
@@ -341,6 +355,7 @@
"deleteCodeAuthMessage": "المصادقة لحذف الرمز",
"showQRAuthMessage": "المصادقة لإظهار رمز QR",
"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."
@@ -401,6 +416,55 @@
"doNotSignOut": "لا تقم بتسجيل الخروج",
"hearUsWhereTitle": "كيف سمعت عن Ente؟ (اختياري)",
"hearUsExplanation": "نحن لا نتتبع تثبيت التطبيق. سيكون من المفيد إذا أخبرتنا أين وجدتنا!",
"recoveryKeySaved": "حُفِظ مفتاح الاستعادة في مجلد التنزيلات!",
"waitingForBrowserRequest": "بانتظار طلب المتصفح...",
"waitingForVerification": "بانتظار التحقق...",
"passkey": "مفتاح المرور",
"developerSettings": "اعدادات المطور"
"passKeyPendingVerification": "التحقق ما زال جارٍ",
"loginSessionExpired": "انتهت صلاحية الجلسة",
"loginSessionExpiredDetails": "انتهت صلاحية جلستك. فضلا أعد تسجيل الدخول.",
"developerSettingsWarning": "هل أنت متأكد أنك تريد تعديل خيارات المطور؟",
"developerSettings": "اعدادات المطور",
"serverEndpoint": "نقطة طرف الخادم",
"invalidEndpoint": "نقطة طرف غير صالحة",
"invalidEndpointMessage": "عذرا، نقطة الطرف التي أدخلتها غير صالحة. فضلا أدخل نقطة طرف صالحة وأعد المحاولة.",
"endpointUpdatedMessage": "حُدِّثَت نقطة الطرف بنجاح",
"customEndpoint": "متصل بـ{endpoint}",
"pinText": "ثبت",
"unpinText": "ألغِ التثبيت",
"pinnedCodeMessage": "ثُبِّت {code}",
"unpinnedCodeMessage": "أُلغِي تثبيت {code}",
"tags": "الأوسمة",
"createNewTag": "أنشيء وسم جديد",
"tag": "وسم",
"create": "أنشيء",
"editTag": "حرر الوسم",
"deleteTagTitle": "حذف الوسم؟",
"deleteTagMessage": "هل أنت متأكد أنك تريد حذف هذا الوسم؟ لا يمكن عكس هذا الإجراء.",
"somethingWentWrongParsingCode": "تعذر علينا إعراب أكواد {x}.",
"updateNotAvailable": "التحديث غير متاح",
"viewRawCodes": "عرض الشيفرات الأصلية",
"rawCodes": "الشيفرات الأصلية",
"rawCodeData": "بيانات الشيفرات الأصلية",
"appLock": "قفل التطبيق",
"noSystemLockFound": "لا يوجد قفل نظام",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "لتمكين قفل التطبيق، فضلا أعد شيفرة مرور الجهاز أو قفل الشاشة في إعدادات نظامك.",
"autoLock": "قفل تلقائي",
"immediately": "فورًا",
"reEnterPassword": "أعد إدخال كلمة المرور",
"reEnterPin": "أعد إدخال رقم التعريف الشخصي",
"next": "التالي",
"tooManyIncorrectAttempts": "محاولات خاطئة أكثر من المسموح",
"tapToUnlock": "المس لإلغاء القفل",
"setNewPassword": "عين كلمة مرور جديدة",
"deviceLock": "قفل الجهاز",
"hideContent": "أخفِ المحتوى",
"hideContentDescriptionAndroid": "يخفي محتوى التطبيق في مبدل التطبيقات ويمنع لقطات الشاشة",
"hideContentDescriptioniOS": "يخفي محتوى التطبيق في مبدل التطبيقات",
"autoLockFeatureDescription": "الوقت الذي بعده ينقفل التطبيق بعدما يوضع في الخلفية",
"appLockDescription": "اختر بين شاشة القفل الافتراضية الخاصة بجهازك وشاشة قفل مخصصة برقم تعريف شخصي أو كلمة مرور.",
"pinLock": "قفل رقم التعريف الشخصي",
"enterPin": "أدخل رقم التعريف الشخصي",
"setNewPin": "عين رقم تعريف شخصي جديد",
"importFailureDescNew": "تعذر إعراب الملف المنتقى."
}

View File

@@ -0,0 +1,26 @@
{
"account": "Compte",
"unlock": "Desbloqueja",
"recoveryKey": "Clau de recuperació",
"counterAppBarTitle": "Comptador",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingGetStarted": "Primers passos",
"qrCode": "Codi QR",
"codeTagHint": "Etiqueta",
"accountKeyType": "Tipus de clau",
"sessionExpired": "La sessió ha caducat",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Torna a iniciar sessió",
"verifyPassword": "Verifica la contrasenya",
"pleaseWait": "Si us plau, espera...",
"incorrectPasswordTitle": "Contrasenya incorrecta",
"welcomeBack": "Benvingut de nou!",
"madeWithLoveAtPrefix": "fet amb ❤️ a ",
"changeEmail": "Canvia el correu electrònic",
"changePassword": "Canvia la contrasenya",
"importTypePlainText": "Text pla"
}

View File

@@ -9,7 +9,7 @@
"onBoardingBody": "Sichern Sie Ihre 2FA-Codes",
"onBoardingGetStarted": "Los geht's",
"setupFirstAccount": "Ihr erstes Konto einrichten",
"importScanQrCode": "Scannen eines QR-Codes",
"importScanQrCode": "QR-Code scannen",
"qrCode": "QR-Code",
"importEnterSetupKey": "Einen Setup-Schlüssel eingeben",
"importAccountPageTitle": "Kontodaten eingeben",
@@ -31,7 +31,7 @@
"timeBasedKeyType": "Zeitbasiert (TOTP)",
"counterBasedKeyType": "Zählerbasiert (HOTP)",
"saveAction": "Speichern",
"nextTotpTitle": "Weiter",
"nextTotpTitle": "Nächster Code",
"deleteCodeTitle": "Code löschen?",
"deleteCodeMessage": "Sind Sie sicher, dass Sie diesen Code löschen wollen? Diese Aktion ist unumkehrbar.",
"viewLogsAction": "Protokolle anzeigen",
@@ -139,7 +139,7 @@
"inFamilyPlanMessage": "Sie haben einen Familien-Plan!",
"swipeHint": "Wischen Sie nach links, um Codes zu bearbeiten oder zu entfernen",
"scan": "Scannen",
"scanACode": "Scannen eines Codes",
"scanACode": "Scan einen Code",
"verify": "Überprüfen Sie",
"verifyEmail": "E-Mail-Adresse verifizieren",
"enterCodeHint": "Geben Sie den 6-stelligen Code \naus Ihrer Authentifikator-App ein.",
@@ -263,6 +263,8 @@
"exportLogs": "Logs exportieren",
"enterYourRecoveryKey": "Wiederherstellungsschlüssel eingeben",
"tempErrorContactSupportIfPersists": "Etwas ist schiefgelaufen. Bitte versuchen sie es später noch einmal. Sollte der Fehler weiter bestehen, kontaktieren sie unser Supportteam.",
"networkHostLookUpErr": "Ente ist im Moment nicht erreichbar. Bitte überprüfen Sie Ihre Netzwerkeinstellungen. Sollte das Problem bestehen bleiben, wenden Sie sich bitte an den Support.",
"networkConnectionRefusedErr": "Ente ist im Moment nicht erreichbar. Bitte versuchen Sie es später erneut. Sollte das Problem bestehen bleiben, wenden Sie sich bitte an den Support.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Etwas ist schiefgelaufen. Bitte versuchen sie es später noch einmal. Sollte der Fehler weiter bestehen, kontaktieren sie unser Supportteam.",
"about": "Über uns",
"weAreOpenSource": "Wir sind Opensource!",

View File

@@ -0,0 +1,466 @@
{
"account": "Λογαριασμός",
"unlock": "Ξεκλείδωμα",
"recoveryKey": "Κλειδί ανάκτησης",
"counterAppBarTitle": "Μετρητής",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Δημιουργήστε αντίγραφο ασφαλείας των 2FA κωδικών σας",
"onBoardingGetStarted": "Ας Αρχίσουμε",
"setupFirstAccount": "Ρυθμίστε τον πρώτο σας λογαριασμό",
"importScanQrCode": "Σαρώστε έναν κωδικό QR",
"qrCode": "Κωδικός QR",
"importEnterSetupKey": "Εισάγετε ένα κλειδί ρύθμισης",
"importAccountPageTitle": "Εισαγωγή στοιχείων λογαριασμού",
"secretCanNotBeEmpty": "Το μυστικό δεν μπορεί να είναι κενό",
"bothIssuerAndAccountCanNotBeEmpty": "Τόσο ο εκδότης όσο και ο λογαριασμός δεν μπορούν να είναι κενά",
"incorrectDetails": "Λανθασμένα στοιχεία",
"pleaseVerifyDetails": "Παρακαλούμε επιβεβαιώστε τα στοιχεία σας και προσπαθήστε ξανά",
"codeIssuerHint": "Εκδότης",
"codeSecretKeyHint": "Μυστικό Κλειδί",
"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": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτόν τον κωδικό; Αυτή η ενέργεια είναι μη αναστρέψιμη.",
"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": "Καλωσορίσατε και πάλι!",
"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": "Επιλέξτε το κρυπτογραφημένο αρχείο JSON που εξήχθη από το Ente",
"importRaivoGuide": "Χρησιμοποιήστε την επιλογή \"Export OTPs to Zip archive\" στις Ρυθμίσεις του Raivo.\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": "Για να αποφύγετε να κλειδωθείτε έξω από τον λογαριασμό σας, φροντίστε να αποθηκεύσετε ένα αντίγραφο του 2FA του ηλ. ταχυδρομείου σας έξω από το Ente Auth πριν ενεργοποιήσετε την επαλήθευση μέσω ηλ. ταχυδρομείου.",
"authToChangeEmailVerificationSetting": "Παρακαλώ πραγματοποιήστε έλεγχο ταυτότητας για να αλλάξετε την επαλήθευση ηλ. ταχυδρομείου",
"authToViewYourRecoveryKey": "Παρακαλώ πραγματοποιήστε έλεγχο ταυτότητας για να δείτε το κλειδί ανάκτησης",
"authToChangeYourEmail": "Παρακαλώ πραγματοποιήστε έλεγχο ταυτότητας για να αλλάξετε τη διεύθυνση ηλ. ταχυδρομείου σας",
"authToChangeYourPassword": "Παρακαλώ πραγματοποιήστε έλεγχο ταυτότητας για να αλλάξετε τον κωδικό πρόσβασής σας",
"authToViewSecrets": "Παρακαλώ πραγματοποιήστε έλεγχο ταυτότητας για να δείτε τα μυστικά σας",
"authToInitiateSignIn": "Παρακαλώ πραγματοποιήστε έλεγχο ταυτότητας για να ξεκινήσετε την είσοδο για δημιουργία αντιγράφου ασφαλείας.",
"ok": "Οκ",
"cancel": "Ακύρωση",
"yes": "Ναι",
"no": "Όχι",
"email": "Διεύθυνση ηλ. ταχυδρομείου",
"support": "Υποστήριξη",
"general": "Γενικά",
"settings": "Ρυθμίσεις",
"copied": "Αντιγράφηκε",
"pleaseTryAgain": "Παρακαλώ δοκιμάστε ξανά",
"existingUser": "Υπάρχων Χρήστης",
"newUser": "Νέος/α στο Ente",
"delete": "Διαγραφή",
"enterYourPasswordHint": "Εισάγετε τον κωδικό πρόσβασης σας",
"forgotPassword": "Ξέχασα τον κωδικό πρόσβασης σας",
"oops": "Ουπς",
"suggestFeatures": "Προτείνετε λειτουργίες",
"faq": "Συχνές Ερωτήσεις",
"faq_q_1": "Πόσο ασφαλής είναι το Auth;",
"faq_a_1": "Όλοι οι κωδικοί που δημιουργείτε μέσω του Auth αποθηκεύονται κρυπτογραφημένοι από άκρο σε άκρο. Αυτό σημαίνει ότι μόνο εσείς μπορείτε να έχετε πρόσβαση στους κωδικούς σας. Οι εφαρμογές μας είναι ανοικτού κώδικα και η κρυπτογραφία μας έχει ελεγχθεί εξωτερικά.",
"faq_q_2": "Μπορώ να έχω πρόσβαση στους κωδικούς μου στον υπολογιστή;",
"faq_a_2": "Μπορείτε να αποκτήσετε πρόσβαση στους κωδικούς σας στο ίντερνετ @ auth.ente.io.",
"faq_q_3": "Πώς μπορώ να διαγράψω κωδικούς;",
"faq_a_3": "Μπορείτε να διαγράψετε έναν κωδικό σύροντας αριστερά σε αυτό το αντικείμενο.",
"faq_q_4": "Πώς μπορώ να υποστηρίξω αυτό το πρότζεκτ;",
"faq_a_4": "Μπορείτε να υποστηρίξετε την ανάπτυξη αυτού του πρότζεκτ με την εγγραφή σας στην εφαρμογή Photos @ ente.io.",
"faq_q_5": "Πώς μπορώ να ενεργοποιήσω το Κλείδωμα FaceID στο Auth",
"faq_a_5": "Μπορείτε να ενεργοποιήσετε το κλείδωμα FaceID στις Ρυθμίσεις → Ασφάλεια → Οθόνη κλειδώματος.",
"somethingWentWrongMessage": "Κάτι πήγε στραβά, παρακαλώ προσπαθήστε ξανά",
"leaveFamily": "Αποχώρηση από οικογένεια",
"leaveFamilyMessage": "Είστε σίγουροι ότι θέλετε να φύγετε από το οικογενειακό πρόγραμμα;",
"inFamilyPlanMessage": "Είστε σε οικογενειακό πρόγραμμα!",
"swipeHint": "Σύρετε αριστερά για επεξεργασία ή αφαίρεση κωδικών",
"scan": "Σάρωση",
"scanACode": "Σάρωση κωδικού",
"verify": "Επαλήθευση",
"verifyEmail": "Επιβεβαίωση διεύθυνσης ηλ. ταχυδρομείου",
"enterCodeHint": "Εισάγετε τον 6ψήφιο κωδικό από \nτην εφαρμογή αυθεντικοποίησης",
"lostDeviceTitle": "Χαμένη συσκευή;",
"twoFactorAuthTitle": "Αυθεντικοποίηση δύο παραγόντων",
"passkeyAuthTitle": "Επιβεβαίωση κλειδιού πρόσβασης",
"verifyPasskey": "Επιβεβαίωση κλειδιού πρόσβασης",
"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": "Παρακαλώ πραγματοποιήστε έλεγχο ταυτότητας για να αλλάξετε τις ρυθμίσεις οθόνης κλειδώματος",
"lockScreenEnablePreSteps": "Για να ενεργοποιήσετε την οθόνη κλειδώματος, παρακαλώ ορίστε τον κωδικό πρόσβασης της συσκευής ή το κλείδωμα οθόνης στις ρυθμίσεις του συστήματός σας.",
"viewActiveSessions": "Προβολή ενεργών συνεδριών",
"authToViewYourActiveSessions": "Παρακαλώ πραγματοποιήστε έλεγχο ταυτότητας για να δείτε τις ενεργές συνεδρίες σας",
"searchHint": "Αναζήτηση...",
"search": "Αναζήτηση",
"sorryUnableToGenCode": "Λυπούμαστε, δεν είναι δυνατή η δημιουργία κωδικού για το {issuerName}",
"noResult": "Κανένα αποτέλεσμα",
"addCode": "Προσθήκη κωδικού",
"scanAQrCode": "Σαρώστε έναν κωδικό QR",
"enterDetailsManually": "Χειροκίνητη εισαγωγή στοιχείων",
"edit": "Επεξεργασία",
"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": "Κωδικόs πρόσβασης",
"signUpTerms": "Συμφωνώ με τους <u-terms>όρους χρήσης</u-terms> και την <u-policy>πολιτική απορρήτου</u-policy>",
"privacyPolicyTitle": "Πολιτική Απορρήτου",
"termsOfServicesTitle": "Όροι",
"encryption": "Kρυπτογράφηση",
"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": "Εξοδος",
"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"
}
}
},
"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": "Εμφάνιση μεγάλων εικονιδίων",
"shouldHideCode": "Απόκρυψη κωδικών",
"doubleTapToViewHiddenCode": "Μπορείτε να πατήσετε δύο φορές σε μια καταχώρηση για να δείτε τον κωδικό",
"focusOnSearchBar": "Εστίαση στην αναζήτηση κατά την εκκίνηση εφαρμογής",
"confirmUpdatingkey": "Είστε σίγουροι ότι θέλετε να ενημερώσετε το μυστικό κλειδί;",
"minimizeAppOnCopy": "Ελαχιστοποίηση εφαρμογής κατά την αντιγραφή",
"editCodeAuthMessage": "Πραγματοποιήστε έλεγχο ταυτότητας για να επεξεργαστείτε τον κωδικό",
"deleteCodeAuthMessage": "Πραγματοποιήστε έλεγχο ταυτότητας για να διαγράψετε τον κωδικό",
"showQRAuthMessage": "Πραγματοποιήστε έλεγχο ταυτότητας για να δείτε τον κωδικό QR",
"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": "Η βιομετρική ταυτοποίηση δεν έχει ρυθμιστεί στη συσκευή σας. Παρακαλώ ενεργοποιήστε το Touch ID ή το Face 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} ξεκαρφιτσώθηκε",
"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": "Απόκρυψη περιεχομένου",
"pinLock": "Κλείδωμα καρφιτσωμάτων",
"enterPin": "Εισαγωγή PIN",
"setNewPin": "Ορίστε νέο PIN",
"importFailureDescNew": "Αδυναμία ανάλυσης του επιλεγμένου αρχείου."
}

View File

@@ -421,9 +421,9 @@
"waitingForVerification": "Waiting for verification...",
"passkey": "Passkey",
"passKeyPendingVerification": "Verification is still pending",
"loginSessionExpired" : "Session expired",
"loginSessionExpired": "Session expired",
"loginSessionExpiredDetails": "Your session has expired. Please login again.",
"developerSettingsWarning":"Are you sure that you want to modify Developer settings?",
"developerSettingsWarning": "Are you sure that you want to modify Developer settings?",
"developerSettings": "Developer settings",
"serverEndpoint": "Server endpoint",
"invalidEndpoint": "Invalid endpoint",
@@ -442,5 +442,29 @@
"deleteTagTitle": "Delete tag?",
"deleteTagMessage": "Are you sure you want to delete this tag? This action is irreversible.",
"somethingWentWrongParsingCode": "We were unable to parse {x} codes.",
"updateNotAvailable": "Update not available"
"updateNotAvailable": "Update not available",
"viewRawCodes": "View raw codes",
"rawCodes": "Raw codes",
"rawCodeData": "Raw code data",
"appLock": "App lock",
"noSystemLockFound": "No system lock found",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.",
"autoLock": "Auto lock",
"immediately": "Immediately",
"reEnterPassword": "Re-enter password",
"reEnterPin": "Re-enter PIN",
"next": "Next",
"tooManyIncorrectAttempts": "Too many incorrect attempts",
"tapToUnlock": "Tap to unlock",
"setNewPassword": "Set new password",
"deviceLock": "Device lock",
"hideContent": "Hide content",
"hideContentDescriptionAndroid": "Hides app content in the app switcher and disables screenshots",
"hideContentDescriptioniOS": "Hides app content in the app switcher",
"autoLockFeatureDescription": "Time after which the app locks after being put in the background",
"appLockDescription": "Choose between your device's default lock screen and a custom lock screen with a PIN or password.",
"pinLock": "Pin lock",
"enterPin": "Enter PIN",
"setNewPin": "Set new PIN",
"importFailureDescNew": "Could not parse the selected file."
}

View File

@@ -20,6 +20,8 @@
"codeIssuerHint": "Emisor",
"codeSecretKeyHint": "Llave Secreta",
"codeAccountHint": "Cuenta (tu@dominio.com)",
"codeTagHint": "Marcado",
"accountKeyType": "Tipo de llave",
"sessionExpired": "La sesión ha expirado",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
@@ -77,12 +79,14 @@
"data": "Datos",
"importCodes": "Importar códigos",
"importTypePlainText": "Texto sin formato",
"importTypeEnteEncrypted": "Exportación cifrada Ente",
"passwordForDecryptingExport": "Contraseña para descifrar exportación",
"passwordEmptyError": "La contraseña no puede estar vacía",
"importFromApp": "Importar códigos de {appName}",
"importGoogleAuthGuide": "Exportar tus cuentas desde Google Authenticator a un código QR usando la opción \"Transferir Cuentas\". A continuación, usando otro dispositivo, escanee el código QR.\n\nConsejo: Puede usar la webcam de su portátil para tomar una foto del código QR.",
"importSelectJsonFile": "Seleccione el archivo JSON",
"importSelectAppExport": "Seleccione el archivo de exportación de {appName}",
"importEnteEncGuide": "Seleccione el archivo JSON cifrado exportado desde Ente",
"importRaivoGuide": "Utilice la opción \"Exportar códigos a un archivo de Zip\" en la configuración de Raivo.\n\nExtraiga el archivo zip e importe el archivo JSON.",
"importBitwardenGuide": "Use la opción \"Exportar caja fuerte\" dentro del menú Herramientas de Bitwarden e importe el fichero JSON no crifrado.",
"importAegisGuide": "Utilice la opción \"Exportar la bóveda\" en ajustes de Aegis.\n\nSi tu bóveda es cifrada, necesitara entrar contraseña de bóveda para descifrar la bóveda.",
@@ -119,12 +123,15 @@
"oops": "Ups",
"suggestFeatures": "Sugerir funcionalidades",
"faq": "Preguntas Frecuentes",
"faq_q_1": "¿Qué tan seguro es Auth?",
"faq_a_1": "Todos los códigos que copia de seguridad vía Ente se almacenan cifrados de extremo a extremo. Esto significa que solo usted puede acceder a sus códigos. Nuestras aplicaciones son de código abierto y nuestra criptografía ha sido auditada externamente.",
"faq_q_2": "¿Puedo acceder a mis códigos en el escritorio?",
"faq_a_2": "Puede acceder a tus códigos en la web en auth.ente.io.",
"faq_q_3": "¿Cómo puedo borrar códigos?",
"faq_a_3": "Puede eliminar un código deslizando a la izquierda en ese elemento.",
"faq_q_4": "¿Cómo puedo apoyar este proyecto?",
"faq_a_4": "Puedes apoyar el desarrollo de este proyecto suscribiéndote a nuestra app de Fotos en ente.io.",
"faq_q_5": "Cómo puedo habilitar bloqueo FaceID en Ente Auth",
"faq_a_5": "Puede activar el bloqueo FaceID en Ajustes → Seguridad → Pantalla de bloqueo.",
"somethingWentWrongMessage": "Algo ha ido mal, por favor, prueba otra vez",
"leaveFamily": "Dejar plan familiar",
@@ -151,6 +158,7 @@
}
}
},
"invalidQRCode": "Código QR no válido",
"noRecoveryKeyTitle": "¿Sin clave de recuperación?",
"enterEmailHint": "Introduce tu dirección de correo electrónico",
"invalidEmailTitle": "Dirección de correo electrónico no válida",
@@ -195,6 +203,8 @@
"saveKey": "Guardar Clave",
"save": "Guardar",
"send": "Enviar",
"saveOrSendDescription": "¿Desea guardar esto en el almacenamiento (carpeta Descargas por defecto) o enviarlo a otras aplicaciones?",
"saveOnlyDescription": "¿Desea guardar esto en el almacenamiento (carpeta Descargas por defecto)?",
"back": "Atrás",
"createAccount": "Crear cuenta",
"passwordStrength": "Fortaleza de la contraseña: {passwordStrengthValue}",
@@ -253,12 +263,15 @@
"exportLogs": "Exportar registros",
"enterYourRecoveryKey": "Introduzca su clave de recuperación",
"tempErrorContactSupportIfPersists": "Parece que algo salió mal. Por favor, vuelve a intentarlo después de algún tiempo. Si el error persiste, ponte en contacto con nuestro equipo de soporte.",
"networkHostLookUpErr": "No se puede conectar a Ente. Por favor, comprueba tu configuración de red y ponte en contacto con el soporte técnico si el error persiste.",
"networkConnectionRefusedErr": "No se puede conectar a Ente. Por favor, vuelve a intentarlo pasado un tiempo. Si el error persiste, ponte en contacto con el soporte técnico.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Parece que algo salió mal. Por favor, vuelve a intentarlo después de algún tiempo. Si el error persiste, ponte en contacto con nuestro equipo de soporte.",
"about": "Acerca de",
"weAreOpenSource": "¡Somos de código abierto!",
"privacy": "Privacidad",
"terms": "Términos",
"checkForUpdates": "Comprobar actualizaciones",
"checkStatus": "Comprobar estado",
"downloadUpdate": "Descargar",
"criticalUpdateAvailable": "Actualización crítica disponible",
"updateAvailable": "Actualizacion disponible",
@@ -342,6 +355,7 @@
"deleteCodeAuthMessage": "Autenticar para borrar código",
"showQRAuthMessage": "Autenticar para mostrar código QR",
"confirmAccountDeleteTitle": "Confirmar eliminación de la cuenta",
"confirmAccountDeleteMessage": "Esta cuenta está vinculada a otras aplicaciones de Ente, si utilizas alguna. Se programará la eliminación de los datos cargados en todas las aplicaciones de Ente, y tu cuenta se eliminará permanentemente.",
"androidBiometricHint": "Verificar identidad",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
@@ -402,7 +416,31 @@
"doNotSignOut": "No cerrar la sesión",
"hearUsWhereTitle": "¿Cómo conoció Ente? (opcional)",
"hearUsExplanation": "No rastreamos las aplicaciones instaladas. ¡Nos ayudaría si nos dijera dónde nos encontró!",
"recoveryKeySaved": "¡Clave de recuperación guardada en la carpeta Descargas!",
"waitingForBrowserRequest": "Esperando la solicitud del navegador...",
"waitingForVerification": "Esperando verificación...",
"passkey": "Llave de acceso",
"passKeyPendingVerification": "La verificación todavía está pendiente",
"loginSessionExpired": "La sesión ha expirado",
"loginSessionExpiredDetails": "Tu sesión ha expirado. Por favor, vuelve a iniciar sesión.",
"developerSettingsWarning": "¿Estás seguro de que quieres modificar los ajustes de desarrollador?",
"developerSettings": "Ajustes de desarrollador"
"developerSettings": "Ajustes de desarrollador",
"serverEndpoint": "Punto final del servidor",
"invalidEndpoint": "Punto final no válido",
"invalidEndpointMessage": "Lo sentimos, el punto final introducido no es válido. Por favor, introduce un punto final válido y vuelve a intentarlo.",
"endpointUpdatedMessage": "Punto final actualizado con éxito",
"customEndpoint": "Conectado a {endpoint}",
"pinText": "Fijar",
"unpinText": "Desanclar",
"pinnedCodeMessage": "{code} ha sido anclado",
"unpinnedCodeMessage": "{code} ha sido desanclado",
"tags": "Etiquetas",
"createNewTag": "Crear Nueva Etiqueta",
"tag": "Etiqueta",
"create": "Crear",
"editTag": "Editar Etiqueta",
"deleteTagTitle": "¿Eliminar etiqueta?",
"deleteTagMessage": "¿Estás seguro de que quieres eliminar esta etiqueta? Esta acción es irreversible.",
"somethingWentWrongParsingCode": "No se han podido analizar los códigos {x}.",
"updateNotAvailable": "Actualización no disponible"
}

View File

@@ -230,5 +230,10 @@
"thisDevice": "این دستگاه",
"editCodeAuthMessage": "احراز هویت برای ویرایش کد",
"deleteCodeAuthMessage": "احراز هویت برای حذف کد",
"showQRAuthMessage": "احراز هویت برای نمایش کد QR"
"showQRAuthMessage": "احراز هویت برای نمایش کد QR",
"tags": "برچسب‌ها",
"createNewTag": "ایجاد برچسب جدید",
"tag": "برچسب",
"create": "ایجاد",
"editTag": "ویرایش برچسب"
}

View File

@@ -1,4 +1,7 @@
{
"account": "Käyttäjätili",
"unlock": "Avaa lukitus",
"recoveryKey": "Palautusavain",
"counterAppBarTitle": "Laskuri",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
@@ -7,11 +10,15 @@
"onBoardingGetStarted": "Aloitetaan",
"setupFirstAccount": "Määritä ensimmäinen tilisi",
"importScanQrCode": "Lue QR-koodi",
"qrCode": "QR-koodi",
"importEnterSetupKey": "Syötä asetusavain",
"importAccountPageTitle": "Syötä tilin tiedot",
"incorrectDetails": "Virheelliset tiedot",
"pleaseVerifyDetails": "Vahvista tietosi ja yritä uudelleen",
"codeIssuerHint": "Myöntäjä",
"codeSecretKeyHint": "Salainen avain",
"codeAccountHint": "Tili (sinun@jokinosoite.com)",
"accountKeyType": "Avaimen tyyppi",
"sessionExpired": "Istunto on vanheutunut",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
@@ -50,6 +57,7 @@
}
},
"contactSupport": "Ota yhteyttä käyttötukeen",
"blog": "Blogi",
"verifyPassword": "Vahvista salasana",
"pleaseWait": "Odota hetki...",
"generatingEncryptionKeysTitle": "Luodaan salausavaimia...",
@@ -62,21 +70,38 @@
"supportDevs": "Tilaa <bold-green>ente</bold-green> tukeaksesi tätä hanketta.",
"supportDiscount": "Käytä kuponkikoodia \"AUTH\" saadaksesi 10% alennuksen ensimmäisestä vuodesta",
"changeEmail": "vaihda sähköpostiosoitteesi",
"changePassword": "Vaihda salasana",
"importCodes": "Tuo koodit",
"importTypePlainText": "Pelkkä teksti",
"importTypeEnteEncrypted": "Ente salattu vienti",
"importSelectJsonFile": "Valitse JSON-tiedosto",
"exportCodes": "Vie koodit",
"importLabel": "Tuo",
"selectFile": "Valitse tiedosto",
"emailVerificationToggle": "Sähköpostivahvistus",
"ok": "Selvä",
"cancel": "Keskeytä",
"yes": "Kyllä",
"no": "Ei",
"email": "Sähköposti",
"support": "Tuki",
"general": "Yleiset",
"settings": "Asetukset",
"copied": "Jäljennetty",
"pleaseTryAgain": "Yritä uudestaan",
"existingUser": "Jo valmiiksi olemassaoleva käyttäjä",
"newUser": "Uusi Ente-käyttäjä",
"delete": "Poista",
"enterYourPasswordHint": "Syötä salasanasi",
"forgotPassword": "Olen unohtanut salasanani",
"oops": "Hupsista",
"suggestFeatures": "Ehdota parannuksia",
"faq": "Usein kysyttyä",
"faq_q_1": "Kuinka turvallinen Auth on?",
"faq_q_3": "Kuinka voin poistaa koodeja?",
"faq_q_4": "Kuinka voin tukea tätä projektia?",
"faq_q_5": "Miten voin ottaa käyttöön FaceID-lukituksen Authissa",
"faq_a_5": "Voit ottaa FaceID-lukituksen käyttöön kohdassa Asetukset → Turvallisuus → Lukitusnäyttö.",
"somethingWentWrongMessage": "Jokin meni pieleen, yritä uudelleen",
"leaveFamily": "Poistu perheestä",
"leaveFamilyMessage": "Oletko varma että haluat jättää tämän perhemallin?",
@@ -85,9 +110,12 @@
"scan": "Lue",
"scanACode": "Lue koodi",
"verify": "Vahvista",
"verifyEmail": "Vahvista sähköpostiosoite",
"enterCodeHint": "Syötä 6-merkkinen koodi varmennussovelluksestasi",
"lostDeviceTitle": "Kadonnut laite?",
"twoFactorAuthTitle": "Kaksivaiheinen vahvistus",
"passkeyAuthTitle": "Avainkoodin vahvistus",
"verifyPasskey": "Vahvista avainkoodi",
"recoverAccount": "Palauta tilisi",
"enterRecoveryKeyHint": "Syötä palautusavaimesi",
"recover": "Palauta",
@@ -99,6 +127,7 @@
}
}
},
"invalidQRCode": "Virheellinen QR-koodi",
"noRecoveryKeyTitle": "Ei palautusavainta?",
"enterEmailHint": "Syötä sähköpostiosoitteesi",
"invalidEmailTitle": "Epäkelpo sähköpostiosoite",
@@ -116,7 +145,65 @@
"confirmPassword": "Vahvista salasana",
"close": "Sulje",
"oopsSomethingWentWrong": "Hupsista! Jotakin meni nyt pieleen.",
"selectLanguage": "Valitse kieli",
"language": "Kieli",
"security": "Turvallisuus",
"lockscreen": "Lukitusnäyttö",
"lockScreenEnablePreSteps": "Aktivoi lukitusnäyttö ottamalla käyttöön laitteen salasana tai näytön lukitus järjestelmäasetuksissa.",
"searchHint": "Etsi...",
"search": "Etsi",
"noResult": "Ei tuloksia",
"addCode": "Lisää koodi",
"enterDetailsManually": "Syötä tiedot manuaalisesti",
"edit": "Muokkaa",
"copiedToClipboard": "Kopioitu leikepöydälle",
"copiedNextToClipboard": "Seuraava koodi kopioitu leikepöydälle",
"error": "Virhe",
"recoveryKeyCopiedToClipboard": "Palautusavain kopioitu leikepöydälle",
"recoveryKeyOnForgotPassword": "Jos unohdat salasanasi, ainoa tapa palauttaa tietosi on tällä avaimella.",
"recoveryKeySaveDescription": "Emme tallenna tätä avainta, ole hyvä ja tallenna tämä 24 sanan avain turvalliseen paikkaan.",
"doThisLater": "Tee tämä myöhemmin",
"saveKey": "Tallenna avain",
"save": "Tallenna",
"send": "Lähetä",
"back": "Takaisin",
"createAccount": "Luo tili",
"password": "Salasana",
"encryption": "Salaus",
"setPasswordTitle": "Luo salasana",
"changePasswordTitle": "Vaihda salasana",
"resetPasswordTitle": "Nollaa salasana",
"encryptionKeys": "Salausavaimet",
"passwordChangedSuccessfully": "Salasana vaihdettu onnistuneesti",
"generatingEncryptionKeys": "Luodaan salausavaimia...",
"continueLabel": "Jatka",
"logInLabel": "Kirjaudu sisään",
"logout": "Kirjaudu ulos",
"yesLogout": "Kyllä, kirjaudu ulos",
"exit": "Poistu",
"about": "Tietoa",
"weAreOpenSource": "Olemme avoimen lähdekoodin ohjelma!",
"privacy": "Yksityisyys",
"checkForUpdates": "Tarkista päivitykset",
"downloadUpdate": "Lataa",
"updateAvailable": "Päivitys saatavilla",
"warning": "Varoitus",
"enterPassword": "Syötä salasana",
"singIn": "Kirjaudu sisään",
"shouldHideCode": "Piilota koodit",
"editCodeAuthMessage": "Autentikoidu muokataksesi koodia",
"deleteCodeAuthMessage": "Autentikoidu poistaaksesi koodin",
"showQRAuthMessage": "Autentikoidu näyttääksesi QR-koodin"
"showQRAuthMessage": "Autentikoidu näyttääksesi QR-koodin",
"androidBiometricSuccess": "Kirjautuminen onnistui",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "Peruuta",
"@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."
},
"goToSettings": "Mene asetuksiin",
"@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."
}
}

View File

@@ -263,12 +263,15 @@
"exportLogs": "Exporter les journaux",
"enterYourRecoveryKey": "Entrez votre clé de récupération",
"tempErrorContactSupportIfPersists": "Il semble qu'une erreur s'est produite. Veuillez réessayer après un certain temps. Si l'erreur persiste, veuillez contacter notre équipe d'assistance.",
"networkHostLookUpErr": "Impossible de se connecter à Ente, veuillez vérifier vos paramètres réseau et contacter le support si l'erreur persiste.",
"networkConnectionRefusedErr": "Impossible de se connecter à Ente, veuillez réessayer après un certain temps. Si l'erreur persiste, veuillez contacter le support.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Il semble qu'une erreur s'est produite. Veuillez réessayer après un certain temps. Si l'erreur persiste, veuillez contacter notre équipe d'assistance.",
"about": "À propos",
"weAreOpenSource": "Nous sommes open source !",
"privacy": "Confidentialité",
"terms": "Conditions",
"checkForUpdates": "Vérifier les mises à jour",
"checkStatus": "Vérifier le statut",
"downloadUpdate": "Télécharger",
"criticalUpdateAvailable": "Mise à jour critique disponible",
"updateAvailable": "Une mise à jour est disponible",
@@ -417,6 +420,9 @@
"waitingForBrowserRequest": "En attente de la requête du navigateur...",
"waitingForVerification": "En attente de vérification...",
"passkey": "Code d'accès",
"passKeyPendingVerification": "La vérification est toujours en attente",
"loginSessionExpired": "Session expirée",
"loginSessionExpiredDetails": "Votre session a expiré. Veuillez vous reconnecter.",
"developerSettingsWarning": "Êtes-vous sûr de vouloir modifier les paramètres du développeur ?",
"developerSettings": "Paramètres du développeur",
"serverEndpoint": "Point de terminaison serveur",
@@ -436,5 +442,22 @@
"deleteTagTitle": "Supprimer le tag ?",
"deleteTagMessage": "Êtes-vous sûr de vouloir supprimer ce tag ? Cette action est irréversible.",
"somethingWentWrongParsingCode": "Impossible d'analyser les codes {x}.",
"updateNotAvailable": "Mise à jour non disponible"
"updateNotAvailable": "Mise à jour non disponible",
"viewRawCodes": "Afficher les codes bruts",
"rawCodes": "Codes bruts",
"rawCodeData": "Données de code brut",
"noSystemLockFound": "Aucun verrou système trouvé",
"autoLock": "Verrouillage automatique",
"immediately": "Immédiatement",
"reEnterPassword": "Ressaisir le mot de passe",
"reEnterPin": "Ressaisir le code PIN",
"next": "Suivant",
"tooManyIncorrectAttempts": "Trop de tentatives incorrectes",
"tapToUnlock": "Appuyer pour déverrouiller",
"setNewPassword": "Définir un nouveau mot de passe",
"deviceLock": "Verrouillage de l'appareil",
"hideContent": "Masquer le contenu",
"enterPin": "Saisir le code PIN",
"setNewPin": "Définir un nouveau code PIN",
"importFailureDescNew": "Impossible de lire le fichier sélectionné."
}

View File

@@ -0,0 +1,118 @@
{
"account": "ખાતું",
"unlock": "અનલોક કરો",
"recoveryKey": "પુનઃપ્રાપ્તિ ચાવી",
"onBoardingBody": "તમારા 2FA કોડનો સુરક્ષિત રીતે બેકઅપ લો",
"onBoardingGetStarted": "શરૂ કરો",
"setupFirstAccount": "તમારું પ્રથમ એકાઉન્ટ સેટ કરો",
"importScanQrCode": "QR કોડ સ્કેન કરો",
"qrCode": "QR કોડ",
"importEnterSetupKey": "સેટઅપ કી દાખલ કરો",
"importAccountPageTitle": "એકાઉન્ટ વિગતો દાખલ કરો",
"secretCanNotBeEmpty": "રહસ્ય ખાલી ન હોઈ શકે",
"bothIssuerAndAccountCanNotBeEmpty": "રજૂકર્તા અને ખાતું બંને ખાલી હોઈ શકતા નથી",
"incorrectDetails": "ખોટી વિગતો",
"pleaseVerifyDetails": "કૃપા કરીને વિગતો ચકાસો અને ફરી પ્રયાસ કરો",
"codeIssuerHint": "રજૂકર્તા",
"codeSecretKeyHint": "ગુપ્ત ચાવી",
"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": "શું તમે ખરેખર આ કોડ કાઢી નાખવા માંગો છો? આ ક્રિયા બદલી શકાય તેવી નથી.",
"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": "ફરી તમારુ સ્વાગત છે!",
"madeWithLoveAtPrefix": " ખાતે ❤️ સાથે બનાવેલ છે",
"supportDevs": "અમને સમર્થન આપવા માટે <bold-green>ente</bold-green> પર સબ્સ્ક્રાઇબ કરો",
"supportDiscount": "પ્રથમ વર્ષે મા 10% છૂટ મેળવવા માટે કૂપન કોડ \"AUTH\" નો ઉપયોગ કરો",
"changeEmail": "ઈ - મેઈલ બદલો",
"changePassword": "પાસવર્ડ બદલો",
"data": "માહિતી",
"importCodes": "કોડ્સ આયાત કરો",
"importTypePlainText": "સાદુ લખાણ",
"importTypeEnteEncrypted": "એન્ટે એન્ક્રિપ્ટેડ નિકાસ",
"passwordForDecryptingExport": "નિકાસને ડિક્રિપ્ટ કરવા માટે પાસવર્ડ",
"passwordEmptyError": "પાસવર્ડ ખાલી ન હોઈ શકે",
"importFromApp": "{appName} થી કોડ્સ આયાત કરો",
"selectFile": "ફાઇલ પસંદ કરો",
"ok": "સારું",
"cancel": "રદ કરો",
"yes": "હા",
"no": "ના",
"email": "ઇમેઇલ",
"support": "સહાય",
"general": "સામાન્ય",
"delete": "કાઢી નાખો",
"enterPassword": "પાસવર્ડ દાખલ કરો",
"encrypted": "એનક્રિપ્ટ થયેલ",
"plainText": "સાદુ લખાણ",
"passwordToEncryptExport": "નિકાસને એન્ક્રિપ્ટ કરવા માટે પાસવર્ડ",
"export": "નિકાસ કરો",
"singIn": "સાઇન ઇન કરો",
"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."
},
"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."
},
"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."
},
"tags": "ચિઠ્ઠી"
}

View File

@@ -1,5 +1,6 @@
{
"account": "חשבון",
"unlock": "בטל נעילה",
"recoveryKey": "מפתח שחזור",
"counterAppBarTitle": "מונה",
"@counterAppBarTitle": {
@@ -105,12 +106,15 @@
"copied": "הועתק",
"pleaseTryAgain": "אנא נסה שנית",
"existingUser": "משתמש קיים",
"newUser": "חדש בente",
"delete": "למחוק",
"enterYourPasswordHint": "הכנס סיסמא",
"forgotPassword": "שכחתי סיסמה",
"oops": "אופס",
"suggestFeatures": "הציעו מאפיינים",
"faq": "שאלות נפוצות",
"faq_q_1": "כמה מאובטח ente Auth?",
"faq_a_1": "כל הקודים שאתה מגבה דרך ente מאוחסנים מקצה לקצה בהצפנה. הכוונה שרק אתה יכול לגשת לקודים שלך. האפליקציות שלנו הם מפותחות דרך קוד פתוח והקריפטוגרפיה שלנו מבוקרת חיצונית.",
"faq_q_2": "האם ישנה אפשרות להשתמש בקודים שלי במחשב?",
"faq_a_2": "אתה יכול לגשת לקודים שלך ברשת ב- auth.ente.io.",
"faq_q_3": "איך אפשר למחוק קודים?",
@@ -183,6 +187,8 @@
"recoveryKeySaveDescription": "אנחנו לא מאחסנים את המפתח הזה, אנא שמור את המפתח 24 מילים הזה במקום בטוח.",
"doThisLater": "עשה זאת מאוחר יותר",
"saveKey": "שמור מפתח",
"save": "שמור",
"send": "שלח",
"back": "חזרה",
"createAccount": "צור חשבון",
"passwordStrength": "חוזק הסיסמא: {passwordStrengthValue}",
@@ -247,6 +253,7 @@
"privacy": "פרטיות",
"terms": "תנאים",
"checkForUpdates": "בדוק אם קיימים עדכונים",
"checkStatus": "בדוק סטטוס",
"downloadUpdate": "הורד",
"criticalUpdateAvailable": "עדכון חשוב זמין",
"updateAvailable": "עדכון זמין",
@@ -327,5 +334,8 @@
"minimizeAppOnCopy": "מזער אפליקציה בהעתקה",
"editCodeAuthMessage": "אמת כדי לערוך קוד",
"deleteCodeAuthMessage": "אמת כדי למחוק קוד",
"showQRAuthMessage": "אמת כדי להראות קוד QR"
"showQRAuthMessage": "אמת כדי להראות קוד QR",
"confirmAccountDeleteTitle": "אישור מחיקת חשבון",
"noInternetConnection": "אין חיבור לאינטרנט",
"pleaseCheckYourInternetConnectionAndTryAgain": "אנא בדוק את חיבור האינטרנט שלך ונסה שוב."
}

View File

@@ -0,0 +1,4 @@
{
"account": "खाता",
"unlock": "खोलें"
}

View File

@@ -1,22 +1,85 @@
{
"account": "Akun",
"unlock": "Buka",
"recoveryKey": "Kunci pemulihan",
"onBoardingBody": "Cadangkan kode 2FA kamu dengan aman",
"onBoardingGetStarted": "Mulai",
"setupFirstAccount": "Siapkan akun pertama kamu",
"importScanQrCode": "Pindai Kode QR",
"qrCode": "Kode QR",
"importEnterSetupKey": "Masukkan kunci penyiapan",
"importAccountPageTitle": "Masukkan detail akun",
"incorrectDetails": "Rincian salah",
"pleaseVerifyDetails": "Periksa kembali data kamu dan coba lagi",
"codeIssuerHint": "Penerbit",
"codeSecretKeyHint": "Kunci Rahasia",
"codeAccountHint": "Akun (kamu@domain.com)",
"codeTagHint": "Tag",
"sessionExpired": "Sesi berakhir",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Silakan masuk akun lagi",
"loggingOut": "Mengeluarkan akun...",
"timeBasedKeyType": "Berbasis waktu (TOTP)",
"saveAction": "Simpan",
"nextTotpTitle": "berikutnya",
"deleteCodeTitle": "Hapus kode?",
"deleteCodeMessage": "Apakah kamu yakin ingin menghapus kode ini? Tindakan ini tidak dapat dikembalikan ke semula.",
"viewLogsAction": "Lihat log",
"sendLogsDescription": "Langkah ini akan mengirimkan log untuk membantu kami menganalisa masalah kamu. Meskipun kami melakukan tindakan pencegahan untuk memastikan bahwa informasi sensitif tidak dicatat, kami menganjurkan kamu untuk melihat log ini sebelum membagikannya.",
"preparingLogsTitle": "Menyiapkan log...",
"copyEmailAction": "Salin email",
"exportLogsAction": "Ekspor log",
"reportABug": "Laporkan bug",
"reportBug": "Laporkan bug",
"contactSupport": "Hubungi dukungan",
"rateUsOnStore": "Nilai kami di {storeName}",
"blog": "Blog",
"verifyPassword": "Verifikasi sandi",
"pleaseWait": "Harap tunggu...",
"generatingEncryptionKeysTitle": "Membuat kunci enkripsi...",
"recreatePassword": "Buat kembali katasandi",
"recreatePasswordMessage": "Perangkat ini tidak cukup kuat untuk memverifikasi kata sandi kamu, jadi kami perlu membuat ulang kata sandi kamu sekali lagi dengan cara yang dapat digunakan di semua perangkat.\n\nSilahkan masuk menggunakan kunci pemulihan dan buat ulang kata sandi kamu (Kamu dapat menggunakan kata sandi yang sama lagi jika mau).",
"useRecoveryKey": "Gunakan kunci pemulihan",
"incorrectPasswordTitle": "Kata sandi salah",
"welcomeBack": "Selamat datang kembali!",
"madeWithLoveAtPrefix": "dibuat dengan ❤️ di ",
"supportDevs": "Berlangganan <bold-green>ente</bold-green> untuk mendukung kami",
"supportDiscount": "Gunakan kode kupon \"AUTH\" untuk mendapatkan potongan 10% pada tahun pertamamu",
"changeEmail": "Ubah email",
"changePassword": "Ubah sandi",
"data": "Data",
"importCodes": "Impor kode",
"importTypePlainText": "Teks biasa",
"passwordForDecryptingExport": "Kata sandi untuk mendekripsi ekspor",
"passwordEmptyError": "Kata sandi tidak boleh kosong",
"importFromApp": "Impor kode dari {appName}",
"importSelectJsonFile": "Pilih File JSON",
"importSelectAppExport": "Pilih file ekspor dari {appName}",
"selectFile": "Pilih file",
"emailVerificationToggle": "Verifikasi email",
"emailVerificationEnableWarning": "Untuk menghindari akun kamu terkunci, pastikan untuk menyimpan salinan 2FA email kamu di luar Ente Auth sebelum mengaktifkan verifikasi email.",
"ok": "Oke",
"cancel": "Batal",
"email": "Email",
"support": "Dukungan",
"general": "Umum",
"settings": "Pengaturan",
"newUser": "Baru di Ente",
"delete": "Hapus",
"enterYourPasswordHint": "Masukkan sandi kamu",
"suggestFeatures": "Sarankan fitur",
"faq": "Tanya Jawab Umum",
"faq_q_1": "Seberapa aman Auth itu?",
"faq_a_1": "Semua kode yang kamu cadangkan melalui Auth disimpan menggunakan enkripsi end-to-end. Jadi hanya kamu yang dapat mengaksesnya. Aplikasi kami bersifat open source dan kriptografi kami telah diaudit oleh eksternal.",
"faq_q_2": "Bisakah saya mengakses kode saya di desktop?",
"faq_a_2": "Kamu dapat mengakses kodenya melalui web auth.ente.io.",
"scan": "Pindai",
"scanACode": "Pindai kode",
"verify": "Verifikasi",
"verifyEmail": "Verifikasi email",
"enterCodeHint": "Masukkan kode 6 angka dari\napp autentikator kamu",
"createNewAccount": "Buat akun baru",
"confirmPassword": "Konfirmasi sandi",
"selectLanguage": "Pilih bahasa",

View File

@@ -263,6 +263,8 @@
"exportLogs": "Esporta log",
"enterYourRecoveryKey": "Inserisci la tua chiave di recupero",
"tempErrorContactSupportIfPersists": "Sembra che qualcosa sia andato storto. Riprova tra un po'. Se l'errore persiste, contatta il nostro team di supporto.",
"networkHostLookUpErr": "Impossibile connettersi a Ente, controlla le impostazioni di rete e contatta l'assistenza se l'errore persiste.",
"networkConnectionRefusedErr": "Impossibile connettersi a Ente, riprova tra un po' di tempo. Se l'errore persiste, contatta l'assistenza.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Sembra che qualcosa sia andato storto. Riprova tra un po'. Se l'errore persiste, contatta il nostro team di supporto.",
"about": "Informazioni",
"weAreOpenSource": "Siamo open source!",
@@ -440,5 +442,29 @@
"deleteTagTitle": "Eliminare il tag?",
"deleteTagMessage": "Sei sicuro di voler eliminare questo tag? Questa azione è irreversibile.",
"somethingWentWrongParsingCode": "Non siamo riusciti ad analizzare i codici {x}.",
"updateNotAvailable": "Aggiornamento non disponibile"
"updateNotAvailable": "Aggiornamento non disponibile",
"viewRawCodes": "Visualizza codici raw",
"rawCodes": "Codici raw",
"rawCodeData": "Dati codice raw",
"appLock": "Blocco app",
"noSystemLockFound": "Nessun blocco di sistema trovato",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Per abilitare il blocco dell'app, configura il codice di accesso del dispositivo o il blocco schermo nelle impostazioni di sistema.",
"autoLock": "Blocco automatico",
"immediately": "Immediatamente",
"reEnterPassword": "Reinserisci la password",
"reEnterPin": "Reinserisci il PIN",
"next": "Successivo",
"tooManyIncorrectAttempts": "Troppi tentativi errati",
"tapToUnlock": "Tocca per sbloccare",
"setNewPassword": "Imposta una nuova password",
"deviceLock": "Blocco del dispositivo",
"hideContent": "Nascondi il contenuto",
"hideContentDescriptionAndroid": "Nasconde il contenuto nel selettore delle app e disabilita gli screenshot",
"hideContentDescriptioniOS": "Nasconde il contenuto nel selettore delle app",
"autoLockFeatureDescription": "Tempo dopo il quale l'applicazione si blocca dopo essere stata messa in background",
"appLockDescription": "Scegli tra la schermata di blocco predefinita del dispositivo e una schermata di blocco personalizzata con PIN o password.",
"pinLock": "Blocco con PIN",
"enterPin": "Inserisci PIN",
"setNewPin": "Imposta un nuovo PIN",
"importFailureDescNew": "Impossibile elaborare il file selezionato."
}

View File

@@ -263,12 +263,15 @@
"exportLogs": "ログのエクスポート",
"enterYourRecoveryKey": "回復キーを入力",
"tempErrorContactSupportIfPersists": "問題が発生したようです。しばらくしてから再試行してください。エラーが解決しない場合は、サポートチームにお問い合わせください。",
"networkHostLookUpErr": "Enteに接続できませんでした。ネットワーク設定を確認し、エラーが解決しない場合はサポートにお問い合わせください。",
"networkConnectionRefusedErr": "Enteに接続できませんでした。しばらくしてから再試行してください。エラーが解決しない場合は、サポートにお問い合わせください。",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "問題が発生したようです。しばらくしてから再試行してください。エラーが解決しない場合は、サポートチームにお問い合わせください。",
"about": "情報",
"weAreOpenSource": "我々はオープンソースです!",
"privacy": "プライバシー",
"terms": "利用規約",
"checkForUpdates": "アップデートを確認",
"checkStatus": "ステータスの確認",
"downloadUpdate": "ダウンロード",
"criticalUpdateAvailable": "重要な更新が利用可能です",
"updateAvailable": "更新が利用可能です",
@@ -417,6 +420,9 @@
"waitingForBrowserRequest": "ブラウザのリクエストを待っています...",
"waitingForVerification": "認証を待っています...",
"passkey": "パスキー",
"passKeyPendingVerification": "認証はまだ保留中です",
"loginSessionExpired": "セッションの有効期限が切れました",
"loginSessionExpiredDetails": "セッションの有効期限が切れました。再度ログインしてください。",
"developerSettingsWarning": "開発者向け設定を変更してもよろしいですか?",
"developerSettings": "開発者向け設定",
"serverEndpoint": "サーバーエンドポイント",

View File

@@ -1 +1,86 @@
{}
{
"account": "계정",
"unlock": "잠금해제",
"recoveryKey": "복구 키",
"counterAppBarTitle": "카운터",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "2단계 인증 코드를 안전하게 백업하세요",
"onBoardingGetStarted": "시작하기",
"setupFirstAccount": "첫번째 계정을 설정하세요",
"importScanQrCode": "QR 코드 스캔",
"qrCode": "QR 코드",
"importEnterSetupKey": "설정 키 입력",
"importAccountPageTitle": "계정 상세 정보 입력",
"secretCanNotBeEmpty": "비밀 키는 비워둘 수 없습니다",
"bothIssuerAndAccountCanNotBeEmpty": "발행인과 계정을 모두 비워둘 수 없습니다",
"incorrectDetails": "세부 정보가 잘못 됨",
"pleaseVerifyDetails": "입력된 정보를 확인하고 다시 시도하세요",
"codeIssuerHint": "발행인",
"codeSecretKeyHint": "비밀 키",
"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": "정말 이 코드를 삭제하시겠습니까? 이 동작은 되돌릴 수 없습니다.",
"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": "돌아오신 것을 환영합니다!",
"madeWithLoveAtPrefix": "made with ❤️ at ",
"supportDevs": "<bold-green>ente</bold-green>를 구독하고 저희를 지원해주세요",
"supportDiscount": "쿠폰 코드 \"AUTH\"를 사용하고 첫 해 10% 할인 혜택을 받으세요",
"changeEmail": "이메일 변경",
"changePassword": "비밀번호 변경",
"data": "데이터",
"importCodes": "코드 가져오기",
"importTypePlainText": "일반 텍스트",
"importTypeEnteEncrypted": "Ente로 암호화된 내보내기",
"passwordForDecryptingExport": "복호화용 비밀번호",
"passwordEmptyError": "비밀번호는 비어있을 수 없습니다",
"importSelectJsonFile": "JSON 파일 선택"
}

View File

@@ -263,12 +263,15 @@
"exportLogs": "Logs exporteren",
"enterYourRecoveryKey": "Voer je herstelsleutel in",
"tempErrorContactSupportIfPersists": "Het lijkt erop dat er iets fout is gegaan. Probeer het later opnieuw. Als de fout zich blijft voordoen, neem dan contact op met ons supportteam.",
"networkHostLookUpErr": "Kan geen verbinding maken met Ente, controleer uw netwerkinstellingen en neem contact op met ondersteuning als de fout zich blijft voordoen.",
"networkConnectionRefusedErr": "Kan geen verbinding maken met Ente, probeer het later opnieuw. Als de fout zich blijft voordoen, neem dan contact op met support.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Het lijkt erop dat er iets fout is gegaan. Probeer het later opnieuw. Als de fout zich blijft voordoen, neem dan contact op met ons supportteam.",
"about": "Over",
"weAreOpenSource": "We zijn open source!",
"privacy": "Privacy",
"terms": "Voorwaarden",
"checkForUpdates": "Controleer op updates",
"checkStatus": "Status controleren",
"downloadUpdate": "Downloaden",
"criticalUpdateAvailable": "Belangrijke update beschikbaar",
"updateAvailable": "Update beschikbaar",
@@ -417,6 +420,9 @@
"waitingForBrowserRequest": "Wachten op browserverzoek...",
"waitingForVerification": "Wachten op verificatie...",
"passkey": "Passkey",
"passKeyPendingVerification": "Verificatie is nog in behandeling",
"loginSessionExpired": "Sessie verlopen",
"loginSessionExpiredDetails": "Jouw sessie is verlopen. Log opnieuw in.",
"developerSettingsWarning": "Weet u zeker dat u de ontwikkelaarsinstellingen wilt wijzigen?",
"developerSettings": "Ontwikkelaarsinstellingen",
"serverEndpoint": "Server eindpunt",
@@ -436,5 +442,29 @@
"deleteTagTitle": "Label verwijderen?",
"deleteTagMessage": "Weet je zeker dat je deze label wilt verwijderen? Deze actie is onomkeerbaar.",
"somethingWentWrongParsingCode": "We konden {x} codes niet verwerken.",
"updateNotAvailable": "Update niet beschikbaar"
"updateNotAvailable": "Update niet beschikbaar",
"viewRawCodes": "Ruwe codes weergeven",
"rawCodes": "Ruwe codes",
"rawCodeData": "Onbewerkte code gegevens",
"appLock": "App-vergrendeling",
"noSystemLockFound": "Geen systeemvergrendeling gevonden",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Om schermvergrendeling in te schakelen, moet u een toegangscode of schermvergrendeling instellen in uw systeeminstellingen.",
"autoLock": "Automatische vergrendeling",
"immediately": "Onmiddellijk",
"reEnterPassword": "Wachtwoord opnieuw invoeren",
"reEnterPin": "PIN opnieuw invoeren",
"next": "Volgende",
"tooManyIncorrectAttempts": "Te veel onjuiste pogingen",
"tapToUnlock": "Tik om te ontgrendelen",
"setNewPassword": "Nieuw wachtwoord instellen",
"deviceLock": "Apparaat vergrendeling",
"hideContent": "Inhoud verbergen",
"hideContentDescriptionAndroid": "Verbergt de app inhoud in de app switcher en schakelt schermafbeeldingen uit",
"hideContentDescriptioniOS": "Verbergt de inhoud van de app in de app switcher",
"autoLockFeatureDescription": "Tijd waarna de app vergrendelt nadat ze op de achtergrond is gezet",
"appLockDescription": "Kies tussen de standaard schermvergrendeling van uw apparaat en een aangepaste schermvergrendeling met een pincode of wachtwoord.",
"pinLock": "Pin vergrendeling",
"enterPin": "Pin invoeren",
"setNewPin": "Nieuwe pin instellen",
"importFailureDescNew": "Kon het geselecteerde bestand niet lezen."
}

View File

@@ -16,15 +16,17 @@
"secretCanNotBeEmpty": "Sekret nie może być pusty",
"bothIssuerAndAccountCanNotBeEmpty": "Pola wydawca i konto nie mogą być puste",
"incorrectDetails": "Nieprawidłowe szczegóły",
"pleaseVerifyDetails": "Pros zweryfikować szczegóły i spróbuj ponownie",
"pleaseVerifyDetails": "Prosimy zweryfikować szczegóły i spróbować ponownie",
"codeIssuerHint": "Wydawca",
"codeSecretKeyHint": "Tajny klucz",
"codeSecretKeyHint": "Tajny Klucz",
"codeAccountHint": "Konto (ty@domena.com)",
"codeTagHint": "Oznacz",
"accountKeyType": "Rodzaj klucza",
"sessionExpired": "Sesja wygasła",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Prosimy zaloguj się ponownie",
"pleaseLoginAgain": "Prosimy zalogować się ponownie",
"loggingOut": "Wylogowywanie...",
"timeBasedKeyType": "Oparte na czasie (TOTP)",
"counterBasedKeyType": "Oparte na liczniku (HOTP)",
@@ -34,9 +36,9 @@
"deleteCodeMessage": "Czy na pewno chcesz usunąć ten kod? Ta akcja jest nieodwracalna.",
"viewLogsAction": "Wyświetl logi",
"sendLogsDescription": "Spowoduje to przesłanie logów, które pomogą nam rozwiązać Twój problem. Chociaż podejmujemy środki ostrożności, aby zapewnić, że wrażliwe informacje nie są rejestrowane, zachęcamy do obejrzenia tych dzienników przed ich udostępnieniem.",
"preparingLogsTitle": "Przygotowanie logów...",
"emailLogsTitle": "Wyślij log mailem",
"emailLogsMessage": "Pros wysłać logi do {email}",
"preparingLogsTitle": "Przygotowywanie logów...",
"emailLogsTitle": "Wyślij logi mailem",
"emailLogsMessage": "Prosimy wysłać logi do {email}",
"@emailLogsMessage": {
"placeholders": {
"email": {
@@ -62,14 +64,14 @@
"blog": "Blog",
"merchandise": "Sklep",
"verifyPassword": "Zweryfikuj hasło",
"pleaseWait": "Pros czekać...",
"pleaseWait": "Prosimy czekać...",
"generatingEncryptionKeysTitle": "Generowanie kluczy szyfrujących...",
"recreatePassword": "Zresetuj hasło",
"recreatePasswordMessage": "Obecne urządzenie nie jest wystarczająco wydajne, aby zweryfikować Twoje hasło, więc musimy je raz zregenerować w sposób, który działa ze wszystkimi urządzeniami. \n\nZaloguj się przy użyciu klucza odzyskiwania i zresetuj swoje hasło (możesz ponownie użyć tego samego, jeśli chcesz).",
"useRecoveryKey": "Użyj kodu odzyskiwania",
"incorrectPasswordTitle": "Nieprawidłowe hasło",
"welcomeBack": "Witaj ponownie!",
"madeWithLoveAtPrefix": "wykonane z ❤️ w ",
"madeWithLoveAtPrefix": "zrobione z ❤️ w ",
"supportDevs": "Subskrybuj <bold-green>ente</bold-green> aby wesprzeć ten projekt.",
"supportDiscount": "Użyj kodu rabatowego \"AUTH\", aby otrzymać 10% rabatu na pierwszy rok",
"changeEmail": "Zmień adres e-mail",
@@ -77,25 +79,32 @@
"data": "Dane",
"importCodes": "Importuj kody",
"importTypePlainText": "Zwykły tekst",
"importTypeEnteEncrypted": "Zaszyfrowany eksport Ente",
"passwordForDecryptingExport": "Hasło do odszyfrowania eksportu",
"passwordEmptyError": "Pole hasło nie może być puste",
"importFromApp": "Importuj kody z {appName}",
"importGoogleAuthGuide": "Wyeksportuj twoje konta z Google Authenticator do kodu QR używając opcji \"Przenieś konta\". Potem używając innego urządzenia, zeskanuj kod QR.",
"importGoogleAuthGuide": "Wyeksportuj Twoje konta z Google Authenticator do kodu QR używając opcji \"Przenieś konta\". Potem używając innego urządzenia, zeskanuj kod QR.\n\nWskazówka: Możesz użyć kamery Twojego laptopa, by zrobić zdjęcie kodu QR.",
"importSelectJsonFile": "Wybierz plik JSON",
"importSelectAppExport": "Wybierz plik eksportu {appName}",
"importEnteEncGuide": "Wybierz zaszyfrowany plik JSON wyeksportowany z Ente",
"importRaivoGuide": "Użyj opcji \"Eksportuj OTP do archiwum ZIP\" w Ustawieniach Raivo.\n\nWyodrębnij plik zip i zaimportuj plik JSON.",
"importBitwardenGuide": "Użyj opcji \"Eksportuj sejf\" w Narzędziach Bitwarden i zaimportuj niezaszyfrowany plik JSON.",
"importAegisGuide": "Użyj opcji \"Eksportuj sejf\" w ustawieniach Aegis.\n\nJeśli twój sejf jest zaszyfrowany, musisz wprowadzić hasło sejfu, aby odszyfrować sejf.",
"import2FasGuide": "Użyj opcji \"Ustawienia->Kopia Zapasowa-Eksport\" w 2FAS.\n\nJeśli twoja kopia zapasowa jest zaszyfrowana, musisz wprowadzić hasło, aby odszyfrować kopię zapasową",
"importLastpassGuide": "Użyj opcji \"Przenieś konta\" w Ustawieniach Lastpass Authenticator i naciśnij \"Eksportuj konta do pliku\". Zaimportuj pobrany plik JSON.",
"exportCodes": "Eksportuj kody",
"importLabel": "Importuj",
"importInstruction": "Wybierz plik, który zawiera listę twoich kodów w następującym formacie",
"importCodeDelimiterInfo": "Kody mogą być oddzielone przecinkiem lub nową linią",
"selectFile": "Wybierz plik",
"emailVerificationToggle": "Weryfikacja e-mail",
"emailVerificationEnableWarning": "Jeśli przechowujesz uwierzytelnianie dwuskładnikowe do twojego e-mailu z nami, włączenie weryfikacji adresu e-mail może spowodować impas. Jeśli jesteś zablokowany z jednej usługi, możesz nie być w stanie zalogować się do drugiej.",
"authToChangeEmailVerificationSetting": "Pros uwierzytelnić, aby zmienić weryfikację e-mail",
"authToViewYourRecoveryKey": "Pros uwierzytelnić, aby wyświetlić swój klucz odzyskiwania",
"authToChangeYourEmail": "Pros uwierzytelnić, aby zmienić swój adres e-mail",
"authToChangeYourPassword": "Pros uwierzytelnić, aby zmienić hasło",
"authToViewSecrets": "Pros uwierzytelnić, aby wyświetlić swoje sekrety",
"emailVerificationEnableWarning": "Aby uniknąć zablokowania się z konta, upewnij się, że przed włączeniem weryfikacji e-mail przechowujesz kopię 2FA dla swojego adresu e-mail poza Ente Auth.",
"authToChangeEmailVerificationSetting": "Prosimy uwierzytelnić się, aby zmienić weryfikację e-mail",
"authToViewYourRecoveryKey": "Prosimy uwierzytelnić się, aby wyświetlić swój klucz odzyskiwania",
"authToChangeYourEmail": "Prosimy uwierzytelnić się, aby zmienić swój adres e-mail",
"authToChangeYourPassword": "Prosimy uwierzytelnić się, aby zmienić hasło",
"authToViewSecrets": "Prosimy uwierzytelnić się, aby wyświetlić swoje sekrety",
"authToInitiateSignIn": "Prosimy uwierzytelnić się, aby zainicjować logowanie do kopii zapasowej.",
"ok": "Ok",
"cancel": "Anuluj",
"yes": "Tak",
@@ -105,22 +114,26 @@
"general": "Ogólne",
"settings": "Ustawienia",
"copied": "Skopiowano",
"pleaseTryAgain": "Pros spróbować ponownie",
"existingUser": "Istniejący użytkownik",
"pleaseTryAgain": "Prosimy spróbować ponownie",
"existingUser": "Istniejący Użytkownik",
"newUser": "Nowy/a do Ente",
"delete": "Usuń",
"enterYourPasswordHint": "Wprowadź swoje hasło",
"forgotPassword": "Nie pamiętam hasła",
"oops": "Ups",
"suggestFeatures": "Zaproponuj funkcje",
"faq": "Najczęściej zadawane pytania (FAQ)",
"faq_q_1": "Jak bezpieczny jest Auth?",
"faq_a_1": "Wszystkie kody, których tworzysz kopię zapasową za pomocą Ente są przechowywane zaszyfrowane end-to-end. Oznacza to, że tylko Ty możesz uzyskać dostęp do swoich kodów. Nasze aplikacje są otwarto-źródłowe, a nasza kryptografia została poddana zewnętrznemu audytowi.",
"faq_q_2": "Czy mogę uzyskać dostęp do moich kodów na komputerze?",
"faq_a_2": "Możesz uzyskać dostęp do swoich kodów na stronie auth.ente.io.",
"faq_q_3": "Jak mogę usunąć kody?",
"faq_a_3": "Możesz usunąć kod, przesuwając go w lewo.",
"faq_q_4": "Jak mogę wesprzeć ten projekt?",
"faq_a_4": "Możesz wspierać rozwój tego projektu, subskrybując do naszej aplikacji Zdjęcia na ente.io.",
"faq_q_5": "Jak mogę włączyć blokadę FaceID w Ente Auth",
"faq_a_5": "Możesz włączyć blokadę FaceID w Ustawienia → Bezpieczeństwo→ Ekran blokady.",
"somethingWentWrongMessage": "Coś poszło nie tak. Proszę, spróbuj ponownie",
"somethingWentWrongMessage": "Coś poszło nie tak, prosimy spróbować ponownie",
"leaveFamily": "Opuść rodzinę",
"leaveFamilyMessage": "Czy jesteś pewien/pewna, że chcesz opuścić plan rodzinny?",
"inFamilyPlanMessage": "Jesteś w planie rodzinnym!",
@@ -129,13 +142,15 @@
"scanACode": "Skanuj kod",
"verify": "Zweryfikuj",
"verifyEmail": "Zweryfikuj adres e-mail",
"enterCodeHint": "Wprowadź sześciocyfrowy kod z twojej aplikacji uwierzytelniającej",
"enterCodeHint": "Wprowadź sześciocyfrowy kod z \nTwojej aplikacji uwierzytelniającej",
"lostDeviceTitle": "Zagubiono urządzenie?",
"twoFactorAuthTitle": "Uwierzytelnianie dwuetapowe",
"twoFactorAuthTitle": "Uwierzytelnianie dwustopniowe",
"passkeyAuthTitle": "Weryfikacja kluczem dostępu",
"verifyPasskey": "Zweryfikuj klucz dostępu",
"recoverAccount": "Odzyskaj konto",
"enterRecoveryKeyHint": "Wprowadź swój klucz odzyskiwania",
"recover": "Odzyskaj",
"contactSupportViaEmailMessage": "Wyślij wiadomość e-mail na {email} z zarejestrowanego adresu e-mail",
"contactSupportViaEmailMessage": "Wyślij wiadomość e-mail na {email} z Twojego zarejestrowanego adresu e-mail",
"@contactSupportViaEmailMessage": {
"placeholders": {
"email": {
@@ -143,20 +158,21 @@
}
}
},
"invalidQRCode": "Nieprawidłowy kod QR",
"noRecoveryKeyTitle": "Brak klucza odzyskiwania?",
"enterEmailHint": "Wprowadź adres e-mail",
"invalidEmailTitle": "Nieprawidłowy adres e-mail",
"invalidEmailMessage": "Proszę wpisać prawidłowy adres e-mail.",
"invalidEmailMessage": "Prosimy podać prawidłowy adres e-mail.",
"deleteAccount": "Usuń konto",
"deleteAccountQuery": "Będzie nam przykro, że odchodzisz. Masz jakiś problem?",
"yesSendFeedbackAction": "Tak, wyślij opinię",
"noDeleteAccountAction": "Nie, usuń moje konto",
"initiateAccountDeleteTitle": "Pros uwierzytelnić, aby zainicjować usuwanie konta",
"initiateAccountDeleteTitle": "Prosimy uwierzytelnić się, aby zainicjować usuwanie konta",
"sendEmail": "Wyślij e-mail",
"createNewAccount": "Utwórz nowe konto",
"weakStrength": "Słabe",
"strongStrength": "Silne",
"moderateStrength": "Umiarkowany",
"moderateStrength": "Umiarkowane",
"confirmPassword": "Potwierdź hasło",
"close": "Zamknij",
"oopsSomethingWentWrong": "Ups! Coś poszło nie tak.",
@@ -165,10 +181,10 @@
"social": "Społeczność",
"security": "Bezpieczeństwo",
"lockscreen": "Ekran blokady",
"authToChangeLockscreenSetting": "Pros uwierzytelnić, aby zmienić ustawienia ekranu blokady",
"authToChangeLockscreenSetting": "Prosimy uwierzytelnić się, aby zmienić ustawienia ekranu blokady",
"lockScreenEnablePreSteps": "Aby włączyć ekran blokady, ustaw hasło urządzenia lub blokadę ekranu w ustawieniach systemu.",
"viewActiveSessions": "Zobacz aktualne sesje",
"authToViewYourActiveSessions": "Pros uwierzytelnić, aby wyświetlić swój klucz odzyskiwania",
"viewActiveSessions": "Zobacz aktywne sesje",
"authToViewYourActiveSessions": "Prosimy uwierzytelnić się, aby wyświetlić swoje aktywne sesje",
"searchHint": "Szukaj...",
"search": "Szukaj",
"sorryUnableToGenCode": "Przepraszamy, nie można wygenerować kodu dla {issuerName}",
@@ -183,10 +199,12 @@
"recoveryKeyCopiedToClipboard": "Klucz odzyskiwania został skopiowany do schowka",
"recoveryKeyOnForgotPassword": "Jeśli zapomnisz hasła, jedynym sposobem na odzyskanie danych jest ten klucz.",
"recoveryKeySaveDescription": "Nie przechowujemy tego klucza, proszę zachować ten 24 wyrazowy klucz w bezpiecznym miejscu.",
"doThisLater": "Zrób To Później",
"doThisLater": "Zrób to później",
"saveKey": "Zapisz klucz",
"save": "Zapisz",
"send": "Wyślij",
"saveOrSendDescription": "Czy chcesz zapisać to do swojej pamięci masowej (domyślnie folder Pobrane) czy wysłać to do innych aplikacji?",
"saveOnlyDescription": "Czy chcesz zapisać to do swojej pamięci masowej (domyślnie folder Pobrane)?",
"back": "Wstecz",
"createAccount": "Utwórz konto",
"passwordStrength": "Siła hasła: {passwordStrengthValue}",
@@ -203,7 +221,7 @@
},
"password": "Hasło",
"signUpTerms": "Akceptuję <u-terms>warunki korzystania z usługi</u-terms> i <u-policy>politykę prywatności</u-policy>",
"privacyPolicyTitle": "Polityka prywatności",
"privacyPolicyTitle": "Polityka Prywatności",
"termsOfServicesTitle": "Regulamin",
"encryption": "Szyfrowanie",
"setPasswordTitle": "Ustaw hasło",
@@ -220,7 +238,7 @@
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Przepraszamy, nie mogliśmy wygenerować kluczy bezpiecznych na tym urządzeniu.\n\nZarejestruj się z innego urządzenia.",
"howItWorks": "Jak to działa",
"ackPasswordLostWarning": "Rozumiem, że jeśli utracę hasło, mogę stracić moje dane, ponieważ moje dane są <underline>szyfrowane end-to-end</underline>.",
"loginTerms": "Klikając zaloguj się zgadzam się na <u-terms>Regulamin</u-terms> i <u-policy>politykę prywatności<u-policy>",
"loginTerms": "Klikając, zaloguj się, zgadzam się na <u-terms>regulamin</u-terms> i <u-policy>politykę prywatności</u-policy>",
"logInLabel": "Zaloguj się",
"logout": "Wyloguj się",
"areYouSureYouWantToLogout": "Czy na pewno chcesz się wylogować?",
@@ -228,8 +246,8 @@
"exit": "Wyjdź",
"verifyingRecoveryKey": "Weryfikowanie klucza odzyskiwania...",
"recoveryKeyVerified": "Klucz odzyskiwania zweryfikowany",
"recoveryKeySuccessBody": "Świetnie! Twój klucz odzyskiwania jest prawidłowy. Dziękuję za weryfikację.\n\nPamiętaj, aby przechowywać klucz odzyskiwania w bezpiecznej kopii zapasowej.",
"invalidRecoveryKey": "Wprowadzony klucz odzyskiwania jest nieprawidłowy. Upewnij się, że zawiera 24 słowa i sprawdź pisownię każdego z nich.\n\nJeśli wprowadziłeś starszy kod odzyskiwania, upewnij się, że ma on 64 znaki i sprawdź każdy z nich.",
"recoveryKeySuccessBody": "Znakomicie! Klucz odzyskiwania jest prawidłowy. Dziękujemy za weryfikację.\n\nPamiętaj, aby bezpiecznie przechowywać kopię zapasową klucza odzyskiwania.",
"invalidRecoveryKey": "Wprowadzony klucz odzyskiwania jest nieprawidłowy. Upewnij się, że zawiera 24 słowa i sprawdź pisownię każdego z nich.\n\nJeśli wprowadziłeś/aś starszy kod odzyskiwania, upewnij się, że ma on 64 znaki i sprawdź każdy z nich.",
"recreatePasswordTitle": "Zresetuj hasło",
"recreatePasswordBody": "Obecne urządzenie nie jest wystarczająco wydajne, aby zweryfikować Twoje hasło, więc musimy je raz zregenerować w sposób, który działa ze wszystkimi urządzeniami. \n\nZaloguj się przy użyciu klucza odzyskiwania i zresetuj swoje hasło (możesz ponownie użyć tego samego, jeśli chcesz).",
"invalidKey": "Nieprawidłowy klucz",
@@ -240,17 +258,20 @@
"confirmYourRecoveryKey": "Potwierdź klucz odzyskiwania",
"confirm": "Potwierdź",
"emailYourLogs": "Wyślij mailem logi",
"pleaseSendTheLogsTo": "Pros wysłać logi do {toEmail}",
"pleaseSendTheLogsTo": "Prosimy wysłać logi do {toEmail}",
"copyEmailAddress": "Kopiuj adres e-mail",
"exportLogs": "Eksportuj logi",
"enterYourRecoveryKey": "Wprowadź swój klucz odzyskiwania",
"tempErrorContactSupportIfPersists": "Wygląda na to, że coś poszło nie tak. Spróbuj ponownie po pewnym czasie. Jeśli błąd będzie się powtarzał, skontaktuj się z naszym zespołem pomocy technicznej.",
"networkHostLookUpErr": "Nie można połączyć się z Ente, sprawdź ustawienia sieci i skontaktuj się z pomocą techniczną, jeśli błąd będzie się powtarzał.",
"networkConnectionRefusedErr": "Nie można połączyć się z Ente, spróbuj ponownie po pewnym czasie. Jeśli błąd będzie się powtarzał, skontaktuj się z pomocą techniczną.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Wygląda na to, że coś poszło nie tak. Spróbuj ponownie po pewnym czasie. Jeśli błąd będzie się powtarzał, skontaktuj się z naszym zespołem pomocy technicznej.",
"about": "O nas",
"weAreOpenSource": "Posiadamy otwarte źródło!",
"privacy": "Prywatność",
"terms": "Warunki",
"checkForUpdates": "Sprawdź czy są dostępne nowe aktualizacje",
"checkStatus": "Sprawdź stan",
"downloadUpdate": "Pobierz",
"criticalUpdateAvailable": "Dostępna jest krytyczna aktualizacja",
"updateAvailable": "Dostępna jest aktualizacja",
@@ -258,14 +279,14 @@
"checking": "Sprawdzanie...",
"youAreOnTheLatestVersion": "Używasz najnowszej wersji",
"warning": "Ostrzeżenie",
"exportWarningDesc": "Wyeksportowany plik zawiera poufne informacje. Przechowuj to bezpiecznie.",
"exportWarningDesc": "Wyeksportowany plik zawiera poufne informacje. Przechowuj go bezpiecznie.",
"iUnderStand": "Rozumiem",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "Pros uwierzytelnić, aby wyeksportować swoje kody",
"authToExportCodes": "Prosimy uwierzytelnić się, aby wyeksportować swoje kody",
"importSuccessTitle": "Hura!",
"importSuccessDesc": "Zaimportowałeś {count} kodów!",
"importSuccessDesc": "Zaimportowałeś/aś {count} kodów!",
"@importSuccessDesc": {
"placeholders": {
"count": {
@@ -307,9 +328,9 @@
"incorrectCode": "Nieprawidłowy kod",
"sorryTheCodeYouveEnteredIsIncorrect": "Niestety, wprowadzony kod jest nieprawidłowy",
"emailChangedTo": "Adres e-mail został zmieniony na {newEmail}",
"authenticationFailedPleaseTryAgain": "Uwierzytelnianie nie powiodło się, pros spróbować ponownie",
"authenticationFailedPleaseTryAgain": "Uwierzytelnianie nie powiodło się, prosimy spróbować ponownie",
"authenticationSuccessful": "Uwierzytelnianie powiodło się!",
"twofactorAuthenticationSuccessfullyReset": "Pomyślnie zresetowano uwierzytelnianie dwuskładnikowe",
"twofactorAuthenticationSuccessfullyReset": "Pomyślnie zresetowano uwierzytelnianie dwustopniowe",
"incorrectRecoveryKey": "Nieprawidłowy klucz odzyskiwania",
"theRecoveryKeyYouEnteredIsIncorrect": "Wprowadzony klucz odzyskiwania jest nieprawidłowy",
"enterPassword": "Wprowadź hasło",
@@ -322,21 +343,31 @@
"useOffline": "Używaj bez kopii zapasowych",
"signInToBackup": "Zaloguj się, aby wykonać kopię zapasową swoich kodów",
"singIn": "Zaloguj się",
"sigInBackupReminder": "Pros wyeksportować swoje kody, aby upewnić się, że masz kopię zapasową, z której możesz przywrócić swoje kody.",
"sigInBackupReminder": "Prosimy wyeksportować swoje kody, aby upewnić się, że masz kopię zapasową, z której możesz przywrócić swoje kody.",
"offlineModeWarning": "Wybrałeś kontynuację bez kopii zapasowych. Proszę wykonywać ręczne kopie zapasowe, aby upewnić się, że Twoje kody są bezpieczne.",
"showLargeIcons": "Pokaż duże ikony",
"shouldHideCode": "Ukryj kody",
"doubleTapToViewHiddenCode": "Możesz kliknąć dwukrotnie na wpis, aby wyświetlić kod",
"focusOnSearchBar": "Uaktywnij wyszukiwanie przy uruchamianiu aplikacji",
"confirmUpdatingkey": "Czy na pewno chcesz zaktualizować tajny klucz?",
"minimizeAppOnCopy": "Minimalizuj aplikację przy kopiowaniu",
"editCodeAuthMessage": "Uwierzytelnij, aby edytować kod",
"deleteCodeAuthMessage": "Uwierzytelnij, aby usunąć kod",
"showQRAuthMessage": "Uwierzytelnij, aby pokazać kod QR",
"editCodeAuthMessage": "Uwierzytelnij się, aby edytować kod",
"deleteCodeAuthMessage": "Uwierzytelnij się, aby usunąć kod",
"showQRAuthMessage": "Uwierzytelnij się, aby pokazać kod QR",
"confirmAccountDeleteTitle": "Potwierdź usunięcie konta",
"confirmAccountDeleteMessage": "To konto jest połączone z innymi aplikacjami Ente, jeśli ich używasz.\n\nTwoje przesłane dane, we wszystkich aplikacjach Ente, zostaną zaplanowane do usunięcia, a Twoje konto zostanie trwale usunięte.",
"androidBiometricHint": "Potwierdź swoją tożsamość",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "Nie rozpoznano. Spróbuj ponownie.",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "Sukces",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "Anuluj",
"@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."
@@ -345,13 +376,95 @@
"@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."
},
"goToSettings": "Przejdź do Ustawień",
"androidBiometricRequiredTitle": "Wymagana biometria",
"@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": "Wymagane dane logowania urządzenia",
"@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": "Wymagane dane logowania urządzenia",
"@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": "Przejdź do ustawień",
"@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": "Uwierzytelnianie biometryczne nie jest skonfigurowane na tym urządzeniu. Przejdź do 'Ustawienia > Bezpieczeństwo', aby dodać uwierzytelnianie biometryczne.",
"@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": "Uwierzytelnianie biometryczne jest wyłączone. Proszę zablokować i odblokować ekran, aby je włączyć.",
"@iOSLockOut": {
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
},
"iOSGoToSettingsDescription": "Uwierzytelnianie biometryczne nie jest skonfigurowane na Twoim urządzeniu. Proszę włączyć Touch ID lub Face ID na swoim telefonie.",
"@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": "OK",
"@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": "Brak połączenia z Internetem",
"pleaseCheckYourInternetConnectionAndTryAgain": "Pros sprawdzić połączenie internetowe i spróbować ponownie.",
"hearUsWhereTitle": "Jak usłyszałeś o Ente? (opcjonalnie)",
"pleaseCheckYourInternetConnectionAndTryAgain": "Prosimy sprawdzić połączenie internetowe i spróbować ponownie.",
"signOutFromOtherDevices": "Wyloguj z pozostałych urządzeń",
"signOutOtherBody": "Jeśli uważasz, że ktoś może znać Twoje hasło, możesz wymusić wylogowanie na wszystkich innych urządzeniach korzystających z Twojego konta.",
"signOutOtherDevices": "Wyloguj z pozostałych urządzeń",
"doNotSignOut": "Nie wylogowuj mnie",
"hearUsWhereTitle": "Jak usłyszałeś/aś o Ente? (opcjonalnie)",
"hearUsExplanation": "Nie śledzimy instalacji aplikacji. Pomogłyby nam, gdybyś powiedział/a nam, gdzie nas znalazłeś/aś!",
"recoveryKeySaved": "Klucz odzyskiwania zapisany w folderze Pobrane!",
"waitingForBrowserRequest": "Oczekiwanie na żądanie przeglądarki...",
"waitingForVerification": "Oczekiwanie na weryfikację...",
"developerSettings": "Ustawienia deweloperskie"
"passkey": "Klucz dostępu",
"passKeyPendingVerification": "Weryfikacja jest nadal w toku",
"loginSessionExpired": "Sesja wygasła",
"loginSessionExpiredDetails": "Twoja sesja wygasła. Zaloguj się ponownie.",
"developerSettingsWarning": "Czy na pewno chcesz zmodyfikować ustawienia programisty?",
"developerSettings": "Ustawienia dla programistów",
"serverEndpoint": "Punkt końcowy serwera",
"invalidEndpoint": "Punkt końcowy jest nieprawidłowy",
"invalidEndpointMessage": "Niestety, wprowadzony punkt końcowy jest nieprawidłowy. Wprowadź prawidłowy punkt końcowy i spróbuj ponownie.",
"endpointUpdatedMessage": "Punkt końcowy zaktualizowany pomyślnie",
"customEndpoint": "Połączono z {endpoint}",
"pinText": "Przypnij",
"unpinText": "Odepnij",
"pinnedCodeMessage": "Przypięto {code}",
"unpinnedCodeMessage": "Odpięto {code}",
"tags": "Etykiety",
"createNewTag": "Utwórz Nową Etykietę",
"tag": "Etykieta",
"create": "Utwórz",
"editTag": "Edytuj Etykietę",
"deleteTagTitle": "Usunąć etykietę?",
"deleteTagMessage": "Czy na pewno chcesz usunąć tę etykietę? Ta akcja jest nieodwracalna.",
"somethingWentWrongParsingCode": "Nie udało się przetworzyć {x} kodów.",
"updateNotAvailable": "Aktualizacja jest niedostępna",
"viewRawCodes": "Zobacz surowe kody",
"rawCodes": "Surowe kody",
"rawCodeData": "Dane surowego kodu",
"appLock": "Blokada dostępu do aplikacji",
"noSystemLockFound": "Nie znaleziono blokady systemowej",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Aby włączyć blokadę aplikacji, należy skonfigurować hasło urządzenia lub blokadę ekranu w ustawieniach systemu.",
"autoLock": "Automatyczna blokada",
"immediately": "Natychmiast",
"reEnterPassword": "Wprowadź ponownie hasło",
"reEnterPin": "Wprowadź ponownie kod PIN",
"next": "Dalej",
"tooManyIncorrectAttempts": "Zbyt wiele błędnych prób",
"tapToUnlock": "Naciśnij, aby odblokować",
"setNewPassword": "Ustaw nowe hasło",
"deviceLock": "Blokada urządzenia",
"hideContent": "Ukryj zawartość",
"hideContentDescriptionAndroid": "Ukrywa zawartość aplikacji w przełączniku aplikacji i wyłącza zrzuty ekranu",
"hideContentDescriptioniOS": "Ukrywa zawartość aplikacji w przełączniku aplikacji",
"autoLockFeatureDescription": "Czas, po którym aplikacja blokuje się po umieszczeniu jej w tle",
"appLockDescription": "Wybierz między domyślnym ekranem blokady urządzenia a niestandardowym ekranem blokady z kodem PIN lub hasłem.",
"pinLock": "Blokada PIN",
"enterPin": "Wprowadź kod PIN",
"setNewPin": "Ustaw nowy kod PIN",
"importFailureDescNew": "Nie udało się przetworzyć wybranego pliku."
}

View File

@@ -6,15 +6,15 @@
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Proteja seus códigos 2FA",
"onBoardingBody": "Proteja os seus códigos 2FA",
"onBoardingGetStarted": "Introdução",
"setupFirstAccount": "Configure sua primeira conta",
"importScanQrCode": "Escanear QR code",
"qrCode": "QR Code",
"importEnterSetupKey": "Inserir uma chave de configuração",
"importAccountPageTitle": "Inserir detalhes da conta",
"secretCanNotBeEmpty": "A chave secreta não pode ficar vazia",
"bothIssuerAndAccountCanNotBeEmpty": "Emissor e conta não podem ficar vazios",
"importEnterSetupKey": "Insira uma chave de configuração",
"importAccountPageTitle": "Inserir dados da conta",
"secretCanNotBeEmpty": "A chave secreta não pode ser vazia",
"bothIssuerAndAccountCanNotBeEmpty": "O emissor e a conta não podem estar vazios",
"incorrectDetails": "Detalhes incorretos",
"pleaseVerifyDetails": "Por favor, verifique os detalhes e tente novamente",
"codeIssuerHint": "Emissor",
@@ -26,19 +26,19 @@
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Por favor, faça login novamente",
"pleaseLoginAgain": "Entre novamente",
"loggingOut": "Saindo...",
"timeBasedKeyType": "Baseado no horário (TOTP)",
"counterBasedKeyType": "Baseado em um contador (HOTP)",
"counterBasedKeyType": "Baseado num contador (HOTP)",
"saveAction": "Salvar",
"nextTotpTitle": "avançar",
"deleteCodeTitle": "Apagar código?",
"deleteCodeMessage": "Tem certeza de que deseja excluir este código? Esta ação é irreversível.",
"deleteCodeMessage": "Deseja mesmo excluir este código? Esta ação é irreversível.",
"viewLogsAction": "Ver logs",
"sendLogsDescription": "Isto irá compartilhar seus logs para nos ajudar a depurar seu problema. Embora tomemos precauções para garantir que informações sensíveis não sejam enviadas, encorajamos você a ver esses logs antes de compartilhá-los.",
"sendLogsDescription": "Isto compartilhará seus logs para ajudar-nos depurar seu problema. Enquanto tomamos precauções para ter certeza que as informações sensíveis não estejam registradas, nós encorajamos você a visualizar esses logs antes de compartilhá-los.",
"preparingLogsTitle": "Preparando logs...",
"emailLogsTitle": "Logs (e-mail)",
"emailLogsMessage": "Por favor, envie os logs para {email}",
"emailLogsMessage": "Envie os logs para {email}",
"@emailLogsMessage": {
"placeholders": {
"email": {
@@ -48,9 +48,9 @@
},
"copyEmailAction": "Copiar e-mail",
"exportLogsAction": "Exportar logs",
"reportABug": "Informar um problema",
"crashAndErrorReporting": "Reporte de erros e falhas",
"reportBug": "Informar problema",
"reportABug": "Informe um erro",
"crashAndErrorReporting": "Relatórios de erros",
"reportBug": "Informar erro",
"emailUsMessage": "Envie um e-mail para {email}",
"@emailUsMessage": {
"placeholders": {
@@ -67,10 +67,10 @@
"pleaseWait": "Aguarde...",
"generatingEncryptionKeysTitle": "Gerando chaves de criptografia...",
"recreatePassword": "Recriar senha",
"recreatePasswordMessage": "O dispositivo atual não é poderoso o suficiente para verificar sua senha, mas podemos regenerar de uma forma que funcione com todos os dispositivos.\n\nPor favor, faça o login usando sua chave de recuperação e recrie sua senha (você pode usar o mesmo novamente se desejar).",
"recreatePasswordMessage": "Não é possível verificar a sua senha no dispositivo atual, então precisamos regenerá-la para que funcione em todos os dispositivos. \n\nEntre com a sua chave de recuperação e regenere sua senha (você pode usar a mesma se quiser).",
"useRecoveryKey": "Usar chave de recuperação",
"incorrectPasswordTitle": "Senha incorreta",
"welcomeBack": "Bem-vindo de volta!",
"welcomeBack": "Bem-vindo(a) de volta!",
"madeWithLoveAtPrefix": "feito com ❤️ em ",
"supportDevs": "Inscreva-se no <bold-green>ente</bold-green> para apoiar este projeto.",
"supportDiscount": "Use o cupom \"AUTH\" para obter 10% de desconto no primeiro ano",
@@ -79,7 +79,7 @@
"data": "Dados",
"importCodes": "Importar códigos",
"importTypePlainText": "Texto simples",
"importTypeEnteEncrypted": "Exportação Ente criptografada",
"importTypeEnteEncrypted": "Exportação do Ente criptografada",
"passwordForDecryptingExport": "Senha para descriptografar a exportação",
"passwordEmptyError": "A senha não pode estar vazia",
"importFromApp": "Importar códigos do {appName}",
@@ -124,29 +124,29 @@
"suggestFeatures": "Sugerir recursos",
"faq": "Perguntas frequentes",
"faq_q_1": "Quão seguro é o Auth?",
"faq_a_1": "Todos os códigos que você faz backup via Auth são armazenados criptografados de ponta a ponta. Isso significa que somente você pode acessar seus códigos. Nossos aplicativos são de código aberto e nossa criptografia foi auditada externamente.",
"faq_q_2": "Eu posso acessar meus códigos no computador?",
"faq_a_1": "Todos os backups de códigos via Auth são armazenados com criptografia de ponta-a-ponta. Isso significa que só você pode acessar os códigos. Nossos apps são de código-aberto e nossa criptografia é auditada por terceiros.",
"faq_q_2": "Posso acessar meus códigos no computador?",
"faq_a_2": "Você pode acessar seus códigos na web em auth.ente.io.",
"faq_q_3": "Como faço para excluir códigos?",
"faq_q_3": "Como posso excluir códigos?",
"faq_a_3": "Você pode excluir um código deslizando para a esquerda sobre esse item.",
"faq_q_4": "Como posso apoiar este projeto?",
"faq_a_4": "Você pode apoiar o desenvolvimento deste projeto assinando nosso aplicativo de Fotos em ente.io.",
"faq_q_5": "Como posso ativar o bloqueio facial no Auth",
"faq_a_4": "Você pode apoiar o desenvolvimento do projeto com a assinatura do nosso app Photos @ ente.io.",
"faq_q_5": "Como ativar o bloqueio facial no Auth",
"faq_a_5": "Você pode ativar o bloqueio facial em Configurações → Segurança → Tela de bloqueio.",
"somethingWentWrongMessage": "Algo deu errado. Por favor, tente outra vez",
"somethingWentWrongMessage": "Algo deu errado. Tente outra vez",
"leaveFamily": "Sair da família",
"leaveFamilyMessage": "Tem certeza que deseja sair do plano familiar?",
"leaveFamilyMessage": "Deseja mesmo sair do plano familiar?",
"inFamilyPlanMessage": "Você está em um plano familiar!",
"swipeHint": "Deslize para a esquerda para editar ou remover os códigos",
"scan": "Escanear",
"scanACode": "Escanear código",
"verify": "Verificar",
"verifyEmail": "Verificar e-mail",
"enterCodeHint": "Digite o código de 6 dígitos de\nseu aplicativo autenticador",
"enterCodeHint": "Digite o código de 6 dígitos\ndo seu app autenticador",
"lostDeviceTitle": "Perdeu um dispositivo?",
"twoFactorAuthTitle": "Autenticação de dois fatores",
"passkeyAuthTitle": "Autenticação via Chave de acesso",
"verifyPasskey": "Verificar senha-mestra",
"passkeyAuthTitle": "Verificação de chave de acesso",
"verifyPasskey": "Verificar chave de acesso",
"recoverAccount": "Recuperar conta",
"enterRecoveryKeyHint": "Digite a chave de recuperação",
"recover": "Recuperar",
@@ -162,10 +162,10 @@
"noRecoveryKeyTitle": "Sem chave de recuperação?",
"enterEmailHint": "Insira o endereço de e-mail",
"invalidEmailTitle": "Endereço de e-mail inválido",
"invalidEmailMessage": "Por favor, insira um endereço de e-mail válido.",
"invalidEmailMessage": "Insira um endereço de e-mail válido.",
"deleteAccount": "Excluir conta",
"deleteAccountQuery": "Sentiremos muito por vê-lo partir. Você está enfrentando algum problema?",
"yesSendFeedbackAction": "Sim, enviar comentário",
"deleteAccountQuery": "Estamos tristes com sua decisão. Você encontrou algum problema?",
"yesSendFeedbackAction": "Sim, enviar feedback",
"noDeleteAccountAction": "Não, excluir conta",
"initiateAccountDeleteTitle": "Por favor, autentique-se para iniciar a exclusão de conta",
"sendEmail": "Enviar e-mail",
@@ -173,7 +173,7 @@
"weakStrength": "Fraca",
"strongStrength": "Forte",
"moderateStrength": "Moderada",
"confirmPassword": "Confirme sua senha",
"confirmPassword": "Confirmar senha",
"close": "Fechar",
"oopsSomethingWentWrong": "Opa. Algo deu errado.",
"selectLanguage": "Trocar idioma",
@@ -186,25 +186,25 @@
"viewActiveSessions": "Ver sessões ativas",
"authToViewYourActiveSessions": "Por favor, autentique-se para ver as sessões ativas",
"searchHint": "Buscar...",
"search": "Pesquisar",
"search": "Buscar",
"sorryUnableToGenCode": "Desculpe, não foi possível gerar um código para {issuerName}",
"noResult": "Nenhum resultado",
"addCode": "Adicionar código",
"scanAQrCode": "Escanear QR code",
"enterDetailsManually": "Insira os dados manualmente",
"enterDetailsManually": "Inserir dados manualmente",
"edit": "Editar",
"copiedToClipboard": "Copiado para a área de transferência",
"copiedNextToClipboard": "Copiado o próximo código para a área de transferência",
"copiedNextToClipboard": "Próximo código copiado para a área de transferência",
"error": "Erro",
"recoveryKeyCopiedToClipboard": "A chave de recuperação foi copiada para a área de transferência",
"recoveryKeyOnForgotPassword": "Caso você esqueça sua senha, a única maneira de recuperar seus dados é com essa chave.",
"recoveryKeySaveDescription": "Não armazenamos essa chave, por favor, salve essa chave de 24 palavras em um lugar seguro.",
"recoveryKeyCopiedToClipboard": "Chave de recuperação copiada para a área de transferência",
"recoveryKeyOnForgotPassword": "Caso esqueça sua senha, a única maneira de recuperar seus dados é com esta chave.",
"recoveryKeySaveDescription": "Não armazenamos esta chave de 24 palavras. Salve-a em um lugar seguro.",
"doThisLater": "Fazer isso depois",
"saveKey": "Salvar chave",
"save": "Salvar",
"send": "Enviar",
"saveOrSendDescription": "Você deseja salvar isso no seu armazenamento (pasta de downloads por padrão) ou enviá-lo para outros aplicativos?",
"saveOnlyDescription": "Você deseja salvar isto no seu armazenamento (pasta de downloads por padrão)?",
"saveOrSendDescription": "Deseja mesmo salvar em seu armazenamento (pasta Downloads por padrão) ou enviar para outros apps?",
"saveOnlyDescription": "Deseja mesmo salvar em seu armazenamento (pasta Downloads por padrão)?",
"back": "Voltar",
"createAccount": "Criar conta",
"passwordStrength": "Força da senha: {passwordStrengthValue}",
@@ -228,10 +228,10 @@
"changePasswordTitle": "Alterar senha",
"resetPasswordTitle": "Redefinir senha",
"encryptionKeys": "Chaves de criptografia",
"passwordWarning": "Nós não salvamos essa senha, então se você a esquecer, <underline> nós não poderemos descriptografar seus dados</underline>",
"passwordWarning": "Não salvamos esta senha, então se você esquecê-la, <underline>não podemos descriptografar seus dados</underline>",
"enterPasswordToEncrypt": "Digite uma senha que podemos usar para criptografar seus dados",
"enterNewPasswordToEncrypt": "Insira uma senha nova para criptografar seus dados",
"passwordChangedSuccessfully": "Senha alterada com sucesso",
"enterNewPasswordToEncrypt": "Insira uma nova senha para criptografar seus dados",
"passwordChangedSuccessfully": "A senha foi alterada",
"generatingEncryptionKeys": "Gerando chaves de criptografia...",
"continueLabel": "Continuar",
"insecureDevice": "Dispositivo inseguro",
@@ -241,15 +241,15 @@
"loginTerms": "Ao clicar em login, eu concordo com os <u-terms>termos de serviço</u-terms> e a <u-policy>política de privacidade</u-policy>",
"logInLabel": "Entrar",
"logout": "Sair",
"areYouSureYouWantToLogout": "Você tem certeza que deseja encerrar a sessão?",
"yesLogout": "Sim, sair",
"areYouSureYouWantToLogout": "Deseja mesmo sair?",
"yesLogout": "Sim, quero sair",
"exit": "Sair",
"verifyingRecoveryKey": "Verificando chave de recuperação...",
"recoveryKeyVerified": "Chave de recuperação verificada",
"recoveryKeySuccessBody": "Ótimo! Sua chave de recuperação é válida. Obrigado por verificar.\n\nLembre-se de manter o backup seguro de sua chave de recuperação.",
"invalidRecoveryKey": "A chave de recuperação que você digitou não é válida. Certifique-se de que contém 24 palavras e verifique a ortografia de cada uma.\n\nSe você inseriu um código de recuperação mais antigo, verifique se ele tem 64 caracteres e verifique cada um deles.",
"recreatePasswordTitle": "Redefinir senha",
"recreatePasswordBody": "O dispositivo atual não é poderoso o suficiente para verificar sua senha, mas podemos recriar de uma forma que funcione com todos os dispositivos.\n\nPor favor, faça o login usando sua chave de recuperação e recrie sua senha (você pode usar a mesma novamente se desejar).",
"recreatePasswordBody": "Não é possível verificar a sua senha no dispositivo atual, mas podemos regenerá-la para que funcione em todos os dispositivos. \n\nEntre com a sua chave de recuperação e regenere sua senha (você pode usar a mesma se quiser).",
"invalidKey": "Chave inválida",
"tryAgain": "Tente novamente",
"viewRecoveryKey": "Ver chave de recuperação",
@@ -258,22 +258,24 @@
"confirmYourRecoveryKey": "Confirme sua chave de recuperação",
"confirm": "Confirmar",
"emailYourLogs": "Enviar logs por e-mail",
"pleaseSendTheLogsTo": "Por favor, envie os logs para \n{toEmail}",
"pleaseSendTheLogsTo": "Envie os logs para \n{toEmail}",
"copyEmailAddress": "Copiar endereço de e-mail",
"exportLogs": "Exportar logs",
"enterYourRecoveryKey": "Digite a chave de recuperação",
"tempErrorContactSupportIfPersists": "Parece que algo deu errado. Por favor, tente novamente mais tarde. Se o erro persistir, entre em contato com nossa equipe de suporte.",
"networkHostLookUpErr": "Não foi possível conectar-se ao Ente, verifique suas configurações de rede e entre em contato com o suporte se o erro persistir.",
"networkConnectionRefusedErr": "Não foi possível conectar ao Ente, tente novamente após algum tempo. Se o erro persistir, entre em contato com o suporte.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Parece que algo deu errado. Por favor, tente novamente mais tarde. Se o erro persistir, entre em contato com nossa equipe de suporte.",
"about": "Sobre",
"weAreOpenSource": "Nós somos de código aberto!",
"weAreOpenSource": "Nosso código é aberto!",
"privacy": "Privacidade",
"terms": "Termos",
"checkForUpdates": "Verificar por atualizações",
"checkForUpdates": "Buscar atualizações",
"checkStatus": "Verificar status",
"downloadUpdate": "Baixar",
"criticalUpdateAvailable": "Atualização crítica disponível",
"updateAvailable": "Atualização disponível",
"update": "Atualização",
"update": "Atualizar",
"checking": "Verificando...",
"youAreOnTheLatestVersion": "Você está na versão mais recente",
"warning": "Atenção",
@@ -316,13 +318,13 @@
"somethingWentWrongPleaseTryAgain": "Algo deu errado. Por favor, tente outra vez",
"thisWillLogYouOutOfThisDevice": "Isso fará com que você saia deste dispositivo!",
"thisWillLogYouOutOfTheFollowingDevice": "Isso fará com que você saia do seguinte dispositivo:",
"terminateSession": "Encerrar sessão?",
"terminateSession": "Sair?",
"terminate": "Encerrar",
"thisDevice": "Esse dispositivo",
"toResetVerifyEmail": "Para redefinir a sua senha, por favor verifique o seu email primeiro.",
"thisEmailIsAlreadyInUse": "Este e-mail já está em uso",
"verificationFailedPleaseTryAgain": "Falha na verificação. Por favor, tente novamente",
"yourVerificationCodeHasExpired": "O código de verificação expirou",
"verificationFailedPleaseTryAgain": "Falha na verificação. Tente novamente",
"yourVerificationCodeHasExpired": "Seu código de verificação expirou",
"incorrectCode": "Código incorreto",
"sorryTheCodeYouveEnteredIsIncorrect": "Desculpe, o código que você inseriu está incorreto",
"emailChangedTo": "E-mail alterado para {newEmail}",
@@ -333,7 +335,7 @@
"theRecoveryKeyYouEnteredIsIncorrect": "A chave de recuperação inserida está incorreta",
"enterPassword": "Inserir senha",
"selectExportFormat": "Selecione o formato para exportação",
"exportDialogDesc": "As exportações criptografadas ficarão protegidas por uma senha de sua escolha.",
"exportDialogDesc": "As exportações criptografadas serão protegidas por uma senha de sua escolha.",
"encrypted": "Criptografado",
"plainText": "Texto simples",
"passwordToEncryptExport": "Senha para criptografar a exportação",
@@ -347,13 +349,13 @@
"shouldHideCode": "Ocultar códigos",
"doubleTapToViewHiddenCode": "Você pode tocar duas vezes em uma entrada para ver o código",
"focusOnSearchBar": "Foco na busca ao iniciar o app",
"confirmUpdatingkey": "Você tem certeza que deseja atualizar a chave secreta?",
"minimizeAppOnCopy": "Minimizar aplicativo ao copiar",
"confirmUpdatingkey": "Deseja mesmo atualizar a sua chave secreta?",
"minimizeAppOnCopy": "Minimizar app ao copiar",
"editCodeAuthMessage": "Autenticar para editar o código",
"deleteCodeAuthMessage": "Autenticar para excluir o código",
"showQRAuthMessage": "Autenticar para mostrar o QR code",
"confirmAccountDeleteTitle": "Confirmar exclusão de conta",
"confirmAccountDeleteMessage": "Esta conta está vinculada a outros aplicativos Ente, se você usa algum.\n\nSeus dados enviados, em todos os aplicativos Ente, serão agendados para exclusão, e sua conta será excluída permanentemente.",
"confirmAccountDeleteMessage": "Esta conta está vinculada a outros apps Ente, se você usa algum.\n\nSeus dados enviados, entre todos os apps Ente, serão marcados para exclusão, e sua conta será apagada permanentemente.",
"androidBiometricHint": "Verificar identidade",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
@@ -378,11 +380,11 @@
"@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": "Credenciais do dispositivo são necessárias",
"androidDeviceCredentialsRequiredTitle": "Credenciais do dispositivo necessárias",
"@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": "Credenciais do dispositivo são necessárias",
"androidDeviceCredentialsSetupDescription": "Credenciais do dispositivo necessárias",
"@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."
},
@@ -406,27 +408,27 @@
"@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": "Sem coneo à internet",
"noInternetConnection": "Não conectado à internet",
"pleaseCheckYourInternetConnectionAndTryAgain": "Verifique sua conexão com a internet e tente novamente.",
"signOutFromOtherDevices": "Terminar sessão em outros dispositivos",
"signOutFromOtherDevices": "Sair da conta em outros dispositivos",
"signOutOtherBody": "Se você acha que alguém pode saber sua senha, você pode forçar todos os outros dispositivos que estão com sua conta a desconectar.",
"signOutOtherDevices": "Terminar sessão em outros dispositivos",
"signOutOtherDevices": "Sair em outros dispositivos",
"doNotSignOut": "Não sair",
"hearUsWhereTitle": "Como você ouviu sobre o Ente? (opcional)",
"hearUsExplanation": "Não rastreamos instalações do aplicativo. Seria útil se você nos contasse onde nos encontrou!",
"hearUsExplanation": "Não sabemos como você encontrou nosso app. Seria útil se você nos contasse!",
"recoveryKeySaved": "Chave de recuperação salva na pasta Downloads!",
"waitingForBrowserRequest": "Aguardando solicitação do navegador...",
"waitingForVerification": "Esperando por verificação...",
"passkey": "Senha-mestra",
"waitingForVerification": "Aguardando verificação...",
"passkey": "Chave de acesso",
"passKeyPendingVerification": "A verificação ainda está pendente",
"loginSessionExpired": "Sessão expirada",
"loginSessionExpiredDetails": "Sua sessão expirou. Por favor, entre novamente.",
"developerSettingsWarning": "Tem certeza de que deseja modificar as configurações de Desenvolvedor?",
"developerSettings": "Configurações de desenvolvedor",
"developerSettingsWarning": "Deseja mesmo alterar os ajustes de Desenvolvedor?",
"developerSettings": "Ajustes de Desenvolvedor",
"serverEndpoint": "Endpoint do servidor",
"invalidEndpoint": "Endpoint inválido",
"invalidEndpointMessage": "Desculpe, o endpoint que você inseriu é inválido. Por favor, insira um endpoint válido e tente novamente.",
"endpointUpdatedMessage": "Endpoint atualizado com sucesso",
"endpointUpdatedMessage": "O endpoint foi atualizado",
"customEndpoint": "Conectado a {endpoint}",
"pinText": "Fixar",
"unpinText": "Desafixar",
@@ -438,7 +440,31 @@
"create": "Criar",
"editTag": "Editar etiqueta",
"deleteTagTitle": "Apagar etiqueta?",
"deleteTagMessage": "Tem certeza de que deseja excluir esta etiqueta? Essa ação é irreversível.",
"deleteTagMessage": "Deseja mesmo excluir esta etiqueta? Essa ação é irreversível.",
"somethingWentWrongParsingCode": "Não foi possível analisar os códigos {x}.",
"updateNotAvailable": "Atualização não está disponível"
"updateNotAvailable": "Atualização indisponível",
"viewRawCodes": "Ver códigos brutos",
"rawCodes": "Códigos brutos",
"rawCodeData": "Dados de códigos brutos",
"appLock": "Bloqueio do app",
"noSystemLockFound": "Nenhum bloqueio do sistema encontrado",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Para ativar o bloqueio do app, configure uma senha no dispositivo ou tela de bloqueio nas configurações do sistema.",
"autoLock": "Bloqueio automático",
"immediately": "Imediatamente",
"reEnterPassword": "Reinserir senha",
"reEnterPin": "Reinserir PIN",
"next": "Avançar",
"tooManyIncorrectAttempts": "Muitas tentativas incorretas",
"tapToUnlock": "Toque para desbloquear",
"setNewPassword": "Defina a nova senha",
"deviceLock": "Bloqueio do dispositivo",
"hideContent": "Ocultar conteúdo",
"hideContentDescriptionAndroid": "Oculta o conteúdo do app no seletor de apps e desativa as capturas de tela",
"hideContentDescriptioniOS": "Oculta o conteúdo do seletor de apps",
"autoLockFeatureDescription": "Tempo de bloqueio do app em segundo plano",
"appLockDescription": "Escolha entre a tela de bloqueio padrão do seu dispositivo e uma tela de bloqueio personalizada com PIN ou senha.",
"pinLock": "Bloqueio PIN",
"enterPin": "Insira o PIN",
"setNewPin": "Definir novo PIN",
"importFailureDescNew": "Não foi possível analisar o arquivo selecionado."
}

View File

@@ -0,0 +1,239 @@
{
"account": "Cont",
"unlock": "Deblochează",
"recoveryKey": "Cheie de recuperare",
"onBoardingBody": "Salvează în siguranță codurile 2FA",
"onBoardingGetStarted": "Începe",
"setupFirstAccount": "Configurează primul cont",
"importScanQrCode": "Scanează un cod QR",
"qrCode": "Cod QR",
"importEnterSetupKey": "Introdu o cheie de configurare",
"importAccountPageTitle": "Introdu detaliile contului",
"secretCanNotBeEmpty": "Secretul nu poate fi gol",
"incorrectDetails": "Detalii incorecte",
"pleaseVerifyDetails": "Te rog verifică detaliile și încearcă din nou",
"codeIssuerHint": "Emitent",
"codeSecretKeyHint": "Cheie Secretă",
"codeAccountHint": "Cont (tu@domeniu.com)",
"codeTagHint": "Etichetă",
"accountKeyType": "Tipul de cheie",
"sessionExpired": "Sesiune expirată",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Te rugăm să te autentifici din nou",
"loggingOut": "Deconectare...",
"timeBasedKeyType": "Bazat pe timp (TOTP)",
"counterBasedKeyType": "Bazat pe contor (HOTP)",
"saveAction": "Salvare",
"nextTotpTitle": "următor",
"deleteCodeTitle": "Șterge codul?",
"deleteCodeMessage": "Ești sigur că vrei să ștergi acest cod? Acțiunea este ireversibilă.",
"viewLogsAction": "Afișare jurnale",
"preparingLogsTitle": "Se pregătesc jurnalele...",
"emailLogsTitle": "Jurnale e-mail",
"emailLogsMessage": "Te rugăm să trimiți jurnalele la {email}",
"@emailLogsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"copyEmailAction": "Copiază e-mailul",
"exportLogsAction": "Exportează log-urile",
"reportABug": "Raportează o eroare",
"crashAndErrorReporting": "Închidere accidentală şi raportare erori",
"reportBug": "Raportare bug",
"emailUsMessage": "Te rugăm să ne trimiți un e-mail la {email}",
"@emailUsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"contactSupport": "Contactează suportul",
"rateUsOnStore": "Evaluează-ne pe {storeName}",
"blog": "Blog",
"verifyPassword": "Verifică parola",
"pleaseWait": "Te rog așteaptă...",
"recreatePassword": "Recreează parola",
"incorrectPasswordTitle": "Parolă incorectă",
"welcomeBack": "Bine ai revenit!",
"madeWithLoveAtPrefix": "creat cu ❤️ la ",
"supportDevs": "Abonează-te la <bold-green>ente</bold-green> pentru a ne susține",
"supportDiscount": "Folosește codul \"AUTH\" pentru a obține o reducere de 10% în primul an",
"changeEmail": "Schimbă e-mailul",
"changePassword": "Schimbă parola",
"data": "Date",
"importCodes": "Importă coduri",
"importTypePlainText": "Text simplu",
"importTypeEnteEncrypted": "Export Ente criptat",
"passwordForDecryptingExport": "Parola pentru a decripta exportul",
"passwordEmptyError": "Parola nu poate fi goală",
"importFromApp": "Importă coduri din {appName}",
"importGoogleAuthGuide": "Exportă-ți conturile din Google Autheticator cu un cod QR utilizând opțiunea „Transfer conturi”. Apoi, utilizând alt dispozitiv, scanați codul QR.\n\nSfat: Poți utiliza camera web a laptopul-ui pentru a scana codul QR.",
"importSelectJsonFile": "Selectează fișierul JSON",
"importSelectAppExport": "Selectează fișierul de export din {appName}",
"importEnteEncGuide": "Selectează fișierul criptat JSON exportat din Bențe",
"exportCodes": "Exportă coduri",
"importLabel": "Importă",
"selectFile": "Selectează fișier",
"emailVerificationToggle": "Verificarea adresei de e-mail",
"authToChangeEmailVerificationSetting": "Te rugăm să te autentifici pentru a schimba verificarea prin e-mail",
"authToChangeYourEmail": "Te rugăm să te autentifici pentru a-ți schimba adresa de e-mail",
"ok": "Ok",
"cancel": "Anulare",
"yes": "Da",
"no": "Nu",
"email": "E-mail",
"support": "Asistență",
"general": "General",
"settings": "Setări",
"copied": "S-a copiat",
"pleaseTryAgain": "Te rugăm să încerci din nou",
"existingUser": "Utilizator existent",
"newUser": "Nou în Ente",
"delete": "Ștergere",
"enterYourPasswordHint": "Introdu parola",
"forgotPassword": "Am uitat parola",
"oops": "Ups",
"suggestFeatures": "Sugerează funcționalități",
"faq": "Întrebări frecvente",
"faq_q_1": "Cât de sigur este Auth?",
"faq_q_2": "Pot accesa codurile de pe desktop?",
"faq_q_3": "Cum pot șterge codurile?",
"faq_q_4": "Cum pot susţine acest proiect?",
"faq_a_4": "Poți susține dezvoltarea acestui proiect prin cumpărarea unui abonament la aplicația noastră de fotografii @ ente.io.",
"faq_q_5": "Cum pot activa blocarea cu FaceID în Auth",
"faq_a_5": "Poți activa blocarea FaceID din Setări → Securitate → Ecran de blocare.",
"somethingWentWrongMessage": "Ceva n-a mers bine, te rog încearcă din nou",
"leaveFamily": "Părăsește familia",
"verifyEmail": "Verifică e-mail",
"twoFactorAuthTitle": "Autentificare cu doi factori",
"recoverAccount": "Recuperare cont",
"recover": "Recuperează",
"invalidQRCode": "Codul QR nu este valid",
"enterEmailHint": "Introdu adresa ta de e-mail",
"invalidEmailTitle": "Adresa e-mail nu este validă",
"invalidEmailMessage": "Te rugăm să introduci o adresă de e-mail validă.",
"deleteAccount": "Ștergere cont",
"yesSendFeedbackAction": "Da, trimite feedback",
"noDeleteAccountAction": "Nu, șterge contul",
"initiateAccountDeleteTitle": "Te rugăm să te autentifici pentru a iniția ștergerea contului",
"sendEmail": "Trimite e-mail",
"confirmPassword": "Confirmă parola",
"close": "Închide",
"selectLanguage": "Selectare limbă",
"language": "Limbă",
"social": "Social",
"security": "Securitate",
"lockscreen": "Ecran de blocare",
"search": "Căutare",
"scanAQrCode": "Scanează un cod QR",
"edit": "Editare",
"copiedToClipboard": "Copiat în clipboard",
"copiedNextToClipboard": "Codul următor a fost copiat în clipboard",
"error": "Eroare",
"recoveryKeyCopiedToClipboard": "Cheie de recuperare salvată în clipboard",
"recoveryKeyOnForgotPassword": "Dacă îți uiți parola, singura modalitate prin care poți recupera datele este cu această cheie.",
"recoveryKeySaveDescription": "Nu stocăm această cheie, vă rugăm salvați această cheie de 24 de cuvinte într-un loc sigur.",
"saveKey": "Salvare cheie",
"save": "Salvare",
"send": "Trimitere",
"back": "Înapoi",
"password": "Parolă",
"termsOfServicesTitle": "Termeni",
"setPasswordTitle": "Setează parola",
"changePasswordTitle": "Schimbă parola",
"resetPasswordTitle": "Resetează parola",
"passwordWarning": "Nu stocăm această parolă, deci dacă o uiți, <underline>nu îți putem decripta datele</underline>",
"enterPasswordToEncrypt": "Introdu o parolă pe care o putem folosi pentru a-ți cripta datele",
"passwordChangedSuccessfully": "Parola a fost modificată cu succes",
"recreatePasswordTitle": "Recreează parola",
"invalidKey": "Cheie invalidă",
"tryAgain": "Încearcă din nou",
"viewRecoveryKey": "Vezi cheia de recuperare",
"pleaseSendTheLogsTo": "Te rugăm să trimiți jurnalele la {toEmail}",
"copyEmailAddress": "Copiază adresa de e-mail",
"about": "Despre",
"weAreOpenSource": "Suntem open source!",
"privacy": "Confidențialitate",
"terms": "Termeni",
"checkForUpdates": "Verifică actualizări",
"checkStatus": "Verifică status",
"downloadUpdate": "Descărcare",
"criticalUpdateAvailable": "Actualizare critică disponibilă",
"updateAvailable": "Actualizare disponibilă",
"update": "Actualizare",
"checking": "Se verifică...",
"youAreOnTheLatestVersion": "Utilizezi cea mai recentă versiune",
"warning": "Atenție",
"iUnderStand": "Înţeleg",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"importSuccessTitle": "Ura!",
"sorry": "Ne pare rău",
"pendingSyncs": "Atenție",
"tapToEnterCode": "Apasă pentru a introduce codul",
"resendEmail": "Retrimite e-mail",
"weHaveSendEmailTo": "Am trimis un e-mail la <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"
}
}
},
"activeSessions": "Sesiuni active",
"somethingWentWrongPleaseTryAgain": "Ceva n-a mers bine, te rog încearcă din nou",
"thisDevice": "Acest dispozitiv",
"toResetVerifyEmail": "Pentru a reseta parola, te rugăm să confirmi mai întâi adresa de e-mail.",
"thisEmailIsAlreadyInUse": "Această adresă de e-mail este deja folosită",
"emailChangedTo": "E-mail modificat în {newEmail}",
"enterPassword": "Introdu parola",
"passwordToEncryptExport": "Parolă pentru a cripta exportul",
"useOffline": "Utilizează fără backup-uri",
"offlineModeWarning": "Ai ales să continui fără backup-uri. Te rog salvează-ți backup-urile manual ca să fii sigur că ai codurile în siguranță.",
"showLargeIcons": "Afișează iconițele mari",
"shouldHideCode": "Ascunde codurile",
"androidBiometricHint": "Verifică identitatea",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "Neidentificat. Încearcă din nou.",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "Succes",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "Anulare",
"@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": "Autentificare necesară",
"@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."
},
"goToSettings": "Mergi la setări",
"@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."
},
"iOSOkButton": "Ok",
"@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": "Nu există conexiune la internet",
"signOutFromOtherDevices": "Deconectare de pe alte dispozitive",
"signOutOtherDevices": "Deconectează alte dispozitive",
"doNotSignOut": "Nu te deconecta",
"loginSessionExpired": "Sesiune expirată",
"updateNotAvailable": "Actualizare indisponibilă"
}

View File

@@ -263,6 +263,8 @@
"exportLogs": "Экспорт журналов",
"enterYourRecoveryKey": "Введите свой ключ восстановления",
"tempErrorContactSupportIfPersists": "Похоже, что-то пошло не так. Пожалуйста, повторите попытку через некоторое время. Если ошибка повторится, обратитесь в нашу службу поддержки.",
"networkHostLookUpErr": "Не удается подключиться к Ente, пожалуйста, проверьте настройки своей сети и обратитесь в службу поддержки, если ошибка повторится.",
"networkConnectionRefusedErr": "Не удается подключиться к Ente, пожалуйста, повторите попытку через некоторое время. Если ошибка не устраняется, обратитесь в службу поддержки.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Похоже, что-то пошло не так. Пожалуйста, повторите попытку через некоторое время. Если ошибка повторится, обратитесь в нашу службу поддержки.",
"about": "О программе",
"weAreOpenSource": "У нас открытое программное обеспечение!",
@@ -440,5 +442,29 @@
"deleteTagTitle": "Удалить метку?",
"deleteTagMessage": "Вы уверены, что хотите удалить эту метку? Это действие необратимо.",
"somethingWentWrongParsingCode": "Мы не смогли разобрать коды {x}.",
"updateNotAvailable": "Обновление недоступно"
"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": "Не удалось обработать выбранный файл."
}

View File

@@ -0,0 +1,470 @@
{
"account": "Konto",
"unlock": "Odomknúť",
"recoveryKey": "Kľúč pre obnovenie",
"counterAppBarTitle": "Počítadlo",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Zabezpečte svoje kódy 2FA",
"onBoardingGetStarted": "Poďme na to",
"setupFirstAccount": "Vytvorte svoj prvý účet",
"importScanQrCode": "Naskenovať QR kód",
"qrCode": "QR kód",
"importEnterSetupKey": "Vložte kľúč nastavenia",
"importAccountPageTitle": "Vložte detaily o konte",
"secretCanNotBeEmpty": "Tajný kľúč nemôže ostať prázdny",
"bothIssuerAndAccountCanNotBeEmpty": "Buď vydavateľ alebo účet nemôže ostať prázdny",
"incorrectDetails": "Chybné údaje",
"pleaseVerifyDetails": "Prosím, skontrolujte svoje údaje a skúste to znova",
"codeIssuerHint": "Vydavateľ",
"codeSecretKeyHint": "Tajný kľúč",
"codeAccountHint": "Konto (ucet@domena.com)",
"codeTagHint": "Tag",
"accountKeyType": "Typ kľúča",
"sessionExpired": "Relácia vypršala",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Prosím, prihláste sa znova",
"loggingOut": "Odhlasovanie...",
"timeBasedKeyType": "Na základe času (TOTP)",
"counterBasedKeyType": "Na základe počítadla (HOTP)",
"saveAction": "Uložiť",
"nextTotpTitle": "ďalej",
"deleteCodeTitle": "Odstrániť položku?",
"deleteCodeMessage": "Naozaj chcete odstrániť položku? Táto akcia je nezvratná.",
"viewLogsAction": "Zobraziť logy",
"sendLogsDescription": "Toto odošle logy, ktoré nám pomôžu vyriešiť váš problém. Aj keď prijímame preventívne opatrenia, aby sme zabezpečili, že sa citlivé informácie neukladajú do logov, odporúčame vám, aby ste si ich pred zdieľaním pozreli.",
"preparingLogsTitle": "Príprava logov...",
"emailLogsTitle": "Odoslať logy emailom",
"emailLogsMessage": "Prosím, pošlite logy na adresu {email}",
"@emailLogsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"copyEmailAction": "Skopírovať e-mail",
"exportLogsAction": "Exportovať logy",
"reportABug": "Nahlásiť chybu",
"crashAndErrorReporting": "Hlásenie zlyhaní a chýb",
"reportBug": "Nahlásiť chybu",
"emailUsMessage": "Pošlite nám email na adresu {email}",
"@emailUsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"contactSupport": "Kontaktovať podporu",
"rateUsOnStore": "Ohodnoťte nás cez {storeName}",
"blog": "Blog",
"merchandise": "Merchandise",
"verifyPassword": "Potvrďte heslo",
"pleaseWait": "Prosím počkajte...",
"generatingEncryptionKeysTitle": "Generovanie šifrovacích kľúčov...",
"recreatePassword": "Resetovať heslo",
"recreatePasswordMessage": "Aktuálne zariadenie nie je dostatočne výkonné na overenie vášho hesla, takže ho musíme regenerovať raz spôsobom, ktorý funguje vo všetkých zariadeniach.\n\nPrihláste sa pomocou kľúča na obnovenie a znovu vygenerujte svoje heslo (ak si prajete, môžete znova použiť rovnaké).",
"useRecoveryKey": "Použiť kľúč na obnovenie",
"incorrectPasswordTitle": "Nesprávne heslo",
"welcomeBack": "Vitajte späť!",
"madeWithLoveAtPrefix": "vyrobené so ❤️ v ",
"supportDevs": "Predplaďte si <bold-green>ente</bold-green> a podporte nás",
"supportDiscount": "Použite kód \"AUTH\" pre získanie 10% zľavy na prvý rok",
"changeEmail": "Zmeniť e-mail",
"changePassword": "Zmeniť heslo",
"data": "Údaje",
"importCodes": "Importovať kódy",
"importTypePlainText": "Obyčajný text",
"importTypeEnteEncrypted": "Šifrovaný Ente export",
"passwordForDecryptingExport": "Heslo na rozšifrovanie exportu",
"passwordEmptyError": "Heslo nemôže byť prázdne",
"importFromApp": "Importovať kódy z {appName}",
"importGoogleAuthGuide": "Exportujte svoje účty z aplikácie Google Authenticator pomocou QR kódu zvolením možnosti „Preniesť účty“. Následne, naskenujte QR kód pomocou iného zariadenia.\n\nTip: Na odfotenie QR kódu môžete použiť webovú kameru laptopu.",
"importSelectJsonFile": "Vybrať JSON súbor",
"importSelectAppExport": "Vybrať export súbor aplikácie {appName}",
"importEnteEncGuide": "Vyberte zašifrovaný JSON export súbor aplikácie Ente",
"importRaivoGuide": "Použite možnosť \"Exportovať OTP kódy do archívu Zip\" v nastaveniach služby Raivo.\n\nExtrahujte súbor zip a naimportujte JSON súbor.",
"importBitwardenGuide": "Použite možnosť „Exportovať trezor“ v službe Bitwarden Tools a importujte nezašifrovaný JSON súbor.",
"importAegisGuide": "Použite možnosť \"Exportovať trezor\" v nastaveniach služby Aegis.\n\nAk je váš trezor zašifrovaný, na dešifrovanie budete musieť zadať heslo trezoru.",
"import2FasGuide": "Použite možnosť \"Nastavenia->Záloha -Export\" v službe 2FAS.\n\nAk je vaša záloha zašifrovaná, na dešifrovanie budete musieť zadať heslo",
"importLastpassGuide": "Použite možnosť \"Preniesť účty\" v nastaveniach služby Lastpass Authenticator a stlačte \"Exportovať účty do súboru\". Importujte stiahnutý JSON súbor.",
"exportCodes": "Exportovať kódy",
"importLabel": "Importovať",
"importInstruction": "Vyberte súbor, ktorý obsahuje zoznam vašich kódov v nasledujúcom formáte",
"importCodeDelimiterInfo": "Kódy môžu byť oddelené čiarkou alebo novým riadkom",
"selectFile": "Vybrať súbor",
"emailVerificationToggle": "Overenie pomocou e-mailovej adresy",
"emailVerificationEnableWarning": "Aby ste predišli vymknutiu sa z vášho účtu, nezabudnite pred povolením overenia emailom uložiť kópiu svojho 2FA emailu mimo Ente Auth.",
"authToChangeEmailVerificationSetting": "Pre zmenu overenia pomocou emailu sa musíte overiť",
"authToViewYourRecoveryKey": "Pre zobrazenie vášho kľúča na obnovenie sa musíte overiť",
"authToChangeYourEmail": "Pre zmenu vášho emailu sa musíte overiť",
"authToChangeYourPassword": "Pre zmenu vášho hesla sa musíte overiť",
"authToViewSecrets": "Pre zobrazenie vašich tajných údajov sa musíte overiť",
"authToInitiateSignIn": "Pre iniciáciu prihlásenia sa pre zálohu sa musíte overiť.",
"ok": "Ok",
"cancel": "Zrušiť",
"yes": "Áno",
"no": "Nie",
"email": "Email",
"support": "Podpora",
"general": "Všeobecné",
"settings": "Nastavenia",
"copied": "Skopírované",
"pleaseTryAgain": "Prosím, skúste to znova",
"existingUser": "Existujúci užívateľ",
"newUser": "Nový v Ente",
"delete": "Odstrániť",
"enterYourPasswordHint": "Zadajte vaše heslo",
"forgotPassword": "Zabudnuté heslo",
"oops": "Ups",
"suggestFeatures": "Navrhnúť funkcionalitu",
"faq": "Často kladené otázky",
"faq_q_1": "Ako bezpečné je Auth?",
"faq_a_1": "Všetky kódy, ktoré zálohujete cez Auth, sú ukladané zabezpečené end-to-end šifrovaním. To znamená, že k svojim kódom máte prístup iba vy. Naše aplikácie sú open source a na nami používanej kryptografii prebehol externý audit.",
"faq_q_2": "Môžem pristupovať k svojim kódom cez počítač?",
"faq_a_2": "K svojim kódom sa môžete dostať cez web auth.ente.io.",
"faq_q_3": "Ako môžem odstrániť svoje kódy?",
"faq_a_3": "Kód môžete odstrániť potiahnutím prsta doľava na danej položke.",
"faq_q_4": "Ako môžem podporiť tento projekt?",
"faq_a_4": "Vývoj tohto projektu môžete podporiť zakúpením predplatného našej aplikácie Photos na ente.io.",
"faq_q_5": "Ako môžem nastaviť FaceID v Auth?",
"faq_a_5": "Zámok FaceID môžete povoliť v sekcii Nastavenia → Zabezpečenie → Uzamknutie obrazovky.",
"somethingWentWrongMessage": "Niečo sa pokazilo, skúste to prosím znova",
"leaveFamily": "Opustiť rodinku",
"leaveFamilyMessage": "Ste si istý, že chcete opustiť rodinku?",
"inFamilyPlanMessage": "Ste prihlásený k rodinke!",
"swipeHint": "Potiahnite doľava pre upravenie alebo vymazanie kódov",
"scan": "Skenovať",
"scanACode": "Skenovať kód",
"verify": "Overiť",
"verifyEmail": "Overiť email",
"enterCodeHint": "Zadajte 6-miestny kód z\nvašej overovacej aplikácie",
"lostDeviceTitle": "Stratené zariadenie?",
"twoFactorAuthTitle": "Dvojfaktorové overovanie",
"passkeyAuthTitle": "Overenie pomocou passkey",
"verifyPasskey": "Overiť passkey",
"recoverAccount": "Obnoviť konto",
"enterRecoveryKeyHint": "Vložte váš kód pre obnovenie",
"recover": "Obnoviť",
"contactSupportViaEmailMessage": "Pošlite e-mail na adresu {email} z vašej registrovanej e-mailovej adresy",
"@contactSupportViaEmailMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"invalidQRCode": "Neplatný QR kód",
"noRecoveryKeyTitle": "Nemáte kľúč pre obnovenie?",
"enterEmailHint": "Zadajte vašu emailovú adresu",
"invalidEmailTitle": "Neplatná emailová adresa",
"invalidEmailMessage": "Zadajte platnú e-mailovú adresu.",
"deleteAccount": "Odstrániť konto",
"deleteAccountQuery": "Bude nám tu bez vás smutno. Vyskytol sa nejaký problém?",
"yesSendFeedbackAction": "Áno, odoslať spätnú väzbu",
"noDeleteAccountAction": "Nie, odstrániť účet",
"initiateAccountDeleteTitle": "Pre odstránenie účtu sa musíte overiť",
"sendEmail": "Odoslať email",
"createNewAccount": "Vytvoriť nové konto",
"weakStrength": "Slabé",
"strongStrength": "Silné",
"moderateStrength": "Mierne",
"confirmPassword": "Potvrdiť heslo",
"close": "Zatvoriť",
"oopsSomethingWentWrong": "Ajáj, vyskytla sa chyba.",
"selectLanguage": "Vybrať jazyk",
"language": "Jazyk",
"social": "Sociálne siete",
"security": "Zabezpečenie",
"lockscreen": "Uzamknutie obrazovky",
"authToChangeLockscreenSetting": "Pre zmenu nastavenia uzamknutia obrazovky sa musíte overiť",
"lockScreenEnablePreSteps": "Pre povolenie uzamknutia obrazovky, nastavte prístupový kód zariadenia alebo zámok obrazovky v nastaveniach systému.",
"viewActiveSessions": "Zobraziť aktívne relácie",
"authToViewYourActiveSessions": "Pre zobrazenie vašich aktívnych relácii sa musíte overiť",
"searchHint": "Hľadať...",
"search": "Hľadať",
"sorryUnableToGenCode": "Ospravedlňujeme sa, nie je možné vygenerovať kód pre {issuerName}",
"noResult": "Žiadny výsledok",
"addCode": "Pridať kód",
"scanAQrCode": "Naskenovať QR kód",
"enterDetailsManually": "Zadajte údaje manuálne",
"edit": "Upraviť",
"copiedToClipboard": "Skopírované do schránky",
"copiedNextToClipboard": "Skopírovaný následujúci kód do schránky",
"error": "Chyba",
"recoveryKeyCopiedToClipboard": "Skopírovaný kód pre obnovenie do schránky",
"recoveryKeyOnForgotPassword": "Ak zabudnete heslo, jediným spôsobom, ako môžete obnoviť svoje údaje, je tento kľúč.",
"recoveryKeySaveDescription": "My tento kľúč neuchovávame, uložte si tento kľúč obsahujúci 24 slov na bezpečnom mieste.",
"doThisLater": "Urobiť to neskôr",
"saveKey": "Uložiť kľúč",
"save": "Uložiť",
"send": "Odoslať",
"saveOrSendDescription": "Chcete to uložiť do svojho zariadenia (predvolený priečinok Stiahnuté súbory) alebo to odoslať do iných aplikácií?",
"saveOnlyDescription": "Chcete to uložiť do svojho zariadenia (predvolený priečinok Stiahnuté súbory)?",
"back": "Späť",
"createAccount": "Vytvoriť účet",
"passwordStrength": "Sila hesla: {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": "Heslo",
"signUpTerms": "Súhlasím s <u-terms>podmienkami používania</u-terms> a <u-policy>zásadami ochrany osobných údajov</u-policy>",
"privacyPolicyTitle": "Zásady ochrany osobných údajov",
"termsOfServicesTitle": "Podmienky používania",
"encryption": "Šifrovanie",
"setPasswordTitle": "Nastaviť heslo",
"changePasswordTitle": "Zmeniť heslo",
"resetPasswordTitle": "Obnoviť heslo",
"encryptionKeys": "Šifrovacie kľúče",
"passwordWarning": "Ente neukladá tohto heslo. V prípade, že ho zabudnete, <underline>nie sme schopní rozšifrovať vaše údaje</underline>",
"enterPasswordToEncrypt": "Zadajte heslo, ktoré môžeme použiť na šifrovanie vašich údajov",
"enterNewPasswordToEncrypt": "Zadajte nové heslo, ktoré môžeme použiť na šifrovanie vašich údajov",
"passwordChangedSuccessfully": "Heslo bolo úspešne zmenené",
"generatingEncryptionKeys": "Generovanie šifrovacích kľúčov...",
"continueLabel": "Pokračovať",
"insecureDevice": "Slabo zabezpečené zariadenie",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Ospravedlňujeme sa, v tomto zariadení sme nemohli generovať bezpečnostné kľúče.\n\nzaregistrujte sa z iného zariadenia.",
"howItWorks": "Ako to funguje",
"ackPasswordLostWarning": "Rozumiem, že ak stratím alebo zabudnem heslo, môžem stratiť svoje údaje, pretože moje údaje sú <underline>šifrované end-to-end</underline>.",
"loginTerms": "Kliknutím na prihlásenie, súhlasím s <u-terms>podmienkami používania</u-terms> a <u-policy>zásadami ochrany osobných údajov</u-policy>",
"logInLabel": "Prihlásenie",
"logout": "Odhlasenie",
"areYouSureYouWantToLogout": "Naozaj sa chcete odhlásiť?",
"yesLogout": "Áno, odhlásiť sa",
"exit": "Ukončiť",
"verifyingRecoveryKey": "Overovanie kľúča na obnovenie...",
"recoveryKeyVerified": "Kľúč na obnovenie overený",
"recoveryKeySuccessBody": "Skvelé! Váš kľúč na obnovenie je správny. Ďakujeme za overenie.\n\nNezabudnite uchovať váš kľúč na obnovenie uložený bezpečne.",
"invalidRecoveryKey": "Zadaný kľúč na obnovenie nie je platný. Uistite sa, že obsahuje 24 slov a skontrolujte písmenko po písmenku každé z nich.\n\nAk ste zadali starší kód na obnovenie, uistite sa, že je dlhý 64 znakov a skontrolujte každý znak samostatne.",
"recreatePasswordTitle": "Resetovať heslo",
"recreatePasswordBody": "Aktuálne zariadenie nie je dostatočne výkonné na overenie vášho hesla, avšak vieme ho regenerovať spôsobom, ktorý funguje vo všetkých zariadeniach.\n\nPrihláste sa pomocou kľúča na obnovenie a znovu vygenerujte svoje heslo (ak si prajete, môžete znova použiť rovnaké).",
"invalidKey": "Neplatný kľúč",
"tryAgain": "Skúsiť znova",
"viewRecoveryKey": "Zobraziť kľúč na obnovenie",
"confirmRecoveryKey": "Potvrdiť kód pre obnovenie",
"recoveryKeyVerifyReason": "Váš kľúč na obnovenie je jediný spôsob, ako obnoviť svoje fotografie, ak zabudnete heslo. Kľúč na obnovenie nájdete v Nastavenia > Konto.\n\nZadajte tu svoj kľúč na obnovenie a overte, či ste ho správne uložili.",
"confirmYourRecoveryKey": "Potvrďte váš kód pre obnovenie",
"confirm": "Potvrdiť",
"emailYourLogs": "Odoslať vaše logy emailom",
"pleaseSendTheLogsTo": "Prosím, pošlite logy na adresu \n{toEmail}",
"copyEmailAddress": "Skopírovať e-mailovú adresu",
"exportLogs": "Exportovať logy",
"enterYourRecoveryKey": "Vložte váš kód pre obnovenie",
"tempErrorContactSupportIfPersists": "Vyzerá to, že sa niečo pokazilo. Skúste znova v krátkom čase. Ak chyba pretrváva, kontaktujte náš tím podpory.",
"networkHostLookUpErr": "Nemožno sa pripojiť k Ente, skontrolujte svoje nastavenia siete a kontaktujte podporu, ak chyba pretrváva.",
"networkConnectionRefusedErr": "Nemožno sa pripojiť k Ente, skúste znova v krátkom čase. Ak chyba pretrváva, kontaktujte podporu.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Vyzerá to, že sa niečo pokazilo. Skúste znova v krátkom čase. Ak chyba pretrváva, kontaktujte náš tím podpory.",
"about": "O aplikácii",
"weAreOpenSource": "We are open source!",
"privacy": "Súkromie",
"terms": "Podmienky",
"checkForUpdates": "Zistiť dostupnosť aktualizácií",
"checkStatus": "Overiť stav",
"downloadUpdate": "Stiahnuť",
"criticalUpdateAvailable": "K dispozícii je kritická aktualizácia",
"updateAvailable": "K dispozícii je aktualizácia",
"update": "Aktualizovať",
"checking": "Kontrolovanie...",
"youAreOnTheLatestVersion": "Používate najnovšiu verziu",
"warning": "Upozornenie",
"exportWarningDesc": "Exportovaný súbor obsahuje citlivé informácie. Prosím, uložte to bezpečne.",
"iUnderStand": "Rozumiem",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "Pre export vašich kódov sa musíte overiť",
"importSuccessTitle": "Jéj!",
"importSuccessDesc": "Úspešne ste importovali kódy v počte {count}!",
"@importSuccessDesc": {
"placeholders": {
"count": {
"description": "The number of codes imported",
"type": "int",
"example": "1"
}
}
},
"sorry": "Ospravedlňujeme sa",
"importFailureDesc": "Vybraný súbor nie je možné spracovať.\nAk potrebujete pomoc, napíšte na adresu support@ente.io!",
"pendingSyncs": "Upozornenie",
"pendingSyncsWarningBody": "Niektoré z vašich kódov neboli zálohované.\n\nPred odhlásením sa uistite, že máte zálohu pre tieto kódy.",
"checkInboxAndSpamFolder": "Skontrolujte svoju doručenú poštu (a spam) pre dokončenie overenia",
"tapToEnterCode": "Klepnutím zadajte kód",
"resendEmail": "Znovu odoslať email",
"weHaveSendEmailTo": "Odoslali sme email na adresu <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"
}
}
},
"activeSessions": "Aktívne relácie",
"somethingWentWrongPleaseTryAgain": "Niečo sa pokazilo, skúste to prosím znova",
"thisWillLogYouOutOfThisDevice": "Toto vás odhlási z tohto zariadenia!",
"thisWillLogYouOutOfTheFollowingDevice": "Toto vás odhlási z následujúceho zariadenia:",
"terminateSession": "Ukončiť reláciu?",
"terminate": "Ukončiť",
"thisDevice": "Toto zariadenie",
"toResetVerifyEmail": "Ak chcete obnoviť svoje heslo, najskôr overte svoj email.",
"thisEmailIsAlreadyInUse": "Tento e-mail sa už používa",
"verificationFailedPleaseTryAgain": "Overenie zlyhalo, skúste to znova",
"yourVerificationCodeHasExpired": "Platnosť overovacieho kódu uplynula",
"incorrectCode": "Neplatný kód",
"sorryTheCodeYouveEnteredIsIncorrect": "Ľutujeme, zadaný kód je nesprávny",
"emailChangedTo": "Emailová adresa bola zmenená na {newEmail}",
"authenticationFailedPleaseTryAgain": "Overenie zlyhalo. Skúste to znova",
"authenticationSuccessful": "Overenie sa podarilo!",
"twofactorAuthenticationSuccessfullyReset": "Dvojfaktorové overovanie bolo úspešne obnovené",
"incorrectRecoveryKey": "Nesprávny kľúč na obnovenie",
"theRecoveryKeyYouEnteredIsIncorrect": "Kľúč na obnovenie, ktorý ste zadali, je nesprávny",
"enterPassword": "Zadajte heslo",
"selectExportFormat": "Zvoľte formát pre exportovanie",
"exportDialogDesc": "Šifrované exporty budú chránené heslom, ktoré si vyberiete.",
"encrypted": "Šifrované",
"plainText": "Obyčajný text",
"passwordToEncryptExport": "Heslo na zašifrovanie exportu",
"export": "Exportovať",
"useOffline": "Používať bez zálohy",
"signInToBackup": "Prihláste sa a zálohujte svoje kódy",
"singIn": "Prihlásiť sa",
"sigInBackupReminder": "Exportujte svoje kódy, aby ste sa uistili, že máte zálohu, ktorú môžete neskôr obnoviť.",
"offlineModeWarning": "Rozhodli ste sa pokračovať bez zálohovania. Prosím, vykonávajte pravidelné manuálne zálohy aby ste mali istotu, že kódy nestratíte.",
"showLargeIcons": "Zobraziť veľké ikony",
"shouldHideCode": "Skryť kódy",
"doubleTapToViewHiddenCode": "Dvakrát klepnite na položku aby ste zobrazili kód",
"focusOnSearchBar": "Využívať pole vyhľadávania pri spustení aplikácie",
"confirmUpdatingkey": "Ste si istí, že chcete zmeniť tajný kľúč?",
"minimizeAppOnCopy": "Minimalizovať po skopírovaní",
"editCodeAuthMessage": "Overte sa pre zmenu kódu",
"deleteCodeAuthMessage": "Overte sa pre vymazanie kódu",
"showQRAuthMessage": "Overte sa pre zobrazenie QR kódu",
"confirmAccountDeleteTitle": "Potvrdiť odstránenie účtu",
"confirmAccountDeleteMessage": "Tento účet je prepojený s inými aplikáciami Ente, ak nejaké používate.\n\nVšetky nahrané údaje v aplikáciách od Ente budú naplánované na výmaz a váš účet bude natrvalo odstránený.",
"androidBiometricHint": "Overiť identitu",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "Nerozpoznané. Skúste znova.",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "Overenie úspešné",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "Zrušiť",
"@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": "Vyžaduje sa overenie",
"@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": "Vyžaduje sa biometria",
"@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": "Vyžadujú sa poverenia zariadenia",
"@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": "Vyžadujú sa poverenia zariadenia",
"@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": "Prejsť do nastavení",
"@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": "Overenie pomocou biometrie nie je na vašom zariadení nastavené. Prejdite na 'Nastavenie > Zabezpečenie' a pridajte overenie pomocou biometrie.",
"@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": "Overenie pomocou biometrie je zakázané. Zamknite a odomknite svoju obrazovku, aby ste ho povolili.",
"@iOSLockOut": {
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
},
"iOSGoToSettingsDescription": "Overenie pomocou biometrie nie je na vašom zariadení nastavené. Povoľte buď Touch ID or Face ID na svojom telefóne.",
"@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": "OK",
"@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": "Žiadne internetové pripojenie",
"pleaseCheckYourInternetConnectionAndTryAgain": "Skontrolujte svoje internetové pripojenie a skúste to znova.",
"signOutFromOtherDevices": "Odhlásiť sa z iných zariadení",
"signOutOtherBody": "Ak si myslíte, že niekto môže vedieť vaše heslo, môžete vynútiť odhlásenie všetkých ostatných zariadení vo vašom účte.",
"signOutOtherDevices": "Odhlásiť iné zariadenie",
"doNotSignOut": "Neodhlasovať",
"hearUsWhereTitle": "Ako ste sa dozvedeli o Ente? (voliteľné)",
"hearUsExplanation": "Nesledujeme inštalácie aplikácie. Veľmi by nám pomohlo, keby ste nám povedali, ako ste sa o nás dozvedeli!",
"recoveryKeySaved": "Kľúč na obnovenie uložený v priečinku Stiahnutých súborov!",
"waitingForBrowserRequest": "Čakanie na prehliadač...",
"waitingForVerification": "Čakanie na overenie...",
"passkey": "Passkey",
"passKeyPendingVerification": "Overenie stále prebieha",
"loginSessionExpired": "Relácia vypršala",
"loginSessionExpiredDetails": "Vaša relácia vypršala. Prosím, prihláste sa znovu.",
"developerSettingsWarning": "Ste si istí, že chcete modifikovať nastavenia pre vývojárov?",
"developerSettings": "Nastavenia pre vývojárov",
"serverEndpoint": "Endpoint servera",
"invalidEndpoint": "Neplatný endpoint",
"invalidEndpointMessage": "Ospravedlňujeme sa, endpoint, ktorý ste zadali, je neplatný. Zadajte platný endpoint a skúste to znova.",
"endpointUpdatedMessage": "Endpoint úspešne aktualizovaný",
"customEndpoint": "Pripojený k endpointu {endpoint}",
"pinText": "Pripnúť",
"unpinText": "Odopnúť",
"pinnedCodeMessage": "{code} bol pripnutý",
"unpinnedCodeMessage": "{code} bol odopnutý",
"tags": "Tagy",
"createNewTag": "Vytvoriť nový tag",
"tag": "Tag",
"create": "Vytvoriť",
"editTag": "Upraviť tag",
"deleteTagTitle": "Odstrániť tag?",
"deleteTagMessage": "Naozaj chcete odstrániť tag? Táto akcia je nezvratná.",
"somethingWentWrongParsingCode": "Neboli sme schopní spracovať {x} kódov.",
"updateNotAvailable": "K dispozícii nie je žiadna aktualizácia",
"viewRawCodes": "Zobraziť nešifrované kódy",
"rawCodes": "Nešifrované kódy",
"rawCodeData": "Nešifrované údaje o kódoch",
"appLock": "Zámok aplikácie",
"noSystemLockFound": "Nenájdená žiadna zámka obrazovky",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Pre povolenie uzamknutia aplikácie, nastavte prístupový kód zariadenia alebo zámok obrazovky v nastaveniach systému.",
"autoLock": "Automatické uzamknutie",
"immediately": "Okamžite",
"reEnterPassword": "Zadajte heslo znova",
"reEnterPin": "Zadajte PIN znova",
"next": "Ďalej",
"tooManyIncorrectAttempts": "Príliš veľa chybných pokusov",
"tapToUnlock": "Ťuknutím odomknete",
"setNewPassword": "Nastaviť nové heslo",
"deviceLock": "Zámok zariadenia",
"hideContent": "Skryť obsah",
"hideContentDescriptionAndroid": "Skrýva obsah v prepínači aplikácii a zakazuje snímky obrazovky",
"hideContentDescriptioniOS": "Skrýva obsah v prepínači aplikácii",
"autoLockFeatureDescription": "Čas, po ktorom sa aplikácia uzamkne po nečinnosti",
"appLockDescription": "Vyberte si medzi predvolenou zámkou obrazovky vášho zariadenia a vlastnou zámkou obrazovky s PIN kódom alebo heslom.",
"pinLock": "Zámok PIN",
"enterPin": "Zadajte PIN",
"setNewPin": "Nastaviť nový PIN",
"importFailureDescNew": "Vybraný súbor nie je možné spracovať."
}

View File

@@ -62,6 +62,7 @@
"changePassword": "Ändra lösenord",
"importCodes": "Importera koder",
"exportCodes": "Exportera koder",
"importLabel": "Importera",
"cancel": "Avbryt",
"yes": "Ja",
"no": "Nej",
@@ -91,6 +92,7 @@
"moderateStrength": "Måttligt",
"confirmPassword": "Bekräfta lösenord",
"close": "Stäng",
"selectLanguage": "Välj språk",
"language": "Språk",
"searchHint": "Sök...",
"search": "Sök",
@@ -150,6 +152,7 @@
"enterPassword": "Ange lösenord",
"export": "Exportera",
"singIn": "Logga in",
"shouldHideCode": "Dölj koder",
"androidCancelButton": "Avbryt",
"@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."
@@ -160,5 +163,16 @@
},
"noInternetConnection": "Ingen internetanslutning",
"pleaseCheckYourInternetConnectionAndTryAgain": "Kontrollera din internetanslutning och försök igen.",
"loginSessionExpiredDetails": "Din session har upphört. Logga in igen."
"loginSessionExpiredDetails": "Din session har upphört. Logga in igen.",
"immediately": "Omedelbart",
"reEnterPassword": "Ange lösenord igen",
"reEnterPin": "Ange PIN-kod igen",
"next": "Nästa",
"tooManyIncorrectAttempts": "För många felaktiga försök",
"tapToUnlock": "Tryck för att låsa upp",
"setNewPassword": "Ange nytt lösenord",
"deviceLock": "Enhetslås",
"hideContent": "Dölj innehåll",
"enterPin": "Ange PIN-kod",
"setNewPin": "Ange ny PIN-kod"
}

View File

@@ -20,6 +20,8 @@
"codeIssuerHint": "ኣዋጂ",
"codeSecretKeyHint": "ምስጢራዊ መፍትሕ",
"codeAccountHint": "ሕሳብ (you@domain.com)",
"codeTagHint": "ልጣፍ",
"accountKeyType": "ዓይነት ቁልፊ",
"sessionExpired": "ክፍለ ግዜኡ ኣኺሉ።",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
@@ -111,12 +113,14 @@
"copied": "Copied",
"pleaseTryAgain": "Please try again",
"existingUser": "Existing User",
"newUser": "ሓድሽ ናብ Ente",
"delete": "Delete",
"enterYourPasswordHint": "Enter your password",
"forgotPassword": "Forgot password",
"oops": "ዉዉኡ",
"suggestFeatures": "Suggest features",
"faq": "FAQ",
"faq_q_1": "Auth ክሳብ ክንደይ ውሑስ እዩ፧",
"faq_q_2": "Can I access my codes on desktop?",
"faq_a_2": "You can access your codes on the web @ auth.ente.io.",
"faq_q_3": "How can I delete codes?",

View File

@@ -263,12 +263,15 @@
"exportLogs": "Günlüğü dışa aktar",
"enterYourRecoveryKey": "Kurtarma anahtarınızı girin",
"tempErrorContactSupportIfPersists": "Bir şeyler ters gitmiş gibi görünüyor. Lütfen bir süre sonra tekrar deneyin. Hata devam ederse, lütfen destek ekibimizle iletişime geçin.",
"networkHostLookUpErr": "Ente'ye bağlanılamıyor, lütfen ağ ayarlarınızı kontrol edin ve hata devam ederse desteğe başvurun.",
"networkConnectionRefusedErr": "Ente'ye bağlanılamıyor, lütfen daha sonra tekrar deneyin. Hata devam ederse, lütfen desteğe başvurun.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Bir şeyler ters gitmiş gibi görünüyor. Lütfen bir süre sonra tekrar deneyin. Hata devam ederse, lütfen destek ekibimizle iletişime geçin.",
"about": "Hakkında",
"weAreOpenSource": "Biz açık kaynağız!",
"privacy": "Gizlilik",
"terms": "Şartlar",
"checkForUpdates": "Güncellemeleri denetleyin",
"checkStatus": "Durumu kontrol et",
"downloadUpdate": "İndir",
"criticalUpdateAvailable": "Kritik güncelleme mevcut",
"updateAvailable": "Güncelleme mevcut",
@@ -417,6 +420,9 @@
"waitingForBrowserRequest": "Tarayıcı isteği bekleniyor...",
"waitingForVerification": "Doğrulama bekleniyor...",
"passkey": "Geçiş anahtarı",
"passKeyPendingVerification": "Doğrulama hala bekliyor",
"loginSessionExpired": "Oturum süresi doldu",
"loginSessionExpiredDetails": "Oturum süreniz doldu. Tekrar giriş yapın.",
"developerSettingsWarning": "Geliştirici ayarlarını değiştirmekten emin misiniz?",
"developerSettings": "Geliştirici ayarları",
"serverEndpoint": "Sunucu uç noktası",
@@ -436,5 +442,8 @@
"deleteTagTitle": "Etiket silinsin mi?",
"deleteTagMessage": "Bu etiketi silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.",
"somethingWentWrongParsingCode": "{x} kodu ayrıştıramadık.",
"updateNotAvailable": "Güncelleme mevcut değil"
"updateNotAvailable": "Güncelleme mevcut değil",
"viewRawCodes": "Ham kodları gör",
"rawCodes": "Ham kodlar",
"rawCodeData": "Ham kod verisi"
}

View File

@@ -0,0 +1,470 @@
{
"account": "Обліковий запис",
"unlock": "Розблокувати",
"recoveryKey": "Ключ відновлення",
"counterAppBarTitle": "Лічильник",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Безпечно зробіть резервну копію кодів 2FA",
"onBoardingGetStarted": "Розпочати",
"setupFirstAccount": "Налаштуйте свій перший обліковий запис",
"importScanQrCode": "Відскануйте QR-код",
"qrCode": "QR-код",
"importEnterSetupKey": "Введіть ключ налаштування",
"importAccountPageTitle": "Введіть дані облікового запису",
"secretCanNotBeEmpty": "Секретний ключ не може бути порожнім",
"bothIssuerAndAccountCanNotBeEmpty": "Не може бути пустим як емітент, так і обліковий запис",
"incorrectDetails": "Невірні дані",
"pleaseVerifyDetails": "Будь ласка, перевірте дані та повторіть спробу",
"codeIssuerHint": "Емітент",
"codeSecretKeyHint": "Секретний ключ",
"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": "Ви впевнені, що хочете видалити цей код? Ця дія є незворотною.",
"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": "З поверненням!",
"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": "Виберіть зашифрований файл JSON, експортований з Ente",
"importRaivoGuide": "Використовуйте опцію «Export OTPs to Zip archive» у налаштуваннях Raivo.\n\nРозпакуйте файл ZIP та імпортуйте файл JSON.",
"importBitwardenGuide": "Використовуйте опцію \"Export vault\" в Bitwarden Tools та імпортуйте незашифрований файл JSON.",
"importAegisGuide": "Скористайтеся опцією \"Export the vault\" у параметрах Aegis.\n\nЯкщо ваше сховище зашифровано, вам потрібно буде ввести пароль сховища для його дешифрування.",
"import2FasGuide": "Використовуйте параметр «Settings->Backup -Export» у 2FAS.\n\nЯкщо ваша резервна копія зашифрована, вам потрібно буде ввести пароль, щоб розшифрувати резервну копію",
"importLastpassGuide": "Скористайтеся опцією «Transfer accounts» в налаштуваннях Lastpass Authenticator і натисніть «Export accounts to file». Імпортуйте завантажений JSON.",
"exportCodes": "Експортувати коди",
"importLabel": "Імпортувати",
"importInstruction": "Будь ласка, виберіть файл, що містить список кодів у наступному форматі",
"importCodeDelimiterInfo": "Коди можуть бути розділені комою або новим рядком",
"selectFile": "Вибрати файл",
"emailVerificationToggle": "Підтвердження адреси електронної пошти",
"emailVerificationEnableWarning": "Щоб уникнути блокування доступу до свого облікового запису, обов’язково збережіть копію двофакторної аутентифікації до своєї електронної пошти за межами Ente Auth, перш ніж увімкнути перевірку електронної пошти.",
"authToChangeEmailVerificationSetting": "Будь ласка, пройдіть аутентифікацію, щоб змінити перевірку адреси електронної пошти",
"authToViewYourRecoveryKey": "Будь ласка, пройдіть аутентифікацію, щоб переглянути ваш ключ відновлення",
"authToChangeYourEmail": "Будь ласка, пройдіть аутентифікацію, щоб змінити адресу електронної пошти",
"authToChangeYourPassword": "Будь ласка, пройдіть аутентифікацію, щоб змінити ваш пароль",
"authToViewSecrets": "Будь ласка, пройдіть аутентифікацію, щоб переглянути ваші секретні коди",
"authToInitiateSignIn": "Будь ласка, пройдіть аутентифікацію, щоб розпочати вхід для резервного копіювання.",
"ok": "Ок",
"cancel": "Скасувати",
"yes": "Так",
"no": "Ні",
"email": "Адреса електронної пошти",
"support": "Служба підтримки",
"general": "Загальні",
"settings": "Налаштування",
"copied": "Скопійовано",
"pleaseTryAgain": "Будь ласка, спробуйте ще раз",
"existingUser": "Існуючий користувач",
"newUser": "Вперше на Ente",
"delete": "Видалити",
"enterYourPasswordHint": "Введіть свій пароль",
"forgotPassword": "Нагадати пароль",
"oops": "От халепа",
"suggestFeatures": "Запропонувати нові функції",
"faq": "Часто Запитувані Питання",
"faq_q_1": "Наскільки безпечним є Auth?",
"faq_a_1": "Всі коди, які ви зберігаєте в Auth, кодуються наскрізним захистом. Це означає, що тільки ви можете отримати доступ до ваших кодів. Наші програми мають відкритий вихідний код, і наша криптографія була перевірена зовнішніми аудиторами.",
"faq_q_2": "Чи я можу отримати доступ до своїх кодів на настільному комп'ютері?",
"faq_a_2": "Ви можете отримати доступ до ваших кодів у веб на auth.ente.io.",
"faq_q_3": "Як я можу видалити коди?",
"faq_a_3": "Ви можете видалити код, провівши пальцем вліво на цьому елементі.",
"faq_q_4": "Як я можу підтримати цей проект?",
"faq_a_4": "Ви можете підтримати розробку цього проекту, підписавшись на наш додаток Photos на ente.io.",
"faq_q_5": "Як я можу активувати розблокування за допомогою FaceID в Auth",
"faq_a_5": "Ви можете активувати розблокування за допомогою FaceID у Налаштування → Безпека → Блокування екрану.",
"somethingWentWrongMessage": "Щось пішло не так, спробуйте, будь ласка, знову",
"leaveFamily": "Залишити сімейний план",
"leaveFamilyMessage": "Ви впевнені, що хочете залишити сімейний план?",
"inFamilyPlanMessage": "Ви знаходитесь на сімейному плані!",
"swipeHint": "Проведіть пальцем вліво, щоб редагувати або видаляти коди",
"scan": "Сканувати",
"scanACode": "Сканувати код",
"verify": "Перевірити",
"verifyEmail": "Підтвердити електронну адресу",
"enterCodeHint": "Введіть нижче шестизначний код із застосунку для автентифікації",
"lostDeviceTitle": "Загубили пристрій?",
"twoFactorAuthTitle": "Двофакторна аутентифікація",
"passkeyAuthTitle": "Перевірка секретного ключа",
"verifyPasskey": "Підтвердження секретного ключа",
"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": "Будь ласка, авторизуйтесь для зміни налаштувань екрану блокування",
"lockScreenEnablePreSteps": "Для увімкнення екрана блокування, будь ласка, налаштуйте пароль пристрою або блокування екрана в системних налаштуваннях.",
"viewActiveSessions": "Показати активні сеанси",
"authToViewYourActiveSessions": "Будь ласка, пройдіть аутентифікацію, щоб переглянути ваші активні сеанси",
"searchHint": "Пошук...",
"search": "Пошук",
"sorryUnableToGenCode": "Вибачте, не вдалося створити код для {issuerName}",
"noResult": "Немає результатів",
"addCode": "Додати код",
"scanAQrCode": "Сканувати QR-код",
"enterDetailsManually": "Введіть дані вручну",
"edit": "Редагувати",
"copiedToClipboard": "Скопійовано до буфера обміну",
"copiedNextToClipboard": "Наступний код скопійовано до буфера обміну",
"error": "Помилка",
"recoveryKeyCopiedToClipboard": "Ключ відновлення скопійований в буфер обміну",
"recoveryKeyOnForgotPassword": "Якщо ви забудете свій пароль, то єдиний спосіб відновити ваші дані за допомогою цього ключа.",
"recoveryKeySaveDescription": "Ми не зберігаємо цей ключ, будь ласка, збережіть цей ключ з 24 слів в надійному місці.",
"doThisLater": "Зробити це пізніше",
"saveKey": "Зберегти ключ",
"save": "Зберегти",
"send": "Надіслати",
"saveOrSendDescription": "Чи хочете Ви зберегти це до свого сховища (тека Downloads за замовчуванням), чи надіслати його в інші додатки?",
"saveOnlyDescription": "Чи хочете Ви зберегти це до свого сховища (тека Downloads за замовчуванням)?",
"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": "Вийти",
"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": "Будь ласка, надішліть журнали до електронної пошти {toEmail}",
"copyEmailAddress": "Копіювати електронну адресу",
"exportLogs": "Експортувати журнал",
"enterYourRecoveryKey": "Введіть ваш ключ відновлення",
"tempErrorContactSupportIfPersists": "Схоже, що щось пішло не так. Будь ласка, спробуйте ще раз через деякий час. Якщо помилка не зникне, зв'яжіться з нашою командою підтримки.",
"networkHostLookUpErr": "Не вдалося приєднатися до Ente. Будь ласка, перевірте налаштування мережі. Зверніться до нашої команди підтримки, якщо помилка залишиться.",
"networkConnectionRefusedErr": "Не вдалося приєднатися до Ente. Будь ласка, спробуйте ще раз через деякий час. Якщо помилка не зникне, зв'яжіться з нашою командою підтримки.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Схоже, що щось пішло не так. Будь ласка, спробуйте ще раз через деякий час. Якщо помилка не зникне, зв'яжіться з нашою командою підтримки.",
"about": "Про додаток",
"weAreOpenSource": "Наш додаток має відкритий код!",
"privacy": "Конфіденційність",
"terms": "Умови",
"checkForUpdates": "Перевiрити наявнiсть оновлень",
"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"
}
}
},
"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": "Показувати великі іконки",
"shouldHideCode": "Приховати коди",
"doubleTapToViewHiddenCode": "Ви можете двічі натиснути на запис для перегляду коду",
"focusOnSearchBar": "Сфокусуватися на пошуку після запуску програми",
"confirmUpdatingkey": "Ви впевнені у тому, що бажаєте змінити секретний ключ?",
"minimizeAppOnCopy": "Згорнути програму після копіювання",
"editCodeAuthMessage": "Аутентифікуйтесь, щоб змінити код",
"deleteCodeAuthMessage": "Аутентифікуйтесь, щоб видалити код",
"showQRAuthMessage": "Аутентифікуйтесь, щоб показати QR-код",
"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": "Біометрична аутентифікація не налаштована на вашому пристрої. Увімкніть TouchID або FaceID на вашому телефоні.",
"@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": "OK",
"@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": "Ключ відновлення збережений у теці Downloads!",
"waitingForBrowserRequest": "Очікування запиту браузера...",
"waitingForVerification": "Очікується підтвердження...",
"passkey": "Ключ доступу",
"passKeyPendingVerification": "Підтвердження все ще в процесі",
"loginSessionExpired": "Час сеансу минув",
"loginSessionExpiredDetails": "Термін дії вашого сеансу завершився. Будь ласка, увійдіть знову.",
"developerSettingsWarning": "Ви впевнені, що хочете змінити налаштування розробника?",
"developerSettings": "Налаштування розробника",
"serverEndpoint": "Кінцева точка сервера",
"invalidEndpoint": "Некоректна кінцева точка",
"invalidEndpointMessage": "Вибачте, введена вами кінцева точка є недійсною. Введіть дійсну кінцеву точку та спробуйте ще раз.",
"endpointUpdatedMessage": "Точка входу успішно оновлена",
"customEndpoint": "Приєднано до {endpoint}",
"pinText": "Закріпити",
"unpinText": "Відкріпити",
"pinnedCodeMessage": "{code} закріплено",
"unpinnedCodeMessage": "{code} відкріплено",
"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": "Не вдалося обробити вибраний файл."
}

View File

@@ -263,6 +263,8 @@
"exportLogs": "导出日志",
"enterYourRecoveryKey": "输入您的恢复密钥",
"tempErrorContactSupportIfPersists": "看起来出了点问题。 请稍后重试。 如果错误仍然存在,请联系我们的支持团队。",
"networkHostLookUpErr": "无法连接到 Ente请检查您的网络设置如果错误仍然存请联系支持。",
"networkConnectionRefusedErr": "无法连接到 Ente请稍后重试。如果错误仍然存请联系支持人员。",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "看起来出了点问题。 请稍后重试。 如果错误仍然存在,请联系我们的支持团队。",
"about": "关于",
"weAreOpenSource": "我们是开源的 ",
@@ -440,5 +442,29 @@
"deleteTagTitle": "要删除标签吗?",
"deleteTagMessage": "您确定要删除此标签吗?此操作是不可逆的。",
"somethingWentWrongParsingCode": "我们无法解析 {x} 代码。",
"updateNotAvailable": "更新不可用"
"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": "无法解析选定的文件。"
}

View File

@@ -7,6 +7,7 @@ import 'package:ente_auth/core/configuration.dart';
import 'package:ente_auth/core/constants.dart';
import 'package:ente_auth/core/logging/super_logging.dart';
import 'package:ente_auth/core/network.dart';
import 'package:ente_auth/core/win_http_client.dart';
import 'package:ente_auth/ente_theme_data.dart';
import 'package:ente_auth/locale.dart';
import 'package:ente_auth/services/authenticator_service.dart';
@@ -22,16 +23,15 @@ import 'package:ente_auth/store/code_store.dart';
import 'package:ente_auth/ui/tools/app_lock.dart';
import 'package:ente_auth/ui/tools/lock_screen.dart';
import 'package:ente_auth/ui/utils/icon_utils.dart';
import 'package:ente_auth/utils/lock_screen_settings.dart';
import 'package:ente_auth/utils/platform_util.dart';
import 'package:ente_auth/utils/window_protocol_handler.dart';
import 'package:ente_crypto_dart/ente_crypto_dart.dart';
import 'package:flutter/foundation.dart';
import "package:flutter/material.dart";
import 'package:flutter/scheduler.dart';
import 'package:flutter_displaymode/flutter_displaymode.dart';
import 'package:logging/logging.dart';
import 'package:path_provider/path_provider.dart';
import 'package:privacy_screen/privacy_screen.dart';
import 'package:tray_manager/tray_manager.dart';
import 'package:window_manager/window_manager.dart';
@@ -65,6 +65,9 @@ Future<void> initSystemTray() async {
void main() async {
WidgetsFlutterBinding.ensureInitialized();
if (Platform.isWindows) {
HttpOverrides.global = WindowsHttpOverrides();
}
if (PlatformUtil.isDesktop()) {
await windowManager.ensureInitialized();
@@ -80,12 +83,24 @@ void main() async {
}
await _runInForeground();
await _setupPrivacyScreen();
if (Platform.isAndroid) {
FlutterDisplayMode.setHighRefreshRate().ignore();
}
}
// Future<void> whiteListLetsEncryptRootCA() async {
// try {
// // https://stackoverflow.com/a/71090239
// // https://github.com/ente-io/ente/issues/2178
// ByteData data =
// await PlatformAssetBundle().load('assets/ca/lets-encrypt-r3.pem');
// SecurityContext.defaultContext
// .setTrustedCertificatesBytes(data.buffer.asUint8List());
// } catch (e) {
// _logger.severe("Failed to whitelist Let's Encrypt Root CA", e);
// }
// }
Future<void> _runInForeground() async {
final savedThemeMode = _themeMode(await AdaptiveTheme.getThemeMode());
return await _runWithLogs(() async {
@@ -97,7 +112,7 @@ Future<void> _runInForeground() async {
AppLock(
builder: (args) => App(locale: locale),
lockScreen: const LockScreen(),
enabled: Configuration.instance.shouldShowLockScreen(),
enabled: await Configuration.instance.shouldShowLockScreen(),
locale: locale,
lightTheme: lightThemeData,
darkTheme: darkThemeData,
@@ -156,24 +171,5 @@ Future<void> _init(bool bool, {String? via}) async {
await NotificationService.instance.init();
await UpdateService.instance.init();
await IconUtils.instance.init();
}
Future<void> _setupPrivacyScreen() async {
if (!PlatformUtil.isMobile() || kDebugMode) return;
final brightness =
SchedulerBinding.instance.platformDispatcher.platformBrightness;
bool isInDarkMode = brightness == Brightness.dark;
await PrivacyScreen.instance.enable(
iosOptions: const PrivacyIosOptions(
enablePrivacy: true,
privacyImageName: "LaunchImage",
lockTrigger: IosLockTrigger.didEnterBackground,
),
androidOptions: const PrivacyAndroidOptions(
enableSecure: true,
),
backgroundColor: isInDarkMode ? Colors.black : Colors.white,
blurEffect:
isInDarkMode ? PrivacyBlurEffect.dark : PrivacyBlurEffect.extraLight,
);
await LockScreenSettings.instance.init();
}

View File

@@ -219,9 +219,10 @@ class _OnboardingPageState extends State<OnboardingPage> {
}
Future<void> _optForOfflineMode() async {
bool canCheckBio = Platform.isMacOS || Platform.isLinux
? true
: await LocalAuthentication().canCheckBiometrics;
bool canCheckBio = Platform.isMacOS ||
Platform.isLinux ||
Platform.isWindows ||
await LocalAuthentication().canCheckBiometrics;
if (!canCheckBio) {
showToast(
context,

View File

@@ -1,9 +1,12 @@
import 'dart:io';
import 'package:ente_auth/core/configuration.dart';
import 'package:ente_auth/ui/settings/lock_screen/lock_screen_password.dart';
import 'package:ente_auth/ui/settings/lock_screen/lock_screen_pin.dart';
import 'package:ente_auth/ui/tools/app_lock.dart';
import 'package:ente_auth/utils/auth_util.dart';
import 'package:ente_auth/utils/dialog_util.dart';
import 'package:ente_auth/utils/lock_screen_settings.dart';
import 'package:ente_auth/utils/toast_util.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -21,11 +24,16 @@ class LocalAuthenticationService {
BuildContext context,
String infoMessage,
) async {
if (await _isLocalAuthSupportedOnDevice()) {
if (await isLocalAuthSupportedOnDevice() ||
LockScreenSettings.instance.getIsAppLockSet()) {
AppLock.of(context)!.setEnabled(false);
final result = await requestAuthentication(context, infoMessage);
final result = await requestAuthentication(
context,
infoMessage,
isAuthenticatingForInAppChange: true,
);
AppLock.of(context)!.setEnabled(
Configuration.instance.shouldShowLockScreen(),
await Configuration.instance.shouldShowLockScreen(),
);
if (!result) {
showToast(context, infoMessage);
@@ -37,6 +45,50 @@ class LocalAuthenticationService {
return true;
}
Future<bool> requestEnteAuthForLockScreen(
BuildContext context,
String? savedPin,
String? savedPassword, {
bool isAuthenticatingOnAppLaunch = false,
bool isAuthenticatingForInAppChange = false,
}) async {
if (savedPassword != null) {
final result = await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
return LockScreenPassword(
isChangingLockScreenSettings: true,
isAuthenticatingForInAppChange: isAuthenticatingForInAppChange,
isAuthenticatingOnAppLaunch: isAuthenticatingOnAppLaunch,
authPass: savedPassword,
);
},
),
);
if (result) {
return true;
}
}
if (savedPin != null) {
final result = await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
return LockScreenPin(
isChangingLockScreenSettings: true,
isAuthenticatingForInAppChange: isAuthenticatingForInAppChange,
isAuthenticatingOnAppLaunch: isAuthenticatingOnAppLaunch,
authPin: savedPin,
);
},
),
);
if (result) {
return true;
}
}
return false;
}
Future<bool> requestLocalAuthForLockScreen(
BuildContext context,
bool shouldEnableLockScreen,
@@ -44,7 +96,7 @@ class LocalAuthenticationService {
String errorDialogContent, [
String errorDialogTitle = "",
]) async {
if (await _isLocalAuthSupportedOnDevice()) {
if (await isLocalAuthSupportedOnDevice()) {
AppLock.of(context)!.disable();
final result = await requestAuthentication(
context,
@@ -53,11 +105,11 @@ class LocalAuthenticationService {
if (result) {
AppLock.of(context)!.setEnabled(shouldEnableLockScreen);
await Configuration.instance
.setShouldShowLockScreen(shouldEnableLockScreen);
.setSystemLockScreen(shouldEnableLockScreen);
return true;
} else {
AppLock.of(context)!
.setEnabled(Configuration.instance.shouldShowLockScreen());
.setEnabled(await Configuration.instance.shouldShowLockScreen());
}
} else {
// ignore: unawaited_futures
@@ -70,9 +122,9 @@ class LocalAuthenticationService {
return false;
}
Future<bool> _isLocalAuthSupportedOnDevice() async {
Future<bool> isLocalAuthSupportedOnDevice() async {
try {
return Platform.isMacOS || Platform.isLinux
return Platform.isLinux
? await FlutterLocalAuthentication().canAuthenticate()
: await LocalAuthentication().isDeviceSupported();
} on MissingPluginException {

View File

@@ -182,7 +182,6 @@ class _LoginPasswordVerificationPageState
await sendLogs(
context,
context.l10n.contactSupport,
"auth@ente.io",
postShare: () {},
);
}

View File

@@ -140,7 +140,6 @@ class _PasswordReentryPageState extends State<PasswordReentryPage> {
await sendLogs(
context,
context.l10n.contactSupport,
"support@ente.io",
postShare: () {},
);
}

View File

@@ -1,9 +1,11 @@
import 'package:ente_auth/ente_theme_data.dart';
import 'package:ente_auth/l10n/l10n.dart';
import 'package:ente_auth/models/code.dart';
import 'package:ente_auth/theme/ente_theme.dart';
import 'package:ente_auth/ui/common/gradient_button.dart';
import 'package:ente_auth/ui/linear_progress_widget.dart';
import 'package:ente_auth/utils/dialog_util.dart';
import 'package:ente_auth/ui/tools/debug/raw_codes_viewer.dart';
import 'package:ente_auth/utils/email_util.dart';
import 'package:flutter/material.dart';
class CodeErrorWidget extends StatelessWidget {
@@ -12,7 +14,7 @@ class CodeErrorWidget extends StatelessWidget {
required this.errors,
});
final int errors;
final List<Code> errors;
@override
Widget build(BuildContext context) {
@@ -70,7 +72,7 @@ class CodeErrorWidget extends StatelessWidget {
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: Text(
context.l10n.somethingWentWrongParsingCode(errors),
context.l10n.somethingWentWrongParsingCode(errors.length),
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.w500,
@@ -78,29 +80,49 @@ class CodeErrorWidget extends StatelessWidget {
),
),
const Spacer(),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
SizedBox(
width: 102,
height: 28,
child: GradientButton(
text: context.l10n.contactSupport,
fontSize: 10,
onTap: () async {
await showErrorDialog(
context,
context.l10n.contactSupport,
context.l10n
.contactSupportViaEmailMessage("support@ente.io"),
);
},
borderWidth: 0.6,
borderRadius: 6,
Align(
alignment: Alignment.centerRight,
child: Wrap(
children: [
SizedBox(
width: 102,
height: 28,
child: GradientButton(
text: context.l10n.viewRawCodes,
fontSize: 10,
onTap: () async {
await showDialog(
context: context,
builder: (BuildContext context) {
return RawCodesViewer(
errors.map((e) => e.rawData).join('\n'),
);
},
barrierColor: Colors.black87,
barrierDismissible: false,
);
},
borderWidth: 0.6,
borderRadius: 6,
),
),
),
const SizedBox(width: 6),
],
const SizedBox(width: 12),
SizedBox(
width: 102,
height: 28,
child: GradientButton(
text: context.l10n.contactSupport,
fontSize: 10,
onTap: () async {
await openSupportPage(null, null);
},
borderWidth: 0.6,
borderRadius: 6,
),
),
const SizedBox(width: 6),
],
),
),
const SizedBox(height: 12),
],

View File

@@ -22,7 +22,6 @@ PopupMenuButton<dynamic> reportBugPopupMenu(BuildContext context) {
await sendLogs(
context,
"Contact support",
"support@ente.io",
postShare: () {},
);
}

View File

@@ -6,6 +6,7 @@ import 'package:ente_auth/ui/components/separators.dart';
import 'package:ente_auth/utils/debouncer.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:logging/logging.dart';
class TextInputWidget extends StatefulWidget {
final String? label;
@@ -58,6 +59,7 @@ class TextInputWidget extends StatefulWidget {
}
class _TextInputWidgetState extends State<TextInputWidget> {
final _logger = Logger("TextInputWidget");
ExecutionState executionState = ExecutionState.idle;
final _textController = TextEditingController();
final _debouncer = Debouncer(const Duration(milliseconds: 300));
@@ -66,7 +68,7 @@ class _TextInputWidgetState extends State<TextInputWidget> {
///This is to pass if the TextInputWidget is in a dialog and an error is
///thrown in executing onSubmit by passing it as arg in Navigator.pop()
Exception? _exception;
bool _incorrectPassword = false;
@override
void initState() {
widget.submitNotifier?.addListener(_onSubmit);
@@ -138,7 +140,11 @@ class _TextInputWidgetState extends State<TextInputWidget> {
borderSide: BorderSide.none,
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: colorScheme.strokeFaint),
borderSide: BorderSide(
color: _incorrectPassword
? const Color.fromRGBO(245, 42, 42, 1)
: colorScheme.strokeFaint,
),
borderRadius: BorderRadius.circular(8),
),
suffixIcon: Padding(
@@ -233,6 +239,10 @@ class _TextInputWidgetState extends State<TextInputWidget> {
executionState = ExecutionState.error;
_debouncer.cancelDebounce();
_exception = e as Exception;
if (e.toString().contains("Incorrect password")) {
_logger.warning("Incorrect password");
_surfaceWrongPasswordState();
}
if (!widget.popNavAfterSubmission) {
rethrow;
}
@@ -306,6 +316,20 @@ class _TextInputWidgetState extends State<TextInputWidget> {
void _popNavigatorStack(BuildContext context, {Exception? e}) {
Navigator.of(context).canPop() ? Navigator.of(context).pop(e) : null;
}
void _surfaceWrongPasswordState() {
setState(() {
_incorrectPassword = true;
HapticFeedback.vibrate();
Future.delayed(const Duration(seconds: 1), () {
if (mounted) {
setState(() {
_incorrectPassword = false;
});
}
});
});
}
}
//todo: Add clear and custom icon for suffic icon

View File

@@ -348,8 +348,8 @@ class _HomePageState extends State<HomePage> {
return CodeErrorWidget(
errors: _allCodes
?.where((element) => element.hasError)
.length ??
0,
.toList() ??
[],
);
}
final newIndex = index - indexOffset;

View File

@@ -77,7 +77,7 @@ Future<void> _pickAegisJsonFile(BuildContext context) async {
await showErrorDialog(
context,
context.l10n.sorry,
"${context.l10n.importFailureDesc}\n Error: ${e.toString()}",
"${context.l10n.importFailureDescNew}\n Error: ${e.toString()}",
);
}
}

View File

@@ -68,7 +68,7 @@ Future<void> _pickBitwardenJsonFile(BuildContext context) async {
await showErrorDialog(
context,
context.l10n.sorry,
"${context.l10n.importFailureDesc}\n Error: ${e.toString()}",
"${context.l10n.importFailureDescNew}\n Error: ${e.toString()}",
);
}
}

View File

@@ -150,7 +150,7 @@ Future<void> _pickEnteJsonFile(BuildContext context) async {
await showErrorDialog(
context,
context.l10n.sorry,
context.l10n.importFailureDesc,
context.l10n.importFailureDescNew,
);
}
}

View File

@@ -67,7 +67,7 @@ Future<void> _pickLastpassJsonFile(BuildContext context) async {
await showErrorDialog(
context,
context.l10n.sorry,
"${context.l10n.importFailureDesc}\n Error: ${e.toString()}",
"${context.l10n.importFailureDescNew}\n Error: ${e.toString()}",
);
}
}

View File

@@ -144,7 +144,7 @@ Future<void> _pickImportFile(BuildContext context) async {
await showErrorDialog(
context,
context.l10n.sorry,
context.l10n.importFailureDesc,
context.l10n.importFailureDescNew,
);
}
}

View File

@@ -67,7 +67,7 @@ Future<void> _pickRaivoJsonFile(BuildContext context) async {
await showErrorDialog(
context,
context.l10n.sorry,
"${context.l10n.importFailureDesc}\n Error: ${e.toString()}",
"${context.l10n.importFailureDescNew}\n Error: ${e.toString()}",
);
}
}

View File

@@ -72,7 +72,7 @@ Future<void> _pick2FasFile(BuildContext context) async {
await showErrorDialog(
context,
context.l10n.sorry,
"${context.l10n.importFailureDesc}\n Error: ${e.toString()}",
"${context.l10n.importFailureDescNew}\n Error: ${e.toString()}",
);
}
}

View File

@@ -1,6 +1,5 @@
import 'package:ente_auth/l10n/l10n.dart';
import 'package:ente_auth/theme/ente_theme.dart';
import 'package:ente_auth/ui/components/buttons/icon_button_widget.dart';
import 'package:ente_auth/ui/components/captioned_text_widget.dart';
import 'package:ente_auth/ui/components/divider_widget.dart';
import 'package:ente_auth/ui/components/menu_item_widget.dart';
@@ -68,18 +67,7 @@ class ImportCodePage extends StatelessWidget {
title: context.l10n.importCodes,
),
flexibleSpaceCaption: "Import source",
actionIcons: [
IconButtonWidget(
icon: Icons.close_outlined,
iconButtonType: IconButtonType.secondary,
onTap: () {
Navigator.pop(context);
if (Navigator.canPop(context)) {
Navigator.pop(context);
}
},
),
],
actionIcons: const [],
),
SliverList(
delegate: SliverChildBuilderDelegate(

View File

@@ -0,0 +1,203 @@
import "package:ente_auth/theme/ente_theme.dart";
import "package:flutter/material.dart";
class CustomPinKeypad extends StatelessWidget {
final TextEditingController controller;
const CustomPinKeypad({required this.controller, super.key});
@override
Widget build(BuildContext context) {
return SafeArea(
child: Container(
padding: const EdgeInsets.all(2),
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
color: getEnteColorScheme(context).strokeFainter,
child: Column(
children: [
Row(
children: [
_Button(
text: '',
number: '1',
onTap: () {
_onKeyTap('1');
},
),
_Button(
text: "ABC",
number: '2',
onTap: () {
_onKeyTap('2');
},
),
_Button(
text: "DEF",
number: '3',
onTap: () {
_onKeyTap('3');
},
),
],
),
Row(
children: [
_Button(
number: '4',
text: "GHI",
onTap: () {
_onKeyTap('4');
},
),
_Button(
number: '5',
text: 'JKL',
onTap: () {
_onKeyTap('5');
},
),
_Button(
number: '6',
text: 'MNO',
onTap: () {
_onKeyTap('6');
},
),
],
),
Row(
children: [
_Button(
number: '7',
text: 'PQRS',
onTap: () {
_onKeyTap('7');
},
),
_Button(
number: '8',
text: 'TUV',
onTap: () {
_onKeyTap('8');
},
),
_Button(
number: '9',
text: 'WXYZ',
onTap: () {
_onKeyTap('9');
},
),
],
),
Row(
children: [
const _Button(
number: '',
text: '',
muteButton: true,
onTap: null,
),
_Button(
number: '0',
text: '',
onTap: () {
_onKeyTap('0');
},
),
_Button(
number: '',
text: '',
icon: const Icon(Icons.backspace_outlined),
onTap: () {
_onBackspace();
},
),
],
),
],
),
),
],
),
),
);
}
void _onKeyTap(String number) {
controller.text += number;
return;
}
void _onBackspace() {
if (controller.text.isNotEmpty) {
controller.text =
controller.text.substring(0, controller.text.length - 1);
}
return;
}
}
class _Button extends StatelessWidget {
final String number;
final String text;
final VoidCallback? onTap;
final bool muteButton;
final Widget? icon;
const _Button({
required this.number,
required this.text,
this.muteButton = false,
required this.onTap,
this.icon,
});
@override
Widget build(BuildContext context) {
final colorScheme = getEnteColorScheme(context);
final textTheme = getEnteTextTheme(context);
return Expanded(
child: GestureDetector(
onTap: onTap,
child: Container(
margin: const EdgeInsets.all(4),
decoration: BoxDecoration(
shape: BoxShape.rectangle,
borderRadius: BorderRadius.circular(6),
color: muteButton
? colorScheme.fillFaintPressed
: icon == null
? colorScheme.backgroundElevated2
: null,
),
child: Center(
child: muteButton
? const SizedBox.shrink()
: icon != null
? Container(
child: icon,
)
: Container(
padding: const EdgeInsets.all(4),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
number,
style: textTheme.h3,
),
Text(
text,
style: textTheme.tinyBold,
),
],
),
),
),
),
),
);
}
}

View File

@@ -0,0 +1,143 @@
import 'package:ente_auth/l10n/l10n.dart';
import 'package:ente_auth/theme/ente_theme.dart';
import 'package:ente_auth/ui/components/captioned_text_widget.dart';
import 'package:ente_auth/ui/components/divider_widget.dart';
import 'package:ente_auth/ui/components/menu_item_widget.dart';
import 'package:ente_auth/ui/components/separators.dart';
import 'package:ente_auth/ui/components/title_bar_title_widget.dart';
import 'package:ente_auth/ui/components/title_bar_widget.dart';
import 'package:ente_auth/utils/lock_screen_settings.dart';
import 'package:flutter/material.dart';
class LockScreenAutoLock extends StatefulWidget {
const LockScreenAutoLock({super.key});
@override
State<LockScreenAutoLock> createState() => _LockScreenAutoLockState();
}
class _LockScreenAutoLockState extends State<LockScreenAutoLock> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
primary: false,
slivers: <Widget>[
TitleBarWidget(
flexibleSpaceTitle: TitleBarTitleWidget(
title: context.l10n.autoLock,
),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) {
return const Padding(
padding: EdgeInsets.symmetric(
horizontal: 16,
vertical: 20,
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Column(
children: [
ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(8)),
child: AutoLockItems(),
),
],
),
],
),
);
},
childCount: 1,
),
),
],
),
);
}
}
class AutoLockItems extends StatefulWidget {
const AutoLockItems({super.key});
@override
State<AutoLockItems> createState() => _AutoLockItemsState();
}
class _AutoLockItemsState extends State<AutoLockItems> {
final autoLockDurations = LockScreenSettings.instance.autoLockDurations;
List<Widget> items = [];
Duration currentAutoLockTime = const Duration(seconds: 5);
@override
void initState() {
for (Duration autoLockDuration in autoLockDurations) {
if (autoLockDuration.inMilliseconds ==
LockScreenSettings.instance.getAutoLockTime()) {
currentAutoLockTime = autoLockDuration;
break;
}
}
super.initState();
}
@override
Widget build(BuildContext context) {
items.clear();
for (Duration autoLockDuration in autoLockDurations) {
items.add(
_menuItemForPicker(autoLockDuration),
);
}
items = addSeparators(
items,
DividerWidget(
dividerType: DividerType.menuNoIcon,
bgColor: getEnteColorScheme(context).fillFaint,
),
);
return Column(
mainAxisSize: MainAxisSize.min,
children: items,
);
}
Widget _menuItemForPicker(Duration autoLockTime) {
return MenuItemWidget(
key: ValueKey(autoLockTime),
menuItemColor: getEnteColorScheme(context).fillFaint,
captionedTextWidget: CaptionedTextWidget(
title: _formatTime(autoLockTime),
),
trailingIcon: currentAutoLockTime == autoLockTime ? Icons.check : null,
alignCaptionedTextToLeft: true,
isTopBorderRadiusRemoved: true,
isBottomBorderRadiusRemoved: true,
showOnlyLoadingState: true,
onTap: () async {
await LockScreenSettings.instance.setAutoLockTime(autoLockTime).then(
(value) => {
setState(() {
currentAutoLockTime = autoLockTime;
}),
},
);
},
);
}
String _formatTime(Duration duration) {
if (duration.inHours != 0) {
return "${duration.inHours}hr";
} else if (duration.inMinutes != 0) {
return "${duration.inMinutes}m";
} else if (duration.inSeconds != 0) {
return "${duration.inSeconds}s";
} else {
return context.l10n.immediately;
}
}
}

View File

@@ -0,0 +1,186 @@
import "package:ente_auth/l10n/l10n.dart";
import "package:ente_auth/theme/ente_theme.dart";
import "package:ente_auth/ui/common/dynamic_fab.dart";
import "package:ente_auth/ui/components/buttons/icon_button_widget.dart";
import "package:ente_auth/ui/components/text_input_widget.dart";
import "package:ente_auth/utils/lock_screen_settings.dart";
import "package:flutter/material.dart";
import "package:flutter/services.dart";
class LockScreenConfirmPassword extends StatefulWidget {
const LockScreenConfirmPassword({
super.key,
required this.password,
});
final String password;
@override
State<LockScreenConfirmPassword> createState() =>
_LockScreenConfirmPasswordState();
}
class _LockScreenConfirmPasswordState extends State<LockScreenConfirmPassword> {
final _confirmPasswordController = TextEditingController(text: null);
final LockScreenSettings _lockscreenSetting = LockScreenSettings.instance;
final _focusNode = FocusNode();
final _isFormValid = ValueNotifier<bool>(false);
final _submitNotifier = ValueNotifier(false);
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
_focusNode.requestFocus();
});
}
@override
void dispose() {
_submitNotifier.dispose();
_focusNode.dispose();
_isFormValid.dispose();
_confirmPasswordController.dispose();
super.dispose();
}
Future<void> _confirmPasswordMatch() async {
if (widget.password == _confirmPasswordController.text) {
await _lockscreenSetting.setPassword(_confirmPasswordController.text);
Navigator.of(context).pop(true);
Navigator.of(context).pop(true);
return;
}
await HapticFeedback.vibrate();
throw Exception("Incorrect password");
}
@override
Widget build(BuildContext context) {
final colorTheme = getEnteColorScheme(context);
final textTheme = getEnteTextTheme(context);
final isKeypadOpen = MediaQuery.viewInsetsOf(context).bottom > 100;
FloatingActionButtonLocation? fabLocation() {
if (isKeypadOpen) {
return null;
} else {
return FloatingActionButtonLocation.centerFloat;
}
}
return Scaffold(
resizeToAvoidBottomInset: isKeypadOpen,
appBar: AppBar(
elevation: 0,
leading: IconButton(
onPressed: () {
FocusScope.of(context).unfocus();
Navigator.of(context).pop();
},
icon: Icon(
Icons.arrow_back,
color: colorTheme.textBase,
),
),
),
floatingActionButton: ValueListenableBuilder<bool>(
valueListenable: _isFormValid,
builder: (context, isFormValid, child) {
return DynamicFAB(
isKeypadOpen: isKeypadOpen,
buttonText: context.l10n.confirm,
isFormValid: isFormValid,
onPressedFunction: () async {
_submitNotifier.value = !_submitNotifier.value;
},
);
},
),
floatingActionButtonLocation: fabLocation(),
floatingActionButtonAnimator: NoScalingAnimation(),
body: SingleChildScrollView(
child: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 120,
width: 120,
child: Stack(
alignment: Alignment.center,
children: [
Container(
width: 82,
height: 82,
decoration: BoxDecoration(
shape: BoxShape.circle,
gradient: LinearGradient(
colors: [
Colors.grey.shade500.withOpacity(0.2),
Colors.grey.shade50.withOpacity(0.1),
Colors.grey.shade400.withOpacity(0.2),
Colors.grey.shade300.withOpacity(0.4),
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
),
child: Padding(
padding: const EdgeInsets.all(1.0),
child: Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: colorTheme.backgroundBase,
),
),
),
),
SizedBox(
height: 75,
width: 75,
child: CircularProgressIndicator(
color: colorTheme.fillFaintPressed,
value: 1,
strokeWidth: 1.5,
),
),
IconButtonWidget(
icon: Icons.lock,
iconButtonType: IconButtonType.primary,
iconColor: colorTheme.textBase,
),
],
),
),
Text(
context.l10n.reEnterPassword,
style: textTheme.bodyBold,
),
const Padding(padding: EdgeInsets.all(12)),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: TextInputWidget(
hintText: context.l10n.confirmPassword,
autoFocus: true,
textCapitalization: TextCapitalization.none,
isPasswordInput: true,
shouldSurfaceExecutionStates: false,
onChange: (p0) {
_confirmPasswordController.text = p0;
_isFormValid.value =
_confirmPasswordController.text.isNotEmpty;
},
onSubmit: (p0) {
return _confirmPasswordMatch();
},
submitNotifier: _submitNotifier,
),
),
const Padding(padding: EdgeInsets.all(12)),
],
),
),
),
);
}
}

View File

@@ -0,0 +1,211 @@
import "dart:io";
import "package:ente_auth/l10n/l10n.dart";
import "package:ente_auth/theme/ente_theme.dart";
import "package:ente_auth/ui/settings/lock_screen/custom_pin_keypad.dart";
import "package:ente_auth/utils/lock_screen_settings.dart";
import "package:flutter/material.dart";
import "package:flutter/services.dart";
import "package:pinput/pinput.dart";
class LockScreenConfirmPin extends StatefulWidget {
const LockScreenConfirmPin({super.key, required this.pin});
final String pin;
@override
State<LockScreenConfirmPin> createState() => _LockScreenConfirmPinState();
}
class _LockScreenConfirmPinState extends State<LockScreenConfirmPin> {
final _confirmPinController = TextEditingController(text: null);
bool isConfirmPinValid = false;
bool isPlatformDesktop = false;
final LockScreenSettings _lockscreenSetting = LockScreenSettings.instance;
final _pinPutDecoration = PinTheme(
height: 48,
width: 48,
padding: const EdgeInsets.only(top: 6.0),
decoration: BoxDecoration(
border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)),
borderRadius: BorderRadius.circular(15.0),
),
);
@override
void initState() {
super.initState();
isPlatformDesktop =
Platform.isLinux || Platform.isMacOS || Platform.isWindows;
}
@override
void dispose() {
super.dispose();
_confirmPinController.dispose();
}
Future<void> _confirmPinMatch() async {
if (widget.pin == _confirmPinController.text) {
await _lockscreenSetting.setPin(_confirmPinController.text);
Navigator.of(context).pop(true);
Navigator.of(context).pop(true);
return;
}
setState(() {
isConfirmPinValid = true;
});
await HapticFeedback.vibrate();
await Future.delayed(const Duration(milliseconds: 75));
_confirmPinController.clear();
setState(() {
isConfirmPinValid = false;
});
}
@override
Widget build(BuildContext context) {
final colorTheme = getEnteColorScheme(context);
final textTheme = getEnteTextTheme(context);
return Scaffold(
appBar: AppBar(
elevation: 0,
leading: IconButton(
onPressed: () {
Navigator.of(context).pop(false);
},
icon: Icon(
Icons.arrow_back,
color: colorTheme.textBase,
),
),
),
floatingActionButton: isPlatformDesktop
? null
: CustomPinKeypad(controller: _confirmPinController),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
body: SingleChildScrollView(
child: _getBody(colorTheme, textTheme),
),
);
}
Widget _getBody(colorTheme, textTheme) {
return Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 120,
width: 120,
child: Stack(
alignment: Alignment.center,
children: [
Container(
width: 82,
height: 82,
decoration: BoxDecoration(
shape: BoxShape.circle,
gradient: LinearGradient(
colors: [
Colors.grey.shade500.withOpacity(0.2),
Colors.grey.shade50.withOpacity(0.1),
Colors.grey.shade400.withOpacity(0.2),
Colors.grey.shade300.withOpacity(0.4),
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
),
child: Padding(
padding: const EdgeInsets.all(1.0),
child: Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: colorTheme.backgroundBase,
),
),
),
),
SizedBox(
height: 75,
width: 75,
child: ValueListenableBuilder(
valueListenable: _confirmPinController,
builder: (context, value, child) {
return TweenAnimationBuilder<double>(
tween: Tween<double>(
begin: 0,
end: _confirmPinController.text.length / 4,
),
curve: Curves.ease,
duration: const Duration(milliseconds: 250),
builder: (context, value, _) =>
CircularProgressIndicator(
backgroundColor: colorTheme.fillFaintPressed,
value: value,
color: colorTheme.primary400,
strokeWidth: 1.5,
),
);
},
),
),
Icon(
Icons.lock,
color: colorTheme.textBase,
size: 30,
),
],
),
),
Text(
context.l10n.reEnterPin,
style: textTheme.bodyBold,
),
const Padding(padding: EdgeInsets.all(12)),
Pinput(
length: 4,
showCursor: false,
useNativeKeyboard: isPlatformDesktop,
autofocus: true,
controller: _confirmPinController,
defaultPinTheme: _pinPutDecoration,
submittedPinTheme: _pinPutDecoration.copyWith(
textStyle: textTheme.h3Bold,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
border: Border.all(
color: colorTheme.fillBase,
),
),
),
followingPinTheme: _pinPutDecoration.copyWith(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
border: Border.all(
color: colorTheme.fillMuted,
),
),
),
focusedPinTheme: _pinPutDecoration,
errorPinTheme: _pinPutDecoration.copyWith(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
border: Border.all(
color: colorTheme.warning400,
),
),
),
errorText: '',
obscureText: true,
obscuringCharacter: '*',
forceErrorState: isConfirmPinValid,
onCompleted: (value) async {
await _confirmPinMatch();
},
),
],
),
);
}
}

View File

@@ -0,0 +1,389 @@
import "dart:async";
import "dart:io";
import "package:ente_auth/core/configuration.dart";
import "package:ente_auth/l10n/l10n.dart";
import "package:ente_auth/services/local_authentication_service.dart";
import "package:ente_auth/theme/ente_theme.dart";
import "package:ente_auth/ui/components/captioned_text_widget.dart";
import "package:ente_auth/ui/components/divider_widget.dart";
import "package:ente_auth/ui/components/menu_item_widget.dart";
import "package:ente_auth/ui/components/title_bar_title_widget.dart";
import "package:ente_auth/ui/components/title_bar_widget.dart";
import "package:ente_auth/ui/components/toggle_switch_widget.dart";
import "package:ente_auth/ui/settings/lock_screen/lock_screen_auto_lock.dart";
import "package:ente_auth/ui/settings/lock_screen/lock_screen_password.dart";
import "package:ente_auth/ui/settings/lock_screen/lock_screen_pin.dart";
import "package:ente_auth/ui/tools/app_lock.dart";
import "package:ente_auth/utils/dialog_util.dart";
import "package:ente_auth/utils/lock_screen_settings.dart";
import "package:ente_auth/utils/navigation_util.dart";
import "package:ente_auth/utils/platform_util.dart";
import "package:flutter/material.dart";
class LockScreenOptions extends StatefulWidget {
const LockScreenOptions({super.key});
@override
State<LockScreenOptions> createState() => _LockScreenOptionsState();
}
class _LockScreenOptionsState extends State<LockScreenOptions> {
final Configuration _configuration = Configuration.instance;
final LockScreenSettings _lockscreenSetting = LockScreenSettings.instance;
late bool appLock = false;
bool isPinEnabled = false;
bool isPasswordEnabled = false;
late int autoLockTimeInMilliseconds;
late bool hideAppContent;
late bool isSystemLockEnabled = false;
@override
void initState() {
super.initState();
hideAppContent = _lockscreenSetting.getShouldHideAppContent();
autoLockTimeInMilliseconds = _lockscreenSetting.getAutoLockTime();
_initializeSettings();
appLock = _lockscreenSetting.getIsAppLockSet();
}
Future<void> _initializeSettings() async {
final bool passwordEnabled = await _lockscreenSetting.isPasswordSet();
final bool pinEnabled = await _lockscreenSetting.isPinSet();
final bool shouldHideAppContent =
_lockscreenSetting.getShouldHideAppContent();
final bool systemLockEnabled = _configuration.shouldShowSystemLockScreen();
setState(() {
isPasswordEnabled = passwordEnabled;
isPinEnabled = pinEnabled;
hideAppContent = shouldHideAppContent;
isSystemLockEnabled = systemLockEnabled;
});
}
Future<void> _deviceLock() async {
if (await LocalAuthenticationService.instance
.isLocalAuthSupportedOnDevice()) {
await _lockscreenSetting.removePinAndPassword();
await _configuration.setSystemLockScreen(!isSystemLockEnabled);
} else {
await showErrorDialog(
context,
context.l10n.noSystemLockFound,
context.l10n.toEnableAppLockPleaseSetupDevicePasscodeOrScreen,
);
}
await _initializeSettings();
}
Future<void> _pinLock() async {
final bool result = await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
return const LockScreenPin();
},
),
);
if (result) {
await _configuration.setSystemLockScreen(false);
await _lockscreenSetting.setAppLockEnabled(true);
setState(() {
appLock = _lockscreenSetting.getIsAppLockSet();
});
}
await _initializeSettings();
}
Future<void> _passwordLock() async {
final bool result = await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
return const LockScreenPassword();
},
),
);
if (result) {
await _configuration.setSystemLockScreen(false);
setState(() {
appLock = _lockscreenSetting.getIsAppLockSet();
});
}
await _initializeSettings();
}
Future<void> _onToggleSwitch() async {
AppLock.of(context)!.setEnabled(!appLock);
if (await LocalAuthenticationService.instance
.isLocalAuthSupportedOnDevice()) {
await _configuration.setSystemLockScreen(!appLock);
await _lockscreenSetting.setAppLockEnabled(!appLock);
} else {
await _configuration.setSystemLockScreen(false);
await _lockscreenSetting.setAppLockEnabled(false);
}
await _lockscreenSetting.removePinAndPassword();
if (PlatformUtil.isMobile()) {
await _lockscreenSetting.setHideAppContent(!appLock);
setState(() {
hideAppContent = _lockscreenSetting.getShouldHideAppContent();
});
}
await _initializeSettings();
setState(() {
appLock = !appLock;
});
}
Future<void> _onAutoLock() async {
await routeToPage(
context,
const LockScreenAutoLock(),
).then(
(value) {
setState(() {
autoLockTimeInMilliseconds = _lockscreenSetting.getAutoLockTime();
});
},
);
}
Future<void> _onHideContent() async {
setState(() {
hideAppContent = !hideAppContent;
});
await _lockscreenSetting.setHideAppContent(hideAppContent);
}
String _formatTime(Duration duration) {
if (duration.inHours != 0) {
return "in ${duration.inHours} hour${duration.inHours > 1 ? 's' : ''}";
} else if (duration.inMinutes != 0) {
return "in ${duration.inMinutes} minute${duration.inMinutes > 1 ? 's' : ''}";
} else if (duration.inSeconds != 0) {
return "in ${duration.inSeconds} second${duration.inSeconds > 1 ? 's' : ''}";
} else {
return context.l10n.immediately;
}
}
@override
Widget build(BuildContext context) {
final colorTheme = getEnteColorScheme(context);
final textTheme = getEnteTextTheme(context);
return Scaffold(
body: CustomScrollView(
primary: false,
slivers: <Widget>[
TitleBarWidget(
flexibleSpaceTitle: TitleBarTitleWidget(
title: context.l10n.appLock,
),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 20),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: context.l10n.appLock,
),
alignCaptionedTextToLeft: true,
singleBorderRadius: 8,
menuItemColor: colorTheme.fillFaint,
trailingWidget: ToggleSwitchWidget(
value: () => appLock,
onChanged: () => _onToggleSwitch(),
),
),
AnimatedSwitcher(
duration: const Duration(milliseconds: 210),
switchInCurve: Curves.easeOut,
switchOutCurve: Curves.easeIn,
child: !appLock
? Padding(
padding: const EdgeInsets.only(
top: 14,
left: 14,
right: 12,
),
child: Text(
context.l10n.appLockDescription,
style: textTheme.miniFaint,
textAlign: TextAlign.left,
),
)
: const SizedBox(),
),
const Padding(
padding: EdgeInsets.only(top: 24),
),
],
),
AnimatedSwitcher(
duration: const Duration(milliseconds: 210),
switchInCurve: Curves.easeOut,
switchOutCurve: Curves.easeIn,
child: appLock
? Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: context.l10n.deviceLock,
),
surfaceExecutionStates: false,
alignCaptionedTextToLeft: true,
isTopBorderRadiusRemoved: false,
isBottomBorderRadiusRemoved: true,
menuItemColor: colorTheme.fillFaint,
trailingIcon: isSystemLockEnabled
? Icons.check
: null,
trailingIconColor: colorTheme.textBase,
onTap: () => _deviceLock(),
),
DividerWidget(
dividerType: DividerType.menuNoIcon,
bgColor: colorTheme.fillFaint,
),
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: context.l10n.pinLock,
),
surfaceExecutionStates: false,
alignCaptionedTextToLeft: true,
isTopBorderRadiusRemoved: true,
isBottomBorderRadiusRemoved: true,
menuItemColor: colorTheme.fillFaint,
trailingIcon:
isPinEnabled ? Icons.check : null,
trailingIconColor: colorTheme.textBase,
onTap: () => _pinLock(),
),
DividerWidget(
dividerType: DividerType.menuNoIcon,
bgColor: colorTheme.fillFaint,
),
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: context.l10n.password,
),
surfaceExecutionStates: false,
alignCaptionedTextToLeft: true,
isTopBorderRadiusRemoved: true,
isBottomBorderRadiusRemoved: false,
menuItemColor: colorTheme.fillFaint,
trailingIcon: isPasswordEnabled
? Icons.check
: null,
trailingIconColor: colorTheme.textBase,
onTap: () => _passwordLock(),
),
const SizedBox(
height: 24,
),
PlatformUtil.isMobile()
? MenuItemWidget(
captionedTextWidget:
CaptionedTextWidget(
title: context.l10n.autoLock,
subTitle: _formatTime(
Duration(
milliseconds:
autoLockTimeInMilliseconds,
),
),
),
surfaceExecutionStates: false,
alignCaptionedTextToLeft: true,
singleBorderRadius: 8,
menuItemColor: colorTheme.fillFaint,
trailingIconColor:
colorTheme.textBase,
onTap: () => _onAutoLock(),
)
: const SizedBox.shrink(),
PlatformUtil.isMobile()
? Padding(
padding: const EdgeInsets.only(
top: 14,
left: 14,
right: 12,
),
child: Text(
context.l10n
.autoLockFeatureDescription,
style: textTheme.miniFaint,
textAlign: TextAlign.left,
),
)
: const SizedBox.shrink(),
PlatformUtil.isMobile()
? Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
const SizedBox(height: 24),
MenuItemWidget(
captionedTextWidget:
CaptionedTextWidget(
title:
context.l10n.hideContent,
),
alignCaptionedTextToLeft: true,
singleBorderRadius: 8,
menuItemColor:
colorTheme.fillFaint,
trailingWidget:
ToggleSwitchWidget(
value: () => hideAppContent,
onChanged: () =>
_onHideContent(),
),
),
Padding(
padding: const EdgeInsets.only(
top: 14,
left: 14,
right: 12,
),
child: Text(
Platform.isAndroid
? context.l10n
.hideContentDescriptionAndroid
: context.l10n
.hideContentDescriptioniOS,
style: textTheme.miniFaint,
textAlign: TextAlign.left,
),
),
],
)
: const SizedBox.shrink(),
],
)
: const SizedBox.shrink(),
),
],
),
),
);
},
childCount: 1,
),
),
],
),
);
}
}

View File

@@ -0,0 +1,250 @@
import "dart:convert";
import "package:ente_auth/l10n/l10n.dart";
import "package:ente_auth/theme/ente_theme.dart";
import "package:ente_auth/ui/common/dynamic_fab.dart";
import "package:ente_auth/ui/components/buttons/icon_button_widget.dart";
import "package:ente_auth/ui/components/text_input_widget.dart";
import "package:ente_auth/ui/settings/lock_screen/lock_screen_confirm_password.dart";
import "package:ente_auth/ui/settings/lock_screen/lock_screen_options.dart";
import "package:ente_auth/utils/lock_screen_settings.dart";
import "package:ente_crypto_dart/ente_crypto_dart.dart";
import "package:flutter/material.dart";
import "package:flutter/services.dart";
/// [isChangingLockScreenSettings] Authentication required for changing lock screen settings.
/// Set to true when the app requires the user to authenticate before allowing
/// changes to the lock screen settings.
/// [isAuthenticatingOnAppLaunch] Authentication required on app launch.
/// Set to true when the app requires the user to authenticate immediately upon opening.
/// [isAuthenticatingForInAppChange] Authentication required for in-app changes (e.g., email, password).
/// Set to true when the app requires the to authenticate for sensitive actions like email, password changes.
class LockScreenPassword extends StatefulWidget {
const LockScreenPassword({
super.key,
this.isChangingLockScreenSettings = false,
this.isAuthenticatingOnAppLaunch = false,
this.isAuthenticatingForInAppChange = false,
this.authPass,
});
final bool isChangingLockScreenSettings;
final bool isAuthenticatingOnAppLaunch;
final bool isAuthenticatingForInAppChange;
final String? authPass;
@override
State<LockScreenPassword> createState() => _LockScreenPasswordState();
}
class _LockScreenPasswordState extends State<LockScreenPassword> {
final _passwordController = TextEditingController(text: null);
final _focusNode = FocusNode();
final _isFormValid = ValueNotifier<bool>(false);
final _submitNotifier = ValueNotifier(false);
int invalidAttemptsCount = 0;
final _lockscreenSetting = LockScreenSettings.instance;
@override
void initState() {
super.initState();
invalidAttemptsCount = _lockscreenSetting.getInvalidAttemptCount();
WidgetsBinding.instance.addPostFrameCallback((_) async {
_focusNode.requestFocus();
});
}
@override
void dispose() {
super.dispose();
_submitNotifier.dispose();
_focusNode.dispose();
_isFormValid.dispose();
_passwordController.dispose();
}
@override
Widget build(BuildContext context) {
final colorTheme = getEnteColorScheme(context);
final textTheme = getEnteTextTheme(context);
final isKeypadOpen = MediaQuery.viewInsetsOf(context).bottom > 100;
FloatingActionButtonLocation? fabLocation() {
if (isKeypadOpen) {
return null;
} else {
return FloatingActionButtonLocation.centerFloat;
}
}
return Scaffold(
resizeToAvoidBottomInset: isKeypadOpen,
appBar: AppBar(
elevation: 0,
leading: IconButton(
onPressed: () {
FocusScope.of(context).unfocus();
Navigator.of(context).pop(false);
},
icon: Icon(
Icons.arrow_back,
color: colorTheme.textBase,
),
),
),
floatingActionButton: ValueListenableBuilder<bool>(
valueListenable: _isFormValid,
builder: (context, isFormValid, child) {
return DynamicFAB(
isKeypadOpen: isKeypadOpen,
buttonText: context.l10n.next,
isFormValid: isFormValid,
onPressedFunction: () async {
_submitNotifier.value = !_submitNotifier.value;
},
);
},
),
floatingActionButtonLocation: fabLocation(),
floatingActionButtonAnimator: NoScalingAnimation(),
body: SingleChildScrollView(
child: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 120,
width: 120,
child: Stack(
alignment: Alignment.center,
children: [
Container(
width: 82,
height: 82,
decoration: BoxDecoration(
shape: BoxShape.circle,
gradient: LinearGradient(
colors: [
Colors.grey.shade500.withOpacity(0.2),
Colors.grey.shade50.withOpacity(0.1),
Colors.grey.shade400.withOpacity(0.2),
Colors.grey.shade300.withOpacity(0.4),
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
),
child: Padding(
padding: const EdgeInsets.all(1.0),
child: Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: colorTheme.backgroundBase,
),
),
),
),
SizedBox(
height: 75,
width: 75,
child: CircularProgressIndicator(
color: colorTheme.fillFaintPressed,
value: 1,
strokeWidth: 1.5,
),
),
IconButtonWidget(
icon: Icons.lock,
iconButtonType: IconButtonType.primary,
iconColor: colorTheme.textBase,
),
],
),
),
Text(
widget.isChangingLockScreenSettings
? context.l10n.enterPassword
: context.l10n.setNewPassword,
textAlign: TextAlign.center,
style: textTheme.bodyBold,
),
const Padding(padding: EdgeInsets.all(12)),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: TextInputWidget(
hintText: context.l10n.password,
autoFocus: true,
textCapitalization: TextCapitalization.none,
isPasswordInput: true,
shouldSurfaceExecutionStates: false,
onChange: (p0) {
_passwordController.text = p0;
_isFormValid.value = _passwordController.text.isNotEmpty;
},
onSubmit: (p0) {
return _confirmPassword();
},
submitNotifier: _submitNotifier,
),
),
const Padding(padding: EdgeInsets.all(12)),
],
),
),
),
);
}
Future<bool> _confirmPasswordAuth(String inputtedPassword) async {
final Uint8List? salt = await _lockscreenSetting.getSalt();
final hash = cryptoPwHash(
utf8.encode(inputtedPassword),
salt!,
sodium.crypto.pwhash.memLimitInteractive,
sodium.crypto.pwhash.opsLimitSensitive,
sodium,
);
if (widget.authPass == base64Encode(hash)) {
await _lockscreenSetting.setInvalidAttemptCount(0);
widget.isAuthenticatingOnAppLaunch ||
widget.isAuthenticatingForInAppChange
? Navigator.of(context).pop(true)
: Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) => const LockScreenOptions(),
),
);
return true;
} else {
if (widget.isAuthenticatingOnAppLaunch) {
invalidAttemptsCount++;
await _lockscreenSetting.setInvalidAttemptCount(invalidAttemptsCount);
if (invalidAttemptsCount > 4) {
Navigator.of(context).pop(false);
}
}
await HapticFeedback.vibrate();
throw Exception("Incorrect password");
}
}
Future<void> _confirmPassword() async {
if (widget.isChangingLockScreenSettings) {
await _confirmPasswordAuth(_passwordController.text);
return;
} else {
await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) => LockScreenConfirmPassword(
password: _passwordController.text,
),
),
);
_passwordController.clear();
}
}
}

View File

@@ -0,0 +1,284 @@
import "dart:convert";
import "dart:io";
import "package:ente_auth/l10n/l10n.dart";
import "package:ente_auth/theme/colors.dart";
import "package:ente_auth/theme/ente_theme.dart";
import "package:ente_auth/theme/text_style.dart";
import "package:ente_auth/ui/settings/lock_screen/custom_pin_keypad.dart";
import "package:ente_auth/ui/settings/lock_screen/lock_screen_confirm_pin.dart";
import "package:ente_auth/ui/settings/lock_screen/lock_screen_options.dart";
import "package:ente_auth/utils/lock_screen_settings.dart";
import "package:ente_crypto_dart/ente_crypto_dart.dart";
import "package:flutter/material.dart";
import "package:flutter/services.dart";
import 'package:pinput/pinput.dart';
/// [isChangingLockScreenSettings] Authentication required for changing lock screen settings.
/// Set to true when the app requires the user to authenticate before allowing
/// changes to the lock screen settings.
/// [isAuthenticatingOnAppLaunch] Authentication required on app launch.
/// Set to true when the app requires the user to authenticate immediately upon opening.
/// [isAuthenticatingForInAppChange] Authentication required for in-app changes (e.g., email, password).
/// Set to true when the app requires the to authenticate for sensitive actions like email, password changes.
class LockScreenPin extends StatefulWidget {
const LockScreenPin({
super.key,
this.isChangingLockScreenSettings = false,
this.isAuthenticatingOnAppLaunch = false,
this.isAuthenticatingForInAppChange = false,
this.authPin,
});
final bool isAuthenticatingOnAppLaunch;
final bool isChangingLockScreenSettings;
final bool isAuthenticatingForInAppChange;
final String? authPin;
@override
State<LockScreenPin> createState() => _LockScreenPinState();
}
class _LockScreenPinState extends State<LockScreenPin> {
final _pinController = TextEditingController(text: null);
final LockScreenSettings _lockscreenSetting = LockScreenSettings.instance;
bool isPinValid = false;
int invalidAttemptsCount = 0;
bool isPlatformDesktop = false;
@override
void initState() {
super.initState();
isPlatformDesktop =
Platform.isLinux || Platform.isMacOS || Platform.isWindows;
invalidAttemptsCount = _lockscreenSetting.getInvalidAttemptCount();
}
@override
void dispose() {
super.dispose();
_pinController.dispose();
}
Future<bool> confirmPinAuth(String inputtedPin) async {
final Uint8List? salt = await _lockscreenSetting.getSalt();
final hash = cryptoPwHash(
utf8.encode(inputtedPin),
salt!,
sodium.crypto.pwhash.memLimitInteractive,
sodium.crypto.pwhash.opsLimitSensitive,
sodium,
);
if (widget.authPin == base64Encode(hash)) {
invalidAttemptsCount = 0;
await _lockscreenSetting.setInvalidAttemptCount(0);
widget.isAuthenticatingOnAppLaunch ||
widget.isAuthenticatingForInAppChange
? Navigator.of(context).pop(true)
: Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) => const LockScreenOptions(),
),
);
return true;
} else {
setState(() {
isPinValid = true;
});
await HapticFeedback.vibrate();
await Future.delayed(const Duration(milliseconds: 75));
_pinController.clear();
setState(() {
isPinValid = false;
});
if (widget.isAuthenticatingOnAppLaunch) {
invalidAttemptsCount++;
await _lockscreenSetting.setInvalidAttemptCount(invalidAttemptsCount);
if (invalidAttemptsCount > 4) {
Navigator.of(context).pop(false);
}
}
return false;
}
}
Future<void> _confirmPin(String inputtedPin) async {
if (widget.isChangingLockScreenSettings) {
await confirmPinAuth(inputtedPin);
return;
} else {
await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) =>
LockScreenConfirmPin(pin: inputtedPin),
),
);
_pinController.clear();
}
}
final _pinPutDecoration = PinTheme(
height: 48,
width: 48,
padding: const EdgeInsets.only(top: 6.0),
decoration: BoxDecoration(
border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)),
borderRadius: BorderRadius.circular(15.0),
),
);
@override
Widget build(BuildContext context) {
final colorTheme = getEnteColorScheme(context);
final textTheme = getEnteTextTheme(context);
return Scaffold(
appBar: AppBar(
elevation: 0,
leading: IconButton(
onPressed: () {
Navigator.of(context).pop(false);
},
icon: Icon(
Icons.arrow_back,
color: colorTheme.textBase,
),
),
),
floatingActionButton: isPlatformDesktop
? null
: CustomPinKeypad(controller: _pinController),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
body: SingleChildScrollView(
child: _getBody(colorTheme, textTheme),
),
);
}
Widget _getBody(
EnteColorScheme colorTheme,
EnteTextTheme textTheme,
) {
return Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 120,
width: 120,
child: Stack(
alignment: Alignment.center,
children: [
Container(
width: 82,
height: 82,
decoration: BoxDecoration(
shape: BoxShape.circle,
gradient: LinearGradient(
colors: [
Colors.grey.shade500.withOpacity(0.2),
Colors.grey.shade50.withOpacity(0.1),
Colors.grey.shade400.withOpacity(0.2),
Colors.grey.shade300.withOpacity(0.4),
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
),
child: Padding(
padding: const EdgeInsets.all(1.0),
child: Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: colorTheme.backgroundBase,
),
),
),
),
SizedBox(
height: 75,
width: 75,
child: ValueListenableBuilder(
valueListenable: _pinController,
builder: (context, value, child) {
return TweenAnimationBuilder<double>(
tween: Tween<double>(
begin: 0,
end: _pinController.text.length / 4,
),
curve: Curves.ease,
duration: const Duration(milliseconds: 250),
builder: (context, value, _) =>
CircularProgressIndicator(
backgroundColor: colorTheme.fillFaintPressed,
value: value,
color: colorTheme.primary400,
strokeWidth: 1.5,
),
);
},
),
),
Icon(
Icons.lock,
color: colorTheme.textBase,
size: 30,
),
],
),
),
Text(
widget.isChangingLockScreenSettings
? context.l10n.enterPin
: context.l10n.setNewPin,
style: textTheme.bodyBold,
),
const Padding(padding: EdgeInsets.all(12)),
Pinput(
length: 4,
showCursor: false,
useNativeKeyboard: isPlatformDesktop,
controller: _pinController,
autofocus: true,
defaultPinTheme: _pinPutDecoration,
submittedPinTheme: _pinPutDecoration.copyWith(
textStyle: textTheme.h3Bold,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
border: Border.all(
color: colorTheme.fillBase,
),
),
),
followingPinTheme: _pinPutDecoration.copyWith(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
border: Border.all(
color: colorTheme.fillMuted,
),
),
),
focusedPinTheme: _pinPutDecoration,
errorPinTheme: _pinPutDecoration.copyWith(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
border: Border.all(
color: colorTheme.warning400,
),
),
),
forceErrorState: isPinValid,
obscureText: true,
obscuringCharacter: '*',
errorText: '',
onCompleted: (value) async {
await _confirmPin(_pinController.text);
},
),
],
),
);
}
}

View File

@@ -15,6 +15,8 @@ import 'package:ente_auth/ui/components/expandable_menu_item_widget.dart';
import 'package:ente_auth/ui/components/menu_item_widget.dart';
import 'package:ente_auth/ui/components/toggle_switch_widget.dart';
import 'package:ente_auth/ui/settings/common_settings.dart';
import 'package:ente_auth/ui/settings/lock_screen/lock_screen_options.dart';
import 'package:ente_auth/utils/auth_util.dart';
import 'package:ente_auth/utils/dialog_util.dart';
import 'package:ente_auth/utils/navigation_util.dart';
import 'package:ente_auth/utils/platform_util.dart';
@@ -66,16 +68,6 @@ class _SecuritySectionWidgetState extends State<SecuritySectionWidget> {
UserService.instance.getUserDetailsV2().ignore();
}
children.addAll([
sectionOptionSpacing,
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: l10n.passkey,
),
pressedColor: getEnteColorScheme(context).fillFaint,
trailingIcon: Icons.chevron_right_outlined,
trailingIconIsMuted: true,
onTap: () async => await onPasskeyClick(context),
),
sectionOptionSpacing,
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
@@ -102,6 +94,16 @@ class _SecuritySectionWidgetState extends State<SecuritySectionWidget> {
),
),
sectionOptionSpacing,
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: l10n.passkey,
),
pressedColor: getEnteColorScheme(context).fillFaint,
trailingIcon: Icons.chevron_right_outlined,
trailingIconIsMuted: true,
onTap: () async => await onPasskeyClick(context),
),
sectionOptionSpacing,
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: context.l10n.viewActiveSessions,
@@ -133,26 +135,39 @@ class _SecuritySectionWidgetState extends State<SecuritySectionWidget> {
children.add(sectionOptionSpacing);
}
children.addAll([
sectionOptionSpacing,
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: l10n.lockscreen,
title: context.l10n.appLock,
),
trailingWidget: ToggleSwitchWidget(
value: () => _config.shouldShowLockScreen(),
onChanged: () async {
final hasAuthenticated = await LocalAuthenticationService.instance
.requestLocalAuthForLockScreen(
surfaceExecutionStates: false,
trailingIcon: Icons.chevron_right_outlined,
trailingIconIsMuted: true,
onTap: () async {
if (await Configuration.instance.shouldShowLockScreen()) {
final bool result = await requestAuthentication(
context,
!_config.shouldShowLockScreen(),
context.l10n.authToChangeLockscreenSetting,
context.l10n.lockScreenEnablePreSteps,
context.l10n.about,
);
if (hasAuthenticated) {
FocusScope.of(context).requestFocus();
setState(() {});
if (result) {
await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
return const LockScreenOptions();
},
),
);
}
},
),
} else {
await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
return const LockScreenOptions();
},
),
);
}
},
),
sectionOptionSpacing,
]);

View File

@@ -47,7 +47,7 @@ class SocialSectionWidget extends StatelessWidget {
"https://shop.ente.io",
launchInExternalApp: !Platform.isAndroid,
),
const SocialsMenuItemWidget("Mastodon", "https://mstdn.social/@ente/"),
const SocialsMenuItemWidget("Mastodon", "https://fosstodon.org/@ente"),
sectionOptionSpacing,
const SocialsMenuItemWidget("Twitter", "https://twitter.com/enteio"),
sectionOptionSpacing,

View File

@@ -70,18 +70,18 @@ class _SupportSectionWidgetState extends State<SupportSectionWidget> {
},
),
sectionOptionSpacing,
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: l10n.email,
),
pressedColor: getEnteColorScheme(context).fillFaint,
trailingIcon: Icons.chevron_right_outlined,
trailingIconIsMuted: true,
onTap: () async {
await sendEmail(context, to: supportEmail);
},
),
sectionOptionSpacing,
// MenuItemWidget(
// captionedTextWidget: CaptionedTextWidget(
// title: l10n.email,
// ),
// pressedColor: getEnteColorScheme(context).fillFaint,
// trailingIcon: Icons.chevron_right_outlined,
// trailingIconIsMuted: true,
// onTap: () async {
// await sendEmail(context, to: supportEmail);
// },
// ),
// sectionOptionSpacing,
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: l10n.reportABug,
@@ -90,7 +90,7 @@ class _SupportSectionWidgetState extends State<SupportSectionWidget> {
trailingIcon: Icons.chevron_right_outlined,
trailingIconIsMuted: true,
onTap: () async {
await sendLogs(context, l10n.reportBug, "auth@ente.io");
await sendLogs(context, l10n.reportBug);
},
onDoubleTap: () async {
try {

View File

@@ -1,6 +1,7 @@
import 'dart:async';
import 'package:ente_auth/locale.dart';
import 'package:ente_auth/utils/lock_screen_settings.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
@@ -83,8 +84,12 @@ class _AppLockState extends State<AppLock> with WidgetsBindingObserver {
if (state == AppLifecycleState.paused &&
(!this._isLocked && this._didUnlockForAppLaunch)) {
this._backgroundLockLatencyTimer =
Timer(this.widget.backgroundLockLatency, () => this.showLockScreen());
this._backgroundLockLatencyTimer = Timer(
Duration(
milliseconds: LockScreenSettings.instance.getAutoLockTime(),
),
() => this.showLockScreen(),
);
}
if (state == AppLifecycleState.resumed) {

View File

@@ -0,0 +1,45 @@
import 'package:ente_auth/l10n/l10n.dart';
import 'package:ente_auth/utils/platform_util.dart';
import 'package:flutter/material.dart';
class RawCodesViewer extends StatefulWidget {
final String rawData;
const RawCodesViewer(this.rawData, {super.key});
@override
State<RawCodesViewer> createState() => _RawCodesViewerState();
}
class _RawCodesViewerState extends State<RawCodesViewer> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
elevation: 0,
title: Text(context.l10n.rawCodeData),
),
body: _getBody(),
);
}
Widget _getBody() {
return Container(
padding: const EdgeInsets.only(left: 12, top: 8, right: 12),
child: SingleChildScrollView(
child: SelectableRegion(
focusNode: FocusNode(),
selectionControls: PlatformUtil.selectionControls,
child: Text(
widget.rawData,
style: const TextStyle(
fontFeatures: [
FontFeature.tabularFigures(),
],
height: 1.2,
),
),
),
),
);
}
}

View File

@@ -1,10 +1,17 @@
import 'dart:io';
import 'dart:math';
import 'package:ente_auth/core/configuration.dart';
import 'package:ente_auth/l10n/l10n.dart';
import 'package:ente_auth/ui/common/gradient_button.dart';
import 'package:ente_auth/services/user_service.dart';
import 'package:ente_auth/theme/ente_theme.dart';
import 'package:ente_auth/ui/tools/app_lock.dart';
import 'package:ente_auth/utils/auth_util.dart';
import 'package:ente_auth/utils/dialog_util.dart';
import 'package:ente_auth/utils/lock_screen_settings.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:logging/logging.dart';
class LockScreen extends StatefulWidget {
@@ -20,11 +27,17 @@ class _LockScreenState extends State<LockScreen> with WidgetsBindingObserver {
bool _hasPlacedAppInBackground = false;
bool _hasAuthenticationFailed = false;
int? lastAuthenticatingTime;
bool isTimerRunning = false;
int lockedTimeInSeconds = 0;
int invalidAttemptCount = 0;
int remainingTimeInSeconds = 0;
final _lockscreenSetting = LockScreenSettings.instance;
late Brightness _platformBrightness;
@override
void initState() {
_logger.info("initiatingState");
super.initState();
invalidAttemptCount = _lockscreenSetting.getInvalidAttemptCount();
WidgetsBinding.instance.addObserver(this);
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
if (isNonMobileIOSDevice()) {
@@ -33,37 +46,145 @@ class _LockScreenState extends State<LockScreen> with WidgetsBindingObserver {
}
_showLockScreen(source: "postFrameInit");
});
_platformBrightness =
SchedulerBinding.instance.platformDispatcher.platformBrightness;
}
@override
Widget build(BuildContext context) {
final colorTheme = getEnteColorScheme(context);
final textTheme = getEnteTextTheme(context);
return Scaffold(
body: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Stack(
alignment: Alignment.center,
appBar: AppBar(
elevation: 0,
leading: IconButton(
icon: const Icon(Icons.logout_outlined),
color: Theme.of(context).iconTheme.color,
onPressed: () {
_onLogoutTapped(context);
},
),
),
body: GestureDetector(
onTap: () {
isTimerRunning ? null : _showLockScreen(source: "tap");
},
child: Container(
decoration: BoxDecoration(
image: DecorationImage(
opacity: _platformBrightness == Brightness.light ? 0.08 : 0.12,
image: const ExactAssetImage(
'assets/loading_photos_background.png',
),
fit: BoxFit.cover,
),
),
child: Center(
child: Column(
children: [
Opacity(
opacity: 0.2,
child: Image.asset('assets/loading_photos_background.png'),
),
const Spacer(),
SizedBox(
width: 180,
child: GradientButton(
text: context.l10n.unlock,
iconData: Icons.lock_open_outlined,
onTap: () async {
// ignore: unawaited_futures
_showLockScreen(source: "tapUnlock");
},
height: 120,
width: 120,
child: Stack(
alignment: Alignment.center,
children: [
Container(
width: 82,
height: 82,
decoration: BoxDecoration(
shape: BoxShape.circle,
gradient: LinearGradient(
colors: [
Colors.grey.shade500.withOpacity(0.2),
Colors.grey.shade50.withOpacity(0.1),
Colors.grey.shade400.withOpacity(0.2),
Colors.grey.shade300.withOpacity(0.4),
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
),
child: Padding(
padding: const EdgeInsets.all(1.0),
child: Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: colorTheme.backgroundBase,
),
),
),
),
SizedBox(
height: 75,
width: 75,
child: TweenAnimationBuilder<double>(
tween: Tween<double>(
begin: isTimerRunning ? 0 : 1,
end: isTimerRunning
? _getFractionOfTimeElapsed()
: 1,
),
duration: const Duration(seconds: 1),
builder: (context, value, _) =>
CircularProgressIndicator(
backgroundColor: colorTheme.fillFaintPressed,
value: value,
color: colorTheme.primary400,
strokeWidth: 1.5,
),
),
),
Icon(
Icons.lock,
size: 30,
color: colorTheme.textBase,
),
],
),
),
const Spacer(),
isTimerRunning
? Stack(
alignment: Alignment.center,
children: [
Text(
context.l10n.tooManyIncorrectAttempts,
style: textTheme.small,
)
.animate(
delay: const Duration(milliseconds: 2000),
)
.fadeOut(
duration: 400.ms,
curve: Curves.easeInOutCirc,
),
Text(
_formatTime(remainingTimeInSeconds),
style: textTheme.small,
)
.animate(
delay: const Duration(milliseconds: 2250),
)
.fadeIn(
duration: 400.ms,
curve: Curves.easeInOutCirc,
),
],
)
: GestureDetector(
onTap: () => _showLockScreen(source: "tap"),
child: Text(
context.l10n.tapToUnlock,
style: textTheme.small,
),
),
const Padding(
padding: EdgeInsets.only(bottom: 24),
),
],
),
],
),
),
),
);
@@ -77,6 +198,18 @@ class _LockScreenState extends State<LockScreen> with WidgetsBindingObserver {
return shortestSide > 600 ? true : false;
}
void _onLogoutTapped(BuildContext context) {
showChoiceActionSheet(
context,
title: context.l10n.areYouSureYouWantToLogout,
firstButtonLabel: context.l10n.yesLogout,
isCritical: true,
firstButtonOnTap: () async {
await UserService.instance.logout(context);
},
);
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
_logger.info(state.toString());
@@ -90,10 +223,17 @@ class _LockScreenState extends State<LockScreen> with WidgetsBindingObserver {
if (!_hasAuthenticationFailed && !didAuthInLast5Seconds) {
// Show the lock screen again only if the app is resuming from the
// background, and not when the lock screen was explicitly dismissed
Future.delayed(
Duration.zero,
() => _showLockScreen(source: "lifeCycle"),
);
if (_lockscreenSetting.getlastInvalidAttemptTime() >
DateTime.now().millisecondsSinceEpoch &&
!_isShowingLockScreen) {
final int time = (_lockscreenSetting.getlastInvalidAttemptTime() -
DateTime.now().millisecondsSinceEpoch) ~/
1000;
Future.delayed(Duration.zero, () {
startLockTimer(time);
_showLockScreen(source: "lifeCycle");
});
}
} else {
_hasAuthenticationFailed = false; // Reset failure state
}
@@ -115,24 +255,112 @@ class _LockScreenState extends State<LockScreen> with WidgetsBindingObserver {
super.dispose();
}
Future<void> startLockTimer(int timeInSeconds) async {
if (isTimerRunning) {
return;
}
setState(() {
isTimerRunning = true;
remainingTimeInSeconds = timeInSeconds;
});
while (remainingTimeInSeconds > 0) {
await Future.delayed(const Duration(seconds: 1));
setState(() {
remainingTimeInSeconds--;
});
}
setState(() {
isTimerRunning = false;
});
}
double _getFractionOfTimeElapsed() {
final int totalLockedTime =
lockedTimeInSeconds = pow(2, invalidAttemptCount - 5).toInt() * 30;
if (remainingTimeInSeconds == 0) return 1;
return 1 - remainingTimeInSeconds / totalLockedTime;
}
String _formatTime(int seconds) {
final int hours = seconds ~/ 3600;
final int minutes = (seconds % 3600) ~/ 60;
final int remainingSeconds = seconds % 60;
if (hours > 0) {
return "${hours}h ${minutes}m";
} else if (minutes > 0) {
return "${minutes}m ${remainingSeconds}s";
} else {
return "${remainingSeconds}s";
}
}
Future<void> _autoLogoutOnMaxInvalidAttempts() async {
_logger.info("Auto logout on max invalid attempts");
Navigator.of(context, rootNavigator: true).pop('dialog');
Navigator.of(context).popUntil((route) => route.isFirst);
final dialog = createProgressDialog(context, "Logging out ...");
await dialog.show();
await Configuration.instance.logout();
await dialog.hide();
}
Future<void> _showLockScreen({String source = ''}) async {
final int id = DateTime.now().millisecondsSinceEpoch;
_logger.info("Showing lock screen $source $id");
final int currentTimestamp = DateTime.now().millisecondsSinceEpoch;
_logger.info("Showing lock screen $source $currentTimestamp");
try {
if (currentTimestamp < _lockscreenSetting.getlastInvalidAttemptTime() &&
!_isShowingLockScreen) {
final int remainingTime =
(_lockscreenSetting.getlastInvalidAttemptTime() -
currentTimestamp) ~/
1000;
await startLockTimer(remainingTime);
}
_isShowingLockScreen = true;
final result = await requestAuthentication(
context,
context.l10n.authToViewSecrets,
);
_logger.finest("LockScreen Result $result $id");
final result = isTimerRunning
? false
: await requestAuthentication(
context,
context.l10n.authToViewSecrets,
isOpeningApp: true,
);
_logger.finest("LockScreen Result $result $currentTimestamp");
_isShowingLockScreen = false;
if (result) {
lastAuthenticatingTime = DateTime.now().millisecondsSinceEpoch;
AppLock.of(context)!.didUnlock();
await _lockscreenSetting.setInvalidAttemptCount(0);
setState(() {
lockedTimeInSeconds = 15;
isTimerRunning = false;
});
} else {
if (!_hasPlacedAppInBackground) {
// Treat this as a failure only if user did not explicitly
// put the app in background
if (_lockscreenSetting.getInvalidAttemptCount() > 4 &&
invalidAttemptCount !=
_lockscreenSetting.getInvalidAttemptCount()) {
invalidAttemptCount = _lockscreenSetting.getInvalidAttemptCount();
if (invalidAttemptCount > 9) {
await _autoLogoutOnMaxInvalidAttempts();
return;
}
lockedTimeInSeconds = pow(2, invalidAttemptCount - 5).toInt() * 30;
await _lockscreenSetting.setLastInvalidAttemptTime(
DateTime.now().millisecondsSinceEpoch +
lockedTimeInSeconds * 1000,
);
await startLockTimer(lockedTimeInSeconds);
}
_hasAuthenticationFailed = true;
_logger.info("Authentication failed");
}

View File

@@ -4,7 +4,7 @@ import 'package:ente_auth/services/user_service.dart';
import 'package:ente_auth/ui/lifecycle_event_handler.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:pinput/pin_put/pin_put.dart';
import 'package:pinput/pinput.dart';
class TwoFactorAuthenticationPage extends StatefulWidget {
final String sessionID;
@@ -19,9 +19,13 @@ class TwoFactorAuthenticationPage extends StatefulWidget {
class _TwoFactorAuthenticationPageState
extends State<TwoFactorAuthenticationPage> {
final _pinController = TextEditingController();
final _pinPutDecoration = BoxDecoration(
border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)),
borderRadius: BorderRadius.circular(15.0),
final _pinPutDecoration = PinTheme(
height: 45,
width: 45,
decoration: BoxDecoration(
border: Border.all(color: const Color.fromRGBO(45, 194, 98, 1.0)),
borderRadius: BorderRadius.circular(15.0),
),
);
String _code = "";
late LifecycleEventHandler _lifecycleEventHandler;
@@ -79,9 +83,9 @@ class _TwoFactorAuthenticationPageState
const Padding(padding: EdgeInsets.all(32)),
Padding(
padding: const EdgeInsets.fromLTRB(40, 0, 40, 0),
child: PinPut(
fieldsCount: 6,
onSubmit: (String code) {
child: Pinput(
length: 6,
onCompleted: (String code) {
_verifyTwoFactorCode(code);
},
onChanged: (String pin) {
@@ -90,20 +94,22 @@ class _TwoFactorAuthenticationPageState
});
},
controller: _pinController,
submittedFieldDecoration: _pinPutDecoration.copyWith(
borderRadius: BorderRadius.circular(20.0),
),
selectedFieldDecoration: _pinPutDecoration,
followingFieldDecoration: _pinPutDecoration.copyWith(
borderRadius: BorderRadius.circular(5.0),
border: Border.all(
color: const Color.fromRGBO(45, 194, 98, 0.5),
submittedPinTheme: _pinPutDecoration.copyWith(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20.0),
border: Border.all(
color: const Color.fromRGBO(45, 194, 98, 0.5),
),
),
),
inputDecoration: const InputDecoration(
focusedBorder: InputBorder.none,
border: InputBorder.none,
counterText: '',
defaultPinTheme: _pinPutDecoration,
followingPinTheme: _pinPutDecoration.copyWith(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
border: Border.all(
color: const Color.fromRGBO(45, 194, 98, 0.5),
),
),
),
autofocus: true,
),

View File

@@ -1,7 +1,7 @@
import 'package:ente_auth/l10n/l10n.dart';
import 'package:ente_auth/models/account/two_factor.dart';
import 'package:ente_auth/services/user_service.dart';
import 'package:ente_auth/utils/dialog_util.dart';
import 'package:ente_auth/utils/email_util.dart';
import 'package:flutter/material.dart';
class TwoFactorRecoveryPage extends StatefulWidget {
@@ -86,12 +86,8 @@ class _TwoFactorRecoveryPageState extends State<TwoFactorRecoveryPage> {
),
GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
showErrorDialog(
context,
l10n.contactSupport,
l10n.contactSupportViaEmailMessage("support@ente.io"),
);
onTap: () async {
await openSupportPage(null, null);
},
child: Container(
padding: const EdgeInsets.all(40),

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