Compare commits

...

647 Commits

Author SHA1 Message Date
Prateek Sunal
40d4b21be9 chore: add heavy logging 2025-08-19 14:10:12 +05:30
Prateek Sunal
7027edb2d1 Merge remote-tracking branch 'origin/main' into bg-ml 2025-08-19 12:48:27 +05:30
Prateek Sunal
831720a49d Merge remote-tracking branch 'origin/decoded_image_refactor' into bg-ml 2025-08-19 12:48:20 +05:30
Vishnu Mohandas
621713d0b4 [mob] Remove unused import (#6892) 2025-08-19 12:33:15 +05:30
vishnukvmd
34813d2fae [mob] Remove unused import 2025-08-19 12:32:58 +05:30
Vishnu Mohandas
d8e4418d78 Remove ignore (#6890) 2025-08-19 11:43:36 +05:30
vishnukvmd
9771a5bc5d Remove ignore 2025-08-19 11:41:44 +05:30
laurenspriem
24b88a186c Decode image in background using image pkg 2025-08-19 11:05:39 +05:30
laurenspriem
49b9d83f05 refactor to not use ui.image unnecessarily everywhere 2025-08-19 10:52:59 +05:30
laurenspriem
273d7bd00a ignore rust_builder linting errors 2025-08-19 10:38:08 +05:30
laurenspriem
4e8991dc10 remove unused import 2025-08-19 10:25:42 +05:30
Neeraj
aa4207f878 [auth] New translations (#6877)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2025-08-19 10:13:12 +05:30
Manav Rathi
3176ba8a93 pin to specific release of debian to avoid collation mismatch (#6886)
## Description

this pins the postgres container to a specific version of debian to
prevent issues with updated glibc in newer deb release

https://github.com/docker-library/postgres/issues/1356

## Tests
2025-08-19 09:09:04 +05:30
Matthias Wirtz
fcf038c4d8 pin to specific release of debian to avoid collation mismatch 2025-08-18 20:54:12 +02:00
Prateek Sunal
46aad76039 [mob][photos] fix widget tap on iOS (#6882)
## Description

Widget tap was not opening the specified photo because the app group id
was not setting correctly when the method was being called.

## Tests
2025-08-18 22:23:36 +05:30
Prateek Sunal
9a654988f8 chore: remove unused prefs 2025-08-18 22:23:15 +05:30
Prateek Sunal
1ce749e93e fix: update code to check correctly 2025-08-18 22:22:54 +05:30
Prateek Sunal
db88432b9d fix: update swift file to handle homeWidget deep link 2025-08-18 21:54:00 +05:30
Prateek Sunal
354bcc715f fix: remove iOS widget tap issue from change log 2025-08-18 20:56:46 +05:30
Prateek Sunal
5541198967 fix: combine functions 2025-08-18 20:55:07 +05:30
Prateek Sunal
3e2dbe2c1b fix: take prefs from ServiceLocation & setAppGroup whenever needed 2025-08-18 20:47:01 +05:30
Prateek Sunal
5d3d18f347 fix: add some logs + init prefs at one place 2025-08-18 19:59:15 +05:30
Prateek Sunal
9a876f3d59 fix: update internal and store change logs for widget tap issues on iOS 2025-08-18 19:11:10 +05:30
Prateek Sunal
3b7600ae7b chore: update lock files 2025-08-18 19:09:57 +05:30
Prateek Sunal
8bacf8ff93 fix: widget tap not working on iOS by giving preferences to init 2025-08-18 19:09:44 +05:30
Vishnu Mohandas
b356e5d0a5 Hey Locker! (#6881) 2025-08-18 18:44:44 +05:30
vishnukvmd
777516446d Hey Locker! 2025-08-18 18:43:14 +05:30
Vishnu Mohandas
de5f0fbb39 [docs] update bucket-level configuration for S3 (#6873)
## Description

This PR updates documentation for S3 configuration with bucket-level
configuration for URL style and local buckets and updates needed
configuration that will make it intuitive for self-hosters.
2025-08-18 15:48:38 +05:30
Vishnu Mohandas
48fa2bd6de [mobile] Remove unused script for dependency fetching in mobile packages (#6878)
## Description

## Tests
2025-08-18 12:49:14 +05:30
AmanRajSinghMourya
df584f34e9 Remove unused script for dependency fetching in mobile packages 2025-08-18 12:36:05 +05:30
Vishnu Mohandas
0241ad1fe5 [mobile] Refactor project to extract and centralize common code into packages (#6768)
## Description
Refactored the codebase to move shared logic into reusable packages
under packages/.
Cleaned up old code, fixed builds, applied lint fixes, and updated
dependencies.

### Extracted reusable logic into dedicated packages:

- packages/accounts
- packages/base
- packages/configuration
- packages/lock screen
- packages/logging
- packages/network
- packages/strings
- packages/ui
- packages/utils

### Removed legacy or redundant code:
- Password re-entry
- Recovery key flow
- Password verification logic
- Applied lint fixes across multiple modules like accounts, base,
configuration, events, lock_screen, logging, network, strings, ui, utils

###  Build Fixes
Fixed Android build issues
Upgraded Flutter to version 3.24.3 and resolved related dependency
errors
2025-08-18 12:26:17 +05:30
AmanRajSinghMourya
435ed212c6 Fix build issues 2025-08-18 12:13:15 +05:30
AmanRajSinghMourya
1e9a6a1e14 Merge branch 'main' into test-com 2025-08-18 11:37:45 +05:30
Manav Rathi
a7ba3079cb [web] New translations (#6875)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-08-18 11:33:05 +05:30
Neeraj
97f1bb71c7 [mobile/photos] New translations (#6876)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2025-08-18 10:55:31 +05:30
Crowdin Bot
f2049ac7fa New Crowdin translations by GitHub Action 2025-08-18 01:18:04 +00:00
Crowdin Bot
e82ba882d6 New Crowdin translations by GitHub Action 2025-08-18 01:05:17 +00:00
Crowdin Bot
eecd7ed355 New Crowdin translations by GitHub Action 2025-08-18 00:43:39 +00:00
Keerthana
bc70b4e725 [docs] fix linting for self-hosting 2025-08-18 01:52:26 +05:30
Keerthana
a52cebf0e5 [cli] remove dead code in init 2025-08-18 00:49:29 +05:30
Keerthana
4c31a7bcd6 [docs] update bucket configuration 2025-08-17 23:55:43 +05:30
Prateek Sunal
deef13ece9 [auth] update plugins & gradle (#6861)
## Description

Fix for compiling with flutter 3.32.8

## Tests
2025-08-15 19:35:21 +05:30
Prateek Sunal
3132373c26 chore: update plugins & add desugaring 2025-08-15 18:13:08 +05:30
Prateek Sunal
5b4ff1d01a chore: update gradle and kotlin 2025-08-15 17:34:04 +05:30
AmanRajSinghMourya
20d8a42239 Add broken-icon 2025-08-14 22:23:50 +05:30
Aman Raj Singh Mourya
5d85dea5fe [auth] Show black color as default background color for privacy-screen (#6854)
## Description]
When switching between tabs on mobile, a white flash appear when
lockscreen is enable.
This PR fixes that by setting the background color to black for both
light and dark theme.
2025-08-14 21:54:33 +05:30
AmanRajSinghMourya
b19814dd2c Add onBoardingBodyColor to CustomColorScheme extension for light and dark themes 2025-08-14 21:18:53 +05:30
Laurens Priem
a28f402f35 [mob][photos] Memories misc improv (#6851)
## Description

Few miscellaneous improvements for memories. Taking text embeddings from
assets, and better caching and choosing of which persons to show.

## Tests

Tested in debug mode on my pixel phone.
2025-08-14 17:59:53 +05:30
laurenspriem
5596e3d2e5 Merge branch 'main' into memories_misc_improv 2025-08-14 17:34:16 +05:30
laurenspriem
00b9d277d2 load text embeddings for memories from assets 2025-08-14 17:29:37 +05:30
Laurens Priem
f48c21bd4e [mob][photos] Specify rust version in mobile builds (#6850)
## Description

Specify rust version in mobile builds
2025-08-14 13:56:26 +05:30
laurenspriem
9b23ec5953 No dependency on rust version specifically 2025-08-14 13:55:34 +05:30
laurenspriem
b917592901 specify rust version 2025-08-14 13:47:30 +05:30
Laurens Priem
a1606b99d1 [mob][photos] Similar images debug screen (#6845)
## Description

Introduces the similar images (debug) screen and similar images
functionality in the app. It doesn't include the final design, this PR
is more to get some things in main, so that the entire team can start
testing it. This PR also finally introduces functional rust code into
the mobile app, as well as a vector DB.

(Note that flutter_rust_bridge, needed for rust integration,
automatically formats certain dart code when generating bindings. So
some file changes in this PR are simply automatic formats and can be
ignored. Similarly, the `rust_builder` directory is mainly generated and
can be ignored.)

## Tests

Tested on my own device in both debug and release mode.
2025-08-14 13:13:53 +05:30
laurenspriem
38ed141d0e Re-add rust builder 2025-08-14 13:05:43 +05:30
laurenspriem
64dde88b63 Delete rust_builder for PR issue 2025-08-14 13:05:09 +05:30
Manav Rathi
af628a72fa [web] New translations (#6849)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-08-14 12:39:59 +05:30
laurenspriem
634e5e9624 Merge branch 'main' into similar_images_debug 2025-08-14 12:37:38 +05:30
Crowdin Bot
6db71d7995 New Crowdin translations by GitHub Action 2025-08-14 07:04:33 +00:00
Manav Rathi
83378094b5 [web] Move custom domain related strings to translations (#6848) 2025-08-14 12:33:54 +05:30
laurenspriem
9afa40764e Remove more old refs 2025-08-14 12:25:46 +05:30
laurenspriem
9899298500 Remove old gitsubmodule refs 2025-08-14 12:21:41 +05:30
Aman Raj Singh Mourya
ad58bc1d5f [auth] Add custom icon for Skyscanner (#6843)
## Description
Custom icon for [Skyscanner](https://www.skyscanner.net/)
- Add optimised SVG file
- Add entry to `custom-icons.json`
2025-08-14 12:05:00 +05:30
Manav Rathi
d76c9ce6db [web] Move custom domain related strings to translations 2025-08-14 11:58:22 +05:30
Manav Rathi
0606401d29 [docs] Custom domains troubleshooting (#6847) 2025-08-14 10:35:06 +05:30
Manav Rathi
0e9556603e [docs] Custom domains troubleshooting 2025-08-14 10:32:17 +05:30
laurenspriem
f4c0899e02 Use slicing 2025-08-14 09:30:59 +05:30
laurenspriem
10ae4c5f92 Merge branch 'main' into similar_images_debug 2025-08-14 09:11:46 +05:30
laurenspriem
eb967709dd Put vectorDB behind feature flag 2025-08-14 08:53:38 +05:30
laurenspriem
b72b118299 Note change 2025-08-14 08:41:04 +05:30
gfrcsd
556c04aca2 Add custom icon for Skyscanner 2025-08-13 22:12:50 +01:00
AmanRajSinghMourya
72ede1a109 Add onLongPress callback to MenuItemWidget 2025-08-14 00:09:48 +05:30
Aman Raj Singh Mourya
4b89e92dd0 [auth] add custom icon for RaiderIO (#6839)
- Added Raider.IO SVG icon.
- Updated custom-icons.json to include the new icon.

Raider.IO is a platform that tracks World of Warcraft players'
performance.
2025-08-13 23:39:46 +05:30
Prateek Sunal
ecf58c175b fix: add more things for testing 2025-08-13 19:51:05 +05:30
sayimburak
6b93125b5d [auth] add custom icon for RaiderIO
- Added Raider.IO SVG icon.
- Updated custom-icons.json to include the new icon.

Raider.IO is a platform that tracks World of Warcraft players' performance.
2025-08-13 16:44:01 +03:00
Manav Rathi
4a3d9fd752 [web] Custom domains (#6837) 2025-08-13 17:45:44 +05:30
laurenspriem
39c1e54cc9 Delete with symlink 2025-08-13 14:56:53 +05:30
Prateek Sunal
cc0198f879 fix: add more logs for testing 2025-08-13 14:37:23 +05:30
laurenspriem
cb3f1a5edc sort menu 2025-08-13 14:24:48 +05:30
Prateek Sunal
6112d6a780 [mob] update target api to 35 (android 15) & compileSdk to latest (36) (#6833)
## Description

targetSdk -> 35, compileSdk -> 36

- [x] Solves Target api issue for auth and photos

## Tests
2025-08-13 14:19:09 +05:30
laurenspriem
b34a769773 Sort on name within individual files group 2025-08-13 14:18:13 +05:30
Prateek Sunal
e265d4b4d2 fix: only bump target sdk to 35 2025-08-13 13:14:01 +05:30
Prateek Sunal
f95410a5b1 fix: only bump target sdk to 35 2025-08-13 13:13:37 +05:30
Manav Rathi
0eb56a8437 yarn pretty 2025-08-13 12:53:25 +05:30
Manav Rathi
eb9f8021ae Integrate 2025-08-13 12:30:13 +05:30
Manav Rathi
fdc3cb8f85 Images 2025-08-13 12:11:06 +05:30
AmanRajSinghMourya
5fe86858ef Update dependencies and upgrade SDK version; replace qr_code_scanner with qr_code_scanner_plus 2025-08-13 11:38:27 +05:30
Manav Rathi
0c9f9a60b7 Help 2025-08-13 11:23:37 +05:30
laurenspriem
4db135d5d0 Don't log clip queries 2025-08-13 10:55:54 +05:30
laurenspriem
8c5f7e62be Don't log clip queries 2025-08-13 10:55:23 +05:30
laurenspriem
ed011e93dc Merge branch 'main' into memories_misc_improv 2025-08-13 10:36:11 +05:30
AmanRajSinghMourya
7546d8cad2 Merge branch 'main' into test-com 2025-08-13 10:13:50 +05:30
laurenspriem
a98385c3a3 Dependencies 2025-08-13 09:49:51 +05:30
laurenspriem
68639dfd55 Update cargokit with upgraded flutter version 2025-08-13 09:49:42 +05:30
Neeraj
1fe2a941ff [mobile/photos] New translations (#6808)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2025-08-13 09:35:47 +05:30
laurenspriem
d7f88c1890 use rust in gh actions internal releases 2025-08-13 09:25:45 +05:30
Manav Rathi
357b7c58a1 Subscription check 2025-08-13 09:12:44 +05:30
Manav Rathi
f300573604 Simplify 2025-08-13 09:12:44 +05:30
Manav Rathi
4e622fc48a [web] Update yarn.lock (#6835) 2025-08-13 09:09:26 +05:30
Manav Rathi
b11d0e7c94 [web] Update yarn.lock 2025-08-13 09:04:53 +05:30
laurenspriem
d65ddaec02 Merge branch 'main' into smart_dedupe 2025-08-13 08:54:07 +05:30
Manav Rathi
ea0e2ed664 [infra] Caddy (#6831)
For custom domain TLS provisioning
2025-08-12 18:01:24 +05:30
Manav Rathi
01d70d1b5e Fix HTTPS connection with upstream 2025-08-12 17:49:48 +05:30
Prateek Sunal
de44b1813e chore: update target api & compile sdk to 36 (android 16) 2025-08-12 17:34:56 +05:30
Neeraj
7165db3cd9 [server] Support for configuring custom-domains (#6827)
## Description

## Tests
- Verified server db migrations is on 103
- Verified that duplicate custom domain results in error
- basic sanity testing for custom domain validation.
2025-08-12 17:25:47 +05:30
Neeraj
ee3829675b [auth] Update assets for f-droid (#6832)
## Description

## Tests
2025-08-12 16:26:56 +05:30
Neeraj
9ee86fc6a0 [mob] upgrade flutter to latest stable (#6254)
## Description

This PR upgrades flutter to stable version i.e. Flutter 3.32.8

- [x] Bump dependencies
- [x] Replace .withOpacity( with .withValues(alpha:
- [x] Fix broken l10n
- [x] Did some lint fixes
- [x] Update deprecated methods and arguments
- [x] Fix flutter_gen not found for Photos app (by removing the
l10n.yaml, fixing delegates, using `intl_utils/Flutter Intl`)

## Tests

- [x] Test app
- [x] Check upgraded deps
- [x] Test Deep links/Passkeys - Android
- [ ] Test Deep links/Passkeys - iOS
2025-08-12 16:22:09 +05:30
Neeraj Gupta
c46c009bee Update auth description 2025-08-12 16:18:55 +05:30
Prateek Sunal
e9786d8ee5 fix: bump remaining flutter sdk versions 2025-08-12 16:09:16 +05:30
Neeraj Gupta
dbc36c7129 Update assets 2025-08-12 16:05:15 +05:30
Prateek Sunal
e00c9795f0 chore: lint fix 2025-08-12 16:03:06 +05:30
Prateek Sunal
db7a7c3f7a chore: bump intl 2025-08-12 15:58:17 +05:30
Prateek Sunal
33b8039348 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-08-12 15:46:31 +05:30
laurenspriem
4070d47d0f Merge branch 'main' into smart_dedupe 2025-08-12 15:41:33 +05:30
Neeraj Gupta
249206eadf [auth] Update assets for f-droid 2025-08-12 15:32:43 +05:30
laurenspriem
11ef667433 Select all to select extra 2025-08-12 15:29:41 +05:30
Neeraj
2bf24be08e [auth] Fix path for auth workflows & delete oversized icons (#6830)
## Description

## Tests
2025-08-12 15:29:23 +05:30
laurenspriem
e9feed59cd Use person faces to differentiate too 2025-08-12 15:26:11 +05:30
Neeraj Gupta
7cc4ab57f3 Remove oversized assets 2025-08-12 15:24:38 +05:30
Manav Rathi
c84c29ed74 Caddy 2025-08-12 14:55:06 +05:30
Neeraj Gupta
cb03173c46 Fix path for auth linters 2025-08-12 14:52:05 +05:30
Neeraj
13a015434b [mob] Support for handling Custom domain (#6829)
## Description

## Tests
2025-08-12 14:49:30 +05:30
Neeraj Gupta
249009ae7e Clean up 2025-08-12 14:44:06 +05:30
Neeraj Gupta
b82956792a Separate change logs 2025-08-12 14:30:03 +05:30
Neeraj Gupta
4ba03d9a6a Update workflow 2025-08-12 13:53:21 +05:30
Neeraj Gupta
d6b4eec9b4 Merge remote-tracking branch 'origin/main' into custom_domain_handling 2025-08-12 13:50:26 +05:30
Neeraj Gupta
fb2743a8fe Update changelog 2025-08-12 13:50:16 +05:30
Prateek Sunal
c9c39b30ec chore: update changelog 2025-08-12 13:46:02 +05:30
Prateek Sunal
9eeb7efd4f [mob][photos] run ffmpeg in isolate (#5743)
## Description

- [x] Create a new service to use for FFmpeg in an isolate'ed
environment
- [x] Apply this service wherever we use FFmpeg Kit
- [x] Make FFMpeg accessible in an isolate (background)

## Tests

- [x] Test FFmpeg intergrations
2025-08-12 13:44:45 +05:30
Prateek Sunal
9fb52b8f95 fix: update changes 2025-08-12 13:44:01 +05:30
Prateek Sunal
8e7a6d2034 fix: rename variables 2025-08-12 13:43:38 +05:30
laurenspriem
5e52036f7a Better memory management 2025-08-12 13:38:29 +05:30
Prateek Sunal
9568c4819f chore: update timeout 2025-08-12 13:36:31 +05:30
Prateek Sunal
6e6ed7ea64 fix: logs 2025-08-12 13:31:25 +05:30
Neeraj Gupta
da590a643f Lint fixes 2025-08-12 13:28:00 +05:30
Neeraj Gupta
21c8af01a2 Update query 2025-08-12 13:25:39 +05:30
Prateek Sunal
00549d413e Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-08-12 13:13:24 +05:30
Prateek Sunal
75e7fa5cde Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-08-12 13:13:09 +05:30
Prateek Sunal
1e81abf9d9 Merge branch 'flutter-upgrade' into isolated-ffmpeg 2025-08-12 13:12:58 +05:30
Neeraj Gupta
e9c41aed1e Alert for origin mismatch 2025-08-12 13:03:42 +05:30
Manav Rathi
0784da5b4e [web] Custom albums build for custom domains (#6826) 2025-08-12 12:39:01 +05:30
Manav Rathi
633caa7883 Custom albums build for custom domains 2025-08-12 12:29:09 +05:30
Manav Rathi
d4635c415b [web] Custom domains - WIP (#6825) 2025-08-12 12:02:27 +05:30
Neeraj Gupta
f3e5297878 Merge remote-tracking branch 'origin/main' into custom_domain_handling 2025-08-12 11:55:46 +05:30
Neeraj Gupta
5e993b9526 Support for custom domain url replacement 2025-08-12 11:55:24 +05:30
Neeraj Gupta
29d316349b Allow empty string 2025-08-12 11:49:32 +05:30
laurenspriem
d61c18a6ef Use search with keys in similar images service 2025-08-12 11:38:44 +05:30
laurenspriem
5f4cf302a1 use search with keys in ml computer 2025-08-12 11:38:25 +05:30
laurenspriem
cb2b33eedb use rust search with potential keys in clip vector db 2025-08-12 11:38:03 +05:30
laurenspriem
856a87f01c Rust api to do entire search with potential keys in rust 2025-08-12 11:36:38 +05:30
Manav Rathi
95ed8d23de Prep for merge 2025-08-12 11:31:46 +05:30
Manav Rathi
97d8d9fa8d Handle errors 2025-08-12 11:19:29 +05:30
Manav Rathi
149eb6c38d Not required 2025-08-12 11:19:29 +05:30
Manav Rathi
4c57c6b30f Tweak 2025-08-12 11:19:29 +05:30
Manav Rathi
3d12812671 Use 2025-08-12 11:19:29 +05:30
Manav Rathi
440818f1af Read from remote store 2025-08-12 11:19:29 +05:30
Manav Rathi
18e7a52848 Sketch 1 2025-08-12 11:19:28 +05:30
Manav Rathi
b099d16a32 Screen outline 2025-08-12 11:19:28 +05:30
Manav Rathi
46c588c512 Button 2025-08-12 11:19:28 +05:30
Neeraj Gupta
f248dbabe0 Refactor publicUrl construction logic 2025-08-12 11:10:34 +05:30
Neeraj Gupta
799e844de3 Parse fields for custom domain 2025-08-12 11:07:34 +05:30
Manav Rathi
5090e16d54 Make public 2025-08-12 10:25:24 +05:30
Neeraj Gupta
1d649c5a79 Store only domain 2025-08-12 10:01:32 +05:30
Neeraj Gupta
9d4474393e Merge branch 'main' into refactor_remote_store 2025-08-12 09:39:48 +05:30
Manav Rathi
073235c294 [web] New translations (#6807)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-08-12 09:26:28 +05:30
Neeraj
fe8da0b332 [mob] Use Github workflow's run_number for bumping up the versionCode (#6824)
## Description

## Tests
2025-08-12 09:03:05 +05:30
Neeraj Gupta
b98294c073 Update workflow 2025-08-12 09:01:48 +05:30
Neeraj
c962508987 [mobile] Fix Image editor (#6819)
## Description
- Fix bottom navigation bar color in light theme
- Fix initial color in paint editor
- Tap to reset tune adjustment value (brightness, exposure, etc..) and
add haptics when crossing zero
2025-08-12 08:55:22 +05:30
Neeraj Gupta
4ff211868e Update changes 2025-08-12 08:54:56 +05:30
Neeraj Gupta
527f2557b6 Merge remote-tracking branch 'origin/main' into fix-image-editor 2025-08-12 08:53:30 +05:30
Neeraj
a945753629 [auth] Remove hex from some multi-color icons (#6820)
This PR removes the hex value from some multi-color icons that were
added in #6694. Removing the hex will fix broken icons like this:
<img width="270" height="284" alt="image"
src="https://github.com/user-attachments/assets/8603ce89-b47d-4b4b-a809-5d67b7b30c6a"
/>
<img width="229" height="262" alt="image"
src="https://github.com/user-attachments/assets/c38a8bce-57c5-4607-ac7b-47c677ea3871"
/>
<img width="334" height="293" alt="image"
src="https://github.com/user-attachments/assets/fe1f95e5-66b6-49ce-9458-5fe17c98e0fa"
/>
<img width="302" height="269" alt="image"
src="https://github.com/user-attachments/assets/4c7f59d8-534a-47e2-95bc-b6f70a1f2921"
/>
2025-08-12 08:52:59 +05:30
Sven
22c60fb83e Remove hex from multi-color icons 2025-08-11 19:12:32 +02:00
Aman Raj Singh Mourya
740ba4a9bf [auth] Add allegro icon (#6814)
## Description
Added 1 new custom SVG icon:

- **allegro.svg**

-## Tests
2025-08-11 18:29:47 +05:30
Aman Raj Singh Mourya
229bfdc7ec Fix formatting 2025-08-11 18:28:20 +05:30
Neeraj
93b1af6ec0 [mob] FIx change log parsing (#6817)
## Description

## Tests
2025-08-11 17:37:01 +05:30
laurenspriem
dbf6f6aa37 Proper rust init in MLComputer isolate 2025-08-11 17:24:36 +05:30
Neeraj Gupta
e8dde48688 Update workflow 2025-08-11 17:13:24 +05:30
Neeraj
d9145353b2 [mob] Modify daily build workflow (#6816)
## Description

## Tests
2025-08-11 17:04:39 +05:30
Neeraj Gupta
49c966f50c [mob] Modify daily build workflow 2025-08-11 17:03:58 +05:30
Neeraj
0ad83a3924 [mob] Add daily release workflow for photos (#6815)
## Description

## Tests
2025-08-11 16:33:02 +05:30
Neeraj Gupta
187a60ec3a Add daily release workflow for photos 2025-08-11 16:32:01 +05:30
Kremiorspokke
cabae4cca0 Update custom-icons.json 2025-08-11 12:32:39 +02:00
Kremiorspokke
cdfb9a7d0e Merge pull request #1 from Kremiorspokke/Kremiorspokke-patch-1
Add 1 new icon
2025-08-11 12:30:55 +02:00
Kremiorspokke
4860236f66 Add 1 new icon
Add polish e-commerce platfrom icon allegro
2025-08-11 12:22:41 +02:00
laurenspriem
ad90d2e37a Fix delete group bug 2025-08-11 15:43:30 +05:30
AmanRajSinghMourya
903762f283 fix: set initial color for painting editor 2025-08-11 15:34:02 +05:30
laurenspriem
6223a1529f bulk vector search in MLComputer isolate 2025-08-11 14:11:00 +05:30
Neeraj
143d758b5b [auth] Fix "Copied to Clipboard" text behind clipboard (#6791)
## Description
This fixes https://github.com/ente-io/ente/issues/324
2025-08-11 13:39:08 +05:30
AmanRajSinghMourya
1d25f23053 fix: update haptic feedback when reached zero 2025-08-11 12:56:59 +05:30
Neeraj
67d661eeb6 [auth] New translations (#6809)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2025-08-11 12:25:08 +05:30
Neeraj Gupta
fe86363b1f Bump version 2025-08-11 12:22:38 +05:30
Neeraj Gupta
15967713a0 Merge branch 'flutter-upgrade' of https://github.com/ente-io/auth into flutter-upgrade 2025-08-11 12:22:21 +05:30
Neeraj Gupta
2dafd62e14 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-08-11 12:22:00 +05:30
Neeraj
46865eff26 [mob] Gracefully handle decompress image exception (#6811)
## Description
On Android 16 with flutter upgrade, we are seeing `Could not decompress
image.` error for heic images taken from Iphone 16.
Instead of showing broken image, rendering the compressed version of the
image on UI.

Also, increased the minWidth/minWidth from default 1920/1080 to 8000/800

Refer:
https://pub.dev/packages/flutter_image_compress#minwidth-and-minheight
> If your image width is smaller than minWidth or height smaller than
minHeight, scale will be 1, that is, the size will not change.

```
E/FlutterJNI( 7914): Failed to decode image
E/FlutterJNI( 7914): java.io.IOException: getPixels failed with error invalid input
E/FlutterJNI( 7914):     at android.graphics.ImageDecoder.nDecodeBitmap(Native Method)
E/FlutterJNI( 7914):     at android.graphics.ImageDecoder.decodeBitmapInternal(ImageDecoder.java:1676)
E/FlutterJNI( 7914):     at android.graphics.ImageDecoder.decodeBitmapImpl(ImageDecoder.java:1865)
E/FlutterJNI( 7914):     at android.graphics.ImageDecoder.decodeBitmap(ImageDecoder.java:1850)
E/FlutterJNI( 7914):     at io.flutter.embedding.engine.FlutterJNI.decodeImage(FlutterJNI.java:571)
```

## Tests

Tested locally on Simulator with sample image.
2025-08-11 11:56:07 +05:30
Neeraj Gupta
36d45c7774 Change min Width/Height value during compress 2025-08-11 11:32:34 +05:30
Neeraj Gupta
fc0b86ffe6 Gracefully handle image decompress error 2025-08-11 11:32:07 +05:30
laurenspriem
1c75259e8f Merge branch 'isolate_issue' into flutter-upgrade 2025-08-11 11:28:53 +05:30
laurenspriem
67e493b27f use different deprecated method replacement 2025-08-11 11:00:17 +05:30
AmanRajSinghMourya
a74908214d Update password entry page to use a fixed color for valid field value 2025-08-11 10:38:44 +05:30
Crowdin Bot
6ac19de2af New Crowdin translations by GitHub Action 2025-08-11 01:18:24 +00:00
Crowdin Bot
a4e8a70c31 New Crowdin translations by GitHub Action 2025-08-11 01:05:16 +00:00
Crowdin Bot
4875ddf30c New Crowdin translations by GitHub Action 2025-08-11 00:44:23 +00:00
AmanRajSinghMourya
72f9d9e756 refactor: fix bottom navigation bar colors 2025-08-09 23:34:15 +05:30
AmanRajSinghMourya
e32698e4be update editor background color across image and video editor components 2025-08-09 23:33:36 +05:30
AmanRajSinghMourya
0b73388b0b fix search view background color 2025-08-09 11:35:00 +05:30
Neeraj
8fa63ba9fb [server] Fix typo in file link grouping (#6798) 2025-08-09 10:42:19 +05:30
Neeraj
15175a261a [mobile/photos] New translations (#6743)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2025-08-09 09:01:50 +05:30
Neeraj Gupta
b0eb362037 Fix typo in file link grouping 2025-08-09 06:19:54 +05:30
AmanRajSinghMourya
6bd5327d50 refactor: show black color as default background color in hideAppContent 2025-08-08 20:00:14 +05:30
Aman Raj Singh Mourya
8c2cb6dcad [auth] add AvistaZ network icons (#6789)
## Description
Add custom icons for AvistaZ.to network (Private Torrent tracker).
Including:
- [AvistaZ](https://avistaz.to/)
- [AnimeZ](https://animez.to/)
- [CinemaZ](https://cinemaz.to/)
- [ExoticaZ](https://exoticaz.to/)
- [PrivateHD](https://privatehd.to/)
## Tests
2025-08-08 17:33:28 +05:30
Aman Raj Singh Mourya
692f77c9bc [auth] add icon for capcom (#6790)
- added an icon for capcom
- added a json entry for capcom
2025-08-08 17:32:25 +05:30
Neeraj Gupta
7996ab4a3e Minor fixes 2025-08-08 16:36:50 +05:30
eYdr1en
d4bfbbf04c fix comments 2025-08-08 12:40:51 +02:00
eYdr1en
92a03ce585 [auth] fix Copied to Clipboard text behind clipboard 2025-08-08 12:37:15 +02:00
Neeraj Gupta
1c37332f37 Endpoint to check domain claim 2025-08-08 15:40:05 +05:30
Neeraj Gupta
23103c3bcc Handle claimed domain error 2025-08-08 15:31:14 +05:30
Neeraj Gupta
920702c5dd Add validation 2025-08-08 15:31:02 +05:30
Neeraj Gupta
3167d85f06 Add index for customDomain 2025-08-08 15:25:04 +05:30
Brook
dd2a5d6191 [auth] add icon for capcom 2025-08-08 11:37:06 +03:00
Neeraj Gupta
bc1ae62477 Ability to configure cname 2025-08-08 14:06:26 +05:30
Neeraj Gupta
1af834aa7a Remove unused field 2025-08-08 14:02:36 +05:30
Hieu Pham
e66045dc74 [auth] add AvistaZ network icons
Add custom icons for AvistaZ.to network (Private Torrent tracker)
2025-08-08 15:08:08 +07:00
Prateek Sunal
69f6fdc9c7 Merge branch 'main' into flutter-upgrade 2025-08-08 13:25:52 +05:30
Prateek Sunal
1327a1f8cf chore: bump version 2025-08-08 13:24:50 +05:30
Prateek Sunal
52d2577236 chore: bump version 2025-08-08 13:23:19 +05:30
Neeraj Gupta
f2dc157e8a Support for customDomain flag 2025-08-08 13:10:57 +05:30
AmanRajSinghMourya
94e398dc89 Bump version 4.4.6+446 2025-08-08 12:40:30 +05:30
AmanRajSinghMourya
a5a19581fc Revert "Bump version to 4.4.6+445"
This reverts commit ea409fc266.
2025-08-08 12:39:12 +05:30
AmanRajSinghMourya
ea409fc266 Bump version to 4.4.6+445 2025-08-08 12:16:47 +05:30
Aman Raj Singh Mourya
0e9d7106f7 [mobile] Fix packages to support Auth theme (#6788) 2025-08-08 12:14:08 +05:30
AmanRajSinghMourya
6fe89fdc0e Add theme configuration and update color scheme in recovery key and lock screen pages 2025-08-08 12:05:08 +05:30
Neeraj
d9e860466c [auth] Auto hide dock icon macos (#6772)
## Description
After closing app or hidding the window on macos the dock icon still
appears even when the app is in tray which shouldn't happen this fixes
it
2025-08-07 20:54:30 +05:30
AmanRajSinghMourya
193e1374e1 Refactor GradientButton to use ClipRRect 2025-08-07 20:01:12 +05:30
AmanRajSinghMourya
e11a6ace80 Refactor theme usage in dynamic FAB and dialog widget; improve imports and color scheme references 2025-08-07 19:40:39 +05:30
AmanRajSinghMourya
9033bd8cec Fix formatting in custom-icons.json 2025-08-07 19:40:07 +05:30
AmanRajSinghMourya
085551b5a7 Add ente_strings package and update localization delegates 2025-08-07 19:39:58 +05:30
Manav Rathi
1633c478e3 [photos] [web] Handle XMP files interspersed with live photos (#6778) 2025-08-07 15:55:09 +05:30
Manav Rathi
5eb7cadc4d Fix multi-file scenarios 2025-08-07 15:49:50 +05:30
Manav Rathi
af5de77880 [photos] [web] Handle XMP files interspersed with live photos 2025-08-07 15:30:32 +05:30
Neeraj
58279b668b [mob][photos] Reduce logs on startup (#6775)
## Description

## Tests
2025-08-07 14:08:28 +05:30
Ashil
7537614fc2 [mob][photos] More gallery scroll improvements (#6776) 2025-08-07 14:00:10 +05:30
Ashil
0db2385dbd Merge branch 'main' into gallery_scroll_improvement 2025-08-07 13:59:59 +05:30
Neeraj
fbb5397217 [auth] Add monochrome icon style for macos tray (#6771)
## Description
This fixes this issue https://github.com/ente-io/ente/issues/5173
2025-08-07 13:34:38 +05:30
laurenspriem
cf81d58604 Prettify 2025-08-07 13:13:58 +05:30
laurenspriem
2560e5934f Delete method 2025-08-07 13:07:16 +05:30
Aman Raj Singh Mourya
7942c4d642 Added logos for meesman.nl, isc2.org, scouting.nl, zivver.com (#6770)
Fixed linting error in custom_icons.json (line 1733, superfluous comma)
and added the aforementioned logos.
2025-08-07 12:15:17 +05:30
Aman Raj Singh Mourya
625410852b [auth] add icon for Dresden University of Technology (#6774)
## Description

Add custom SVG icon for Dresden University of Technology.

Icon optimized with SVGOMG.
2025-08-07 12:10:54 +05:30
Neeraj Gupta
970ca59077 Clean up localSettings log 2025-08-07 11:13:18 +05:30
laurenspriem
2a407b5928 track fileIDs, not size for similar files group 2025-08-07 11:12:47 +05:30
Neeraj Gupta
3ee021c9de Reduce heartbeat logs 2025-08-07 11:08:58 +05:30
laurenspriem
019141ef3b animation 2025-08-07 10:34:53 +05:30
laurenspriem
44e9103942 bottom buttons 2025-08-07 10:29:14 +05:30
Muhammad Talal Anwar
83395641ef chore: add TU Dresden icon 2025-08-07 04:49:40 +00:00
Ashil
8cbdd4cc98 Gallery perf tweaks (#6754) 2025-08-07 10:00:10 +05:30
laurenspriem
a9e31aec8f Show more accurate size 2025-08-06 22:21:30 +05:30
laurenspriem
901e1a73dc auto select files 2025-08-06 22:13:59 +05:30
Prateek Sunal
6c614f2649 fix: re-add pro_image_editor 2025-08-06 22:11:39 +05:30
laurenspriem
184ea915fc Make files selectable 2025-08-06 21:51:05 +05:30
laurenspriem
d58f96fb60 Change default sort to shortest distance 2025-08-06 21:30:08 +05:30
eYdr1en
df5a7d6c19 auto hide dock icon macos 2025-08-06 15:24:57 +02:00
eYdr1en
95347022e8 add isTemplate for correct macos look on wallpaper 2025-08-06 15:20:44 +02:00
eYdr1en
4f224e7eba add monochrome icon style for macos tray 2025-08-06 15:10:42 +02:00
Prateek Sunal
fc593e86ee chore: update locks 2025-08-06 17:38:15 +05:30
Prateek Sunal
5c489f3358 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-08-06 17:37:16 +05:30
Prateek Sunal
899993a23b chore: bump everywhere 2025-08-06 17:07:07 +05:30
Prateek Sunal
6dd23fa5ff chore: bump things 2025-08-06 17:05:54 +05:30
AmanRajSinghMourya
210a0a45c1 Bump version to 4.4.5+445 2025-08-06 16:44:08 +05:30
AmanRajSinghMourya
ee035681ab Bump version to 4.4.3+444 2025-08-06 15:40:14 +05:30
laurenspriem
98598053c7 Proper text scheme 2025-08-06 15:04:48 +05:30
Ashil
1c2f8a74c4 Merge branch 'main' into gallery_perf_tweks 2025-08-06 14:46:33 +05:30
AmanRajSinghMourya
cc2d65d796 Fix string 2025-08-06 14:35:25 +05:30
AmanRajSinghMourya
0e61b3dfd4 Minor changes in packages's pubspec to match dependencies 2025-08-06 14:35:03 +05:30
AmanRajSinghMourya
0a3035e5d5 Update Android build configuration: enable core library desugaring, increase minSdkVersion to 22, and upgrade Gradle version to 8.4. Add ProGuard rules to suppress warnings. 2025-08-06 14:33:19 +05:30
laurenspriem
8046c6837c Better spacing 2025-08-06 14:07:09 +05:30
laurenspriem
30641a2df6 Empty delete button 2025-08-06 14:01:49 +05:30
laurenspriem
c82cd54b7b Figma design 2025-08-06 12:52:03 +05:30
AmanRajSinghMourya
7adb1c0a6c Minor fix 2025-08-06 12:07:21 +05:30
AmanRajSinghMourya
cb55be1e5c Fix android build 2025-08-06 11:38:10 +05:30
AmanRajSinghMourya
d7a7144b33 Fix android build 2025-08-06 11:38:04 +05:30
AmanRajSinghMourya
e6a867a859 Cleanup 2025-08-06 11:37:04 +05:30
AmanRajSinghMourya
a9c8e4476f Remove old password reentry, recovery key, recovery, and password verification pages; refactor imports and update references in settings and home page. 2025-08-06 11:36:51 +05:30
AmanRajSinghMourya
f914263b2f Remove old password reentry, recovery key, recovery, and password verification pages; refactor imports and update references in settings and home page. 2025-08-06 11:36:46 +05:30
AmanRajSinghMourya
6f94d91afb More code refractor in auth/accounts section 2025-08-06 11:36:26 +05:30
AmanRajSinghMourya
57569e79fe Add ente_ui dependency to pubspec.yaml and update its lock status in pubspec.lock 2025-08-06 11:35:49 +05:30
AmanRajSinghMourya
b695db80ab Refactor HomePage to extend BaseHomePage for improved structure 2025-08-06 11:35:32 +05:30
AmanRajSinghMourya
ae1a43b8bf Refractor accounts section to use common code from packages/accounts 2025-08-06 11:35:13 +05:30
AmanRajSinghMourya
d9d9acfa3e Refractor accounts section to use common code from packages/accounts 2025-08-06 11:35:06 +05:30
AmanRajSinghMourya
d430936ae8 Refractor accounts section to use common code from packages/accounts 2025-08-06 11:34:44 +05:30
AmanRajSinghMourya
b02acc579f Update ente_accounts dependency 2025-08-06 11:33:58 +05:30
AmanRajSinghMourya
e87be4b9af Update flutter_inappwebview dependencies 2025-08-06 11:33:36 +05:30
AmanRajSinghMourya
399148aa59 Introduced lock screen package from packages/lockscreen 2025-08-06 11:33:23 +05:30
AmanRajSinghMourya
abd733934b Introduced lock screen package from packages/lockscreen 2025-08-06 11:33:13 +05:30
vishnukvmd
661e1f92d5 Add developer settings page 2025-08-06 11:31:56 +05:30
vishnukvmd
97b36681dc Consistency 2025-08-06 11:31:23 +05:30
vishnukvmd
5dd5756a41 Lint utils 2025-08-06 11:29:02 +05:30
vishnukvmd
d2cfa374bd Lint utils 2025-08-06 11:28:54 +05:30
vishnukvmd
fb64c8aa4c Lint ui 2025-08-06 11:28:43 +05:30
vishnukvmd
86b54e2241 Lint strings 2025-08-06 11:28:27 +05:30
vishnukvmd
c33396ea60 Lint network 2025-08-06 11:28:11 +05:30
vishnukvmd
24f48b5054 Lint logging 2025-08-06 11:27:56 +05:30
vishnukvmd
094c92c8b6 Lint lock_screen 2025-08-06 11:27:41 +05:30
vishnukvmd
c2922a0cb2 Lint lock_screen 2025-08-06 11:27:36 +05:30
vishnukvmd
9a357a716d Lint events 2025-08-06 11:27:21 +05:30
vishnukvmd
5574fd748e Lint configuration 2025-08-06 11:27:06 +05:30
vishnukvmd
f2be25667f Lint base 2025-08-06 11:26:48 +05:30
vishnukvmd
053d0cfcaa Fix minor lint 2025-08-06 11:26:27 +05:30
vishnukvmd
0ff8184f47 Lint accounts 2025-08-06 11:26:11 +05:30
vishnukvmd
f971835ae7 Remove noise 2025-08-06 11:25:56 +05:30
vishnukvmd
694e3ca121 Remove changelog 2025-08-06 11:25:42 +05:30
vishnukvmd
be850c27c6 Fix dependency 2025-08-06 11:25:08 +05:30
vishnukvmd
3aaf11ba1d Setup common accounts package 2025-08-06 11:24:46 +05:30
vishnukvmd
3019d858c9 Setup common accounts package 2025-08-06 11:24:35 +05:30
vishnukvmd
81e926ef2d Setup common accounts package 2025-08-06 11:17:59 +05:30
vishnukvmd
016d646971 Update common ui 2025-08-06 11:14:26 +05:30
vishnukvmd
1f100566ad Update common lockscreen 2025-08-06 11:13:56 +05:30
vishnukvmd
d69595e744 Setup common lockscreen 2025-08-06 11:13:25 +05:30
vishnukvmd
7a91e714fe Setup common lockscreen 2025-08-06 11:13:13 +05:30
vishnukvmd
e352de8b9c Update strings 2025-08-06 11:11:18 +05:30
vishnukvmd
e36831b599 Update strings 2025-08-06 11:11:09 +05:30
vishnukvmd
df74c7d54d Update strings 2025-08-06 11:10:50 +05:30
Manav Rathi
ffdc21d15c [rust] Make CI fail on warnings (#6763)
https://doc.rust-lang.org/stable/clippy/continuous_integration/github_actions.html
2025-08-06 10:55:37 +05:30
vishnukvmd
d7986b5c7c Update utils 2025-08-05 23:58:46 +05:30
vishnukvmd
3e888876d1 Update utils 2025-08-05 23:58:41 +05:30
vishnukvmd
6af494206e Add developer settings page 2025-08-05 23:57:41 +05:30
vishnukvmd
93f32de8c1 Update strings 2025-08-05 23:57:27 +05:30
vishnukvmd
e0b3e6464e Update strings 2025-08-05 23:57:20 +05:30
vishnukvmd
c67d2f0836 Consistency 2025-08-05 23:56:50 +05:30
vishnukvmd
49106a3dd9 Pull existing translations 2025-08-05 23:56:39 +05:30
vishnukvmd
b61c75dc84 Lint utils 2025-08-05 23:56:28 +05:30
vishnukvmd
465fc7c7d3 Lint ui 2025-08-05 23:56:13 +05:30
vishnukvmd
487e4ef559 Lint strings 2025-08-05 23:56:03 +05:30
vishnukvmd
34bf4f6bba Lint network 2025-08-05 23:55:51 +05:30
vishnukvmd
af36978ede Lint logging 2025-08-05 23:55:41 +05:30
vishnukvmd
a375dfdc2e Lint lock_screen 2025-08-05 23:55:28 +05:30
vishnukvmd
a5b0e66e9d Lint lock_screen 2025-08-05 23:55:23 +05:30
vishnukvmd
2b3b7a5e2a Lint events 2025-08-05 23:54:44 +05:30
vishnukvmd
b1dc9272a0 Lint configuration 2025-08-05 23:54:30 +05:30
vishnukvmd
7c33c160b2 Lint base 2025-08-05 23:54:15 +05:30
vishnukvmd
be232efbc6 Fix minor lint 2025-08-05 23:53:59 +05:30
vishnukvmd
bbac09b4a6 Lint accounts 2025-08-05 23:53:41 +05:30
vishnukvmd
a4626ae7a1 Remove noise 2025-08-05 23:53:27 +05:30
vishnukvmd
e8551df8b9 Remove changelog 2025-08-05 23:53:10 +05:30
vishnukvmd
77cb40aef4 Update strings 2025-08-05 23:52:50 +05:30
vishnukvmd
827090fb24 Fix dependency 2025-08-05 23:52:31 +05:30
vishnukvmd
39b9670fcc Setup common accounts package 2025-08-05 23:52:11 +05:30
vishnukvmd
d227a2bf20 Setup common accounts package 2025-08-05 23:52:03 +05:30
vishnukvmd
0b766415a4 Setup common accounts package 2025-08-05 23:51:32 +05:30
vishnukvmd
3b727549d5 Update common ui 2025-08-05 23:49:03 +05:30
vishnukvmd
dbdf19ee8d Update common lockscreen 2025-08-05 23:48:45 +05:30
vishnukvmd
2e3d621077 Update strings 2025-08-05 23:44:26 +05:30
vishnukvmd
0455481f3d Lint lock_screen 2025-08-05 23:38:42 +05:30
vishnukvmd
c9a7918397 Lint events 2025-08-05 23:38:42 +05:30
vishnukvmd
957f0bc041 Lint configuration 2025-08-05 23:38:42 +05:30
vishnukvmd
24f5a5813a Lint base 2025-08-05 23:38:42 +05:30
vishnukvmd
860b2895f6 Fix minor lint 2025-08-05 23:38:42 +05:30
vishnukvmd
a510320d0e Lint accounts 2025-08-05 23:38:42 +05:30
vishnukvmd
de04f18cb2 Remove noise 2025-08-05 23:38:42 +05:30
vishnukvmd
b84b73fda2 Remove changelog 2025-08-05 23:38:42 +05:30
vishnukvmd
12b0618149 Update strings 2025-08-05 23:38:42 +05:30
vishnukvmd
28a43393f9 Fix dependency 2025-08-05 23:38:42 +05:30
vishnukvmd
21b3bdf204 Setup common accounts package 2025-08-05 23:38:42 +05:30
vishnukvmd
3436fb7fb1 Update common ui 2025-08-05 23:38:42 +05:30
vishnukvmd
045b40b2b2 Update common lockscreen 2025-08-05 23:38:42 +05:30
vishnukvmd
c09922d1a3 Update strings 2025-08-05 23:38:42 +05:30
vishnukvmd
3e9032588e Setup common lockscreen 2025-08-05 23:34:58 +05:30
vishnukvmd
14e570b676 Update strings 2025-08-05 23:34:49 +05:30
vishnukvmd
a412aa4886 Update strings 2025-08-05 23:34:44 +05:30
vishnukvmd
a7a162d375 Update utils 2025-08-05 23:34:38 +05:30
vishnukvmd
b444bdc5ec Add re-usable base home page 2025-08-05 23:34:33 +05:30
vishnukvmd
f9299e7950 Reduce noise 2025-08-05 23:34:27 +05:30
vishnukvmd
8a9f73ada5 Refactor utils 2025-08-05 23:34:10 +05:30
vishnukvmd
d5c1970ca2 Update common ui 2025-08-05 23:34:01 +05:30
vishnukvmd
f8aff3e12b Update common strings 2025-08-05 23:33:52 +05:30
vishnukvmd
490759243b Setup common UI components 2025-08-05 23:33:46 +05:30
vishnukvmd
e8a9e509a8 Update common strings 2025-08-05 23:33:39 +05:30
vishnukvmd
c392ad5dcb Update utils 2025-08-05 23:33:23 +05:30
vishnukvmd
9bb084d610 Add typedefs to base 2025-08-05 23:33:13 +05:30
vishnukvmd
00b05e2d7c Update common utils 2025-08-05 23:33:00 +05:30
vishnukvmd
93736fe57a Update common strings 2025-08-05 23:32:46 +05:30
vishnukvmd
995ae50418 Refactor common utils 2025-08-05 23:32:24 +05:30
vishnukvmd
42e6dff0f5 Remove redundant test 2025-08-05 23:32:17 +05:30
vishnukvmd
150513d3e5 Refactor common strings 2025-08-05 23:32:04 +05:30
vishnukvmd
13ed1e76bc Use common network package 2025-08-05 23:31:55 +05:30
vishnukvmd
a7d0e2eef5 Refactor network 2025-08-05 23:31:36 +05:30
vishnukvmd
134314c285 Common config 2025-08-05 23:30:56 +05:30
vishnukvmd
eb3e3db8e6 Base config 2025-08-05 23:30:33 +05:30
vishnukvmd
3b9b886ae9 Refactor 2025-08-05 23:30:20 +05:30
vishnukvmd
d88df36c3d Packages 2025-08-05 23:30:06 +05:30
vishnukvmd
62d7311780 ignore surprises 2025-08-05 23:29:42 +05:30
vishnukvmd
9d76ccc173 init config 2025-08-05 23:27:17 +05:30
peterv99
abe5548202 Added logos for meesman.nl, isc2.org, scouting.nl, zivver.com
Fixed linting error in custom_icons.json (line 1733, superfluous comma) and added the aforementioned logos.
2025-08-05 19:52:36 +02:00
ashilkn
1648f62da6 Add repaint boundary over each gird item in gallery 2025-08-05 16:49:48 +05:30
Manav Rathi
97d66a3afa [rust] Make CI fail on warnings
https://doc.rust-lang.org/stable/clippy/continuous_integration/github_actions.html
2025-08-05 14:39:01 +05:30
laurenspriem
e8f7f9ad62 Grid of three 2025-08-05 13:31:33 +05:30
Aman Raj Singh Mourya
99556dbbcd [auth] Fixed CONTRIBUTING.md broken link and added new icons (#6749)
## Description

Fixed the broken link to custom-icons.md in CONTRIBUTING.md.

Also added new icons for Twitter (before rebrand), Animal Crossing, Best
Buy, Chucklefish, Toyhouse, and Art Fight.

I realized right after uploading a Best Buy icon that the Best Buy icon
already exists in the custom icon repositories. It doesn't show up when
I search for it in the Ente app (iOS), though, and I checked and there
are no updates for my app. I guess it wasn't pushed to the mobile app
yet?

My icon is called `best_buy.svg`. The one that was already there is
`bestbuy.svg`. Should I remove mine?

Thanks in advance!
2025-08-05 12:10:12 +05:30
laurenspriem
a3330705b3 Fix deprecated method 2025-08-05 12:05:00 +05:30
laurenspriem
d8b40c1a55 Exact search off by default 2025-08-05 11:59:22 +05:30
laurenspriem
b5113dd420 Add option for exact search of similar files 2025-08-05 11:52:03 +05:30
Neeraj
d7fdca78f7 Update pubspec.yaml 2025-08-05 10:20:49 +05:30
Neeraj
f7858a96ed [mob][photos] Log info about lock (#6745)
## Description

## Tests
2025-08-05 10:18:23 +05:30
NylaTheWolf
047c2954f8 Actually fix broken link in CONTRIBUTING.md
It's easier to just put everything in one pull request.

The link to the adding-icons.md file was broken, so I fixed it.
2025-08-04 17:25:11 -04:00
NylaTheWolf
11786057e2 Moving broken link fix to another pull request 2025-08-04 17:10:34 -04:00
NylaTheWolf
12648ce726 Update custom-icons.json 2025-08-04 17:00:23 -04:00
NylaTheWolf
782618d26f Merge pull request #1 from NylaTheWolf/patch-1
Fix broken link to adding-icons.md in CONTRIBUTING.md
2025-08-04 16:34:50 -04:00
NylaTheWolf
824b071af4 Added more icons
Icons for Twitter (before rebrand), Art Fight, Toyhouse, Animal Crossing, Best Buy, and Chucklefish.
I wasn't able to find an official SVG of Toyhouse's icon or get it through inspect element, but I got it from here: https://logos.fandom.com/wiki/Toyhouse

Animal Crossing Leaf: Nintendo, Public domain, via Wikimedia Commons

Original Twitter logo: Martin Grasser, per source, Apache License 2.0 <http://www.apache.org/licenses/LICENSE-2.0>, via Wikimedia Commons

Best Buy: Best Buy, Public domain, via Wikimedia Commons

Chucklefish: https://en.wikipedia.org/wiki/File:Chucklefish.svg (Warns that this is not a free logo)
2025-08-04 16:28:45 -04:00
NylaTheWolf
f1f84af3a7 Add Smogon to custom-icons.json 2025-08-04 15:40:27 -04:00
NylaTheWolf
8d484528e7 Delete mobile/apps/auth/assets/custom-icons/icons/Smogon.svg 2025-08-04 15:32:50 -04:00
NylaTheWolf
e95aa55339 Added Smogon icon (filename fixed)
The previous file name was "Smogon.svg." This time it's all lowercase.
2025-08-04 15:32:06 -04:00
NylaTheWolf
0d139df652 Added Smogon icon 2025-08-04 15:30:14 -04:00
NylaTheWolf
568c5393a8 Fix broken link to adding-icons.md in CONTRIBUTING.md
The link to the adding-icons.md file was broken, so I fixed it.
2025-08-04 15:25:36 -04:00
Neeraj
8d8ce6487f [Server] Single file link (#6566)
## Description
Adds 4 authenticate API for
- Creating link for individual file
- Update Link
- Delete Link
- Fetch all links (based on header, the server will return particular
app's link)

For link preview
- API to get Info (pending discussion)
- API to get file attributes (pending discussion)
- APIs to get thumbnail and file
- API to verify password


Pending
- [x] Clean up on account deletion
- [x] Clean up on file deletion
- [x] Clean up history for disabled links

## Tests

Basic santiy check during client integration
2025-08-04 14:41:50 +05:30
laurenspriem
a41b7f5535 null check error 2025-08-04 14:24:36 +05:30
laurenspriem
8304bca71c empty list error 2025-08-04 14:19:04 +05:30
Neeraj Gupta
658ba49186 [mob][photos] Log info about lock 2025-08-04 12:42:27 +05:30
Crowdin Bot
fa230333a4 New Crowdin translations by GitHub Action 2025-08-04 01:06:03 +00:00
Aman Raj Singh Mourya
75bc07f08f updated ubiquiti auth custom icon (#6728)
## Description
Updated Ubiquiti icon to new design, fix #6726
2025-08-03 00:37:40 +05:30
Rafael Ieda
b7ff0ca985 updated ubiquiti auth custom icon 2025-08-02 10:27:27 -03:00
Manav Rathi
a9cba0c7a6 [mob] Update broken relative links (#6722)
## Description
Update broken links in photos from the `Move auth/ to mobile/apps/auth`
in 99d7685be2

Updated the auth's contributing link to be consistent with the photos

## Tests
🔗
2025-08-02 11:30:43 +05:30
ian
a4b938b5d5 Update README.md 2025-08-02 00:07:37 +08:00
ian
0174d82829 Update README.md 2025-08-02 00:02:32 +08:00
laurenspriem
6dfcc58144 Add exact search to vectorDB 2025-08-01 16:55:02 +02:00
laurenspriem
9528b4ce8d Fix showing the same file twice 2025-08-01 16:21:43 +02:00
laurenspriem
73928092c4 Sort distance descending 2025-08-01 13:03:13 +02:00
laurenspriem
79d3c7f9a2 Merge conflict left 2025-08-01 12:40:15 +02:00
laurenspriem
108d9f84fc Merge branch 'main' into smart_dedupe 2025-08-01 12:39:54 +02:00
laurenspriem
0854fc3493 Merge branch 'main' into memories_misc_improv 2025-08-01 12:01:30 +02:00
Ashil
101458e5cd [mobile] Extract strings + Cleanup Image editor (#6716)
## Description
Removed old image editor package and related file
Extracted strings for image editor
## Tests
2025-08-01 12:37:34 +05:30
AmanRajSinghMourya
6fbea6232e Merge branch 'main' into extract_strings 2025-08-01 12:25:11 +05:30
AmanRajSinghMourya
ecf236ad54 Add localization strings for editing tools and remove filtered_image.dart 2025-08-01 12:21:08 +05:30
AmanRajSinghMourya
3c8d8067c1 Remove image_editor dependency from pubspec.yaml and pubspec.lock 2025-08-01 12:19:46 +05:30
AmanRajSinghMourya
7cd95e6369 Minor refractor 2025-08-01 12:19:14 +05:30
AmanRajSinghMourya
1487362366 Remove old image editor 2025-08-01 12:18:56 +05:30
Neeraj
54911cce15 [mob][photos] Upgrade media_kit (#6715)
## Description
```
flutter pub upgrade media_kit media_kit_libs_ios_video media_kit_libs_video media_kit_video
```
## Tests
```
flutter run
```
2025-08-01 10:46:34 +05:30
Neeraj Gupta
5a9684f251 [mob][photos] Upgrade motionphoto (iOS) pkg 2025-08-01 10:43:00 +05:30
Ashil
0f6ae20402 [mob][photos] Keep fullscreen between swipes (#6706)
## Description

Fixes #6667
2025-08-01 10:37:43 +05:30
Neeraj Gupta
2fe3c61621 [mob][photos] Upgrade media_kit 2025-08-01 10:34:53 +05:30
Ashil
e5afa0f88f [mob][photos] Bump up build number (#6711) 2025-08-01 09:28:19 +05:30
ashilkn
783d70a8f1 bump up build number 2025-07-31 22:38:04 +05:30
laurenspriem
86967175f7 Better values 2025-07-31 16:58:26 +02:00
laurenspriem
a6b29525d2 Better frequency for people type 2025-07-31 16:51:49 +02:00
laurenspriem
d6c3cf3b8f Better frequency for people memories 2025-07-31 15:40:04 +02:00
ashilkn
557563e1b7 Keep InheritedDetailPageState and DetailPage's body in different widgets to avoid InheritedDetailPageState from getting reinitialized and losing it's state when body of DetailPage rebuilds 2025-07-31 15:48:50 +05:30
AmanRajSinghMourya
8da1f638e1 extract string + code refractor 2025-07-31 15:15:51 +05:30
laurenspriem
ec502f3f4e Copy 2025-07-31 08:27:11 +02:00
laurenspriem
a7a23e9e97 UI improvements 2025-07-30 16:05:27 +02:00
laurenspriem
492b959204 Lower default 2025-07-30 15:47:32 +02:00
laurenspriem
dde67479be Logging 2025-07-28 16:59:09 +02:00
laurenspriem
a6c163a705 Exclude videos from similar dedupe 2025-07-28 16:39:05 +02:00
laurenspriem
159dd57f0c Fix migration issue 2025-07-28 14:43:48 +02:00
laurenspriem
0cff1642c5 Similar files page mvp 2025-07-28 14:21:38 +02:00
laurenspriem
ee55002bf1 Similar files change 2025-07-28 11:05:31 +02:00
laurenspriem
05b4350496 Similar images service mvp 2025-07-28 10:41:36 +02:00
laurenspriem
b68150a007 Bulk search first API 2025-07-27 17:38:15 +02:00
Neeraj Gupta
fcc90c6725 Bump version 2025-07-25 15:05:16 +05:30
Neeraj Gupta
7037d67a45 Merge branch 'main' into single_file_link 2025-07-25 14:58:49 +05:30
laurenspriem
f47cff472a pragma entry point fo rother isolates 2025-07-24 17:20:27 +02:00
laurenspriem
8cc6bd6621 Fix potential isolate issue 2025-07-24 16:28:41 +02:00
laurenspriem
ba76c85824 Faster migration 2025-07-24 13:44:59 +02:00
laurenspriem
5b291de28f Don't migrate or call VectorDB automatically 2025-07-24 13:19:53 +02:00
laurenspriem
5e84774737 Dependencies after merging main 2025-07-24 12:21:32 +02:00
laurenspriem
773419b25f Merge branch 'main' into smart_dedupe 2025-07-24 12:12:05 +02:00
laurenspriem
09668c2f67 Don't use vectorDB for magic search 2025-07-24 11:58:10 +02:00
laurenspriem
072e5b492b Dependencies for 3.27 2025-07-24 11:22:22 +02:00
laurenspriem
1d19d69db9 Resolve warnings 2025-07-24 10:51:45 +02:00
laurenspriem
a88b43dd11 Debug line 2025-07-24 10:49:13 +02:00
laurenspriem
a694bf9b6c flutter downgrade dependencies 2025-07-24 09:02:05 +02:00
Neeraj Gupta
04e3ad2b77 Fix query bug in delete 2025-07-23 23:15:26 +05:30
laurenspriem
bfcfa691a2 upgrade frb and run frb gen command 2025-07-23 17:55:07 +02:00
laurenspriem
2703c6a33a Bump to be up to date with internal branch 2025-07-23 17:39:19 +02:00
laurenspriem
3ad94f362a Resolve merge conflicts 2025-07-23 17:06:54 +02:00
laurenspriem
8508ca74f2 Merge branch 'main' into usearch_again 2025-07-23 15:05:06 +02:00
Neeraj Gupta
b64a69ebf0 Fix minor bugs 2025-07-23 17:33:28 +05:30
Neeraj Gupta
227ea4a371 Fix bugs 2025-07-23 17:07:01 +05:30
Prateek Sunal
78055a25d0 Merge branch 'flutter-upgrade' into isolated-ffmpeg 2025-07-23 14:40:14 +05:30
Prateek Sunal
b050f683c8 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-07-23 14:39:52 +05:30
Prateek Sunal
9141db8d47 Merge branch 'flutter-upgrade' into isolated-ffmpeg 2025-07-23 14:39:17 +05:30
Neeraj Gupta
6b5131ec45 Merge remote-tracking branch 'origin/main' into single_file_link 2025-07-23 14:12:47 +05:30
Neeraj Gupta
4e8fa3babd Merge branch 'main' into single_file_link 2025-07-23 14:12:32 +05:30
Neeraj Gupta
e443838621 Use diff statuscode when accessToken for password is missing 2025-07-21 16:51:23 +05:30
Neeraj Gupta
d9710555ea Add endpoint to get pass-info 2025-07-21 16:48:28 +05:30
Neeraj Gupta
6bed9bd8a2 Send file info 2025-07-21 16:44:22 +05:30
Neeraj Gupta
c57d467965 Disable all links on account deletion 2025-07-21 16:28:37 +05:30
Neeraj Gupta
e8e7f81593 Clean up old link history 2025-07-21 16:25:27 +05:30
Neeraj Gupta
8b6d7e049a Remove link when files are trashed 2025-07-21 11:22:36 +05:30
Prateek Sunal
4ff77067dc chore: update flutter version for auth build 2025-07-21 00:36:21 +05:30
Prateek Sunal
437b3d028a chore: update locks 2025-07-21 00:34:27 +05:30
Prateek Sunal
8afc4bb0cb fix: switch to old version lock 2025-07-21 00:23:24 +05:30
Prateek Sunal
ecd3ce850f chore: update lock file 2025-07-21 00:04:34 +05:30
Prateek Sunal
bc61727e8b Merge branch 'flutter-upgrade' into isolated-ffmpeg 2025-07-21 00:04:06 +05:30
Prateek Sunal
32f987e551 chore: downgrade to 3.29.3 2025-07-21 00:03:27 +05:30
Prateek Sunal
3596d0e42d fix: downgrade flutter upgrade to 3.29.3 2025-07-21 00:02:34 +05:30
Neeraj Gupta
e69276cf5f Rename 2025-07-18 16:00:15 +05:30
Neeraj Gupta
eb8737cb46 Add verify password endpoint 2025-07-18 15:58:40 +05:30
Neeraj Gupta
02b93b12fc Fix typo 2025-07-18 15:54:50 +05:30
Neeraj Gupta
2d0d914fd3 Hook APIs to get file or thumbnail from fileLink 2025-07-18 15:27:02 +05:30
Neeraj Gupta
dbb1ad66d3 Rename and minor fixes 2025-07-18 14:50:57 +05:30
Neeraj Gupta
3aa419b430 Add config for locker url 2025-07-18 13:23:55 +05:30
Neeraj Gupta
944bdfc7fa Rename 2025-07-18 13:09:12 +05:30
Neeraj Gupta
13420e4440 Endpoints for create,edit,delete and fetch links 2025-07-18 13:04:21 +05:30
Neeraj Gupta
51c00eefd4 Support for link password validation 2025-07-17 15:27:21 +05:30
Neeraj Gupta
8d108dc719 Rename 2025-07-17 14:39:20 +05:30
Neeraj Gupta
2e49f581c4 File link token middleware 2025-07-17 14:10:37 +05:30
Neeraj Gupta
c5d9b2408f Implement all repo method 2025-07-17 13:33:25 +05:30
Neeraj Gupta
46ba71a15a Fix queries 2025-07-16 17:12:33 +05:30
Neeraj Gupta
99f4d4ca4d Update schema 2025-07-16 10:56:12 +05:30
Neeraj Gupta
47f0722687 Merge branch 'main' into single_file_link 2025-07-15 13:01:29 +05:30
Prateek Sunal
99d84a1154 fix: remove log level 2025-07-14 14:43:00 +05:30
Prateek Sunal
126a96326f fix: don't use computer for ffmpeg isolate 2025-07-14 11:59:55 +05:30
Prateek Sunal
b7ead2004a fix: do isolate things without combine package 2025-07-14 11:39:25 +05:30
Prateek Sunal
87fad99863 Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-07-14 09:00:19 +05:30
Prateek Sunal
9f727bb95d feat: upgrade auth to flutter 3.32 2025-07-11 20:28:43 +05:30
Prateek Sunal
bd42a4d1f6 Merge branch 'flutter-upgrade' into isolated-ffmpeg 2025-07-11 16:10:32 +05:30
Prateek Sunal
22e0cd2168 chore: update locks 2025-07-11 16:09:53 +05:30
Prateek Sunal
0662baac73 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-07-11 16:09:12 +05:30
Prateek Sunal
ef3c561cf1 fix: no log output 2025-07-11 15:27:28 +05:30
Prateek Sunal
6f07399b5a Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-07-11 12:31:11 +05:30
Prateek Sunal
8524742c92 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-07-11 12:30:56 +05:30
Prateek Sunal
9125090a3d fix: bg changes 2025-07-10 19:04:32 +05:30
Prateek Sunal
4a552fbcb4 Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-07-10 18:53:46 +05:30
Prateek Sunal
85ef085084 chore: lint fix 2025-07-10 18:53:23 +05:30
Prateek Sunal
f1d128f6b0 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-07-10 18:53:07 +05:30
Prateek Sunal
c925ed2117 fix: issues 2025-07-10 18:52:46 +05:30
Prateek Sunal
142a5f9661 fix: issue 2025-07-10 18:52:36 +05:30
Prateek Sunal
ae0c83b1aa Merge branch 'flutter-upgrade' into isolated-ffmpeg 2025-07-08 18:47:50 +05:30
Prateek Sunal
8f1ee2ef15 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-07-08 18:47:35 +05:30
Prateek Sunal
f1d978fbf7 fix: use combine for method channel communication 2025-07-08 18:46:51 +05:30
Prateek Sunal
4604280ef8 fix: move ffmpeg and ffprobe to isolate 2025-07-07 18:41:03 +05:30
Prateek Sunal
18ab4060b2 Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-07-07 13:17:08 +05:30
Prateek Sunal
9a4d465672 chore: update runner scheme 2025-07-07 13:16:49 +05:30
Prateek Sunal
7ea9483cca fix: dependency 2025-07-07 13:10:59 +05:30
Prateek Sunal
d9add4f827 chore: update locks 2025-07-07 11:56:43 +05:30
Prateek Sunal
3c19c00a70 Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-07-07 11:52:46 +05:30
Prateek Sunal
12c19d1ed1 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-07-07 11:52:24 +05:30
Prateek Sunal
c757b837f1 fix: update flutter version in all sources 2025-07-07 11:44:42 +05:30
Prateek Sunal
a9f1c0dbd4 fix: fetch the ffmpeg source at first 2025-07-07 11:42:35 +05:30
Prateek Sunal
896d77a83e fix: upgrade plugins 2025-07-07 11:28:56 +05:30
Prateek Sunal
b1210e1d15 Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-07-04 16:55:15 +05:30
Prateek Sunal
127df30242 fix: readd workmanager 2025-07-04 16:55:04 +05:30
Prateek Sunal
c0c17af51a Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-07-04 16:48:16 +05:30
Prateek Sunal
d92ec2276e chore: update lock files 2025-07-04 16:44:43 +05:30
Prateek Sunal
1f99727ab9 fix: update git ignore 2025-07-04 16:43:52 +05:30
Prateek Sunal
85784920a9 fix: remove unwanted files 2025-07-04 16:41:12 +05:30
Prateek Sunal
d7b3af063b Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-07-04 16:38:37 +05:30
Prateek Sunal
baa3d49d4b fix: add desugaring for flutter_local_notifications to work 2025-06-18 16:00:27 +05:30
Prateek Sunal
d2c2062256 fix: upgeade gradle 2025-06-18 16:00:13 +05:30
Prateek Sunal
c646909765 fix: don't pin collection and path 2025-06-18 14:00:31 +05:30
Prateek Sunal
8b4f03b256 fix: temp commit, to revert 2025-06-17 14:44:25 +05:30
Prateek Sunal
976bd0134c fix: log string 2025-06-17 14:44:16 +05:30
Prateek Sunal
8a785aac8f Merge branch 'flutter-upgrade' into isolated-ffmpeg 2025-06-16 17:21:17 +05:30
Prateek Sunal
452812af11 chore(ios): update lock files 2025-06-16 17:18:49 +05:30
Prateek Sunal
44fb8fec1a Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-06-16 17:17:55 +05:30
Prateek Sunal
1d8fc7aba8 fix: revert back to old l10n 2025-06-16 17:08:51 +05:30
Prateek Sunal
654db76175 fix: format files 2025-06-16 17:06:50 +05:30
Prateek Sunal
364170f38d fix: DialogTheme 2025-06-16 17:04:10 +05:30
Prateek Sunal
0cd7c92672 fix: add intl based locals as well 2025-06-16 17:04:02 +05:30
Prateek Sunal
962aaa1b7a Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-06-16 14:54:37 +05:30
Prateek Sunal
6ec0c550a3 chore: lock deps 2025-06-16 14:53:25 +05:30
Prateek Sunal
b67fcdb9ed fix: map and image editor related issues 2025-06-16 14:46:51 +05:30
Prateek Sunal
2f4c3c7777 feat: upgrade deps (incomplete) 2025-06-16 12:58:13 +05:30
Prateek Sunal
cb84164466 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-06-12 18:44:10 +05:30
Prateek Sunal
7b6aed426d Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-06-12 16:55:23 +05:30
laurenspriem
eed12c2089 Merge branch 'internal-15_06_2025' into usearch_again 2025-06-09 12:34:55 +05:30
laurenspriem
889aed6024 Bump for internal release 2025-06-09 12:34:29 +05:30
laurenspriem
ac7840cbfd Merge branch 'internal-15_06_2025' into usearch_again 2025-06-09 12:33:03 +05:30
laurenspriem
1f1304ca5b Upgrade usearch to fix Armv8-R issues 2025-06-09 12:31:38 +05:30
Prateek Sunal
81c539979d Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-06-06 14:35:39 +05:30
Prateek Sunal
3cffd969b4 feat: bump flutter to 3.29 2025-06-06 14:35:30 +05:30
Neeraj Gupta
94098d8a07 Bump version 2025-06-06 12:35:30 +05:30
Neeraj Gupta
4b9c5fcb73 Merge branch 'internal-15_06_2025' of https://github.com/ente-io/auth into internal-15_06_2025 2025-06-06 12:33:48 +05:30
Neeraj Gupta
6ed16e5e02 Merge branch 'main' into internal-15_06_2025 2025-06-06 12:33:21 +05:30
laurenspriem
82a8e504af Merge branch 'internal-15_06_2025' into usearch_again 2025-06-04 22:14:26 +05:30
ashilkn
cc1660d9af bump up build number" 2025-06-04 18:24:59 +05:30
ashilkn
52b6fc108b Merge branch 'memory_improvement' into internal-15_06_2025 2025-06-04 18:19:37 +05:30
Neeraj Gupta
8b3b20aa93 Remove unsued type 2025-06-02 18:38:45 +05:30
Neeraj Gupta
408b0bfe2d Merge branch 'internal-15_06_2025' of https://github.com/ente-io/auth into internal-15_06_2025 2025-06-02 17:55:33 +05:30
Neeraj Gupta
655be76428 Bump version 2025-06-02 17:55:06 +05:30
Neeraj Gupta
9fedf8d6b7 Merge branch 'main' into internal-15_06_2025 2025-06-02 17:54:47 +05:30
ashilkn
7c4e775872 Bump build number 2025-06-02 14:56:04 +05:30
Neeraj Gupta
ecfa640c28 Bump version 2025-05-30 15:44:46 +05:30
Neeraj Gupta
1997eb20f3 Merge branch 'main' into internal-15_06_2025 2025-05-30 15:44:30 +05:30
Neeraj Gupta
bbf4462c6c temp 2025-05-28 10:31:49 +05:30
laurenspriem
726425bbb6 Put vector db behind feature flag internal 2025-05-27 14:07:34 +05:30
Neeraj Gupta
cf5aabbde1 Merge branch 'main' into single_file_link 2025-05-27 10:28:28 +05:30
laurenspriem
c068f26604 Aggressive logging of vectorDB migration 2025-05-22 11:32:36 +05:30
laurenspriem
e60c2b1192 GC hints 2025-05-22 11:19:19 +05:30
laurenspriem
beb049f817 Reduce batch size in migration 2025-05-22 10:38:43 +05:30
laurenspriem
7021c9fe02 Bump for internal release 2025-05-12 17:05:31 +05:30
laurenspriem
c2d5dece9e Merge branch 'main' into usearch_again 2025-05-12 17:04:42 +05:30
laurenspriem
b76d41b84d Specify rust version in readme 2025-05-12 15:48:27 +05:30
Neeraj Gupta
b9b239c207 move refactor 2025-05-12 15:18:13 +05:30
laurenspriem
3b9c76649d Update readme to include rust 2025-05-12 15:12:31 +05:30
laurenspriem
62ed8b6975 Log vector db stats when opening connection 2025-05-12 14:46:55 +05:30
laurenspriem
2422dba4d4 vector db more stats logging 2025-05-12 14:23:16 +05:30
laurenspriem
eb1916e3a3 integrate vector db in magic search 2025-05-12 11:39:02 +05:30
laurenspriem
df0d9137a6 Integration clip embeddings in vector db 2025-05-11 13:09:56 +05:30
laurenspriem
fc36b87965 Clip migration method 2025-05-11 13:09:20 +05:30
Neeraj Gupta
aa181b1f1f Merge branch 'main' into single_file_link 2025-05-11 10:31:13 +05:30
laurenspriem
63d90ea275 Class for vector db stats 2025-05-09 16:36:39 +05:30
laurenspriem
bb7f8a5eef More testing 2025-05-09 15:59:46 +05:30
laurenspriem
2f5a02ec43 delete table option 2025-05-09 12:57:44 +05:30
laurenspriem
d411d91966 vector db api ensure capacity safety 2025-05-09 12:56:59 +05:30
laurenspriem
54b712953a vector db api let clear include capacity reset 2025-05-09 10:49:03 +05:30
laurenspriem
27ad020adc Testing clip migration to vector DB 2025-05-08 17:40:01 +05:30
laurenspriem
ce112bd4d7 Index stats method 2025-05-08 15:23:23 +05:30
laurenspriem
2ffb73d053 Consistent method parameters 2025-05-08 15:07:50 +05:30
laurenspriem
6478d438b5 vector db api ensure never duplicate keys 2025-05-08 14:30:51 +05:30
laurenspriem
d87069eb4c vectordb api add documentation 2025-05-08 12:31:09 +05:30
laurenspriem
5447350ab1 vector db api add check for key 2025-05-08 12:29:41 +05:30
laurenspriem
ea1a2960bf First implementation of clip vector db 2025-05-08 12:08:55 +05:30
laurenspriem
832f2c451e Add bulk get method to vector db api 2025-05-08 11:47:50 +05:30
laurenspriem
715c7c23a7 Add bulk remove embeddings api 2025-05-08 10:29:25 +05:30
Neeraj Gupta
daec225ef8 Add DB Scheme for file URL 2025-05-07 16:57:59 +05:30
laurenspriem
e9c2e40a43 Update to latest usearch 2025-05-07 13:25:40 +05:30
laurenspriem
603c275c09 Update basic usearch test 2025-05-07 12:01:45 +05:30
laurenspriem
7b9d6df2fd Fix ios build issue 2025-05-07 11:32:53 +05:30
Neeraj Gupta
c94878e190 Model for single file sharing 2025-05-07 10:51:17 +05:30
laurenspriem
a4afecef3d Fix ios config 2025-05-07 10:50:39 +05:30
laurenspriem
4d9bfb89ae macos config 2025-05-07 10:36:17 +05:30
laurenspriem
f2a74bd35e Merge branch 'main' into usearch_again 2025-05-06 15:34:59 +05:30
Prateek Sunal
fbb15adf11 Merge remote-tracking branch 'origin/main' into isolated-ffmpeg 2025-05-02 10:56:28 +05:30
Prateek Sunal
3efd36ab7b fix: statitify things and log error 2025-04-29 00:55:40 +05:30
Prateek Sunal
11cb355e98 fix: remove init from main 2025-04-29 00:54:14 +05:30
Prateek Sunal
caadca9a48 fix: reencode audio as aac 2025-04-29 00:54:04 +05:30
Prateek Sunal
0a50e33023 Merge remote-tracking branch 'origin/main' into isolated-ffmpeg 2025-04-28 13:09:03 +05:30
Prateek Sunal
5eef2a5816 fix: update isolated function 2025-04-28 13:08:42 +05:30
Prateek Sunal
fe4bf5c217 Merge remote-tracking branch 'origin/main' into isolated-ffmpeg 2025-04-28 12:10:47 +05:30
Prateek Sunal
912fc72600 Add ffmpeg framework support and refactor video processing to isolated service 2025-04-17 03:39:59 +05:30
laurenspriem
8c65a21b86 don't generate for web 2025-04-10 13:03:52 +05:30
laurenspriem
a07e8477fb format 2025-04-09 15:34:06 +05:30
laurenspriem
8b489e9ced Give distances in bulk search 2025-04-09 15:31:03 +05:30
laurenspriem
77e2bb1d46 Stop our own vector comparisons in benchmark 2025-04-09 15:21:20 +05:30
laurenspriem
4ce24e080a logging of benchmarking 2025-04-09 14:22:39 +05:30
laurenspriem
4e5ca3dca6 Benchmark face embeddings 2025-04-09 13:43:39 +05:30
laurenspriem
2ed155ab47 ignore trailing commas in generated code 2025-04-09 13:14:26 +05:30
laurenspriem
65e71e3caf Reintroduce reset_index method 2025-04-09 10:49:50 +05:30
laurenspriem
ee5efbcfcc Don't consume index if not needed 2025-04-09 10:43:07 +05:30
laurenspriem
6cf4530f7d Remove reset index 2025-04-09 10:06:46 +05:30
laurenspriem
e6ee09ca30 Back to basic error handling 2025-04-08 17:03:41 +05:30
laurenspriem
6d2f53b86c Update usearch 2025-04-08 14:56:47 +05:30
laurenspriem
6500748c5a Make vector db stateful in rust 2025-04-08 14:48:30 +05:30
laurenspriem
120dbeb4fc Fix null pointer crash 2025-04-05 16:56:14 +05:30
laurenspriem
c42807487b Upgrade Android NDK to r28 latest stable 2025-04-05 16:11:03 +05:30
laurenspriem
e707e24da9 first integration of usearch 2025-04-05 16:10:39 +05:30
laurenspriem
af817ec439 Test rust 2025-04-04 11:49:54 +05:30
laurenspriem
ddb44d8fd7 Integrate flutter_rust_bridge 2025-03-31 15:56:03 +05:30
laurenspriem
778822b12d Upgrade sdk 2025-03-31 15:47:51 +05:30
laurenspriem
9599ec3236 dart format 2025-03-31 15:34:48 +05:30
1001 changed files with 113204 additions and 4996 deletions

View File

@@ -5,7 +5,7 @@ on:
branches: [main]
paths:
# Run workflow when auth's intl_en.arb is changed
- "auth/lib/l10n/arb/app_en.arb"
- "mobile/apps/auth/lib/l10n/arb/app_en.arb"
# Or the workflow itself is changed
- ".github/workflows/auth-crowdin.yml"

View File

@@ -4,7 +4,7 @@ on:
workflow_dispatch: # Allow manually running the action
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
permissions:
contents: write

View File

@@ -4,11 +4,11 @@ on:
# Run on every pull request (open or push to it) that changes auth/
pull_request:
paths:
- "auth/**"
- "mobile/apps/auth/**"
- ".github/workflows/auth-lint.yml"
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
permissions:
contents: read

View File

@@ -29,7 +29,7 @@ on:
- "auth-v*"
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
permissions:
contents: write

View File

@@ -0,0 +1,149 @@
name: "Internal release (photos)"
on:
schedule:
# Runs daily at 12:30 UTC (6:00 PM IST)
- cron: "30 12 * * *"
workflow_dispatch: # Allow manual trigger
env:
FLUTTER_VERSION: "3.32.8"
RUST_VERSION: "1.85.1"
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: mobile/apps/photos
steps:
- name: Checkout code and submodules
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Install Flutter ${{ env.FLUTTER_VERSION }}
uses: subosito/flutter-action@v2
with:
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Install Rust ${{ env.RUST_VERSION }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_VERSION }}
- name: Install Flutter Rust Bridge
run: cargo install flutter_rust_bridge_codegen
- name: Increment version code for build
run: |
CURRENT_VERSION=$(grep '^version:' pubspec.yaml | sed 's/version: //')
VERSION_NAME=$(echo $CURRENT_VERSION | cut -d'+' -f1)
CURRENT_BUILD=$(echo $CURRENT_VERSION | cut -d'+' -f2)
NEW_BUILD=$((CURRENT_BUILD + ${{ github.run_number }}))
NEW_VERSION="${VERSION_NAME}+${NEW_BUILD}"
sed -i "s/^version: .*/version: $NEW_VERSION/" pubspec.yaml
echo "Building with version ${NEW_VERSION}"
# Store version for later use
echo "NEW_VERSION=${NEW_VERSION}" >> $GITHUB_ENV
- name: Prepare and validate changelog for Play Store
run: |
mkdir -p whatsnew
CHANGELOG_FILE="scripts/store_changes.txt"
DISCORD_FILE="scripts/internal_changes.txt"
OUTPUT_FILE="whatsnew/whatsnew-en-US"
# Use provided changelog or fallback
if [ -f "$CHANGELOG_FILE" ]; then
head -c 500 "$CHANGELOG_FILE" > "$OUTPUT_FILE"
else
echo "Bug fixes and improvements" > "$OUTPUT_FILE"
fi
# Validate: file exists
if [ ! -s "$OUTPUT_FILE" ]; then
echo "❌ Changelog is empty."
exit 1
fi
# Validate: <= 500 chars
LENGTH=$(wc -m < "$OUTPUT_FILE")
if [ "$LENGTH" -gt 500 ]; then
echo "❌ Changelog exceeds 500 characters ($LENGTH)."
exit 1
fi
# Validate: no markdown or HTML
if grep -Eq '[\*\_\<\>\[\]\(\)]' "$OUTPUT_FILE"; then
echo "❌ Changelog contains markdown/HTML formatting."
exit 1
fi
echo "✅ Changelog valid:"
cat "$OUTPUT_FILE"
# Store changelog for Play Store (with escaped newlines)
CHANGELOG_PLAYSTORE=$(cat "$OUTPUT_FILE" | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/"/\\"/g')
echo "CHANGELOG=${CHANGELOG_PLAYSTORE}" >> $GITHUB_ENV
# Store changelog for Discord (with proper newlines)
CHANGELOG_DISCORD=$(cat "$DISCORD_FILE" | sed 's/"/\\"/g')
echo "CHANGELOG_DISCORD<<EOF" >> $GITHUB_ENV
echo "$CHANGELOG_DISCORD" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Setup keys
uses: timheuer/base64-to-file@v1
with:
fileName: "keystore/ente_photos_key.jks"
encodedString: ${{ secrets.SIGNING_KEY_PHOTOS }}
- name: Build PlayStore AAB
run: |
flutter build appbundle --dart-define=cronetHttpNoPlay=true --release --flavor playstore
env:
SIGNING_KEY_PATH: "/home/runner/work/_temp/keystore/ente_photos_key.jks"
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS_PHOTOS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD_PHOTOS }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD_PHOTOS }}
- name: Upload AAB to PlayStore
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
packageName: io.ente.photos
releaseFiles: mobile/apps/photos/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
track: internal
whatsNewDirectory: mobile/apps/photos/whatsnew
mappingFile: mobile/apps/photos/build/app/outputs/mapping/playstoreRelease/mapping.txt
- name: Notify Discord
uses: sarisia/actions-status-discord@v1
with:
webhook: ${{ secrets.DISCORD_INTERNAL_RELEASE_WEBHOOK }}
nodetail: true
title: "🏆 Daily release Photos v${{ env.NEW_VERSION }} (Branch: ${{ github.ref_name }})"
description: |
**Version:** ${{ env.NEW_VERSION }}
**Flutter:** ${{ env.FLUTTER_VERSION }}
**Commit:** [${{ github.sha }}](${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }})
**Download:** [Play Store](https://play.google.com/store/apps/details?id=io.ente.photos)
**Changes:**
${{ env.CHANGELOG_DISCORD }}
color: 0x00ff00

View File

@@ -1,77 +0,0 @@
name: "Internal release (photos)"
on:
workflow_dispatch: # Allow manually running the action
env:
FLUTTER_VERSION: "3.24.3"
RUST_VERSION: "1.85.1"
permissions:
contents: write
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: mobile/apps/photos
steps:
- name: Checkout code and submodules
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Install Flutter ${{ env.FLUTTER_VERSION }}
uses: subosito/flutter-action@v2
with:
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Install Rust ${{ env.RUST_VERSION }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_VERSION }}
- name: Install Flutter Rust Bridge
run: cargo install flutter_rust_bridge_codegen
- name: Setup keys
uses: timheuer/base64-to-file@v1
with:
fileName: "keystore/ente_photos_key.jks"
encodedString: ${{ secrets.SIGNING_KEY_PHOTOS }}
- name: Build PlayStore AAB
run: |
flutter build appbundle --dart-define=cronetHttpNoPlay=true --release --flavor playstore
env:
SIGNING_KEY_PATH: "/home/runner/work/_temp/keystore/ente_photos_key.jks"
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS_PHOTOS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD_PHOTOS }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD_PHOTOS }}
- name: Upload AAB to PlayStore
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
packageName: io.ente.photos
releaseFiles: mobile/apps/photos/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
track: internal
- name: Notify Discord
uses: sarisia/actions-status-discord@v1
with:
webhook: ${{ secrets.DISCORD_INTERNAL_RELEASE_WEBHOOK }}
nodetail: true
title: "🏆 Internal release available for Photos"
description: "[Download](https://play.google.com/store/apps/details?id=io.ente.photos)"
color: 0x00ff00

View File

@@ -1,10 +1,11 @@
name: "Internal release (photos)"
name: "Old Internal release (photos)"
on:
workflow_dispatch: # Allow manually running the action
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
RUST_VERSION: "1.85.1"
permissions:
contents: write
@@ -35,6 +36,14 @@ jobs:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Install Rust ${{ env.RUST_VERSION }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_VERSION }}
- name: Install Flutter Rust Bridge
run: cargo install flutter_rust_bridge_codegen
- name: Setup keys
uses: timheuer/base64-to-file@v1
with:

View File

@@ -8,7 +8,7 @@ on:
- ".github/workflows/mobile-lint.yml"
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
permissions:
contents: read

View File

@@ -9,7 +9,7 @@ on:
- "photos-v*"
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
permissions:
contents: write

View File

@@ -4,7 +4,7 @@ on:
workflow_dispatch: # Manual trigger only
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
ANDROID_KEYSTORE_PATH: "keystore/ente_photos_key.jks"
jobs:

View File

@@ -15,6 +15,9 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
RUSTFLAGS: -D warnings
jobs:
lint:
runs-on: ubuntu-latest
@@ -33,9 +36,9 @@ jobs:
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- run: cargo fmt --check
- run: cargo clippy
- run: cargo clippy --all-targets --all-features
- run: cargo build

View File

@@ -54,6 +54,18 @@ jobs:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/photos web/apps/photos/out
- name: Build custom-albums
run: yarn build:photos
env:
NEXT_PUBLIC_ENTE_ONLY_SERVE_ALBUMS_APP: 1
- name: Publish custom-albums
uses: cloudflare/wrangler-action@v3
with:
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/custom-albums web/apps/photos/out
- name: Build accounts
run: yarn build:accounts

View File

@@ -48,7 +48,7 @@ See [docs/](docs/README.md) for how to edit these documents.
## Code contributions
If you'd like to contribute code, it is best to start small. Consider some well-scoped changes, say like adding more [custom icons to auth](auth/docs/adding-icons.md), or fixing a specific bug.
If you'd like to contribute code, it is best to start small. Consider some well-scoped changes, say like adding more [custom icons to auth](mobile/apps/auth/docs/adding-icons.md), or fixing a specific bug.
Code that changes the behaviour of the product might not get merged, at least not initially. The PR can serve as a discussion bed, but you might find it easier to just start a discussion instead, or post your perspective in the (likely) existing thread about the behaviour change or new feature you wish for.

View File

@@ -2,11 +2,12 @@ package cmd
import (
"fmt"
"github.com/ente-io/cli/pkg"
"github.com/spf13/cobra/doc"
"os"
"runtime"
"github.com/ente-io/cli/pkg"
"github.com/spf13/cobra/doc"
"github.com/spf13/viper"
"github.com/spf13/cobra"
@@ -20,11 +21,6 @@ var ctrl *pkg.ClICtrl
var rootCmd = &cobra.Command{
Use: "ente",
Short: "CLI tool for exporting your photos from ente.io",
// Uncomment the following line if your bare application
// has an action associated with it:
Run: func(cmd *cobra.Command, args []string) {
fmt.Sprintf("Hello World")
},
}
func GenerateDocs() error {

View File

@@ -26,6 +26,10 @@ export const sidebar = [
text: "Collecting photos",
link: "/photos/features/collect",
},
{
text: "Custom domains",
link: "/photos/features/custom-domains/",
},
{
text: "Deduplicate",
link: "/photos/features/deduplicate",

0
docs/docs/cli/index.md Normal file
View File

View File

@@ -35,4 +35,4 @@ be specific to your distro (e.g. `xdg-desktop-menu forceupdate`).
> [!NOTE]
>
> If you're using an AppImage and not seeing the icon, you'll need to
> [enable AppImage desktop integration](/photos/troubleshooting/desktop-install/#appimage-desktop-integration).
> [enable AppImage desktop integration](/photos/troubleshooting/desktop-install/#appimage-desktop-integration).

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View File

@@ -0,0 +1,105 @@
---
title: Custom domains
description: Use your own domain when sharing photos and videos stored in Ente Photos
---
# Custom domains
Custom domains allow you to serve your public links with your own personalized domain.
For example, if I have an Ente album and wish to share it with my friends, I can go to the album's sharing settings and create a public link. When I copy this link, it will of the form of
```
https://albums.ente.io/?t=...
```
The custom domains feature allows you to instead create a link that uses your own domain, say
```
https://pics.example.org/?t=...
```
You don't need to run any servers or manage any services, Ente will still host and serve your album for you, the only thing that changes is that you can serve your links using your personalized domain.
## Availability
The custom domains feature requires the ability to publicly share albums which for abuse prevention reasons can only be done by people with an active Ente subscription.
## Setup
The setup involves two steps:
1. Letting Ente know about the domain you wish to use for serving your public links
2. Updating your DNS settings to point your domain (or subdomain) to **my.ente.io**
For people who are comfortable with changing DNS settings on their domain provider, this entire process is very simple will take a minute. For people who are not comfortable with changing DNS, we will provide a more detailed breakdown below.
Let's dive in.
To make the process concrete, let's assume we're trying to use _pics.example.org_ as our custom domain. Note that there is no restriction to use a subdomain, a top level domain can be used as a custom domain too. That is, either of _example.org_ or _subdomain.example.org_ is fine, Ente will work with both.
### Step 1 - Link your domain
The first step is to let Ente know about the domain or subdomain you wish to use by linking it to your account.
> [!WARNING]
>
> Currently (Aug 2025) the ability to link a custom domain is only present in Ente's web app, [web.ente.io](https://web.ente.io). It will come to Ente mobile and desktop when their next versions get released.
Head over to Preferences > Custom domains, in the domain field enter "pics.example.org" (replace with your subdomain) and press "Save". That's it. The linking is done.
### Step 2 - Add DNS entry
The second step is to add a CNAME entry in your DNS provider that forwards requests for pics.example.org (replace with your subdomain) to **my.ente.io**.
Specifically, you need to add a `CNAME record` from the domain (or subdomain) of your choice to `my.ente.io`. You can leave the `TTL` at its default.
| Record Type | Name | Value | TTL |
| ----------- | :------------------------: | -----------: | -------------- |
| CNAME | Your subdomain, e.g `pics` | `my.ente.io` | Auto (default) |
The exact steps for doing this depend on the DNS provider that you're using.
> Your DNS provider usually is the service from which you bought your domain. The domain name seller will provide some sort of an admin panel where you can configure your DNS settings.
As concrete examples, here is how this step would look for Cloudflare:
![Adding a CNAME for custom domain in Cloudflare](cf.png)
Note that orange proxy option is off. And here is how it would look for Namecheap:
![Adding a CNAME for custom domain in Namecheap](nc.png)
> [!NOTE]
>
> The examples are using "pics" as the subdomain, but that's just an example, you can use anything you like (or use "@" if you'd like to use the root domain itself).
The time it takes for DNS records to update is dependent on your DNS provider. Usually the changes should start reflecting within a few minutes, and should almost always reflect within an hour.
Once the DNS changes have been applied, then you can take any public link to your shared albums, replace `albums.ente.io` with your choice (e.g. `pics.example.org`), and the link will still work.
You don't need to do this manually though, the apps will do it for you. More on this in the next section. But first, some troubleshooting tips.
### Troubleshooting
If your domain is not working, go through the following checklist.
- The CNAME should be from your domain to my.ente.io, not the other way around. That is, `pics.example.org => my.ente.io`.
- If you're using Cloudflare DNS, make sure that the "Orange" proxy status toggle is off, and the Proxy status is the "Grey" DNS only.
## Using
Using is trivial. When you go to an album's sharing options and copy the link to it, Ente will automatically copy the link that uses your configured domain.
> [!WARNING]
>
> Currently (Aug 2025) the ability to automatically substitute your custom domain is only present in Ente's web app, [web.ente.io](https://web.ente.io). It will come to Ente mobile and desktop when their next versions get released.
## Unsetting
To stop using your custom domain, we need to undo the two steps we did during setup.
1. Unlink your domain in Ente. This can be done just by going to Preferences > Custom Domains, clearing the value in the "Domain" input and pressing "Update".
2. Remove the CNAME record you added during setup in your DNS provider.

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@@ -112,4 +112,4 @@ ip addr add 10.10.10.1/24 dev dummy0
ip link set dummy0 up
```
Once the interface is up, Ente correctly detects that the system is online.
Once the interface is up, Ente correctly detects that the system is online.

View File

@@ -63,11 +63,20 @@ It has no relation to Backblaze, Wasabi or Scaleway.
Each bucket's endpoint, region, key and secret should be configured accordingly
if using an external bucket.
A sample configuration for `b2-eu-cen` is provided, which can be used for other
2 buckets as well:
If a bucket has SSL support enabled, set `s3.are_local_buckets` to `false`. Enable path-style URL by setting `s3.use_path_style_urls` to `true`.
::: note
You can configure this for individual buckets over defining top-level configuration if you are using the latest server image (August 2025)
:::
A sample configuration for `b2-eu-cen` is provided, which can be used for other 2 buckets as well:
```yaml
b2-eu-cen:
are_local_buckets: true
use_path_style_urls: true
key: <key>
secret: <secret>
endpoint: localhost:3200

View File

@@ -96,8 +96,8 @@ provide correct credentials for proper connectivity within Museum.
The `s3` section within `museum.yaml` is by default configured to use local
MinIO buckets when using `quickstart.sh` or Docker Compose.
If you wish to use an external S3 provider, you can edit the configuration with
your provider's credentials, and set `s3.are_local_buckets` to `false`.
If you wish to use an external S3 provider with SSL, you can edit the configuration with
your provider's credentials, and set `s3.are_local_buckets` to `false`. Additionally, you can configure this for specific buckets in the corresponding bucket sections in the Compose file.
If you are using default MinIO, it is accessible at port `3200`. Web Console can
be accessed by enabling port `3201` in the Compose file.
@@ -111,11 +111,11 @@ and [troubleshooting](/self-hosting/troubleshooting/uploads) sections.
| Variable | Description | Default |
| -------------------------------------- | -------------------------------------------- | ------- |
| `s3.b2-eu-cen` | Primary hot storage S3 config | |
| `s3.b2-eu-cen` | Primary hot storage bucket configuration | |
| `s3.wasabi-eu-central-2-v3.compliance` | Whether to disable compliance lock on delete | `true` |
| `s3.scw-eu-fr-v3` | Optional secondary S3 config | |
| `s3.wasabi-eu-central-2-derived` | Derived data storage | |
| `s3.are_local_buckets` | Use local MinIO-compatible storage | `false` |
| `s3.scw-eu-fr-v3` | Cold storage bucket configuration | |
| `s3.wasabi-eu-central-2-v3` | Secondary hot storage configuration | |
| `s3.are_local_buckets` | | `true` |
| `s3.use_path_style_urls` | Enable path-style URLs for MinIO | `false` |
### Encryption Keys

View File

@@ -0,0 +1,15 @@
{
email custom-domains@ente.io
on_demand_tls {
ask https://api.ente.io/custom-domain
}
}
https:// {
tls {
on_demand
}
reverse_proxy https://custom-albums.ente.io {
header_up Host {upstream_hostport}
}
}

View File

@@ -0,0 +1,19 @@
# Caddy
Caddy is used to terminate TLS and manage certificates for custom domains.
## Installation
```sh
sudo mkdir -p /root/caddy/conf
sudo mv Caddyfile /root/caddy/conf
sudo chown root:root /root/caddy/conf/Caddyfile
```
Rest of it works like our other systemd services.
If the Caddyfile changes, the running instance can be updated without restarts by using `sudo systemctl reload caddy`.
## Backups
The entire `/root/caddy` directory can be backed up and contains the everything needed to resurrect the same setup.

View File

@@ -0,0 +1,17 @@
[Unit]
Documentation=https://caddyserver.com/docs/running
Requires=docker.service
After=docker.service
[Service]
ExecStartPre=docker pull caddy
ExecStartPre=-docker stop caddy
ExecStartPre=-docker rm caddy
ExecStart=docker run --name caddy \
--cap-add NET_ADMIN \
-p 80:80 -p 443:443 -p 443:443/udp \
-v /root/caddy/conf:/etc/caddy \
-v /root/caddy/data:/data \
-v /root/caddy/config:/config \
caddy
ExecReload=docker exec -w /etc/caddy caddy caddy reload

View File

@@ -1,3 +1,3 @@
{
"flutter": "3.24.3"
"flutter": "3.32.8"
}

View File

@@ -44,4 +44,5 @@ android/key.properties
dist/
# FVM Version Cache
.fvm/
.fvm/
lib/l10n/arb/*.dart

View File

@@ -44,7 +44,7 @@ or managing your secrets, please use our mobile or desktop app.
## 🧑‍💻 Build from source
1. [Install Flutter](https://flutter.dev/docs/get-started/install)
1. [Install Flutter v3.32.8](https://flutter.dev/docs/get-started/install).
2. Pull in all submodules with `git submodule update --init --recursive`
@@ -98,7 +98,7 @@ more, see [docs/adding-icons](docs/adding-icons.md).
The best way to support this project is by checking out [Ente
Photos](../mobile/README.md) or spreading the word.
For more ways to contribute, see [../CONTRIBUTING.md](../../../CONTRIBUTING.md).
For more ways to contribute, see [../../../CONTRIBUTING.md](../../../CONTRIBUTING.md).
## Certificate Fingerprints

View File

@@ -30,10 +30,13 @@ if (keystorePropertiesFile.exists()) {
android {
namespace "io.ente.auth"
compileSdk 34
compileSdk 36
ndkVersion flutter.ndkVersion
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
@@ -56,8 +59,8 @@ android {
applicationId "io.ente.auth"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion 21
targetSdkVersion 34
minSdkVersion 22
targetSdkVersion 35
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -115,4 +118,7 @@ flutter {
source '../..'
}
dependencies {}
dependencies {
// For AGP 7.4+
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
}

View File

@@ -0,0 +1,6 @@
# Please add these rules to your existing keep rules in order to suppress warnings.
# This is generated automatically by the Android Gradle plugin.
-dontwarn com.google.errorprone.annotations.CanIgnoreReturnValue
-dontwarn com.google.errorprone.annotations.CheckReturnValue
-dontwarn com.google.errorprone.annotations.Immutable
-dontwarn com.google.errorprone.annotations.RestrictedApi

View File

@@ -6,6 +6,19 @@ allprojects {
}
rootProject.buildDir = '../build'
subprojects {
afterEvaluate { project ->
if (project.hasProperty('android')) {
project.android {
if (namespace == null) {
namespace project.group
}
}
}
}
}
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}

View File

@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip

View File

@@ -19,8 +19,8 @@ pluginManagement {
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "7.3.0" apply false
id "org.jetbrains.kotlin.android" version "1.8.22" apply false
id "com.android.application" version "8.6.0" apply false
id "org.jetbrains.kotlin.android" version "2.1.10" apply false
}
include ":app"

View File

@@ -17,8 +17,7 @@
"uidai",
"UIDAI",
"Unique Identification Authority of India"
],
"hex": "FBB401"
]
},
{
"title": "Accredible",
@@ -57,8 +56,16 @@
},
{
"title": "Amtrak",
"slug": "amtrak",
"hex": "003A5D"
"slug": "amtrak"
},
{
"title": "Animal Crossing",
"slug:": "animal_crossing",
"altNames": [
"AnimalCrossing",
"Bell Tree Forums",
"BellTree Forums"
]
},
{
"title": "Ankama",
@@ -106,6 +113,10 @@
{
"title": "availity"
},
{
"title": "AvistaZ.to",
"slug": "avistaz"
},
{
"title": "AzurHosts",
"slug": "azurhosts",
@@ -145,14 +156,6 @@
"Blizzard"
]
},
{
"title": "BBS.NGA",
"slug": "bbs_nga",
"altNames": [
"NGA玩家社区",
"NGA社区"
]
},
{
"title": "Belo"
},
@@ -297,8 +300,7 @@
},
{
"title": "Caltrain",
"slug": "caltrain",
"hex": "E31837"
"slug": "caltrain"
},
{
"title": "Canva"
@@ -306,6 +308,14 @@
{
"title": "Capacities"
},
{
"title": "Capcom",
"slug": "capcom",
"hex": "0D4DA2",
"altNames": [
"Capcom Co., Ltd."
]
},
{
"title": "Carta",
"altNames": [
@@ -341,6 +351,13 @@
"slug": "cih",
"hex": "D14633"
},
{
"title": "Chucklefish"
},
{
"title": "CinemaZ.to",
"slug": "cinemaz"
},
{
"title": "Clipper",
"slug": "clippercard",
@@ -348,8 +365,7 @@
"ClipperCard",
"clipper-card",
"Clipper Card"
],
"hex": "006298"
]
},
{
"title": "CloudAMQP"
@@ -394,8 +410,7 @@
},
{
"title": "Coolify",
"slug": "coolify",
"hex": "8C52FF"
"slug": "coolify"
},
{
"title": "Crowdpear"
@@ -444,25 +459,6 @@
"cwallet.com"
]
},
{
"title": "U.S. Department of Homeland Security",
"slug": "us_dhs",
"altNames": [
"DHS",
"dhs",
"United States Department of Homeland Security",
"uscis",
"USCIS",
"U.S. Citizenship and Immigration Services",
"cbp",
"CBP",
"U.S. Customs and Border Protection",
"U.S. Immigration and Customs Enforcement",
"ice",
"ICE"
],
"hex": "005189"
},
{
"title": "DCS",
"altNames": [
@@ -508,8 +504,7 @@
"altNames": [
"Domino's",
"Domino's Pizza"
],
"hex": "0B648F"
]
},
{
"title": "Doppler"
@@ -532,8 +527,7 @@
"Dunkin'",
"Dunkin",
"Dunkin Donuts"
],
"hex": "C63663"
]
},
{
"title": "eBay"
@@ -593,10 +587,13 @@
],
"hex": "17AB17"
},
{
"title": "ExoticaZ.to",
"slug": "exoticaz"
},
{
"title": "Experian",
"slug": "experian",
"hex": "AF1685"
"slug": "experian"
},
{
"title": "Fanatical",
@@ -720,8 +717,7 @@
"altNames": [
"green man gaming",
"gmg"
],
"hex": "00E205"
]
},
{
"title": "Guideline"
@@ -848,8 +844,7 @@
},
{
"title": "Kayak",
"slug": "kayak",
"hex": "FF6900"
"slug": "kayak"
},
{
"title": "Keygen",
@@ -1150,8 +1145,7 @@
"slug": "njtransit",
"altNames": [
"NJ Transit"
],
"hex": "1A2B57"
]
},
{
"title": "nordvpn",
@@ -1256,8 +1250,7 @@
"slug": "pcpartpicker",
"altNames": [
"PC Part Picker"
],
"hex": "EDA920"
]
},
{
"title": "Peerberry"
@@ -1312,6 +1305,10 @@
"title": "Privacy.com",
"slug": "privacy"
},
{
"title": "PrivateHD.to",
"slug": "privatehd"
},
{
"title": "Proton"
},
@@ -1361,6 +1358,13 @@
"r10.net"
]
},
{
"title": "RaiderIO",
"slug": "raider_io",
"altNames": [
"raider.io"
]
},
{
"title": "Raindrop.io",
"slug": "raindrop_io",
@@ -1463,8 +1467,7 @@
"altNames": [
"onlinesbi",
"State Bank of India"
],
"hex": "12A8E0"
]
},
{
"title": "SEI",
@@ -1505,6 +1508,10 @@
{
"title": "Skinport"
},
{
"title": "Skyscanner",
"hex": "0770E3"
},
{
"title": "SMSPool",
"slug": "sms_pool_net",
@@ -1562,8 +1569,7 @@
},
{
"title": "Supercell",
"slug": "supercell",
"hex": "000000"
"slug": "supercell"
},
{
"title": "Surfshark"
@@ -1646,8 +1652,7 @@
"altNames": [
"StoryGraph",
"TheStoryGraph"
],
"hex": "15919B"
]
},
{
"title": "tianyiyun",
@@ -1664,6 +1669,12 @@
{
"title": "TorGuard"
},
{
"title": "Toyhouse",
"altNames": [
"Toyhou.se"
]
},
{
"title": "Trading 212"
},
@@ -1685,6 +1696,15 @@
"T Rowe Price Group, Inc"
]
},
{
"title": "TU Dresden",
"slug": "tu_dresden",
"altNames": [
"Technische Universität Dresden",
"Dresden University of Technology"
],
"hex": "00305d"
},
{
"title": "Tweakers"
},
@@ -1699,6 +1719,12 @@
"Twitch tv"
]
},
{
"title": "Twitter",
"altNames": [
"X"
]
},
{
"title": "Ubiquiti",
"slug": "ubiquiti",
@@ -1764,7 +1790,7 @@
"title": "Warner Bros.",
"slug": "warner_bros",
"altNames": [
"Warner Brothers"
"Warner Brothers"
]
},
{
@@ -1777,7 +1803,7 @@
"title": "WEB.DE",
"slug": "web_de"
},
{
{
"title": "WeMod",
"slug": "wemod",
"altNames": [
@@ -1801,8 +1827,7 @@
"Washington Metro",
"DC Metro",
"Washington Metropolitan Area Transit Authority"
],
"hex": "2D2D2D"
]
},
{
"title": "Wolvesville"
@@ -1906,6 +1931,26 @@
{
"title": "Co-Wheels",
"slug": "cowheels"
},
{
"title": "Zivver",
"slug": "zivver"
},
{
"title": "Meesman Indexbeleggen",
"slug": "meesman"
},
{
"title": "Scouting Nederland",
"slug": "scoutingnederland"
},
{
"title": "ISC2",
"slug": "isc2"
},
{
"title": "Allegro",
"slug": "allegro"
}
]
}
}

View File

@@ -0,0 +1,8 @@
<svg version="1.2" baseProfile="tiny-ps" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1386 1594" width="1386" height="1594">
<title>logo (15)-svg copy-svg</title>
<style>
tspan { white-space:pre }
.shp0 { fill: #ff5a00 }
</style>
<path id="Layer" fill-rule="evenodd" class="shp0" d="M1385.14 634.99L1385.14 1547.13C1385.14 1553.03 1384.01 1558.88 1381.76 1564.35C1379.45 1569.82 1376.13 1574.75 1372 1578.93C1367.82 1583.11 1362.83 1586.44 1357.36 1588.69C1351.89 1590.94 1346.04 1592.12 1340.14 1592.12L570.51 1592.12C534.63 1594.16 498.65 1593.2 462.98 1589.23C427.26 1585.26 391.98 1578.29 357.44 1568.42C322.9 1558.55 289.28 1545.79 256.88 1530.35C224.49 1514.85 193.44 1496.67 164.05 1475.97C137.02 1453.77 112.73 1428.52 91.6 1400.63C70.47 1372.8 52.66 1342.56 38.61 1310.54C24.56 1278.53 14.32 1244.96 8.1 1210.59C1.82 1176.16 -0.32 1141.14 1.61 1106.29L1.61 1101.41C1.61 641.05 502.94 580.24 666.61 580.24L1046.9 580.24L1046.9 546.83C1047.7 524.84 1045.5 502.8 1040.36 481.41C1035.21 460.01 1027.22 439.42 1016.54 420.17C1005.87 400.92 992.63 383.17 977.23 367.51C961.79 351.8 944.25 338.28 925.21 327.29C785.88 256.77 512.11 282.89 283.91 423.38C278.5 428.1 271.85 431.32 264.77 432.66C257.69 434 250.34 433.47 243.53 431.05C236.72 428.64 230.66 424.46 225.99 418.93C221.38 413.41 218.27 406.76 216.98 399.63L202.99 171.03C202.99 168.08 203.31 165.18 204.06 162.34C204.76 159.5 205.88 156.77 207.33 154.19C208.73 151.67 210.5 149.31 212.53 147.22C214.62 145.13 216.93 143.31 219.45 141.8C259.67 118.58 301.4 97.99 344.3 80.24C387.26 62.49 431.29 47.59 476.17 35.63C521.12 23.67 566.75 14.71 612.82 8.76C658.89 2.86 705.33 -0.03 751.78 0.13C937.98 0.13 1138.77 54.24 1238.52 163.09C1338.32 271.95 1384.55 429.44 1384.55 636.81L1385.14 634.99ZM1046.9 858.76L687.31 858.76C410.48 858.76 355.13 1022.96 355.13 1105.05C354.87 1119.64 356.37 1134.17 359.64 1148.38C362.91 1162.59 367.9 1176.32 374.49 1189.3C381.09 1202.33 389.24 1214.45 398.84 1225.44C408.39 1236.49 419.22 1246.25 431.18 1254.61C442.71 1263.35 454.94 1271.18 467.7 1277.99C480.47 1284.8 493.71 1290.65 507.39 1295.47C521.01 1300.25 535.06 1304 549.27 1306.63C563.48 1309.26 577.91 1310.76 592.39 1311.19L1046.9 1311.19L1046.9 858.76Z" />
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 326.24 311.07"><path fill="#1aae5e" d="M266.38 1.26c-.93 9.12-7.71 47.21-27.28 83.44a1 1 0 0 1-1.7-.06c-4-8.24-24.86-44.58-79.29-44.91C96.71 39.35 66.67 87 66.67 87s-23.45 32.93-33.49 94.89-22.61 79-22.61 79L.39 277a2.54 2.54 0 0 0 1.11 3.67c13 5.81 72.68 30.38 151.68 30.38 53.8 0 70-7.58 74.25-10.55a.61.61 0 0 0-.35-1.12c-10.55 1.16-51.2-5.26-51.2-44 0-34.79 25.3-51.62 51.81-52.83 12.56-.58 39.35 4.74 47.72 29.3 7 20.66-2.31 39.15-5.45 44.5a.62.62 0 0 0 .77.89c9.52-3.84 53.71-25.77 55.47-93.95 1.55-59.91-47.64-85.62-70.8-86.71a1.18 1.18 0 0 1-1-1.62c6.23-15.94 45-57.27 51.84-64.46a1.57 1.57 0 0 0 0-2.17A159.05 159.05 0 0 0 268.46.17a1.42 1.42 0 0 0-2.08 1.09Z"/></svg>

After

Width:  |  Height:  |  Size: 730 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 50 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="584.48486" >
<g transform="translate(-137.5,-22.390163)">
<path style="fill:#1c252c" d="m 137.5,29.631487 0,252.320873 132.1114,0 c 51.99819,0 100.05059,-18.25003 100.05059,-71.85789 0,-36.24066 -26.10767,-52.7841 -54.82326,-61.4437 17.4955,-7.01771 37.3423,-21.76056 37.3423,-52.666034 0,-39.55613 -39.24823,-66.353249 -92.09117,-66.353249 l -122.58986,0 z m 80.93311,58.76577 29.75482,0 c 12.11271,0 21.34908,9.487931 21.34908,19.117473 0,8.94677 -9.59745,18.52237 -21.34908,18.52237 l -29.75482,0 0,-37.639843 z m 0,90.008333 39.27636,0 c 13.71131,0 25.21721,10.41366 25.21721,22.31611 0,12.63921 -10.76115,23.13438 -27.59759,23.13438 l -36.89598,0 0,-45.45049 z" id="path2998" />
<path id="path3005" d="m 202.9606,309.47481 0,252.32088 132.11141,0 c 51.99819,0 100.05058,-18.25004 100.05058,-71.8579 0,-36.24065 -26.10766,-52.78409 -54.82326,-61.4437 17.4955,-7.01771 37.3423,-21.76056 37.3423,-52.66603 0,-39.55613 -39.24822,-66.35325 -92.09117,-66.35325 l -122.58986,0 z m 80.93312,58.76577 29.75482,0 c 12.11271,0 21.34908,9.48793 21.34908,19.11747 0,8.94678 -9.59745,18.52238 -21.34908,18.52238 l -29.75482,0 0,-37.63985 z m 0,90.00833 39.27636,0 c 13.71131,0 25.21721,10.41366 25.21721,22.31612 0,12.6392 -10.76115,23.13437 -27.5976,23.13437 l -36.89597,0 0,-45.45049 z" style="fill:#1c252c" />
<path style="fill:#1c252c" d="m 376.01464,281.92185 0,-252.32088 203.52297,0 0,60.937872 -122.8279,0 0,33.087358 99.73816,0 0,57.12926 -99.73816,0 0,40.46655 122.8279,0 0,60.69984 z" id="path3007"/>
<path style="fill:#1c252c" d="m 689.78812,289.1442 c 57.28767,0 103.11071,-32.67744 103.11071,-85.63169 0,-85.46143 -111.17753,-72.31037 -111.17753,-98.91916 0,-10.278288 10.80934,-15.732656 21.89462,-15.732656 19.10438,0 32.9075,12.586126 32.9075,12.586126 L 784.35446,55.903565 C 765.2233,37.697019 735.00886,22.390163 694.30743,22.390163 c -61.12759,0 -101.11859,36.280243 -101.11859,80.044867 0,86.54828 109.57491,73.98694 109.57491,101.14304 0,9.51935 -9.15835,19.09619 -25.76901,19.09619 -18.85922,0 -33.79879,-11.38479 -45.42578,-21.04418 l -48.11128,45.86837 c 19.37303,18.87022 50.47517,41.64575 106.33044,41.64575 z" id="path3009" />
<path style="fill:#1c252c" d="m 855.18627,281.92185 0,-191.621047 -66.6508,0 0,-60.699833 214.23473,0 0,60.699833 -66.65082,0 0,191.621047 z" id="path3011" />
<path style="fill:#1c252c" d="m 437.90467,309.29628 80.69507,0 0,151.15449 c 0,15.34925 15.27608,29.49386 31.20285,29.49386 15.02419,0 30.2111,-12.77313 30.2111,-30.30098 l 0,-150.34737 80.45703,0 0,149.31902 c 0,59.25051 -49.19276,106.51359 -112.80036,106.51359 -63.96969,0 -109.76569,-51.43651 -109.76569,-109.74208 z" id="path3013" />
<path style="fill:#1c252c;fill-opacity:1;stroke:none" d="m 759.97084,561.61716 0,-90.16156 -94.84461,-162.15932 81.6448,0 53.66637,86.88408 53.85177,-86.88408 81.83021,0 -95.21543,163.08638 0,89.2345 z" id="path3015" />
<path style="fill:#ffed31" d="m 936.11938,447.38916 -47.60772,47.60772 0,64.27041 47.60772,47.60771 201.38062,0 0,-159.48584 z" id="path3017" />
<path style="fill:#1c252c" id="path3024" d="m 469,573.36218 c 0,2.20914 -1.79086,4 -4,4 -2.20914,0 -4,-1.79086 -4,-4 0,-2.20914 1.79086,-4 4,-4 2.20914,0 4,1.79086 4,4 z" transform="matrix(2.6779338,0,0,2.6779338,-327.65077,-1008.3244)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<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"
version="1.1"
width="926.65619"
height="958.5625"
id="svg2"
inkscape:version="0.48.1 "
sodipodi:docname="Capcom icon.svg">
<metadata
id="metadata3015">
<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>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1835"
inkscape:window-height="1058"
id="namedview3013"
showgrid="false"
inkscape:zoom="0.32"
inkscape:cx="1623.239"
inkscape:cy="170.71783"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<defs
id="defs4" />
<g
transform="translate(2426,-55.799683)"
id="layer1">
<path
d="m -1552.0877,1007.6508 4.1189,-358.25737 -199.9062,0 c -15.7424,43.40396 -59.9402,72.71875 -113.25,72.71875 -28.0932,0 -58.13,-6.62565 -82.4688,-21.25 -31.7176,-19.0581 -55.4185,-41.69206 -74.9375,-81.90625 -15.3567,-37.21359 -27.109,-82.77963 -28.4687,-123.09375 4.6791,-79.72921 28.9019,-108.14789 73.25,-141.03125 9.8313,-7.28971 37.2996,-13.1189 45.2187,-13.15625 17.4221,-0.0822 31.9427,10.48615 39.8125,26.0625 11.4471,22.65651 -5.3079,50.1006 -21.875,69.625 l 161.625,111.34375 249.625,-261.1875 c -87.0859,-138.79748 -246.2201,-231.718747 -428.0937,-231.718747 -275.3534,0 -498.5625,212.989027 -498.5625,475.718747 0,262.72972 216.0662,461.41517 498.5625,482.84377 l 376.5933,-1.6875 c 0.2227,-314.9224 -12.7573,-290.91079 -1.2435,-5.0239 z"
id="path3840"
style="fill:#0c4da2;fill-opacity:1;stroke:none"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccssccssscccssccc" />
<path
d="m -1927.7708,145.18332 c -226.9823,1.42857 -412.3662,166.7661 -412.3662,383.05133 0,216.28523 204.6469,402.07109 452.3662,396.47808 l 240.7127,0.6783 0,-189.50724 -45.4634,0 c -14.2837,35.73115 -80.9968,70.68064 -129.3669,70.68064 -25.4902,0 -89.6606,-3.46506 -113.3988,-11.7792 -41.9106,-14.67892 -101.712,-35.75045 -153.7082,-123.14142 -13.9338,-30.6351 -53.1686,-105.28898 -44.4023,-214.19078 4.2456,-65.63495 45.9366,-147.56776 120.7486,-184.67165 32.6212,-16.17886 65.4607,-18.83348 123.1208,-13.60101 41.3957,3.75653 82.5276,32.86328 96.8886,67.79717 11.107,27.01833 7.9153,59.94169 -5.16,78.69532 -0.9328,1.33796 -0.9528,2.52293 -0.7595,3.80017 0.1471,0.97218 1.408,2.592 1.408,2.592 l 22.7845,17.79932 c 0,0 6.4866,4.50696 14.0636,4.30516 4.4004,-0.11719 12.2667,-4.89104 12.2667,-4.89104 l 130.1212,-136.55317 c -80.4452,-108.54703 -223.4056,-147.54198 -309.8556,-147.54198 z"
id="path3950"
style="fill:#ffcb08;fill-opacity:1;stroke:none"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1 @@
<?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 438 438" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><rect id="Artboard1" x="0" y="0" width="437.5" height="437.5" style="fill:none;"/><g id="layer101"><path d="M80.861,420.364c-4.353,-1.171 -8.1,-4.433 -10.133,-8.799l-1.102,-2.397l0.27,-99.121c0.291,-94.079 0.36,-100.573 1.396,-103.303c0.216,-0.469 -1.105,-1.372 -5.198,-3.524c-25.794,-13.562 -44.713,-37.051 -52.206,-64.809c-2.864,-10.522 -3.359,-14.797 -3.306,-28.127c0.096,-13.244 0.362,-15.721 3.139,-26.22c4.859,-18.438 14.538,-34.891 28.434,-48.251c15.784,-15.189 35.348,-24.767 57.621,-28.224c6.712,-1.041 23.289,-0.974 30.121,0.164c17.719,2.848 33.842,9.706 47.898,20.401c5.197,3.951 12.219,10.687 16.429,15.746c1.786,2.143 3.359,3.944 3.53,4.03c0.17,0.043 1.457,-1.276 2.831,-2.98c1.374,-1.703 4.464,-5.023 6.823,-7.364c16,-15.872 36.506,-26.044 59.249,-29.328c6.883,-0.998 22.306,-0.936 29.095,0.117c24.21,3.771 45.357,14.964 61.863,32.804c14.591,15.824 23.698,35.557 26.684,57.999c0.705,5.216 0.645,20.34 -0.103,25.635c-3.387,24.211 -13.551,44.465 -30.708,61.272c-8.322,8.17 -17.577,14.713 -27.465,19.501c-1.841,0.89 -2.398,1.358 -2.187,1.871c1.355,3.125 1.433,5.048 1.331,30.426c-0.056,14.056 -0.017,25.549 0.111,25.55c0.128,0 18.029,-10.353 39.741,-22.998c21.712,-12.602 40.555,-23.464 41.839,-24.057c1.969,-0.932 2.952,-1.099 6.199,-1.086c3.29,0.013 4.229,0.188 6.276,1.178c3.241,1.509 6.433,4.598 7.874,7.594l1.186,2.398l-0.204,83.099c-0.171,63.745 -0.335,83.526 -0.726,84.977c-1.733,6.188 -8.375,11.117 -14.998,11.091c-4.742,-0.019 -4.742,-0.019 -46.94,-25.012l-40.62,-24.046l-0.32,26.574c-0.309,23.754 -0.407,26.83 -1.054,28.451c-1.899,4.649 -5.458,7.967 -10.164,9.444c-2.695,0.843 -3.763,0.839 -116.64,0.344c-88.824,-0.356 -114.33,-0.586 -115.866,-1.02Zm140.434,-223.059c-0.256,-0.215 -1.661,-1.331 -3.195,-2.448c-6.858,-5.197 -12.604,-10.732 -18.726,-18.148c-1.021,-1.243 -2,-2.187 -2.128,-2.145c-0.171,0.085 -1.759,1.873 -3.562,4.002c-4.25,5.067 -10.769,11.151 -16.426,15.444l-4.585,3.442l24.524,0.098c13.458,0.054 24.31,-0.073 24.098,-0.245Zm-94.961,-25.46c25.4,-5.495 44.191,-24.646 49.163,-50.005c1.571,-8.239 1.017,-19.307 -1.512,-27.991c-5.519,-19.291 -20.708,-35.245 -39.61,-41.602c-7.594,-2.551 -10.669,-3.033 -19.726,-3.069c-8.673,-0.035 -11.751,0.38 -18.767,2.573c-19.293,5.99 -35.166,22.119 -40.926,41.621c-2.598,8.663 -3.241,19.726 -1.736,27.978c2.552,13.511 8.999,25.415 18.788,34.683c9.024,8.495 19.726,13.836 32.534,16.194c4.355,0.787 17.43,0.583 21.792,-0.382Zm167.009,0.498c5.987,-1.343 8.683,-2.315 14.804,-5.324c17.081,-8.391 28.977,-23.639 33.369,-42.847c0.87,-3.756 1.006,-5.636 1.033,-12.344c0.026,-6.707 -0.094,-8.588 -0.934,-12.351c-5.454,-24.845 -23.837,-43.29 -48.596,-48.773c-5.165,-1.174 -18.751,-1.228 -23.925,-0.096c-25.999,5.536 -45.305,25.454 -49.553,51.114c-0.831,4.91 -0.869,14.31 -0.077,19.226c4.125,26.164 24.251,46.796 50.422,51.686c6.233,1.178 17.642,1.01 23.457,-0.291Z" style="fill:#fff;fill-rule:nonzero;"/></g></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -0,0 +1,4 @@
<svg width="76" height="28" viewBox="0 0 76 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.6137 0.263554V24.2528C3.6137 24.3057 3.59223 24.3565 3.55413 24.3932L0.140163 27.6896C0.0876965 27.7404 0 27.703 0 27.6301V0.263554C0 0.217915 0.0370442 0.180891 0.0827069 0.180891H3.53099C3.57666 0.180891 3.6137 0.217915 3.6137 0.263554ZM12.9151 7.14572C12.9151 4.77676 14.8577 3.33976 17.4613 3.33976C19.7149 3.33976 21.3857 4.27186 23.173 5.94205C23.445 6.21361 23.5321 6.36292 23.8042 6.05236L25.4188 4.31055C25.6908 4 25.5433 3.92232 25.2713 3.65076C23.3283 1.39816 20.4529 0 17.4223 0C12.9538 0 9.41785 2.91284 9.41785 7.10703C9.41785 15.8838 22.9397 14.0583 22.9397 20.1554C22.9397 22.6408 20.764 24.5827 17.5388 24.5827C14.4361 24.5827 12.8017 23.1551 11.0921 21.524C10.8201 21.2522 10.7614 21.1884 10.5283 21.4216L8.68301 23.1634C8.411 23.3966 8.43746 23.4164 8.63175 23.7269C10.3993 26.1087 13.6923 27.9612 17.539 27.9612C22.3572 27.9612 26.5147 24.7768 26.5147 20.3107C26.5147 11.0679 12.9153 13.1263 12.9153 7.14557L12.9151 7.14572ZM44.5835 3.53395C47.3423 3.53395 49.596 4.58257 51.4999 6.17492C51.5444 6.213 51.6963 6.33632 51.743 6.37576C51.9289 6.53262 51.9644 6.53973 52.1883 6.30851C52.2428 6.25229 52.4023 6.08032 52.4023 6.08032L54.0336 4.29771C54.2087 4.09279 54.1792 4.07768 54.0528 3.94545C54.0011 3.89134 53.9102 3.80702 53.8311 3.72813C51.3835 1.55367 48.2361 0 44.5835 0C36.8514 0 30.8288 6.21361 30.8288 14.0196C30.8288 21.8255 36.8514 28 44.5835 28C48.2361 28 51.3906 26.3504 53.8384 24.1369C54.1104 23.9037 54.2128 23.8197 53.9409 23.5477L52.278 21.729C52.006 21.4571 51.9349 21.5213 51.6629 21.7545C49.759 23.3466 47.3422 24.4659 44.5834 24.4659C39.0271 24.4659 34.5199 19.9612 34.5199 14.0194C34.5199 8.03869 39.0272 3.53395 44.5835 3.53395ZM66.7904 0.0562167C63.2934 0.0562167 60.5212 1.59885 58.8115 3.73463C58.7651 3.78873 58.6609 3.93985 58.6299 3.98821C58.505 4.18286 58.541 4.19736 58.7175 4.39382C59.1585 4.88481 60.5292 6.43666 60.5292 6.43666C60.5868 6.49756 60.6405 6.49998 60.6904 6.45585C60.7448 6.4078 60.863 6.29536 60.9279 6.23174C62.0159 5.10544 63.8762 3.24107 66.7514 3.24107C69.9763 3.24107 71.9191 5.26049 71.9191 8.21187C71.9191 12.3999 69.5179 14.3919 64.1713 18.8858C62.6162 20.1928 59.7455 22.7114 59.029 23.3411C58.9234 23.4338 58.8637 23.5669 58.8637 23.7071V27.4699C58.8637 27.6378 59.0612 27.7277 59.1874 27.6169C60.6628 26.3236 66.7627 20.9799 68.7448 19.2968C73.8769 14.9387 75.2608 11.9788 75.2608 8.17288C75.2608 3.55163 71.9193 0.0563678 66.7902 0.0563678L66.7904 0.0562167Z" fill="black"/>
<path d="M75.4003 24.6003H66.7791C66.6688 24.6003 66.5794 24.6896 66.5794 24.7999V27.3522C66.5794 27.4624 66.6688 27.5518 66.7791 27.5518H75.4003C75.5106 27.5518 75.6 27.4624 75.6 27.3522V24.7999C75.6 24.6896 75.5106 24.6003 75.4003 24.6003Z" fill="#468145"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1 @@
<?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 557 557" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><rect id="Artboard1" x="0" y="0" width="556.25" height="556.25" style="fill:none;"/><g><path d="M45.455,412.973c-8.755,-1.966 -14.046,-4.401 -21.21,-9.692c-9.88,-7.304 -16.341,-17.418 -19.9,-31.231c-0.655,-2.481 -0.749,-13.157 -0.889,-90.601c-0.141,-62.086 -0.047,-89.102 0.328,-92.333c2.013,-17.746 12.969,-33.384 28.795,-41.251c8.896,-4.401 14.609,-5.478 29.545,-5.478l10.956,0l0,109.096l121.27,0l0,-109.189l12.97,0.187c12.267,0.187 13.297,0.281 17.699,1.451c18.682,4.964 32.963,19.432 37.832,38.348l1.498,5.759l0,180.266l-1.451,5.618c-3.886,14.984 -12.642,26.408 -25.893,33.712c-4.495,2.482 -8.849,4.074 -14.702,5.338c-3.933,0.843 -6.087,0.983 -16.247,0.983l-11.706,0l0,-107.223l-121.27,0l0,107.223l-11.799,-0.046c-9.879,-0.047 -12.501,-0.188 -15.826,-0.937Z" style="fill:url(#_Linear1);fill-rule:nonzero;"/><path d="M272.625,413.956l0,-271.569l118.226,0.094l118.226,0.14l4.449,1.218c8.943,2.481 16.668,6.883 23.177,13.11c8.053,7.726 12.829,16.294 15.17,27.204c0.983,4.541 0.983,4.963 0.983,94.112l0,89.571l-1.123,4.917c-2.342,10.254 -6.275,17.558 -13.485,25.097c-7.679,8.006 -16.294,12.782 -27.157,15.123l-4.589,0.983l-233.877,0Zm215.148,-61.805l0,-147.958l-150.767,0l0,147.958l150.767,0Z" style="fill:url(#_Linear2);fill-rule:nonzero;"/></g><defs><linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.66288e-14,271.569,-271.569,1.66288e-14,269.5,142.387)"><stop offset="0" style="stop-color:#decc84;stop-opacity:1"/><stop offset="0.49" style="stop-color:#e1b821;stop-opacity:1"/><stop offset="1" style="stop-color:#e2b201;stop-opacity:1"/></linearGradient><linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.66288e-14,271.569,-271.569,1.66288e-14,272.625,142.387)"><stop offset="0" style="stop-color:#decc84;stop-opacity:1"/><stop offset="0.49" style="stop-color:#e1b821;stop-opacity:1"/><stop offset="1" style="stop-color:#e2b201;stop-opacity:1"/></linearGradient></defs></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="katman_1" xmlns="http://www.w3.org/2000/svg" baseProfile="tiny" version="1.2" viewBox="0 0 295.13 303">
<!-- Generator: Adobe Illustrator 29.6.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 207) -->
<g id="Logo_2ColorWhite">
<path d="M453,42.76h-59.41v218.34h32.58v-76h26.83c18.81,0,26.83,5.13,26.83,15.81v60.2h32.59v-60.21c0-18.45-8.75-27.41-15.75-31.17,7-3.85,15.75-10.31,15.75-28.75v-52.07c0-21.05-10.31-46.15-59.42-46.15ZM479.83,140.98c0,10.67-8,13.18-26.83,13.18h-26.83v-80.47h26.83c18.81,0,26.83,4.54,26.83,15.22v52.07Z" fill="#fff"/>
<path d="M607.59,39.5c-39.84,0-62.73,18-62.73,49.41v172.19h32.58v-76h60.31v76h32.58V88.91c-.01-31.41-22.88-49.41-62.74-49.41ZM637.75,154.15h-60.3v-65.24c0-13,9-18.54,30.15-18.54s30.15,5.54,30.15,18.54v65.24Z" fill="#fff"/>
<polygon points="702.87 73.69 716.14 73.69 716.14 230.17 702.87 230.17 702.87 261.1 761.99 261.1 761.99 230.17 748.72 230.17 748.72 73.69 761.99 73.69 761.99 42.76 702.87 42.76 702.87 73.69" fill="#fff"/>
<path d="M857.66,42.76h-62.73v218.34h62.73c39.87,0,62.74-18,62.74-49.46v-119.42c0-31.42-22.87-49.46-62.74-49.46ZM887.8,211.64c0,13-9,18.53-30.14,18.53h-30.14V73.69h30.14c21.14,0,30.14,5.54,30.14,18.53v119.42Z" fill="#fff"/>
<path d="M953.52,92.22v119.42c0,31.42,22.87,49.46,62.74,49.46h49.49v-30.93h-49.45c-21.14,0-30.16-5.54-30.16-18.53v-40.65h73v-30.93h-73v-47.84c0-13,9-18.53,30.16-18.53h49.45v-30.93h-49.45c-39.91,0-62.78,18.04-62.78,49.46Z" fill="#fff"/>
<path d="M1158.23,42.81h-59.42v218.34h32.6v-76.36h26.82c18.81,0,26.84,4.55,26.84,15.22v61.14h32.58v-61.14c0-18.44-8.75-26.82-15.74-30.57,7-3.85,15.74-12.35,15.74-30.79v-49.69c0-21.05-10.32-46.15-59.42-46.15ZM1185.07,138.65c0,10.67-8,15.22-26.84,15.22h-26.82v-80.13h26.82c18.81,0,26.84,4.54,26.84,15.22v49.69Z" fill="#fff"/>
<rect x="1250.28" y="201.98" width="32.58" height="59.12" fill="#fff"/>
<polygon points="1315.82 73.69 1329.08 73.69 1329.08 230.17 1315.82 230.17 1315.82 261.1 1374.93 261.1 1374.93 230.17 1361.67 230.17 1361.67 73.69 1374.93 73.69 1374.93 42.76 1315.82 42.76 1315.82 73.69" fill="#fff"/>
<path d="M1470.75,39.5c-39.85,0-62.72,18-62.72,49.46v126c0,31.43,22.87,49.45,62.72,49.45s62.74-18,62.74-49.45v-126c-.03-31.46-22.9-49.46-62.74-49.46ZM1500.9,215.01c0,13-9,18.53-30.15,18.53s-30.14-5.54-30.14-18.53v-126c0-13,9-18.54,30.14-18.54s30.15,5.54,30.15,18.54v126Z" fill="#fff"/>
<path d="M292.75,118.28c1.83-2.01,2.65-4.74,2.23-7.43-.21-.81-.41-1.63-.63-2.44-.97-2.59-3.07-4.58-5.7-5.42l-28-8.45c-6.93-2.1-11.04-9.23-9.39-16.28l6.67-28.47c.56-2.32.21-4.77-1-6.83-.81-1.37-1.96-2.51-3.33-3.32-2.06-1.21-4.5-1.57-6.82-1l-28.47,6.67c-7.05,1.66-14.18-2.46-16.27-9.39l-8.46-28c-.83-2.57-2.76-4.64-5.28-5.63-.91-.25-1.83-.46-2.74-.7-2.63-.37-5.3.45-7.27,2.23l-21.32,20c-5.28,4.96-13.51,4.96-18.79,0L116.86,3.82c-1.97-1.78-4.64-2.6-7.27-2.23-.91.24-1.83.45-2.73.7-2.52.99-4.46,3.05-5.29,5.63l-8.46,28c-2.09,6.94-9.22,11.05-16.27,9.39l-28.47-6.71c-2.32-.56-4.77-.21-6.83,1-1.37.81-2.52,1.95-3.33,3.32-1.21,2.06-1.56,4.51-1,6.83l6.67,28.48c1.65,7.06-2.48,14.19-9.43,16.27l-28,8.45c-2.64.85-4.74,2.86-5.7,5.46-.22.81-.42,1.63-.63,2.44-.42,2.69.4,5.42,2.23,7.43l20,21.32c4.96,5.28,4.96,13.51,0,18.79l-20,21.32c-1.86,2.04-2.69,4.82-2.23,7.55.2.74.38,1.49.58,2.23.96,2.63,3.08,4.67,5.75,5.51l28,8.46c6.93,2.09,11.05,9.22,9.39,16.27l-6.67,28.47c-.6,2.56-.07,5.25,1.46,7.39,2.17,3.13,6.02,4.64,9.74,3.8l47.08-5.1c2.39-.24,4.14-2.36,3.93-4.76-1.57-17.27-9-81.84-11.73-105.94-.66-5.76,1.5-11.49,5.8-15.39l46.11-42c4.53-4.13,11.47-4.13,16,0l46.05,42c4.29,3.89,6.45,9.61,5.79,15.37-2.75,24.08-10.09,88.68-11.65,106-.21,2.39,1.54,4.51,3.93,4.75l47.09,5.1c2.58.61,5.29.06,7.43-1.49.9-.63,1.67-1.4,2.3-2.3,1.53-2.14,2.06-4.84,1.46-7.4l-6.67-28.47c-1.65-7.05,2.46-14.17,9.39-16.26l28-8.46c2.67-.84,4.79-2.88,5.75-5.51.2-.74.38-1.49.58-2.24.45-2.72-.37-5.5-2.23-7.54l-20-21.32c-4.96-5.28-4.96-13.51,0-18.79l19.97-21.36Z" fill="#e5a024"/>
<path d="M152.13,125.06c-2.15-2.52-5.94-2.81-8.46-.66-.24.2-.46.42-.66.66l-15.81,18.18c-3.17,3.64-4.78,8.38-4.49,13.2l8,135.87c.33,4.92,4.32,8.8,9.25,9,2.5.13,5.02.19,7.56.2,2.54,0,5.07-.06,7.6-.2,4.93-.19,8.93-4.07,9.25-9l8.11-135.81c.28-4.83-1.34-9.57-4.51-13.22l-15.84-18.22Z" fill="#808080"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-376.452 18.166 399.284 251.868"><path d="M195.1 220c2.1 0 4.1-.5 6-1.6l21.9-12.6c4.4-2.5 9.5-3.6 14.6-3 26.6 3.1 45.2 8.1 50.7 9.7 1.1.3 2.4-.1 3.1-1 .9-1.1 2-2.9 2.9-5.5.8-2.5.9-4.6.8-6.1-.1-1.2-.9-2.3-2.1-2.6-8.6-2.5-46.7-12.8-97.9-12.8s-89.3 10.3-97.9 12.8c-1.2.3-2 1.4-2.1 2.6-.1 1.4 0 3.5.8 6.1.8 2.6 2 4.4 2.9 5.5.7.9 2 1.3 3.1 1 5.5-1.6 24.2-6.6 50.7-9.7 5.1-.6 10.2.5 14.6 3l21.9 12.6c1.9 1.1 4 1.6 6 1.6zM158.6 149.1c1.2 2.1 3.1 3.5 5.3 4.1 2.2.6 4.5.3 6.6-.9 2.1-1.2 3.5-3.1 4.1-5.3.6-2.2.3-4.5-.9-6.6L154 106.3c-.6-1.1-1.9-1.5-3.1-1.4-1.6.1-3.8.9-6.4 2.4-2.6 1.5-4.4 3-5.3 4.3-.7 1-.9 2.3-.3 3.4l19.7 34.1zM140.6 173.5c2.1 1.2 4.5 1.4 6.6.9 2.2-.6 4.1-2 5.3-4.1 1.2-2.1 1.4-4.5.9-6.6-.5-2.1-2-4.1-4.1-5.3l-34.1-19.7c-1.1-.6-2.4-.4-3.4.3-1.3.9-2.8 2.7-4.3 5.3-1.5 2.6-2.3 4.8-2.4 6.4-.1 1.3.4 2.5 1.4 3.1l34.1 19.7zM203.8 137c0 2.4-1 4.6-2.5 6.2-1.6 1.6-3.7 2.5-6.2 2.5-2.4 0-4.6-1-6.2-2.5-1.6-1.6-2.5-3.7-2.5-6.2V97.7c0-1.3.8-2.3 2-2.8 1.4-.7 3.7-1.1 6.7-1.1s5.3.4 6.7 1.1c1.1.6 2 1.5 2 2.8V137zM231.6 149.1c-1.2 2.1-3.1 3.5-5.3 4.1-2.2.6-4.5.3-6.6-.9-2.1-1.2-3.5-3.1-4.1-5.3-.6-2.2-.3-4.5.9-6.6l19.7-34.1c.6-1.1 1.9-1.5 3.1-1.4 1.6.1 3.8.9 6.4 2.4 2.6 1.5 4.4 3 5.3 4.3.7 1 .9 2.3.3 3.4l-19.7 34.1zM249.6 173.5c-2.1 1.2-4.5 1.4-6.6.9-2.2-.6-4.1-2-5.3-4.1-1.2-2.1-1.4-4.5-.9-6.6.6-2.2 2-4.1 4.1-5.3l34.1-19.7c1.1-.6 2.4-.4 3.4.3 1.3.9 2.8 2.7 4.3 5.3 1.5 2.6 2.3 4.8 2.4 6.4.1 1.3-.4 2.5-1.4 3.1l-34.1 19.7z" class="st0" style="fill:#0770e3" transform="translate(-566.187 -169.038) scale(1.99578)"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="197.72693mm"
height="190.30197mm"
viewBox="0 0 197.72693 190.30197"
version="1.1"
id="svg5"
xml:space="preserve"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
sodipodi:docname="Toyhouse.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.5"
inkscape:cx="969"
inkscape:cy="450"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs2" /><g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(6.2923729,-54.858845)"><g
id="g1824"><path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M -6.2923729,154.22213 92.377447,54.858845 121.69053,84.093271 V 69.076617 h 31.14565 v 46.273543 l 38.59837,38.59837 h -32.36923 v 91.21228 H 25.02776 v -91.10105 z"
id="path428"
sodipodi:nodetypes="cccccccccccc" /><path
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 54.338047,170.6337 v 8.39821 H 70.80075 v 53.94872 h 11.012215 v -54.00434 h 17.920872 c 0,0 2.72e-4,-0.23357 2.72e-4,2.12606 v 51.91208 h 8.966631 v -29.12162 h 26.03469 v 28.76768 h 9.28125 v -61.66526 h -8.96663 v 25.72008 h -26.42796 l 0.22247,-26.09986 z"
id="path526"
sodipodi:nodetypes="cccccccscccccccccccc" /></g></g></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 248 204">
<path fill="#1d9bf0" d="M221.95 51.29c.15 2.17.15 4.34.15 6.53 0 66.73-50.8 143.69-143.69 143.69v-.04c-27.44.04-54.31-7.82-77.41-22.64 3.99.48 8 .72 12.02.73 22.74.02 44.83-7.61 62.72-21.66-21.61-.41-40.56-14.5-47.18-35.07 7.57 1.46 15.37 1.16 22.8-.87-23.56-4.76-40.51-25.46-40.51-49.5v-.64c7.02 3.91 14.88 6.08 22.92 6.32C11.58 63.31 4.74 33.79 18.14 10.71c25.64 31.55 63.47 50.73 104.08 52.76-4.07-17.54 1.49-35.92 14.61-48.25 20.34-19.12 52.33-18.14 71.45 2.19 11.31-2.23 22.15-6.38 32.07-12.26-3.77 11.69-11.66 21.62-22.2 27.93 10.01-1.18 19.79-3.86 29-7.95-6.78 10.16-15.32 19.01-25.2 26.16z"/>
</svg>

After

Width:  |  Height:  |  Size: 732 B

View File

@@ -1,7 +1 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg xmlns="http://www.w3.org/2000/svg"
aria-label="Ubiquiti" role="img"
viewBox="0 0 512 512"><rect
width="512" height="512"
rx="15"
fill="#399cdb"/><path d="M112 94v18h18V94h-18zm288 0c-82 0-90 31-90 61v172a147 147 0 01-3 28c43-9 72-36 86-82l7-23V94zm-234 18v18h18v-18h-18zm-18 18v18h18v-18h-18zm36 9v18h18v-18h-18zm-72 4v147c0 73 53 128 144 128 0 0-54-30-54-91V197h-18v66h-18v-39h-18v17h-18v-98h-18zm54 18v18h18v-18h-18zm-18 27v18h18v-18h-18zm252 87c-19 64-65 92-131 89-24-1-43-7-57-16 10 42 46 63 48 64l10 6c82-5 130-59 130-128v-15z" fill="#ffffff"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="M494.2 0h-31.8v31.8h31.8zM383.1 222.4v-63.6h63.5v63.5h63.5c1.1 58.9-3.4 110.2-33.3 161.6-86.6 152.4-300.5 172.9-414 39.2C36.3 392.4 17.2 355 8.3 315c-4.5-21.7-6.5-49.2-6.5-72.5V4h127l.2 242c.6 31.3 6.3 63.5 25 88 53.9 73 167.9 66.3 212.1-13.1 15.9-26.6 17.3-68.7 17-98.5m15.8-174.8h47.6v47.6H510v63.5h-63.5V95.3h-47.6z" style="fill:#005ed9"/></svg>

Before

Width:  |  Height:  |  Size: 679 B

After

Width:  |  Height:  |  Size: 440 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="240.000000pt" height="240.000000pt" viewBox="0 0 240.000000 240.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,240.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M765 2069 c-179 -12 -224 -23 -273 -65 -74 -63 -73 -55 -70 -619 l3
-500 34 -70 c61 -125 213 -256 420 -362 110 -56 289 -126 321 -125 14 0 77 21
140 47 313 126 514 275 597 442 l38 77 3 483 c2 341 0 495 -9 525 -7 28 -27
59 -58 89 -56 56 -85 64 -309 79 -178 12 -648 11 -837 -1z m850 -403 c39 -1
99 2 135 7 l65 7 -100 -34 c-95 -33 -103 -38 -167 -105 l-68 -71 0 -73 c0
-100 -22 -138 -128 -222 -116 -93 -137 -142 -167 -390 -9 -71 -18 -141 -21
-154 l-5 -24 -21 20 c-11 12 -27 45 -35 74 -21 80 -27 325 -10 434 9 55 11 97
5 107 -4 10 -36 36 -69 58 -33 23 -92 71 -132 106 -55 51 -102 80 -202 129
l-130 64 183 0 182 1 122 -45 c66 -24 136 -47 154 -51 31 -6 35 -3 63 42 71
118 103 137 211 127 36 -3 97 -6 135 -7z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -6,14 +6,14 @@
"request": "launch",
"type": "dart",
"flutterMode": "debug",
"program": "auth/lib/main.dart",
"program": "mobile/apps/auth/lib/main.dart",
"args": ["--dart-define", "endpoint=http://localhost:8080"]
},
{
"name": "Auth Android Dev",
"request": "launch",
"type": "dart",
"program": "auth/lib/main.dart",
"program": "mobile/apps/auth/lib/main.dart",
"args": [
"--dart-define",
"endpoint=http://192.168.1.3:8080",
@@ -25,21 +25,21 @@
"name": "Auth iOS Dev",
"request": "launch",
"type": "dart",
"program": "auth/lib/main.dart",
"program": "mobile/apps/auth/lib/main.dart",
"args": ["--dart-define", "endpoint=http://192.168.1.30:8080"]
},
{
"name": "Auth iOS Prod",
"request": "launch",
"type": "dart",
"program": "auth/lib/main.dart",
"program": "mobile/apps/auth/lib/main.dart",
"args": ["--target", "lib/main.dart"]
},
{
"name": "Auth Android Prod",
"request": "launch",
"type": "dart",
"program": "auth/lib/main.dart",
"program": "mobile/apps/auth/lib/main.dart",
"args": ["--target", "lib/main.dart", "--flavor", "independent"]
}
]

View File

@@ -1,31 +1,51 @@
ente's Authenticator app helps you generate and store 2 step verification (2FA) tokens on your mobile devices.
Ente Auth is the best and the only 2FA authenticator app you will ever need. It provides secure, end-to-end encrypted backup to your codes, works across devices whether its Android, iOS, Mac, Windows, Linux or Web. It also offers quality of life features like Tap to Copy, Next Code, and even allows you to share your codes securely with others.
Our customers absolutely love it.
FEATURES
- It works everywhere and can either be used in the cloud with end-to-end encryption or on a single device without the need for an account. Entes UI is well thought out and easy to use. Plus it even shows you the next code if the current one is about to expire so you dont have to wait for it to roll over before your start typing. You can even pin, tag, and search your codes which makes it a lot easier to manage a big list compared to Google Authenticator. They call it a labour of love on their Github page, and it really looks like one. - Linus Tech Tips
- Secure Backups
ente provides end-to-end encrypted cloud backups so that you don't have to worry about losing your tokens. We use the same protocols Ente Photos uses to encrypt and preserve your data.
- Underrated but great authenticator app. Free, open source, and offers cloud backup. Very stable, has nice QoL features like the preview for the next code and the search bar. Overall, the best 2FA app I've used yet. - Luna Lometta
- Multi Device Synchronization
ente will automatically sync the 2FA tokens you add to your account, across all your devices. Every new device you sign into will have access to these tokens.
- Fantastic, fluid, has a dark theme, is open source, and also has a PC program. I switched from Authy to Ente Auth precisely for this reason, and I was surprised since the app as a whole is better and faster. - Daniel Ramos
- Web access
You can access your 2FA code from any web browser by visiting https://auth.ente.io .
- Better than Google Authenticator. - Piaw Piaw Kittens
- Offline Mode
ente generates 2FA tokens offline, so your network connectivity will not get in the way of your workflow.
- Authy's best replacement. Open source, desktop support, synchronization, convenient token export. Huge thanks to the developers, I hope your product will become popular and famous. - Sergey Tverye
- Import and Export Tokens
You can add tokens to ente by one of the following methods:
1. Scanning a QR code
2. Manually entering (copy-pasting) a 2FA secret
3. Bulk importing from a file that contains a list of codes in the following format:
- By far my favourite 2FA app. Over the years I've moved from Google Authenticator to Authy and have now happily "settled" with Ente Auth. - Dan Walsh
otpauth://totp/provider.com:you@email.com?secret=YOUR_SECRET
- The best MFA app I ever used. I will never go back to Google Authenticator. - Pierre-Philippe Lessard
The codes maybe separated by new lines or commas.
Ente Auth is recommended by Linus Tech Tips, CERN, Zerodha and many others.
You can also export the codes you have added to ente, to an **unencrypted** text file, that adheres to the above format.
✨ Features
EASY IMPORT
Add TOTP 2FA Codes to Ente Auth easily. You can either scan a QR code, or import from other authenticator apps to make sure you never lose a code while migrating
CROSS PLATFORM
Ente Auth is available cross platform and supports all major devices and OS - including Android, iOS, Mac, Windows, Linux and Web.
SECURE E2EE BACKUP
Ente Auth provides end-to-end encrypted cloud backups so that you don't have to worry about losing your tokens. We use the same protocols Ente Photos uses to encrypt and preserve your data.
OFFLINE MODE - NO SIGNUP REQUIRED
Ente Auth generates 2FA tokens offline, so your network connectivity will not get in the way of your workflow. You can even use Ente Auth without signing up for backups and use it locally for as long as you want
INTUITIVE SEARCH
Ente Auth allows you to find your 2FA codes through one tap search. No more scrolling through a long list to find the right codes. Just tap on search and start typing.
CUSTOMISE YOUR EXPERIENCE
Customise your experience of Ente Auth to make it like you want. Reorder your 2FA codes so that your most frequently used services are always on top. Change the icons by choosing from our massive icon library. Add tags so that you can filter codes like you want
SEE NEXT CODE
Ever had to pause for the timer to run out on the current code, so you can type in the new 2FA code? Ente Auth makes your workflow extremely fast by displaying the next code prominently. Say goodbye to waiting
SHARE 2FA CODE
We all have sent multiple messages to that colleague who keeps asking for the 2FA code to a shared account. Such a waste of productive time. With Ente Auth, you can securely share your 2FA tokens as a link. You can even set an expiry time for the link as well.
ADD NOTES
Use notes to save any additional information including recovery codes. All notes are backed up with end to end encryption so you dont have to worry about losing them.
SUPPORT

View File

@@ -0,0 +1,81 @@
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_41060_128753)">
<rect width="1024" height="1024" rx="234" fill="url(#paint0_linear_41060_128753)"/>
<g opacity="0.8" filter="url(#filter0_dii_41060_128753)">
<path d="M512.364 162L226 289.273V480.182C226 656.773 348.182 821.909 512.364 862C676.545 821.909 798.727 656.773 798.727 480.182V289.273L512.364 162ZM512.364 352.909C556.909 352.909 601.455 387.909 601.455 432.455V480.182C620.546 480.182 639.636 499.273 639.636 521.545V632.909C639.636 652 620.545 671.091 598.273 671.091H423.273C404.182 671.091 385.091 652 385.091 629.727V518.364C385.091 499.273 404.182 480.182 423.273 480.182V432.455C423.273 387.909 467.818 352.909 512.364 352.909ZM512.364 391.091C486.909 391.091 464.636 407 464.636 432.455V480.182H560.091V432.455C560.091 407 537.818 391.091 512.364 391.091Z" fill="white"/>
</g>
<g opacity="0.8" filter="url(#filter1_dii_41060_128753)">
<path d="M512.364 162L226 289.273V480.182C226 656.773 348.182 821.909 512.364 862C676.545 821.909 798.727 656.773 798.727 480.182V289.273L512.364 162ZM512.364 352.909C556.909 352.909 601.455 387.909 601.455 432.455V480.182C620.546 480.182 639.636 499.273 639.636 521.545V632.909C639.636 652 620.545 671.091 598.273 671.091H423.273C404.182 671.091 385.091 652 385.091 629.727V518.364C385.091 499.273 404.182 480.182 423.273 480.182V432.455C423.273 387.909 467.818 352.909 512.364 352.909ZM512.364 391.091C486.909 391.091 464.636 407 464.636 432.455V480.182H560.091V432.455C560.091 407 537.818 391.091 512.364 391.091Z" fill="white"/>
</g>
<g opacity="0.8" filter="url(#filter2_ii_41060_128753)">
<path d="M512.364 162L226 289.273V480.182C226 656.773 348.182 821.909 512.364 862C676.545 821.909 798.727 656.773 798.727 480.182V289.273L512.364 162ZM512.364 352.909C556.909 352.909 601.455 387.909 601.455 432.455V480.182C620.546 480.182 639.636 499.273 639.636 521.545V632.909C639.636 652 620.545 671.091 598.273 671.091H423.273C404.182 671.091 385.091 652 385.091 629.727V518.364C385.091 499.273 404.182 480.182 423.273 480.182V432.455C423.273 387.909 467.818 352.909 512.364 352.909ZM512.364 391.091C486.909 391.091 464.636 407 464.636 432.455V480.182H560.091V432.455C560.091 407 537.818 391.091 512.364 391.091Z" fill="white"/>
</g>
</g>
<defs>
<filter id="filter0_dii_41060_128753" x="46.613" y="90.2452" width="931.502" height="1058.77" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="107.632"/>
<feGaussianBlur stdDeviation="89.6935"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_41060_128753"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_41060_128753" result="shape"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="17.9387"/>
<feGaussianBlur stdDeviation="8.96935"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="shape" result="effect2_innerShadow_41060_128753"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="-8.96935"/>
<feGaussianBlur stdDeviation="4.48467"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="effect2_innerShadow_41060_128753" result="effect3_innerShadow_41060_128753"/>
</filter>
<filter id="filter1_dii_41060_128753" x="46.613" y="90.2452" width="931.502" height="1058.77" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="107.632"/>
<feGaussianBlur stdDeviation="89.6935"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_41060_128753"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_41060_128753" result="shape"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="17.9387"/>
<feGaussianBlur stdDeviation="8.96935"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="shape" result="effect2_innerShadow_41060_128753"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="-8.96935"/>
<feGaussianBlur stdDeviation="4.48467"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="effect2_innerShadow_41060_128753" result="effect3_innerShadow_41060_128753"/>
</filter>
<filter id="filter2_ii_41060_128753" x="226" y="153.031" width="572.728" height="726.908" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="17.9387"/>
<feGaussianBlur stdDeviation="8.96935"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="shape" result="effect1_innerShadow_41060_128753"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="-8.96935"/>
<feGaussianBlur stdDeviation="4.48467"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="effect1_innerShadow_41060_128753" result="effect2_innerShadow_41060_128753"/>
</filter>
<linearGradient id="paint0_linear_41060_128753" x1="96.5" y1="71" x2="985" y2="977.5" gradientUnits="userSpaceOnUse">
<stop stop-color="#C373F2"/>
<stop offset="1" stop-color="#9610D6"/>
</linearGradient>
<clipPath id="clip0_41060_128753">
<rect width="1024" height="1024" rx="234" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 810 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 828 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 825 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 950 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 811 KiB

View File

@@ -1 +1 @@
ente is an end-to-end encrypted authenticator app
Free, Cross Platform, Private, Open Source Two Factor Authenticator App

View File

@@ -1 +1 @@
Ente Authenticator
Ente Auth - 2FA Authenticator

View File

@@ -0,0 +1,32 @@
#
# Generated file, do not edit.
#
import lldb
def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_dict):
"""Intercept NOTIFY_DEBUGGER_ABOUT_RX_PAGES and touch the pages."""
base = frame.register["x0"].GetValueAsAddress()
page_len = frame.register["x1"].GetValueAsUnsigned()
# Note: NOTIFY_DEBUGGER_ABOUT_RX_PAGES will check contents of the
# first page to see if handled it correctly. This makes diagnosing
# misconfiguration (e.g. missing breakpoint) easier.
data = bytearray(page_len)
data[0:8] = b'IHELPED!'
error = lldb.SBError()
frame.GetThread().GetProcess().WriteMemory(base, data, error)
if not error.Success():
print(f'Failed to write into {base}[+{page_len}]', error)
return
def __lldb_init_module(debugger: lldb.SBDebugger, _):
target = debugger.GetDummyTarget()
# Caveat: must use BreakpointCreateByRegEx here and not
# BreakpointCreateByName. For some reasons callback function does not
# get carried over from dummy target for the later.
bp = target.BreakpointCreateByRegex("^NOTIFY_DEBUGGER_ABOUT_RX_PAGES$")
bp.SetScriptCallbackFunction('{}.handle_new_rx_page'.format(__name__))
bp.SetAutoContinue(True)
print("-- LLDB integration loaded --")

View File

@@ -0,0 +1,5 @@
#
# Generated file, do not edit.
#
command script import --relative-to-command-file flutter_lldb_helper.py

View File

@@ -3,7 +3,6 @@ PODS:
- Flutter
- connectivity_plus (0.0.1):
- Flutter
- FlutterMacOS
- cupertino_http (0.0.1):
- Flutter
- FlutterMacOS
@@ -61,13 +60,12 @@ PODS:
- Flutter
- flutter_local_notifications (0.0.1):
- Flutter
- flutter_native_splash (0.0.1):
- flutter_native_splash (2.4.3):
- Flutter
- flutter_secure_storage (6.0.0):
- Flutter
- fluttertoast (0.0.2):
- Flutter
- Toast
- local_auth_darwin (0.0.1):
- Flutter
- FlutterMacOS
@@ -87,9 +85,9 @@ PODS:
- qr_code_scanner (0.2.0):
- Flutter
- MTBBarcodeScanner
- SDWebImage (5.21.0):
- SDWebImage/Core (= 5.21.0)
- SDWebImage/Core (5.21.0)
- SDWebImage (5.21.1):
- SDWebImage/Core (= 5.21.1)
- SDWebImage/Core (5.21.1)
- Sentry/HybridSDK (8.46.0)
- sentry_flutter (8.14.2):
- Flutter
@@ -102,35 +100,38 @@ PODS:
- FlutterMacOS
- sodium_libs (2.2.1):
- Flutter
- sqflite (0.0.3):
- sqflite_darwin (0.0.4):
- Flutter
- FlutterMacOS
- "sqlite3 (3.46.1+1)":
- "sqlite3/common (= 3.46.1+1)"
- "sqlite3/common (3.46.1+1)"
- "sqlite3/dbstatvtab (3.46.1+1)":
- sqlite3 (3.50.2):
- sqlite3/common (= 3.50.2)
- sqlite3/common (3.50.2)
- sqlite3/dbstatvtab (3.50.2):
- sqlite3/common
- "sqlite3/fts5 (3.46.1+1)":
- sqlite3/fts5 (3.50.2):
- sqlite3/common
- "sqlite3/perf-threadsafe (3.46.1+1)":
- sqlite3/math (3.50.2):
- sqlite3/common
- "sqlite3/rtree (3.46.1+1)":
- sqlite3/perf-threadsafe (3.50.2):
- sqlite3/common
- sqlite3/rtree (3.50.2):
- sqlite3/common
- sqlite3_flutter_libs (0.0.1):
- Flutter
- "sqlite3 (~> 3.46.0+1)"
- FlutterMacOS
- sqlite3 (~> 3.50.1)
- sqlite3/dbstatvtab
- sqlite3/fts5
- sqlite3/math
- sqlite3/perf-threadsafe
- sqlite3/rtree
- SwiftyGif (5.4.5)
- Toast (4.1.1)
- url_launcher_ios (0.0.1):
- Flutter
DEPENDENCIES:
- app_links (from `.symlinks/plugins/app_links/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- cupertino_http (from `.symlinks/plugins/cupertino_http/darwin`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`)
@@ -155,8 +156,8 @@ DEPENDENCIES:
- share_plus (from `.symlinks/plugins/share_plus/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- sodium_libs (from `.symlinks/plugins/sodium_libs/ios`)
- sqflite (from `.symlinks/plugins/sqflite/darwin`)
- sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/ios`)
- sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
- sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
SPEC REPOS:
@@ -169,13 +170,12 @@ SPEC REPOS:
- Sentry
- sqlite3
- SwiftyGif
- Toast
EXTERNAL SOURCES:
app_links:
:path: ".symlinks/plugins/app_links/ios"
connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/darwin"
:path: ".symlinks/plugins/connectivity_plus/ios"
cupertino_http:
:path: ".symlinks/plugins/cupertino_http/darwin"
device_info_plus:
@@ -224,51 +224,50 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sodium_libs:
:path: ".symlinks/plugins/sodium_libs/ios"
sqflite:
:path: ".symlinks/plugins/sqflite/darwin"
sqflite_darwin:
:path: ".symlinks/plugins/sqflite_darwin/darwin"
sqlite3_flutter_libs:
:path: ".symlinks/plugins/sqlite3_flutter_libs/ios"
:path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
SPEC CHECKSUMS:
app_links: e7a6750a915a9e161c58d91bc610e8cd1d4d0ad0
connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
app_links: f3e17e4ee5e357b39d8b95290a9b2c299fca71c6
connectivity_plus: 2a701ffec2c0ae28a48cf7540e279787e77c447d
cupertino_http: 947a233f40cfea55167a49f2facc18434ea117ba
device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655
file_picker: b159e0c068aef54932bb15dc9fd1571818edaf49
file_saver: 503e386464dbe118f630e17b4c2e1190fa0cf808
fk_user_agent: 1f47ec39291e8372b1d692b50084b0d54103c545
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_email_sender: 10a22605f92809a11ef52b2f412db806c6082d40
flutter_email_sender: e03bdda7637bcd3539bfe718fddd980e9508efaa
flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4
flutter_local_authentication: 1172a4dd88f6306dadce067454e2c4caf07977bb
flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086
flutter_native_splash: edf599c81f74d093a4daf8e17bd7a018854bc778
flutter_local_notifications: df98d66e515e1ca797af436137b4459b160ad8c9
flutter_native_splash: df59bb2e1421aa0282cb2e95618af4dcb0c56c29
flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
fluttertoast: e9a18c7be5413da53898f660530c56f35edfba9c
local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3
fluttertoast: 21eecd6935e7064cc1fcb733a4c5a428f3f24f0f
local_auth_darwin: fa4b06454df7df8e97c18d7ee55151c57e7af0de
move_to_background: 39a5b79b26d577b0372cbe8a8c55e7aa9fcd3a2d
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
objective_c: 77e887b5ba1827970907e10e832eec1683f3431d
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
privacy_screen: 1a131c052ceb3c3659934b003b0d397c2381a24e
qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e
SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868
SDWebImage: f29024626962457f3470184232766516dee8dfea
Sentry: da60d980b197a46db0b35ea12cb8f39af48d8854
sentry_flutter: 2df8b0aab7e4aba81261c230cbea31c82a62dd1b
share_plus: 8875f4f2500512ea181eef553c3e27dba5135aad
share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
sodium_libs: 1faae17af662384acbd13e41867a0008cd2e2318
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
sqlite3: 0bb0e6389d824e40296f531b858a2a0b71c0d2fb
sqlite3_flutter_libs: c00457ebd31e59fa6bb830380ddba24d44fbcd3b
sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d
sqlite3: 3e82a2daae39ba3b41ae6ee84a130494585460fc
sqlite3_flutter_libs: 2c48c4ee7217fd653251975e43412250d5bcbbe2
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
PODFILE CHECKSUM: 78f002751f1a8f65042b8da97902ba4124271c5a

View File

@@ -26,6 +26,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
@@ -43,11 +44,13 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
enableGPUValidationMode = "1"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">

View File

@@ -2,20 +2,21 @@ import 'dart:async';
import 'dart:io';
import 'package:adaptive_theme/adaptive_theme.dart';
import 'package:ente_accounts/services/user_service.dart';
import 'package:ente_auth/core/configuration.dart';
import 'package:ente_auth/core/event_bus.dart';
import 'package:ente_auth/ente_theme_data.dart';
import 'package:ente_auth/events/signed_in_event.dart';
import 'package:ente_auth/events/signed_out_event.dart';
import "package:ente_auth/l10n/l10n.dart";
import 'package:ente_auth/l10n/l10n.dart';
import 'package:ente_auth/locale.dart';
import "package:ente_auth/onboarding/view/onboarding_page.dart";
import 'package:ente_auth/services/authenticator_service.dart';
import 'package:ente_auth/services/update_service.dart';
import 'package:ente_auth/services/user_service.dart';
import 'package:ente_auth/services/window_listener_service.dart';
import 'package:ente_auth/ui/home_page.dart';
import 'package:ente_auth/ui/settings/app_update_dialog.dart';
import 'package:ente_events/event_bus.dart';
import 'package:ente_events/models/signed_in_event.dart';
import 'package:ente_events/models/signed_out_event.dart';
import 'package:ente_strings/l10n/strings_localizations.dart';
import 'package:flutter/foundation.dart';
import "package:flutter/material.dart";
import 'package:flutter_localizations/flutter_localizations.dart';
@@ -40,7 +41,7 @@ class _AppState extends State<App>
late StreamSubscription<SignedOutEvent> _signedOutEvent;
late StreamSubscription<SignedInEvent> _signedInEvent;
Locale? locale;
setLocale(Locale newLocale) {
void setLocale(Locale newLocale) {
setState(() {
locale = newLocale;
});
@@ -82,7 +83,7 @@ class _AppState extends State<App>
UpdateService.instance.getLatestVersionInfo(),
);
},
barrierColor: Colors.black.withOpacity(0.85),
barrierColor: Colors.black.withValues(alpha: 0.85),
);
});
}
@@ -131,6 +132,7 @@ class _AppState extends State<App>
localeListResolutionCallback: localResolutionCallBack,
localizationsDelegates: const [
AppLocalizations.delegate,
StringsLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
@@ -150,6 +152,7 @@ class _AppState extends State<App>
localeListResolutionCallback: localResolutionCallBack,
localizationsDelegates: const [
AppLocalizations.delegate,
StringsLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
@@ -199,9 +202,11 @@ class _AppState extends State<App>
switch (menuItem.key) {
case 'hide_window':
windowManager.hide();
windowManager.setSkipTaskbar(true);
break;
case 'show_window':
windowManager.show();
windowManager.setSkipTaskbar(false);
break;
case 'exit_app':
windowManager.destroy();

View File

@@ -27,10 +27,8 @@ Future<void> bootstrap(FutureOr<Widget> Function() builder) async {
await runZonedGuarded(
() async {
await BlocOverrides.runZoned(
() async => runApp(await builder()),
blocObserver: AppBlocObserver(),
);
Bloc.observer = AppBlocObserver();
runApp(await builder());
},
(error, stackTrace) => log(error.toString(), stackTrace: stackTrace),
);

View File

@@ -1,95 +1,36 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io' as io;
import 'dart:typed_data';
import 'package:bip39/bip39.dart' as bip39;
import 'package:ente_auth/core/constants.dart';
import 'package:ente_auth/core/event_bus.dart';
import 'package:ente_auth/events/endpoint_updated_event.dart';
import 'package:ente_auth/events/signed_in_event.dart';
import 'package:ente_auth/events/signed_out_event.dart';
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/directory_utils.dart';
import 'package:ente_base/models/database.dart';
import 'package:ente_configuration/base_configuration.dart';
import 'package:ente_crypto_dart/ente_crypto_dart.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:logging/logging.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
import 'package:tuple/tuple.dart';
class Configuration {
class Configuration extends BaseConfiguration {
Configuration._privateConstructor();
static final Configuration instance = Configuration._privateConstructor();
static const endpoint = String.fromEnvironment(
"endpoint",
defaultValue: kDefaultProductionEndpoint,
);
static const emailKey = "email";
static const keyAttributesKey = "key_attributes";
static const lastTempFolderClearTimeKey = "last_temp_folder_clear_time";
static const keyKey = "key";
static const secretKeyKey = "secret_key";
static const authSecretKeyKey = "auth_secret_key";
static const offlineAuthSecretKey = "offline_auth_secret_key";
static const tokenKey = "token";
static const encryptedTokenKey = "encrypted_token";
static const userIDKey = "user_id";
static const hasMigratedSecureStorageKey = "has_migrated_secure_storage";
static const hasOptedForOfflineModeKey = "has_opted_for_offline_mode";
static const endPointKey = "endpoint";
final List<String> onlineSecureKeys = [
keyKey,
secretKeyKey,
authSecretKeyKey,
];
final kTempFolderDeletionTimeBuffer = const Duration(days: 1).inMicroseconds;
static final _logger = Logger("Configuration");
String? _cachedToken;
late SharedPreferences _preferences;
String? _key;
String? _secretKey;
String? _authSecretKey;
String? _offlineAuthKey;
late FlutterSecureStorage _secureStorage;
late String _tempDirectory;
String? _volatilePassword;
Future<void> init() async {
@override
Future<void> init(List<EnteBaseDatabase> dbs) async {
await super.init(dbs);
_preferences = await SharedPreferences.getInstance();
sqfliteFfiInit();
_secureStorage = const FlutterSecureStorage(
iOptions: IOSOptions(
accessibility: KeychainAccessibility.first_unlock_this_device,
),
);
_tempDirectory = (await DirectoryUtils.getDirectoryForInit()).path;
final tempDirectory = io.Directory(_tempDirectory);
try {
final currentTime = DateTime.now().microsecondsSinceEpoch;
if (tempDirectory.existsSync() &&
(_preferences.getInt(lastTempFolderClearTimeKey) ?? 0) <
(currentTime - kTempFolderDeletionTimeBuffer)) {
await tempDirectory.delete(recursive: true);
await _preferences.setInt(lastTempFolderClearTimeKey, currentTime);
_logger.info("Cleared temp folder");
} else {
_logger.info("Skipping temp folder clear");
}
} catch (e) {
_logger.warning(e);
}
tempDirectory.createSync(recursive: true);
await _initOnlineAccount();
sqfliteFfiInit();
await _initOfflineAccount();
}
@@ -99,303 +40,10 @@ class Configuration {
);
}
Future<void> _initOnlineAccount() async {
if (!_preferences.containsKey(tokenKey)) {
for (final key in onlineSecureKeys) {
unawaited(
_secureStorage.delete(
key: key,
),
);
}
} else {
_key = await _secureStorage.read(
key: keyKey,
);
_secretKey = await _secureStorage.read(
key: secretKeyKey,
);
_authSecretKey = await _secureStorage.read(
key: authSecretKeyKey,
);
if (_key == null) {
await logout(autoLogout: true);
}
}
}
@override
Future<void> logout({bool autoLogout = false}) async {
await _preferences.clear();
for (String key in onlineSecureKeys) {
await _secureStorage.delete(
key: key,
);
}
await AuthenticatorDB.instance.clearTable();
_key = null;
_cachedToken = null;
_secretKey = null;
_authSecretKey = null;
Bus.instance.fire(SignedOutEvent());
}
Future<KeyGenResult> generateKey(String password) async {
// Create a master key
final masterKey = CryptoUtil.generateKey();
// Create a recovery key
final recoveryKey = CryptoUtil.generateKey();
// Encrypt master key and recovery key with each other
final encryptedMasterKey = CryptoUtil.encryptSync(masterKey, recoveryKey);
final encryptedRecoveryKey = CryptoUtil.encryptSync(recoveryKey, masterKey);
// Derive a key from the password that will be used to encrypt and
// decrypt the master key
final kekSalt = CryptoUtil.getSaltToDeriveKey();
final derivedKeyResult = await CryptoUtil.deriveSensitiveKey(
utf8.encode(password),
kekSalt,
);
final loginKey = await CryptoUtil.deriveLoginKey(derivedKeyResult.key);
// Encrypt the key with this derived key
final encryptedKeyData =
CryptoUtil.encryptSync(masterKey, derivedKeyResult.key);
// Generate a public-private keypair and encrypt the latter
final keyPair = CryptoUtil.generateKeyPair();
final encryptedSecretKeyData =
CryptoUtil.encryptSync(keyPair.secretKey.extractBytes(), masterKey);
final attributes = KeyAttributes(
CryptoUtil.bin2base64(kekSalt),
CryptoUtil.bin2base64(encryptedKeyData.encryptedData!),
CryptoUtil.bin2base64(encryptedKeyData.nonce!),
CryptoUtil.bin2base64(keyPair.publicKey),
CryptoUtil.bin2base64(encryptedSecretKeyData.encryptedData!),
CryptoUtil.bin2base64(encryptedSecretKeyData.nonce!),
derivedKeyResult.memLimit,
derivedKeyResult.opsLimit,
CryptoUtil.bin2base64(encryptedMasterKey.encryptedData!),
CryptoUtil.bin2base64(encryptedMasterKey.nonce!),
CryptoUtil.bin2base64(encryptedRecoveryKey.encryptedData!),
CryptoUtil.bin2base64(encryptedRecoveryKey.nonce!),
);
final privateAttributes = PrivateKeyAttributes(
CryptoUtil.bin2base64(masterKey),
CryptoUtil.bin2hex(recoveryKey),
CryptoUtil.bin2base64(keyPair.secretKey.extractBytes()),
);
return KeyGenResult(attributes, privateAttributes, loginKey);
}
Future<Tuple2<KeyAttributes, Uint8List>> getAttributesForNewPassword(
String password,
) async {
// Get master key
final masterKey = getKey();
// Derive a key from the password that will be used to encrypt and
// decrypt the master key
final kekSalt = CryptoUtil.getSaltToDeriveKey();
final derivedKeyResult = await CryptoUtil.deriveSensitiveKey(
utf8.encode(password),
kekSalt,
);
final loginKey = await CryptoUtil.deriveLoginKey(derivedKeyResult.key);
// Encrypt the key with this derived key
final encryptedKeyData =
CryptoUtil.encryptSync(masterKey!, derivedKeyResult.key);
final existingAttributes = getKeyAttributes();
final updatedAttributes = existingAttributes!.copyWith(
kekSalt: CryptoUtil.bin2base64(kekSalt),
encryptedKey: CryptoUtil.bin2base64(encryptedKeyData.encryptedData!),
keyDecryptionNonce: CryptoUtil.bin2base64(encryptedKeyData.nonce!),
memLimit: derivedKeyResult.memLimit,
opsLimit: derivedKeyResult.opsLimit,
);
return Tuple2(updatedAttributes, loginKey);
}
// decryptSecretsAndGetLoginKey decrypts the master key and recovery key
// with the given password and save them in local secure storage.
// This method also returns the keyEncKey that can be used for performing
// SRP setup for existing users.
Future<Uint8List> decryptSecretsAndGetKeyEncKey(
String password,
KeyAttributes attributes, {
Uint8List? keyEncryptionKey,
}) async {
_logger.info('Start decryptAndSaveSecrets');
keyEncryptionKey ??= await CryptoUtil.deriveKey(
utf8.encode(password),
CryptoUtil.base642bin(attributes.kekSalt),
attributes.memLimit,
attributes.opsLimit,
);
_logger.info('user-key done');
Uint8List key;
try {
key = CryptoUtil.decryptSync(
CryptoUtil.base642bin(attributes.encryptedKey),
keyEncryptionKey,
CryptoUtil.base642bin(attributes.keyDecryptionNonce),
);
} catch (e) {
_logger.severe('master-key failed, incorrect password?', e);
throw Exception("Incorrect password");
}
_logger.info("master-key done");
await setKey(CryptoUtil.bin2base64(key));
final secretKey = CryptoUtil.decryptSync(
CryptoUtil.base642bin(attributes.encryptedSecretKey),
key,
CryptoUtil.base642bin(attributes.secretKeyDecryptionNonce),
);
_logger.info("secret-key done");
await setSecretKey(CryptoUtil.bin2base64(secretKey));
final token = CryptoUtil.openSealSync(
CryptoUtil.base642bin(getEncryptedToken()!),
CryptoUtil.base642bin(attributes.publicKey),
secretKey,
);
_logger.info('appToken done');
await setToken(
CryptoUtil.bin2base64(token, urlSafe: true),
);
return keyEncryptionKey;
}
Future<void> recover(String recoveryKey) async {
// check if user has entered mnemonic code
if (recoveryKey.contains(' ')) {
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(
'\nRecovery code should have $mnemonicKeyWordCount words, '
'found ${split.length} words instead.$wordThatIsFollowedByEmptySpaceInSplit',
);
}
recoveryKey = bip39.mnemonicToEntropy(recoveryKey);
}
final attributes = getKeyAttributes();
Uint8List masterKey;
try {
masterKey = await CryptoUtil.decrypt(
CryptoUtil.base642bin(attributes!.masterKeyEncryptedWithRecoveryKey),
CryptoUtil.hex2bin(recoveryKey),
CryptoUtil.base642bin(attributes.masterKeyDecryptionNonce),
);
} catch (e) {
_logger.severe(e);
rethrow;
}
await setKey(CryptoUtil.bin2base64(masterKey));
final secretKey = CryptoUtil.decryptSync(
CryptoUtil.base642bin(attributes.encryptedSecretKey),
masterKey,
CryptoUtil.base642bin(attributes.secretKeyDecryptionNonce),
);
await setSecretKey(CryptoUtil.bin2base64(secretKey));
final token = CryptoUtil.openSealSync(
CryptoUtil.base642bin(getEncryptedToken()!),
CryptoUtil.base642bin(attributes.publicKey),
secretKey,
);
await setToken(
CryptoUtil.bin2base64(token, urlSafe: true),
);
}
String getHttpEndpoint() {
return _preferences.getString(endPointKey) ?? endpoint;
}
Future<void> setHttpEndpoint(String endpoint) async {
await _preferences.setString(endPointKey, endpoint);
Bus.instance.fire(EndpointUpdatedEvent());
}
String? getToken() {
_cachedToken ??= _preferences.getString(tokenKey);
return _cachedToken;
}
bool isLoggedIn() {
return getToken() != null;
}
Future<void> setToken(String token) async {
_cachedToken = token;
await _preferences.setString(tokenKey, token);
Bus.instance.fire(SignedInEvent());
}
Future<void> setEncryptedToken(String encryptedToken) async {
await _preferences.setString(encryptedTokenKey, encryptedToken);
}
String? getEncryptedToken() {
return _preferences.getString(encryptedTokenKey);
}
String? getEmail() {
return _preferences.getString(emailKey);
}
Future<void> setEmail(String email) async {
await _preferences.setString(emailKey, email);
}
int? getUserID() {
return _preferences.getInt(userIDKey);
}
Future<void> setUserID(int userID) async {
await _preferences.setInt(userIDKey, userID);
}
Future<void> setKeyAttributes(KeyAttributes attributes) async {
await _preferences.setString(keyAttributesKey, attributes.toJson());
}
KeyAttributes? getKeyAttributes() {
final jsonValue = _preferences.getString(keyAttributesKey);
if (jsonValue == null) {
return null;
} else {
return KeyAttributes.fromJson(jsonValue);
}
}
Future<void> setKey(String key) async {
_key = key;
await _secureStorage.write(
key: keyKey,
value: key,
);
}
Future<void> setSecretKey(String? secretKey) async {
_secretKey = secretKey;
await _secureStorage.write(
key: secretKeyKey,
value: secretKey,
);
await super.logout();
}
Future<void> setAuthSecretKey(String? authSecretKey) async {
@@ -406,14 +54,6 @@ class Configuration {
);
}
Uint8List? getKey() {
return _key == null ? null : CryptoUtil.base642bin(_key!);
}
Uint8List? getSecretKey() {
return _secretKey == null ? null : CryptoUtil.base642bin(_secretKey!);
}
Uint8List? getAuthSecretKey() {
return _authSecretKey == null
? null
@@ -426,24 +66,6 @@ class Configuration {
: CryptoUtil.base642bin(_offlineAuthKey!);
}
Uint8List getRecoveryKey() {
final keyAttributes = getKeyAttributes()!;
return CryptoUtil.decryptSync(
CryptoUtil.base642bin(keyAttributes.recoveryKeyEncryptedWithMasterKey),
getKey()!,
CryptoUtil.base642bin(keyAttributes.recoveryKeyDecryptionNonce),
);
}
// Caution: This directory is cleared on app start
String getTempDirectory() {
return _tempDirectory;
}
bool hasConfiguredAccount() {
return getToken() != null && _key != null;
}
bool hasOptedForOfflineMode() {
return _preferences.getBool(hasOptedForOfflineModeKey) ?? false;
}
@@ -464,16 +86,4 @@ class Configuration {
}
await _preferences.setBool(hasOptedForOfflineModeKey, true);
}
void setVolatilePassword(String volatilePassword) {
_volatilePassword = volatilePassword;
}
void resetVolatilePassword() {
_volatilePassword = null;
}
String? getVolatilePassword() {
return _volatilePassword;
}
}

View File

@@ -39,7 +39,7 @@ final lightThemeData = ThemeData(
bodyLarge: const TextStyle(color: Colors.orange),
),
cardColor: const Color.fromRGBO(250, 250, 250, 1.0),
dialogTheme: const DialogTheme().copyWith(
dialogTheme: const DialogThemeData().copyWith(
backgroundColor: const Color.fromRGBO(250, 250, 250, 1.0), //
titleTextStyle: const TextStyle(
color: Colors.black,
@@ -150,7 +150,7 @@ final darkThemeData = ThemeData(
elevation: 0,
),
cardColor: const Color.fromRGBO(10, 15, 15, 1.0),
dialogTheme: const DialogTheme().copyWith(
dialogTheme: const DialogThemeData().copyWith(
backgroundColor: const Color.fromRGBO(15, 15, 15, 1.0),
titleTextStyle: const TextStyle(
color: Colors.white,
@@ -275,7 +275,7 @@ TextTheme _buildTextTheme(Color textColor) {
fontWeight: FontWeight.w500,
),
bodySmall: TextStyle(
color: textColor.withOpacity(0.4),
color: textColor.withValues(alpha: 0.4),
fontSize: 10,
fontWeight: FontWeight.w500,
),
@@ -343,7 +343,7 @@ extension CustomColorScheme on ColorScheme {
: const Color.fromRGBO(48, 48, 48, 0.5);
Color get iconColor => brightness == Brightness.light
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.75)
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.75)
: const Color.fromRGBO(255, 255, 255, 1);
Color get bgColorForQuestions => brightness == Brightness.light
@@ -354,7 +354,7 @@ extension CustomColorScheme on ColorScheme {
Color get cupertinoPickerTopColor => brightness == Brightness.light
? const Color.fromARGB(255, 238, 238, 238)
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.1);
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.1);
Color get stepProgressUnselectedColor => brightness == Brightness.light
? const Color.fromRGBO(196, 196, 196, 0.6)
@@ -381,20 +381,20 @@ extension CustomColorScheme on ColorScheme {
: const Color.fromRGBO(20, 20, 20, 1);
Color get galleryThumbDrawColor => brightness == Brightness.light
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.8)
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.5);
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.8)
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.5);
Color get backupEnabledBgColor => brightness == Brightness.light
? const Color.fromRGBO(230, 230, 230, 0.95)
: const Color.fromRGBO(10, 40, 40, 0.3);
Color get dotsIndicatorActiveColor => brightness == Brightness.light
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.5)
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.5);
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.5)
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.5);
Color get dotsIndicatorInactiveColor => brightness == Brightness.light
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.12)
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.12);
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.12)
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.12);
Color get toastTextColor => brightness == Brightness.light
? const Color.fromRGBO(255, 255, 255, 1)
@@ -409,8 +409,8 @@ extension CustomColorScheme on ColorScheme {
: const Color.fromRGBO(100, 100, 100, 1);
Color get themeSwitchInactiveIconColor => brightness == Brightness.light
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.5)
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.5);
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.5)
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.5);
Color get searchResultsColor => brightness == Brightness.light
? const Color.fromRGBO(245, 245, 245, 1.0)
@@ -421,8 +421,8 @@ extension CustomColorScheme on ColorScheme {
: const Color.fromRGBO(150, 150, 150, 1);
Color get searchResultsBackgroundColor => brightness == Brightness.light
? Colors.black.withOpacity(0.32)
: Colors.black.withOpacity(0.64);
? Colors.black.withValues(alpha: 0.32)
: Colors.black.withValues(alpha: 0.64);
Color get codeCardBackgroundColor => brightness == Brightness.light
? const Color.fromRGBO(246, 246, 246, 1)

View File

@@ -1,3 +1,3 @@
import 'package:ente_auth/events/event.dart';
import 'package:ente_events/models/event.dart';
class CodesUpdatedEvent extends Event {}

View File

@@ -1,3 +0,0 @@
import 'package:ente_auth/events/event.dart';
class EndpointUpdatedEvent extends Event {}

View File

@@ -1,3 +1,3 @@
import 'package:ente_auth/events/event.dart';
import 'package:ente_events/models/event.dart';
class IconsChangedEvent extends Event {}

View File

@@ -1,5 +0,0 @@
import 'package:ente_auth/events/event.dart';
// NotificationEvent event is used to re-fresh the UI to show latest notification
// (if any)
class NotificationEvent extends Event {}

View File

@@ -1,3 +0,0 @@
import 'package:ente_auth/events/event.dart';
class SignedInEvent extends Event {}

View File

@@ -1,3 +1 @@
import 'package:ente_auth/events/event.dart';
class SignedOutEvent extends Event {}
// TODO Implement this library.

View File

@@ -1,3 +1,3 @@
import 'package:ente_auth/events/event.dart';
import 'package:ente_events/models/event.dart';
class TriggerLogoutEvent extends Event {}

View File

@@ -1,8 +1,8 @@
import 'package:dio/dio.dart';
import 'package:ente_auth/core/errors.dart';
import 'package:ente_auth/core/network.dart';
import 'package:ente_auth/models/authenticator/auth_entity.dart';
import 'package:ente_auth/models/authenticator/auth_key.dart';
import 'package:ente_network/network.dart';
class AuthenticatorGateway {
late Dio _enteDio;

View File

@@ -88,6 +88,8 @@
"useRecoveryKey": "Χρήση κλειδιού ανάκτησης",
"incorrectPasswordTitle": "Λάθος κωδικός πρόσβασης",
"welcomeBack": "Καλωσορίσατε και πάλι!",
"emailAlreadyRegistered": "Το email είναι ήδη καταχωρημένο.",
"emailNotRegistered": "Το email δεν έχει καταχωρηθεί.",
"madeWithLoveAtPrefix": "φτιαγμένη με ❤️ στο ",
"supportDevs": "Εγγραφείτε στο <bold-green>ente</bold-green> για να μας υποστηρίξετε",
"supportDiscount": "Χρησιμοποιήστε τον κωδικό κουπονιού \"AUTH\" για να λάβετε 10% έκπτωση για τον πρώτο χρόνο",
@@ -171,6 +173,7 @@
"invalidQRCode": "Μη έγκυρος κωδικός QR",
"noRecoveryKeyTitle": "Χωρίς κλειδί ανάκτησης;",
"enterEmailHint": "Εισάγετε τη διεύθυνση email σας",
"enterNewEmailHint": "Εισάγετε την διεύθυνση ηλ. ταχυδρομείου σας",
"invalidEmailTitle": "Μη έγκυρη διεύθυνση email",
"invalidEmailMessage": "Παρακαλούμε εισάγετε μια έγκυρη διεύθυνση email.",
"deleteAccount": "Διαγραφή λογαριασμού",
@@ -258,6 +261,10 @@
"areYouSureYouWantToLogout": "Είστε σίγουροι ότι θέλετε να αποσυνδεθείτε;",
"yesLogout": "Ναι, αποσύνδεση",
"exit": "Εξοδος",
"theme": "Θέμα",
"lightTheme": "Φωτεινό",
"darkTheme": "Σκοτεινό",
"systemTheme": "Σύστημα",
"verifyingRecoveryKey": "Επαλήθευση κλειδιού ανάκτησης...",
"recoveryKeyVerified": "Το κλειδί ανάκτησης επαληθεύτηκε",
"recoveryKeySuccessBody": "Τέλεια! Το κλειδί ανάκτησης σας είναι έγκυρο. Σας ευχαριστούμε για την επαλήθευση.\n\nΠαρακαλώ θυμηθείτε να κρατήσετε το κλειδί ανάκτησης σας και σε αντίγραφο ασφαλείας.",
@@ -490,5 +497,24 @@
"appLockNotEnabled": "Το κλείδωμα εφαρμογής δεν είναι ενεργοποιημένο",
"appLockNotEnabledDescription": "Παρακαλώ ενεργοποιήστε το κλείδωμα εφαρμογής μέσω της επιλογής Ασφάλεια > Κλείδωμα εφαρμογής",
"authToViewPasskey": "Παρακαλώ πιστοποιηθείτε για να δείτε το κλειδί πρόσβασης",
"appLockOfflineModeWarning": "Έχετε επιλέξει να προχωρήσετε χωρίς αντίγραφα ασφαλείας. Αν ξεχάσετε τον κωδικό της εφαρμογής, θα κλειδωθείτε από την πρόσβαση στα δεδομένα σας."
"appLockOfflineModeWarning": "Έχετε επιλέξει να προχωρήσετε χωρίς αντίγραφα ασφαλείας. Αν ξεχάσετε τον κωδικό της εφαρμογής, θα κλειδωθείτε από την πρόσβαση στα δεδομένα σας.",
"duplicateCodes": "Διπλότυποι κωδικοί",
"noDuplicates": "✨ Δεν υπάρχουν διπλότυπα",
"youveNoDuplicateCodesThatCanBeCleared": "Δεν υπάρχουν διπλότυπα αρχεία που μπορούν να εκκαθαριστούν",
"deduplicateCodes": "Διπλότυποι κωδικοί",
"deselectAll": "Αποεπιλογή όλων",
"selectAll": "Επιλογή όλων",
"deleteDuplicates": "Διαγραφή διπλότυπων",
"plainHTML": "Απλό HTML",
"dropReviewiOS": "Αφήστε μια κριτική στο App Store",
"dropReviewAndroid": "Αφήστε μια κριτική στο Play Store",
"giveUsAStarOnGithub": "Δώστε μας ένα αστέρι στο Github",
"free5GB": "5GB δωρεάν στο <bold-green>ente</bold-green> Photos",
"freeStorageOffer": "10% έκπτωση στο <bold-green>ente</bold-green> photos",
"freeStorageOfferDescription": "Χρησιμοποιήστε τον κωδικό \"AUTH\" για να λάβετε 10% έκπτωση για τον πρώτο χρόνο",
"advanced": "Για προχωρημένους",
"algorithm": "Αλγόριθμος",
"type": "Τύπος",
"period": "Περίοδος",
"digits": "Ψηφία"
}

View File

@@ -19,7 +19,7 @@
"pleaseVerifyDetails": "Kontrollera dina detaljer och försök igen",
"codeIssuerHint": "Utfärdare",
"codeSecretKeyHint": "Secret Key",
"secret": "Säkerhets nyckel",
"secret": "Säkerhetsnyckel",
"all": "Alla",
"notes": "Anteckningar",
"notesLengthLimit": "Anteckningar kan vara högst {count} tecken långa",

View File

@@ -10,7 +10,7 @@
"onBoardingGetStarted": "ጀምር",
"setupFirstAccount": "ናይ መጀመርታ ሕሳብካ ኣዳል",
"importScanQrCode": "QR ኮድ ስካን ግበር",
"qrCode": "ኪዊኣር ስርዓት",
"qrCode": "ኪዊኣር ኮድ",
"importEnterSetupKey": "ምድላው መፍትሕ ኣእቱ",
"importAccountPageTitle": "ዝርዝር ሕሳብ ኣእትዉ",
"secretCanNotBeEmpty": "ምስጢር ባዶ ኪኸውን ኣይክእልን እዩ",
@@ -19,6 +19,8 @@
"pleaseVerifyDetails": "በጃኹም ዝርዝር-ሓበሬታ ኣረጋግጹ እሞ እንደገና ፈትኑ",
"codeIssuerHint": "ኣዋጂ",
"codeSecretKeyHint": "ምስጢራዊ መፍትሕ",
"all": "ኩሉ",
"notes": "መዘኻኸሪታት",
"codeAccountHint": "ሕሳብ (you@domain.com)",
"codeTagHint": "ልጣፍ",
"accountKeyType": "ዓይነት ቁልፊ",
@@ -30,12 +32,12 @@
"loggingOut": "ወጸ...",
"timeBasedKeyType": "ግዜ እተመስረተ (TOTP)",
"counterBasedKeyType": "ቆጻሪ እተመስረተ (TOTP)",
"saveAction": "",
"saveAction": "ዓቅብ",
"nextTotpTitle": "ቀጽሊ",
"deleteCodeTitle": "ኮድ ምድምሳስ፧",
"deleteCodeMessage": "ነዚ ኮድ ክትድምስሶ ከም እትደሊ ርግጸኛ ዲኻ፧ እዚ ተግባር ንድሕሪት ዘይምለስ እዩ።",
"deleteCodeTitle": "ኮድ ይደምሰሰ፧",
"deleteCodeMessage": "ነዚ ኮድ ክትድምስሶ ከም እትደሊ ርግጸኛ ዲኻ፧ እዚ ተግባር ንድሕሪት ዘይምለስ ኣይኮነን።",
"viewLogsAction": "ምዝገባታት ርአ",
"sendLogsDescription": "",
"sendLogsDescription": "This will send across logs to help us debug your issue. While we take precautions to ensure that sensitive information is not logged, we encourage you to view these logs before sharing them.",
"preparingLogsTitle": "ምዝገባ ድላው...",
"emailLogsTitle": "መዝገብ ኢ-መይል",
"emailLogsMessage": "በጃኹም ነቲ መዝገብ ናብ {email} ስደዱሉ",
@@ -67,7 +69,7 @@
"pleaseWait": "በጃኻ ተጸበ...",
"generatingEncryptionKeysTitle": "ናይ ምስጢራዊ ቁልፊ ዪፍጠር...",
"recreatePassword": "ቃለ-ምስጢር እንደገና ፍጠር",
"recreatePasswordMessage": "እዛ ሕጂ ዘላ ኤለክትሮኒካዊት መሳርሒት ነቲ passwordካ ንምርግጋጽ እኹል ሓይሊ ስለ ዘይብላ ምስ ኵሉ መሳርሒታት ብዚሰማማዕ መገዲ ሓንሳእ እንደገና ኸነሐድሶ ኣሎና ።\n\nበጃኻ በቲ ምሕዋይ-መፍትሕ ኣቲኻ ቃለ-ምስጢር ኣሐድሶ (እንተ ደሊኻ ነታ ቃለ-ምስጢር እንደገና ኽትጥቀመላ ትኽእል ኢኻ)።",
"recreatePasswordMessage": "እዛ ሕጂ ዘላ ኤለክትሮኒካዊት መሳርሒት ነቲ passwordካ ንምርግጋጽ እኹል ሓይሊ ስለ ዘይብላ ምስ ኵሉ መሳርሒታት ብዚሰማማዕ መገዲ ሓንሳእ እንደገና ኸነሐድሶ ኣሎና። \n\nበጃኻ በቲ ምሕዋይ-መፍትሕ ኣቲኻ ቃለ-ምስጢር ኣሐድሶ (እንተ ደሊኻ ነታ ቃለ-ምስጢር እንደገና ኽትጥቀመላ ትኽእል ኢኻ)።",
"useRecoveryKey": "ምሕዋይ መፍትሕ ተጠቐም",
"incorrectPasswordTitle": "ግጉይ ቃለ-ምስጢር",
"welcomeBack": "እንኳዕ ብደሓን ተመለስካ!",

View File

@@ -1,8 +1,9 @@
import "package:ente_auth/l10n/arb/app_localizations.dart"
show AppLocalizations;
import "package:flutter/widgets.dart";
import "package:flutter_gen/gen_l10n/app_localizations.dart";
export "package:flutter_gen/gen_l10n/app_localizations.dart";
export "package:ente_auth/l10n/arb/app_localizations.dart"
show AppLocalizations;
extension AppLocalizationsX on BuildContext {
AppLocalizations get l10n => AppLocalizations.of(this);
}
}

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