Compare commits

..

1996 Commits

Author SHA1 Message Date
Neeraj Gupta
f7f1227fa4 Bump version 2025-07-02 14:14:58 +05:30
Neeraj Gupta
5ea93c0935 Merge branch 'release_mob_jun_25' of https://github.com/ente-io/auth into release_mob_jun_25 2025-07-02 14:14:00 +05:30
Neeraj Gupta
943fffbcf9 Merge branch 'main' of https://github.com/ente-io/auth into release_mob_jun_25 2025-07-02 14:13:50 +05:30
Neeraj
81e40b0872 [mob][photos] additional fixes for widgets (#6428)
## Description

Some more fixes for widgets.

## Tests
2025-07-02 14:13:00 +05:30
Ashil
cbe7c32150 [mob][photos] Improved handling of high resolution image rendering (#6442)
## Description

Previously, images larger than 160MP were downscaled to 16MP to avoid
crashes caused by
[this](https://github.com/flutter/flutter/issues/110331) flutter issue.

This update lowers the threshold to 100MP and increases the downscaling
resolution to 50MP, for a better balance between performance and image
quality.

## Tests

- Tested with 150MP and 200MP images on a Samsung A54 (8GB RAM).
- Verified that rendering a 50MP downscaled image increases memory
usage, but remains within acceptable limits.
2025-07-02 13:56:41 +05:30
ashilkn
06a30078da Decrease threshold of Pixels needed in image to categorize it as a 'too large image' and decrease the extent of compression from 16MP to 50MP of such images. Large images are rendered in lower resolution so that the app doesn't crash 2025-07-02 13:41:09 +05:30
Prateek Sunal
97bdcffd9d fix: isBackground check 2025-07-02 13:12:33 +05:30
Prateek Sunal
162a2efe71 fix: move fav init to album service 2025-07-02 12:29:42 +05:30
Manav Rathi
3a46f9994f [web] Remove axios (#6440) 2025-07-02 09:40:32 +05:30
Ashil
f053b7962b [mob] Update launch.json in mobile docs to include cronetHttpNoPlay=true for android (#6439) 2025-07-02 09:21:33 +05:30
Neeraj
76a479064e [mob] Update change log order (#6438)
## Description

## Tests
2025-07-02 09:19:57 +05:30
Manav Rathi
ffb19c3a65 Prune 2025-07-02 09:17:03 +05:30
ashilkn
ddcfd2ff43 Update launch.json in mobile docs to include cronetHttpNoPlay=true for android 2025-07-02 09:15:38 +05:30
Neeraj Gupta
3c7b1c6c5e [mob] Update change log order 2025-07-02 09:15:02 +05:30
Manav Rathi
d04ee0aa71 Prune 2025-07-02 09:07:42 +05:30
Manav Rathi
ce020d4398 Use 2025-07-02 08:59:03 +05:30
Manav Rathi
028a5cf827 Update 2025-07-02 08:47:52 +05:30
Manav Rathi
c60288b0df Simplify 2025-07-02 08:24:23 +05:30
Manav Rathi
2fba8a2705 Extract sort 2025-07-02 07:29:24 +05:30
Manav Rathi
54aec6e0db Touch ups 2025-07-01 20:50:17 +05:30
Manav Rathi
7edb1fab7b Sketch 2025-07-01 20:31:34 +05:30
Manav Rathi
21738995cc Sketch 1 2025-07-01 20:03:44 +05:30
Manav Rathi
b752af7046 Swap 2025-07-01 19:52:04 +05:30
Manav Rathi
60b044e61a Impl 2025-07-01 19:44:43 +05:30
Manav Rathi
98364405c6 Sketch 1 2025-07-01 19:42:27 +05:30
Manav Rathi
23558a2584 [desktop] Start next release cycle (#6432) 2025-07-01 19:22:09 +05:30
Manav Rathi
035f40dc0a Start next release cycle 2025-07-01 19:20:35 +05:30
Prateek Sunal
058543b287 chore: bump version 2025-07-01 19:11:36 +05:30
Prateek Sunal
dff77233db Merge remote-tracking branch 'origin/widget' into release_mob_jun_25 2025-07-01 19:11:24 +05:30
Prateek Sunal
910a64dc1c fix: refresh tap 2025-07-01 19:11:13 +05:30
Manav Rathi
8c5bc316f9 photosd-v1.7.14 (#6431) 2025-07-01 18:44:47 +05:30
Manav Rathi
645bb485a7 photosd-v1.7.14 2025-07-01 18:43:17 +05:30
Prateek Sunal
dab331535b chore: bump version 2025-07-01 18:39:21 +05:30
Prateek Sunal
3873946046 Merge remote-tracking branch 'origin/widget' into release_mob_jun_25 2025-07-01 18:39:04 +05:30
Prateek Sunal
68fa4d87eb Merge remote-tracking branch 'origin/main' into widget 2025-07-01 18:38:06 +05:30
Prateek Sunal
f527624027 fix: only pick from non cache for memories when has any widgets 2025-07-01 18:37:30 +05:30
Prateek Sunal
fb06332272 fix: home widget sync in background 2025-07-01 18:35:59 +05:30
Manav Rathi
4fda4b5773 [web] Public albums internal code improvements - Part 2 (#6430) 2025-07-01 18:35:27 +05:30
Prateek Sunal
68efbc2bed fix: don't select first two people by default 2025-07-01 18:27:01 +05:30
Manav Rathi
e47d6a8ece Update 2025-07-01 18:23:34 +05:30
Prateek Sunal
09466f05c6 fix: get top two faces logic 2025-07-01 18:10:24 +05:30
Manav Rathi
738088e8a5 Update 2025-07-01 18:09:59 +05:30
Manav Rathi
54dde95545 Sketch 2025-07-01 17:59:08 +05:30
Prateek Sunal
7ded133caf chore: fix expandedHeight scaling 2025-07-01 17:57:56 +05:30
Prateek Sunal
fe2f066733 fix: albums logic 2025-07-01 17:52:54 +05:30
Manav Rathi
5034fb4496 Update 2025-07-01 17:43:14 +05:30
Manav Rathi
b854730533 Sketch 2025-07-01 17:39:00 +05:30
Manav Rathi
a538e852bd Update 2025-07-01 17:28:13 +05:30
Manav Rathi
436a5811cb Use 2025-07-01 17:16:37 +05:30
Manav Rathi
27a400743c Sketch 2025-07-01 17:14:31 +05:30
Prateek Sunal
4e692fce1f fix: collection service is not initialized 2025-07-01 17:01:44 +05:30
Neeraj Gupta
0f13558ae3 Merge branch 'main' into release_mob_jun_25 2025-07-01 16:55:08 +05:30
Neeraj
09de1f2d46 [mob] Minor copy change (#6429)
## Description

## Tests
2025-07-01 16:54:18 +05:30
Neeraj Gupta
2caf773bbe Update changelog title 2025-07-01 16:53:53 +05:30
Prateek Sunal
edc015d589 Merge remote-tracking branch 'origin/main' into widget 2025-07-01 16:51:30 +05:30
Prateek Sunal
d5707a030b fix: rearrange the priority of execution 2025-07-01 16:51:22 +05:30
Neeraj Gupta
a2bb263c49 Bump version 2025-07-01 16:32:56 +05:30
Neeraj
8ed7fa0e4c [mob][photos] fix widget display (#6425)
## Description

The total widget count was not updated properly hence widget had no idea
of it getting updated.

This PR fixes that.

## Tests
2025-07-01 16:16:15 +05:30
Ashil
4f9e9f30aa [mob][photos] Handle play/pause animation in memory when bottom sheet open (#6427)
## Description
Play/pause memory animation when file bottom sheet is close/open
respectively
2025-07-01 16:15:55 +05:30
ashilkn
f08f72c46a Use better naming convetion 2025-07-01 16:15:30 +05:30
AmanRajSinghMourya
4885c13d86 Add ToggleMemoryAnimationEvent for memory animation control 2025-07-01 16:05:33 +05:30
Manav Rathi
46b0b7ce70 [web] Public albums internal code improvements (#6424) 2025-07-01 16:04:10 +05:30
Ashil
bd267edf3f [mob][photos] Fix/avoid recommended filters going blank on calling setState from different screens that have gallery (#6426) 2025-07-01 16:02:08 +05:30
ashilkn
b0d44f3799 Fix/avoid recommended filters going blank on calling setState from different screens that have gallery 2025-07-01 15:57:42 +05:30
Prateek Sunal
bb91471cdc chore: update milliseconds to seconds 2025-07-01 15:50:46 +05:30
Manav Rathi
7f24ffd7ef Fix uploader name not getting used in form 2025-07-01 15:49:34 +05:30
Ashil
fb03c88a5d [mob][photos] Memories improvement (#6152)
## Description
1. A subtle zoom-in/out effect for photos and replaced the black area
around landscape photos with a blurred background.
2. Auto play each image for 5 second and video for its duration with a
step progress animation.
3. Long-press to pause animation. Releasing will resume the playback.
2025-07-01 15:40:03 +05:30
Manav Rathi
07420304d0 Impl and swap 2025-07-01 15:35:47 +05:30
Prateek Sunal
aa26a48e67 fix: add more logs + no defeult selection for people 2025-07-01 15:26:35 +05:30
Manav Rathi
bd776dc98d Swap 2025-07-01 15:17:27 +05:30
Manav Rathi
dc3f0be186 Sketch 2025-07-01 15:13:37 +05:30
Manav Rathi
5cc68e5bb5 Rename 2025-07-01 14:53:27 +05:30
AmanRajSinghMourya
092d8aa9f5 Merge branch 'memory_improvement' of https://github.com/ente-io/ente into memory_improvement 2025-07-01 14:52:57 +05:30
AmanRajSinghMourya
2d87237d10 Fixed ios close button not working 2025-07-01 14:47:01 +05:30
Laurens Priem
579c2620bf [mob][photos] Suggestions on all people page (#6375)
## Description

Adds suggestions to the all people page when tapping on the people
section. Similar to the suggestion within a person gallery.

## Tests

Tested in debug mode on my pixel phone.
2025-07-01 14:41:18 +05:30
Prateek Sunal
3c2eeadec6 fix: readd total logic for widgets + essential logs 2025-07-01 14:38:17 +05:30
laurenspriem
1b178ec6ab Merge branch 'main' into faces_all_suggestion 2025-07-01 11:04:20 +02:00
ashilkn
944b2ec4b8 Remove unused file 2025-07-01 14:33:31 +05:30
laurenspriem
ac7e4eeccf Reduce face thumbnail lru further 2025-07-01 10:58:39 +02:00
Ashil
0bddd91b2e [mob][photos] Album UI improvements (#6176)
## Description

### Changes

1. Album corner radius (114 size - 12px corner radius) (100 size - 8px
corner radius)
2. Thumbnail view size 60 -  corner radius 4
3. Padding between album thumbnail and Album name is 6
4. Padding between Album name and number of photos is 2
5. Album name (text size) - Small regular , Full black (color)
6. Number of photos (text size) - Mini Regular  , Text muted (color)
7. New design for Add album thumbnail
8. Distance between album vertically & horizontally 8px
9. List view border radius 6px and thumbnail radius 4px
2025-07-01 14:27:53 +05:30
ashilkn
ae225cf89d Resolve conflicts and merge main 2025-07-01 14:27:09 +05:30
ashilkn
8569b27e8f Revert "Revert changes to arb files"
This reverts commit 236a51b0b8.
2025-07-01 14:25:46 +05:30
Manav Rathi
4f4649f7a2 Swap 2025-07-01 14:18:24 +05:30
ashilkn
b69f1bd237 Pin uncategorized album to top of collection action sheet 2025-07-01 14:17:28 +05:30
Manav Rathi
59e9967518 Fin 2025-07-01 14:14:31 +05:30
Manav Rathi
0621c3d30b Sketch save 2025-07-01 14:08:19 +05:30
ashilkn
236a51b0b8 Revert changes to arb files 2025-07-01 14:03:30 +05:30
Neeraj
c9f5c03e17 [mob] Add change log (#6423)
## Description

## Tests
2025-07-01 13:58:04 +05:30
AmanRajSinghMourya
1a3b38f219 Fix video going blank when played using media kit 2025-07-01 13:54:08 +05:30
Neeraj Gupta
ce377308e3 Add change log 2025-07-01 13:53:44 +05:30
ashilkn
155bb5a214 Merge branch 'main' into album_fixes 2025-07-01 13:42:40 +05:30
ashilkn
9d9b7a87f5 Remove merge conflict code 2025-07-01 13:38:23 +05:30
AmanRajSinghMourya
0c3b751b30 Use video_widget_media_kit.dart instead of video_widget_media_kit_new.dart 2025-07-01 13:38:18 +05:30
laurenspriem
6a8cfe31de Mounted check 2025-07-01 10:06:25 +02:00
Manav Rathi
c9175bee04 Sketch 2025-07-01 13:27:35 +05:30
Neeraj
76939691fd [mob] Cache persons entities (#6420)
## Description
- Offloads json decoding to computer.
- Frequently updates email to person cache on each db read for all
persons()

## Tests
2025-07-01 13:04:36 +05:30
Manav Rathi
c2b6bfa1ed Inline 2025-07-01 12:15:51 +05:30
Manav Rathi
0056d87009 [web] Trash improvements (#6421) 2025-07-01 12:04:18 +05:30
Manav Rathi
eaefeebe83 Recent first 2025-07-01 11:56:19 +05:30
Manav Rathi
d92183bd0b Match option order on mobile 2025-07-01 11:55:01 +05:30
Manav Rathi
27605ce156 Special case 2025-07-01 11:52:48 +05:30
Neeraj Gupta
df3a6a5a22 Clean up 2025-07-01 11:45:48 +05:30
ashilkn
eeff3d5cdf chore 2025-07-01 11:44:26 +05:30
ashilkn
0565b71653 Tweak next/previous memory animation 2025-07-01 11:44:00 +05:30
ashilkn
8e5786c6fb code cleanup 2025-07-01 11:25:56 +05:30
Neeraj Gupta
4b826d1aed Refresh cache on cgroup update 2025-07-01 11:12:42 +05:30
Neeraj Gupta
556177358e Cache persons data 2025-07-01 11:11:24 +05:30
ashilkn
19f4acfc94 Minor improvement 2025-07-01 11:06:45 +05:30
ashilkn
599e59c548 Add todos 2025-07-01 11:05:31 +05:30
Neeraj Gupta
19b508d869 Rename 2025-07-01 10:38:06 +05:30
ashilkn
c4719f7d9d Resolve merge conflicts and merge main 2025-07-01 10:37:13 +05:30
Manav Rathi
d5eea09c8a [desktop] Update to Electron 37 (#6419)
Changes: https://www.electronjs.org/blog/electron-37-0
2025-07-01 10:32:51 +05:30
Manav Rathi
04125bc30c [web] Convert the delete and fav actions to new code (#6418) 2025-07-01 10:30:20 +05:30
Manav Rathi
fda415aab1 Update to Electron 37
Changes: https://www.electronjs.org/blog/electron-37-0
2025-07-01 10:29:00 +05:30
Manav Rathi
ab052dcb89 qp 2025-07-01 10:21:05 +05:30
Neeraj Gupta
5210a5a0ba Add wrapper method for all entity changes 2025-07-01 10:20:52 +05:30
Manav Rathi
7607d2a14a Conv 2025-07-01 10:16:08 +05:30
Hailey Martin
0abf4354aa [Auth] Add LaunchDarkly to custom icons (#6399)
## Description

Adds a custom icon for the LaunchDarkly feature flag/automation service.
Icon was taken from their [press
kit](https://launchdarkly.com/press-and-analysts/) and given a hex code
to work on both dark & light modes.

## Tests

n/a
2025-07-01 10:00:55 +05:30
Manav Rathi
6c3cc168c9 [web] New translations (#6417)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-07-01 09:29:42 +05:30
Crowdin Bot
516420d872 New Crowdin translations by GitHub Action 2025-07-01 03:58:45 +00:00
Manav Rathi
358a86f18f [web] More improvements to handling of shared file operations (#6416) 2025-07-01 09:28:01 +05:30
Manav Rathi
52d024a263 Move to tr 2025-07-01 09:00:27 +05:30
Manav Rathi
da3df70544 Prevent bypass using keybinding 2025-07-01 08:57:31 +05:30
Manav Rathi
e3ed92e930 Visually better sequence 2025-07-01 08:47:57 +05:30
Manav Rathi
cfce0bc198 Also for fav 2025-07-01 08:46:10 +05:30
Neeraj
f9b2b90f4e [mob] Use cached mapping for person avatar (#6413) 2025-07-01 08:44:03 +05:30
Manav Rathi
c60aed7f0f Notify elsewhere too 2025-07-01 07:56:17 +05:30
Manav Rathi
1cc9115972 Don't use exceptions for flow control 2025-07-01 07:47:38 +05:30
Manav Rathi
332d4219ac Reusable 2025-07-01 07:38:03 +05:30
laurenspriem
3bda830156 Don't use isolate for compression 2025-06-30 19:52:38 +02:00
laurenspriem
00799c531a Single computer call for compression 2025-06-30 17:53:18 +02:00
laurenspriem
883b5b66e9 image quality 2025-06-30 17:40:49 +02:00
Manav Rathi
759bea83bb [web] Support removing from shared albums (#6412) 2025-06-30 21:05:02 +05:30
laurenspriem
51ba11cfcc Compress all face thumbnails 2025-06-30 17:28:24 +02:00
laurenspriem
4c82d6bc84 Smaller in memory cache 2025-06-30 17:17:16 +02:00
Manav Rathi
f66f6ab9be Don't show two dialogs 2025-06-30 20:43:21 +05:30
Manav Rathi
5f76391379 Fix 2025-06-30 20:35:31 +05:30
Manav Rathi
fa39effe9c Scaffold 2025-06-30 20:27:02 +05:30
Manav Rathi
61a7b4f07a Handle remove separately 2025-06-30 20:15:24 +05:30
Manav Rathi
798a03007a Catch 2025-06-30 20:02:05 +05:30
laurenspriem
8386e3a4f1 Variable width file info face thumbnail 2025-06-30 16:26:21 +02:00
Manav Rathi
3575704724 Remove from shared 2025-06-30 19:43:25 +05:30
laurenspriem
e8b68d7d28 Name truncate logic 2025-06-30 14:48:52 +02:00
Prateek Sunal
c7bf3a0a9d [mob][photos] widget fixes and cleanup (#6407)
## Description

Cleaning up and refactor widget related code.

## Tests
2025-06-30 16:44:51 +05:30
laurenspriem
66617ada86 Close button 2025-06-30 13:13:50 +02:00
ashilkn
edacaaa334 Merge branch 'clean_up_memories' into memory_improvement 2025-06-30 16:40:25 +05:30
Prateek Sunal
dfec66f971 Merge branch 'wid-fix' of https://github.com/ente-io/ente into wid-fix 2025-06-30 16:31:18 +05:30
Prateek Sunal
70faf61391 fix: don't partial sync for people 2025-06-30 16:30:57 +05:30
Neeraj Gupta
9903201fa8 Minor refactor 2025-06-30 16:21:31 +05:30
Manav Rathi
4a0f0f295d Rename 2025-06-30 16:19:06 +05:30
laurenspriem
16a2a5cc13 Fix name overflow 2025-06-30 12:43:32 +02:00
AmanRajSinghMourya
6405886aca Hide Play original option when showing memories 2025-06-30 16:07:48 +05:30
Manav Rathi
ad0cf583b5 Cleanup 2025-06-30 15:57:57 +05:30
ashilkn
2608a8c9ab Performance improvement in memories animation 2025-06-30 15:53:47 +05:30
ashilkn
d4e9bdd035 Use better names 2025-06-30 15:49:52 +05:30
laurenspriem
b6de9497d3 Bump version to match internal branch 2025-06-30 12:18:01 +02:00
ashilkn
e27f4544d0 Remove unnecessary scroll controller 2025-06-30 15:43:37 +05:30
Prateek Sunal
ac8efa9d7d fix: add debouncer to memories toggle 2025-06-30 15:42:11 +05:30
ashilkn
489c806923 Add mounted check 2025-06-30 15:36:38 +05:30
Prateek Sunal
e1a2946a2b chore: lint fixes 2025-06-30 15:36:07 +05:30
ashilkn
354c08921b Remove unnecessary AnimatedBuilder 2025-06-30 15:35:30 +05:30
Prateek Sunal
a7f89d0077 fix: replace awaited updateVariables calls with unawaited versions in MemoriesWidgetSettings 2025-06-30 15:35:23 +05:30
Manav Rathi
7d8fb296af Cleanup 2025-06-30 15:29:40 +05:30
laurenspriem
7509a367c5 Fix suggestion not using previous negative feedback 2025-06-30 11:43:22 +02:00
Prateek Sunal
5f0154f9fe fix: add unawaited to PeopleWidgetSettings 2025-06-30 15:12:28 +05:30
Manav Rathi
0c6cc8f7a1 [web] File selection handler options refactoring (#6410) 2025-06-30 15:11:02 +05:30
Manav Rathi
7f0ac9629e Lint fix 2025-06-30 15:06:56 +05:30
Prateek Sunal
c4a9b2e4f9 fix: improve album home widget service 2025-06-30 15:00:52 +05:30
Prateek Sunal
fcef3fd4e5 fix: make people and albums widget better 2025-06-30 14:46:12 +05:30
Manav Rathi
a434862b2f Rearrange 2025-06-30 14:33:10 +05:30
laurenspriem
c91ad8348e Horizontally center thumbnails 2025-06-30 11:01:58 +02:00
AmanRajSinghMourya
cac053f4e9 Minor fix 2025-06-30 14:12:53 +05:30
Manav Rathi
99b379280f Tweak 2025-06-30 13:58:48 +05:30
Neeraj
0529c8cf9b [mob] Remove old migration code (#6408)
## Description

## Tests
2025-06-30 13:50:09 +05:30
laurenspriem
5ae5341658 padding around save as another person button 2025-06-30 10:17:29 +02:00
laurenspriem
b3bff83a40 file info name fixed width 2025-06-30 10:15:32 +02:00
Manav Rathi
9efd99fd10 Extract 2025-06-30 13:19:19 +05:30
Prateek Sunal
7fc4f36970 fix: migrate most of the changes to people and albums widget as well 2025-06-30 12:39:35 +05:30
laurenspriem
fc5837ea3b Center name 2025-06-30 09:05:51 +02:00
Prateek Sunal
7ebb039b35 chore: lint fix and revert 2025-06-30 12:26:48 +05:30
Ashil
f33eb83eef [mob][auth] Bump up auth version to 4.4.1 (#6406)
## Description

For test flight release
2025-06-30 12:25:50 +05:30
Prateek Sunal
81947c61ab Merge remote-tracking branch 'origin/main' into wid-fix 2025-06-30 12:24:47 +05:30
Manav Rathi
8d3057e011 Extract 2025-06-30 11:56:48 +05:30
Prateek Sunal
d5a46f273a fix: begin widget code cleanup 2025-06-30 11:47:43 +05:30
Manav Rathi
b02e987fdc Tweak 2025-06-30 11:13:47 +05:30
ashilkn
ed6e401688 bump up auth version to 4.4.1 2025-06-30 11:12:40 +05:30
Manav Rathi
1256852259 Move 2025-06-30 10:55:44 +05:30
Manav Rathi
5b360a549a Rename etc 2025-06-30 10:44:39 +05:30
Aman Raj Singh Mourya
0337cccea4 [auth][mob] Fall back to Passcode if FaceId not detected on iOS (#6396)
## Description
Fallback to Pin/Passcode on iOS if fail to detect TouchID/FaceID
2025-06-30 10:36:58 +05:30
Manav Rathi
7514b93261 [desktop] Special case for systematic ML errors (#6405) 2025-06-30 09:52:16 +05:30
Manav Rathi
f5c5ffd86d Special case for many ML errors 2025-06-30 09:48:40 +05:30
Manav Rathi
ac4b737e89 [web] New translations (#6400)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-06-30 08:48:58 +05:30
Manav Rathi
4792775630 [destkop] Electron regular version update (#6403) 2025-06-30 08:35:02 +05:30
Manav Rathi
f22ca13205 + electron 2025-06-30 08:19:15 +05:30
Crowdin Bot
7076deb46e New Crowdin translations by GitHub Action 2025-06-30 00:42:58 +00:00
Keerthana
4eebcc03b9 [docs] Fixed typos in tailscale.md (#6393)
Fix small typing mistakes

## Description

## Tests
2025-06-29 11:51:46 +05:30
AmanRajSinghMourya
7eed321c99 Fall back to Passcode if FaceId not detected on iOS 2025-06-29 00:04:31 +05:30
AmanRajSinghMourya
9b39dd2697 Fix border radius for album items 2025-06-28 14:03:58 +05:30
Bl4ckspell
8e34fa7bf3 [auth] fix ibkr icon (#6374)
## Description
Fix the icon added in #6329 not displaying.

## Tests

| before | after |
| ---- | ---- |
| ![Screenshot From 2025-06-26
13-13-24](https://github.com/user-attachments/assets/6873aaa9-da8a-4f2d-92a4-a8c2117e05da)
| ![Screenshot From 2025-06-26
13-13-50](https://github.com/user-attachments/assets/6a5b142e-bbbb-4b54-80b9-71ddeae6c02b)
|
2025-06-28 13:39:37 +05:30
ashilkn
4be696dd6d Remove unnecessary Scaffold 2025-06-28 12:27:46 +05:30
laurenspriem
ea90f5c6cb Text under person 2025-06-28 11:22:14 +05:30
laurenspriem
ccaa00152e Yes/no buttons 2025-06-28 09:59:15 +05:30
Lappies
1b4ead7f77 Update tailscale.md
Fix small typing mistakes
2025-06-27 22:05:44 -06:00
ashilkn
a9b454a631 Update UI of title of memories and make it more visible by increasing bottom gradient when title is shown 2025-06-27 20:01:45 +05:30
ashilkn
a44db791d3 UI tweaks to full screen memory widget 2025-06-27 19:33:47 +05:30
Manav Rathi
23b017c17d [web] Collection summary refactoring (#6390) 2025-06-27 19:00:08 +05:30
Manav Rathi
4a81c56a55 Elsewhere 2025-06-27 18:55:04 +05:30
Manav Rathi
5141b04695 attr fin 2025-06-27 18:44:40 +05:30
Manav Rathi
e70d704ced attr 2025-06-27 18:44:40 +05:30
Manav Rathi
3f87fd1a5a Rename 2025-06-27 18:44:40 +05:30
Manav Rathi
72028ec9d2 attr 2025-06-27 18:44:39 +05:30
Manav Rathi
7af11786fb attr 2025-06-27 18:44:39 +05:30
Manav Rathi
61fb167cec Use 2025-06-27 18:44:39 +05:30
Manav Rathi
9fd950f928 Move up 2025-06-27 18:44:38 +05:30
Manav Rathi
a888d40722 Retain the active cs 2025-06-27 18:43:49 +05:30
Manav Rathi
5d594b4952 as attr 2025-06-27 18:43:49 +05:30
Manav Rathi
55a21c1233 only as attr 2025-06-27 18:43:49 +05:30
Manav Rathi
49e2ae3120 As attribute 2025-06-27 18:43:49 +05:30
Manav Rathi
5ee16e992b Conv 2025-06-27 18:43:49 +05:30
Manav Rathi
ad269fe995 [web] Fix avatar on share menu (#6389) 2025-06-27 18:43:29 +05:30
Manav Rathi
17937f8c54 Fix avatar on share menu 2025-06-27 18:40:02 +05:30
Keerthana
886ceec05c [email] reduce ambiguity in OTT verification (#6386)
## Description
This PR reduces ambiguity in OTT verification where some users replies
to our mail for verification instead of entering the code in the
application
2025-06-27 18:04:19 +05:30
Laurens Priem
433be55081 [mob][photos] Fix incorrectly showing ml consent bar (#6387)
## Description

Fix incorrectly showing ml consent bar

## Tests

Tested in debug mode on my pixel phone.
2025-06-27 17:14:53 +05:30
laurenspriem
e664a3ec70 Fetch user flags on login 2025-06-27 17:05:02 +05:30
laurenspriem
ad9fd6d547 show ml consent banner after syncing flags only 2025-06-27 16:51:55 +05:30
Keerthana
d921541d5d [email] reset formatting for ott mail 2025-06-27 16:48:20 +05:30
laurenspriem
6b16f7f172 Always init ml service 2025-06-27 16:44:03 +05:30
laurenspriem
e463d68688 Remove unneeded getter 2025-06-27 16:38:25 +05:30
Keerthana
41cda039ec [email] reduce ambiguity in OTT verification 2025-06-27 16:20:28 +05:30
AmanRajSinghMourya
4989204b59 Show border for device item 2025-06-27 16:05:33 +05:30
AmanRajSinghMourya
04ae708f33 Show border around album row items 2025-06-27 15:55:51 +05:30
Manav Rathi
d803c31d63 [web] Remove from collection internals refactoring (#6383) 2025-06-27 15:02:44 +05:30
Manav Rathi
903c46bae0 Sort prio 2025-06-27 14:57:37 +05:30
Manav Rathi
6b965b1aa6 Inline 2025-06-27 14:57:37 +05:30
Manav Rathi
04395739d5 Prune 2025-06-27 14:57:37 +05:30
Manav Rathi
c5ec0891c9 Conv to set 2025-06-27 14:57:37 +05:30
Manav Rathi
3213735a4d Inline 2025-06-27 14:57:36 +05:30
Manav Rathi
b854a603af Document and use 2025-06-27 14:57:36 +05:30
Manav Rathi
641f48e27d Fix 2025-06-27 14:57:36 +05:30
Manav Rathi
7016861281 Use 2025-06-27 14:57:36 +05:30
Manav Rathi
ae5144635e Sketch 2025-06-27 14:57:36 +05:30
Manav Rathi
a0a0556037 Conv 2025-06-27 14:57:36 +05:30
Manav Rathi
be8d1932b1 [web] Fallback for Map's values iterator's map method (#6382)
2025 baseline, but some customers have browsers which don't support it
yet

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator/map
2025-06-27 14:41:54 +05:30
ashilkn
b127cf724b Fix memories UX when deleting a memory or closing one (from memories) 2025-06-27 14:40:25 +05:30
Manav Rathi
cc1177150b Fallback for Map-iterator values method
2025 baseline, but some customers have browsers which don't support it yet
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator/map
2025-06-27 14:35:34 +05:30
Keerthana
9f82c3788b [docs] update with minio troubleshooting for deprecated command (#6381)
## Description
This PR updates documentation for users who are self-hosting Ente to
update post_start hook for MinIO provisioning and bucket creation to
work properly with the latest version of MinIO
2025-06-27 14:25:06 +05:30
ashilkn
67be26604f Show blurred background for live photos too in memories 2025-06-27 14:13:16 +05:30
Keerthana
ec4deb5179 [docs] update with minio troubleshooting for deprecated command 2025-06-27 13:38:53 +05:30
Keerthana
f02f10f832 [server][quickstart] migrate to mc alias set for creating bucket (#6380)
## Description
This PR fixes the infinite looping due to mc config not being found in
latest server images, which is replaced in favor of mc alias set,
responsible for creating buckets in post_start hook. This should fix the
issue that users run into while using our quickstart script

## Tests
- [x] I have tested with the latest MinIO server image
2025-06-27 13:30:19 +05:30
laurenspriem
eb75b2addf Fix gallery reload issue 2025-06-27 13:22:19 +05:30
ashilkn
a0061da938 Remove redundant setState rebulding VideoWidgtNative at high frequency 2025-06-27 12:27:09 +05:30
Keerthana
e5fbd5fde5 [server][quickstart] migrate to mc alias set for creating bucket 2025-06-27 12:05:21 +05:30
AmanRajSinghMourya
6c53421e36 Merge branch 'main' into album_fixes 2025-06-26 22:52:41 +05:30
Manav Rathi
e38477aa64 [web] Collection ops refactoring - Part 2 (#6379) 2025-06-26 20:30:07 +05:30
Manav Rathi
27380d3c42 Fav 2025-06-26 20:24:47 +05:30
Manav Rathi
a70f9327aa hide files 2025-06-26 20:02:33 +05:30
Manav Rathi
5dd6482937 New prim 2025-06-26 19:46:10 +05:30
Manav Rathi
6465106302 Rename 2025-06-26 19:21:49 +05:30
Manav Rathi
5b6d0e7a2a Use abstraction 2025-06-26 19:19:27 +05:30
Manav Rathi
8b46cf6bc5 [web] New collection diff implementation (#6376) 2025-06-26 18:53:20 +05:30
Manav Rathi
090e8bbf40 Simplify 2025-06-26 18:18:07 +05:30
laurenspriem
4ccb782740 Extract strings 2025-06-26 18:04:11 +05:30
laurenspriem
54722ac5c3 Different design on all people page 2025-06-26 18:00:30 +05:30
AmanRajSinghMourya
8e1711c951 Merge branch 'memory_improvement' of https://github.com/ente-io/ente into memory_improvement 2025-06-26 17:19:45 +05:30
AmanRajSinghMourya
088630ccce Enable swipe between memories when opened from notifications 2025-06-26 17:17:25 +05:30
laurenspriem
799b1b0d03 Remove redundant code 2025-06-26 16:59:31 +05:30
laurenspriem
dc787a2754 Prevent flicker on suggestion 2025-06-26 16:57:53 +05:30
laurenspriem
aea62fcd2c Give least likely face thumbnail 2025-06-26 16:03:43 +05:30
AmanRajSinghMourya
b8eb200295 Enable swipe between memories when openend from widgets 2025-06-26 16:00:45 +05:30
laurenspriem
f16b75ae9c Integrate suggestion on all people screen 2025-06-26 15:31:46 +05:30
laurenspriem
47359051a1 Adapt PersonGallerySuggestion for all people 2025-06-26 15:31:24 +05:30
Manav Rathi
b273a70a3e new impl - tweak 2025-06-26 14:23:06 +05:30
Manav Rathi
3b3038ebb9 new diff impl wip 2025-06-26 14:09:31 +05:30
Manav Rathi
569a16cc5b [web] Support numeric query params in fetch helper (#6371) 2025-06-26 13:47:36 +05:30
Manav Rathi
3780d41765 Tweak 2025-06-26 13:27:56 +05:30
Manav Rathi
78b9ce1674 Conv 2025-06-26 13:09:18 +05:30
Manav Rathi
601a1d029b Support num qp 2025-06-26 12:54:13 +05:30
Manav Rathi
5c55e52cc1 New 2025-06-26 12:45:48 +05:30
Manav Rathi
2740ad75af Move 2025-06-26 12:38:21 +05:30
Manav Rathi
e3a72987ce Doc 2025-06-26 12:34:12 +05:30
Manav Rathi
6870ed24f2 [web] Prune gallery context (#6370) 2025-06-26 11:39:42 +05:30
Manav Rathi
ab2d49b162 Prune 2025-06-26 11:34:50 +05:30
laurenspriem
cd98458ada Comment 2025-06-26 11:08:14 +05:30
Manav Rathi
909cba41bc Update 2025-06-26 11:07:48 +05:30
Manav Rathi
3fdfb6c57d Forward 2025-06-26 10:49:43 +05:30
Manav Rathi
2fbce97f89 Fix gaps in notifications when downloading empty albums 2025-06-26 10:28:07 +05:30
Manav Rathi
e4fd78250d Use 2025-06-26 10:21:18 +05:30
Manav Rathi
cef3679bb3 Key warning 2025-06-26 10:10:08 +05:30
Manav Rathi
e65b5cefdc Use 2025-06-26 10:10:08 +05:30
Manav Rathi
71650df31f Use 2025-06-26 10:01:56 +05:30
Manav Rathi
b785fe69f4 Shared date select 2025-06-26 09:44:50 +05:30
Manav Rathi
67c3375ace Move 2025-06-26 09:41:05 +05:30
Manav Rathi
bdb5f5894e Forward 2025-06-26 09:14:28 +05:30
Manav Rathi
a0d4326d62 Prune 2025-06-26 08:31:04 +05:30
Manav Rathi
a16b20122d [desktop] Improve first CLIP query behaviour (#6369)
Keep some leeway so that the first CLIP query in a session also gets
resolved (on app starts after the model has been downloaded).
2025-06-26 08:23:20 +05:30
Manav Rathi
b981152dee Keep some leeway for fs.stat 2025-06-26 08:17:20 +05:30
Manav Rathi
63c1e63035 Prune 2025-06-26 08:12:18 +05:30
Manav Rathi
2c2b8f77cb sync => pull or other apropos 2025-06-26 07:50:17 +05:30
Manav Rathi
ef4b9ebc42 Rename 2025-06-26 07:45:51 +05:30
Manav Rathi
1babaf529e [web] Nomenclature cleanup (sync => pull) - Part 2 (#6368) 2025-06-26 07:41:35 +05:30
Manav Rathi
f4ec5f348d Prune 2025-06-26 07:17:01 +05:30
Manav Rathi
5a881440d9 Update 2025-06-26 07:10:58 +05:30
Manav Rathi
44f8d80b22 Use in collection share 2025-06-26 06:32:31 +05:30
Manav Rathi
477c01bc55 Update 2025-06-26 06:06:35 +05:30
Manav Rathi
b2df63e499 Doc and tweak 2025-06-26 05:43:27 +05:30
Manav Rathi
038de1d7ad [web] Serialize remote pulls (#6365) 2025-06-25 20:57:36 +05:30
Manav Rathi
5f1e393ac7 Simplify 2025-06-25 20:49:35 +05:30
Manav Rathi
e38a39200a Remove potentially illdefined forcing support 2025-06-25 20:41:21 +05:30
Manav Rathi
217b40a107 Serialize 2025-06-25 20:29:27 +05:30
Manav Rathi
938e7284d7 nerf ret 2025-06-25 20:17:34 +05:30
Manav Rathi
8fe3182b79 [web] Nomenclature cleanup (sync => pull) (#6364) 2025-06-25 20:05:21 +05:30
Manav Rathi
d271472984 Lint fix 2025-06-25 19:58:54 +05:30
Manav Rathi
3acb04f4cc Rename 3 2025-06-25 19:53:00 +05:30
Manav Rathi
9628bf8723 Rename 2 2025-06-25 19:41:51 +05:30
Manav Rathi
4161371a8e Post rename - 1 2025-06-25 19:24:51 +05:30
Manav Rathi
0bb10f2ee0 Rename 2025-06-25 18:53:41 +05:30
Manav Rathi
3f50771e18 Update 2025-06-25 18:50:50 +05:30
Manav Rathi
9d707fcb48 Update 2025-06-25 18:48:05 +05:30
ashilkn
a13db6b268 fix UI 2025-06-25 18:42:44 +05:30
Manav Rathi
2b9d80d23f Update 2025-06-25 18:40:12 +05:30
ashilkn
8706b368ba Update memories title size 2025-06-25 18:27:29 +05:30
AmanRajSinghMourya
d46b27e81f Revert memory notification and swipe improvements 2025-06-25 18:02:16 +05:30
Manav Rathi
58f3144ea0 [web] Rework the handling of hidden files (#6362) 2025-06-25 17:05:24 +05:30
ashilkn
d65aeaf181 UI tweaks 2025-06-25 16:53:32 +05:30
Manav Rathi
da8b9daff0 Retain prior behavior 2025-06-25 16:48:58 +05:30
Manav Rathi
a6a1b4baa8 file IDs 2025-06-25 16:32:50 +05:30
ashilkn
b9f6d19152 Resolve merge conflicts and merge UI/UX improvements to memory_improvement branch 2025-06-25 16:27:40 +05:30
ashilkn
324d2fbe4f Minor UI tweaks 2025-06-25 16:17:17 +05:30
ashilkn
86446ab8bf Improve FullScreenMemeory UI 2025-06-25 15:55:04 +05:30
Neeraj
380289e660 [docs] Fix git rename (#6361)
## Description

## Tests
2025-06-25 15:21:17 +05:30
Manav Rathi
c66ee58d85 norm + hidden - fin 2025-06-25 15:07:32 +05:30
Manav Rathi
37a70125b9 norm + hidden - wip 6 2025-06-25 14:56:17 +05:30
Manav Rathi
c8715ca846 norm + hidden - wip 5 2025-06-25 14:38:59 +05:30
Manav Rathi
d3491b80ee Move to reducer 2025-06-25 14:12:44 +05:30
Neeraj
fa62abb7be [auth] fix unknown hard error on windows (#6360)
## Description

Fixes https://github.com/ente-io/ente/issues/5789
https://github.com/ente-io/ente/issues/4523
https://github.com/ente-io/ente/issues/4099
https://github.com/ente-io/ente/issues/4270

## Tests
2025-06-25 14:08:48 +05:30
Manav Rathi
2b57a59b47 Tweak 2025-06-25 13:57:20 +05:30
Manav Rathi
3bf3018d22 normal + hidden - wip 4 2025-06-25 13:51:54 +05:30
Prateek Sunal
fd331c0733 fix: unknown hard error on windows 2025-06-25 13:49:31 +05:30
Manav Rathi
b5f12b56fa normal + hidden - wip 3 2025-06-25 12:52:38 +05:30
Neeraj
096a1dd043 Fix: Do not request compute lock if streaming is disabled (#6358)
## Description


## Tests
During testing, i noticed a log saying the ML lock is denied because
stream is getting generated. I hadn't enabled video streaming on that
device.
2025-06-25 12:33:58 +05:30
Manav Rathi
02e2abef07 hidden + normal - wip 2 2025-06-25 12:17:29 +05:30
Aman Raj Singh Mourya
e629db5bb1 [mob][photos] Memory notification improvement (#6359)
## Description
Enable swiping between memory blocks when opening a memory from
notification.
2025-06-25 12:07:55 +05:30
AmanRajSinghMourya
1274ea21d4 Enable swipe between memory block when opened from notification 2025-06-25 12:04:34 +05:30
Neeraj Gupta
6fda320c83 reduce log severity 2025-06-25 11:55:45 +05:30
Neeraj Gupta
7a3cd9a139 refactor 2025-06-25 11:52:51 +05:30
Manav Rathi
06a5611a56 normal and hidden files storage merge - wip 2025-06-25 11:46:29 +05:30
Neeraj Gupta
db8fa98ac6 Fix: Do not request compute lock if streaming is disabled 2025-06-25 11:45:41 +05:30
Neeraj
952f8212dc [mob][photos] Faces UX improvements (#6343)
## Description

- Show smaller clusters (solves
[#4091](https://github.com/ente-io/ente/discussions/4091))
- New suggestions in people page
- Give feedback from file info
- Multi select actions in all people page
- Better face thumbnail caching

## Tests

Tested in debug mode on my pixel phone.
2025-06-25 11:43:15 +05:30
ashilkn
24507f5f23 Use better name 2025-06-25 11:11:43 +05:30
Manav Rathi
66079b0af2 Outline 2025-06-25 11:08:14 +05:30
ashilkn
88498f11fc Start scale animation in FullScreenMemory widget only if final image is loaded 2025-06-25 10:45:19 +05:30
Manav Rathi
c5afc6d453 Conv 2025-06-25 10:38:40 +05:30
Neeraj
5d7848752f [auth] Added Zitadel icon (#6355)
The Zitadel icon is not available.
2025-06-25 09:23:02 +05:30
ashilkn
bf93e28a3d Improve UX of FullScreenMemory widget 2025-06-25 09:19:56 +05:30
Manav Rathi
124006929f Doc and tweak 2025-06-24 21:42:13 +05:30
Manav Rathi
bf8713ba21 Refactor 2025-06-24 21:42:13 +05:30
AmanRajSinghMourya
878b46631f Enable swipe to next memory block when opened from home-memory-widget 2025-06-24 18:07:39 +05:30
laurenspriem
4832739ff8 Fix reset of scroll position 2025-06-24 17:27:45 +05:30
laurenspriem
67f43453aa Change logger.finest to logger.info 2025-06-24 17:18:29 +05:30
Neeraj
43eb6ca30f [mob][photos] Schedule birthday notifications for everyone (#6354)
## Description

Makes sure that birthday notifications are scheduled even for persons
who haven't been in any recent pictures.
2025-06-24 17:15:20 +05:30
laurenspriem
2449c6d592 Specify value key 2025-06-24 16:39:11 +05:30
laurenspriem
f41bd1818d Fix state issue in face file info 2025-06-24 16:23:22 +05:30
sickjuicy
8f8056a918 Added Zitadel icon 2025-06-24 12:18:40 +02:00
Prateek Sunal
c14846f4fc [mob][photos] add hash check for people widget (#6341)
## Description

- [x] Add hash functionality to PeopleHomeWidget to track updation
- [x] Clear hash on albums widget clear

## Tests

- [x] Test if updating different people trigger it or not
2025-06-24 15:33:40 +05:30
laurenspriem
2eaa2d6ee2 schedule birthday notifications for everyone 2025-06-24 15:16:59 +05:30
laurenspriem
d183000fe3 make more tappable 2025-06-24 14:55:12 +05:30
AmanRajSinghMourya
396b893f43 Refactor FullScreenMemory layout and improve title styling 2025-06-24 14:46:57 +05:30
Prateek Sunal
fffb1e2734 refactor: rename getUpdatedAtHash to getPreHashForEntities for clarity 2025-06-24 14:38:51 +05:30
Prateek Sunal
4419090831 fix: move the concat logic to sql side 2025-06-24 14:38:19 +05:30
laurenspriem
f6e464bb21 Remove redundant code 2025-06-24 14:13:01 +05:30
laurenspriem
88d3f2388c Remove suggestion banner 2025-06-24 14:09:48 +05:30
laurenspriem
7bbbeceab5 Compress face thumbnail in regular isolate 2025-06-24 14:05:06 +05:30
AmanRajSinghMourya
8d35e16abe Preload the first unseen memory for each unseen memory 2025-06-24 13:03:35 +05:30
Prateek Sunal
282f908ffd chore: remove unwanted param 2025-06-24 12:45:39 +05:30
AmanRajSinghMourya
9f86b3fdd2 Merge branch 'memory_improvement' of https://github.com/ente-io/ente into memory_improvement 2025-06-24 11:59:09 +05:30
ashilkn
a3c011070a Clip items of page view used in memories 2025-06-24 11:51:15 +05:30
laurenspriem
ef76904b4d Use old logic for suggestions 2025-06-24 11:27:33 +05:30
ashilkn
aa4b44f8bd Add animation between the blurred thumbnails of items of a memory as a workaround for the flash between items when transitioning 2025-06-24 11:26:35 +05:30
laurenspriem
311b7ef77e Increase tappable area 2025-06-24 11:15:40 +05:30
ashilkn
2678b94433 Use ImageFilterd widget to blur image instead of BackdropFilter for better performance 2025-06-24 10:25:10 +05:30
laurenspriem
eac85d1708 String extract 2025-06-24 10:14:09 +05:30
laurenspriem
766608696d Revert memory cache 2025-06-24 10:14:02 +05:30
laurenspriem
59b761bf33 Remove duplicate time 2025-06-24 10:07:43 +05:30
laurenspriem
b93f78b3c9 Compression min dimensions 2025-06-24 09:57:47 +05:30
ashilkn
bcc293358f chore 2025-06-24 09:47:34 +05:30
laurenspriem
4c30d9d6d1 Less logging 2025-06-24 09:27:37 +05:30
laurenspriem
022dd35d5a Higher logging level in production 2025-06-24 09:22:49 +05:30
Neeraj
9351c1121e [Auth] Add custom icon - IBKR (#6329)
## Description
Add custom icon for  IBKR (Interactive Brokers) investing platform
## Tests
2025-06-24 08:57:24 +05:30
Manav Rathi
a7a69aa558 [web] Systematize trash internals (#6350) 2025-06-24 08:56:16 +05:30
laurenspriem
3923f18cd8 initState first 2025-06-24 08:48:09 +05:30
Manav Rathi
fbd0bf257e Tweak 2025-06-24 08:17:40 +05:30
Manav Rathi
86d09d997a refactor 2025-06-24 08:06:08 +05:30
Manav Rathi
241e1cbf88 Inv 2025-06-24 07:21:05 +05:30
Manav Rathi
fc4379f4e1 Prune 2025-06-24 06:54:29 +05:30
Manav Rathi
d84c42e5c1 Rework 2025-06-23 20:34:12 +05:30
Manav Rathi
b092fcaf29 rework 2025-06-23 19:26:40 +05:30
Prateek Sunal
3dd9696f75 Merge remote-tracking branch 'origin/main' into widgets-imp 2025-06-23 18:13:45 +05:30
Prateek Sunal
0eba503d2f chore: bump lock 2025-06-23 18:13:38 +05:30
Prateek Sunal
b6ea502bc3 fix: fetch from cgroup and check if preHash is empty 2025-06-23 18:13:31 +05:30
Manav Rathi
e603853e52 [web] File internals cleanup - Part 3/x (#6345) 2025-06-23 18:10:11 +05:30
Manav Rathi
fa137dcccc Move to use site 2025-06-23 17:55:43 +05:30
Prateek Sunal
7719c4604e fix: remove updatedAt from [PersonEntity], better hash logic 2025-06-23 17:27:18 +05:30
Manav Rathi
4b82516909 Move 2025-06-23 17:13:22 +05:30
Manav Rathi
17648c582a Simplify 2 2025-06-23 16:44:54 +05:30
Manav Rathi
1559ae7f42 Simplify 2025-06-23 16:28:04 +05:30
Manav Rathi
498a60d752 Discr union 2025-06-23 16:22:43 +05:30
laurenspriem
22b6707e92 Extract strings 2025-06-23 16:14:43 +05:30
laurenspriem
08b92cc560 Add save to person button to old suggestions flow 2025-06-23 16:00:57 +05:30
Manav Rathi
37bc453de6 Parse res 2025-06-23 15:50:10 +05:30
Manav Rathi
493fe4b3a5 [web] Files internals code cleanup (#6342) 2025-06-23 15:42:11 +05:30
laurenspriem
f22a065c15 Fire event only once 2025-06-23 15:40:59 +05:30
Manav Rathi
6b50b24abf Prune 2025-06-23 15:34:44 +05:30
Prateek Sunal
b0b8169e2e fix: remove redundant log 2025-06-23 15:34:34 +05:30
laurenspriem
53ab5b05c3 Stay on same page when user doesn't save as other person 2025-06-23 15:30:48 +05:30
laurenspriem
bd93fe5538 Make button more tappable 2025-06-23 15:21:55 +05:30
Prateek Sunal
96ebaf3c7f fix: add updatedAt to [PersonEntity], add hash to people widget check, clear hash on clearWidget for Albums 2025-06-23 15:18:29 +05:30
Manav Rathi
0ba9bdb666 ll edits 2025-06-23 15:14:35 +05:30
laurenspriem
f66a433442 Improve state update when added face to person 2025-06-23 15:11:18 +05:30
laurenspriem
c14021f2a7 Improve state update when removing face 2025-06-23 15:02:29 +05:30
Manav Rathi
85ac983ab9 edits time 2025-06-23 14:44:43 +05:30
Manav Rathi
3f0897ae77 Conv 2025-06-23 14:16:46 +05:30
laurenspriem
f7e96794cd Fix gallery reload issue 2025-06-23 14:12:55 +05:30
Prateek Sunal
1624ef52d7 [mob] improve background processing (#5442)
## Description

Use workmanager on android and iOS.

## Tests
2025-06-23 14:12:49 +05:30
Prateek Sunal
b7541e02e1 chore: remove internal checks 2025-06-23 14:05:18 +05:30
Prateek Sunal
db69caedf9 Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-06-23 14:04:31 +05:30
Prateek Sunal
9dac908dc1 chore: bump locks 2025-06-23 14:04:21 +05:30
Prateek Sunal
7211f4992a fix: remove reference of background_fetch 2025-06-23 14:03:35 +05:30
Manav Rathi
606a838ad0 transform on read so that we can handle the other case too 2025-06-23 13:34:59 +05:30
Manav Rathi
65bf785cce tx 2025-06-23 12:51:48 +05:30
laurenspriem
3bcab0216f Generated strings 2025-06-23 11:43:54 +05:30
laurenspriem
cb83a19edf Merge branch 'main' into faces_ux 2025-06-23 11:32:38 +05:30
Manav Rathi
6df16159d0 Use 2025-06-23 10:31:25 +05:30
Manav Rathi
a840950fbb Direct 2025-06-23 10:25:11 +05:30
Manav Rathi
8ae29074c5 Bench scaffolding 2025-06-23 10:16:34 +05:30
Manav Rathi
f22372c271 Sketch 2025-06-23 10:07:44 +05:30
Manav Rathi
568d4eadff Rest 2025-06-23 09:51:57 +05:30
Manav Rathi
755de42dbe Reuse 2025-06-23 09:44:56 +05:30
Manav Rathi
1016706a6b Sketch 2025-06-23 09:31:24 +05:30
Manav Rathi
76bff25de1 [web] New translations (#6337)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-06-23 09:16:00 +05:30
Crowdin Bot
d1c393b177 New Crowdin translations by GitHub Action 2025-06-23 00:42:51 +00:00
AmanRajSinghMourya
4e52caf23b Reduce sigma values & use ClipRect to avoid zoom overflow 2025-06-22 20:31:56 +05:30
SteamRadionice
03462771a4 Add files via upload 2025-06-21 11:19:41 +00:00
SteamRadionice
c9304c1992 [Auth] Add custom icon - IBKR
Add custom icon for  IBKR (Interactive Brokers) investing platform
2025-06-21 11:03:27 +00:00
laurenspriem
2baeaf1119 Make people all page selectable 2025-06-21 15:05:37 +05:30
laurenspriem
6cdc6ce9b4 Put person face thumbnails in documents directory 2025-06-21 12:22:09 +05:30
laurenspriem
97307598f0 Compress face thumbnail if needed 2025-06-21 12:09:18 +05:30
Neeraj
de4bbf44d7 [cli] Improve support handling passkey login for selfhost (#6328)
## Description
Removed the need for specifying account's app url as server returns the
same in the response to auth challenge.

## Tests
2025-06-21 10:11:43 +05:30
Neeraj Gupta
bc39f60183 cli: Improve support handling passkey login for selfhost 2025-06-21 10:09:50 +05:30
Neeraj
45308a70a8 [mob] Fix for duplicate page open for album link (#6327)
## Description

## Tests
2025-06-21 09:49:13 +05:30
Neeraj Gupta
450c7b187f Clean up logs 2025-06-21 09:46:11 +05:30
Neeraj Gupta
f3438751ed Fix for duplicate page open for album link 2025-06-21 09:43:34 +05:30
Manav Rathi
919d1a4503 [web] Switch to new EnteFile TypeScript type (internal) (#6323) 2025-06-20 20:30:32 +05:30
Manav Rathi
de0f3205ac Update 2025-06-20 20:04:55 +05:30
Neeraj
d8f2965f82 [mob][photos] use correct tonemap logic (#6322)
## Description

Fixes the tonemap logic

## Tests
2025-06-20 19:43:19 +05:30
Manav Rathi
7954b143b5 Swap 2025-06-20 19:42:36 +05:30
Prateek Sunal
17d33fc9f6 fix: issue with streaming 2025-06-20 19:28:41 +05:30
Manav Rathi
c18b1a7e83 Split 2025-06-20 19:12:09 +05:30
Manav Rathi
21ec31d4d3 Parse 2025-06-20 19:02:40 +05:30
laurenspriem
bd0f04258a Extract strings and change colours 2025-06-20 18:39:01 +05:30
laurenspriem
7d995bd83a Make the suggestion dismissible 2025-06-20 18:13:59 +05:30
Manav Rathi
98fd2021b7 [web] File internals cleanup (#6320) 2025-06-20 18:03:04 +05:30
Manav Rathi
63fc066301 Schema 2025-06-20 17:53:49 +05:30
Manav Rathi
d9fa30dbef Unused 2025-06-20 17:48:08 +05:30
Manav Rathi
012a3bef0a Replace 2025-06-20 17:40:54 +05:30
Manav Rathi
c23cd8d2f0 Cleanup 2025-06-20 17:37:10 +05:30
Manav Rathi
9e80aeb061 Cleanup 2025-06-20 17:32:04 +05:30
laurenspriem
cbf82f464d More smooth animation 2025-06-20 17:29:25 +05:30
Manav Rathi
eb5a0cb1db Prune 2025-06-20 17:08:23 +05:30
laurenspriem
43b96776e4 Less aggressive precompute 2025-06-20 16:58:36 +05:30
Manav Rathi
57d919b56f [web] File viewer tweaks (#6319) 2025-06-20 16:52:13 +05:30
Manav Rathi
54b9661ddc Lint 2025-06-20 16:48:38 +05:30
Manav Rathi
b13f4c0b18 Join 2025-06-20 16:42:08 +05:30
Manav Rathi
d8e5526655 Rewrite
The logic is same, just afresh write
2025-06-20 16:17:07 +05:30
laurenspriem
e4de98b9d6 Prevent annoying reload 2025-06-20 16:13:13 +05:30
laurenspriem
130148e5d6 Check auto merge on hiding persons 2025-06-20 15:53:02 +05:30
Manav Rathi
e2f40f1e33 Improve robustness of refresh logic 2025-06-20 15:41:50 +05:30
laurenspriem
13c9afb219 Remove redundant parameter 2025-06-20 15:14:06 +05:30
laurenspriem
a32a6e9b9e Redesign and add extra button to gallery suggestion 2025-06-20 15:13:13 +05:30
Prateek Sunal
64d04ca22d fix: move time logger to top 2025-06-20 13:41:19 +05:30
Prateek Sunal
1996bc2612 fix: update timeout to 28 second 2025-06-20 13:39:20 +05:30
laurenspriem
eaa15b0d66 (fake) squircles everywhere 2025-06-20 13:16:08 +05:30
Prateek Sunal
8003b8a6b8 fix: update freq in native code 2025-06-20 13:13:20 +05:30
Prateek Sunal
904a2c9743 fix: refactor code, decrease freq for iOS, decrease timout for iOS 2025-06-20 13:13:12 +05:30
laurenspriem
c3d4214ad0 Extract strings 2025-06-20 12:50:29 +05:30
laurenspriem
f641fac98c birthday notifications copy change 2025-06-20 12:48:26 +05:30
Prateek Sunal
b03bdfb9d6 fix: refactor code 2025-06-20 12:46:06 +05:30
laurenspriem
f3484eff79 Another minor state fix 2025-06-20 12:33:01 +05:30
Prateek Sunal
55aa8d73f0 fix: indicate android functions in separate block 2025-06-20 12:21:33 +05:30
Manav Rathi
07da6cece6 New 2025-06-20 12:19:28 +05:30
laurenspriem
6799acf965 Null safety check 2025-06-20 12:19:02 +05:30
Manav Rathi
b3bb79ecd4 Time upd 2025-06-20 12:13:29 +05:30
Prateek Sunal
858d9d3f04 Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-06-20 12:07:45 +05:30
Prateek Sunal
caa180ba1a fix: init user service as well 2025-06-20 12:06:01 +05:30
Manav Rathi
d58388e5d2 Improve usability on small screens 2025-06-20 12:03:48 +05:30
laurenspriem
6b5c4f07c2 Fix people_all_page missing small person 2025-06-20 11:52:53 +05:30
Prateek Sunal
03e7ad6268 [mob][photos] fix streaming (#6316)
## Description

- [x] Add missing filter
- [x] Log only params for ffmpeg command

## Tests

- [x] Test HDR and non-HDR videos
2025-06-20 11:51:47 +05:30
Prateek Sunal
61bd4eefa7 fix: only log params used for ffmpeg command for future debug 2025-06-20 11:44:44 +05:30
Manav Rathi
92e33c8c20 Caption 2025-06-20 11:43:14 +05:30
Manav Rathi
82063ce972 Mention file rename 2025-06-20 11:24:59 +05:30
Manav Rathi
fd8bbc3c95 Take 1 2025-06-20 11:12:33 +05:30
Manav Rathi
9cca314ea9 Relay 2025-06-20 11:08:36 +05:30
laurenspriem
33a64106be Fix UI flash 2025-06-20 11:01:33 +05:30
Manav Rathi
519287805f new 2025-06-20 10:47:45 +05:30
laurenspriem
83bf37c8bb Small improvements to file info face editor 2025-06-20 10:31:29 +05:30
Manav Rathi
8af2aa35d4 [web] Batched visibility updates for file selections (#6315) 2025-06-20 09:26:14 +05:30
Manav Rathi
f743dc14d5 Swap 2025-06-20 09:12:41 +05:30
Manav Rathi
573d269aac Batch 2025-06-20 09:07:51 +05:30
Manav Rathi
18ef86ddc3 Multi 2025-06-20 08:54:55 +05:30
Manav Rathi
d6a340ac79 Sketch 2025-06-20 08:47:42 +05:30
Manav Rathi
b217093bc9 Funnel 2025-06-20 07:46:45 +05:30
Manav Rathi
d265181c26 Conv 2025-06-20 07:42:44 +05:30
Manav Rathi
a022d4aaa2 [web] General code improvements (#6314) 2025-06-20 06:52:26 +05:30
Manav Rathi
c4f6ed6938 Fix 2025-06-20 06:44:19 +05:30
Manav Rathi
6e3a0b1b94 Restrict 2025-06-20 06:33:18 +05:30
Manav Rathi
f6b6cfa4d0 Tweak 2025-06-20 06:21:02 +05:30
Manav Rathi
3ba6ecc3c2 Rename 2025-06-20 06:11:48 +05:30
Manav Rathi
bdfaf6dcd2 Unused (ft enum is now a number) 2025-06-20 05:55:30 +05:30
Manav Rathi
6e5fb95e8f Re 2025-06-20 05:46:56 +05:30
Manav Rathi
0c81d2ff56 Prune 2025-06-20 05:19:10 +05:30
Manav Rathi
d1dd9aacfe [web] Handle custom errors from new API code paths (#6312) 2025-06-19 20:28:38 +05:30
Manav Rathi
7f18c4e669 Revert to older behaviour 2025-06-19 20:23:56 +05:30
Manav Rathi
fe334c0a24 Include case 2025-06-19 19:54:30 +05:30
Manav Rathi
8e0172eb03 Prune 2025-06-19 19:40:39 +05:30
Manav Rathi
95b73953d8 Use 2025-06-19 19:30:52 +05:30
Manav Rathi
34c606ddba Tweak 2025-06-19 19:16:31 +05:30
Manav Rathi
63597b3bc4 Handle in same file 2025-06-19 18:43:25 +05:30
Manav Rathi
7dd6e46543 Reduce indent 2025-06-19 18:31:57 +05:30
Manav Rathi
c090609045 case 2 2025-06-19 18:26:45 +05:30
Prateek Sunal
4c9e7956c1 fix: add missing filter 2025-06-19 18:22:41 +05:30
Manav Rathi
1b0bc7fd1e case 1 2025-06-19 18:21:36 +05:30
Manav Rathi
2baa16bba7 Reroute 2025-06-19 18:12:15 +05:30
Manav Rathi
3587f8cafd Conv 2 2025-06-19 17:55:58 +05:30
Manav Rathi
8e756215c0 Conv wip 2025-06-19 17:46:02 +05:30
Manav Rathi
6512820653 Conv 2025-06-19 17:13:48 +05:30
Manav Rathi
8dd4a178dd Outline 2025-06-19 17:01:52 +05:30
laurenspriem
89cb13ffde Fix UI alignment issues 2025-06-19 16:54:44 +05:30
Manav Rathi
81cb6c5ee4 Inline 2025-06-19 16:49:52 +05:30
Manav Rathi
d3cd20ef1a Inline 2025-06-19 16:48:15 +05:30
Manav Rathi
0670d02bb8 Inline 2025-06-19 16:44:22 +05:30
laurenspriem
eef3f19644 Fix setState after disposal 2025-06-19 16:29:08 +05:30
Manav Rathi
b1e1f877d0 Inline 2025-06-19 16:14:20 +05:30
Manav Rathi
6be2d19b35 Handle sub expired from new code 2025-06-19 15:48:04 +05:30
Manav Rathi
1b700c894d ft cleanup 2025-06-19 15:23:57 +05:30
Manav Rathi
2ec460a01e [desktop] [web] Regular dependency updates (#6310) 2025-06-19 14:54:40 +05:30
Manav Rathi
ac25abf7d5 Fixed upstream 2025-06-19 14:49:49 +05:30
Manav Rathi
19d6f437e3 web deps 2025-06-19 14:34:55 +05:30
Manav Rathi
c9edc409bc Dep updates
Removed @types/ffmpeg-static because their npm page says:

" This package has been deprecated. This is a stub types definition. ffmpeg-static provides its own type definitions, so you do not need this installed."
2025-06-19 14:26:53 +05:30
Manav Rathi
599ca52e16 [desktop] Fix macOS build - Take 2 (#6309) 2025-06-19 14:22:59 +05:30
Manav Rathi
023de8274d Fix macOS build - Take 2 2025-06-19 14:16:55 +05:30
Manav Rathi
1b77d0eca6 [desktop] Fix macOS CI build (#6308) 2025-06-19 13:09:01 +05:30
Manav Rathi
e9092fe01d Fix build - Take 2 2025-06-19 13:07:59 +05:30
Manav Rathi
8bc60f9b5b [desktop] Fix nightly build (#6307) 2025-06-19 12:36:36 +05:30
Manav Rathi
a851a1132d Fix build 2025-06-19 12:33:25 +05:30
Manav Rathi
93930d0636 [web] File handling internals refactoring (#6306) 2025-06-19 12:12:10 +05:30
Manav Rathi
d9941a7711 Use accessor 2025-06-19 11:53:16 +05:30
laurenspriem
d8be34000b Better alignment 2025-06-19 11:48:35 +05:30
Neeraj
da993fa9f6 [mob] Show download percentage (#6305)
## Description

## Tests
2025-06-19 11:38:03 +05:30
laurenspriem
f76e07337d Smaller debug info 2025-06-19 11:12:08 +05:30
Neeraj Gupta
b09f7d57a0 Show download percentage 2025-06-19 11:09:25 +05:30
Manav Rathi
2c1dd14098 fn accessor 2025-06-19 11:09:12 +05:30
Manav Rathi
6249e5e4d6 Skip parsing of fields we don't use 2025-06-19 10:50:11 +05:30
Manav Rathi
3aa6e5712b Move 2025-06-19 10:32:58 +05:30
laurenspriem
a9d2b09260 Fix no faces cases 2025-06-19 09:46:30 +05:30
laurenspriem
a964976b67 Remove redundant code 2025-06-19 09:39:13 +05:30
laurenspriem
e48caecfe0 Organize 2025-06-19 09:36:14 +05:30
laurenspriem
686ab262b2 Lower face detection threshold during indexing 2025-06-19 09:30:10 +05:30
Manav Rathi
2418c24901 Rename 2025-06-19 09:09:10 +05:30
Manav Rathi
9c5e46ee11 Sketch 2025-06-19 09:05:06 +05:30
laurenspriem
1bbdefbd41 UI improvements 2025-06-19 08:59:16 +05:30
laurenspriem
3dcd2570ad Fix buttons working 2025-06-19 08:28:35 +05:30
Manav Rathi
2ed28c3b70 [desktop] Revert HLS flag until release spec finalization (#6302) 2025-06-18 20:52:36 +05:30
Manav Rathi
3c87ef0d28 Revert HLS flag until release spec finalization 2025-06-18 20:47:56 +05:30
Manav Rathi
d0fc047fc9 [web] File handling internals refactoring (#6301)
There are quite a few TODOs, but for the only case where the new code is
running (cast), the unfinished business should not get in the way.
2025-06-18 20:40:45 +05:30
Manav Rathi
3e0448bbe5 Lint workrounds for photos tsc 2025-06-18 20:32:02 +05:30
Manav Rathi
773d98e20c Doc 2025-06-18 20:27:41 +05:30
Manav Rathi
29afe01c40 Fix error handling 2025-06-18 20:11:40 +05:30
Manav Rathi
d49288a1c0 Use new type in cast 2025-06-18 20:02:42 +05:30
Manav Rathi
d7faaa6592 Handle 2025-06-18 17:03:15 +05:30
Manav Rathi
b99b3646da Doc 2025-06-18 16:53:51 +05:30
Prateek Sunal
d4ca156f53 Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-06-18 16:46:52 +05:30
Prateek Sunal
4e59a4af5f fix: run suicide and cancellable operation simultaneously 2025-06-18 16:46:11 +05:30
Neeraj
15eb0321ac [server] Gracefully handle client retry (#6285)
## Description

## Tests
2025-06-18 16:42:27 +05:30
laurenspriem
f7dfb5df24 MVP file info feedback 2025-06-18 16:39:22 +05:30
Neeraj Gupta
52103c4b2f Fix: match value instead of ptr 2025-06-18 16:23:05 +05:30
Prateek Sunal
9fd724ff2d fix: restrict initial delay to internal users 2025-06-18 16:19:23 +05:30
Prateek Sunal
230244f2e5 Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-06-18 16:02:30 +05:30
Neeraj
7f14bdd0a0 [mob] Streaming minor fixes & refactoring (#6292)
## Description

- [x] Better HDR Detection
- [x] Code side all options are merged to one with more documentation
- [x] Better cutoff date
- [x] Max FPS 30
- [x] Max height 720p
- [x] Better Tonemapping
- [x] Remove redundant hls time and video bitrate

## Tests
2025-06-18 15:48:02 +05:30
laurenspriem
f71e5accce Restore face score minimum for ui 2025-06-18 15:32:44 +05:30
Neeraj
e055c750aa [mob] Log req id on network error (#6300)
## Description
We can use this to trace the request on the server (if it actually
reached server).

## Tests
2025-06-18 15:08:22 +05:30
Neeraj Gupta
11f2cce274 Log reqest id on error 2025-06-18 14:37:46 +05:30
Neeraj Gupta
69eef7043f Use nanoID for request id 2025-06-18 14:37:46 +05:30
Neeraj
60cc6fda96 [mob] Log event source for public link handling (#6298)
## Description
Opening public link within the app opens the collection twice, adding
logs to investigate the root cause.
## Tests
2025-06-18 14:36:55 +05:30
laurenspriem
ee603ba82e Log faceID issues 2025-06-18 14:26:19 +05:30
Prateek Sunal
8c8f0b46ef Merge remote-tracking branch 'origin/main' into streaming-out-of-beta 2025-06-18 14:03:30 +05:30
Prateek Sunal
231a77239f fix: disable streaming by default 2025-06-18 14:00:58 +05:30
Manav Rathi
89f58bf043 Sketch 2025-06-18 13:28:57 +05:30
Manav Rathi
4dc3421ab9 Split 2025-06-18 13:28:57 +05:30
Manav Rathi
ce9c227780 Type 2025-06-18 13:28:57 +05:30
Manav Rathi
0d77c0a49b Conv 2025-06-18 13:28:57 +05:30
Manav Rathi
f9b67e2197 R1 2025-06-18 13:28:57 +05:30
Manav Rathi
114ff5dc9b Take 1 at remote type 2025-06-18 13:28:57 +05:30
Manav Rathi
2a85d17cc1 Outline 2025-06-18 13:28:57 +05:30
Neeraj
d430a5cf31 [mob] Skip hash check for local only assets (#6295)
## Description
Also logging the stackTrace on exception
## Tests
2025-06-18 12:12:34 +05:30
Laurens Priem
f484f953fa [mob] Fix: use OS specific logic for computing device health (#6296)
## Description

## Tests
2025-06-18 12:11:36 +05:30
Francisco Pires Negromonte
c23d9cb96f [auth] Add custom icons for memed and sei (#6297)
Custom icons added for:

- Memed (a brazilian online prescription service)
- Sei! (Sistema Eletrônico de Informações)
2025-06-18 11:40:14 +05:30
Neeraj Gupta
eca8f3432e [mob] Fix: use OS specific logic for computing device health 2025-06-18 11:29:16 +05:30
Neeraj Gupta
2edce34f29 Generate l10n files 2025-06-18 11:23:40 +05:30
Neeraj Gupta
af0fccf36e Fix lint 2025-06-18 11:19:17 +05:30
Neeraj Gupta
f00d04c0b8 Fix translation 2025-06-18 11:13:54 +05:30
Neeraj Gupta
a310fbe14f Skip hash check for local only assets 2025-06-18 11:07:19 +05:30
laurenspriem
fc1e119fcd Return new clusterID 2025-06-18 11:07:12 +05:30
Laurens Priem
569423af12 [mob][photos] Various tiny changes (#6294)
## Description

Just copy and rename changes.
2025-06-18 10:02:05 +05:30
laurenspriem
8cd25252f8 Better copy 2025-06-18 09:53:35 +05:30
laurenspriem
1e63fe72cf More logging for birthday notification redirect 2025-06-18 09:49:17 +05:30
Prateek Sunal
1a5a7d71b6 fix: extract filters to simplify command 2025-06-17 20:46:26 +05:30
Prateek Sunal
91198d02e3 fix: remove the concept of cutoff date 2025-06-17 20:19:52 +05:30
Prateek Sunal
aa45fe898a Revert "fix: remove the limit for size and duration"
This reverts commit 9acfbf355c.
2025-06-17 20:07:09 +05:30
Prateek Sunal
92e013d5c9 fix: set streaming on by default 2025-06-17 20:03:43 +05:30
Prateek Sunal
9acfbf355c fix: remove the limit for size and duration 2025-06-17 20:02:03 +05:30
Prateek Sunal
59f64da447 fix: merge all options for ffmpeg hls 2025-06-17 19:56:22 +05:30
Manav Rathi
31f3958925 [web] Collection internals refactoring (#6290) 2025-06-17 19:21:03 +05:30
Manav Rathi
c78588c9c2 Fix "A component is changing an uncontrolled input to be controlled" 2025-06-17 19:15:16 +05:30
Manav Rathi
2dbeffe380 Match the behaviour of LocalCollection 2025-06-17 19:05:47 +05:30
Manav Rathi
9f9aa17cb4 Reorder 2025-06-17 18:59:15 +05:30
Manav Rathi
44ea3d92e2 Conv 2025-06-17 18:55:25 +05:30
Manav Rathi
21d3f42e2a Conv 2025-06-17 18:44:14 +05:30
Manav Rathi
b4052fcc00 Swap 2025-06-17 18:36:38 +05:30
Manav Rathi
fc7b8c18cb Fix error on unarchiving last archived item 2025-06-17 18:33:37 +05:30
Manav Rathi
6983dd9364 Pass directly 2025-06-17 18:12:42 +05:30
Manav Rathi
5877d64449 ontology 2025-06-17 18:06:15 +05:30
Manav Rathi
cc54faf78a Move 2025-06-17 17:40:26 +05:30
Manav Rathi
446b7bbd00 Conv 2025-06-17 17:21:00 +05:30
Manav Rathi
53468c9c3e Reactive 2025-06-17 17:01:53 +05:30
Manav Rathi
67e1cddfa1 Conv 2025-06-17 16:43:11 +05:30
Manav Rathi
5c83f3aa15 Outline 2025-06-17 16:34:05 +05:30
Manav Rathi
d32b44bc2d Outline 2025-06-17 15:52:32 +05:30
Manav Rathi
b70c216131 Rename 2025-06-17 15:43:51 +05:30
Manav Rathi
58e2b8ab52 Rename 2025-06-17 15:43:51 +05:30
Manav Rathi
8b7e630bed Move 2025-06-17 15:43:51 +05:30
laurenspriem
323c37c34e Change birthday copy 2025-06-17 15:35:59 +05:30
laurenspriem
b593f2d390 Rename file 2025-06-17 15:23:20 +05:30
laurenspriem
3800ba1dc9 Rename variables for clarity 2025-06-17 15:11:46 +05:30
laurenspriem
8a00cfe2e7 cluster feedback method for face level feedback 2025-06-17 15:04:29 +05:30
Manav Rathi
e8e0ff63fc [web] Collection storage internals refactoring (#6289) 2025-06-17 14:34:03 +05:30
Neeraj
c324267c5f [mob] Remove dead code (#6288)
## Description

## Tests
2025-06-17 13:33:21 +05:30
Manav Rathi
6a481f40da Impl 2025-06-17 13:29:45 +05:30
Manav Rathi
d02650047a Outline 2025-06-17 13:08:13 +05:30
Neeraj Gupta
b908fd8efb Remove dead code 2025-06-17 12:38:39 +05:30
laurenspriem
0aaed84549 Switch back to round face thumbnails 2025-06-17 12:32:28 +05:30
laurenspriem
7b980d83c1 Fix suggestion result not updating 2025-06-17 11:43:23 +05:30
Neeraj
dc9a90046e [mob][l10n] Fix arb with multiple plurals (#6287)
## Description

## Tests
2025-06-17 11:40:13 +05:30
laurenspriem
3cd5610b45 person gallery suggestion UI 2025-06-17 11:36:31 +05:30
Neeraj Gupta
48a392ef78 Fix arb 2025-06-17 11:21:25 +05:30
Neeraj Gupta
1e324b3e5c Update Podfile.lock 2025-06-17 11:06:08 +05:30
Manav Rathi
37967ecc05 Impl 1 2025-06-17 10:55:18 +05:30
Manav Rathi
b3776600e6 Sketch 2025-06-17 10:33:57 +05:30
Neeraj
90f3deb5e7 [mobile] New translations (#6269)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2025-06-17 10:28:39 +05:30
Neeraj Gupta
79d35f3710 Gracefully handle client retry 2025-06-17 10:16:49 +05:30
Manav Rathi
5b2463258c Take 2 2025-06-17 09:53:41 +05:30
Manav Rathi
7607003dd5 Trim 2025-06-17 09:43:52 +05:30
Manav Rathi
c4abdc3230 More details 2025-06-17 09:35:25 +05:30
laurenspriem
de079ca3b8 Fix in suggestion calc logic 2025-06-17 09:20:44 +05:30
Manav Rathi
80f1420170 Split 2025-06-17 09:13:35 +05:30
Manav Rathi
e3c7c8c994 Update 2025-06-17 08:35:09 +05:30
Manav Rathi
dabdb01ce6 Swap 2025-06-17 08:09:17 +05:30
Neeraj
6a4a971863 [mob] Refactor auth for public collections (#6278)
## Description

## Tests
2025-06-16 23:00:00 +05:30
Neeraj
de6a0ab5bc [auth] New translations (#6270)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2025-06-16 21:20:00 +05:30
Manav Rathi
41102dab4b Impl 1 2025-06-16 20:42:15 +05:30
Manav Rathi
9ac77d832f Take 1 2025-06-16 20:28:18 +05:30
Manav Rathi
2ab250e7db Outline 2025-06-16 20:21:45 +05:30
Manav Rathi
75e289640a Trim 2025-06-16 19:34:44 +05:30
Vishnu Mohandas
6bf4b9faf4 [auth] Remove dead code related to recovery key verification (#6281) 2025-06-16 19:27:17 +05:30
vishnukvmd
15925b47fb Remove dead code related to recovery key verification 2025-06-16 19:26:56 +05:30
Manav Rathi
a58ab7cd16 conv 2 2025-06-16 19:25:19 +05:30
Manav Rathi
e566b1596d convert wip 1 2025-06-16 17:48:33 +05:30
Manav Rathi
a61389b776 by id 2025-06-16 16:29:28 +05:30
Manav Rathi
14c9dad567 Inline 2025-06-16 16:29:28 +05:30
Manav Rathi
fc1f3d66a2 Rename 2025-06-16 16:29:28 +05:30
Manav Rathi
1d45f09162 Swap 2025-06-16 16:29:28 +05:30
Manav Rathi
33c321c7ff [photos] [desktop] Windows code signing (#6279) 2025-06-16 16:18:02 +05:30
Neeraj Gupta
6b336ed19a Remove redundant future 2025-06-16 16:08:57 +05:30
Neeraj Gupta
c6d57fe689 Refactor 2025-06-16 16:07:19 +05:30
Neeraj
154fb77a1f [mob] Add support for playing preview for shared public links (#6277)
## Description

## Tests
Tested locally and verified that I am able to play video preview
2025-06-16 16:02:26 +05:30
Neeraj Gupta
de1a87b855 Fix lint 2025-06-16 15:55:39 +05:30
Neeraj Gupta
d121bd5ed2 Refactor 2025-06-16 15:37:11 +05:30
Neeraj Gupta
fb55b785c2 Add support for playing preview for public links 2025-06-16 15:31:15 +05:30
laurenspriem
9ec9282492 Refactor methods 2025-06-16 15:03:27 +05:30
Neeraj Gupta
cf8ad57eea Merge remote-tracking branch 'origin/main' into shared_link_preview 2025-06-16 14:52:46 +05:30
Neeraj
0dad2dedeb [mob] Route to asset if sharedCollection has single asset (#6276)
## Description

## Tests
2025-06-16 14:52:31 +05:30
laurenspriem
276d75b47d Simple method for getting fast person suggestions 2025-06-16 14:41:49 +05:30
Neeraj Gupta
1230ed3018 Rename PreviewVideoStore - VideoPreviewService 2025-06-16 14:41:18 +05:30
Manav Rathi
c0d26e80b3 Windows code signing 2025-06-16 14:30:35 +05:30
laurenspriem
ea439c939f Tiny performance improvement 2025-06-16 14:29:08 +05:30
Neeraj
7976873384 [mob] Enable resumable download for all (#6275)
## Description

## Tests
2025-06-16 14:25:02 +05:30
Neeraj Gupta
bedda2cbc4 Rename 2025-06-16 14:21:46 +05:30
Neeraj Gupta
dd8a355ac4 Enable resumable download for all 2025-06-16 14:16:22 +05:30
Neeraj
f2bc7a3f20 [mob] Increase fileSize limit to 10GiB (#6274)
## Description

## Tests
2025-06-16 14:09:15 +05:30
Neeraj Gupta
5820bb6c1b Increase fileSize limit to 10GiB 2025-06-16 14:04:23 +05:30
Manav Rathi
d93f52ad1a Up 2025-06-16 13:39:11 +05:30
Manav Rathi
383c12f11b [desktop][web] Increase file size limit to 10 GB (#6273)
For all users
2025-06-16 13:31:48 +05:30
Manav Rathi
5839bbd690 Prep for release 2025-06-16 13:27:45 +05:30
Prateek Sunal
60b040f54b fix: logging in bg 2025-06-16 13:02:52 +05:30
Manav Rathi
60c7adbb8a [web] Collection APIs refactoring (#6272) 2025-06-16 11:50:57 +05:30
Manav Rathi
d45d3c38e6 Switch 2025-06-16 11:37:14 +05:30
Manav Rathi
89897aef4b Match casing 2025-06-16 11:30:25 +05:30
Manav Rathi
dc3a242dcb Close parent menu after closing child menu
Fixes the errors on console when selecting an collection sort order
2025-06-16 11:28:38 +05:30
Manav Rathi
03f418245d Update 2025-06-16 11:12:01 +05:30
Manav Rathi
8046e2fd74 New and use 2025-06-16 10:51:58 +05:30
Manav Rathi
2e05ff06f4 Use 2025-06-16 10:40:21 +05:30
Keerthana
bf831a3057 [auth] Add Ankara University icon support (#6260)
## Add Ankara University custom icon to Auth

Ankara University has recently started implementing 2FA in their student
information system.
2025-06-16 10:18:40 +05:30
Manav Rathi
8b691fe905 New 2025-06-16 10:03:28 +05:30
Manav Rathi
7b8230fa6c Sketch 2025-06-16 09:41:06 +05:30
Manav Rathi
379491f3de [web] New translations (#6268)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-06-16 08:33:28 +05:30
Crowdin Bot
9643b244f6 New Crowdin translations by GitHub Action 2025-06-16 01:17:54 +00:00
Crowdin Bot
48c16e92e9 New Crowdin translations by GitHub Action 2025-06-16 01:05:02 +00:00
Crowdin Bot
6143b68eb1 New Crowdin translations by GitHub Action 2025-06-16 00:41:45 +00:00
Vishnu Mohandas
73521f8253 [auth] Consolidate lock screen settings (#6267)
## Description

Move code related to lock screen settings from `Configuration` to
`LockScreenSettings`.
2025-06-15 20:08:12 +05:30
vishnukvmd
673ae95aa8 Typo 2025-06-15 18:56:53 +05:30
vishnukvmd
33a64c9887 Consolidate lock screen settings 2025-06-15 18:49:11 +05:30
Keerthana
576350bc1f [docs][script] update quickstart to provide choice to start cluster (#6257)
## Description
- This PR updates `quickstart.sh` to prompt user to start cluster, which
acts as a way to modify default configuration.
- Further, indication of usage of MinIO web console is provided in the
`quickstart.sh` in commented form, allowing users to administer the
object storage using web based interface.
- Updation of requirements to provide more clarity in self-hosting
documentation

## Tests
- [x] I have tested these changes on my system
2025-06-15 18:05:57 +05:30
Vishnu Mohandas
ad3a85d80b [auth] Remove dead code (#6266) 2025-06-15 17:53:36 +05:30
vishnukvmd
e27cc11a49 [auth] Remove dead code 2025-06-15 17:53:20 +05:30
Vishnu Mohandas
8504b3984a [docs] Update export/index.md 2025-06-14 21:52:25 +05:30
Laurens Priem
68f5f08df5 [mob][photos] Improve caching for memories and magic (#6252)
## Description

- Fixes issues with chinese characters
- Runs decoding in computer

## Tests

Tested in debug mode on my pixel phone.
2025-06-14 10:55:43 +05:30
Keerthana
29024b91fe [server] uncomment environment variables for web 2025-06-14 10:07:03 +05:30
Yusuf Danış
d96a24c2ca [auth] Add Ankara University icon support fix 2025-06-13 21:41:34 +03:00
Yusuf Danış
0f41eb99f2 [auth] Add Ankara University icon support 2025-06-13 21:26:13 +03:00
Manav Rathi
7ad277c666 [web] Code improvements (#6259)
(Public links etc)
2025-06-13 17:28:52 +05:30
Manav Rathi
002cfd5419 Leftovers 2025-06-13 17:17:10 +05:30
Manav Rathi
9e8e57051a Lint workarounds 2025-06-13 17:08:10 +05:30
Manav Rathi
08c446a57c Tweak 2025-06-13 16:58:04 +05:30
Manav Rathi
fe59a6f5b9 2 2025-06-13 16:40:31 +05:30
Manav Rathi
c234688542 re 2025-06-13 16:36:52 +05:30
Manav Rathi
f96e7507bc Conv 2025-06-13 16:28:07 +05:30
Manav Rathi
beac9f5756 New 2025-06-13 16:22:04 +05:30
Laurens Priem
3eb700661b Update mobile/lib/utils/cache_util.dart
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-06-13 16:02:12 +05:30
Manav Rathi
17f9c8299f Re 2025-06-13 15:19:29 +05:30
Manav Rathi
7cecb80a64 Reuse 2025-06-13 14:06:16 +05:30
Manav Rathi
e4ae03a252 Tweak 2025-06-13 13:46:38 +05:30
Manav Rathi
c52df50faf wrap 2025-06-13 13:36:29 +05:30
Manav Rathi
3502579b11 Unused 2025-06-13 13:21:16 +05:30
Manav Rathi
d58c500c97 Reroute 2025-06-13 12:59:27 +05:30
Manav Rathi
3ee741abbb Impl 2025-06-13 12:21:08 +05:30
Manav Rathi
cf424e59f6 Sugar
> Because primitives can be spread into objects as well, and from the
> observation that all falsy values do not have enumerable properties, we can
> simply use a logical AND
>
> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
2025-06-13 12:05:46 +05:30
Manav Rathi
634a4e595c Impl 2025-06-13 11:49:10 +05:30
Manav Rathi
3da404a714 Sketch 2025-06-13 11:10:49 +05:30
Keerthana
bdcd75a3be [docs] refactor docker compose start in quickstart 2025-06-13 10:27:59 +05:30
Manav Rathi
a75b9c0574 [web] Iterate on the new collection handling lower layers (#6258) 2025-06-13 10:27:38 +05:30
Manav Rathi
f407af363a Lint workaround 2025-06-13 10:20:35 +05:30
Manav Rathi
17378319f6 Other places too 2025-06-13 10:03:52 +05:30
Manav Rathi
86dc335137 Both 2025-06-13 09:34:25 +05:30
Manav Rathi
4d9b7fa905 Alt 2025-06-13 08:49:44 +05:30
Manav Rathi
9fde80593f Temp scaffold and cast 2025-06-13 06:40:30 +05:30
Manav Rathi
fdc428bde4 Reorder 2025-06-13 06:19:16 +05:30
Manav Rathi
4edc144255 fin 2025-06-13 06:19:16 +05:30
Manav Rathi
e5b60d434d Pub 2025-06-13 06:19:16 +05:30
Manav Rathi
7ee222925d MM type 2025-06-13 06:19:16 +05:30
Manav Rathi
42a6697531 Not really 2025-06-13 06:19:16 +05:30
Manav Rathi
223fd9a7d5 Start count at 1 (same as existing code) 2025-06-13 06:19:16 +05:30
Keerthana
9693cb3c8d [docs] Added socials to docs
## Description
Added Ente's Bluesky and Instagram accounts
2025-06-13 04:46:27 +05:30
Keerthana
898c0e31a1 [docs] update quickstart documentation 2025-06-13 03:54:53 +05:30
Keerthana
bab661914d [docs][script] provide option to start cluster and update pre-requisites 2025-06-13 03:40:33 +05:30
AmanRajSinghMourya
3c4a92612d Fix grid view size 2025-06-12 19:15:00 +05:30
AmanRajSinghMourya
000002c327 Fix text alignment 2025-06-12 18:58:51 +05:30
Manav Rathi
dc051e75e3 [web] Code improvements (#6253)
Still iterating on the code structure for this
2025-06-12 17:28:52 +05:30
Manav Rathi
b500912650 Refactor 2025-06-12 17:09:23 +05:30
Manav Rathi
7e13f8b1cc Rearrange 2025-06-12 16:32:58 +05:30
Manav Rathi
d535cfc5a4 sk 3 2025-06-12 16:08:15 +05:30
Prateek Sunal
25b96825cc Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-06-12 15:58:58 +05:30
Prateek Sunal
6d952cc89e fix: only throw notifications for sync to internal users 2025-06-12 15:52:33 +05:30
laurenspriem
e0303cd2a6 Set minimum cluster size to 2 2025-06-12 15:16:03 +05:30
Prateek Sunal
4d0a6e93ea fix(remote_sync): prioritize non-updated files, push videos to back in bg for uploads 2025-06-12 15:15:18 +05:30
laurenspriem
15f844e538 import 2025-06-12 15:09:39 +05:30
laurenspriem
56db78d699 Caching test in moments section 2025-06-12 15:09:33 +05:30
laurenspriem
a9cf299a4f Dev logging in computer 2025-06-12 15:06:23 +05:30
laurenspriem
5f75db4e1f Clean old method 2025-06-12 15:02:46 +05:30
laurenspriem
8459d7ead6 Integrate better caching methods 2025-06-12 15:01:14 +05:30
Manav Rathi
64e671b0d2 Try without it first 2025-06-12 14:39:49 +05:30
Manav Rathi
23609c4bb9 Revert the envelope terminology 2025-06-12 14:35:41 +05:30
Prateek Sunal
331521306e fix(bg): don't run HomeWidget sync in bg 2025-06-12 14:33:44 +05:30
Prateek Sunal
141b5603eb fix: simplify remote sync code 2025-06-12 14:33:10 +05:30
Manav Rathi
8585f3881c Sketch 2 2025-06-12 14:12:26 +05:30
Manav Rathi
432d44f4af Sketch 2025-06-12 13:43:46 +05:30
Manav Rathi
49b4adc843 Test a suffix 2025-06-12 13:29:14 +05:30
Manav Rathi
228bf55a8d C2 2025-06-12 12:29:36 +05:30
Manav Rathi
00aabfc283 Separate concerns 2025-06-12 12:11:41 +05:30
laurenspriem
8463dc8721 Separate caching util in computer 2025-06-12 11:54:07 +05:30
Manav Rathi
fe224b5ab2 dec 2025-06-12 11:43:01 +05:30
Manav Rathi
6e9f3bfbe2 [web] Explore alternative internal API for magic metadata (#6250) 2025-06-12 11:24:22 +05:30
Manav Rathi
d44fe31277 Implement 2025-06-12 11:14:02 +05:30
Keerthana
709a9f5996 Merge branch 'main' into docs/revamp 2025-06-12 10:43:59 +05:30
Manav Rathi
71867dd63e Move and doc 2025-06-12 09:56:43 +05:30
Manav Rathi
3db9ded294 Schema 1 2025-06-12 08:39:17 +05:30
Manav Rathi
844b893ebf Doc 2025-06-12 08:25:22 +05:30
Prateek Sunal
a6c69b80e3 fix: init hw prefs 2025-06-11 20:27:45 +05:30
Manav Rathi
7885ad18c6 Take 3 2025-06-11 20:14:53 +05:30
Manav Rathi
dab8b634bd Take 2 2025-06-11 18:51:29 +05:30
Manav Rathi
d59eed6974 Take 1 2025-06-11 18:35:30 +05:30
AmanRajSinghMourya
b1837dec75 Resolve merge conflict 2025-06-11 18:28:41 +05:30
Manav Rathi
b5edd39517 Trim 2025-06-11 18:09:19 +05:30
Manav Rathi
0931e590a9 Conv 2025-06-11 18:00:44 +05:30
Prateek Sunal
89917d6168 fix: bump version code and number 2025-06-11 17:42:16 +05:30
Prateek Sunal
41ebc50538 Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-06-11 17:40:41 +05:30
Prateek Sunal
f7ace0a57f fix: re-enable foreground sync 2025-06-11 17:39:12 +05:30
Manav Rathi
b7b7d2382b [web] General code improvements (#6246) 2025-06-11 17:30:19 +05:30
Manav Rathi
49d3b033cb Update patch versions 2025-06-11 17:21:39 +05:30
Manav Rathi
5a78b77da5 Match the package.json name 2025-06-11 17:15:55 +05:30
Manav Rathi
34f3c55573 Prevent layout shift 2025-06-11 17:04:35 +05:30
Manav Rathi
6521921687 Reduce layout shift 2025-06-11 16:56:34 +05:30
Prateek Sunal
806bf2cd31 fix: update period to 60m, make BgTask cancellable, init crypto 2025-06-11 16:47:13 +05:30
Prateek Sunal
ff3d105271 chore: add async & update workmanager source 2025-06-11 16:46:10 +05:30
Prateek Sunal
4d30d8837a chore: lint fix 2025-06-11 16:45:54 +05:30
Prateek Sunal
f35e2fb49c fix: only throttle for videos when multipart is not enabled 2025-06-11 16:45:45 +05:30
Prateek Sunal
cae140b239 chore: lint fix 2025-06-11 16:45:06 +05:30
Prateek Sunal
b11452d29a fix: content type not set issue 2025-06-11 16:44:57 +05:30
Manav Rathi
155d939ae8 The button remains disabled if first input is empty 2025-06-11 16:38:33 +05:30
AmanRajSinghMourya
11383d3689 Merge branch 'main' into memory_improvement 2025-06-11 16:36:07 +05:30
Manav Rathi
00d4d27277 Update 2025-06-11 16:34:16 +05:30
Aman Raj Singh Mourya
97309e9a6e [mob][photos] Memory swipe (#6245)
## Description
Enable swipe between memories.
2025-06-11 16:31:02 +05:30
Manav Rathi
501bba0283 Unyup 2025-06-11 16:29:38 +05:30
AmanRajSinghMourya
e51506b9f8 Pause animtaion when delete/share action is performed 2025-06-11 16:28:34 +05:30
Manav Rathi
df5b46e0d3 Redo 2025-06-11 16:28:32 +05:30
AmanRajSinghMourya
55dd0ea830 Refactor tap handling in video widgets to prevent interaction when viewing memories 2025-06-11 16:27:23 +05:30
Manav Rathi
7e76f40f43 Handle 2025-06-11 15:28:29 +05:30
Manav Rathi
1c2e81353d New 2025-06-11 14:54:04 +05:30
Manav Rathi
bf53b61d03 redo 2 2025-06-11 14:33:44 +05:30
laurenspriem
6256ddfc78 Extra error handling around face thumbnail caching 2025-06-11 14:17:09 +05:30
Manav Rathi
6937701fa4 vis 2025-06-11 14:16:29 +05:30
AmanRajSinghMourya
29962197d7 Refractor 2025-06-11 14:13:22 +05:30
AmanRajSinghMourya
287e6da537 To avoid shuffling of memories when user see all the files in one memory 2025-06-11 14:13:06 +05:30
Manav Rathi
069958d220 Unyup and redo 2025-06-11 14:06:38 +05:30
Neeraj
d95fb14f8e [mob] Reduce home gallery refresh during iOS upload/indexing (#6242) 2025-06-11 13:49:56 +05:30
Manav Rathi
4c231691f6 re 2025-06-11 13:49:39 +05:30
Prateek Sunal
718a81e41d chore: bump locks 2025-06-11 13:49:13 +05:30
laurenspriem
8d67d07f27 Increase face thumbnail cache 2025-06-11 13:46:31 +05:30
Manav Rathi
e965aa370c Inline 2025-06-11 13:42:09 +05:30
Manav Rathi
daaefd8e18 Match padding 2025-06-11 13:39:50 +05:30
Manav Rathi
138b4a5cc4 Conv 2025-06-11 13:19:34 +05:30
Manav Rathi
ed48c74885 Specific 2025-06-11 13:06:44 +05:30
Manav Rathi
27b816e50e Sp 2025-06-11 13:01:06 +05:30
Manav Rathi
b5ac9a9591 Rework 2025-06-11 12:53:19 +05:30
laurenspriem
7ec1eaf334 Extract strings 2025-06-11 12:51:55 +05:30
laurenspriem
e1e66ca670 Keep button in place 2025-06-11 12:47:13 +05:30
Manav Rathi
673a8df520 unyup 2025-06-11 12:41:41 +05:30
Manav Rathi
f55e718aca Conv 2025-06-11 12:39:02 +05:30
Manav Rathi
15008d0559 Conv 2025-06-11 12:35:13 +05:30
Manav Rathi
a1a45df14e use 2025-06-11 12:29:07 +05:30
Prateek Sunal
c7b06d8a69 Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-06-11 12:25:26 +05:30
laurenspriem
c0b0fa44af Smooth grid extension 2025-06-11 12:11:25 +05:30
Neeraj Gupta
38bacb17e0 Simplify 2025-06-11 11:57:47 +05:30
Neeraj Gupta
6febb54478 Ignore fileUpdate event if asset was recently requested 2025-06-11 11:53:34 +05:30
Manav Rathi
263bfa55e5 [web] SRP code improvements (#6241) 2025-06-11 11:35:10 +05:30
laurenspriem
4c9a09866b Use slivers instead 2025-06-11 11:23:41 +05:30
Manav Rathi
a43d19fb79 Obs 2025-06-11 11:13:27 +05:30
Manav Rathi
999cc91f6c Fix cyclic dep 2025-06-11 11:12:55 +05:30
Manav Rathi
488886d685 Rename 2025-06-11 11:06:32 +05:30
Manav Rathi
485fbcf393 Doc 2025-06-11 11:04:06 +05:30
Manav Rathi
f434e0dd67 Part of the subclass 2025-06-11 10:44:07 +05:30
Manav Rathi
cbb35a8e3c Rearrange 2025-06-11 10:39:22 +05:30
laurenspriem
caff966d3b More faces option 2025-06-11 10:38:00 +05:30
Manav Rathi
7539a1003c re 2025-06-11 10:34:18 +05:30
laurenspriem
ee24d12d8c Simpler fallback for little faces 2025-06-11 10:32:27 +05:30
Manav Rathi
4dc424464e Doc and cleanup 2025-06-11 10:03:21 +05:30
Manav Rathi
977552fa81 Unlog 2025-06-11 09:36:19 +05:30
Manav Rathi
644bfe72af Move to service layer 2025-06-11 09:32:33 +05:30
Manav Rathi
fc21932a34 Conv 2025-06-11 09:09:18 +05:30
Manav Rathi
a1a480f35e Rename 2025-06-11 09:04:34 +05:30
Manav Rathi
61d07242ad Conv 2025-06-11 09:03:51 +05:30
laurenspriem
ea217404e9 Early stopping for efficiency 2025-06-11 09:00:18 +05:30
laurenspriem
6f7250d179 Remove unneeded fallback 2025-06-11 08:58:13 +05:30
laurenspriem
9e27951c3e Remove old comment 2025-06-11 08:49:41 +05:30
Manav Rathi
91891fc5b5 Rearrange 2025-06-11 08:15:22 +05:30
Manav Rathi
b62ea7b28f [web] SRP related refactoring (#6239) 2025-06-10 20:44:35 +05:30
Manav Rathi
893e1e307d Conv 2025-06-10 20:34:01 +05:30
Manav Rathi
6b4653a996 Conv 2025-06-10 20:29:41 +05:30
Manav Rathi
06dcc697f9 Tweak 2025-06-10 20:06:23 +05:30
Manav Rathi
f62872808d Reorder 2025-06-10 19:50:52 +05:30
Manav Rathi
0fe5b45f8b Use 2025-06-10 19:30:51 +05:30
Manav Rathi
44e71d8b09 New 2025-06-10 19:25:21 +05:30
Manav Rathi
abc1f2cd64 Rename 2025-06-10 19:23:08 +05:30
Manav Rathi
8a8d0e4069 Reorder 2025-06-10 19:21:04 +05:30
Manav Rathi
ec3df01606 Tweak 2025-06-10 19:20:14 +05:30
Manav Rathi
851fd08d5d inline hop 2025-06-10 19:13:58 +05:30
AmanRajSinghMourya
c7cb728feb Merge branch 'main' into album_fixes 2025-06-10 19:07:27 +05:30
Manav Rathi
43ae1de2b5 Move 2025-06-10 19:07:07 +05:30
AmanRajSinghMourya
13bac40aeb Fix: resolve conflict in pubspec.yaml 2025-06-10 19:03:41 +05:30
AmanRajSinghMourya
1e5abf20cd Improve memory navigation and data handling in memory widgets 2025-06-10 18:58:19 +05:30
AmanRajSinghMourya
6a796debb8 Callback to go to next/previous memories 2025-06-10 18:56:49 +05:30
Manav Rathi
7373a07a71 Stash and unstash 2025-06-10 18:53:15 +05:30
Manav Rathi
f9fc6b83d0 schema 2025-06-10 18:46:21 +05:30
Manav Rathi
6ff586c3e9 Move 2025-06-10 18:30:29 +05:30
Manav Rathi
fc9b2a186b Unnest 2025-06-10 18:20:05 +05:30
Manav Rathi
dfbf51fa36 Conv 2025-06-10 18:16:48 +05:30
Manav Rathi
6a417750b2 [web] Translation tweaks (#6238) 2025-06-10 18:13:23 +05:30
Manav Rathi
0d08907e9c Casing 2025-06-10 18:09:33 +05:30
Manav Rathi
589acf459d Rename 2025-06-10 18:07:35 +05:30
Manav Rathi
5d0dff7172 [web] Signup flow code improvements (#6237) 2025-06-10 17:58:17 +05:30
Manav Rathi
9827ca5048 Fix 2025-06-10 17:51:24 +05:30
Manav Rathi
c7341e65e9 Below 2025-06-10 17:42:22 +05:30
Neeraj
c1a2c76a38 [mob] Fix: Take wakelock to continue video download (#6234)
## Description
Note: Review by commit, we have just removed old widget and renamed the
media_kit_new to media_kit.

Previously, while using media_kit, as we were not taking wakeload before
video playback actually starts, the download was getting paused when
dispose was getting called.

Also, increased the file size limit for internal users.



## Tests
2025-06-10 17:39:06 +05:30
AmanRajSinghMourya
3d58698bfc Use better name + code refractoring 2025-06-10 17:05:25 +05:30
laurenspriem
71c70dcc8c Fix people cascade effect 2025-06-10 17:01:33 +05:30
Manav Rathi
584ca125a6 Unyup 2025-06-10 16:35:02 +05:30
Manav Rathi
4b616dcbe1 Unnest 2025-06-10 16:31:32 +05:30
Manav Rathi
ac59eae329 Vis 2025-06-10 16:21:37 +05:30
Neeraj Gupta
44a1e6c28b Increase file size for internal users 2025-06-10 16:18:00 +05:30
Neeraj Gupta
d6500f8cb7 Fix: Take wakelock before playback to continue downloading 2025-06-10 16:15:32 +05:30
Manav Rathi
769704f0fc Use built in prop 2025-06-10 16:13:10 +05:30
Neeraj Gupta
ba7fbcc02f Rename 2025-06-10 16:12:23 +05:30
Neeraj Gupta
613a08dd3a Remove unused widget 2025-06-10 16:09:59 +05:30
Manav Rathi
7087de0c94 Form prop 2025-06-10 16:06:14 +05:30
Manav Rathi
afa0d87c76 Label 2025-06-10 15:53:52 +05:30
Manav Rathi
a6428608e6 Use majority terminology in more places 2025-06-10 15:28:16 +05:30
Manav Rathi
550d026061 Update 2025-06-10 15:22:44 +05:30
Manav Rathi
45a41497df Conv 2025-06-10 14:59:51 +05:30
Manav Rathi
a0e9d8340c Add temp check 2025-06-10 14:49:21 +05:30
Manav Rathi
a48b40fc0c Tweak 2025-06-10 14:22:11 +05:30
Keerthana
fa7d534c56 Merge branch 'main' into docs/revamp 2025-06-10 14:12:24 +05:30
Keerthana
92d1a9d335 [docs] refactor requirements 2025-06-10 14:10:22 +05:30
Manav Rathi
b8f8d90d13 Conv 2025-06-10 14:09:59 +05:30
Manav Rathi
c1c40581d5 Storage layer 2025-06-10 13:50:51 +05:30
Manav Rathi
4aacd1e47a Conv 2025-06-10 13:44:14 +05:30
Manav Rathi
4cc9311343 Schema 2025-06-10 13:34:50 +05:30
Manav Rathi
9f0e5d712f Update 2025-06-10 13:22:40 +05:30
Manav Rathi
92096e6a21 casing 2025-06-10 13:21:29 +05:30
Manav Rathi
002ef8ca5c Tweak 2025-06-10 13:17:50 +05:30
Manav Rathi
0e4ce445e0 Doc 2 2025-06-10 13:13:12 +05:30
Manav Rathi
7a11547a14 Doc 2025-06-10 13:08:49 +05:30
Manav Rathi
29ac7b7df9 Move and rename 2025-06-10 12:58:03 +05:30
Manav Rathi
3b749f0e75 Doc 2025-06-10 12:23:54 +05:30
AmanRajSinghMourya
edc9917b57 Work around for swipe between memories 2025-06-10 12:09:51 +05:30
Manav Rathi
bab5c3697b Doc 2025-06-10 12:07:04 +05:30
Manav Rathi
043b8e42c0 Outline 2025-06-10 11:46:15 +05:30
Laurens Priem
29d955933d [Docs] Ente help on local indexing and notifications (#6226)
## Description

- Add some info on (disabling) local indexing
- Add some info on notifications

## Tests
2025-06-10 11:12:32 +05:30
Manav Rathi
a3b5d8dcfd [web] SRP code refactoring (#6232) 2025-06-10 10:26:36 +05:30
Manav Rathi
86ba7a6d7a Outline 2025-06-10 10:08:33 +05:30
Manav Rathi
38bbd8a5d7 Note 2025-06-10 09:40:12 +05:30
Keerthana
8339e9e1ca [docs] fix caddy configuration 2025-06-10 09:38:16 +05:30
Manav Rathi
b359258d8b Refactor 2025-06-10 09:32:11 +05:30
Manav Rathi
f94a65fcfb Refactor 2025-06-10 09:10:47 +05:30
Manav Rathi
58c4ada254 Specific error 2025-06-10 08:29:24 +05:30
Manav Rathi
a57b2448d0 Reorder 2025-06-10 08:02:20 +05:30
Manav Rathi
f8093a65a6 Move 2025-06-10 07:57:44 +05:30
Manav Rathi
81eff305d3 Split 2025-06-10 07:57:44 +05:30
Manav Rathi
093ff9c395 Split 2025-06-10 07:57:44 +05:30
Manav Rathi
857fabadbe Tweak 2025-06-10 07:57:44 +05:30
Manav Rathi
9074441c5a Tweak 2025-06-10 07:57:44 +05:30
Manav Rathi
d2b33defa1 [desktop] Proceed gracefully if safe store is unavailable when saving (#6231) 2025-06-10 05:31:59 +05:30
Manav Rathi
aec107b6b7 [desktop] Proceed gracefully if safe store is unavailable when saving 2025-06-10 05:21:09 +05:30
Brogio
7d56db701c Add socials
Added Ente's Bluesky and Instagram accounts
2025-06-09 18:00:07 +02:00
Keerthana
de9e48aa98 [docs] revamp introduction and remove deprecations
## Description

This PR revamps introduction page to be self-contained, eliminating the
need for overview section. Dead configuration,deprecated warning and
inconsistencies have been fixed for Tailscale community guide.

A preview of the updated documentation can be tracked at:
https://ente-wy9m.vercel.app/
2025-06-09 19:00:25 +05:30
Laurens Priem
6d13535d8d [mob][photos] Lower on this day requirements (#6227)
## Description

## Tests
2025-06-09 18:54:08 +05:30
laurenspriem
0df7b20fae Lower on this day requirements 2025-06-09 18:27:57 +05:30
laurenspriem
84f7b96998 Add notifications entry 2025-06-09 18:13:38 +05:30
laurenspriem
b1810c7ea6 Add local indexing info 2025-06-09 17:50:43 +05:30
laurenspriem
6aeb508d6e Remove old info 2025-06-09 17:50:31 +05:30
Keerthana
d9d4ebdc01 [docs] remove deprecated caution on docker in Tailscale guide 2025-06-09 17:11:03 +05:30
Keerthana
2b70b22117 [docs] lint and remove unneeded vite config 2025-06-09 17:06:13 +05:30
Keerthana
a12088f2f1 [docs] update introduction page 2025-06-09 17:01:28 +05:30
github-actions[bot]
dbea39c182 [mobile] New translations (#6220)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-06-09 16:53:10 +05:30
t4ba
269e9ceea7 [auth] Custom Icon for tebex.io (#6196)
pterodactyl game panel icon and tebex icon
2025-06-09 16:51:22 +05:30
AmanRajSinghMourya
80adeecb6b Minor UI changes 2025-06-09 16:33:29 +05:30
AmanRajSinghMourya
19eb3a5141 fix: set defailt time to 10 seconds if the video duration is null & avoid un-necessary playbackCallback is isFromMemories is true 2025-06-09 16:33:05 +05:30
Manav Rathi
25bc6220b3 [web] General code improvements (#6223) 2025-06-09 15:32:21 +05:30
Manav Rathi
a938c82fc6 Join 2025-06-09 14:58:46 +05:30
Manav Rathi
147b06f08e Inline 2025-06-09 14:56:58 +05:30
Manav Rathi
55be8bc5d7 Conv 2025-06-09 14:47:15 +05:30
Manav Rathi
dfd80a136b Conv 2025-06-09 14:44:05 +05:30
Manav Rathi
31f393ad5b Tweak 2025-06-09 14:36:07 +05:30
Manav Rathi
5b3f15de34 Conv 2025-06-09 14:31:19 +05:30
Manav Rathi
009408581d Conv 2025-06-09 14:20:35 +05:30
Manav Rathi
960d2fd2b1 Tweak 2025-06-09 14:06:28 +05:30
Manav Rathi
b4b34e89bc Move 2025-06-09 13:59:22 +05:30
Manav Rathi
cc8dc77f92 re 3 2025-06-09 13:48:07 +05:30
Manav Rathi
350af6a43f re 2 2025-06-09 13:45:48 +05:30
Manav Rathi
71308f28c3 re 2025-06-09 13:40:18 +05:30
Manav Rathi
2d2f9d348d norm 2025-06-09 13:29:10 +05:30
AmanRajSinghMourya
6d5a2a956f Minor fix 2025-06-09 13:23:53 +05:30
Manav Rathi
938afa34c9 Min 2025-06-09 13:23:32 +05:30
Manav Rathi
4df59e7bf2 That's why 2025-06-09 13:21:03 +05:30
AmanRajSinghMourya
613230d218 Refactor: add border radius to NoThumbnailWidget 2025-06-09 13:08:07 +05:30
AmanRajSinghMourya
65add2e448 Fix merge conflict 2025-06-09 13:07:33 +05:30
Manav Rathi
bfa396b93f [web] General code improvements (#6222) 2025-06-09 13:01:30 +05:30
Manav Rathi
e473c1852c lint 2025-06-09 12:57:31 +05:30
Manav Rathi
088cf4adef Conv 2025-06-09 12:43:01 +05:30
Manav Rathi
5b0a04142f Outline 2025-06-09 11:56:19 +05:30
Manav Rathi
d1d7af4f7e Outline 2025-06-09 11:47:38 +05:30
Aman Raj Singh Mourya
7b0190ff8a [photos][mob] Deselect albums with back navigation in albums list (#6183)
## Description

This is very similar to #6182. However instead of the album selection in
the second home tab, it applies to the full albums list.

## Tests
2025-06-09 11:39:26 +05:30
Manav Rathi
e2d103f20f Use correct type 2025-06-09 11:34:30 +05:30
Manav Rathi
7bfb2f0fe8 Update 2025-06-09 11:21:31 +05:30
Manav Rathi
8adebbba3f Doc 2025-06-09 11:09:29 +05:30
Manav Rathi
719c8f7b9c Move and doc 2025-06-09 11:04:33 +05:30
Neeraj
af0f1600d9 [auth] New translations (#6221)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2025-06-09 11:00:36 +05:30
Neeraj
b014cb57c0 [auth] Add custom icon for FZJ (#6195)
Add custom icon for FZJ (Forschungszentrum Jülich)
2025-06-09 11:00:00 +05:30
Manav Rathi
1832f9f996 Conv 2025-06-09 10:40:30 +05:30
Manav Rathi
a94a0f199a Rearrange 2025-06-09 10:33:49 +05:30
Neeraj
2c0dc85d70 fix(android): allow cleartext traffic for domains other ente (#6201)
Fixes #6186

## Description

It seems that while trying to show user certificates we broke cleartext
connections. Since having an SSL certificate for self hosted ente
deployments is not mandatory, we shouldn't restrict users from making
cleartext connections
2025-06-09 10:25:16 +05:30
Manav Rathi
ca748f731e Conv 2025-06-09 08:17:52 +05:30
Manav Rathi
ebf6c15655 [web] New translations (#6219)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-06-09 08:06:44 +05:30
Crowdin Bot
95271a45b6 New Crowdin translations by GitHub Action 2025-06-09 01:18:02 +00:00
Crowdin Bot
e5d5ea9d3e New Crowdin translations by GitHub Action 2025-06-09 00:42:03 +00:00
Neeraj
94351f68fb [server] Fix expiry time for free users (#6213)
## Description
Fix the bug introduced by
69c71d23c3
where we reset the expiry-time for free users.
2025-06-09 05:47:02 +05:30
vishnukvmd
87c1877736 Fix expiry time for free users 2025-06-08 23:33:30 +05:30
Jacques Lucke
bc6529a35f Merge branch 'main' into pop-album-selection 2025-06-07 19:06:16 +02:00
Denys Vitali
d2ee45653c fix(android): allow cleartext traffic for domains other ente
Fixes #6186
2025-06-07 15:27:14 +02:00
Sam Maloney
d0d35937e8 add FZJ metadata to custom-icons.json 2025-06-06 17:29:13 +02:00
Sam Maloney
f9d428e2c1 add fzj.svg icon 2025-06-06 17:23:23 +02:00
Manav Rathi
68fda97f9e [web] Crypto API cleanup (non functional) - Part 4/4 (#6192)
Fin!
2025-06-06 18:29:56 +05:30
Manav Rathi
f8fa731a32 Simplify 2025-06-06 18:24:57 +05:30
Manav Rathi
38a4d96035 Unused 2025-06-06 18:06:10 +05:30
Manav Rathi
9cacbb4f34 Restore older behaviour
accidentally left off in 9a5bac774e
2025-06-06 17:55:23 +05:30
AmanRajSinghMourya
bc6fce30ed Merge branch 'main' into album_fixes 2025-06-06 17:41:33 +05:30
Manav Rathi
930070ad14 Swap 2025-06-06 17:36:52 +05:30
Ashil
11e5704414 [photos][mob] Deselect albums with back navigation in second tab (#6182)
## Description

Previously, back navigation would always go to the home screen, even
when albums are currently selected. This is unexpected because typically
back navigation first deselect everything if anything is selected.

This patch implements this expected behavior for albums on the second
tab. If at least one album is selected, all will be deselected when
going-back. Only when everything is deselect, the app transitions to the
first tab like before.

## Tests
2025-06-06 17:30:27 +05:30
Manav Rathi
81eca40f13 Via 2025-06-06 17:30:06 +05:30
Manav Rathi
0fdb27ccd7 Swap 2025-06-06 17:22:20 +05:30
Manav Rathi
8b4e66e37c Reorder 2025-06-06 17:17:02 +05:30
Manav Rathi
d409935ceb Tweak 2025-06-06 17:10:52 +05:30
Manav Rathi
4d985abd07 Trim 2025-06-06 17:07:38 +05:30
Manav Rathi
3a127bcd8b New 2025-06-06 17:00:26 +05:30
Manav Rathi
a1e506eb85 Impl 2025-06-06 16:52:20 +05:30
Manav Rathi
b82427a6cf Swap 2025-06-06 16:43:39 +05:30
Manav Rathi
a3b4a0b80c Swap 2025-06-06 16:37:01 +05:30
Manav Rathi
df0b8cc44e Direct 2025-06-06 16:27:06 +05:30
Manav Rathi
709eb66614 Swap 2025-06-06 16:17:10 +05:30
Manav Rathi
0381cf66dc Rename 2025-06-06 16:08:22 +05:30
Prateek Sunal
2317a4cadb fix: error 2025-06-06 16:00:21 +05:30
Prateek Sunal
5c6397e8ad Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-06-06 15:58:41 +05:30
AmanRajSinghMourya
6f0828858d Fix: update color scheme 2025-06-06 15:48:00 +05:30
Manav Rathi
76cff8d386 Swap 2025-06-06 15:47:19 +05:30
Manav Rathi
37c0fa1cd6 Scaffold more infra 2025-06-06 15:43:24 +05:30
Manav Rathi
63830b798b Save 1 2025-06-06 14:47:17 +05:30
Manav Rathi
b707b3e3dc Conv 2025-06-06 14:31:48 +05:30
Manav Rathi
af391346d1 Move 2025-06-06 14:23:39 +05:30
Manav Rathi
e96774e325 Conv 2025-06-06 14:15:56 +05:30
Manav Rathi
e3329a8d73 Conv 2025-06-06 14:04:03 +05:30
Manav Rathi
da8174bcc7 [web] General refactoring (#6190) 2025-06-06 13:57:30 +05:30
Manav Rathi
5b1b52e529 Don't keep the spinners spinning
(this handles other types of cancel too)
2025-06-06 13:40:42 +05:30
Manav Rathi
0165f07bb9 Handle cancel on the delete prompt 2025-06-06 13:35:59 +05:30
Manav Rathi
7dee2c1526 Fix dialog state not getting reset on reopening
...without going back from accounts page.
2025-06-06 13:30:54 +05:30
AmanRajSinghMourya
52d2bea970 Make album UI consistent in archive & hidden section 2025-06-06 13:08:39 +05:30
AmanRajSinghMourya
e26f78d9ed Show newly created album at top while adding photos to multiple album 2025-06-06 13:07:44 +05:30
Neeraj
e0b62ded5a [mob][photos] Birthday notification + memories decoding improvements (#6177)
## Description

- Schedule birthday notifications for named persons.
- Minor performance improvements to memories cache decoding

## Tests

Tested in debug mode on my pixel 8:

- [X]  Notifications are scheduled at correct time
- [X] Tapping notifications navigates to memory of that person
2025-06-06 12:22:00 +05:30
Neeraj
b17821685f [mob] Minor fixes for resumable download (#6189)
## Description

## Tests
2025-06-06 11:43:57 +05:30
Neeraj
a5016b0984 [auth] Add R10.net icon support (#6185)
Add custom icon support for R10.net auth.

## Changes
- Add `r10.svg` icon file to `auth/assets/custom-icons/icons/`
- Add R10.net entry to `custom-icons.json` with proper configuration
- Include alternative names: "R10", "r10.net" for better user matching
2025-06-06 11:43:34 +05:30
alewi7
b5ad82f5ba Add 5 new icons and rename existing icon (#6104)
## Description

Added 5 new custom SVG icons:

- **cronometer.svg**
- **xai.svg**
- **toshl_finance.svg**
- **aternos.svg**
- **atomic_mail.svg**

Also renamed an existing icon **'mercado_livre.svg'** to
**'mercado_libre.svg'** to match the brand's official name.

## Tests

No formal tests added. Verified manually that all SVGs open correctly in
the browser and display as expected.
2025-06-06 11:40:47 +05:30
Neeraj Gupta
14da860973 Handle incorrect pause 2025-06-06 11:37:07 +05:30
Vishnu Mohandas
2b381e7e2f [docs] Minor update (#6174)
## Description

Commits.
2025-06-06 11:22:11 +05:30
Manav Rathi
4152751d52 Fix 2025-06-06 10:38:19 +05:30
Neeraj
e8a35bf6e6 [photos][mob] Trim whitespace from new album name (#6181)
## Description

Previously, newly created albums could easily end with trailing
whitespace, especially when using auto-completion that automatically
adds the next space character. It's not super bad obviously, but I found
it slightly annoying. I can't think of any good reason for why an album
name should ever start or end with whitespace.

## Tests
2025-06-06 10:37:30 +05:30
Manav Rathi
abdc3bbca1 Alt 2025-06-06 10:08:49 +05:30
Manav Rathi
8519183013 kp 2025-06-06 09:54:39 +05:30
Manav Rathi
7c0450c364 Conv and simplify 2025-06-06 09:45:52 +05:30
Manav Rathi
eed1341003 Conv 2025-06-06 09:36:41 +05:30
Manav Rathi
3671080cfc Conv 2025-06-06 08:35:53 +05:30
Manav Rathi
c8481fdb3e Variant 2025-06-06 08:10:52 +05:30
Manav Rathi
146db578b6 Move 2025-06-06 07:29:21 +05:30
Yusuf Danış
c98726e4d0 [auth] Add R10.net icon support 2025-06-05 23:03:27 +03:00
vishnukvmd
4b49bab0bd Prettify 2025-06-05 23:57:51 +05:30
Jacques Lucke
385f35b6e5 pop album selection 2025-06-05 19:41:48 +02:00
Jacques Lucke
a86e9b8f57 still support returning to home 2025-06-05 18:20:53 +02:00
Jacques Lucke
e06ccc35a0 deselect albums on pop 2025-06-05 18:16:43 +02:00
Jacques Lucke
7bdcbcca02 trim new album name 2025-06-05 18:03:36 +02:00
Manav Rathi
e1cb8e06a1 [web] Crypto API cleanup (non functional) - Part 3 (#6180) 2025-06-05 20:27:03 +05:30
Manav Rathi
1a15bcb7e0 lint fix 2025-06-05 20:17:39 +05:30
Manav Rathi
2df06ccf61 Use 2025-06-05 20:04:30 +05:30
Manav Rathi
560533b2d4 accessor 2025-06-05 19:49:58 +05:30
Manav Rathi
60a2febe46 Move 2025-06-05 19:43:33 +05:30
Manav Rathi
ed2a98b341 Rename 2025-06-05 18:55:31 +05:30
Manav Rathi
e8187356af Rename 2025-06-05 18:48:35 +05:30
Manav Rathi
21febab897 Del 2025-06-05 18:39:30 +05:30
Manav Rathi
250aad43bc Switch 2025-06-05 18:36:45 +05:30
Manav Rathi
5e9e8bd76b Switch 2025-06-05 18:30:37 +05:30
Manav Rathi
7b3ea32963 Go the other way for better future composability 2025-06-05 18:03:35 +05:30
Manav Rathi
ac9cee8fa3 Specialize 2025-06-05 18:00:40 +05:30
Manav Rathi
4a3d503992 Dup 2025-06-05 17:55:38 +05:30
Manav Rathi
7bfc63ffc7 [web] Crypto API cleanup (non functional) (#6178) 2025-06-05 17:40:09 +05:30
laurenspriem
b359d97b95 Fix typo 2025-06-05 17:32:58 +05:30
laurenspriem
19a0a8a7ec Merge branch 'main' into birthday_notification 2025-06-05 17:29:39 +05:30
Manav Rathi
51a736dbce Adapt 2025-06-05 17:25:38 +05:30
laurenspriem
36928e4f39 memories decoding optimization 2025-06-05 17:24:33 +05:30
laurenspriem
bfe738c846 Fix duplicate memories decoding 2025-06-05 17:17:25 +05:30
AmanRajSinghMourya
47c52e31ae Fix: update border radius & colors for consistency and adjust spacing 2025-06-05 17:14:31 +05:30
Manav Rathi
d62865f9e5 Inline 2025-06-05 17:10:22 +05:30
Manav Rathi
f7dcaffc32 Move 2025-06-05 17:10:11 +05:30
Manav Rathi
c88a43d2dc Use 2025-06-05 17:10:11 +05:30
Manav Rathi
a5fe20b0e9 Rename 2025-06-05 17:10:11 +05:30
Manav Rathi
3dffebf733 Same place both 2025-06-05 17:10:11 +05:30
Manav Rathi
4be5ac8780 types 2025-06-05 17:10:11 +05:30
Manav Rathi
d858fdef75 More annotation 2025-06-05 17:10:11 +05:30
Manav Rathi
f1d9fc61c5 Annotate 2025-06-05 17:10:11 +05:30
Manav Rathi
931dafd264 Reroute 2025-06-05 17:10:11 +05:30
Manav Rathi
40f3ad592f type 2025-06-05 17:10:11 +05:30
Manav Rathi
723362fc33 Rename 2025-06-05 17:10:11 +05:30
Manav Rathi
94c5cf316b Swap 2025-06-05 17:10:11 +05:30
Manav Rathi
5de4b3c1b0 Swap 2025-06-05 17:10:11 +05:30
Manav Rathi
6eab85b7e1 enc 2025-06-05 17:10:11 +05:30
Manav Rathi
40e7d58c0b utf-8 2025-06-05 17:10:11 +05:30
Manav Rathi
c85aac613e Prune 2025-06-05 17:10:11 +05:30
Manav Rathi
9387320948 Conv 2025-06-05 17:10:11 +05:30
Manav Rathi
9e1b1b0850 Convert 2025-06-05 17:10:11 +05:30
Manav Rathi
b656d4fe1f Addendum
https://github.com/jedisct1/libsodium.js/issues/112#issuecomment-337389964
2025-06-05 17:10:11 +05:30
Manav Rathi
76cca72bec Conv 2025-06-05 17:10:11 +05:30
Manav Rathi
3f6a706e9a Conv 2025-06-05 17:10:11 +05:30
Neeraj Gupta
9245af5080 Fix oom during chunk combination 2025-06-05 16:30:51 +05:30
AmanRajSinghMourya
7953337f15 Enhance shared collections layout with consistent size across all screens 2025-06-05 16:23:29 +05:30
AmanRajSinghMourya
3facf47540 Refactor: rename NewProgressIndicator to MemoryProgressIndicator 2025-06-05 15:42:08 +05:30
AmanRajSinghMourya
629d902745 Fix reseting progress bar to full before starting new memory & improve paly/pause for video memory 2025-06-05 15:40:53 +05:30
Vishnu Mohandas
0717d12d65 [docs] Update general.md 2025-06-05 15:30:39 +05:30
vishnukvmd
107e8e665a Minor 2025-06-05 15:09:33 +05:30
vishnukvmd
d9040047ec Add a line to avoid starting articles with line-breaks that precede an H2 2025-06-05 15:09:26 +05:30
laurenspriem
4fb2be51e0 Logging 2025-06-05 14:51:47 +05:30
laurenspriem
a99cdbedc4 Fix out of range issue 2025-06-05 14:35:03 +05:30
Neeraj Gupta
a543b8c0f6 Pass token in query param for direct download 2025-06-05 14:21:38 +05:30
Neeraj Gupta
f5ca4a9d15 Logs for resumable download failure 2025-06-05 14:19:58 +05:30
Manav Rathi
5ab0299751 [web] Crypto API cleanup (non functional) (#6173) 2025-06-05 11:28:52 +05:30
Neeraj
f1097a93f7 [mob] Fix: Handle already linked email err (#6172)
## Description
While linking contact to a person, we were not gracefully handling the
error where email id is already mapped to another person. And when such
person doesn't have any face attached, they don't have any way to unlink
the email from that person entity.
## Tests
2025-06-05 11:26:56 +05:30
Manav Rathi
7bce2e358b Conv 2025-06-05 11:18:23 +05:30
Manav Rathi
75b3d2354f Simplify 2025-06-05 11:14:31 +05:30
Manav Rathi
52ee86af18 Proxy 2025-06-05 11:06:52 +05:30
Manav Rathi
462aae8f34 Fwd 2025-06-05 11:01:40 +05:30
laurenspriem
496691d236 Schedule at midnight 2025-06-05 10:41:26 +05:30
laurenspriem
f1a6af048d Cleanup 2025-06-05 10:38:44 +05:30
laurenspriem
22e32baf34 route to person memory 2025-06-05 10:36:47 +05:30
Manav Rathi
e864ea367a Rename 2025-06-05 10:30:08 +05:30
Neeraj Gupta
45cf130375 Perf: remove redundant async 2025-06-05 10:24:23 +05:30
Manav Rathi
e6fd962c75 Del 2025-06-05 10:23:02 +05:30
Manav Rathi
f5aefb445d Conv 2025-06-05 10:22:18 +05:30
Neeraj Gupta
917ce21b35 Fix: Handle already linked email err 2025-06-05 10:19:07 +05:30
Manav Rathi
0241e41f0d Tweak 2025-06-05 10:13:44 +05:30
Manav Rathi
65982b6f82 Del 2025-06-05 09:58:16 +05:30
Manav Rathi
69756d5733 Conv 2025-06-05 09:56:11 +05:30
laurenspriem
b17ba26268 Extract strings 2025-06-05 09:52:40 +05:30
Manav Rathi
594671d96c Conv 2025-06-05 09:44:22 +05:30
Manav Rathi
fa1719e3ca Conv 2025-06-05 09:43:10 +05:30
laurenspriem
e2fbb26dce Reorganize 2025-06-05 09:41:58 +05:30
Manav Rathi
6ba7841632 Conv 2025-06-05 09:39:57 +05:30
Manav Rathi
37b52b5cb5 Reduce API surface 2025-06-05 09:28:28 +05:30
Manav Rathi
2e98d8b652 Ret 3 2025-06-05 09:17:22 +05:30
Manav Rathi
ea4d6c5cf1 consistent 2025-06-05 09:15:30 +05:30
Manav Rathi
413f5479ef ret 2 2025-06-05 09:14:13 +05:30
laurenspriem
81bfc83e9d birthday notifications setting 2025-06-05 09:12:51 +05:30
Manav Rathi
92b3da1198 return type consistency 1 2025-06-05 08:53:16 +05:30
laurenspriem
cc98ca70d5 Log scheduling 2025-06-05 08:50:37 +05:30
laurenspriem
544078a40c Optional notification message 2025-06-05 08:45:36 +05:30
laurenspriem
229d438181 Remove 2025-06-05 08:39:17 +05:30
laurenspriem
aab1450c3f remove old parameter comment 2025-06-05 08:38:59 +05:30
laurenspriem
07d7635464 Merge branch 'main' into birthday_notification 2025-06-05 08:35:44 +05:30
Neeraj
88b95da04f [mob] widget customizations (+ new widgets) (#5882) 2025-06-04 20:57:22 +05:30
Manav Rathi
32707e2909 [desktop] macOS folder watch EMFILE workaround (#6170) 2025-06-04 20:18:41 +05:30
Manav Rathi
e28ee8ca66 [desktop] macOS folder watch EMFILE workaround 2025-06-04 20:15:19 +05:30
Manav Rathi
751d107518 [web] One less nit (#6169) 2025-06-04 20:09:50 +05:30
AmanRajSinghMourya
277b88f332 Refactor: removing null check for _imageProvider when calling onFinalFileLoad 2025-06-04 19:54:45 +05:30
AmanRajSinghMourya
0473bcc543 Refactor: update onFinalFileLoad method to accept memoryDuration parameter 2025-06-04 19:40:35 +05:30
Manav Rathi
439dfcab58 One less nit 2025-06-04 19:36:17 +05:30
AmanRajSinghMourya
79c1affc39 fix: update border radius and text style 2025-06-04 19:19:20 +05:30
Manav Rathi
3f9f0d6d10 [web] General code improvements (#6168) 2025-06-04 19:15:25 +05:30
Manav Rathi
506b915f65 conv 2025-06-04 19:02:55 +05:30
Manav Rathi
65a8923799 Conv 2025-06-04 18:53:14 +05:30
Manav Rathi
e6707d9fcb Move 2025-06-04 18:43:05 +05:30
Manav Rathi
3dbc336687 Doc 2025-06-04 18:36:49 +05:30
Manav Rathi
8441aafe81 Inline 2025-06-04 18:26:53 +05:30
Manav Rathi
5d3f431ee0 Doc 2025-06-04 18:25:28 +05:30
Manav Rathi
ce591e6267 Conv 2025-06-04 18:11:28 +05:30
Prateek Sunal
132a7862fe fix: clear directory on log out 2025-06-04 17:50:21 +05:30
Prateek Sunal
f4167be4b4 fix: update people changed debouncer to 1500 2025-06-04 17:42:46 +05:30
Prateek Sunal
4e17a861dc fix: separate asset resources 2025-06-04 17:41:22 +05:30
Manav Rathi
86f282bb06 Scope 2025-06-04 17:36:50 +05:30
Manav Rathi
334a996357 Scope 2025-06-04 17:27:46 +05:30
Manav Rathi
9a5bac774e Unused 2025-06-04 17:24:08 +05:30
Manav Rathi
04ae02c130 [meta] Issue template (#6166) 2025-06-04 17:13:41 +05:30
Manav Rathi
31232390e8 [meta] Issue template 2025-06-04 17:07:03 +05:30
AmanRajSinghMourya
4d27341787 Refactor: remove unnecessary calls to _resetAnimation and handle reset in onFinalFileLoad 2025-06-04 16:56:52 +05:30
Prateek Sunal
7d4ea8092a chore: readd thermal 2025-06-04 16:49:46 +05:30
AmanRajSinghMourya
45d8c236fe Update onFinalFileLoad to remove unused parameter 2025-06-04 16:48:08 +05:30
AmanRajSinghMourya
4412b016ce Refactor: rename onFileLoad to onFinalFileLoad for consistency across file handling 2025-06-04 16:44:00 +05:30
AmanRajSinghMourya
3cea8e8a90 Hide seekbar and play/pause button for videos shown in memories & long press to play/pause video 2025-06-04 16:43:34 +05:30
Manav Rathi
e80f91ca92 [web] General refactoring (#6164) 2025-06-04 16:42:28 +05:30
Manav Rathi
523d1961b7 other dep 2025-06-04 16:32:08 +05:30
Manav Rathi
6091a0d446 Lockfile updates 2025-06-04 16:28:33 +05:30
Manav Rathi
12d84d0dbe Avoid exceptions for flow control 2025-06-04 16:27:24 +05:30
Manav Rathi
a244140348 tweak 2025-06-04 16:27:24 +05:30
Manav Rathi
2715bd81b0 vis 2025-06-04 16:27:24 +05:30
Manav Rathi
d65424cef2 Document and move 2025-06-04 16:27:24 +05:30
Manav Rathi
a07d39512b Prune ids 2025-06-04 16:27:24 +05:30
Manav Rathi
223ed36d61 Conv 2025-06-04 16:27:24 +05:30
Neeraj
3e893a7b39 [mob] Use file stream to improve hashing speed (#6163)
## Description

## Tests
For 3.38 GB file on iPhone 11
Old Hashing took 24792 ms
Hashing v2 took 10365 ms

Also tested it on a smaller file

```dart
// Returns the hash for a given file, chunking it in batches of hashChunkSize
Future<Uint8List> cryptoGenericHash(Map<String, dynamic> args) async {
  final int startTime = DateTime.now().millisecondsSinceEpoch;
  final sourceFile = File(args["sourceFilePath"]);
  final sourceFileLength = await sourceFile.length();
  final inputFile = sourceFile.openSync(mode: FileMode.read);
  final state =
      Sodium.cryptoGenerichashInit(null, Sodium.cryptoGenerichashBytesMax);
  var bytesRead = 0;
  bool isDone = false;
  while (!isDone) {
    var chunkSize = hashChunkSize;
    if (bytesRead + chunkSize >= sourceFileLength) {
      chunkSize = sourceFileLength - bytesRead;
      isDone = true;
    }
    final buffer = await inputFile.read(chunkSize);
    bytesRead += chunkSize;
    Sodium.cryptoGenerichashUpdate(state, buffer);
  }
  await inputFile.close();
  final hash =
      Sodium.cryptoGenerichashFinal(state, Sodium.cryptoGenerichashBytesMax);

  final int endTime = DateTime.now().millisecondsSinceEpoch;
  final hash2 = await cryptoGenericHashV2(args);
  final endTime2 = DateTime.now().millisecondsSinceEpoch;
  if (hash.length != hash2.length) {
    throw Exception(
      "Hash length mismatch: ${hash.length} != ${hash2.length}",
    );
  }
  if (!const ListEquality().equals(hash, hash2)) {
    throw Exception("not equal: hash");
  }
  print("Hashing took ${endTime2 - startTime} ms");
  print("Hashing v2 took ${endTime2 - endTime} ms");
  return hash;
}

Future<Uint8List> cryptoGenericHashV2(Map<String, dynamic> args) async {
  final file = File(args["sourceFilePath"]);
  final state =
      Sodium.cryptoGenerichashInit(null, Sodium.cryptoGenerichashBytesMax);
  await for (final chunk in file.openRead()) {
    Sodium.cryptoGenerichashUpdate(state, Uint8List.fromList(chunk));
  }
  return Sodium.cryptoGenerichashFinal(state, Sodium.cryptoGenerichashBytesMax);
}
```
2025-06-04 14:33:47 +05:30
Neeraj
eea70db1fd Avoid redundant copy
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-06-04 14:31:51 +05:30
Neeraj Gupta
85c14b884b [mob] Use file stream to improve hashing speed 2025-06-04 13:43:01 +05:30
laurenspriem
9a0722ffcc todos for after merge 2025-06-04 13:25:32 +05:30
laurenspriem
49dcb55de7 schedule birthdays notifications 2025-06-04 13:22:47 +05:30
laurenspriem
fa37b11c7f Specify birthdays clearer 2025-06-04 13:20:59 +05:30
Prateek Sunal
884b3716ba fix: add debouncer 2025-06-04 12:52:48 +05:30
Prateek Sunal
6f3ee24ac1 chore: update lock files 2025-06-04 12:46:27 +05:30
Prateek Sunal
292ed5fd6d Merge remote-tracking branch 'origin/main' into widget-superpowered 2025-06-04 12:45:21 +05:30
Prateek Sunal
54d2040f2b fix: remove .fvm 2025-06-04 12:43:35 +05:30
Neeraj
15954ce396 [mob] Remember last scroll offset while adding assets from device (#6159)
## Description
Also increased the items in grid, as there's no scrollbar (pkg does not
support it yet afaik)

## Tests
2025-06-04 12:24:32 +05:30
Laurens Priem
86a9e5ec86 [mob][photos] Compute controller (#6158)
## Description

Refactored MLController (now ComputeController) so that ML and Streaming
both first have to ask for its permission to run.

## Tests
2025-06-04 12:02:57 +05:30
Manav Rathi
52c9a15c2c [web] Migrate to zod v4 (#6162) 2025-06-04 11:58:00 +05:30
Manav Rathi
3c514476c2 Reintroduce with new zod 2025-06-04 11:53:49 +05:30
laurenspriem
31b26a1b26 Reduce logs 2025-06-04 11:52:33 +05:30
Manav Rathi
5e26a895d3 passthrough => looseObject
https://zod.dev/v4/changelog?id=deprecates-strict-and-passthrough
2025-06-04 11:45:12 +05:30
Manav Rathi
4b4d9d0fd8 Migrate
https://zod.dev/v4/changelog
2025-06-04 11:45:12 +05:30
laurenspriem
a4f49b8e84 Try trigger streaming when ML is done 2025-06-04 11:11:21 +05:30
Neeraj
1722277141 [mobile] New translations (#6125)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2025-06-04 11:02:00 +05:30
Manav Rathi
6a6547a984 Up 2025-06-04 11:01:41 +05:30
Manav Rathi
4c78d1ab78 [web] Convert more cases of deprecated single input form (#6160) 2025-06-04 10:58:03 +05:30
Neeraj
8cd87b964a [photos][mob] Trim whitespace from search query (#6153)
## Description

Previously, when searching for e.g. `test ` would not find an album
called `test`. That's because the trailing whitespace is not ignored. On
mobile this can be especially annoying because sometimes auto-completion
automatically inserts whitespace after a word.

This patch trims whitespace of the search query in two places:
* When searching for an album name when moving photos to an album.
* When using the global search.

## Tests
2025-06-04 10:52:40 +05:30
Manav Rathi
68844eb790 Try to retain similar DOM structure as before 2025-06-04 10:52:18 +05:30
Neeraj Gupta
b24b0d340b Remember last scrollOffset while picking asset from device 2025-06-04 10:50:06 +05:30
Neeraj Gupta
47e8ccd5d8 Update asset_picker pkg 2025-06-04 10:49:41 +05:30
Manav Rathi
e0ae9eb911 vis 2025-06-04 10:48:12 +05:30
laurenspriem
c8d53faa5d Don't queue streaming if controller doesn't allow 2025-06-04 10:44:44 +05:30
laurenspriem
b494dc8cad Allow multiple request calls 2025-06-04 10:44:19 +05:30
Manav Rathi
5d3acca7ed Conv 2025-06-04 10:39:40 +05:30
laurenspriem
d6ea8d4ec3 less loging 2025-06-04 10:30:22 +05:30
Manav Rathi
1850aa1aec ref uploader name 2025-06-04 10:15:11 +05:30
laurenspriem
42239fe30d don't stop on force 2025-06-04 10:14:14 +05:30
Neeraj
35f6dc2361 [mob] Switch to exif_reader (#6154) 2025-06-04 10:01:35 +05:30
Manav Rathi
bbfae3731a Swap 2025-06-04 09:21:35 +05:30
Manav Rathi
d99b3e422b Change default to the more frequently needed value 2025-06-04 09:14:52 +05:30
Manav Rathi
5fe497df3b Swap 2025-06-04 09:06:28 +05:30
Manav Rathi
2e5deda9ae [web] Reset cast dialog view on reopen (#6157) 2025-06-04 08:54:05 +05:30
Manav Rathi
c4fc03d933 Reset cast dialog view on reopen 2025-06-04 08:40:40 +05:30
Prateek Sunal
a1c180485d Merge remote-tracking branch 'origin/main' into widget-superpowered 2025-06-04 01:18:56 +05:30
Prateek Sunal
c865e263e5 fix: remove shrink wrap and use casting for GenericSearchResult 2025-06-04 01:06:09 +05:30
Prateek Sunal
4b72acf3c0 chore: add lock files 2025-06-04 01:05:34 +05:30
Manav Rathi
083eb0516a [web] LP and video playback tweaks (#6156) 2025-06-03 21:15:45 +05:30
Manav Rathi
c5f993571e vid tweaks 2025-06-03 21:11:21 +05:30
Manav Rathi
5b698a926e z 2025-06-03 21:05:52 +05:30
Manav Rathi
760cc4b8e0 Take 2 2025-06-03 21:01:01 +05:30
Manav Rathi
5f722f50e6 Reset 2025-06-03 20:29:23 +05:30
Manav Rathi
ddef5a565f 4 2025-06-03 20:06:28 +05:30
laurenspriem
75042010e8 Integrate computeController requests 2025-06-03 19:43:50 +05:30
Manav Rathi
730746781c 3 2025-06-03 19:43:34 +05:30
laurenspriem
eeadc1d0d3 requesting to computeController methods 2025-06-03 19:43:01 +05:30
Manav Rathi
5b7c112c9a 2 2025-06-03 19:39:41 +05:30
Manav Rathi
c0d57c72bf LP tweaks 2025-06-03 19:33:03 +05:30
Manav Rathi
65abbb4126 [web] General improvements to code dealing with keys (#6155)
(Non functional)
2025-06-03 17:28:26 +05:30
Manav Rathi
113b820451 Same name 2025-06-03 16:54:17 +05:30
Neeraj Gupta
c17a8d4c38 Fix fr arb 2025-06-03 16:23:16 +05:30
Neeraj Gupta
0202cd1447 Switch to exif_reader 2025-06-03 16:23:08 +05:30
Manav Rathi
6ce7921a16 Inline 2025-06-03 16:16:08 +05:30
Manav Rathi
2d7689a6da Consolidate and move 2025-06-03 16:03:51 +05:30
Manav Rathi
f0aac696ca Conv 2025-06-03 15:50:43 +05:30
Manav Rathi
7112e96c75 Swap 2025-06-03 15:46:15 +05:30
Manav Rathi
f4ff63ec0a Swap 2025-06-03 15:41:47 +05:30
Manav Rathi
48dc3a6b69 Redirect 2025-06-03 15:38:23 +05:30
Jacques Lucke
1b62dbbb78 also trim in album search 2025-06-03 12:08:00 +02:00
laurenspriem
d9a4ffd8f7 rename to ComputeController 2025-06-03 15:32:47 +05:30
Jacques Lucke
f749e1ee22 trim search query 2025-06-03 11:59:02 +02:00
Manav Rathi
78669a8550 Match mobile and architecture docs
From libsodium source

crypto_secretbox_keygen(unsigned char k[crypto_secretbox_KEYBYTES])
{
    randombytes_buf(k, crypto_secretbox_KEYBYTES);
}

crypto_kdf_keygen(unsigned char k[crypto_kdf_KEYBYTES])
{
    randombytes_buf(k, crypto_kdf_KEYBYTES);
}
2025-06-03 15:20:20 +05:30
laurenspriem
3d5c53b041 Simplify 2025-06-03 15:04:56 +05:30
laurenspriem
e493702c64 Integrate thermal state in check 2025-06-03 14:59:23 +05:30
AmanRajSinghMourya
20314a5d2d Reduce size of 'Delete empty albums' button 2025-06-03 14:53:06 +05:30
Manav Rathi
7cdef46385 Update 2025-06-03 14:44:20 +05:30
Manav Rathi
97314b7dc1 conv 2025-06-03 14:15:15 +05:30
Manav Rathi
9d9ed0f01f Refactor API 2025-06-03 14:09:08 +05:30
Manav Rathi
5df1b12ef5 use new api 2025-06-03 14:02:33 +05:30
Manav Rathi
25cadce651 Vars 2025-06-03 13:56:41 +05:30
Manav Rathi
0e0044693c Remove unnecessary roundtrip 2025-06-03 13:56:41 +05:30
Vishnu Mohandas
32bffcb80b [docs] Update deduplicate.md 2025-06-03 13:50:40 +05:30
AmanRajSinghMourya
2bb839e26c Refactor: remove scaling and make memories widget of same size 2025-06-03 13:49:02 +05:30
Manav Rathi
241577739a doc 2025-06-03 13:21:18 +05:30
Manav Rathi
8c99a3e5af Other way 2025-06-03 13:11:54 +05:30
Manav Rathi
c92141b9dc Use 2025-06-03 13:01:52 +05:30
Manav Rathi
54b5100e89 Use 2025-06-03 13:01:52 +05:30
Manav Rathi
d6060e1194 Extract 2025-06-03 13:01:52 +05:30
AmanRajSinghMourya
63d0f23742 Fix: reset animation when switching to next/previous page before starting the next/previous page animation 2025-06-03 12:44:59 +05:30
Vishnu Mohandas
d895e6a0c3 [server] Fix migration index (#6150) 2025-06-03 12:42:54 +05:30
vishnukvmd
55fd87face [server] Fix migration index 2025-06-03 12:42:25 +05:30
AmanRajSinghMourya
36e7a664ff Make zoom-in/zoom-out animation alternate 2025-06-03 11:37:07 +05:30
Manav Rathi
6e8acbab1a [infra] Forward headers from workers + ditto cast (#6149) 2025-06-03 10:42:51 +05:30
Manav Rathi
9dd8cd3558 up 2025-06-03 10:27:52 +05:30
Manav Rathi
a227e8541d + range for files 2025-06-03 10:12:40 +05:30
Neeraj
f4f6f2906c [photos][mob] Fix: Close input dialog after album creation (#6148)
## Description

There is an annoyingly flashing dialog when creating exiting a newly
created album. The solution is to close the new-album-dialog before
entering the album so that it is not visible anymore when leaving the
album again.

The dialog is closed after the album is created and before routing to
the album. An alternative is to close it directly when tapping on the
Create button, but then the dialog disappears and it might take a while
until the album is opened which feels worse.

Old (note how the dialog is still open when leaving the album):


https://github.com/user-attachments/assets/e57d27af-2339-4ba7-a5d8-be052aede99c

New (note how there is no dialog when leaving the album):


https://github.com/user-attachments/assets/874164a3-9550-4fc3-9144-342b5888dbb7

## Tests

I don't know how to add tests for this.
2025-06-03 09:47:17 +05:30
Prateek Sunal
265bad28b0 fix: people selection logic as well 2025-06-03 09:45:02 +05:30
Prateek Sunal
9ee52b5dee fix: don't depend on FaceFilter for fetching personId 2025-06-03 09:43:06 +05:30
Prateek Sunal
1d7baf9dd6 chore: remove unwanted author copyright 2025-06-03 09:38:38 +05:30
Manav Rathi
a5f266421a Also from cast 2025-06-03 09:35:57 +05:30
Manav Rathi
dbbcd44f5b Fwd headers 2025-06-03 09:26:52 +05:30
Manav Rathi
38798e92a3 [web][desktop] Routine dep updates (#6146)
feat. MUI v7
2025-06-03 09:04:26 +05:30
Manav Rathi
fda4f47cba disabled is not a color
lint errors on ci
2025-06-03 08:52:12 +05:30
Jacques Lucke
d0ddce2803 Avoid flashing dialog when leaving newly created album 2025-06-02 20:16:12 +02:00
Manav Rathi
4bfc495f39 Fix errors on ci
[eslint] /home/runner/work/ente/ente/web/packages/new/photos/components/ImageEditorOverlay.tsx
[eslint]   1313:41  error  This assertion is unnecessary since it does not change the type of the expression  @typescript-eslint/no-unnecessary-type-assertion
[eslint]   1325:39  error  This assertion is unnecessary since it does not change the type of the expression  @typescript-eslint/no-unnecessary-type-assertion
[eslint]   1338:35  error  This assertion is unnecessary since it does not change the type of the expression  @typescript-eslint/no-unnecessary-type-assertion
[eslint]   1350:41  error  This assertion is unnecessary since it does not change the type of the expression  @typescript-eslint/no-unnecessary-type-assertion
2025-06-02 19:58:49 +05:30
Manav Rathi
7cbc80adc6 Stick to non-private imports 2025-06-02 19:49:30 +05:30
Manav Rathi
414265de4a mui update 2025-06-02 19:28:55 +05:30
Manav Rathi
a2c032e77b desktop deps 2025-06-02 19:27:11 +05:30
Manav Rathi
b567dddfc3 routine dep update 2025-06-02 19:26:47 +05:30
AmanRajSinghMourya
e9631c2eb2 Add zoom-in/out effect and background blur effect 2025-06-02 19:07:13 +05:30
Manav Rathi
dea77b5dd0 [web] Fix trash open (#6144) 2025-06-02 19:02:28 +05:30
Manav Rathi
1b8a8a2717 [web] Fix trash open 2025-06-02 18:58:34 +05:30
Keerthana
549cd74537 [docs]: lint and refactor navigation and overview structure (#6132)
## Description
This PR introduces the following changes in the documentation:
- Restructuring of sidebar for intuitive navigation for
overview/introduction. **Note:** The content covered by the section
along with rest of the documentation is still under major revision and
the skeleton of the documentation is being provided for easier access to
end-users.
- Updation of information regarding lack of availability of Bucket CORS
for MinIO community edition that's used by compose clusters by default.
- Linting for documentation for consistency with prettier.
2025-06-02 18:21:13 +05:30
Keerthana
2d6c754c15 [docs][actions] add lint checks for PRs 2025-06-02 18:18:35 +05:30
Keerthana
5fe0e424cd [docs] refactor community and help pages in overview 2025-06-02 18:16:58 +05:30
Neeraj
991bfbb7ef [mob] Enable resumable upload for all (#6141)
## Description

## Tests
2025-06-02 17:48:52 +05:30
Laurens Priem
3292ab2d95 [mob][photos] Face thumbnails refactor (#6128)
## Description

- Refactored PersonFaceWidget into separate FileFaceWidget and
PersonFaceWidget. PersonFaceWidget now only requires a person or cluster
ID, no longer is any file needed
- Face thumbnail choice is now made based on highest face score instead
of recency, meaning less changes in face thumbnails and less re-computes
- More aggressive caching of face thumbnails in memory
- Added option to change person cover from top menu
- Fixed issue with decoding HEIC for face thumbnails on Android

## Tests

Tested in debug mode on my pixel 8.
2025-06-02 16:58:18 +05:30
Neeraj Gupta
8eddf3ff4e Upload videos along with photos 2025-06-02 16:21:15 +05:30
Neeraj Gupta
2dca25778b Enable multipart upload for everyone 2025-06-02 16:18:14 +05:30
Manav Rathi
2316f6323e [web] New translations (#6135)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-06-02 16:05:46 +05:30
Neeraj
d15c11cc26 [server] Defer file data replication for 10min (#6139)
## Description

## Tests
2025-06-02 16:04:48 +05:30
Manav Rathi
f32c712c72 [meta] fr => enhancements (#6137) 2025-06-02 16:04:26 +05:30
Vishnu Mohandas
9060eaa0e5 [server] Update first-upload copy (#6138) 2025-06-02 16:01:02 +05:30
vishnukvmd
3a9d507c35 Update copy 2025-06-02 15:59:33 +05:30
Ashil
ed0c1a1ebc [mob][photos] Fix missing 'Added by' indicator in gallery file element and file info for when opening public links via deeplink (#6136)
## Description

User avatar in gallery file element and 'added by' field in file info
were missing for files in public links opened via deeplink. This PR
fixes this issue.
2025-06-02 15:58:30 +05:30
Manav Rathi
6e1b959a61 [meta] fr => enhancements 2025-06-02 15:57:41 +05:30
ashilkn
95a9baa4e2 Show avatar in gallery file element and 'added by' in file info for public links opened via deeplink 2025-06-02 15:53:05 +05:30
ashilkn
0ccc333dad chore 2025-06-02 15:52:25 +05:30
Crowdin Bot
a5224628b7 New Crowdin translations by GitHub Action 2025-06-02 10:11:04 +00:00
Manav Rathi
4d4d961628 [desktop] Post release toggles (#6134) 2025-06-02 15:40:13 +05:30
Manav Rathi
e22f74d653 bg ml and export 2025-06-02 15:33:31 +05:30
Neeraj Gupta
b4fdf441ec Defer filedata replication for 10min 2025-06-02 15:30:31 +05:30
Vishnu Mohandas
e798ac02c6 [server] Check in with paid customers (#6106)
## Description
Update the `subscriptions` table to store the time at which
subscriptions were upgraded (`upgraded_at`).

Reach out to customers who upgraded 7 days ago to make sure all is well.
<img width="628" alt="Screenshot 2025-05-31 at 1 41 09 PM"
src="https://github.com/user-attachments/assets/7d1e970a-c7fa-4666-8d4f-db13ba7c105d"
/>

Store this information within `notification_history` so they are not
contacted again (in case of admin interventions).

> Note: We will not be back-filling data for existing subscriptions.

## Tests
- [x] Tested locally to make sure only customers who upgraded 7 days ago
were pinged.
2025-06-02 15:25:23 +05:30
Manav Rathi
6c41f575c3 fav cast 2025-06-02 15:22:23 +05:30
Manav Rathi
15e211b3a5 typo 2025-06-02 15:18:33 +05:30
Manav Rathi
9ce3fe7756 post rel 2025-06-02 15:18:17 +05:30
Manav Rathi
215bb43f39 [web] FS limit test (#6133) 2025-06-02 15:17:47 +05:30
Manav Rathi
793ee58e2b fs limit test 2025-06-02 15:14:39 +05:30
Manav Rathi
a6ae092839 [desktop] Make video upload retries idempotent (#6131) 2025-06-02 14:33:33 +05:30
Keerthana
088afe7f2a [fix]: dead links in overview 2025-06-02 14:32:53 +05:30
Manav Rathi
d212d55dca Make retries idempotent 2025-06-02 14:12:37 +05:30
Manav Rathi
bc88a378b0 Note 2025-06-02 14:00:07 +05:30
Keerthana
b0bb5fc916 [docs]: lint and refactor navigation and structure for overview 2025-06-02 13:58:49 +05:30
Neeraj
b3b3f8445a [auth] New translations (#6126) 2025-06-02 12:28:10 +05:30
laurenspriem
9d87b8f303 Rename to clarify Android 2025-06-02 11:43:21 +05:30
Alexander
15e7d9658c [auth] Add new custom icons in auth (#6114)
New icons added:

- CSSBuy
- uollet
2025-06-02 11:38:33 +05:30
Neeraj
fb262c7dc4 [auth] fix: rename GIRAD icon to GERID (#6107)
Made a typo in the previous PR 😅. This PR changes it to the correct name
(GIRAD -> GERID)
2025-06-02 11:37:58 +05:30
Laurens Priem
3080859593 timeout on this day notification android at eod (#6130)
## Description

Auto dismiss 'On this day' notification at the end of the day. Only on
Android since there's no API for this on iOS.

## Tests

Tested in debug mode on my pixel 8 phone.
2025-06-02 11:25:31 +05:30
laurenspriem
9ea70c70d5 timeout on this day notification android at eod 2025-06-02 11:21:01 +05:30
Manav Rathi
a6291f34f9 [web] New translations (#6124)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-06-02 10:25:04 +05:30
Crowdin Bot
40a8449ea5 New Crowdin translations by GitHub Action 2025-06-02 01:17:53 +00:00
Crowdin Bot
765b0982ed New Crowdin translations by GitHub Action 2025-06-02 01:05:16 +00:00
Crowdin Bot
199f4acccc New Crowdin translations by GitHub Action 2025-06-02 00:41:26 +00:00
laurenspriem
026f9a2bb8 Fix heic decoding issue for face thumbnails 2025-06-01 17:58:55 +05:30
AmanRajSinghMourya
b43bc8a5bd feat: add light and dark mode SVG icons for collection and search actions 2025-05-31 20:24:45 +05:30
AmanRajSinghMourya
27932679dd Add onFileLoad callback to file_widget for better loading of progress animation 2025-05-31 18:58:48 +05:30
Sven
571995bbd9 fix: rename GIRAD icon to GERID 2025-05-31 12:44:54 +02:00
vishnukvmd
a15084374b Setup cron 2025-05-31 13:45:55 +05:30
vishnukvmd
c0ceb68dc6 Say hello to paid customers 2025-05-31 13:45:51 +05:30
vishnukvmd
0b87152057 Hello email 2025-05-31 13:45:27 +05:30
vishnukvmd
feb6a82755 Mark upgrades 2025-05-31 13:44:55 +05:30
vishnukvmd
85c418c9f6 Update query 2025-05-31 13:44:32 +05:30
vishnukvmd
cc68189004 Update model 2025-05-31 13:44:25 +05:30
vishnukvmd
21c1328428 Add column to store upgraded-at timestamps 2025-05-31 13:42:13 +05:30
vishnukvmd
1375b4df12 Fix typo 2025-05-31 13:06:52 +05:30
AmanRajSinghMourya
ab3808adbf fix: show newly created album in the collection sheet for batch operation 2025-05-31 12:52:50 +05:30
Neeraj
7f0eeece9c [auth] Bump auth version 4.4.0 (#6103)
## Description

## Tests
2025-05-31 10:14:13 +05:30
Neeraj Gupta
7fb30ed477 Add release 4.4.0 to appdata.xml 2025-05-31 10:13:23 +05:30
Neeraj Gupta
91ea5763fb Bump auth version: 4.4.0 2025-05-31 10:13:07 +05:30
Neeraj
f29f9f2a94 [auth] Sign windows binary using trust store (#6102)
## Description

## Tests
2025-05-31 10:12:23 +05:30
Neeraj Gupta
5138898d73 Sign auth windows binary using trust store 2025-05-31 10:11:13 +05:30
Neeraj Gupta
171be22113 Fix typo 2025-05-31 10:08:51 +05:30
Neeraj
6a3575feb4 [auth] Add GIRAD icon (#6100)
Add GIRAD custom icon, as requested here:
https://github.com/ente-io/ente/issues/6075
2025-05-31 09:53:35 +05:30
Neeraj Gupta
4e80c82a6f Revert "Avoid building for testing sign"
This reverts commit 0c0acd9592.
2025-05-31 09:36:56 +05:30
Neeraj Gupta
0c0acd9592 Avoid building for testing sign 2025-05-31 09:34:03 +05:30
Neeraj Gupta
26384513f2 Mention absolute path 2025-05-31 08:45:53 +05:30
Neeraj
acd05e0a55 [meta] Workflow to test windows sign (#6101)
## Description

## Tests
2025-05-31 08:12:55 +05:30
Neeraj Gupta
91a48943b7 Rename worflow 2025-05-31 08:10:58 +05:30
Neeraj Gupta
a8111eab04 Add workflow for testing trust signing 2025-05-31 08:09:37 +05:30
Sven
0084a3cf59 Add GIRAD icon and entry to custom icons list 2025-05-30 19:10:18 +02:00
Manav Rathi
82e1fd3b0a [web] Convert more uses of older single input form (#6099)
Only a handful left to go.
2025-05-30 18:36:51 +05:30
Manav Rathi
d57c68188c Update for new API methods 2025-05-30 18:32:46 +05:30
Manav Rathi
65a7a49d07 Swap 2025-05-30 18:25:52 +05:30
Manav Rathi
631c46681d Nicer animation 2025-05-30 18:12:50 +05:30
Manav Rathi
023d8ab8b3 Format 2025-05-30 18:07:50 +05:30
Manav Rathi
a1e3cdd5d2 Remove inconsistent trim in one direction
- No other password inputs are trimmed
- The code was trimming here, but not when verifying it
2025-05-30 18:00:13 +05:30
laurenspriem
2df9041e34 Set cover sheet in people app bar 2025-05-30 17:55:11 +05:30
Manav Rathi
b1051bbd47 Swap 2025-05-30 17:51:45 +05:30
laurenspriem
f869483c68 Change icon and reorder 2025-05-30 17:41:40 +05:30
Manav Rathi
8682e3338b Rename 2025-05-30 17:40:51 +05:30
Manav Rathi
ee96b44b74 Use 2025-05-30 17:38:14 +05:30
Manav Rathi
e992db4846 augment 2025-05-30 17:30:30 +05:30
AmanRajSinghMourya
8d8de53167 fix: remove borderRadius 2025-05-30 17:26:48 +05:30
laurenspriem
0d95f8c5a2 Remove redundant 2025-05-30 17:09:10 +05:30
laurenspriem
4b9f6619b5 Rename 2025-05-30 17:02:59 +05:30
laurenspriem
9e30d08fae Don't remove faceAvatar 2025-05-30 17:01:45 +05:30
laurenspriem
2c50b84e30 Better update in memory cache 2025-05-30 16:55:48 +05:30
Neeraj
686d04339d [auth] Fix: handle incorrect device time during code generation (#6096)
## Description

## Tests
2025-05-30 16:50:56 +05:30
Neeraj Gupta
5d0a86c248 Fix progress bar when local time is incorrect 2025-05-31 16:23:06 +05:30
Manav Rathi
2a375e56c3 [web] Update uses of deprecated collection namer (#6098) 2025-05-30 16:43:02 +05:30
laurenspriem
ba468d32f5 Refactor remove redundant method 2025-05-30 16:40:02 +05:30
Manav Rathi
ce3b6b1c1f Remove unnecessary dep 2025-05-30 16:38:26 +05:30
Manav Rathi
52451cd0af Update 2025-05-30 16:35:19 +05:30
Manav Rathi
03a25c2625 Unused 2025-05-30 16:33:51 +05:30
Manav Rathi
f425dc6eaf Use 2025-05-30 16:33:51 +05:30
Manav Rathi
26d111da42 Tweak 2025-05-30 16:33:51 +05:30
Manav Rathi
7b100e8dae Use 2025-05-30 16:33:51 +05:30
Manav Rathi
b5d059c61b Use 2025-05-30 16:33:51 +05:30
Manav Rathi
70c3c1d541 [web] New translations (#6097)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-05-30 16:33:11 +05:30
Crowdin Bot
01b05d243d New Crowdin translations by GitHub Action 2025-05-30 10:59:57 +00:00
Neeraj Gupta
b560e5b71a Fix: handle incorrect device time during code generation 2025-05-30 16:24:43 +05:30
laurenspriem
3354416543 Query typo 2025-05-30 16:15:03 +05:30
AmanRajSinghMourya
09199180f3 Add isFromMemories parameter to handle gestures 2025-05-30 16:01:27 +05:30
AmanRajSinghMourya
d9f36f1949 Added with progress animation for FullScreenMemory 2025-05-30 16:00:33 +05:30
laurenspriem
cfeca1f564 Integrate new PersonFaceWidget everywhere 2025-05-30 15:52:06 +05:30
AmanRajSinghMourya
e9b95cce62 Minor changes 2025-05-30 15:41:39 +05:30
Manav Rathi
625b562229 [web] [auth] Automatic handling of browsers with incorrect time (#6093) 2025-05-30 15:16:24 +05:30
Manav Rathi
c8d31b3a7e Mention version 2025-05-30 15:12:48 +05:30
laurenspriem
3f212aa1d1 Refactor face thumbnail caching logic 2025-05-30 14:43:59 +05:30
Neeraj
026669b0d0 [Server] Return epochTime in microSeconds (#6094)
## Description

## Tests
2025-05-30 14:21:55 +05:30
Neeraj Gupta
741aed7565 return utc epochTime in auth diff 2025-05-30 14:19:33 +05:30
Neeraj
6ee58b8e0f [mob] Video stream generation refactor (#6085)
## Description

- Avoid checking stream generation for file is duration or size
information is not available. Size information is almost always present,
and duration was missing for files uploaded via Desktop/Web until
recently. As anyways we are processing local only files, it made sense
to simplify the check and completely avoid processing such files.

**Previously, for such files where duration was missing, if my
understanding is correct, we were always downloading it to getProps
info, even for files larger than 500 MB.**

- Pause video streaming generation if ML is running
- Added delay before queuing files for video streaming immediately after
diff sync.
## Tests
2025-05-30 13:48:08 +05:30
Neeraj Gupta
61df740c01 Limit preview cache for preview with size < 50MB 2025-05-30 13:30:43 +05:30
Neeraj Gupta
3b3b41d55f Remove unused imports 2025-05-30 13:26:55 +05:30
Neeraj
0633582c7e [mob][photos] Update contacts section on PeopleChangedEvent (#6088) 2025-05-30 12:52:17 +05:30
Manav Rathi
1acd1f81f4 Use 2025-05-30 12:49:17 +05:30
Manav Rathi
2b35677227 faq 2025-05-30 12:34:33 +05:30
Manav Rathi
2b390b60c4 Handle browsers with incorrect time 2025-05-30 12:27:17 +05:30
Manav Rathi
a33af20944 [web] MUI - Don't override non-elevated backgrounds (#6092) 2025-05-30 11:10:56 +05:30
Manav Rathi
e8643c662e Alert 2025-05-30 11:04:57 +05:30
Ashil
aea57dd212 [mob][photos] Add uncategorized album in album vertical sheet (#6086)
## Description

- Show Uncategorized album on collection actions (except for collection
actions over hidden items)
- Show Uncategorized album on top

Closes #5833 


![simulator_screenshot_07BA6109-B6FA-45BF-9E75-43205697D0A7](https://github.com/user-attachments/assets/c0dc834b-c676-4cde-9006-1c77216141d0)
2025-05-30 11:04:32 +05:30
Manav Rathi
fe33469a79 Don't override non-elevated backgrounds
In particular, don't apply our shadow to variant "outlined"
2025-05-30 10:46:22 +05:30
Manav Rathi
d660f71f56 Update 2025-05-30 07:49:57 +05:30
Manav Rathi
61eb7c0e99 Swap 2025-05-30 07:49:57 +05:30
ashilkn
e438e35ccd Update contacts section on PeopleChangedEvent 2025-05-29 18:29:08 +05:30
Manav Rathi
d01348414c [desktop] Next release train (#6087) 2025-05-29 16:52:49 +05:30
Manav Rathi
2faa616cab [desktop] Next release train 2025-05-29 16:49:33 +05:30
ashilkn
78bad4e5a5 Show uncategorized album option for all CollectionActionTypes other than for hidden collection actions 2025-05-29 16:42:57 +05:30
ashilkn
466bb40a30 Show uncategorized album as the first option in collection action sheet 2025-05-29 16:34:00 +05:30
Neeraj Gupta
e55dcff9a5 Add delay before queuing files for streaming 2025-05-29 16:22:39 +05:30
Neeraj Gupta
8904916770 Pause streaming if ML is running 2025-05-29 16:22:26 +05:30
Manav Rathi
f3d19155a0 photosd-v1.7.13 (#6084) 2025-05-29 16:20:04 +05:30
Manav Rathi
75440e7c05 photosd-v1.7.13 2025-05-29 16:18:53 +05:30
Neeraj Gupta
7a7a50901f Rename 2025-05-29 16:17:44 +05:30
Neeraj Gupta
09ff43a1ef Simplify check for checking preview req 2025-05-29 16:07:53 +05:30
Neeraj Gupta
7cf4c7bf74 Avoid duplicate preview creation check 2025-05-29 15:35:40 +05:30
ashilkn
a3341202a7 Remove unused CollectionActionType 2025-05-29 15:33:07 +05:30
Neeraj Gupta
c87b2b7542 Only process files with known duration & size 2025-05-29 15:32:00 +05:30
Manav Rathi
2665d98681 [web] Tweak info panel titlebar (#6082)
Fixes https://github.com/ente-io/ente/issues/6081
2025-05-29 15:21:34 +05:30
Manav Rathi
8dd6e7d8ed Fix 6081 2025-05-29 15:17:13 +05:30
Neeraj Gupta
594c18db79 Use service locator 2025-05-29 14:56:33 +05:30
Vishnu Mohandas
320376e98d [docs] Update video-streaming.md 2025-05-29 14:28:17 +05:30
Manav Rathi
dbca5222e5 [desktop] Pre-release touchups (#6080) 2025-05-29 13:06:04 +05:30
Manav Rathi
d06c9174ac Use same constants for both 2025-05-29 13:00:31 +05:30
Manav Rathi
962fa33b04 +fav 2025-05-29 12:56:08 +05:30
Manav Rathi
c163c8ae71 [web] New translations (#6079)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-05-29 12:55:50 +05:30
Crowdin Bot
29720b350c New Crowdin translations by GitHub Action 2025-05-29 07:15:52 +00:00
Manav Rathi
b70cfe1309 [web] Split interactive and background requests (#6078) 2025-05-29 12:45:03 +05:30
Manav Rathi
cc5b2697d9 Use for HLS gen 2025-05-29 12:25:42 +05:30
Manav Rathi
1a49770e0b Outline 2025-05-29 11:38:58 +05:30
Neeraj
98137e87ab [mob] Fix: Treat sandbox file as unique file during upload (#6024) 2025-05-29 11:38:52 +05:30
Neeraj Gupta
fa0c70d633 Avoid mixing upload with preview generation to save cpu 2025-05-29 09:32:15 +05:30
Neeraj Gupta
909695ffaa Mark previewIDs as not nullable 2025-05-29 09:28:51 +05:30
Neeraj Gupta
b679d0213f Use hashMap to dedupe for uploadID 2025-05-29 09:19:19 +05:30
Neeraj Gupta
995342bbdb Clean up unused event 2025-05-29 09:05:45 +05:30
Manav Rathi
0786a355ca [desktop] Update Electron (#6077) 2025-05-29 07:46:48 +05:30
Manav Rathi
9683888d82 [web] General refactoring (#6076) 2025-05-29 07:38:13 +05:30
Manav Rathi
3ecaf9a0dc [desktop] Update Electron 2025-05-29 07:35:01 +05:30
Manav Rathi
c985fe9882 pk 2025-05-28 19:56:27 +05:30
Manav Rathi
9b5dcc9a95 custom error 2025-05-28 19:34:42 +05:30
Manav Rathi
17d6860faa optional 2025-05-28 19:21:18 +05:30
AmanRajSinghMourya
3ea09df4c0 Add NewProgressIndicator widget for step progress animation for memories 2025-05-28 19:12:37 +05:30
Manav Rathi
63a3edd053 [web] Convert deprecated titlebar uses (#6074) 2025-05-28 17:32:15 +05:30
Manav Rathi
2764256a02 Conv 2025-05-28 17:23:58 +05:30
Manav Rathi
bcc0403eb6 Last one 2025-05-28 17:19:55 +05:30
laurenspriem
ebfc1103fe Rename to fileFaceWidget 2025-05-28 17:02:31 +05:30
laurenspriem
db07fb35d2 face widget cropping functionality 2025-05-28 17:01:08 +05:30
Manav Rathi
da0d9dfdab Tweak visually 2025-05-28 16:23:51 +05:30
Manav Rathi
5171518d9b Replace 2025-05-28 16:14:59 +05:30
Manav Rathi
27d0c8a838 Pattern 2025-05-28 16:09:09 +05:30
Manav Rathi
76d7f039ea Swap 2025-05-28 16:05:31 +05:30
laurenspriem
7519ed5e15 Use new face widget in file info 2025-05-28 15:51:31 +05:30
Manav Rathi
1afc2e31bf Inline 2025-05-28 15:51:07 +05:30
Manav Rathi
d5a75707f3 Update 2025-05-28 15:47:57 +05:30
Manav Rathi
923a2a60fe re 2025-05-28 15:37:44 +05:30
Manav Rathi
d47c96aa3f Use 2025-05-28 15:22:23 +05:30
Manav Rathi
13ed68c79e Use right 2025-05-28 15:20:12 +05:30
Manav Rathi
79f5d6763c Use 2025-05-28 15:15:33 +05:30
Manav Rathi
68aaedc2d9 abstraction 2025-05-28 14:59:39 +05:30
laurenspriem
97a174ff75 Merge branch 'main' into face_thumbnails 2025-05-28 14:42:00 +05:30
Manav Rathi
2455d34553 Simplify 2025-05-28 14:34:46 +05:30
Neeraj
f045dc8e04 [server] Update limit (#6073)
## Description

## Tests
2025-05-28 14:13:30 +05:30
Neeraj Gupta
7986563443 Update limit 2025-05-28 14:00:43 +05:30
Neeraj
114dfb1f41 [server] Prefer second hot bucket for export (#6071)
## Description

## Tests
2025-05-28 13:15:40 +05:30
Manav Rathi
7ef65568d0 [web] General refactoring (#6072) 2025-05-28 13:15:12 +05:30
Manav Rathi
5a241a8153 Handle error from new fetch stack 2025-05-28 12:54:08 +05:30
Manav Rathi
cbc7c936f7 Inline 2025-05-28 12:46:39 +05:30
Neeraj Gupta
e14510f46e Remove log 2025-05-28 12:46:05 +05:30
Neeraj
f5478c7396 [mobile] New translations (#6034)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2025-05-28 12:45:21 +05:30
Neeraj Gupta
ea1319b13b Prefer second hot bucket for export 2025-05-28 12:44:38 +05:30
Manav Rathi
b45e270475 Unused 2025-05-28 12:31:38 +05:30
Manav Rathi
cdd82707f7 Conv 2025-05-28 12:03:17 +05:30
Manav Rathi
db33e61af9 Conv 2025-05-28 11:58:46 +05:30
Manav Rathi
36dda95b41 fv 2025-05-28 11:53:45 +05:30
Manav Rathi
61b15ba3ef Simplify 2025-05-28 11:48:05 +05:30
Manav Rathi
0690a32d59 Simplify 2025-05-28 11:42:56 +05:30
Neeraj
463ce4964b [mob] Enable resumable download for internal users (#6022)
## Description
- Enabled for internal users
- Download happens in chunk of 40MB, if individual chunk download fails,
we download that chunk from scratch (we can optimise it resume even the
chunk download, but i felt it would add redundant complexity.
- Download pauses automatically when user moves to next video/image (The
exact behaviour is yet to be decided, may be it should continue download
if on unmetered connection or always download with option to pause the
download on UI)

## Tests
Tested on simulator
2025-05-28 11:36:45 +05:30
Neeraj Gupta
ed05269a42 Merge remote-tracking branch 'origin/main' into resumableDownload 2025-05-28 11:32:04 +05:30
laurenspriem
903366a42c Refactor to simplify 2025-05-28 11:22:21 +05:30
Manav Rathi
d537b8f00b Props 2025-05-28 10:47:53 +05:30
Manav Rathi
84912c1a0e Fix missing negation
and simplify usage
2025-05-28 10:47:53 +05:30
Manav Rathi
15f427ef37 This was a no-op for disabled buttons 2025-05-28 10:47:53 +05:30
Neeraj
89837b79e8 [server] Fix: Typo in bucket name for filedata multipart url (#6070)
## Description

## Tests
2025-05-28 10:38:51 +05:30
Neeraj Gupta
7afb305dbb Fix: Typo in bucket name for filedata multipart url 2025-05-28 10:36:38 +05:30
Manav Rathi
8e6ff3b96c [web] General ref + Uploader name web only until next release (#6068) 2025-05-28 07:19:11 +05:30
Manav Rathi
deb6cfe03a Move 2025-05-28 07:12:56 +05:30
Manav Rathi
dbec318f7b for next release train 2025-05-28 07:03:18 +05:30
Manav Rathi
6f24109669 Conv 2025-05-28 06:29:58 +05:30
Manav Rathi
beda124d3f rf 2025-05-28 06:29:58 +05:30
ashilkn
87fae3e6d9 Resolve merge conflicts and merge main 2025-05-27 19:16:31 +05:30
Ashil
89cd360f93 [mob][photos] Bump up to v1.1.0 (#6065) 2025-05-27 19:15:03 +05:30
ashilkn
f1274afdd4 Bump up to v1.1.0 2025-05-27 19:09:55 +05:30
ashilkn
0a5005d064 Add scrollbar for album widget settings screen 2025-05-27 19:06:16 +05:30
ashilkn
b54fe20520 chore 2025-05-27 18:46:18 +05:30
ashilkn
204a046e0a Merge branch 'main' into widget-superpowered 2025-05-27 18:44:52 +05:30
Ashil
4f21f1e94e [mob][photos] All albums screen UI/UX and performance improvements (#6060)
<img
src="https://github.com/user-attachments/assets/c9ca2050-9e5c-48c5-b01e-7ed89885bc6b"
width="200" height="450" alt="Image 1">
<img
src="https://github.com/user-attachments/assets/39aeda32-9f68-4d2f-b156-7b9312578435"
width="200" height="450" alt="Image 2">

Plus some improvements from @ashilkn
2025-05-27 18:43:40 +05:30
ashilkn
039866cf3b Chore: fix lint warning 2025-05-27 18:42:39 +05:30
ashilkn
c4b860a8fe Use SliverPrototypeExtentList instead of just SliverList for improved (scrolling?) performance 2025-05-27 18:35:56 +05:30
ashilkn
1d1e01898f Add scrollbar to all on ente albums page 2025-05-27 18:19:04 +05:30
ashilkn
53f947b5f0 Update arrow icon size 2025-05-27 18:10:17 +05:30
laurenspriem
015321fa0d Rename widget 2025-05-27 17:51:15 +05:30
Manav Rathi
1e3a112c35 [desktop] Tweak changelog entry (#6064) 2025-05-27 17:51:15 +05:30
Manav Rathi
3dc23092a4 tweak 2025-05-27 17:48:47 +05:30
Manav Rathi
fd65e81079 [desktop] Enable stream generation for non-internal users (#6063) 2025-05-27 17:40:12 +05:30
Manav Rathi
eec0480618 [web] New translations (#6062)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-05-27 17:35:48 +05:30
Manav Rathi
fac5ab5079 [desktop] Enable stream generation for non-internal users 2025-05-27 17:34:13 +05:30
Ashil
051ce42ae6 [mob][photos] Home widget improvements (#6059)
## Description

See commits
2025-05-27 17:32:17 +05:30
laurenspriem
3e1a01c1f3 Move person_face_widget 2025-05-27 17:26:14 +05:30
laurenspriem
351cf50f73 Rename for clarity 2025-05-27 17:19:09 +05:30
Crowdin Bot
297d4bdbf5 New Crowdin translations by GitHub Action 2025-05-27 11:39:57 +00:00
Manav Rathi
9f9ad19d4b [web] Show full uploader name (#6061) 2025-05-27 17:09:22 +05:30
ashilkn
4d26de8ffd Add safety check 2025-05-27 17:05:46 +05:30
Manav Rathi
f16846b82e Added by 2025-05-27 16:49:08 +05:30
ashilkn
b44ef9f68a Prevent infinite loops 2025-05-27 16:45:37 +05:30
AmanRajSinghMourya
cf28fddfb3 Fix popup sheet background color 2025-05-27 16:17:42 +05:30
ashilkn
6c3b2ee25e Randomize memories and files shown in memories widget 2025-05-27 15:58:04 +05:30
Manav Rathi
2d8310460b [web] Use path prefix as context when collating metadata and live photos (#6058)
Fixes: 
- https://github.com/ente-io/ente/discussions/5920
- https://github.com/ente-io/ente/discussions/5950
2025-05-27 15:52:44 +05:30
Manav Rathi
0d5363c7a1 Fix typo 2025-05-27 15:48:14 +05:30
Manav Rathi
2f277bbffc lf 2025-05-27 15:38:16 +05:30
Manav Rathi
cbf3340bf2 Handle lp retry 2025-05-27 15:19:16 +05:30
Neeraj Gupta
29f9a64bfb Undo testing change 2025-05-27 15:16:16 +05:30
Manav Rathi
de918f42e6 Retain metadata 2025-05-27 15:05:37 +05:30
Manav Rathi
6bd1547e09 Impl 2025-05-27 15:05:37 +05:30
Manav Rathi
aa70b2a437 spl 2025-05-27 15:05:37 +05:30
Manav Rathi
13b74f387f reuse 2025-05-27 15:05:37 +05:30
Manav Rathi
d52e3894d8 Move 2025-05-27 15:05:37 +05:30
Manav Rathi
780c2c2493 Outline 2025-05-27 15:05:37 +05:30
Manav Rathi
405c4d1258 [web] New translations (#6057)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-05-27 15:05:15 +05:30
Crowdin Bot
5f498b01ee New Crowdin translations by GitHub Action 2025-05-27 09:33:56 +00:00
Manav Rathi
af5020e62c [web] General refactoring (#6056) 2025-05-27 15:03:10 +05:30
Manav Rathi
7ddf0f6fe1 lf 2025-05-27 14:54:15 +05:30
ashilkn
5fa951ad4b Refactor people widget settings screen 2025-05-27 14:51:23 +05:30
ashilkn
e9ceb705f6 Sort album widget settings screen's albums, showing selected ones on top. Note that sorting doesn't happen when selection is modified on the screen and only once when it's built 2025-05-27 14:38:08 +05:30
ashilkn
9dcd9d63b2 Avoid using shrinkWrap 2025-05-27 13:43:49 +05:30
ashilkn
129e9f8f49 Avoid adding empty albums in _getAlbumsWithFiles() 2025-05-27 12:32:39 +05:30
ashilkn
6f02df19c6 Improve UI of widget's empty state 2025-05-27 12:31:59 +05:30
ashilkn
c8efc1a590 Randomize albums and files shown in album widget 2025-05-27 12:02:07 +05:30
ashilkn
8b1a659d68 Avoid sorting on selecting albums in album widget settings 2025-05-27 11:47:39 +05:30
Manav Rathi
9114fbca27 Update 2025-05-27 10:55:01 +05:30
Manav Rathi
e25d71a7d4 cb 2025-05-27 10:25:18 +05:30
Manav Rathi
1018765f7c [web] General refactoring (#6054) 2025-05-27 10:00:26 +05:30
Manav Rathi
0fb984d031 missing dep 2025-05-27 09:53:16 +05:30
Manav Rathi
4ad3560387 Move 2025-05-27 08:49:00 +05:30
Manav Rathi
482b175324 Move 2025-05-27 08:40:10 +05:30
Manav Rathi
894d7382e8 inline 2025-05-27 08:29:11 +05:30
Manav Rathi
53cc78d3e3 Inline 2025-05-27 08:25:29 +05:30
Manav Rathi
a634500e55 Inline 2025-05-27 08:20:53 +05:30
Manav Rathi
ee8ecd456c [web] General refactoring (#6052) 2025-05-27 08:18:07 +05:30
Manav Rathi
d69a22a73e Fix 2025-05-27 08:08:44 +05:30
Manav Rathi
8b1af42cf0 Conv 2025-05-27 08:04:42 +05:30
Manav Rathi
41e7d0056b Swap 2025-05-27 07:48:30 +05:30
Manav Rathi
d170789446 Update 2025-05-27 07:42:33 +05:30
Manav Rathi
afbbde5f2b Update 2025-05-27 07:31:29 +05:30
Manav Rathi
4e3112a4f6 Conv 2025-05-27 07:25:31 +05:30
Manav Rathi
a4950ece53 Tweak vis 2025-05-27 07:21:36 +05:30
Manav Rathi
1a01d759b0 Fix ellipsis 2025-05-27 07:19:18 +05:30
Manav Rathi
175b51fdb3 Improve visual look 2025-05-27 07:01:18 +05:30
Manav Rathi
a4ba2edc54 Update 2025-05-27 06:31:44 +05:30
Manav Rathi
1a8a26e9e4 Update 2025-05-27 05:49:27 +05:30
Laurens Priem
a2ddcfd34f [mob][photos] Minor ML improvements (#6043)
## Description

- Expose flag for when ML and Memories is running
- UI fix for deleting all files in cluster 
- Log times ML models are loaded

## Tests

Tested in debug mode on my pixel 8.
2025-05-26 21:44:33 +05:30
Manav Rathi
95700f52f6 [web] General refactoring (#6047) 2025-05-26 20:15:45 +05:30
Manav Rathi
fc16638bfe Redo 2025-05-26 19:47:16 +05:30
Manav Rathi
5d375eb837 Move 2025-05-26 19:42:24 +05:30
Ashil
fe86d3bb34 [mob][photos] Make widget settings pages less confusing on their empty states (#6046) 2025-05-26 19:37:53 +05:30
Manav Rathi
77956d0f67 Rename 2025-05-26 19:37:04 +05:30
ashilkn
53a22a8d58 chore 2025-05-26 19:32:21 +05:30
ashilkn
a5b178d283 Extract strings 2025-05-26 19:30:54 +05:30
Manav Rathi
e651c1e328 inline 3 2025-05-26 19:24:36 +05:30
ashilkn
9069975bf0 Avoid confusion on empty widget settings pages 2025-05-26 19:22:51 +05:30
Manav Rathi
5938e755ae wip 2 2025-05-26 18:38:18 +05:30
Manav Rathi
6f7b3738b3 inline wip 1 2025-05-26 18:32:24 +05:30
Manav Rathi
4ee9f45b3a Inline 2025-05-26 18:15:45 +05:30
Manav Rathi
c835a3d009 Tweak 2025-05-26 18:11:06 +05:30
Manav Rathi
6d3e55a6d9 Inline 2025-05-26 18:08:11 +05:30
Ashil
08b7986d70 [mob][photos] Randomize people and file shown in people widget (#6044) 2025-05-26 18:06:17 +05:30
Manav Rathi
067c8b2a76 Tweak 2025-05-26 18:03:47 +05:30
Manav Rathi
d355d18acb Inline 2025-05-26 17:57:19 +05:30
ashilkn
0e2a0388ff Randomize people and thier files shown in people widget 2025-05-26 17:56:48 +05:30
Manav Rathi
2baf3a3dd7 Tweak 2025-05-26 17:54:56 +05:30
Manav Rathi
854610dd48 Inline 2025-05-26 17:53:11 +05:30
laurenspriem
61be57fef5 Log loading of ML models events 2025-05-26 17:39:04 +05:30
Manav Rathi
8d59d7e254 Update 2025-05-26 17:32:42 +05:30
Manav Rathi
1bcf728b3a Conv 2025-05-26 17:24:51 +05:30
Manav Rathi
5797be3460 Update 2025-05-26 17:17:27 +05:30
Manav Rathi
20f50e4816 Update 2025-05-26 17:11:18 +05:30
Manav Rathi
5064ebf4d3 Update 2025-05-26 17:01:15 +05:30
laurenspriem
eb783f0fff Remove redundant method 2025-05-26 16:44:06 +05:30
laurenspriem
ca8f310868 Fix duplicate notification issue 2025-05-26 16:43:15 +05:30
Neeraj
2e0a2802e7 [mob] Add change log (#6042)
## Description

## Tests
2025-05-26 16:33:47 +05:30
Neeraj Gupta
7868c2e16e Remove unused entries 2025-05-26 16:31:34 +05:30
Neeraj Gupta
ace5dc04e2 Add change log 2025-05-26 16:30:11 +05:30
laurenspriem
4249491730 More logging 2025-05-26 16:16:53 +05:30
laurenspriem
a958380a1d More logging 2025-05-26 15:56:23 +05:30
Manav Rathi
b0d940e65b [web] New translations (#6039)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-05-26 15:54:30 +05:30
Crowdin Bot
5b8472b5a9 New Crowdin translations by GitHub Action 2025-05-26 10:23:27 +00:00
Manav Rathi
6bb7627d47 [web] Minor loose ends (#6038) 2025-05-26 15:52:52 +05:30
laurenspriem
b00c406b09 Extract string 2025-05-26 15:52:45 +05:30
laurenspriem
ff9494d438 Setting to disable memories notifications 2025-05-26 15:51:59 +05:30
Neeraj
b24b5893ae [mob] Fix: Hide both shared and collect files (#6023) 2025-05-26 15:46:46 +05:30
Manav Rathi
9716ff80c4 tr 2025-05-26 15:34:37 +05:30
Manav Rathi
2808f72233 yes 2025-05-26 15:00:37 +05:30
Manav Rathi
5dd097ee09 ditto 2025-05-26 14:58:34 +05:30
Ashil
be9fddf1d4 [mob][photos] Avoid reordering selected faces (#6037) 2025-05-26 14:43:15 +05:30
ashilkn
f9b3f6e9eb Avoid reordering selected faces 2025-05-26 14:39:16 +05:30
laurenspriem
dcb73abdec Log time of scheduled notificaiton 2025-05-26 14:33:39 +05:30
ashilkn
a14c6f4d26 Merge branch 'main' into widget-superpowered 2025-05-26 14:24:35 +05:30
laurenspriem
7afdfe6ed9 Fix delete all files from person 2025-05-26 14:16:59 +05:30
Manav Rathi
8ff8981b76 Fix close button color on download failure notification 2025-05-26 13:54:02 +05:30
Manav Rathi
b89f247f42 Reduce unhandled exception logspam on transient network issues 2025-05-26 13:40:42 +05:30
Neeraj
c3e5a037c0 [auth] New translations (#6035)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2025-05-26 11:46:16 +05:30
Neeraj
70a1894071 [mob] Explicitly exclude app data during D2D backup/transfer (#6028)
As it breaks ente photos anyway because of KeyStore AFAICT 
Tries to fix #6027
2025-05-26 11:44:41 +05:30
Neeraj
42453675b2 [auth] Add new icons & change Mistral icon (#6014)
## Description

- Add [AR24](https://www.ar24.fr/) icon
- Add [Finary](https://finary.com/) icon
- Change [Mistral](https://mistral.ai/) icon
2025-05-26 11:40:48 +05:30
laurenspriem
bdd09e12d8 More logs 2025-05-26 10:27:46 +05:30
laurenspriem
407ad41520 Test clearing with payload 2025-05-26 10:09:52 +05:30
Manav Rathi
185759d234 [infra] Allowlist x-client-version (#6036) 2025-05-26 09:54:07 +05:30
Manav Rathi
860760784a Update doc 2025-05-26 09:33:54 +05:30
Manav Rathi
de10292a84 [infra] Allowlist x-client-version 2025-05-26 09:31:29 +05:30
Manav Rathi
95f10e5a45 [web] New translations (#6033)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-05-26 08:38:45 +05:30
Crowdin Bot
eabacf24ad New Crowdin translations by GitHub Action 2025-05-26 03:06:46 +00:00
Crowdin Bot
61ffcfdc93 New Crowdin translations by GitHub Action 2025-05-26 01:17:57 +00:00
Crowdin Bot
f73fbf4b60 New Crowdin translations by GitHub Action 2025-05-26 01:05:08 +00:00
LucasMZ
0ade0a2807 Try to not allow backup from the system in D2D
As it breaks ente photos anyway because of KeyStore AFAICT
Tries to fix #6027
2025-05-25 08:51:36 -03:00
Neeraj
1e2fb13908 [auth] Add Oracle Cloud icon (#6020)
- Added Oracle Cloud SVG icon.
- Updated custom-icons.json to include the new icon.
2025-05-24 09:02:11 +05:30
Neeraj Gupta
8ab01aefe5 Fix lint + add todo 2025-05-24 09:00:52 +05:30
Neeraj Gupta
fa33a1afd9 Fix: Treat sandbox file as unique file during upload 2025-05-24 08:20:02 +05:30
Neeraj Gupta
856e126bc8 Fix: Hide both shared and collect files 2025-05-24 08:04:19 +05:30
Neeraj Gupta
0f7aae2017 Show resumable download progress for mediaKit 2025-05-24 07:42:19 +05:30
Neeraj Gupta
c1ddb863ad Refactor 2025-05-24 07:38:22 +05:30
Burak
845d014945 [auth] add Oracle Cloud icon
- Added Oracle Cloud SVG icon.
- Updated custom-icons.json to include the new icon.
2025-05-23 19:46:44 +03:00
Ashil
d8b54f5211 [mob][photos] Add files to multiple collections at once (#6019) 2025-05-23 20:37:17 +05:30
Ashil
bc059c861f Merge branch 'widget-superpowered' into collection_sheet_batch_operation 2025-05-23 20:34:06 +05:30
ashilkn
b52ee5bbfb bump up build number to 1052 2025-05-23 20:33:11 +05:30
ashilkn
93c85a57e4 Do remote sync irrespective of error when adding files to multiple collections 2025-05-23 20:23:08 +05:30
ashilkn
e01826217d Refactor 2025-05-23 20:11:44 +05:30
Aman Raj Singh Mourya
b79b7ff3ef Refactor addToMultipleCollections to improve error handling 2025-05-23 19:40:49 +05:30
Manav Rathi
7d52e3d852 [desktop] HLS - Avoid upscaling (#6018)
https://trac.ffmpeg.org/wiki/Scaling#AvoidingUpscaling
2025-05-23 18:29:20 +05:30
Laurens Priem
9a647d6f78 [mob][photos] Fixed crashes on 200MP photos (#6017)
## Description

- Fixed crashes on 200MP photos by decoding them at lower resolution (at
trade-off of zoom)
- Fixed a text overflow issue

## Tests

Tested on a separate build with multiple 200MP photos on my pixel 8.
2025-05-23 17:59:47 +05:30
laurenspriem
6e99206523 Merge branch 'main' into some_fixes 2025-05-23 17:44:50 +05:30
laurenspriem
d7af21aa84 Fix crashes on 200MP photos 2025-05-23 17:37:22 +05:30
Manav Rathi
ced1f6e164 Avoid upscaling
https://trac.ffmpeg.org/wiki/Scaling#AvoidingUpscaling
2025-05-23 17:19:54 +05:30
Neeraj Gupta
7391f27967 Auto pause download when user move away from video 2025-05-23 17:13:54 +05:30
Manav Rathi
4ea3989a33 [desktop][web] Dependency updates (#6016)
\+ Electron 36 workaround
2025-05-23 16:57:05 +05:30
Vishnu Mohandas
641a99b823 [docs] Update export.md 2025-05-23 16:55:04 +05:30
Manav Rathi
7b48dbc1ad Dep updates 2025-05-23 16:47:54 +05:30
Manav Rathi
54c69e7aa5 Add workaround 2025-05-23 16:44:11 +05:30
Manav Rathi
f8bd8c9955 Dep 2025-05-23 16:40:04 +05:30
Neeraj Gupta
f7bb9d5974 Remove db to track download tasks 2025-05-23 16:31:28 +05:30
Manav Rathi
60246be861 [desktop] Multipart HLS video uploads (#6015) 2025-05-23 15:47:49 +05:30
Neeraj Gupta
e3b72fc929 Show part storage breakup under pending sync 2025-05-23 15:35:09 +05:30
Neeraj Gupta
92dae44a0a Refactor 2025-05-23 15:34:55 +05:30
Manav Rathi
d71016500a Equal sized parts (except last) 2025-05-23 15:33:29 +05:30
Aman Raj Singh Mourya
f44c2d14c7 Enable drag functionality in pick cover photo, person avatar, and center point widget. 2025-05-23 15:31:56 +05:30
Neeraj
9c26f4040a [server] Add multipart upload support for preview data (#5992)
## Description

## Tests
2025-05-23 15:31:11 +05:30
Manav Rathi
79e048b4b7 logout 2025-05-23 15:07:12 +05:30
Tanguy
5c0ce038d1 Change Mistral AI icon 2025-05-23 11:36:59 +02:00
Aman Raj Singh Mourya
2903388c94 Refactor CollectionActionSheet and improve UX 2025-05-23 14:48:36 +05:30
Tanguy
331a65d2a0 Add AR24 and Finary icons 2025-05-23 11:14:33 +02:00
Vishnu Mohandas
6c6ab8f463 [mob] Minor UI patch (#6013)
## Description
Increase the width of the container to prevent text overflow

## Tests
- [x] Tested on emulator
2025-05-23 14:03:22 +05:30
vishnukvmd
441a884314 Increase the width of the text container 2025-05-23 14:01:30 +05:30
Manav Rathi
3372d83c5d impl 2025-05-23 12:52:44 +05:30
Manav Rathi
0cf50513cc get 1 2025-05-23 12:39:54 +05:30
Neeraj
7ccf473190 [mob] Trust the user trust store (Android) (#5999)
## Description

It's currently not possible to use a server that has a CA that is
trusted by the _user_ trust store in Android.
This is generally due to a missing configuration of the
`networkSecurityConfig` (by default only system-level CAs are accepted).
  
With this change, the app should be able to reach out to servers that do
not use a publicly trusted CA (but that are still trusted by the user).

## Tests

None

## Remarks

I wasn't able to test my changes as the Flutter build fails with:


```
warning: [options] source value 8 is obsolete and will be removed in a future release
warning: [options] target value 8 is obsolete and will be removed in a future release
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
$HOME/.pub-cache/git/ffmpeg-kit-6d5d27a8c259eda6292f204a27fba53da70af20e/flutter/flutter/android/src/main/java/com/arthenica/ffmpegkit/flutter/FFmpegKitFlutterPlugin.java:157: error: cannot find symbol
    public static void registerWith(final io.flutter.plugin.common.PluginRegistry.Registrar registrar) {
                                                                                 ^
  symbol:   class Registrar
  location: interface PluginRegistry
$HOME/.pub-cache/git/ffmpeg-kit-6d5d27a8c259eda6292f204a27fba53da70af20e/flutter/flutter/android/src/main/java/com/arthenica/ffmpegkit/flutter/FFmpegKitFlutterPlugin.java:651: error: cannot find symbol
    protected void init(final BinaryMessenger messenger, final Context context, final Activity activity, final io.flutter.plugin.common.PluginRegistry.Registrar registrar, final ActivityPluginBinding activityBinding) {
                                                                                                                ^
  symbol:   class Registrar
  location: interface PluginRegistry
2 errors
3 warnings

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':ffmpeg_kit_flutter:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

* Try:
> Run with --info option to get more log output.
> Run with --scan to get full insights.

BUILD FAILED in 59s
```
2025-05-23 12:36:40 +05:30
laurenspriem
c1f7a01ed2 Fix text overflow issue 2025-05-23 12:31:46 +05:30
Aman Raj Singh Mourya
256243e273 Enable drag functionality in collection action sheet 2025-05-23 12:30:27 +05:30
Aman Raj Singh Mourya
dc9dc5d8f9 Single tap selection to select albums 2025-05-23 12:28:24 +05:30
Manav Rathi
6969385089 sketch 2 2025-05-23 12:27:54 +05:30
Manav Rathi
87a1c9417e sketch 1 wip 2025-05-23 12:04:34 +05:30
Manav Rathi
6d13ff5151 ver 2025-05-23 11:31:29 +05:30
Manav Rathi
0b5317867f ue 2025-05-23 11:22:20 +05:30
Neeraj Gupta
6c9107301c Add support for resumable download 2025-05-23 11:21:48 +05:30
Manav Rathi
a32c8116a2 Use 2025-05-23 11:16:10 +05:30
Manav Rathi
d8cd81c702 desktop zod
we'll need it for parsing responses for requests we'll make subsequently
2025-05-23 11:11:33 +05:30
laurenspriem
18e7bbd1ed Extract strings for i18n for existing notifications 2025-05-23 10:41:27 +05:30
laurenspriem
63850df06a Change copy and extract string 2025-05-23 10:33:58 +05:30
Manav Rathi
886ab6d106 Tweak 2025-05-23 10:07:27 +05:30
Manav Rathi
d17296216c retry enhancements 2025-05-23 09:17:37 +05:30
Manav Rathi
55ee8b90b9 more conservative to prevent unforeseen loops 2025-05-23 08:45:04 +05:30
Prateek Sunal
634561347f chore: bump version 2025-05-22 23:52:05 +05:30
Prateek Sunal
575abdb8eb Merge remote-tracking branch 'origin/widget-superpowered' into widget-superpowered 2025-05-22 23:50:22 +05:30
Prateek Sunal
e998502b53 fix: add a status key to check if partial sync was did but a full is required now
(like previously widget was not their so it was fine to sync only 5 images but now since widget is there a full sync is compulsory)
2025-05-22 23:50:07 +05:30
laurenspriem
2ada68e837 Merge remote-tracking branch 'origin/widget-superpowered' into widget-superpowered 2025-05-22 22:41:04 +05:30
laurenspriem
28822a8dc1 Swallow notification scheduling issues 2025-05-22 22:38:24 +05:30
laurenspriem
deaa9a703d Bump for internal release 2025-05-22 22:26:02 +05:30
laurenspriem
4510edf8bd Update notification dependency 2025-05-22 22:24:59 +05:30
laurenspriem
7af59a1ecf Schedule test notifications 2025-05-22 22:24:40 +05:30
Denys Vitali
e003c783f5 fix: use only system CA for ente.io 2025-05-22 18:54:12 +02:00
Denys Vitali
379d2487bd Merge branch 'main' into feature/user-trust-store-android 2025-05-22 18:53:08 +02:00
Manav Rathi
8cdbb737dc Fix 2025-05-22 21:05:39 +05:30
Prateek Sunal
d528d97a0f fix: add got all widget logic 2025-05-22 21:00:48 +05:30
Prateek Sunal
682e4a913f fix: ui stuff 2025-05-22 20:52:13 +05:30
Manav Rathi
a72041b8ba cpkg 2025-05-22 20:29:29 +05:30
Prateek Sunal
ab1a8aa592 fix: don't repeat 2025-05-22 20:21:48 +05:30
Prateek Sunal
c37a0339d2 fix: default state ui 2025-05-22 20:18:41 +05:30
Manav Rathi
3b60f4954b Impl 2025-05-22 20:05:56 +05:30
Manav Rathi
b2ea248a5c Sketch 2025-05-22 19:58:39 +05:30
Prateek Sunal
1bda14fb6f fix: redirect with correct context 2025-05-22 19:57:08 +05:30
Manav Rathi
54e8d6392d Scaffold 2025-05-22 19:46:00 +05:30
Manav Rathi
afa9e03743 ref 2025-05-22 19:39:13 +05:30
Manav Rathi
a4eaf04a33 Extract 2025-05-22 19:34:39 +05:30
Manav Rathi
d30f0fba04 pc estimate 2025-05-22 19:27:57 +05:30
Prateek Sunal
b2855cfd72 fix: rank selected first 2025-05-22 19:20:16 +05:30
Prateek Sunal
06d260f40a fix: only allow selection 2025-05-22 19:04:21 +05:30
Manav Rathi
fb16346b0d Forward 2025-05-22 18:31:05 +05:30
Manav Rathi
41b1638838 Outline 2025-05-22 18:31:05 +05:30
Manav Rathi
702b3a8868 [desktop] Split x-client-package and x-client-version to match mobile (#6008) 2025-05-22 17:49:20 +05:30
Manav Rathi
3572c4328d str 2025-05-22 17:46:08 +05:30
Manav Rathi
1c2b8061dc Include "X-Client-Version" where applicable 2025-05-22 17:41:51 +05:30
Manav Rathi
a9edcead06 [desktop] Don't add version to x-client-package 2025-05-22 17:26:28 +05:30
laurenspriem
5a574c69d3 log debug notification options 2025-05-22 16:48:01 +05:30
Neeraj Gupta
372af94da4 Merge remote-tracking branch 'origin/main' into resumableDownload 2025-05-22 16:41:21 +05:30
Manav Rathi
192905b21e [web] Multipart changes - Finish (#6007)
Finishes the set of changes from
https://github.com/ente-io/ente/pull/5997 and
https://github.com/ente-io/ente/pull/6002.
2025-05-22 16:23:38 +05:30
Manav Rathi
52a533a1e1 Fin 2025-05-22 16:08:07 +05:30
Manav Rathi
0314e94359 Up 2 2025-05-22 15:56:00 +05:30
Neeraj Gupta
cbef1a9145 ios build changes 2025-05-22 15:53:59 +05:30
Aman Raj Singh Mourya
822c33940e Skip single tap action when selection mode is enabled 2025-05-22 15:53:06 +05:30
Manav Rathi
eb29c48f0e Up 1 2025-05-22 15:50:55 +05:30
Aman Raj Singh Mourya
c77b4f176c Refactor AlbumColumnItemWidget to improve selection handling and UI layout 2025-05-22 15:49:49 +05:30
Neeraj Gupta
8bc701d104 Download by individual chunks 2025-05-22 15:35:45 +05:30
Aman Raj Singh Mourya
afcc7b1e46 Add selection functionality and action buttons to collection action sheet 2025-05-22 15:26:49 +05:30
Manav Rathi
84dda89e15 up 2025-05-22 15:26:26 +05:30
Aman Raj Singh Mourya
4bbc0d1f46 Implement addToMultipleCollections method for batch adding files to collections 2025-05-22 15:26:07 +05:30
laurenspriem
aa6d6f4e77 Bump for internal release 2025-05-22 15:04:50 +05:30
Manav Rathi
ff26dd5652 Simplify 2025-05-22 15:04:37 +05:30
Manav Rathi
b68d95d481 normal put 2025-05-22 14:50:00 +05:30
laurenspriem
ec1b54cbb1 Merge branch 'main' into widget-superpowered 2025-05-22 14:46:00 +05:30
laurenspriem
459540fe7a Flag for ML running 2025-05-22 14:38:17 +05:30
Neeraj
2255ea1b92 [meta] Update mobile-internal-release.yml (#6005)
Include branch name

## Description

## Tests
2025-05-22 14:04:25 +05:30
Neeraj
ac704f1082 Update mobile-internal-release.yml
Include branch name
2025-05-22 14:04:04 +05:30
Laurens Priem
4db2e42ee3 [mob][photos] On this day memories + notification + fix (#5998)
## Description

- Added 'On this day' memory similar to [user
request](https://github.com/ente-io/ente/discussions/5852)
- 'On this day' memory gives a notification in the morning
- Fixed [other memories
issue](https://github.com/ente-io/ente/issues/5965)


## Tests

Tested in debug mode on my pixel 8:
- No caching issues
- 'On this day' memories are computed correctly
- Scheduled notifications come at correct time
- Tapping on notification directs to the memory
2025-05-22 13:17:06 +05:30
Manav Rathi
f5949f5bd4 [web] Multipart upload tweaks (#6002)
Refactoring this now before starting on the work on porting some of it
to desktop side.
2025-05-22 12:18:53 +05:30
Manav Rathi
c4feb4b764 in body 2025-05-22 12:13:37 +05:30
Manav Rathi
29bab5705b Sep 2025-05-22 11:40:50 +05:30
Manav Rathi
2ebeed3b6f Unused 2025-05-22 11:35:44 +05:30
Manav Rathi
a0dbcd3dbe Prune 2025-05-22 11:31:12 +05:30
Neeraj
81137652d4 Fix: Return correct status code for maxPassKey err (#6001)
## Description

## Tests
2025-05-22 11:29:55 +05:30
Manav Rathi
4e1418b11a package 2025-05-22 11:29:22 +05:30
Neeraj Gupta
91268341be Fix: Return correct status code for maxPassKey err 2025-05-22 11:27:31 +05:30
Manav Rathi
fb8fc051a9 wrkr 2025-05-22 11:15:28 +05:30
Manav Rathi
d99914c4e9 off by 1 2025-05-22 11:03:30 +05:30
Manav Rathi
736b3fc613 Upload progress 2025-05-22 09:08:52 +05:30
Manav Rathi
ef7f45aa3d Alt 2025-05-22 08:56:09 +05:30
Denys Vitali
4dc741151b fix(mobile): trust the user trust store (Android) 2025-05-22 02:14:11 +02:00
Manav Rathi
e4471af4cb Pass 2025-05-21 21:04:43 +05:30
Manav Rathi
057df349b7 Move retry to service 2025-05-21 20:47:28 +05:30
Manav Rathi
24c7b49132 custom 2025-05-21 19:39:36 +05:30
Manav Rathi
5df009c7c7 Revert because of ERR_H2_OR_QUIC_REQUIRED
Chrome throws ERR_H2_OR_QUIC_REQUIRED when we try to use a stream body on a
non-TLS HTTP request. This will break both dev setups on localhost, and perhaps
some self hosting setups, so is not a feasible path forward for an essential
endpoint to the use of the app.
2025-05-21 19:29:12 +05:30
Manav Rathi
1d276c795c transform 1 2025-05-21 17:56:09 +05:30
Manav Rathi
bc762b972f take 1 2025-05-21 17:39:58 +05:30
laurenspriem
36e4c06dd6 Merge branch 'main' into on_this_day 2025-05-21 17:15:55 +05:30
laurenspriem
ceb3d3fe42 Fix hidden persons in memories 2025-05-21 16:59:50 +05:30
laurenspriem
1dc806d270 Don't await on page route 2025-05-21 16:58:22 +05:30
laurenspriem
8d03df5c36 Remove old debug options 2025-05-21 16:57:56 +05:30
laurenspriem
a1ef8d33d3 Simplify notification ID 2025-05-21 16:56:51 +05:30
Manav Rathi
4f347c1afd [web] Remove unnecessary sax dependency by reworking multipart uploads (#5997) 2025-05-21 16:39:35 +05:30
laurenspriem
8171d56168 Route notification to memory 2025-05-21 16:35:57 +05:30
Manav Rathi
7e7751b5be Nicer 2025-05-21 16:27:25 +05:30
Manav Rathi
d19a0fccda Remove dependency 2025-05-21 16:22:52 +05:30
Manav Rathi
5b38ef394b More debug info 2025-05-21 16:10:27 +05:30
Manav Rathi
ad87470c25 2 2025-05-21 16:10:26 +05:30
Manav Rathi
67140fe7f2 s2 2025-05-21 16:10:26 +05:30
Manav Rathi
b372ba47ba Swap 2025-05-21 16:10:26 +05:30
Manav Rathi
24c66a9b6b impl 2025-05-21 16:10:26 +05:30
Manav Rathi
201ef60f07 Outline 2025-05-21 16:10:26 +05:30
Manav Rathi
89294f2a76 Outline 2025-05-21 16:10:26 +05:30
Manav Rathi
4772557f7a Tweak 2025-05-21 16:10:26 +05:30
Manav Rathi
073d2c5684 2 2025-05-21 16:10:26 +05:30
Manav Rathi
e022e7ae5b 1 2025-05-21 16:10:26 +05:30
Manav Rathi
2cdeb88b4d Outline 2025-05-21 16:10:26 +05:30
Neeraj Gupta
78e70a1c05 Merge branch 'main' into resumableDownload 2025-05-21 16:03:58 +05:30
Neeraj
ca319e501e [mob][auth] Update copy for change email dialog (#5996)
## Description

## Tests
2025-05-21 15:32:05 +05:30
Neeraj Gupta
05898dfbe2 Update copy for change email dialog 2025-05-21 15:28:01 +05:30
Neeraj
c129cc15b5 [server] Increase file size limit 5 -> 10 GiB (#5995)
## Description

## Tests
2025-05-21 15:26:31 +05:30
Neeraj Gupta
a683883733 Increase file size limit 5 -> 10 GiB 2025-05-21 15:20:12 +05:30
laurenspriem
69b575cc66 Log cache update due to caching issue 2025-05-21 14:39:12 +05:30
laurenspriem
63a4972839 Fix caching issue 2025-05-21 14:37:38 +05:30
Neeraj
6188578d18 [docs] Update example config (#5951)
## Description
In my testing web apps only worked with https:// in front of them.
## Tests
2025-05-21 13:38:56 +05:30
laurenspriem
5a4d8950af Integrate notifications to OnThisDay memories 2025-05-21 12:36:04 +05:30
Neeraj
5007204944 [server] Change file_data.obj_size column type (#5994)
## Description

## Tests
Tested locally
2025-05-21 11:24:52 +05:30
Neeraj Gupta
4a19fc077e Change file_data.obj_size column type 2025-05-21 11:13:05 +05:30
Ashil
2b29f55587 [mob][photos] Album UI Revamp (#5661)
## Description
This update introduces a redesigned user interface for album management,
featuring a new layout for albums. Improve user experience by providing
intuitive navigation and efficient batch operations.

## Tests
1. A new grid & list layout for the album screen. The first cell is
dedicated to quickly adding new albums.
2. App Bar Enhancements
    - Sort Options: Organize albums by name, latest, or time.
    - View Toggle: Switch between grid and list views with ease.
    - Search Functionality: Quickly find albums using the search icon.
3. Long-press to select albums for batch actions. A bottom sheet
provides options to delete, share, hide, or pin selected albums.
2025-05-21 11:01:48 +05:30
laurenspriem
4cc8ff2fb1 Notification scheduling working 2025-05-21 10:57:49 +05:30
Aman Raj Singh Mourya
de29246304 move the collection.type == CollectionType.favorites check before isEmptyCollection check to handle the case where favourite collection is empty 2025-05-21 10:47:01 +05:30
laurenspriem
8deb52301a Android permissions for notifications 2025-05-21 10:30:01 +05:30
Manav Rathi
16a20e8b0d [web] Hash functions - Document and namespace (#5993)
No functional changes.
2025-05-21 08:56:29 +05:30
Manav Rathi
3824bfbdd5 namespace 2025-05-21 08:51:22 +05:30
Prateek Sunal
c996c794fd fix: launch people page before launching the file previewer 2025-05-21 08:47:03 +05:30
Manav Rathi
ef245e5c02 outline 2025-05-21 08:36:34 +05:30
Neeraj Gupta
4dc6890afc Add multipart upload support for preview data 2025-05-21 08:14:53 +05:30
Prateek Sunal
87195f3801 chore: fix incorrect widget count 2025-05-21 04:15:57 +05:30
Prateek Sunal
8ce45a4fa8 chore: bump version 2025-05-21 04:06:02 +05:30
Prateek Sunal
520e5d4ae7 fix: update routing 2025-05-21 04:01:37 +05:30
Prateek Sunal
2a8e167e42 fix: don't listen to collection route 2025-05-21 03:51:20 +05:30
Prateek Sunal
2f7bde36bd chore: bump version to 1.0.17 2025-05-21 03:27:49 +05:30
Prateek Sunal
ace375b7f6 fix: get effective selected people code 2025-05-21 03:27:38 +05:30
Prateek Sunal
cde6ebfa39 fix: pass and parse mainKey correctly 2025-05-21 03:12:19 +05:30
Prateek Sunal
a1e56a457f fix: update people default illustration 2025-05-21 03:04:21 +05:30
Prateek Sunal
a4ebf972e1 fix: count home widget for android 2025-05-21 02:56:32 +05:30
Prateek Sunal
7d5bed0493 fix: iOS build 2025-05-21 02:20:43 +05:30
Prateek Sunal
d449bd0f90 chore: update version 2025-05-21 02:16:48 +05:30
Prateek Sunal
5d14ca8439 fix: handle PeopleChangedEvent, add better limit for files, better behavior on save 2025-05-21 02:15:23 +05:30
Prateek Sunal
619f6795e2 fix: don't show un-named person 2025-05-21 01:44:12 +05:30
Prateek Sunal
04cd1d3bb3 fix: update code to look clean 2025-05-21 01:28:14 +05:30
Prateek Sunal
0960f189ce Merge remote-tracking branch 'origin/main' into widget-superpowered 2025-05-21 01:11:56 +05:30
Prateek Sunal
734b836a7a chore: update locals 2025-05-21 01:11:48 +05:30
Prateek Sunal
91447cdc77 fix: widgets code 2025-05-21 01:11:40 +05:30
Manav Rathi
961501a6fb [desktop] HLS newlines - Take 2 (#5990) 2025-05-20 20:07:22 +05:30
Manav Rathi
914893eae6 Fix 2025-05-20 20:01:44 +05:30
Manav Rathi
7a10f4c145 Note results of tests and add extra checks 2025-05-20 19:58:10 +05:30
ashilkn
092f64c3ca Refactor CollectionsFlexiGridViewWidget 2025-05-20 17:44:27 +05:30
laurenspriem
bdecb04398 Add timezone package for finding OS timezone 2025-05-20 17:38:04 +05:30
Neeraj
e25418e5a6 [server] Fix err handling during stream upload (#5986)
## Description

## Tests
2025-05-20 16:37:29 +05:30
Neeraj Gupta
a062c1ccc3 Fix err handling 2025-05-20 16:35:22 +05:30
Aman Raj Singh Mourya
d1ae4d52dd refactor: update padding and width to make sure thumbnail is perfect square 2025-05-20 16:04:53 +05:30
Manav Rathi
3c532cd4f4 [desktop] Fix HLS regex for Windows (#5984)
`$` eol should match both `\r\n` (windows) and `\n` (rest)
2025-05-20 16:02:56 +05:30
Manav Rathi
013389c696 Fix regex for Windows 2025-05-20 15:57:41 +05:30
Aman Raj Singh Mourya
43cdd10e85 Merge branch 'album_UI_revamp' of https://github.com/ente-io/ente into album_UI_revamp 2025-05-20 14:25:30 +05:30
Aman Raj Singh Mourya
539145d38d refactor: simplify layout calculations in flex grid view 2025-05-20 14:25:16 +05:30
Neeraj Gupta
a5ccae4390 Merge branch 'main' into resumableDownload 2025-05-20 14:21:27 +05:30
Neeraj Gupta
34b53f8443 Show download progress for internal users 2025-05-20 12:29:17 +05:30
Neeraj Gupta
8448be6c68 move model out + clean up 2025-05-20 12:01:13 +05:30
ashilkn
6e4a856ea4 Use better colors 2025-05-20 11:57:19 +05:30
ashilkn
40ff361af1 Add Todo comment 2025-05-20 11:28:59 +05:30
laurenspriem
63b0cee589 Add timezone dependency for scheduling notifications 2025-05-20 09:13:56 +05:30
Prateek Sunal
574eea58fc fix: add robust logic for album home widget service 2025-05-20 07:06:57 +05:30
Prateek Sunal
138310b8f8 fix: update get collection by id function 2025-05-19 19:54:24 +05:30
Prateek Sunal
3d63ded84d fix: blockers, getter function for albums hw service 2025-05-19 19:54:09 +05:30
Prateek Sunal
2ff69f661e Merge branch 'main' into widget-superpowered 2025-05-19 19:20:26 +05:30
Prateek Sunal
10c65f13c8 fix: update get total function for memory home widget 2025-05-19 19:19:30 +05:30
Prateek Sunal
761c976d7e Merge remote-tracking branch 'origin/on_this_day' into widget-superpowered 2025-05-19 19:13:47 +05:30
Prateek Sunal
423a7eec37 fix: show on this day to both ml & non-ml users 2025-05-19 19:10:29 +05:30
Prateek Sunal
c8b23f80e2 feat: add selection and save/get from db for people widget settings 2025-05-19 18:53:41 +05:30
Prateek Sunal
d127199ade feat: complete save and selection logic for memories and albums settings 2025-05-19 17:35:33 +05:30
Aman Raj Singh Mourya
f44e90801f refractor: revert back copy of sort options 2025-05-19 17:23:25 +05:30
Aman Raj Singh Mourya
ded497d421 fix: make album sqaure and show file count 2025-05-19 17:22:08 +05:30
Neeraj Gupta
7f3d4db9a5 Add scaffold (llm) for resumable download 2025-05-19 16:57:41 +05:30
Prateek Sunal
22bae0292d feat: add new widget services 2025-05-19 14:04:42 +05:30
Prateek Sunal
4c7121fd6c chore: update generated messages 2025-05-19 14:04:19 +05:30
Prateek Sunal
f53745bbb0 Merge remote-tracking branch 'origin/album_UI_revamp' into widget-superpowered 2025-05-19 14:00:13 +05:30
ashilkn
1c6e343994 Use StatelessWidget instead of helper method 2025-05-19 13:51:52 +05:30
laurenspriem
2144f57ee0 remove null check 2025-05-19 11:08:00 +05:30
laurenspriem
476fe1b624 Assign IDs to memories 2025-05-19 11:06:39 +05:30
laurenspriem
ff705280c7 Rename variable 2025-05-18 11:58:42 +05:30
laurenspriem
6ff6594a81 Include onThisDay in widget api 2025-05-18 11:40:23 +05:30
laurenspriem
69f12125ec Merge branch 'memories_widget_api' into on_this_day 2025-05-18 11:26:53 +05:30
laurenspriem
862b11c530 Calc onThisDay even when ML is off 2025-05-18 11:23:05 +05:30
laurenspriem
e40afac212 Rename for clarity 2025-05-18 11:09:48 +05:30
Ferdinand Saurenbach
a880726f16 Update museum.md 2025-05-17 16:43:36 +02:00
Prateek Sunal
bffd4d83a5 fix: update the deep link 2025-05-16 18:41:21 +05:30
Aman Raj Singh Mourya
59a534225c [mob][photos] Refactor add participant page (#5940) 2025-05-16 17:49:02 +05:30
ashilkn
810ee3d9fe Merge album_UI_revamp after resolving merge conflicts 2025-05-16 16:19:45 +05:30
ashilkn
9605637e50 Refactor add participants page 2025-05-16 16:15:53 +05:30
laurenspriem
9016394ccc Integrate on this day into gallery memories 2025-05-16 15:08:40 +05:30
Prateek Sunal
a518bbd608 fix(home-widget): update default image caption & rename totalMemories 2025-05-16 15:07:45 +05:30
Aman Raj Singh Mourya
1c4ebcccb1 fix: allow to leave favourite albums 2025-05-16 14:44:48 +05:30
Aman Raj Singh Mourya
793fd5ba39 fix: avoid poping of delete dialog to avoid poping of main screen 2025-05-16 14:39:56 +05:30
Prateek Sunal
9b1eacf736 fix: update the preview images 2025-05-16 14:37:33 +05:30
Aman Raj Singh Mourya
cae9988c9a fix: avoid poping of delete dialog as it pop the main screen 2025-05-16 14:37:02 +05:30
Prateek Sunal
538a5df32d feat: add preview images for both android & iOS 2025-05-16 14:30:13 +05:30
laurenspriem
853b916cf1 Exclude certain collections 2025-05-16 14:25:31 +05:30
Aman Raj Singh Mourya
93d6f58660 fix: code refractor 2025-05-16 14:22:53 +05:30
Neeraj Gupta
7b145f0898 Bump version code 2025-05-16 14:15:30 +05:30
Neeraj Gupta
add09a601d Merge branch 'main' into album_UI_revamp 2025-05-16 14:15:06 +05:30
laurenspriem
5dda596544 Max of 20 photos spread across years 2025-05-16 13:52:05 +05:30
Neeraj Gupta
8101bee2fd Update intl_pt.arb 2025-05-16 12:50:13 +05:30
Neeraj Gupta
c234bc7be8 Fix lint 2025-05-16 12:45:41 +05:30
Neeraj Gupta
27fd372d62 Bump version v1.0.14 2025-05-16 12:42:58 +05:30
laurenspriem
66f23283c1 Only memories spread across multiple years 2025-05-16 12:42:00 +05:30
Neeraj Gupta
8d7bc81c20 Merge branch 'main' into album_UI_revamp 2025-05-16 12:40:56 +05:30
Aman Raj Singh Mourya
41e870f7a0 [mob][photos] Contacts section performance improvements (#5923)
## Description

- Defer the initial load until the Shared Collection tab is in view to
avoid unnecessary work at app startup.
- Remove the computation previously done for the Search tab sections
that was intended for the Contacts section, as it is no longer present.
2025-05-16 11:59:14 +05:30
Aman Raj Singh Mourya
0342e1ef56 Merge branch 'album_UI_revamp' of https://github.com/ente-io/ente into album_UI_revamp 2025-05-16 11:57:33 +05:30
Aman Raj Singh Mourya
efed42ce4a refractor: used better code format 2025-05-16 11:56:55 +05:30
Aman Raj Singh Mourya
ef9d925686 fix: alignment of icons 2025-05-16 11:34:37 +05:30
laurenspriem
e84f46f435 correct translation use 2025-05-16 11:31:47 +05:30
laurenspriem
c1193be61c Extract strings 2025-05-16 11:31:23 +05:30
laurenspriem
9b460ca1dc Init onThisDay method 2025-05-16 11:30:44 +05:30
ashilkn
a101dba6cd Defer loading of contacts section in shared collections tab until the tab is in view for atleast 500ms. This is to avoid work at app start 2025-05-15 19:11:30 +05:30
Prateek Sunal
491de296ca feat: similar UI's for all the widgets 2025-05-15 18:18:42 +05:30
ashilkn
a614636789 Avoid computing data for contacts section for the search tab since it has been moved temporarily to the shared collections tab 2025-05-15 17:23:35 +05:30
Aman Raj Singh Mourya
07c640cf90 refractor: extract string + code refractor and improvements 2025-05-15 16:33:16 +05:30
Prateek Sunal
9fa13508b8 feat: add iOS widgets 2025-05-15 16:26:16 +05:30
Aman Raj Singh Mourya
1c099a60e8 refactor: use params to store resultCollections 2025-05-15 16:25:52 +05:30
laurenspriem
9170c80b26 Fix constructor 2025-05-15 14:18:46 +05:30
Neeraj Gupta
6ae8abb492 Bump version v1.0.13 2025-05-15 10:47:45 +05:30
Neeraj Gupta
f077213c62 Merge branch 'main' into album_UI_revamp 2025-05-15 10:46:26 +05:30
Aman Raj Singh Mourya
62c1f0c6ac fix: merge conflict 2025-05-15 10:17:53 +05:30
Aman Raj Singh Mourya
cc486983ab Merge branch 'main' into album_UI_revamp 2025-05-15 10:14:40 +05:30
Prateek Sunal
f22ad9611f feat: populate people as well 2025-05-14 15:14:11 +05:30
Prateek Sunal
9cafa72ae3 fix: add color scheme based icon 2025-05-14 14:01:25 +05:30
Prateek Sunal
0c9d7321eb fix: nominal display limit count & disable show create album 2025-05-14 13:52:13 +05:30
Prateek Sunal
5fc5d0ef48 feat: add initial album grid and save button 2025-05-14 13:48:08 +05:30
Prateek Sunal
84017c7397 Merge remote-tracking branch 'origin/memories_widget_api' into widget-superpowered 2025-05-14 12:13:06 +05:30
Prateek Sunal
e250759999 Merge remote-tracking branch 'origin/album_grid_UI' into widget-superpowered 2025-05-14 11:21:50 +05:30
Aman Raj Singh Mourya
f088c24abe refactor: remove debug print statements 2025-05-13 18:15:35 +05:30
Aman Raj Singh Mourya
e197423c1d fix: fixed album list opening scrolled down & increase bottom padding 2025-05-13 18:10:38 +05:30
laurenspriem
1785baf4af method for memories widget 2025-05-13 13:33:31 +05:30
Aman Raj Singh Mourya
51d55ee92b feat: Add new album row item widget and update collections grid view 2025-05-12 22:06:19 +05:30
Aman Raj Singh Mourya
7cd3f8e2ac [mob][photos] feat: show albums shared by contact in contact section 2025-05-12 20:12:45 +05:30
Prateek Sunal
91fefa7eb9 feat: memories leading icons 2025-05-12 19:12:46 +05:30
Prateek Sunal
63b9a09a2d feat: init widgets settings and default states
Next: Add Grid, make things dynamic, Add sync logic and native code
2025-05-12 19:07:58 +05:30
Prateek Sunal
8c58e536de Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-05-12 14:42:33 +05:30
Prateek Sunal
8eed8a67ee fix(bgsync): better fg check, init deps well, add seppuku function 2025-05-12 14:41:42 +05:30
Prateek Sunal
89ba442731 fix: remove fg sync for now 2025-05-12 14:41:04 +05:30
Prateek Sunal
81965d0d36 fix(bgtask): better logging 2025-05-12 14:40:52 +05:30
Prateek Sunal
674642ac7c Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-05-09 14:29:22 +05:30
Prateek Sunal
08889bd608 fix: decrease the time to 15 mins on iOS 2025-05-09 14:29:14 +05:30
Prateek Sunal
990d185e86 fix: separate BgTaskUtils for workmanager rel utils 2025-05-08 15:31:11 +05:30
Prateek Sunal
8db7fb3842 fix: add different names for background task identifier's 2025-05-07 19:35:49 +05:30
Prateek Sunal
f18dd26716 Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-05-07 16:39:47 +05:30
Prateek Sunal
25c5efbb8c fix(work-manager): use different identifier name 2025-05-07 13:31:12 +05:30
Aman Raj Singh Mourya
6627f77d92 [mob][photos] fix: increase bottom padding 2025-05-06 20:36:44 +05:30
Prateek Sunal
f5e0a006c8 Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-05-06 18:35:35 +05:30
Prateek Sunal
5141493337 fix: add true to debug mode 2025-05-06 18:34:51 +05:30
Prateek Sunal
e0f8e791b3 fix: remove bg fetch 2025-05-06 18:34:41 +05:30
Prateek Sunal
2bb28f83c1 Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-05-02 17:39:52 +05:30
Prateek Sunal
af52644a4b fix: adjust initial delay for background task and remove unnecessary delay 2025-05-02 11:54:15 +05:30
Prateek Sunal
eb71113d73 chore: update lock files 2025-05-02 11:53:46 +05:30
Prateek Sunal
cd5288eb47 chore: bump locks 2025-05-02 10:58:38 +05:30
Prateek Sunal
c8e5246f44 Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-05-02 10:58:21 +05:30
Aman Raj Singh Mourya
14b70ce66e Merge branch 'album_UI_revamp' of https://github.com/ente-io/ente into album_UI_revamp 2025-05-01 10:15:12 +05:30
Aman Raj Singh Mourya
d9a5fbfe00 [mob][photos] implemented new sorting order for contact section 2025-05-01 10:14:54 +05:30
Neeraj Gupta
f816166743 Fix translation file 2025-04-28 09:26:57 +05:30
Neeraj Gupta
3aba4fad47 Bump version for droid internal release 2025-04-28 09:25:15 +05:30
Neeraj Gupta
60137585d1 Merge remote-tracking branch 'origin/main' into album_UI_revamp 2025-04-28 09:24:37 +05:30
Aman Raj Singh Mourya
59316c263f [mob][photos] fix: Reduce main axis spacing from 4px -> 2px 2025-04-25 22:39:20 +05:30
Aman Raj Singh Mourya
44682404ff Merge branch 'album_UI_revamp' of https://github.com/ente-io/ente into album_UI_revamp 2025-04-25 21:48:57 +05:30
Aman Raj Singh Mourya
83c864df2b [mob][photos] minor fix 2025-04-25 21:41:06 +05:30
Neeraj Gupta
184882fae2 Bump version for droid internal release 2025-04-25 16:16:10 +05:30
Neeraj Gupta
e59e600a35 Merge branch 'album_UI_revamp' of https://github.com/ente-io/auth into album_UI_revamp 2025-04-25 16:14:57 +05:30
Neeraj Gupta
6f5c5a0b06 Merge branch 'main' into album_UI_revamp 2025-04-25 16:14:32 +05:30
Aman Raj Singh Mourya
3d4ff93e65 [mob][photos] Move Contacts section from search tab to shared tab 2025-04-25 16:11:02 +05:30
Aman Raj Singh Mourya
d88621ab5a [mob][photos] feat: implement ascending/descending sort direction 2025-04-25 15:52:09 +05:30
Aman Raj Singh Mourya
95e6a86b10 [mob][photos] feat: update sharing functionality improve UI flow 2025-04-25 15:45:38 +05:30
Aman Raj Singh Mourya
e5d63fe9e7 [mob][photos] feat: enable selection on album screen itself 2025-04-25 12:57:27 +05:30
Aman Raj Singh Mourya
1265002d5a Merge branch 'album_UI_revamp' of https://github.com/ente-io/ente into album_UI_revamp 2025-04-24 02:32:20 +05:30
Aman Raj Singh Mourya
c7aecc9b30 [mob][photos] minor fix 2025-04-24 02:31:24 +05:30
Aman Raj Singh Mourya
dba837c62c [mob][photos] refactor: allow favourite album selection for better UX 2025-04-24 02:31:10 +05:30
Aman Raj Singh Mourya
e5bdd74fa9 [mob][photos] refractor: update icon colors to use blurStrokePressed 2025-04-24 01:14:33 +05:30
Aman Raj Singh Mourya
0f31278965 [mob][photos] refactor: remove create album option and update item limit count 2025-04-23 22:24:49 +05:30
Neeraj Gupta
be3e434bec Bump version 2025-04-23 14:46:54 +05:30
Aman Raj Singh Mourya
9d9a7b548d [mob][photos] minor fix 2025-04-23 13:53:54 +05:30
Aman Raj Singh Mourya
3708819e6b Merge branch 'album_UI_revamp' of https://github.com/ente-io/ente into album_UI_revamp 2025-04-23 13:32:30 +05:30
Aman Raj Singh Mourya
389220357e [mob][photos] feat: enable album selection actions for incoming collections 2025-04-23 13:31:56 +05:30
Neeraj Gupta
d9925f29d8 Merge branch 'main' into album_UI_revamp 2025-04-23 13:14:58 +05:30
Aman Raj Singh Mourya
0dab15b703 [mpb][photos] feat: collections and optimize grid/list item rendering 2025-04-22 13:02:04 +05:30
Aman Raj Singh Mourya
2449dbe0cd [mob][photos] feat: update selection logic to exclude favorite collections from actions 2025-04-22 12:42:40 +05:30
Aman Raj Singh Mourya
7f96a11e07 [mob][photos] refactor: remove debug print statements and update parameter naming 2025-04-21 10:18:44 +05:30
Aman Raj Singh Mourya
d7cb5c29cf [mob][photos] feat: reflect SelectAll action change on UI 2025-04-21 10:18:05 +05:30
Aman Raj Singh Mourya
399ecdfd7d [mob][photos] feat: support for multiple selected albums and add SelectAllAlbumsButton 2025-04-21 10:17:12 +05:30
Aman Raj Singh Mourya
f4580c8fdf [mob][photos] feat: add support for sharing and deleting multiple collections with action sheets 2025-04-19 21:45:49 +05:30
Aman Raj Singh Mourya
13f78ecc19 [mob][photos] feat: enhance AddParticipantPage to support multiple collections and update album selection actions 2025-04-19 21:43:01 +05:30
Aman Raj Singh Mourya
9267c4012b feat: integrate album selection management into collection list and flex grid views 2025-04-19 00:14:54 +05:30
Aman Raj Singh Mourya
a8e80717aa [mob][photos] fix: use selected albums for showing selected/unselected state 2025-04-19 00:14:34 +05:30
Aman Raj Singh Mourya
8e552c57bb [mob][photos] feat: implement album selection management and action overlay components 2025-04-19 00:13:10 +05:30
Aman Raj Singh Mourya
28f03d3514 [mob][photos] feat: add searchable app bar and enhance collection filtering 2025-04-16 00:27:10 +05:30
Aman Raj Singh Mourya
c7047ab964 [mob][photos] feat: support album sorting by name and newest photo for shared albums 2025-04-15 22:40:25 +05:30
Aman Raj Singh Mourya
daa3fcd354 [mob][photos] fix: hide "add new album" options when any album is selected 2025-04-15 19:17:02 +05:30
Aman Raj Singh Mourya
0057e71e02 [mob][photos] fix: use "strokeFaint" instead of "strokeFainter" for better visibility 2025-04-15 19:16:01 +05:30
Aman Raj Singh Mourya
50fabee1e0 [mob][photos] feat: enhance AlbumRowItemWidget with selection handling 2025-04-09 00:13:19 +05:30
Aman Raj Singh Mourya
227d76db29 [mob][photos] feat: enhance CollectionsFlexiGridViewWidget with selection mode and album creation options 2025-04-09 00:12:50 +05:30
Aman Raj Singh Mourya
9207b0c7b8 [mob][photos] feat: add album view type settings 2025-04-09 00:12:08 +05:30
Aman Raj Singh Mourya
9b8c48ca6e [mob][photos] feat: implement AlbumListItemWidget for displaying album in vertical layout 2025-04-09 00:10:30 +05:30
Aman Raj Singh Mourya
dc05e254cb [mob][photos] feat: add NewAlbumRowItemWidget for creating new albums in grid view 2025-04-09 00:09:44 +05:30
Prateek Sunal
00c0f36d71 chore: update pubspec lock 2025-04-07 14:55:01 +05:30
Prateek Sunal
aaca6d62f3 Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-04-07 14:54:09 +05:30
Prateek Sunal
f62e76eb02 Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-04-06 21:05:12 +05:30
Aman Raj Singh Mourya
f047757c63 [mob][photos] changes: make SectionOptions tappable for incoming, outgoing, and quick links 2025-04-05 21:23:13 +05:30
Aman Raj Singh Mourya
f9711e09a1 [mob][photos] fix: show "Add new" album for "On ente" section only 2025-04-05 21:04:56 +05:30
Aman Raj Singh Mourya
a5644f292e [mob][photos] changes: add new album icon to flex grid view 2025-04-05 20:27:09 +05:30
Aman Raj Singh Mourya
f3a88dc3fa [mob][photos] changes: adjust thumbnail size and gap for 3x3 layout 2025-04-05 19:57:14 +05:30
Aman Raj Singh Mourya
9ef2a5fc62 [mob][photos] changes: move sort option into full screen view of "On ente" section & remove "View all" section 2025-04-05 00:37:01 +05:30
Aman Raj Singh Mourya
36ab2f05df [mob][photos] changes: make the complete SectionOptions tappable 2025-04-05 00:34:34 +05:30
Aman Raj Singh Mourya
723511540c [mob][photos] Show 3 albums in a row and max 3 rows i.e _kOnEnteItemLimitCount = 9 (3*3) 2025-04-04 20:40:01 +05:30
Prateek Sunal
9717a92142 feat: Register periodic task for iOS background app refresh and simplify setupIntentAction call 2025-03-27 18:53:33 +05:30
Prateek Sunal
cfe091b5b3 chore: Update Podfile.lock with dependency version changes 2025-03-26 23:03:30 +05:30
Prateek Sunal
a450004c19 Merge remote-tracking branch 'origin/main' into improve-bg-processing 2025-03-26 22:47:10 +05:30
Prateek Sunal
939b30c1b2 feat: Remove background_fetch dependency and update workmanager to use git source 2025-03-26 22:46:35 +05:30
Prateek Sunal
68886d72ce Merge remote-tracking branch 'origin/mob_workmanager' into improve-bg-processing 2025-03-26 15:50:40 +05:30
Prateek Sunal
15947c311d chore: change to if else ladder 2024-11-07 20:22:34 +05:30
Prateek Sunal
da7247357a chore: change if else format 2024-11-07 19:14:16 +05:30
Prateek Sunal
2bc84f446b fix: dependency override to support both background_fetch and workmanager 2024-11-07 00:04:37 +05:30
Prateek Sunal
c3f970b5fe fix: move work manager outside 2024-11-06 23:28:49 +05:30
Prateek Sunal
7a69ac730b chore: update translations 2024-11-06 23:25:30 +05:30
Prateek Sunal
0b83bbbe40 Merge remote-tracking branch 'origin/main' into mob_workmanager 2024-11-06 23:24:13 +05:30
Prateek Sunal
e7bf39a770 feat: update work manager methods 2024-11-06 23:18:45 +05:30
Prateek Sunal
3d1b6a40e2 Merge remote-tracking branch 'origin/main' into mob_workmanager 2024-11-05 16:27:43 +05:30
Prateek Sunal
8d55d310da fix: remove background fetch temporarily 2024-10-04 00:51:13 +05:30
872 changed files with 49985 additions and 30321 deletions

View File

@@ -1,24 +1,21 @@
name: Report a bug
description: Let us know if something's not working the way you expected.
description: For regressions only (things that were working earlier)
labels: []
body:
- type: markdown
attributes:
value: |
Before opening a new bug report, please ensure
1. you are on the latest version (it might've already been fixed),
2. you've searched for existing issues (please add your observations as a comment there instead of creating a duplicate).
If you are self hosting, please create a community [Q&A](https://github.com/ente-io/ente/discussions/categories/q-a) instead.
Before opening a new issue, **please** ensure
1. You are on the latest version,
2. You've searched for existing issues,
3. It was working earlier (otherwise use [this](https://github.com/ente-io/ente/discussions/categories/enhancements))
4. It is not about self hosting (otherwise use [this](https://github.com/ente-io/ente/discussions/categories/q-a))
- type: textarea
attributes:
label: Description
description: >
Please describe the bug. If possible, also include the steps to
reproduce the behaviour, and the expected behaviour (sometimes
bugs are just expectation mismatches, in which case this would be
a good fit for [feature
requests](https://github.com/ente-io/ente/discussions/categories/feature-requests)).
Describe the bug and steps to reproduce the behaviour, and how it
differs from the previously working behaviour.
validations:
required: true
- type: input
@@ -30,15 +27,12 @@ body:
attributes:
label: Last working version
description: >
The version where the feature was last known to be working. It is
fine if you don't remember the exact version (mention roughly
then), but if there just isn't a last known working version, then
it is likely that what is being reported is not an issue but a
feature request. The difference between the two categories is not
just semantic - feature requests use GitHub discussions and so can
be [upvoted by the
community](https://github.com/ente-io/ente/discussions/categories/feature-requests)
(issues can't be).
The version where things were last known to be working. It is fine
if you don't remember the exact version (mention roughly then),
but **if there just isn't a last working version, then please file
it as an
[enhancement](https://github.com/ente-io/ente/discussions/categories/enhancements))**
(where the community upvotes can be used to help prioritize).
placeholder: e.g. v1.2.3
- type: dropdown
attributes:

View File

@@ -1,5 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: Feature requests and questions
- name: Enhacements, feature requests, feedback and questions
url: https://github.com/ente-io/ente/discussions
about: Please use Discussions for everything apart from the above.

View File

@@ -141,6 +141,7 @@ jobs:
build-windows:
runs-on: windows-latest
environment: "auth-win-build"
defaults:
run:
@@ -174,14 +175,22 @@ jobs:
- name: Retain Windows EXE and DLLs
run: cp -r build/windows/x64/runner/Release ente-${{ github.ref_name }}-windows
- name: Code sign Windows installer and EXE
uses: dlemstra/code-sign-action@v1
- name: Sign files with Trusted Signing
uses: azure/trusted-signing-action@v0
with:
certificate: "${{ secrets.WINDOWS_CERTIFICATE }}"
password: "${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}"
files: |
auth/artifacts/ente-${{ github.ref_name }}-installer.exe
auth/ente-${{ github.ref_name }}-windows/auth.exe
azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }}
azure-client-id: ${{ secrets.AZURE_CLIENT_ID }}
azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
endpoint: ${{ secrets.AZURE_ENDPOINT }}
trusted-signing-account-name: ${{ secrets.AZURE_CODE_SIGNING_NAME }}
certificate-profile-name: ${{ secrets.AZURE_CERT_PROFILE_NAME }}
files: |
${{ github.workspace }}/auth/artifacts/ente-${{ github.ref_name }}-installer.exe
${{ github.workspace }}/auth/ente-${{ github.ref_name }}-windows/auth.exe
file-digest: SHA256
timestamp-rfc3161: http://timestamp.acs.microsoft.com
timestamp-digest: SHA256
- name: Zip Windows EXE and DLLs
run: tar.exe -a -c -f artifacts/ente-${{ github.ref_name }}-windows.zip ente-${{ github.ref_name }}-windows

70
.github/workflows/auth-win-sign.yml vendored Normal file
View File

@@ -0,0 +1,70 @@
name: "Windows build & Sign (auth)"
on:
workflow_dispatch: # Allow manually running the action
env:
FLUTTER_VERSION: "3.24.3"
permissions:
contents: write
jobs:
build-windows:
runs-on: windows-latest
environment: "auth-win-build"
defaults:
run:
working-directory: auth
steps:
- name: Checkout code and submodules
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Flutter ${{ env.FLUTTER_VERSION }}
uses: subosito/flutter-action@v2
with:
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Create artifacts directory
run: mkdir artifacts
- name: Build Windows installer
run: |
flutter config --enable-windows-desktop
# dart pub global activate flutter_distributor
dart pub global activate --source git https://github.com/ente-io/flutter_distributor_fork --git-ref develop --git-path packages/flutter_distributor
make innoinstall
flutter_distributor package --platform=windows --targets=exe --skip-clean
mv dist/**/*-windows-setup.exe artifacts/ente-${{ github.ref_name }}-installer.exe
- name: Retain Windows EXE and DLLs
run: cp -r build/windows/x64/runner/Release ente-${{ github.ref_name }}-windows
- name: Sign files with Trusted Signing
uses: azure/trusted-signing-action@v0
with:
azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }}
azure-client-id: ${{ secrets.AZURE_CLIENT_ID }}
azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
endpoint: ${{ secrets.AZURE_ENDPOINT }}
trusted-signing-account-name: ${{ secrets.AZURE_CODE_SIGNING_NAME }}
certificate-profile-name: ${{ secrets.AZURE_CERT_PROFILE_NAME }}
files: |
${{ github.workspace }}/auth/artifacts/ente-${{ github.ref_name }}-installer.exe
${{ github.workspace }}/auth/ente-${{ github.ref_name }}-windows/auth.exe
file-digest: SHA256
timestamp-rfc3161: http://timestamp.acs.microsoft.com
timestamp-digest: SHA256
- name: Zip Windows EXE and DLLs
run: tar.exe -a -c -f artifacts/ente-${{ github.ref_name }}-windows.zip ente-${{ github.ref_name }}-windows
- name: Generate checksums
run: sha256sum artifacts/ente-* > artifacts/sha256sum-windows

32
.github/workflows/docs-lint.yml vendored Normal file
View File

@@ -0,0 +1,32 @@
name: "Lint (docs)"
on:
# Run on every pull request (open or push to it) that changes docs/
pull_request:
paths:
- "docs/**"
- ".github/workflows/docs-lint.yml"
permissions:
contents: read
jobs:
lint:
runs-on: ubuntu-latest
defaults:
run:
working-directory: docs
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup node and enable yarn caching
uses: actions/setup-node@v4
with:
node-version: 22
cache: "yarn"
cache-dependency-path: "web/yarn.lock"
- run: yarn install
- run: yarn pretty:check

View File

@@ -63,6 +63,6 @@ jobs:
with:
webhook: ${{ secrets.DISCORD_INTERNAL_RELEASE_WEBHOOK }}
nodetail: true
title: "🏆 Internal release available for Photos"
title: "🏆 Internal release Photos (Branch: ${{ github.ref_name }})"
description: "[Download](https://play.google.com/store/apps/details?id=io.ente.photos)"
color: 0x00ff00

View File

@@ -23,7 +23,7 @@ Just hang around, enjoy the vibe. Answer someone's query on our
[Discord](https://discord.gg/z2YVKkycX3), or pile on in the sporadic #off-topic
rants there. Chuckle (or wince!) at our [Twitter](https://twitter.com/enteio)
memes. Suggest a new feature in our [Github
Discussions](https://github.com/ente-io/ente/discussions/new?category=feature-requests),
Discussions](https://github.com/ente-io/ente/discussions/new?category=enhancements),
or upvote the existing ones that you feel we should focus on first. Provide your
opinion on existing threads.
@@ -68,8 +68,8 @@ best to start small. Consider some well-scoped changes, say like adding more
Each of the individual product/platform specific directories in this repository
have instructions on setting up a dev environment.
For anything beyond trivial bug fixes, please use [features requests and
discussions](https://github.com/ente-io/ente/discussions) instead of performing
For anything beyond trivial bug fixes, please use
[discussions](https://github.com/ente-io/ente/discussions) instead of performing
code changes directly.
> [!TIP]

View File

@@ -39,10 +39,23 @@
"title": "Ankama",
"slug": "ankama"
},
{
"title": "Ankara University",
"slug": "ankara_university",
"altNames": [
"Ankara Üniversitesi"
]
},
{
"title": "Anycoin Direct",
"slug": "anycoindirect"
},
{
"title": "AR24",
"altNames": [
"Docaposte AR24"
]
},
{
"title": "Aruba",
"slug": "aruba",
@@ -194,7 +207,9 @@
{
"title": "bonify",
"slug": "bonify",
"altNames": ["bonify.de"]
"altNames": [
"bonify.de"
]
},
{
"title": "Booking",
@@ -298,6 +313,15 @@
{
"title": "CSAM"
},
{
"title": "CSSBuy",
"slug": "cssbuy",
"altNames": [
"CSS Buy",
"CSS-Buy",
"cssbuy.com"
]
},
{
"title": "CSFloat"
},
@@ -441,6 +465,9 @@
"title": "Finanzfluss",
"slug": "finanzfluss"
},
{
"title": "Finary"
},
{
"title": "Firefox",
"slug": "mozilla"
@@ -455,6 +482,16 @@
"title": "FreeTaxUSA",
"slug": "freetaxusa"
},
{
"title": "FZJ",
"slug": "fzj",
"hex": "023d6b",
"altNames": [
"Forschungszentrum Jülich",
"FZJ IdP",
"iffLogin"
]
},
{
"title": "G2A"
},
@@ -462,6 +499,9 @@
"title": "Gate.io",
"slug": "gateio.svg"
},
{
"title": "GERID"
},
{
"title": "GitHub"
},
@@ -530,6 +570,14 @@
"Hugging Face"
]
},
{
"title": "IBKR",
"slug": "ibkr",
"altNames": [
"Interactive Brokers",
"IB"
]
},
{
"title": "IceDrive",
"slug": "ice_drive"
@@ -651,6 +699,10 @@
"飞书"
]
},
{
"title": "LaunchDarkly",
"hex": "858585"
},
{
"title": "Letterboxd"
},
@@ -716,8 +768,11 @@
]
},
{
"title": "Mercado Livre",
"slug": "mercado_livre",
"title": "Memed"
},
{
"title": "Mercado Libre",
"slug": "mercado_libre",
"altNames": [
"Mercado Libre",
"MercadoLibre",
@@ -743,6 +798,7 @@
{
"title": "Mistral",
"altNames": [
"Le Chat",
"Mistral AI",
"MistralAI"
]
@@ -892,6 +948,10 @@
"slug": "onshape",
"hex": "7abb5e"
},
{
"title": "Oracle Cloud",
"slug": "oracle_cloud"
},
{
"title": "Parqet",
"slug": "parqet"
@@ -992,6 +1052,14 @@
"qiniu"
]
},
{
"title": "R10.net",
"slug": "r10",
"altNames": [
"R10",
"r10.net"
]
},
{
"title": "Raindrop.io",
"slug": "raindrop_io",
@@ -1076,6 +1144,16 @@
"title": "Seafile",
"slug": "seafile"
},
{
"title": "SEI",
"altNames": [
"sei",
"sei!",
"SEI!",
"Sistema Eletrônico de Informações",
"SEI/SEDE"
]
},
{
"title": "Sendgrid"
},
@@ -1278,6 +1356,14 @@
"title": "US Mobile",
"slug": "us_mobile"
},
{
"title": "uollet",
"slug": "uollet",
"altNames": [
"UOLLET",
"uollet.com.br"
]
},
{
"title": "Vikunja"
},
@@ -1363,6 +1449,37 @@
},
{
"title": "CoinSpot"
},
{
"title": "Aternos",
"slug": "aternos"
},
{
"title": "Toshl Finance",
"slug": "toshl_finance",
"altNames": [
"Toshl"
]
},
{
"title": "Tebex",
"slug": "tebex",
"altNames": [
"tebex",
"tebex.io",
"buycraft"
]
},
{
"title": "xAI",
"slug": "xai"
},
{
"title": "Cronometer",
"slug": "cronometer"
},
{
"title": "Zitadel"
}
]
}
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -0,0 +1,6 @@
<svg width="500" height="500" viewBox="0 0 500 500" fill="#0000FF" xmlns="http://www.w3.org/2000/svg">
<path d="M139.63 306.55H125.64C123.41 306.55 121.53 306.5 119.99 306.39C118.45 306.28 117.13 305.99 116.01 305.51C114.9 305.04 113.92 304.32 113.08 303.36C112.22 302.41 111.38 301.09 110.53 299.39L103.85 286.35H35.47L25.29 306.55H0L58.37 194.11H81.26L139.63 306.55ZM93.2 265.36L69.66 218.6L46.12 265.36H93.2Z"/>
<path d="M265.23 306.55H245.67C241.96 306.55 238.93 306.07 236.6 305.12C234.27 304.16 232.31 302.68 230.72 300.67L206.17 270.76H177.48V306.55H153.95V195.23C156.92 195.12 160.16 195.04 163.66 194.99C167.17 194.93 170.77 194.86 174.5 194.75C178.21 194.64 181.92 194.57 185.64 194.51C189.36 194.46 192.86 194.43 196.15 194.43C209.74 194.43 220.97 195.41 229.84 197.37C238.71 199.34 246 202.91 251.74 208.1C258.11 214.04 261.3 222.1 261.3 232.28C261.3 237.37 260.61 241.85 259.23 245.72C257.84 249.59 255.88 252.96 253.33 255.81C250.78 258.68 247.7 261.09 244.09 263.05C240.49 265.02 236.45 266.63 231.99 267.9L265.23 306.55ZM196.25 250.25C199.75 250.25 203.27 250.22 206.82 250.17C210.38 250.12 213.74 249.88 216.93 249.45C220.1 249.03 223.02 248.36 225.67 247.46C228.32 246.55 230.5 245.24 232.19 243.54C233.67 241.94 234.82 240.29 235.61 238.59C236.4 236.89 236.81 234.7 236.81 232.03C236.81 230.23 236.45 228.47 235.77 226.77C235.08 225.06 234.15 223.62 232.99 222.45C231.4 220.85 229.44 219.6 227.11 218.7C224.77 217.79 222.1 217.12 219.07 216.7C216.05 216.27 212.63 216.03 208.81 215.98C205 215.93 200.81 215.9 196.25 215.9H187.18C183.58 215.9 180.34 215.95 177.48 216.06V250.1C180.34 250.2 183.58 250.25 187.18 250.25H196.25Z"/>
<path d="M324.59 213.35C318.34 213.35 312.61 215.03 307.41 218.37C302.22 221.7 297.93 225.65 294.54 230.22L276.09 217.97C282.13 210.65 289.36 204.66 297.79 200C306.22 195.33 315.47 193 325.55 193C332.33 193 338.53 193.87 344.15 195.62C349.77 197.37 354.59 199.84 358.63 203.02C362.65 206.2 365.78 210.07 368.01 214.63C370.23 219.19 371.35 224.27 371.35 229.89C371.35 235.2 370.36 239.86 368.4 243.89C366.44 247.92 363.85 251.6 360.61 254.94C357.38 258.28 353.69 261.38 349.56 264.25C345.42 267.11 341.18 269.97 336.84 272.84L317.27 285.72H370.87V306.55H279.42V286.04L318.39 260.27C322.2 257.73 325.86 255.32 329.36 253.03C332.86 250.76 335.93 248.42 338.58 246.04C341.24 243.65 343.35 241.13 344.95 238.48C346.54 235.83 347.33 232.91 347.33 229.74C347.33 227.41 346.72 225.23 345.5 223.22C344.28 221.2 342.64 219.45 340.57 217.97C338.51 216.49 336.09 215.35 333.34 214.55C330.58 213.75 327.66 213.35 324.59 213.35Z"/>
<path d="M457.22 306.55V283.49H388.84V259.95L455.47 195.23H480.12V263.77H500V283.49H480.12V306.55L457.22 306.55ZM413.17 263.77H457.22V220.35L413.17 263.77Z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" xml:space="preserve"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300mm" height="300mm" viewBox="0 0 16000 16000" preserveAspectRatio="xMidYMid meet">
<g>
<path fill="#2b87d3" d="M0 8000 l0 -8000 8000 0 8000 0 0 8000 0 8000 -8000 0 -8000 0 0 -8000z m13990 0 l0 -5990 -5990 0 -5990 0 0 5990 0 5990 5990 0 5990 0 0 -5990z"/>
<path fill="#2b87d3" d="M2995 12998 c-3 -7 -4 -911 -3 -2008 l3 -1995 1005 0 1005 0 3 997 2 998 998 2 997 3 0 1005 0 1005 -2003 3 c-1597 2 -2004 0 -2007 -10z"/>
<path fill="#2b87d3" d="M8995 12998 c-3 -7 -4 -461 -3 -1008 l3 -995 997 -3 998 -2 2 -998 3 -997 1005 0 1005 0 0 2005 0 2005 -2003 3 c-1597 2 -2004 0 -2007 -10z"/>
<path fill="#2b87d3" d="M5995 9998 c-3 -7 -4 -911 -3 -2008 l3 -1995 2005 0 2005 0 0 2005 0 2005 -2003 3 c-1597 2 -2004 0 -2007 -10z"/>
<path fill="#2b87d3" d="M2995 6998 c-3 -7 -4 -911 -3 -2008 l3 -1995 2005 0 2005 0 0 1005 0 1005 -997 3 -998 2 -2 998 -3 997 -1003 3 c-797 2 -1004 0 -1007 -10z"/>
<path fill="#2b87d3" d="M10997 7003 c-4 -3 -7 -453 -7 -1000 l0 -993 -997 -2 -998 -3 0 -1005 0 -1005 2005 0 2005 0 0 2005 0 2005 -1001 3 c-550 1 -1004 -1 -1007 -5z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="107.51429"
height="102.75398"
viewBox="0 0 107.51429 102.75398"
fill="none"
version="1.1"
id="svg12"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs12" />
<g
id="g12"
transform="translate(34.950067,-215.99315)">
<path
d="m 57.85843,271.77769 c -0.774,-0.1257 -1.5665,0.0595 -2.2048,0.5152 -0.6382,0.4557 -1.0704,1.145 -1.2028,1.9179 -0.1447,0.8786 -0.3109,1.7775 -0.496,2.6697 -1.7799,8.5172 -5.1174,16.6325 -9.8446,23.9376 -5.0162,7.5169 -10.8489,12.0047 -15.6015,12.0047 -2.2725,0.0492 -4.5367,-0.2938 -6.6926,-1.0138 -5.6912,-1.775 -11.7884,-1.7717 -17.4777,0.009 -2.1479,0.7139 -4.4023,1.0536 -6.6652,1.0044 -4.7486,0 -10.58,-4.4851 -15.5963,-11.9979 -4.727,-7.3046 -8.0652,-15.4188 -9.84715,-23.935 -1.97756,-9.485 -1.60717,-17.8346 1.06924,-24.1485 1.09829,-2.7795 2.74951,-5.307 4.85381,-7.4292 2.1042,-2.1223 4.6176,-3.7952 7.3876,-4.9171 2.77,-1.122 5.7387,-1.6698 8.7268,-1.6101 2.988,0.0597 5.9328,0.7255 8.6558,1.9572 l 0.1663,0.0635 c 3.1372,1.3741 6.5201,2.0997 9.9449,2.1331 h 0.127 c 3.4272,-0.0346 6.8117,-0.763 9.9498,-2.1412 l 0.1502,-0.0581 c 2.981,-1.3116 6.2053,-1.979 9.462,-1.9586 1.8593,0.0219 3.7051,0.317 5.4785,0.8759 1.02,0.3144 2.0172,0.6982 2.9846,1.1489 0.7121,0.333 1.5269,0.3705 2.2665,0.1042 0.7397,-0.2662 1.3439,-0.8144 1.6805,-1.5248 0.1645,-0.3511 0.2583,-0.7312 0.2755,-1.1185 0.0172,-0.3873 -0.0421,-0.7742 -0.1749,-1.1385 -0.1328,-0.3643 -0.3362,-0.6987 -0.5986,-0.9841 -0.2625,-0.2854 -0.5788,-0.5161 -0.9307,-0.6789 -1.2159,-0.5667 -2.4693,-1.0495 -3.7512,-1.445 -2.3402,-0.7366 -4.7769,-1.1202 -7.2302,-1.1381 -3.9898,-0.0245 -7.9413,0.7777 -11.6058,2.356 l -0.1514,0.0581 c -1.5551,0.6563 -3.1723,1.1544 -4.8271,1.4869 -0.2018,-1.6639 -0.5606,-3.305 -1.0719,-4.9013 11.4383,-2.0749 11.0342,-15.88816 11.0342,-15.88816 -9.3133,1.40309 -13.3294,4.93919 -14.9623,8.33877 -1.5519,-2.01717 -3.4478,-3.74459 -5.6002,-5.10275 -0.3906,-0.24958 -0.8265,-0.41979 -1.2828,-0.50093 -0.4563,-0.0811 -0.9238,-0.0716 -1.3765,0.0281 -0.4526,0.0997 -0.8812,0.28749 -1.2613,0.55278 -0.38,0.26529 -0.7041,0.60283 -0.9537,0.99335 -0.2496,0.39052 -0.4198,0.82638 -0.5009,1.28269 -0.0812,0.45631 -0.0717,0.92412 0.028,1.37675 0.0997,0.45262 0.2875,0.88118 0.5528,1.2612 0.2653,0.38003 0.6028,0.70409 0.9933,0.95367 1.9269,1.29176 3.5632,2.97116 4.8046,4.93076 1.2415,1.9597 2.0607,4.1567 2.4055,6.4507 -1.2634,-0.3369 -2.5038,-0.7536 -3.7143,-1.2476 l -0.1759,-0.0676 c -3.6617,-1.5742 -7.6092,-2.3745 -11.5949,-2.3506 -9.0309,0 -20.73562,6.0327 -25.63155,17.5723 -3.97541,9.3756 -2.962867,20.2042 -1.41244,27.6387 1.94038,9.2532 5.57254,18.0686 10.71379,26.003 6.3017,9.4378 13.5982,14.6369 20.5461,14.6369 2.8438,0.049 5.6759,-0.375 8.3806,-1.255 4.5889,-1.454 9.515,-1.454 14.1039,0 2.6964,0.878 5.5198,1.3 8.3549,1.251 6.8478,0 14.3376,-5.3384 20.5461,-14.645 5.1404,-7.9344 8.7713,-16.75 10.7098,-26.0031 0.2041,-0.9746 0.3851,-1.9559 0.5406,-2.917 0.062,-0.3835 0.0481,-0.7755 -0.0416,-1.1535 -0.0897,-0.3779 -0.2534,-0.7345 -0.4812,-1.0492 -0.2278,-0.3147 -0.5154,-0.5813 -0.8464,-0.7846 -0.3311,-0.2033 -0.6991,-0.3393 -1.0828,-0.4001"
fill="#ff6733"
id="path11" />
<path
d="m 71.33493,256.39499 v 0.0121 l -8.2649,-5.8475 -0.4271,-0.2298 0.0512,-0.5177 0.2393,-10.0798 h 0.0095 c 0.0046,-0.5208 -0.1263,-1.0339 -0.3802,-1.4887 -0.2538,-0.4548 -0.6219,-0.8357 -1.0675,-1.1053 -0.4471,-0.2723 -0.9569,-0.4242 -1.4801,-0.441 -0.5233,-0.0169 -1.0422,0.102 -1.5059,0.3451 l -8.7538,4.3593 c -1.2619,0.6789 -2.3372,1.6578 -3.1318,2.8502 -0.7946,1.1925 -1.2839,2.5621 -1.4247,3.9881 l -0.7408,7.7913 -6.3059,3.3658 c -2.4638,-3.7027 -5.7171,-6.8136 -9.5264,-9.1092 -3.8093,-2.2956 -8.0799,-3.7189 -12.5047,-4.1675 -4.4249,-0.4486 -8.894,0.0886 -13.0866,1.573 -4.1925,1.4843 -8.0041,3.879 -11.1609,7.0119 -2.7859,2.7623 -4.9974,6.0489 -6.5065,9.6702 -1.509,3.6213 -2.286,7.5057 -2.286,11.4288 0,3.9232 0.777,7.8075 2.286,11.4288 1.5091,3.6214 3.7206,6.908 6.5065,9.6702 4.197,4.1711 9.5317,7.0104 15.3356,8.1623 5.8039,1.1518 11.8188,0.5648 17.2905,-1.6873 5.4718,-2.2522 10.157,-6.0694 13.4684,-10.9731 3.3114,-4.9037 5.1017,-10.6758 5.1465,-16.5928 0.0013,-3.8327 -0.7435,-7.6291 -2.1926,-11.1774 l 6.2181,-3.3117 -0.0109,0.0311 6.7206,4.0741 c 1.2315,0.7427 2.6257,1.1736 4.0615,1.2554 1.4357,0.0817 2.8695,-0.1882 4.1772,-0.7863 l 8.7534,-4.3593 c 0.472,-0.2216 0.877,-0.5622 1.177,-0.9882 0.3,-0.426 0.483,-0.9228 0.532,-1.4413 0.049,-0.5185 -0.038,-1.0409 -0.252,-1.5156 -0.214,-0.4747 -0.548,-0.8853 -0.97,-1.1915 m -34.1485,19.4107 c -0.0347,4.7475 -1.47,9.3791 -4.1262,13.3141 -2.6561,3.9351 -6.4148,6.9984 -10.8048,8.806 -4.39,1.8076 -9.2158,2.2789 -13.8727,1.355 -4.6568,-0.924 -8.9373,-3.2021 -12.3047,-6.5488 -2.2347,-2.2161 -4.0086,-4.8527 -5.2191,-7.7579 -1.2105,-2.9051 -1.8335,-6.0211 -1.8335,-9.1684 0,-3.1472 0.623,-6.2632 1.8335,-9.1684 1.2105,-2.9051 2.9844,-5.5417 5.2191,-7.7578 2.5007,-2.4815 5.514,-4.3861 8.8284,-5.5801 3.3145,-1.194 6.85,-1.6486 10.3587,-1.3319 3.5087,0.3167 6.9057,1.397 9.9528,3.1652 3.0471,1.7682 5.6703,4.1815 7.6862,7.0707 l -8.1614,4.3552 c -1.3138,-1.6306 -2.9557,-2.9671 -4.8188,-3.9229 -1.8632,-0.9559 -3.9062,-1.5098 -5.997,-1.6259 -2.0908,-0.1161 -4.1826,0.2082 -6.1401,0.952 -1.9576,0.7437 -3.7372,1.8903 -5.2234,3.3654 -1.3826,1.3719 -2.4797,3.0038 -3.2285,4.8018 -0.7489,1.798 -1.1343,3.7264 -1.1343,5.674 0,1.9477 0.3854,3.8761 1.1343,5.6741 0.7488,1.7979 1.8459,3.4299 3.2285,4.8018 2.317,2.3457 5.3482,3.8548 8.6165,4.2898 3.2684,0.4351 6.5886,-0.2286 9.4386,-1.8865 2.85,-1.6579 5.0682,-4.2161 6.3055,-7.2723 1.2374,-3.0562 1.4238,-6.437 0.53,-9.6107 l 8.2064,-4.3687 c 1.0104,2.6766 1.5273,5.5142 1.526,8.3752 z m -26.0801,1.2734 c 0.3553,0.6991 0.9725,1.2295 1.7171,1.4759 0.7445,0.2463 1.5564,0.1885 2.2586,-0.1607 l 6.9193,-3.6848 c 0.2696,2.1001 -0.213,4.2278 -1.3623,6.006 -1.1493,1.7782 -2.891,3.0921 -4.9165,3.7087 -2.0255,0.6167 -4.2042,0.4963 -6.1494,-0.3399 -1.9452,-0.8361 -3.5316,-2.334 -4.4779,-4.228 -0.9463,-1.8941 -1.1912,-4.0621 -0.6917,-6.1196 0.4995,-2.0576 1.7111,-3.8718 3.4205,-5.1212 1.7094,-1.2494 3.806,-1.8532 5.9181,-1.7044 2.1121,0.1487 4.1034,1.0405 5.6207,2.5172 l -6.9345,3.6997 c -0.3472,0.1714 -0.6571,0.4099 -0.9118,0.7018 -0.2546,0.2918 -0.449,0.6311 -0.5719,0.9984 -0.1229,0.3673 -0.172,0.7553 -0.1442,1.1416 0.0278,0.3863 0.1317,0.7633 0.3059,1.1093 z m 39.7718,-27.0764 c 0.219,-1.157 0.3879,-2.1708 1.4557,-2.7467 l 4.5109,-2.2438 -0.6085,5.5191 -5.7029,2.8386 z m 8.0467,10.3339 c -0.5151,0.173 -1.0642,0.2192 -1.6009,0.1347 -0.5367,-0.0845 -1.0453,-0.2971 -1.4824,-0.6199 l -2.9222,-1.7424 5.7042,-2.8386 4.8109,2.8224 z"
fill="#ff6733"
id="path12" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@@ -0,0 +1,9 @@
<svg width="145" height="39" viewBox="0 0 145 39" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect width="145" height="39" fill="url(#pattern0_2030_2)"/>
<defs>
<pattern id="pattern0_2030_2" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0_2030_2" transform="scale(0.00689655 0.025641)"/>
</pattern>
<image id="image0_2030_2" width="145" height="39" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAAAnCAMAAAA4lVp5AAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAERUExURQAAAGy8Kmy8Kmy9Kmy8Km28KWy9Km2/Lmy8Kmu8Kmu8Kmy8KWy7KGy9Kmu9KWu8Km27K3C/KGy8Kmy8KW29K2y8Kmy8K3C/MGy9Kmy7LGy8KWu8LGy7Kmy9KnDCKWy8KWy7Km28Kmy7Kmy8Kmu5Km29Km26KGq6Kmu8Kmy9Kmu7Kmy8Kmy8Kmy8Kmy8Kmy8Km69KWy9K2u8KoC/IG28Km27Kmy7Kmy5K2y8Km2+LGi3KGq6Kmu8KWy9Kmq8K2y6Kmy7Kmy8Kn7ERazZh9ruyv///+Py177ioYjJUpHNX+335LXdlHXAN9HqvKPVecjmr5rRbfb78qPVerbeldvuyuTz2O335cjmsK3ZiNHqvb/iok0+o7UAAABBdFJOUwD359fHm1UcxmbMv0B/cN+PIKOgj9CQEMBA8EyA1BlQkrDb4DdgPzCkyE/v7c+2r12QnwjDMeJC9VIgYFiXSGh4PBaO/QAAAAFiS0dERY6zqFcAAAAHdElNRQfpBR8TLQ+T8HIEAAAAAW9yTlQBz6J3mgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNS0wNS0zMVQxOTo0NToxNSswMDowMFaVqvwAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjUtMDUtMzFUMTk6NDU6MTUrMDA6MDAnyBJAAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDI1LTA1LTMxVDE5OjQ1OjE1KzAwOjAwcN0znwAAAFplWElmTU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAAAAABIAAAAAQAAAEgAAAABH1L3NAAABF9JREFUWMPNV3lf2kAQpbWXUlFKOUJpFSnQ1tqD3tYeGxIgEJRww/f/IN3ZczYE/QlqnT8kzmY3L++9md3EyEpx5+7GvfsPHsauI1ZDJOLR5m1DRMjW1WNaExEh8ce3DREh2xHLJuTgTnw3eeOIyJPFZVMXQb5eROTpwrJpYzyzFiK77jhuw2m2UM5rOm3H6dgq4de7NNM9XcZCluZyFo1EJg/jlxEujOfMleFIAL4jU02R6QUi0Za4n5mrWjSVEOCArsLKiPouioA/zm/o1Fn4LnEPef7CWLVAU5a43gO+VkU0cI0IfEgyhoLhkKX6oCG7Gg3HjCUxdd9YtUgzhoIrIuLvPun5xO4zXSY02YKLKQg6ohdDejEDPMDNFIZ6fO6BsWqJkDRGdBlrYw8BisAT5oHnuzbnbcjHIUN/4YffNaFXAzH7JVo0iUGU6T9l7q5KRVq8WqlUeKaip0EyixHB+q4qsZYQaaafOpsNemJAOHw4mUr/43LbUyAoRTuE5Dkgmt0T2RxXsojrEMZLGJHvojeG54/mAG8OZYe19TVHOF6FjF0VgOIKRwI9XtRfWdckkxrKwXQR97IRzCxdG2WYuKfh+14jRJQBUoF4s3uo6SpKsqg+AibIW0SvkTF8NBNWDoXPe8+ZZoVXZLtuon+7rIBLluZAPr0s6UqrokxyzfDkoSjucMjuo3jipl/gCTkUp4+kUFmiO2VK0pUhsnHl5JUphkeiIAVmNyT+zGiYC4jK5vyytrukKy3pqgqp2BxengdqorsMEfEHHFOg3OTxfunOIxHBi2f5Awt5haOgssrYNOj4ERBI/Zbno+8MRD0SHf507Jo281ivcO0oRJSBEi7puJQljZKW0g8cBT+iM+wbPkLv3AG+Wp1uY6DNQ7eMetMJkL+mUYiItjD3h2QjJXIJTRdvXRaa8kCtODeqvwfVxMpqrhLQGOGvuGlk9q8YpkVv9tK74BjZeoqaxCzDUlKa8YzQAXu1FbDNo6f3UoFoqIlpLEGUQBbWNVRG2ZKmC8YPC1ozGu/VkiNd452A7yi+RglHgJlg0lNv0ItAlML/gGVJyNiYLnki1zLHPqglW+IU5ogDEVDB/Ntudjptsc3ZvDd16uxoN46qNbzxM3hFiaiqRNMkJtlkpRnER7WmcV7j/vHHKMNKbYrvaUUgAh9ITbI1Ip9eIOoIYNYBbGdIMxqfPqtF1WmVKiP0kA0aAPkh3IHRLLCxa2xT266BZAIepA+rUiZNIrN+MWbEl6+67ww4gNFAb1p9npqp7mlPGHHjgbmxyeUKxIwU5mLniCf1oZL1xvCXwbfvaAHf87zwCaDlhZo5vckO3aMQ5YxsSelRzUuIOYyoiG2u4scOWT/kYnmVSedS2B9J9lmZ3othRMu+C45rV4fovLCskD6RmvH4uXUTiBYiWjMRm2tiWgXQRd9yJ782bhbROZqpOP598ufv9kqxAqLMeZr9j7DI5b52rz3gS05udbc5/gHZ/BLSJh/eDgAAAABJRU5ErkJggg=="/>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -0,0 +1,3 @@
<svg width="500" height="500" viewBox="0 0 500 500" fill="#F1C086" xmlns="http://www.w3.org/2000/svg">
<path d="M166.67 62C74.62 62 0 136.62 0 228.67H333.33C425.38 228.67 500 154.05 500 62H166.67ZM166.67 270.33C74.62 270.33 0 344.95 0 437H154.76C246.81 437 321.43 362.38 321.43 270.33H166.67Z"/>
</svg>

After

Width:  |  Height:  |  Size: 302 B

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg width="21.087mm" height="21.735mm" version="1.1" viewBox="0 0 21.087 21.735" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(34.396 -25.136)">
<path d="m-26.575 34.404 3.5438-9.2136c-0.38165-0.0363-0.76329-0.0545-1.1631-0.0545-1.9082 0-3.7983 0.49067-5.452 1.4538-1.6538 0.96316-3.035 2.3261-3.9982 3.998-0.09087 0.14538-0.16356 0.30893-0.25443 0.47249v0.0545l-0.14538 0.39981c-1.0904 2.7804 0.56337 4.834 2.1626 5.4337 0.45433 0.16355 0.92685 0.25441 1.3994 0.25441 0.72694 0 1.4175-0.18172 2.0536-0.54517 0.6179-0.36347 1.1449-0.8723 1.5084-1.4902 0.14539-0.23624 0.25443-0.49067 0.34529-0.76326m6.4334 2.3625c-2.1081 5.5246-7.2149 7.5962-11.885 6.7966 0.70877 0.72692 1.5084 1.3448 2.3807 1.8536 1.6538 0.96316 3.5257 1.4538 5.452 1.4538 1.9082 0 3.7619-0.49067 5.4339-1.4538 1.6538-0.96316 3.035-2.3261 3.9982-3.9798 0.94502-1.6537 1.4539-3.5437 1.4539-5.4337 0-1.9082-0.50886-3.8163-1.4539-5.4518-0.5452-0.94499-1.1994-1.7628-1.9809-2.4897l-3.3984 8.7048" fill="#023d6b" fill-rule="evenodd" stroke-width=".26458"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generator: https://ezgif.com/png-to-svg -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="195" height="195">
<path d="M0,0 L44,0 L70,2 L94,6 L98,8 L98,39 L95,75 L91,98 L85,114 L76,131 L65,145 L58,153 L55,154 L55,144 L51,131 L42,121 L38,118 L38,98 L34,98 L33,29 L28,27 L26,26 L26,89 L22,89 L22,25 L20,25 L20,89 L13,89 L12,29 L11,30 L11,98 L6,98 L6,118 L-3,125 L-9,135 L-11,143 L-11,154 L-15,152 L-25,141 L-35,126 L-43,110 L-48,95 L-52,69 L-54,44 L-55,8 L-50,6 L-26,2 Z " fill="#046097" transform="translate(75,8)"/>
<path d="M0,0 L44,0 L70,2 L94,6 L98,8 L98,39 L95,75 L91,98 L85,114 L76,131 L65,145 L58,153 L55,154 L55,144 L51,131 L42,121 L38,118 L38,98 L34,98 L33,29 L28,27 L26,26 L26,89 L22,89 L22,25 L20,24 L22,24 L22,1 L0,1 Z " fill="#0495C0" transform="translate(75,8)"/>
<path d="M0,0 L8,0 L13,3 L15,7 L15,15 L6,21 L0,20 L-7,16 L-8,10 L-5,3 Z " fill="#0A669B" transform="translate(93,165)"/>
<path d="M0,0 L6,1 L10,5 L11,7 L11,15 L2,21 L-2,20 L0,20 Z " fill="#0D99C1" transform="translate(97,165)"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" width="775" height="1511" version="1.2">
<defs>
<linearGradient id="a" x1="667.4" x2="-.7" y1="1142.8" y2="1142.8"
gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#d81222" />
<stop offset="1" stop-color="#960b1a" />
</linearGradient>
</defs>
<path d="M.3 1510.2V775.3l668 734.9z" style="fill:url(#a)" />
<path fill="#d81222"
d="M574.2 1154.6c-110.5 0-199.9-89.5-199.9-200.2 0-110.8 89.4-200.3 199.9-200.3 110.6 0 200 89.5 200 200.3 0 110.7-89.4 200.2-200 200.2M668.3.4.3 1510.2V775.3z" />
</svg>

After

Width:  |  Height:  |  Size: 624 B

View File

@@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 216 214.94"><path d="M109.8,214.94a4.87,4.87,0,0,1-4.26-2.66,4.5,4.5,0,0,1,.44-4.82l50.49-69.53L68,174.11a4.61,4.61,0,0,1-1.9.41,4.77,4.77,0,0,1-4.52-3.4,4.57,4.57,0,0,1,2-5.21L141.33,120,4.41,112.13a4.69,4.69,0,0,1,0-9.36l137-7.87L63.61,49a4.56,4.56,0,0,1-1.94-5.2,4.74,4.74,0,0,1,4.51-3.4,4.6,4.6,0,0,1,1.9.4L156.5,77,106,7.48a4.56,4.56,0,0,1-.44-4.83A4.84,4.84,0,0,1,109.84,0a4.59,4.59,0,0,1,3.28,1.41L213.77,102.05a7.65,7.65,0,0,1,0,10.8L113.08,213.53A4.59,4.59,0,0,1,109.8,214.94Z"/></svg>

After

Width:  |  Height:  |  Size: 580 B

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="129.55565mm"
height="129.41467mm"
viewBox="0 0 129.55565 129.41467"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:export-filename="memed2.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
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="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#ec9000"
inkscape:document-units="mm"><inkscape:page
x="0"
y="0"
width="129.55565"
height="129.41467"
id="page2"
margin="0"
bleed="0" /></sodipodi:namedview><defs
id="defs1" /><g
inkscape:label="Camada 1"
inkscape:groupmode="layer"
id="layer1"
transform="matrix(1.6834732,0,0,1.6834732,47.649925,-205.86142)"><path
style="fill:#f5f2f5;fill-opacity:1;stroke:none;stroke-width:1.64472;stroke-opacity:0.216306"
d="m -229.63928,666.3282 c -1.80919,-0.13135 -3.05972,0.10695 -3.33899,-0.0739 -0.8201,-0.53107 -3.56255,-6.29326 -5.5356,-10.78298 -5.66304,-12.88636 -9.6848,-29.27567 -10.13326,-42.53094 -0.19655,-5.80951 0.10184,-7.61979 0.87562,-12.19698 1.5552,-9.19979 3.41577,-14.15687 8.37613,-20.05013 4.44031,-5.2754 13.12164,-10.82873 19.15739,-12.38511 4.40045,-1.1347 11.49057,-1.83141 19.07025,-1.58315 10.46549,0.34277 15.53289,2.0447 23.98486,6.0306 8.4934,4.00545 8.5476,4.69447 17.19355,12.68346 l 9.17947,8.48198 1.73483,-3.36021 c 5.30229,-10.27007 13.54153,-11.35636 20.42059,-15.3818 9.98116,-5.84072 20.33566,-8.65915 31.655487,-8.65915 20.40721,0 35.175223,9.03215 40.949411,24.9899 2.680505,7.40793 3.691311,17.03863 2.871769,25.62379 -1.523031,15.95462 -6.502251,33.73112 -13.14355,45.38711 l -2.092079,3.67176 -9.091661,0.0949 c -10.759893,0.11232 -14.787739,0.55882 -14.782316,-0.39427 0.0037,-0.6492 2.126398,-5.62719 6.614865,-15.48568 6.460624,-14.19017 9.107566,-24.18606 9.458064,-38.19534 0.310181,-12.39792 -0.54619,-15.46077 -5.720525,-20.65311 -4.842652,-4.8595 -9.652569,-6.74545 -17.203292,-6.31247 -6.931853,0.39749 -14.431373,3.39042 -20.210693,8.03964 -8.08359,6.50292 -18.16141,19.27599 -24.59806,30.53119 -6.58062,11.50695 -5.26814,12.2378 -6.49554,11.46026 -0.4565,-0.28918 -3.06129,-4.8228 -4.93182,-8.21504 -8.50061,-15.416 -17.38274,-26.70868 -26.57306,-33.49026 -3.97121,-2.93037 -10.51147,-6.3019 -14.41859,-7.35191 -3.7439,-1.00615 -11.45838,-0.93722 -14.80652,0.0702 -6.9037,2.07788 -11.28665,6.76825 -13.35945,14.26878 -0.92563,3.34947 -1.3257,12.28307 -0.72975,18.04782 1.25223,12.1133 4.66457,22.59592 12.97979,39.84761 2.77157,5.7502 4.31011,7.49886 3.74297,7.73574 -0.79147,0.33057 -9.85373,0.57929 -14.57149,0.23675 z"
id="path8"
sodipodi:nodetypes="cssssssssscsssssscsssssssssssscsssscc"
transform="matrix(0.26458333,0,0,0.26458333,50.096465,-2.4191315)" /><path
style="display:inline;fill:#6262f5"
d="m 4.4956948,198.76332 c -3.30706,-0.44247 -8.3326,-1.84639 -9.73079,-2.71836 -0.32338,-0.20168 -0.90706,-0.44056 -1.29707,-0.53085 -0.39,-0.0903 -0.87471,-0.32978 -1.07713,-0.5322 -0.20241,-0.20241 -0.9589,-0.66744 -1.68108,-1.0334 -4.5630398,-2.31227 -11.4938598,-9.24939 -13.7898298,-13.80238 -0.3694,-0.73252 -0.7455,-1.39139 -0.83579,-1.46415 -0.0903,-0.0728 -0.29661,-0.42994 -0.4585,-0.79375 -0.16189,-0.3638 -0.55469,-1.22236 -0.87289,-1.90791 -1.88451,-4.06016 -3.16441,-10.69837 -3.05006,-15.81917 0.11739,-5.25717 1.3037,-10.99832 3.05006,-14.76084 0.3182,-0.68555 0.711,-1.54411 0.87289,-1.90791 0.16189,-0.3638 0.36821,-0.72099 0.4585,-0.79375 0.0903,-0.0728 0.46639,-0.73162 0.83579,-1.46414 2.26147,-4.48457 8.57756,-10.84773 13.5529798,-13.65397 1.01864,-0.57454 2.03068,-1.15388 2.24896,-1.28742 2.24204,-1.37166 8.36495,-3.26099 12.03854,-3.71469 2.47599,-0.3058 8.3413402,-0.40086 9.5250002,-0.15438 0.29104,0.0606 1.3626,0.20579 2.38125,0.32263 2.01526,0.23115 1.93948,0.21791 2.51354,0.43921 1.02205,0.39401 3.03969,0.99193 3.34719,0.99193 0.18838,0 0.97085,0.2881 1.73881,0.64022 0.76796,0.35212 1.93207,0.88513 2.58692,1.18446 0.65484,0.29934 1.54791,0.75538 1.98458,1.01343 0.43668,0.25805 1.38918,0.81695 2.11667,1.242 1.79243,1.04728 3.18453,2.21035 6.20039,5.1803 2.79182,2.74933 4.23282,4.45383 5.48018,6.48229 3.17204,5.1584 5.07219,10.30587 5.66481,15.34584 0.55918,4.7556 0.47529,7.60255 -0.40153,13.62604 -0.18126,1.24527 -1.56492,5.54247 -2.28224,7.08792 -0.3182,0.68555 -0.71099,1.54411 -0.87288,1.90791 -0.16189,0.36381 -0.36822,0.72099 -0.45851,0.79375 -0.0903,0.0728 -0.46639,0.73163 -0.83578,1.46415 -2.30965,4.5801 -9.11275,11.36702 -13.94307,13.9099 -0.8041,0.42331 -1.64059,0.88054 -1.85887,1.01607 -1.11841,0.6944 -4.14314,1.88062 -6.61459,2.59408 -5.20986,1.50399 -10.74885,1.87148 -16.5364502,1.09714 z m -9.6573,-24.95559 c 0,-0.0615 -0.57847,-1.28185 -1.28549,-2.71198 -2.18367,-4.41702 -3.20781,-8.24456 -3.20895,-11.99293 -0.001,-4.42964 2.01227,-6.72114 5.88783,-6.70038 4.47803005,0.024 9.21844,4.21886 13.02766,11.52839 0.43587,0.8364 0.8697302,1.52101 0.9641202,1.52136 0.0944,3.4e-4 0.55697,-0.74351 1.02794,-1.65302 2.22999,-4.30635 6.18881,-8.96011 8.72108,-10.25198 3.33434,-1.70105 6.32476,-1.57437 8.3288,0.35282 1.52052,1.46222 1.82726,2.64731 1.65484,6.39343 -0.15794,3.4314 -1.07983,6.63419 -3.10868,10.8001 -0.86224,1.77047 -1.16282,2.63732 -0.94364,2.72142 0.1769,0.0679 1.62162,0.0894 3.21049,0.0478 l 2.88886,-0.0756 0.64276,-1.1663 c 2.06367,-3.7446 3.65793,-10.57405 3.37181,-14.44411 -0.4585,-6.20174 -3.63562,-9.71814 -9.48799,-10.50118 -5.6749,-0.75929 -11.4014,1.60585 -15.29697,6.31791 -0.50399,0.60962 -0.97587,1.1084 -1.04863,1.1084 -0.0728,0 -0.5490102,-0.5047 -1.0583402,-1.12155 -2.23259,-2.70394 -5.45587,-4.88484 -8.73124995,-5.90763 -1.99626005,-0.62336 -6.74195005,-0.63537 -8.73812005,-0.0221 -1.9981998,0.61389 -4.1480898,2.17983 -5.3452198,3.89337 -1.1067,1.58409 -1.39833,2.42025 -1.82847,5.24242 -0.55493,3.64096 0.82065,10.37308 3.01361,14.7487 0.43759,0.87312 0.92909,1.67497 1.09223,1.78189 0.30781,0.20173 6.2497198,0.288 6.2497198,0.0907 z"
id="path1"
sodipodi:nodetypes="ssssssssssssscssssssssssssssssssssssscscssscsssssccsssssssssssscc" /></g></svg>

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@@ -1,15 +1,7 @@
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
<g style="mix-blend-mode:difference">
<path fill-rule="evenodd" clip-rule="evenodd" d="M363.636 23H409.091V477.545H363.636V23ZM0 23H45.4545V477.545H0V23ZM227.273 295.727H181.818V386.636H227.273V295.727ZM272.727 113.909H318.182V204.818H272.727V113.909Z" fill="white"/>
</g>
<path d="M136.364 386.636H45.4545V477.545H136.364V386.636Z" fill="#EA3326"/>
<path d="M500 386.636H409.091V477.545H500V386.636Z" fill="#EA3326"/>
<path d="M136.364 295.727H45.4545V386.636H136.364V295.727Z" fill="#EB5829"/>
<path d="M318.182 295.727H227.273V386.636H318.182V295.727Z" fill="#EB5829"/>
<path d="M500 295.727H409.091V386.636H500V295.727Z" fill="#EB5829"/>
<path d="M136.364 23H45.4545V113.909H136.364V23Z" fill="#F7D046"/>
<path d="M500 23H409.091V113.909H500V23Z" fill="#F7D046"/>
<path d="M227.273 113.909H45.4545V204.818H227.273V113.909Z" fill="#F2A73B"/>
<path d="M500 113.909H318.182V204.818H500V113.909Z" fill="#F2A73B"/>
<path d="M500 204.818H45.4545V295.727H500V204.818Z" fill="#EE792F"/>
</svg>
<svg width="500" height="500" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg">
<path d="M71.41 73H142.83V143.75H71.41V73ZM357.12 73H428.54V143.75H357.12V73Z" fill="#FFD800"/>
<path d="M71.41 143.75H214.25V214.5H71.41V143.75ZM285.7 143.75H428.54V214.5H285.7V143.75Z" fill="#FFAF00"/>
<path d="M71.41 214.5H428.54V285.25H71.41V214.5Z" fill="#FF8205"/>
<path d="M71.41 285.27H142.83V356.02H71.41V285.27ZM214.27 285.27H285.69V356.02H214.27V285.27ZM357.12 285.27H428.54V356.02H357.12V285.27Z" fill="#FA500F"/>
<path d="M0 356.06H214.3V426.82H0V356.06ZM285.7 356.06H500V426.82H285.7V356.06Z" fill="#E10500"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 628 B

View File

@@ -0,0 +1 @@
<svg height="2100" viewBox="0 0 32 21" width="3200" xmlns="http://www.w3.org/2000/svg"><path d="m9.9 20.1c-5.5 0-9.9-4.4-9.9-9.9s4.4-9.9 9.9-9.9h11.6c5.5 0 9.9 4.4 9.9 9.9s-4.4 9.9-9.9 9.9zm11.3-3.5c3.6 0 6.4-2.9 6.4-6.4 0-3.6-2.9-6.4-6.4-6.4h-11c-3.6 0-6.4 2.9-6.4 6.4s2.9 6.4 6.4 6.4z" fill="#c74634"/></svg>

After

Width:  |  Height:  |  Size: 310 B

View File

@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 280.6 100" style="enable-background:new 0 0 280.6 100;" xml:space="preserve">
<style type="text/css">
.st0{enable-background:new ;}
.st1{fill:#FFFFFF;}
.st2{fill:#3F4257;}
.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#3F4257;}
.st4{fill-rule:evenodd;clip-rule:evenodd;fill:#EA4335;}
.st5{fill:#EA4335;}
.st6{fill:#FBBC05;}
.st7{fill:#4285F4;}
.st8{fill:#34A853;}
</style>
<g>
<g class="st0">
<path class="st1" d="M114.5,57.9h-6.3L97.9,46.2h-7.2v11.7h-5.4V24.1c5.3,0,10.5,0,15.8,0c7.8,0,12,5.4,12,11
c0,4.8-2.5,9.5-9.2,10.5L114,57L114.5,57.9z M90.7,29.1v12.2H101c4.5,0,6.5-2.8,6.5-6c0-3-2-6.2-6.4-6.2H90.7z"/>
<polygon class="st1" points="124.5,57.9 129.9,57.9 129.9,24.2 118.7,27.7 118.7,32.4 124.5,30.8 "/>
<path class="st1" d="M139.7,38.1c0-19.6,28.4-19.5,28.4,0V44c0,19.5-28.4,19.6-28.4,0V38.1z M145.2,44c0,12.8,17.5,12.8,17.5,0
v-5.9c0-12.6-17.5-12.8-17.5,0V44z"/>
</g>
<g class="st0">
<path class="st1" d="M188.8,24.2l22.8,27.9V24.2h2.6v33.8h-1L190.3,30v27.9h-2.6V24.2H188.8z"/>
<path class="st1" d="M226.3,39.7h19.8v2.4h-19.8v13.3h21.4v2.5h-24V24.2h23.4v2.5h-20.8V39.7z"/>
<path class="st1" d="M263.3,26.5h-12.2v-2.3h27.1v2.3h-12.2v31.4h-2.6V26.5z"/>
</g>
<g id="Group_174_3_" transform="translate(-5071.999 -1624)">
<path class="st1" d="M5106.8,1722c-5.8,0-11.4-1.2-16.4-3.6c-4.9-2.3-9.1-5.7-12-9.8c-5-7.1-6.1-16-3-25l0-0.1
c7.8-22.5,13-25.7,18.7-27.4l0.5-0.1l0,0.2l0.8-0.1c0.5,0,0.9-0.1,1.4-0.1c0.6,0,1.2,0,1.8,0.1l0.8,0.1l0.4,0.1
c1.9,0.3,3.8,0.8,5.7,1.5l0,0l0,0c0.4,0.1,0.9,0.2,1.3,0.2c0,0,0,0,0,0c5.2,0,12.8-10.1,18.8-28.9c-0.3,1.7-1.1,6.5-1.4,8.1
c-1.2,6.5-2.3,12.7-3.2,17.7l-0.1,0.5l0.5,0.2c2.8,1.2,5,3.8,6.5,7.6l0.1,0.3l0.3,0.1c5.2,1.9,9.3,4.6,12.1,8
c2.5,3,4.2,6.5,4.8,10.5c0.9,5.3,0,11.6-2.5,17.6c-2.2,5.2-5.3,9.8-8.5,12.3C5126,1718.6,5116.6,1722,5106.8,1722L5106.8,1722z
M5094.2,1635.7l0.5,2.5l-0.2,16.8L5094.2,1635.7z M5099.2,1654.4c-0.2-8.7,5.1-17.6,12.8-21.7c-0.7,0.9-1.4,1.8-2,2.7
C5103.8,1639,5100.3,1645.3,5099.2,1654.4z"/>
<g>
<path class="st1" d="M5128.3,1663.1c-1.7-4.1-4-6.7-6.9-8c1.5-8.3,3.6-20,5.7-31.1c-0.4,1.7-1.1,3.4-1.7,5
c-1.7,9.3-4.2,20.4-5.5,27.4c3.2,1.5,5.6,4.2,6.9,7.6c27.3,9.9,16.5,38.3,6.9,46.1c-28,22.7-67.7,4-57.3-26.9
c6.8-20.3,12.9-24.2,18.7-26v0c2.6-0.5,6.9,0.4,9.2,0.9c1.4,0.4,2.2,0.5,2.5,0.5c8,0.5,15.6-18.5,18.5-29.8
c-2.1,5.3-11.8,30.7-19.9,28.3c-1.9-0.7-3.8-1.2-5.8-1.6c0.8-8.8,4-15.8,10.7-19.6c1.2-1.8,2.7-3.6,4.2-5.1
c-9.9,3.5-16.8,14.4-16.1,24.6c-1.1-0.1-2.2-0.1-3.3,0l0.2-17.2l-2.1-9.6l0.5,26.8c-6.3,1.9-11.6,5.9-19.1,27.8l0,0
c-7.8,22.6,10.4,39.4,32.1,39.4c9.2,0,19-3.1,27.7-10C5144.6,1704.6,5157.1,1673.7,5128.3,1663.1z"/>
<polygon class="st2" points="5114.7,1630.8 5114.7,1630.8 5114.7,1630.8 "/>
</g>
<g id="Group_1_3_" transform="translate(5072 1624)">
<path id="Path_839_2_" class="st3" d="M33.1,41.9c1.8-4.6,5.7-7.7,10.2-7.7c6.2,0,11.3,6.1,11.3,13.6s-5.1,13.6-11.3,13.6
c-4.5,0-8.4-3.2-10.2-7.8c0.1-0.2,0.2-0.3,0.3-0.5c1.7,4.2,5.2,7.2,9.4,7.2c5.7,0,10.4-5.6,10.4-12.4s-4.6-12.4-10.4-12.4
c-4.1,0-7.7,2.9-9.4,7.1C33.3,42.2,33.2,42.1,33.1,41.9z M25.1,36.4c2.9,0,5.5,1.9,7.1,4.8c-1.2-2.3-3.6-3.7-6.2-3.8
c-4.4,0-7.9,4.6-7.9,10.3S22.5,58,26,58s4.7-1.9,6.1-4.2c-1.6,2.8-3.2,5.1-7,5.1c-3.8,0-8.7-5-8.7-11.2
C16.4,41.5,20.3,36.4,25.1,36.4L25.1,36.4z"/>
<path id="Path_840_2_" class="st3" d="M27.8,45.5c0.9,0,1.6-0.7,1.6-1.5c0-0.9-0.7-1.6-1.5-1.6c-0.9,0-1.6,0.7-1.6,1.5
c0,0,0,0,0,0C26.3,44.8,27,45.4,27.8,45.5z"/>
<path id="Path_842_2_" class="st3" d="M46.9,46.4c0.9,0,1.6-0.6,1.6-1.5c0-0.9-0.6-1.6-1.5-1.6s-1.6,0.6-1.6,1.5c0,0,0,0,0,0.1
C45.4,45.7,46.1,46.4,46.9,46.4z"/>
<path id="Path_843_2_" class="st3" d="M26.1,62.8l0.6,0.1l-2.3,23.4l-0.6-0.1L26.1,62.8z"/>
<path id="Path_844_2_" class="st3" d="M38.6,65.3l0.6,0l1.5,23.5l-0.6,0L38.6,65.3z"/>
<path id="Path_845_2_" class="st3" d="M51.6,64.2l0.5-0.1l3.1,19.7L54.6,84L51.6,64.2z"/>
<g>
<polygon class="st2" points="8.1,57.5 8.1,57.5 8.1,57.5 8.1,57.5 "/>
<path class="st2" d="M8.1,57.5c-4.3,39.6,64.1,47.3,56.7-0.1c0,0,0,0,0,0c0,0,0,0,0,0s0,0,0,0c-0.3,0.2-0.6,0.4-0.9,0.6
c-0.3,0.2-0.6,0.5-1,0.7c-0.9,0.6-2.2,1.2-3.8,1.9C41.4,66.9,17.2,62.2,8.1,57.5 M9.3,58.9c7.6,7,37.3,10.1,53,2.1
c0,0,0.3-0.1,0.5-0.3C67.3,101.9,5.8,94.4,9.3,58.9z"/>
</g>
</g>
</g>
<circle class="st1" cx="177.1" cy="53.6" r="4"/>
<path id="Forma_1_3_" class="st4" d="M153,74.7c-1,0-2.1,0.3-2.9,1c-0.7,0.6-1.3,1.3-1.7,2c-0.4-0.8-1-1.5-1.7-2
c-0.8-0.7-1.8-1-2.9-1c-2.9,0-5.2,2.4-5.2,5.6c0,3.5,2.8,5.8,7,9.4c0.7,0.6,1.5,1.3,2.4,2c0.2,0.2,0.6,0.2,0.8,0
c0.8-0.7,1.6-1.4,2.4-2c4.2-3.6,7-6,7-9.4C158.1,77.1,155.9,74.7,153,74.7z"/>
<g>
<path class="st1" d="M86.6,71.9l5.2,15.7l5.3-15.7h1.5l5.3,15.7l5.2-15.7h2.7l-6.6,19h-2.4l-4.9-14.2L93,90.9h-2.4l-6.6-19H86.6z"
/>
<path class="st1" d="M125.1,88.7c-1.4,1.6-3.7,2.4-5.8,2.4c-4.1,0-7-2.7-7-7c0-4,2.9-6.9,6.9-6.9c4.1,0,7.2,2.5,6.7,7.9h-11.4
c0.2,2.5,2.3,4,4.9,4c1.5,0,3.4-0.6,4.3-1.7L125.1,88.7L125.1,88.7z M123.8,83.2c-0.1-2.6-1.9-4-4.5-4c-2.3,0-4.4,1.4-4.7,4
L123.8,83.2L123.8,83.2z"/>
</g>
<g>
<path class="st5" d="M214.6,84.2c0,4.8-3.7,8.3-8.3,8.3s-8.3-3.5-8.3-8.3c0-4.8,3.7-8.3,8.3-8.3S214.6,79.4,214.6,84.2z M211,84.2
c0-3-2.2-5-4.7-5s-4.7,2-4.7,5c0,3,2.2,5,4.7,5S211,87.2,211,84.2z"/>
<path class="st6" d="M232.6,84.2c0,4.8-3.7,8.3-8.3,8.3s-8.3-3.5-8.3-8.3c0-4.8,3.7-8.3,8.3-8.3S232.6,79.4,232.6,84.2z M229,84.2
c0-3-2.2-5-4.7-5s-4.7,2-4.7,5c0,3,2.2,5,4.7,5S229,87.2,229,84.2z"/>
<path class="st7" d="M249.9,76.4v14.9c0,6.1-3.6,8.7-7.9,8.7c-4,0-6.5-2.7-7.4-4.9l3.2-1.3c0.6,1.4,2,3,4.2,3
c2.7,0,4.4-1.7,4.4-4.9v-1.2h-0.1c-0.8,1-2.4,1.9-4.4,1.9c-4.2,0-8-3.6-8-8.3c0-4.7,3.8-8.3,8-8.3c2,0,3.6,0.9,4.4,1.9h0.1v-1.4
L249.9,76.4L249.9,76.4z M246.7,84.3c0-2.9-2-5.1-4.4-5.1c-2.5,0-4.6,2.1-4.6,5.1c0,2.9,2.1,5,4.6,5
C244.7,89.3,246.7,87.2,246.7,84.3z"/>
<path class="st8" d="M255.6,67.7V92H252V67.7H255.6z"/>
<path class="st5" d="M269.5,87l2.8,1.9c-0.9,1.4-3.1,3.7-6.9,3.7c-4.7,0-8.3-3.7-8.3-8.3c0-4.9,3.6-8.3,7.8-8.3
c4.3,0,6.4,3.4,7.1,5.3l0.4,0.9l-11.1,4.6c0.9,1.7,2.2,2.5,4,2.5C267.3,89.3,268.6,88.4,269.5,87L269.5,87z M260.8,84l7.4-3.1
c-0.4-1-1.6-1.8-3.1-1.8C263.3,79.1,260.7,80.8,260.8,84z"/>
<path class="st7" d="M184.5,82.1v-3.5h11.9c0.1,0.6,0.2,1.3,0.2,2.1c0,2.6-0.7,5.9-3.1,8.3c-2.3,2.4-5.2,3.6-9,3.6
c-7.1,0-13.1-5.8-13.1-12.9c0-7.1,6-12.9,13.1-12.9c3.9,0,6.7,1.5,8.9,3.6l-2.5,2.5c-1.5-1.4-3.6-2.5-6.4-2.5
c-5.2,0-9.3,4.2-9.3,9.4c0,5.2,4.1,9.4,9.3,9.4c3.4,0,5.3-1.4,6.5-2.6c1-1,1.7-2.4,1.9-4.4L184.5,82.1z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -0,0 +1,19 @@
<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="256" height="256">
<title>vikunja</title>
<defs>
<clipPath clipPathUnits="userSpaceOnUse" id="cp1">
<path d="m211.62 166.19v47.1h-167.62v-47.1z"/>
</clipPath>
</defs>
<style>
.s0 { fill: #101010 }
.s1 { fill: #ffffff }
</style>
<path class="s0" d="m226.9 46.8q-0.8-0.9-1.6-1.9-0.8-1-1.6-1.9-0.9-1-1.7-1.9-0.9-0.9-1.7-1.9c-24.1-25.2-56.9-39.2-92.3-39.2-8.3 0-16.7 0.8-24.9 2.4-8.3 1.7-16.3 4.1-24.1 7.3-7.7 3.2-15.1 7.2-22.1 11.9-7 4.6-13.4 10-19.4 15.9-5.9 6-11.3 12.4-15.9 19.4-4.7 7-8.7 14.4-11.9 22.1-3.2 7.8-5.6 15.8-7.3 24.1-1.6 8.2-2.4 16.6-2.4 24.9 0 8.4 0.8 16.8 2.5 25 1.6 8.3 4 16.3 7.2 24.1 3.2 7.7 7.2 15.1 11.9 22.1 4.6 7 10 13.4 15.9 19.4 6 5.9 12.4 11.3 19.4 15.9 7 4.7 14.4 8.7 22.1 11.9 7.8 3.2 15.8 5.6 24.1 7.2 8.2 1.7 16.6 2.5 24.9 2.4 8.4 0.1 16.8-0.7 25-2.4 8.3-1.6 16.3-4 24-7.2 7.8-3.2 15.2-7.2 22.2-11.9 6.9-4.6 13.4-10 19.3-15.9 6-6 11.3-12.4 16-19.4 4.7-7 8.7-14.4 11.9-22.1 3.2-7.8 5.6-15.8 7.2-24.1 1.7-8.2 2.5-16.6 2.4-25 0-29.2-10.5-58.2-29.1-81.2"/>
<g id="Clip-Path" clip-path="url(#cp1)">
<g>
<path fill-rule="evenodd" class="s1" d="m117.5 183.8c2.5-3.5 6.5-5.5 11.3-5.5 9.1 0 15.6 7 15.6 16.7 0 9.8-6.6 16.8-15.8 16.8-4.8 0-8.7-1.8-11.2-5.3l-0.2 4.5h-6.9v-44.8h7.2zm20.2 11.4c0-5.7-4.1-10.4-9.3-10.4-5.2 0-9.4 4.7-9.4 10.4 0 5.8 4.2 10.5 9.4 10.5 5.2 0 9.3-4.7 9.3-10.5zm-70.4 9.4l0.3-0.2 2.8 5.7-0.1 0.1c-2.7 2.1-5.6 3.1-8.8 3.1-7 0-10.9-4-10.9-11.4v-16.7h-6.6l1.6-6.5h5v-8.3h7.3v8.3h11.6v6.5h-11.6v16.7c0 2.9 1.5 4.6 4.3 4.6 1.9 0 3.3-0.5 5.1-1.9zm36.1-9.8q0 0.5-0.1 0.9 0 0.4 0 0.8v0.3h-23.7c0.7 5.6 4.1 8.6 9.5 8.6 3.5 0 6.3-1.2 8.9-3.8l0.2-0.2 3.8 4.7-0.1 0.1c-3.4 3.8-7.6 5.5-13.2 5.5-9.9 0-16.3-6.6-16.3-16.8 0-9.7 6.7-16.8 16-16.8 9.1 0 15 6.6 15 16.7zm-7.3-2.7c-0.6-4.8-3.5-7.6-7.8-7.6-4.3 0-7.6 3-8.5 7.6zm82.8 2.7q0 0.5 0 0.9-0.1 0.4-0.1 0.8v0.3h-23.7c0.7 5.6 4.1 8.6 9.5 8.6 3.5 0 6.3-1.2 8.9-3.8l0.2-0.2 3.9 4.7-0.2 0.1c-3.4 3.8-7.6 5.5-13.2 5.5-9.9 0-16.2-6.6-16.2-16.8 0-9.7 6.6-16.8 15.9-16.8 9.1 0 15 6.6 15 16.7zm-23.6-2.7h16.3c-0.6-4.9-3.4-7.6-7.8-7.6-4.3 0-7.6 3-8.5 7.6zm55-13.4l-11.2 15.4 12.5 16.9h-8.6l-8.1-11.5-7.8 11.5h-8.2l12.1-16.5-11.5-15.8h8.5l7.1 10.5 7-10.5z"/>
</g>
</g>
<path class="s1" d="m130.9 71.8c4.5-7.3 12.5-9.5 12.5-9.5 0 0-15.3-4-15.3-20.3 0 16.3-15.3 20.3-15.3 20.3 0 0 8 2.2 12.4 9.5h-20.9v28.2l4.8-8.7h9.5v48.6l19 19.4v-59.5c-4.9-2.3-11.8-8.1-14.3-12.5 4.2 1.3 10 3 14.4 4h14.2v-19.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,15 @@
<svg width="500" height="404" viewBox="0 0 500 404" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M232.61 401.571C220.894 398.642 214.011 395.42 204.052 388.39C199.219 384.876 154.991 341.672 105.783 292.172C37.244 223.34 15.1299 200.347 11.1757 193.61C-3.03008 169.006 -3.61588 146.16 8.97892 121.263C14.6905 109.987 26.6995 96.806 75.0284 48.4771C115.303 8.20299 118.378 6.00622 139.321 1.46623C151.33 -1.02344 160.41 -0.437633 174.176 3.9559C188.235 8.20299 197.901 15.5256 224.262 41.7403C237.443 54.7745 249.013 65.4654 250.038 65.4654C250.916 65.4654 251.649 66.7835 251.649 68.3945C251.649 70.0054 251.063 71.3235 250.331 71.3235C249.745 71.3235 243.887 76.5957 237.443 83.0396C224.409 95.9273 216.647 109.108 215.329 120.385C214.596 127.561 217.525 144.549 219.576 144.549C220.308 144.549 220.894 145.867 220.894 147.478C220.894 151.725 240.811 171.203 248.72 174.865C252.381 176.475 258.532 178.672 262.34 179.697C268.93 181.455 269.955 181.308 279.914 177.501C285.772 175.157 291.044 172.521 291.63 171.35C292.216 170.325 293.241 169.446 293.973 169.446C294.559 169.446 304.664 159.926 316.527 148.21C336.59 128.586 338.494 126.975 343.62 126.975C348.746 126.975 350.943 128.879 386.091 164.027C406.301 184.237 422.997 201.812 422.997 202.837C422.997 203.715 423.582 204.594 424.315 204.594C424.9 204.594 427.39 208.695 429.733 213.821C433.102 221.29 433.98 225.39 434.42 237.253C435.006 249.555 434.713 251.459 432.662 251.459C431.344 251.459 430.319 252.337 430.319 253.362C430.319 254.388 400.15 285.289 363.391 321.902C303.492 381.507 295.145 389.123 286.065 393.809C267.465 403.328 250.184 405.818 232.61 401.571ZM2.24217 152.311C1.94926 149.968 1.65636 151.579 1.65636 155.533C1.65636 159.634 1.94926 161.391 2.24217 159.634C2.53507 157.73 2.53507 154.508 2.24217 152.311Z" fill="#461EC5"/>
<path d="M430.319 233.152C430.319 231.981 429.733 230.955 429.001 230.955C428.269 230.955 427.976 229.637 428.415 228.026C429.733 222.901 433.248 224.512 433.248 230.223C433.248 233.006 432.662 235.349 431.784 235.349C431.052 235.349 430.319 234.324 430.319 233.152Z" fill="#36198A"/>
<path d="M421.386 210.745C417.138 205.766 416.846 203.13 420.8 203.13C424.022 203.13 424.461 203.715 424.461 208.255C424.461 214.113 424.315 214.26 421.386 210.745Z" fill="#36198A"/>
<path d="M252.527 182.48C247.695 180.869 241.104 177.647 237.736 175.304C228.949 169.299 212.4 150.407 215.768 150.407C216.354 150.407 215.622 149.382 214.45 148.064C213.132 146.892 212.4 145.135 212.839 144.403C213.425 143.671 212.986 143.085 212.107 143.085C211.082 143.085 210.789 141.913 211.375 140.156C211.814 138.545 211.814 137.227 211.082 137.227C210.496 137.227 209.91 131.662 209.91 124.778C209.91 117.895 210.496 112.33 211.228 112.33C211.814 112.33 212.107 111.305 211.521 110.133C211.082 108.962 211.375 107.936 212.253 107.936C213.132 107.936 213.571 106.911 212.986 105.74C212.546 104.568 212.839 103.543 213.718 103.543C214.597 103.543 214.889 102.957 214.45 102.225C214.011 101.493 214.597 100.467 215.915 100.028C217.233 99.5887 217.965 98.1242 217.526 97.099C217.086 95.9274 217.672 94.6094 218.844 94.17C220.015 93.7306 220.748 92.8519 220.601 92.2661C220.162 90.8016 244.18 66.9301 246.084 66.9301C246.816 66.9301 246.962 66.1978 246.377 65.3191C245.791 64.2939 246.377 64.001 248.134 64.5868C250.331 65.3191 256.921 59.4611 278.01 38.665C307.007 9.96053 311.694 6.7386 330.732 1.75926C347.721 -2.78073 370.714 1.90571 385.505 12.7431C392.242 17.7224 440.571 65.3191 440.571 67.0765C440.571 67.6623 441.45 68.541 442.475 68.8339C443.353 69.2733 438.374 69.5662 431.052 69.5662C420.946 69.4197 416.406 70.0055 411.72 72.2023C404.69 75.4242 348.16 129.904 351.821 129.904C353.432 129.904 354.165 131.222 354.165 134.298C354.165 138.252 354.604 138.691 358.558 138.691C362.659 138.691 362.952 139.131 362.952 144.11V149.529L353.579 140.302C344.938 131.808 343.767 131.076 341.423 132.98C339.959 134.151 330 143.817 319.163 154.508C308.325 165.052 298.953 173.839 298.367 173.839C297.781 173.839 296.609 174.718 296.023 175.743C295.438 176.915 290.458 179.551 284.893 181.601C273.177 186.288 264.683 186.581 252.527 182.48ZM288.847 141.913C297.342 134.737 299.538 127.414 295.731 119.067C292.069 110.865 287.529 107.204 278.596 105.007C271.859 103.543 270.395 103.689 265.562 106.033C261.315 108.229 259.557 110.573 256.775 117.309C253.406 125.511 253.406 125.95 255.749 132.394C258.386 139.423 263.951 144.549 271.42 147.039C276.253 148.65 283.429 146.6 288.847 141.913Z" fill="#36198A"/>
<path d="M383.455 170.178L378.476 165.052H383.894C389.167 165.052 389.313 165.199 389.313 170.178C389.313 172.961 389.167 175.304 388.874 175.304C388.581 175.304 386.238 172.961 383.455 170.178Z" fill="#36198A"/>
<path d="M430.026 239.157C429.44 228.612 428.561 225.097 424.021 216.017C419.335 206.498 414.649 201.372 382.136 168.714C361.926 148.65 345.084 130.929 344.498 129.465C343.327 125.95 398.392 71.9093 407.326 67.6622C412.012 65.6119 416.552 64.8796 426.218 64.8796H438.959L459.023 84.5041C480.698 105.886 488.899 116.87 492.854 129.758C494.318 134.298 495.929 138.398 496.661 138.838C497.394 139.423 497.54 141.181 497.101 142.792C496.515 144.403 496.808 146.16 497.686 146.746C499.59 147.918 499.59 161.684 497.54 163.002C496.661 163.441 496.222 165.199 496.661 166.663C497.101 168.128 496.075 171.789 494.611 174.865C493.146 177.794 491.828 181.601 491.828 183.066C491.828 186.434 485.97 197.272 484.213 197.272C483.627 197.272 483.041 198.15 483.041 199.175C483.041 201.372 434.419 251.459 432.223 251.459C431.344 251.459 430.465 246.333 430.026 239.157Z" fill="#2B146D"/>
<path d="M266.586 151.432C260.435 149.089 251.355 141.913 252.38 140.009C252.966 139.277 252.527 138.691 251.648 138.691C250.77 138.691 250.477 138.105 250.916 137.227C251.355 136.494 251.209 135.762 250.33 135.762C249.451 135.762 249.159 134.737 249.598 133.565C250.184 132.394 249.891 131.368 249.159 131.368C248.426 131.368 247.84 128.732 247.987 125.51C247.987 122.289 248.426 119.652 248.866 119.652C250.33 119.652 253.259 112.183 252.38 110.719C251.795 109.987 252.234 109.401 252.966 109.401C253.845 109.401 254.431 108.669 254.138 107.643C253.991 106.765 256.481 104.421 259.703 102.664C267.026 98.417 275.959 96.806 278.742 99.1492C279.913 100.028 281.524 100.467 282.257 100.028C282.989 99.4421 284.014 99.735 284.6 100.614C285.186 101.492 286.064 101.785 286.797 101.346C288.847 100.028 297.341 108.229 300.124 114.527C303.638 122.289 303.638 124.046 299.684 124.046C297.195 124.046 295.73 122.581 293.973 118.334C291.044 111.451 282.257 104.568 276.691 104.714C271.566 104.861 260.582 110.133 259.41 113.062C258.971 114.234 257.36 115.259 255.895 115.259C253.552 115.259 253.113 116.43 253.113 121.849C253.113 125.657 254.138 130.49 255.31 132.687C257.946 137.812 265.415 144.256 270.101 145.428C272.591 146.014 273.616 147.332 273.616 149.821C273.616 153.776 273.323 153.776 266.586 151.432Z" fill="#2B146D"/>
<path d="M275.081 149.821C275.081 147.039 276.106 146.014 279.621 145.281C285.186 144.11 293.973 135.03 295.145 129.611C295.731 126.536 296.756 125.51 299.392 125.51C303.346 125.51 303.493 126.682 301.442 134.444C299.538 141.034 293.827 147.039 286.065 150.554C277.864 154.361 275.081 154.068 275.081 149.821Z" fill="#2B146D"/>
<path d="M265.561 150.114C257.507 146.014 254.578 143.231 251.502 136.494C247.841 128.44 247.987 122.289 252.381 113.794C260.143 98.2705 281.818 94.9022 293.241 107.204C299.978 114.38 301.003 115.845 300.27 117.895C299.978 118.774 300.417 119.652 301.296 119.652C302.174 119.652 302.907 121.996 302.907 124.778C302.907 127.561 302.174 129.904 301.296 129.904C300.417 129.904 299.978 131.222 300.417 132.833C300.856 134.444 300.563 135.762 299.685 135.762C298.952 135.762 298.659 136.348 299.099 137.08C299.538 137.812 298.952 138.838 297.634 139.277C296.316 139.863 295.584 140.595 296.17 141.181C296.609 141.62 295.584 142.792 293.68 143.817C291.923 144.696 290.605 146.16 290.751 147.039C290.898 147.918 288.408 148.943 285.332 149.528C282.11 149.968 279.474 151.139 279.474 151.872C279.474 154.215 271.859 153.19 265.561 150.114Z" fill="#1F0E4E"/>
<rect x="1.21729" y="150.407" width="4.39354" height="10.2516" fill="#461EC5"/>
<path d="M462.539 88.1654C506.161 130.726 511.237 166.488 480.113 203.13L462.539 88.1654Z" fill="#2B146D"/>
<circle cx="275.081" cy="125.51" r="27.8257" fill="#1F0E4E"/>
<path d="M222.359 89.6299C196.86 117.609 199.757 132.937 221.627 159.926L222.359 89.6299Z" fill="#36198A"/>
</svg>

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 27.5.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
version="1.1"
id="katman_1"
x="0px"
y="0px"
viewBox="0 0 841.89 595.28"
style="enable-background:new 0 0 841.89 595.28;"
xml:space="preserve"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs id="defs4" />
<g
id="g4"
style="fill:currentColor">
<polygon
points="557.09,211.99 565.4,538.36 631.96,538.36 640.28,93.18"
id="polygon1"
style="fill:currentColor" />
<polygon
points="640.28,56.91 538.72,56.91 379.35,284.53 430.13,357.05"
id="polygon2"
style="fill:currentColor" />
<polygon
points="201.61,538.36 303.17,538.36 353.96,465.84 303.17,393.31"
id="polygon3"
style="fill:currentColor" />
<polygon
points="201.61,211.99 430.13,538.36 531.69,538.36 303.17,211.99"
id="polygon4"
style="fill:currentColor" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,74 @@
<?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 467 467" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g id="zitadel-logo-solo-darkdesign" transform="matrix(0.564847,0,0,0.659318,-1282.85,0)">
<rect x="2271.15" y="0" width="826.773" height="708.241" style="fill:none;"/>
<g transform="matrix(4.96737,-1.14029,1.331,4.25561,-5923.46,-2258.26)">
<path d="M1493.5,1056.38L1493.5,1037L1496.5,1037L1496.5,1061.62L1426.02,1020.38L1496.5,979.392L1496.5,1004L1493.5,1004L1493.5,984.608L1431.98,1020.39L1493.5,1056.38Z" style="fill:white;"/>
</g>
<g transform="matrix(31.0036,0,0,15.0393,-397275,-666.457)">
<g transform="matrix(-0.0429306,-0.282967,0.160219,-0.0758207,12884.5,137.392)">
<path d="M212.517,110L200.392,110L190,92L179.608,110L167.483,110L190,71L212.517,110Z" style="fill:url(#_Linear1);"/>
</g>
<g transform="matrix(0.160219,0.0758207,-0.0429306,0.282967,12878.9,10.8747)">
<path d="M212.517,110L200.392,110L190,92L179.608,110L167.483,110L190,71L212.517,110Z" style="fill:url(#_Linear2);"/>
</g>
<g transform="matrix(-0.117289,0.207146,-0.117289,-0.207146,12943.8,65.7)">
<path d="M212.517,110L200.392,110L190,92L179.608,110L167.483,110L190,71L212.517,110Z" style="fill:url(#_Linear3);"/>
</g>
<g transform="matrix(-0.160219,-0.0758207,0.0429306,-0.282967,12917.4,132.195)">
<path d="M139.622,117L149,142L130.244,142L139.622,117Z" style="fill:url(#_Linear4);"/>
</g>
<g transform="matrix(-0.117289,0.207146,0.117289,0.207146,12897.8,5.87512)">
<path d="M139.622,117L149,142L130.244,142L139.622,117Z" style="fill:url(#_Linear5);"/>
</g>
<g transform="matrix(-0.0429306,-0.282967,-0.160219,0.0758207,12936.8,97.6441)">
<path d="M139.622,117L149,142L130.244,142L139.622,117Z" style="fill:url(#_Linear6);"/>
</g>
</g>
<g transform="matrix(4.96737,-1.14029,1.331,4.25561,-5928.43,-2257.12)">
<circle cx="1496" cy="1004" r="7" style="fill:white;"/>
</g>
<g transform="matrix(4.96737,-1.14029,1.331,4.25561,-5884.5,-2116.69)">
<circle cx="1496" cy="1004" r="7" style="fill:white;"/>
</g>
<g transform="matrix(4.96737,-1.14029,1.331,4.25561,-5855.22,-2023.06)">
<circle cx="1496" cy="1004" r="7" style="fill:white;"/>
</g>
<g transform="matrix(4.96737,-1.14029,1.331,4.25561,-6234.47,-2112.14)">
<circle cx="1496" cy="1004" r="7" style="fill:white;"/>
</g>
<g transform="matrix(4.96737,-1.14029,1.331,4.25561,-5957.71,-2350.75)">
<circle cx="1496" cy="1004" r="7" style="fill:white;"/>
</g>
<g transform="matrix(4.96737,-1.14029,1.16463,3.72366,-5477.99,-831.33)">
<path d="M1499.26,757.787C1499.26,757.787 1497.37,756.489 1497,755.2C1496.71,754.182 1496.57,750.662 1496.54,750C1496.41,747.303 1499.21,745.644 1499.21,745.644L1490.01,745.835C1490.01,745.835 1493.15,745.713 1493.46,750C1493.51,750.661 1493.23,753.476 1493,755.2C1492.91,756.447 1491.2,757.668 1491.2,757.668L1499.26,757.787Z" style="fill:white;"/>
</g>
<g transform="matrix(4.96737,-1.14029,1.16463,3.72366,-5404.79,-597.271)">
<path d="M1495,760L1495,744" style="fill:none;"/>
</g>
<g transform="matrix(4.96737,-1.14029,1.16463,3.72366,-5404.79,-597.271)">
<path d="M1498.27,757.077C1498.27,757.077 1496.71,756.46 1496.65,754.8C1496.65,753.658 1496.64,753.281 1496.65,752.016C1496.62,751.334 1496.59,750.608 1496.65,749.949C1496.78,746.836 1498.5,746.156 1498.5,746.156L1491.46,745.931C1491.46,745.931 1493.37,746.719 1493.65,749.83C1493.71,750.489 1493.69,751.528 1493.65,752.209C1493.64,753.331 1493.64,753.413 1493.65,754.518C1493.68,756.334 1492.58,756.827 1492.58,756.827L1498.27,757.077Z" style="fill:white;"/>
</g>
<g transform="matrix(4.96737,-1.14029,1.16463,3.72366,-5770.62,-677.495)">
<path d="M1496.17,759.473L1555.54,720.014" style="fill:none;"/>
</g>
<g transform="matrix(4.96737,-1.14029,1.16463,3.72366,-5770.62,-677.495)">
<path d="M1500.86,762.056C1500.86,762.056 1499.86,760.4 1503.09,757.456C1504.91,755.797 1507.33,754.151 1509.98,752.255C1514.82,748.79 1520.68,744.94 1526.52,741.049C1531.45,737.766 1536.38,734.479 1540.82,731.68C1544.52,729.349 1547.85,727.296 1550.54,725.8C1551.07,725.506 1551.6,725.329 1552.05,725.029C1554.73,723.257 1556.85,724.968 1556.85,724.968L1552.23,716.282C1552.23,716.282 1551.99,719.454 1550,720.997C1549.57,721.333 1549.15,721.741 1548.67,722.12C1546.2,724.053 1542.99,726.344 1539.39,728.867C1535.06,731.898 1530.13,735.166 1525.19,738.438C1519.35,742.314 1513.52,746.234 1508.49,749.329C1505.74,751.023 1503.28,752.577 1501.13,753.598C1497.99,755.086 1495.28,753.617 1495.28,753.617L1500.86,762.056Z" style="fill:white;"/>
</g>
<g transform="matrix(4.96737,-1.14029,-1.16463,-3.72366,-3997,4993.28)">
<path d="M1496.17,759.473L1555.54,720.014" style="fill:none;"/>
</g>
<g transform="matrix(4.96737,-1.14029,-1.16463,-3.72366,-3997,4993.28)">
<path d="M1496.1,754.362C1496.1,754.362 1497.2,755.607 1501.13,753.598C1503.25,752.509 1505.74,751.023 1508.49,749.329C1513.52,746.234 1519.35,742.314 1525.19,738.438C1530.13,735.166 1534.94,731.832 1539.27,728.802C1542.87,726.279 1549.36,722.059 1549.81,721.75C1552.75,719.73 1552.18,718.196 1552.18,718.196L1555.28,724.152C1555.28,724.152 1553.77,722.905 1551.37,724.681C1550.93,725.006 1544.52,729.349 1540.82,731.68C1536.38,734.479 1531.45,737.766 1526.52,741.049C1520.68,744.94 1514.82,748.79 1509.98,752.255C1507.33,754.151 1504.89,755.771 1503.09,757.456C1499.47,760.841 1501.26,763.283 1501.26,763.283L1496.1,754.362Z" style="fill:white;"/>
</g>
</g>
<defs>
<linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-41.5984,155.247,-155.247,-41.5984,201.516,76.8392)"><stop offset="0" style="stop-color:rgb(255,143,0);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(254,0,255);stop-opacity:1"/></linearGradient>
<linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(155.247,-41.5984,41.5984,155.247,110.08,195.509)"><stop offset="0" style="stop-color:rgb(255,143,0);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(254,0,255);stop-opacity:1"/></linearGradient>
<linearGradient id="_Linear3" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-113.649,-113.649,113.649,-113.649,258.31,215.618)"><stop offset="0" style="stop-color:rgb(255,143,0);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(254,0,255);stop-opacity:1"/></linearGradient>
<linearGradient id="_Linear4" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-155.247,41.5984,-41.5984,-155.247,220.914,144.546)"><stop offset="0" style="stop-color:rgb(255,143,0);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(254,0,255);stop-opacity:1"/></linearGradient>
<linearGradient id="_Linear5" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-113.649,113.649,113.649,113.649,206.837,124.661)"><stop offset="0" style="stop-color:rgb(255,143,0);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(254,0,255);stop-opacity:1"/></linearGradient>
<linearGradient id="_Linear6" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-41.5984,-155.247,-155.247,41.5984,152.054,262.8)"><stop offset="0" style="stop-color:rgb(255,143,0);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(254,0,255);stop-opacity:1"/></linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

@@ -14,7 +14,6 @@ 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_auth/utils/lock_screen_settings.dart';
import 'package:ente_crypto_dart/ente_crypto_dart.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:logging/logging.dart';
@@ -33,7 +32,6 @@ class Configuration {
static const emailKey = "email";
static const keyAttributesKey = "key_attributes";
static const keyShouldShowLockScreen = "should_show_lock_screen";
static const lastTempFolderClearTimeKey = "last_temp_folder_clear_time";
static const keyKey = "key";
static const secretKeyKey = "secret_key";
@@ -133,7 +131,6 @@ class Configuration {
key: key,
);
}
await LockScreenSettings.instance.removePinAndPassword();
await AuthenticatorDB.instance.clearTable();
_key = null;
_cachedToken = null;
@@ -468,24 +465,6 @@ class Configuration {
await _preferences.setBool(hasOptedForOfflineModeKey, true);
}
Future<bool> shouldShowLockScreen() async {
final bool isPin = await LockScreenSettings.instance.isPinSet();
final bool isPass = await LockScreenSettings.instance.isPasswordSet();
return isPin || isPass || shouldShowSystemLockScreen();
}
bool shouldShowSystemLockScreen() {
if (_preferences.containsKey(keyShouldShowLockScreen)) {
return _preferences.getBool(keyShouldShowLockScreen)!;
} else {
return false;
}
}
Future<void> setSystemLockScreen(bool value) {
return _preferences.setBool(keyShouldShowLockScreen, value);
}
void setVolatilePassword(String volatilePassword) {
_volatilePassword = volatilePassword;
}

View File

@@ -11,7 +11,7 @@ const String roadmapURL = "https://roadmap.ente.io";
const String kAccountsUrl = "https://accounts.ente.io";
const String githubFeatureRequestUrl =
"https://github.com/ente-io/ente/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+requests%22+label%3A%22-+auth%22+sort%3Atop";
"https://github.com/ente-io/ente/discussions/categories/enhancements?discussions_q=is%3Aopen%+label%3A%22-+auth%22+sort%3Atop";
const int microSecondsInDay = 86400000000;
const int android11SDKINT = 30;
const int galleryLoadStartTime = -8000000000000000; // Wednesday, March 6, 1748

View File

@@ -73,7 +73,10 @@ class AuthenticatorGateway {
);
}
Future<List<AuthEntity>> getDiff(int sinceTime, {int limit = 500}) async {
Future<(List<AuthEntity>, int?)> getDiff(
int sinceTime, {
int limit = 500,
}) async {
try {
final response = await _enteDio.get(
"/authenticator/entity/diff",
@@ -84,11 +87,12 @@ class AuthenticatorGateway {
);
final List<AuthEntity> authEntities = <AuthEntity>[];
final diff = response.data["diff"] as List;
final int? unixTimeInMicroSeconds = response.data["timestamp"] as int?;
for (var entry in diff) {
final AuthEntity entity = AuthEntity.fromMap(entry);
authEntities.add(entity);
}
return authEntities;
return (authEntities, unixTimeInMicroSeconds);
} catch (e) {
if (e is DioException && e.response?.statusCode == 401) {
throw UnauthorizedError();

View File

@@ -47,7 +47,7 @@
"saveAction": "حفظ",
"nextTotpTitle": "التالي",
"deleteCodeTitle": "حذف الرمز؟",
"deleteCodeMessage": "هل أنت متأكد من أنك تريد حذف هذه الشيفرة؟ هذا الإجراء لا رجعة فيه.",
"deleteCodeMessage": "هل أنت متيقِّن من أنك تريد حذف هذه الشيفرة؟ هذا الإجراء لا رجعة فيه.",
"trashCode": "حذف الكود؟",
"trashCodeMessage": "هل أنت متيقِّن أنك تريد حذف الكود الخاص بـ {account}؟",
"trash": "سلة المهملات",
@@ -173,6 +173,7 @@
"invalidQRCode": "شيفرة استجابة سريعة غير صالحة",
"noRecoveryKeyTitle": "لا يوجد مفتاح استرجاع؟",
"enterEmailHint": "أدخل عنوان البريد الإلكتروني الخاص بك",
"enterNewEmailHint": "أدخل عنوان بريدك الإلكتروني الجديد",
"invalidEmailTitle": "عنوان البريد الإلكتروني غير صالح",
"invalidEmailMessage": "الرجاء إدخال بريد إلكتروني صالح.",
"deleteAccount": "إزالة الحساب",
@@ -513,5 +514,10 @@
"free5GB": "5GB مجانًا على <bold-green>ente</bold-green> صور",
"loginWithAuthAccount": "سجّل الدخول باستخدام حساب المُصادقة",
"freeStorageOffer": "خَصْم 10٪ على صور <bold-green>ente</bold-green>",
"freeStorageOfferDescription": "استخدم الكود \"AUTH\" وأحصل على 10٪ خَصْم في السنة الأولى"
"freeStorageOfferDescription": "استخدم الكود \"AUTH\" وأحصل على 10٪ خَصْم في السنة الأولى",
"advanced": "متقدم",
"algorithm": "الخوارزمية",
"type": "النوع",
"period": "المدّة",
"digits": "الأرقام"
}

View File

@@ -8,7 +8,7 @@
},
"onBoardingBody": "Бяспечна зрабіць рэзервовую копію кодаў 2ФА",
"onBoardingGetStarted": "Пачаць",
"setupFirstAccount": "Наладзіць ваш першы ўліковы запіс",
"setupFirstAccount": "Наладзіць свой першы ўліковы запіс",
"importScanQrCode": "Сканіраваць код QR-код",
"qrCode": "QR-код",
"importEnterSetupKey": "Увесці ключ наладжвання",
@@ -45,19 +45,38 @@
"timeBasedKeyType": "Заснаваныя на часе (TOTP)",
"counterBasedKeyType": "Заснаваныя на лічыльніку (HOTP)",
"saveAction": "Захаваць",
"nextTotpTitle": "наступны",
"nextTotpTitle": "далей",
"deleteCodeTitle": "Выдаліць код?",
"deleteCodeMessage": "Вы сапраўды хочаце выдаліць гэты код? Гэта дзеянне з'яўляецца незваротным.",
"trashCode": "Выдаліць код?",
"trashCodeMessage": "Вы сапраўды хочаце выдаліць код для {account}?",
"trash": "Сметніца",
"viewLogsAction": "Паглядзець журнал",
"preparingLogsTitle": "Падрыхтоўка журнала...",
"viewLogsAction": "Паглядзець журналы",
"preparingLogsTitle": "Падрыхтоўка журналаў...",
"emailLogsTitle": "Адправіць журнал па электроннай пошце",
"exportLogsAction": "Экспартаваць журнал",
"reportABug": "Паведаміць пра памылку",
"reportBug": "Паведаміць пра памылку",
"emailLogsMessage": "Адпраўце журналы на {email}",
"@emailLogsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"copyEmailAction": "Скапіяваць электронную пошту",
"exportLogsAction": "Экспартаваць журналы",
"reportABug": "Паведаміць аб памылцы",
"crashAndErrorReporting": "Справаздачы аб збоях і памылках",
"reportBug": "Паведаміць аб памылцы",
"emailUsMessage": "Адпраўце нам ліст на {email}",
"@emailUsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"contactSupport": "Звярнуцца ў службу падтрымкі",
"rateUsOnStore": "Ацаніць нас у {storeName}",
"blog": "Блог",
"verifyPassword": "Праверыць пароль",
"pleaseWait": "Пачакайце...",
@@ -66,32 +85,184 @@
"useRecoveryKey": "Выкарыстоўваць ключ аднаўлення",
"incorrectPasswordTitle": "Няправільны пароль",
"welcomeBack": "З вяртаннем!",
"changeEmail": "Змяніць адрас электроннай пошты",
"changePassword": "Змяніць пароль",
"data": "Даныя",
"importCodes": "Імпартаваць коды",
"importTypePlainText": "Звычайны тэкст",
"importTypeEnteEncrypted": "Шыфраванне экспартавання з Ente",
"passwordForDecryptingExport": "Пароль для дэшыфроўкі экспартавання",
"passwordEmptyError": "Пароль не можа быць пустым",
"importFromApp": "Імпартаваць коды з {appName}",
"exportCodes": "Экспартаваць коды",
"importLabel": "Імпарт",
"selectFile": "Выбраць файл",
"ok": "OK",
"cancel": "Скасаваць",
"yes": "Так",
"no": "Не",
"email": "Электронная пошта",
"support": "Падтрымка",
"general": "Агульныя",
"settings": "Налады",
"copied": "Скапіявана",
"pleaseTryAgain": "Калі ласка, паспрабуйце яшчэ раз",
"existingUser": "Існуючы карыстальнік",
"newUser": "Навічок у Ente",
"delete": "Выдаліць",
"enterYourPasswordHint": "Увядзіце ваш пароль",
"forgotPassword": "Забылі пароль",
"oops": "Вой",
"faq": "Частыя пытанні",
"leaveFamily": "Пакінуць сямейны план",
"scan": "Сканіраваць",
"scanACode": "Сканіраваць код",
"verify": "Праверыць",
"verifyEmail": "Праверыць электронную пошту",
"lostDeviceTitle": "Згубілі прыладу?",
"verifyPasskey": "Праверыць ключ доступу",
"loginWithTOTP": "Увайсці з TOTP",
"recoverAccount": "Аднавіць уліковы запіс",
"recover": "Аднавіць",
"invalidQRCode": "Памылковы QR-код",
"deleteAccount": "Выдаліць уліковы запіс",
"noDeleteAccountAction": "Не, выдаліць уліковы запіс",
"sendEmail": "Адправіць ліст",
"createNewAccount": "Стварыць новы ўліковы запіс",
"weakStrength": "Ненадзейны",
"strongStrength": "Надзейны",
"moderateStrength": "Умераная",
"confirmPassword": "Пацвердзіць пароль",
"close": "Закрыць",
"oopsSomethingWentWrong": "Штосьці пайшло не так.",
"selectLanguage": "Выберыце мову",
"language": "Мова",
"social": "Сацыяльныя сеткі",
"security": "Бяспека",
"lockscreen": "Экран блакіроўкі",
"searchHint": "Пошук...",
"search": "Пошук"
"search": "Пошук",
"noResult": "Няма вынікаў",
"addCode": "Дадаць код",
"scanAQrCode": "Сканіраваць QR-код",
"edit": "Рэдагаваць",
"share": "Абагуліць",
"shareCodes": "Абагуліць коды",
"restore": "Аднавіць",
"error": "Памылка",
"doThisLater": "Зрабіць гэта пазней",
"saveKey": "Захаваць ключ",
"save": "Захаваць",
"send": "Адправіць",
"back": "Назад",
"createAccount": "Стварыць уліковы запіс",
"password": "Пароль",
"privacyPolicyTitle": "Палітыка прыватнасці",
"termsOfServicesTitle": "Умовы",
"encryption": "Шыфраванне",
"setPasswordTitle": "Задаць пароль",
"changePasswordTitle": "Змяніць пароль",
"resetPasswordTitle": "Скінуць пароль",
"encryptionKeys": "Ключы шыфравання",
"continueLabel": "Працягнуць",
"insecureDevice": "Небяспечная прылада",
"howItWorks": "Як гэта працуе",
"logInLabel": "Увайсці",
"logout": "Выйсці",
"yesLogout": "Так, выйсці",
"exit": "Выхад",
"theme": "Тема",
"lightTheme": "Светлая",
"darkTheme": "Цёмная",
"systemTheme": "Сістэманая",
"invalidKey": "Памылковы ключ",
"tryAgain": "Паспрабуйце яшчэ раз",
"confirm": "Пацвердзіць",
"emailYourLogs": "Адправіць журналы",
"exportLogs": "Экспартаваць журналы",
"about": "Аб праграме",
"privacy": "Прыватнасць",
"terms": "Умовы",
"checkStatus": "Праверыць статус",
"downloadUpdate": "Спампаваць",
"update": "Абнавіць",
"checking": "Праверка...",
"warning": "Папярэджанне",
"iUnderStand": "Ясна",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"importSuccessTitle": "Ура!",
"sorry": "Прабачце",
"pendingSyncs": "Папярэджанне",
"resendEmail": "Адправіць ліст яшчэ раз",
"manualSort": "Карыстальніцкая",
"editOrder": "Рэдагаваць заказ",
"mostFrequentlyUsed": "Часта выкарыстоўваюцца",
"mostRecentlyUsed": "Нядаўна выкарыстаныя",
"activeSessions": "Актыўныя сеансы",
"terminate": "Перарваць",
"thisDevice": "Гэта прылада",
"incorrectCode": "Няправільны код",
"enterPassword": "Увядзіце пароль",
"encrypted": "Зашыфравана",
"plainText": "Звычайны тэкст",
"export": "Экспартаваць",
"singIn": "Увайсці",
"compactMode": "Кампактны рэжым",
"shouldHideCode": "Схаваць коды",
"androidBiometricHint": "Праверыць ідэнтыфікацыю",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "Паспяхова",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "Скасаваць",
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"goToSettings": "Перайсці ў налады",
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
},
"iOSOkButton": "OK",
"@iOSOkButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
},
"doNotSignOut": "Не выходзіць",
"passkey": "Ключ доступу",
"loginSessionExpired": "Сеанс завяршыўся",
"pinText": "Замацаваць",
"unpinText": "Адмацаваць",
"pinned": "Замацавана",
"tags": "Тэгі",
"createNewTag": "Стварыць новы тэг",
"tag": "Тэг",
"create": "Стварыць",
"editTag": "Рэдагаванне тэг",
"deleteTagTitle": "Выдаліць тэг?",
"viewRawCodes": "Паглядзець неапрацаваныя коды",
"rawCodes": "Неапрацаваныя коды",
"rawCodeData": "Неапрацаваныя даныя кода",
"appLock": "Блакіроўка праграмы",
"autoLock": "Аўтаблакіроўка",
"immediately": "Адразу",
"reEnterPin": "Увядзіце PIN-код яшчэ раз",
"next": "Далей",
"tapToUnlock": "Націсніце для разблакіроўкі",
"deviceLock": "Блакіроўка прылады",
"hideContent": "Схаваць змест",
"pinLock": "Блакіроўка PIN'ам",
"enterPin": "Увядзіце PIN-код",
"setNewPin": "Задаць новы PIN",
"deselectAll": "Зняць выбар з усіх",
"selectAll": "Выбраць усе",
"plainHTML": "Звычайны HTML",
"advanced": "Пашыраныя",
"algorithm": "Алгарытм",
"type": "Тып",
"period": "Перыяд",
"digits": "Лічбы"
}

View File

@@ -173,6 +173,7 @@
"invalidQRCode": "Ungültiger QR-Code",
"noRecoveryKeyTitle": "Kein Wiederherstellungsschlüssel?",
"enterEmailHint": "Geben Sie Ihre E-Mail-Adresse ein",
"enterNewEmailHint": "Gib deine neue E-Mail-Adresse ein",
"invalidEmailTitle": "Ungültige E-Mail-Adresse",
"invalidEmailMessage": "Bitte geben Sie eine gültige E-Mail-Adresse ein.",
"deleteAccount": "Konto löschen",
@@ -517,5 +518,6 @@
"advanced": "Erweitert",
"algorithm": "Algorithmus",
"type": "Typ",
"period": "Periode",
"digits": "Ziffern"
}

View File

@@ -173,6 +173,7 @@
"invalidQRCode": "Invalid QR code",
"noRecoveryKeyTitle": "No recovery key?",
"enterEmailHint": "Enter your email address",
"enterNewEmailHint": "Enter your new email address",
"invalidEmailTitle": "Invalid email address",
"invalidEmailMessage": "Please enter a valid email address.",
"deleteAccount": "Delete account",

View File

@@ -173,6 +173,7 @@
"invalidQRCode": "QR code non valide",
"noRecoveryKeyTitle": "Pas de clé de récupération ?",
"enterEmailHint": "Entrez votre adresse e-mail",
"enterNewEmailHint": "Saisissez votre nouvelle adresse email",
"invalidEmailTitle": "Adresse e-mail invalide",
"invalidEmailMessage": "Veuillez saisir une adresse e-mail valide.",
"deleteAccount": "Supprimer le compte",
@@ -514,5 +515,9 @@
"loginWithAuthAccount": "Connectez-vous avec votre compte Auth",
"freeStorageOffer": "10% de réduction sur <bold-green>Ente</bold-green> Photos",
"freeStorageOfferDescription": "Utilisez le code coupon \"AUTH\" pour obtenir 10% de réduction la première année",
"period": "Période"
"advanced": "Avancé",
"algorithm": "Algorithme",
"type": "Type",
"period": "Période",
"digits": "Chiffres"
}

View File

@@ -173,6 +173,7 @@
"invalidQRCode": "Érvénytelen QR-kód",
"noRecoveryKeyTitle": "Nincs helyreállítási kulcs?",
"enterEmailHint": "Adja meg az e-mail címét",
"enterNewEmailHint": "Add meg az új e-mail címed",
"invalidEmailTitle": "Érvénytelen e-mail cím",
"invalidEmailMessage": "Kérjük, adjon meg egy érvényes e-mail címet.",
"deleteAccount": "Fiók törlése",
@@ -513,5 +514,6 @@
"free5GB": "5GB ingyen <bold-green>ente <bold-green> Photos",
"loginWithAuthAccount": "Jelentkezzen be Auth fiókjával",
"freeStorageOffer": "10% kedvezmény on <bold-green>ente<bold-green> photos",
"freeStorageOfferDescription": "Használja az \"AUTH\" kódot, hogy 10% kedvezményt kapjon az első évben"
"freeStorageOfferDescription": "Használja az \"AUTH\" kódot, hogy 10% kedvezményt kapjon az első évben",
"type": "Típus"
}

View File

@@ -88,6 +88,8 @@
"useRecoveryKey": "Gunakan kunci pemulihan",
"incorrectPasswordTitle": "Kata sandi salah",
"welcomeBack": "Selamat datang kembali!",
"emailAlreadyRegistered": "Email sudah terdaftar.",
"emailNotRegistered": "Email belum terdaftar.",
"madeWithLoveAtPrefix": "dibuat dengan ❤️ di ",
"supportDevs": "Berlangganan <bold-green>ente</bold-green> untuk mendukung kami",
"supportDiscount": "Gunakan kode kupon \"AUTH\" untuk mendapatkan potongan 10% untuk tahun pertama",
@@ -171,6 +173,7 @@
"invalidQRCode": "Kode QR tidak valid",
"noRecoveryKeyTitle": "Tidak punya kunci pemulihan?",
"enterEmailHint": "Masukkan alamat email Anda",
"enterNewEmailHint": "Masukkan alamat email baru anda",
"invalidEmailTitle": "Alamat email tidak valid",
"invalidEmailMessage": "Harap masukkan alamat email yang valid.",
"deleteAccount": "Hapus akun",
@@ -501,5 +504,12 @@
"deselectAll": "Batalkan semua pilihan",
"selectAll": "Pilih semua",
"deleteDuplicates": "Hapus duplikat",
"plainHTML": "HTML Sederhana"
"plainHTML": "HTML Sederhana",
"tellUsWhatYouThink": "Berikan pendapatmu",
"dropReviewAndroid": "Berikan ulasan di Play Store",
"advanced": "Lanjutan",
"algorithm": "Algoritma",
"type": "Tipe",
"period": "Periode",
"digits": "Digit"
}

View File

@@ -173,6 +173,7 @@
"invalidQRCode": "Codice QR non valido",
"noRecoveryKeyTitle": "Nessuna chiave di recupero?",
"enterEmailHint": "Inserisci il tuo indirizzo email",
"enterNewEmailHint": "Inserisci il tuo nuovo indirizzo email",
"invalidEmailTitle": "Indirizzo email non valido",
"invalidEmailMessage": "Inserisci un indirizzo email valido.",
"deleteAccount": "Elimina account",

View File

@@ -0,0 +1 @@
{}

View File

@@ -173,6 +173,7 @@
"invalidQRCode": "Ongeldige QR-code",
"noRecoveryKeyTitle": "Geen herstelsleutel?",
"enterEmailHint": "Voer je e-mailadres in",
"enterNewEmailHint": "Voer uw nieuwe e-mailadres in",
"invalidEmailTitle": "Ongeldig e-mailadres",
"invalidEmailMessage": "Voer een geldig e-mailadres in.",
"deleteAccount": "Account verwijderen",
@@ -513,5 +514,10 @@
"free5GB": "5GB gratis op <bold-green>ente</bold-green> Photos",
"loginWithAuthAccount": "Log in met je Auth account",
"freeStorageOffer": "10% korting op <bold-green>ente</bold-green> photos",
"freeStorageOfferDescription": "Gebruik de code \"AUTH\" voor 10% korting op je eerste jaar"
"freeStorageOfferDescription": "Gebruik de code \"AUTH\" voor 10% korting op je eerste jaar",
"advanced": "Geavanceerd",
"algorithm": "Algoritme",
"type": "Type",
"period": "Periode",
"digits": "Cijfers"
}

View File

@@ -173,6 +173,7 @@
"invalidQRCode": "Nieprawidłowy kod QR",
"noRecoveryKeyTitle": "Brak klucza odzyskiwania?",
"enterEmailHint": "Wprowadź adres e-mail",
"enterNewEmailHint": "Wprowadź nowy adres e-mail",
"invalidEmailTitle": "Nieprawidłowy adres e-mail",
"invalidEmailMessage": "Prosimy podać prawidłowy adres e-mail.",
"deleteAccount": "Usuń konto",

View File

@@ -173,6 +173,7 @@
"invalidQRCode": "QR Code inválido",
"noRecoveryKeyTitle": "Sem chave de recuperação?",
"enterEmailHint": "Insira o endereço de e-mail",
"enterNewEmailHint": "Insira seu novo e-mail",
"invalidEmailTitle": "Endereço de e-mail inválido",
"invalidEmailMessage": "Insira um endereço de e-mail válido.",
"deleteAccount": "Excluir conta",

View File

@@ -0,0 +1,523 @@
{
"account": "Налог",
"unlock": "Откључај",
"recoveryKey": "Резервни Кључ",
"counterAppBarTitle": "Бројач",
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "Сигурносно правити копију 2ФА кôдова",
"onBoardingGetStarted": "Почети",
"setupFirstAccount": "Подесити свој први налог",
"importScanQrCode": "Скенирај QR кôд",
"qrCode": "QR кôд",
"importEnterSetupKey": "Унети кључ за подешавање",
"importAccountPageTitle": "Унети детаље налога",
"secretCanNotBeEmpty": "Тајна не може бити празна",
"bothIssuerAndAccountCanNotBeEmpty": "И издавалац и рачун не могу бити празни",
"incorrectDetails": "Погрешни детаљи",
"pleaseVerifyDetails": "Проверите детаље и покушајте поново",
"codeIssuerHint": "Издавач",
"codeSecretKeyHint": "Тајни кључ",
"secret": "Тајна",
"all": "Све",
"notes": "Белешке",
"notesLengthLimit": "Белешке могу имати највише {count} знакова",
"@notesLengthLimit": {
"description": "Text to indicate the maximum number of characters allowed for notes",
"placeholders": {
"count": {
"description": "The maximum number of characters allowed for notes",
"type": "int",
"example": "100"
}
}
},
"codeAccountHint": "Налог (you@domain.com)",
"codeTagHint": "Ознака",
"accountKeyType": "Тип кључа",
"sessionExpired": "Сесија је истекла",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "Молимо да се поново пријавите",
"loggingOut": "Одјављивање...",
"timeBasedKeyType": "Временски (TOTP)",
"counterBasedKeyType": "На основу бројања (HOTP)",
"saveAction": "Сачувај",
"nextTotpTitle": "следеће",
"deleteCodeTitle": "Обрисати кôд?",
"deleteCodeMessage": "Сигурно желите да избришете овај кôд? Ова акција је неповратна.",
"trashCode": "Кôд у смеће?",
"trashCodeMessage": "Сигурно желите да поставите кôд у смеће за {account}?",
"trash": "Смеће",
"viewLogsAction": "Прегледај извештаје",
"sendLogsDescription": "Ово ће делите ваше записе како би нам помогли да вам исправимо проблем. Док преузмемо мере предострожности да осигурамо да осетљиве информације нису пријављене, охрабрујемо вас да прегледате ове записе пре него што их делите.",
"preparingLogsTitle": "Спремање извештаја...",
"emailLogsTitle": "Имејловати извештаје",
"emailLogsMessage": "Пошаљите извештаје на {email}",
"@emailLogsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"copyEmailAction": "Копирати имејл",
"exportLogsAction": "Извези изештаје",
"reportABug": "Пријави грешку",
"crashAndErrorReporting": "Пријављивање дања и грешке",
"reportBug": "Пријaви грешку",
"emailUsMessage": "Пошаљите нам имејл на {email}",
"@emailUsMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"contactSupport": "Контактирати подршку",
"rateUsOnStore": "Оцените нас на {storeName}",
"blog": "Блог",
"merchandise": "Роба",
"verifyPassword": "Верификујте лозинку",
"pleaseWait": "Молимо сачекајте...",
"generatingEncryptionKeysTitle": "Генерисање кључева за шифровање...",
"recreatePassword": "Поново креирати лозинку",
"recreatePasswordMessage": "Тренутни уређај није довољно моћан да потврди вашу лозинку, тако да је морамо да регенеришемо једном на начин који ради са свим уређајима. \n\nПријавите се помоћу кључа за опоравак и обновите своју лозинку (можете поново користити исту ако желите).",
"useRecoveryKey": "Користите кључ за опоравак",
"incorrectPasswordTitle": "Неисправна лозинка",
"welcomeBack": "Добродошли назад!",
"emailAlreadyRegistered": "Имејл је већ регистрован.",
"emailNotRegistered": "Имејл није регистрован.",
"madeWithLoveAtPrefix": "урађено са ❤️ на ",
"supportDevs": "Претплатити се на <bold-green>ente</bold-green> да би нас подржали",
"supportDiscount": "Употребите купон \"AUTH\" да би добили попуст од 10% прве године",
"changeEmail": "Промени имејл",
"changePassword": "Промени лозинку",
"data": "Подаци",
"importCodes": "Увоз кôдова",
"importTypePlainText": "Обичан текст",
"importTypeEnteEncrypted": "Ente шифрован извоз",
"passwordForDecryptingExport": "Лозинка за дешифровање извоза",
"passwordEmptyError": "Лозинка не може да буде празна",
"importFromApp": "Увоз кôдова од {appName}",
"importGoogleAuthGuide": "Извезите своје рачуне од Google Authenticator на QR кôд помоћу опције \"Трансфер налоге\". Затим помоћу другог уређаја скенирајте QR кôд.\n\nСавет: можете користити веб камеру вашег лаптопа да бисте снимили слику QR кôда.",
"importSelectJsonFile": "Одабрати JSON датотеку",
"importSelectAppExport": "Одабрати извозну датотеку {appName}-а",
"importEnteEncGuide": "Одабрати шифровану извозну JSON датотеку од Ente",
"importRaivoGuide": "Употребите \"Export OTPs to Zip archive\" опцију из подешавања Raivo-а.\n\nИздвојите zip датотеку и увезите JSON датотеку.",
"importBitwardenGuide": "Употребите \"Извоз Сефа\" из Bitwarden и увезите нешифровану JSON датотеку.",
"importAegisGuide": "Употребити \"Export the vault\" из Aegis-а.\n\nАко је сеф шифрован, мораћете унети лозинку сефа да би га дешифровали.",
"import2FasGuide": "Употребити \"Settings->Backup -Export\" из 2FAS-а.\n\nАко је ваша копија шифрирана, мораћете да унесете лозинку за дешифрирање копије",
"importLastpassGuide": "Употребити \"Transfer accounts\" из Lastpass Authenticator и стисните \"Export accounts to file\". Унесите преузет JSON.",
"exportCodes": "Извоз кôдова",
"importLabel": "Увоз",
"importInstruction": "Изаберите датотеку која садржи списак ваших кôдова у следећем формату",
"importCodeDelimiterInfo": "Кôдови се могу одвојити зарезом или новом линијом",
"selectFile": "Изаберите датотеку",
"emailVerificationToggle": "Имејл провера",
"emailVerificationEnableWarning": "Да бисте избегли да се закључате са свог рачуна, обавезно чувајте копију 2ФА имејла ван Ente Auth пре него што омогућите имејл верификацију.",
"authToChangeEmailVerificationSetting": "Потврдите аутентичност да промените верификацији имејл",
"authenticateGeneric": "Молимо потврдите аутентичност",
"authToViewYourRecoveryKey": "Аутентификујте се да бисте погледали кључ за опоравак",
"authToChangeYourEmail": "Аутентификујте се да бисте променили имејл",
"authToChangeYourPassword": "Аутентификујте се да бисте променили лозинку",
"authToViewSecrets": "Аутентификујте се да бисте прегледали Ваше тајне",
"authToInitiateSignIn": "Аутентификујте се да бисте почели пријављивање за копију.",
"ok": "У реду",
"cancel": "Откажи",
"yes": "Да",
"no": "Не",
"email": "Имејл",
"support": "Подршка",
"general": "Опште",
"settings": "Подешавања",
"copied": "Копирано",
"pleaseTryAgain": "Пробајте поново",
"existingUser": "Постојећи корисник",
"newUser": "Нов у Ente",
"delete": "Обриши",
"enterYourPasswordHint": "Унесите лозинку",
"forgotPassword": "Заборавио сам лозинку",
"oops": "Упс",
"suggestFeatures": "Предложи карактеристике",
"faq": "Питања",
"somethingWentWrongMessage": "Нешто је пошло наопако, покушајте поново",
"leaveFamily": "Напусти family претплату",
"leaveFamilyMessage": "Јесте ли сигурни да желите да напустите family чланство?",
"inFamilyPlanMessage": "Имате family чланство!",
"hintForMobile": "Дуго притисните кôд за уређивање или уклањање.",
"hintForDesktop": "Десни клик на кôд за уређивање или уклањање.",
"scan": "Скенирај",
"scanACode": "Скенирај кôд",
"verify": "Верификуј",
"verifyEmail": "Потврди имејл",
"enterCodeHint": "Унесите 6-цифрени кôд из\nапликације за аутентификацију",
"lostDeviceTitle": "Узгубили сте уређај?",
"twoFactorAuthTitle": "Дво-факторска аутентификација",
"passkeyAuthTitle": "Верификација сигурносном кључем",
"verifyPasskey": "Проверите сигурносни кључ",
"loginWithTOTP": "Пријава са TOTP",
"recoverAccount": "Опоравак налога",
"enterRecoveryKeyHint": "Унети кључ за опоравак",
"recover": "Опорави",
"contactSupportViaEmailMessage": "Послати имејл на {email} са регистрованог имејла",
"@contactSupportViaEmailMessage": {
"placeholders": {
"email": {
"type": "String"
}
}
},
"invalidQRCode": "Неважећи QR кôд",
"noRecoveryKeyTitle": "Немате кључ за опоравак?",
"enterEmailHint": "Унесите Ваш имејл",
"enterNewEmailHint": "Унесите Ваш нови имејл",
"invalidEmailTitle": "Погрешна имејл адреса",
"invalidEmailMessage": "Унесите важећи имејл.",
"deleteAccount": "Избриши налог",
"deleteAccountQuery": "Жао нам је што одлазите. Да ли се суочавате са неком грешком?",
"yesSendFeedbackAction": "Да, послати повратне информације",
"noDeleteAccountAction": "Не, избрисати налог",
"initiateAccountDeleteTitle": "Молимо вас да се аутентификујете за брисање рачуна",
"sendEmail": "Шаљи имејл",
"createNewAccount": "Креирај нови налог",
"weakStrength": "Слабо",
"strongStrength": "Јако",
"moderateStrength": "Умерено",
"confirmPassword": "Потврдите лозинку",
"close": "Затвори",
"oopsSomethingWentWrong": "Нешто није у реду.",
"selectLanguage": "Изабери језик",
"language": "Језик",
"social": "Друштвене мреже",
"security": "Безбедност",
"lockscreen": "Закључавање екрана",
"authToChangeLockscreenSetting": "Аутентификујте се да бисте променили закључавање екрана",
"deviceLockEnablePreSteps": "Да бисте омогућили закључавање уређаја, молимо вас да подесите шифру уређаја или закључавање екрана у системским подешавањима.",
"viewActiveSessions": "Видети активне сесије",
"authToViewYourActiveSessions": "Аутентификујте се да бисте преглеадали активне сесије",
"searchHint": "Претрага...",
"search": "Претрага",
"sorryUnableToGenCode": "Извините, не могу да генеришем кôд за {issuerName}",
"noResult": "Нема резултата",
"addCode": "Додај кôд",
"scanAQrCode": "Скенирај QR кôд",
"enterDetailsManually": "Ручно унети детеље",
"edit": "Уреди",
"share": "Подели",
"shareCodes": "Дели кôдове",
"shareCodesDuration": "Изаберите трајање за које желите да поделите кôдове.",
"restore": "Врати",
"copiedToClipboard": "Копирано у оставу",
"copiedNextToClipboard": "Копирали следећи кôд у остави",
"error": "Грешка",
"recoveryKeyCopiedToClipboard": "Кључ за опоравак копирано у остави",
"recoveryKeyOnForgotPassword": "Ако заборавите лозинку, једини начин на који можете повратити податке је са овим кључем.",
"recoveryKeySaveDescription": "Не чувамо овај кључ, молимо да сачувате кључ од 24 речи на сигурном месту.",
"doThisLater": "Уради то касније",
"saveKey": "Сачувај кључ",
"save": "Сачувај",
"send": "Пошаљи",
"saveOrSendDescription": "Да ли желите да ово сачувате у складиште (фасцикли за преузимање подразумевано) или да га пошаљете другим апликацијама?",
"saveOnlyDescription": "Да ли желите да ово сачувате у складиште (фасцикли за преузимање подразумевано)?",
"back": "Назад",
"createAccount": "Направи налог",
"passwordStrength": "Снага лозинке: {passwordStrengthValue}",
"@passwordStrength": {
"description": "Text to indicate the password strength",
"placeholders": {
"passwordStrengthValue": {
"description": "The strength of the password as a string",
"type": "String",
"example": "Weak or Moderate or Strong"
}
},
"message": "Password Strength: {passwordStrengthText}"
},
"password": "Лозинка",
"signUpTerms": "Прихватам <u-terms>услове сервиса</u-terms> и <u-policy>политику приватности</u-policy>",
"privacyPolicyTitle": "Политика приватности",
"termsOfServicesTitle": "Услови",
"encryption": "Шифровање",
"setPasswordTitle": "Постави лозинку",
"changePasswordTitle": "Промени лозинку",
"resetPasswordTitle": "Ресетуј лозинку",
"encryptionKeys": "Кључеве шифровања",
"passwordWarning": "Не чувамо ову лозинку, па ако је заборавите, <underline>не можемо дешифрирати ваше податке</underline>",
"enterPasswordToEncrypt": "Унесите лозинку за употребу за шифровање ваших података",
"enterNewPasswordToEncrypt": "Унесите нову лозинку за употребу за шифровање ваших података",
"passwordChangedSuccessfully": "Лозинка је успешно промењена",
"generatingEncryptionKeys": "Генерисање кључева за шифровање...",
"continueLabel": "Настави",
"insecureDevice": "Уређај није сигуран",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Извините, не можемо да генеришемо сигурне кључеве на овом уређају.\n\nМолимо пријавите се са другог уређаја.",
"howItWorks": "Како то функционише",
"ackPasswordLostWarning": "Разумем да ако изгубим лозинку, могу изгубити своје податке пошто су <underline>шифрирани од краја до краја</underline>.",
"loginTerms": "Кликом на пријаву, прихватам <u-terms>услове сервиса</u-terms> и <u-policy>политику приватности</u-policy>",
"logInLabel": "Пријави се",
"logout": "Одјави ме",
"areYouSureYouWantToLogout": "Да ли сте сигурни да се одјавите?",
"yesLogout": "Да, одјави ме",
"exit": "Излаз",
"theme": "Тема",
"lightTheme": "Светла",
"darkTheme": "Tamna",
"systemTheme": "Систем",
"verifyingRecoveryKey": "Провера кључа за опоравак...",
"recoveryKeyVerified": "Кључ за опоравак је проверен",
"recoveryKeySuccessBody": "Сјајно! Ваш кључ за опоравак важи. Хвала за проверу.\n\nИмајте на уму да задржите кључ за опоравак на сигрном.",
"invalidRecoveryKey": "Кључ за опоравак који сте унели није валидан. Молимо вас да будете сигурни да садржи 24 речи и проверите правопис сваког.\n\nАко сте унели старији кôд за опоравак, проверите да ли је дугачак 64 знака и проверите сваки од њих.",
"recreatePasswordTitle": "Поново креирати лозинку",
"recreatePasswordBody": "Тренутни уређај није довољно моћан да потврди вашу лозинку, али можемо регенерирати на начин који ради са свим уређајима.\n\nПријавите се помоћу кључа за опоравак и обновите своју лозинку (можете поново користити исту ако желите).",
"invalidKey": "Неисправан кључ",
"tryAgain": "Покушај поново",
"viewRecoveryKey": "Видети кључ за опоравак",
"confirmRecoveryKey": "Потврдити кључ за опоравак",
"recoveryKeyVerifyReason": "Ваш кључ за опоравак је једини начин да се врате фотографије ако заборавите лозинку. Можете пронаћи свој кључ за опоравак у Подешавања> Рачун.\n\nОвдје унесите кључ за опоравак да бисте проверили да ли сте га исправно сачували.",
"confirmYourRecoveryKey": "Потврдити кључ за опоравак",
"confirm": "Потврди",
"emailYourLogs": "Имејлирајте извештаје",
"pleaseSendTheLogsTo": "Пошаљите извештаје на \n{toEmail}",
"copyEmailAddress": "Копирати имејл адресу",
"exportLogs": "Извези изештаје",
"enterYourRecoveryKey": "Унети кључ за опоравак",
"tempErrorContactSupportIfPersists": "Изгледа да је нешто погрешно. Покушајте поново након неког времена. Ако грешка настави, обратите се нашем тиму за подршку.",
"networkHostLookUpErr": "Није могуће повезивање са Ente-ом, молимо вас да проверите мрежне поставке и контактирајте подршку ако грешка и даље постоји.",
"networkConnectionRefusedErr": "Није могуће повезивање са Ente-ом, покушајте поново мало касније. Ако грешка настави, обратите се подршци.",
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Изгледа да је нешто погрешно. Покушајте поново након неког времена. Ако грешка настави, обратите се нашем тиму за подршку.",
"about": "О програму",
"weAreOpenSource": "Користимо отворени извор!",
"privacy": "Приватност",
"terms": "Услови",
"checkForUpdates": "Провери ажурирања",
"checkStatus": "Провери статус",
"downloadUpdate": "Преузми",
"criticalUpdateAvailable": "Критично ажурирање је доступно",
"updateAvailable": "Доступно ажурирање",
"update": "Ажурирај",
"checking": "Провера...",
"youAreOnTheLatestVersion": "Користите најновију верзију",
"warning": "Упозорење",
"exportWarningDesc": "Извозна датотека садржи осетљиве информације. Молимо вас да је чувате на сигурно.",
"iUnderStand": "Разумем",
"@iUnderStand": {
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "Аутентификујте се да бисте извезли кôдове",
"importSuccessTitle": "Jeeee!",
"importSuccessDesc": "Увели сте {count} кôдова!",
"@importSuccessDesc": {
"placeholders": {
"count": {
"description": "The number of codes imported",
"type": "int",
"example": "1"
}
}
},
"sorry": "Жао ми је",
"importFailureDesc": "Нисам могао да анализирам изабрану датотеку.\nПишите на support@ente.io ако вам је потребна помоћ!",
"pendingSyncs": "Упозорење",
"pendingSyncsWarningBody": "Неки од ваших кôдова нису сачувани.\n\nМолимо вас осигурајте да имате резервну копију за ове кôдове пре него што се одјавите.",
"checkInboxAndSpamFolder": "Молимо вас да проверите примљену пошту (и нежељену пошту) да бисте довршили верификацију",
"tapToEnterCode": "Пипните да бисте унели кôд",
"resendEmail": "Поново послати имејл",
"weHaveSendEmailTo": "Послали смо имејл на <green>{email}</green>",
"@weHaveSendEmailTo": {
"description": "Text to indicate that we have sent a mail to the user",
"placeholders": {
"email": {
"description": "The email address of the user",
"type": "String",
"example": "example@ente.io"
}
}
},
"manualSort": "Прилагођено",
"editOrder": "Уреди поредак",
"mostFrequentlyUsed": "Често коришћено",
"mostRecentlyUsed": "Недавно коришћено",
"activeSessions": "Активне сесије",
"somethingWentWrongPleaseTryAgain": "Нешто је пошло наопако. Покушајте поново",
"thisWillLogYouOutOfThisDevice": "Ово ће вас одјавити из овог уређаја!",
"thisWillLogYouOutOfTheFollowingDevice": "Ово ће вас одјавити из овог уређаја:",
"terminateSession": "Прекинути сесију?",
"terminate": "Прекини",
"thisDevice": "Овај уређај",
"toResetVerifyEmail": "Да бисте ресетовали лозинку, прво потврдите свој имејл.",
"thisEmailIsAlreadyInUse": "Овај имејл је већ у употреби",
"verificationFailedPleaseTryAgain": "Неуспешна верификација, покушајте поново",
"yourVerificationCodeHasExpired": "Ваш верификациони кôд је истекао",
"incorrectCode": "Погрешан кôд",
"sorryTheCodeYouveEnteredIsIncorrect": "Унет кôд није добар",
"emailChangedTo": "Имејл промењен на {newEmail}",
"authenticationFailedPleaseTryAgain": "Аутентификација није успела, покушајте поново",
"authenticationSuccessful": "Успешна аутентификација!",
"twofactorAuthenticationSuccessfullyReset": "Двофакторска аутентификација успешно рисетирана",
"incorrectRecoveryKey": "Нетачан кључ за опоравак",
"theRecoveryKeyYouEnteredIsIncorrect": "Унети кључ за опоравак је натачан",
"enterPassword": "Унеси лозинку",
"selectExportFormat": "Изабрати формат извоза",
"exportDialogDesc": "Шифровани извоз ће бити заштићен лозинком по вашем избору.",
"encrypted": "Шифровано",
"plainText": "Обичан текст",
"passwordToEncryptExport": "Лозинка за шифровање извоза",
"export": "Извези",
"useOffline": "Користите без резервних копија",
"signInToBackup": "Пријавите се да бисте сачували кôдове",
"singIn": "Пријавите се",
"sigInBackupReminder": "Извезите кôдове да бисте имали резервну копију од које можете да их вратите.",
"offlineModeWarning": "Одлучили сте да наставите без резервних копија. Молимо примите ручне резервне копије да бисте били сигурни да су ваше кодове на сигурном.",
"showLargeIcons": "Прикажи велике иконе",
"compactMode": "Компактни режим",
"shouldHideCode": "Сакриј кодове",
"doubleTapToViewHiddenCode": "Можете да двапут додирнете унос да бисте видели кôд",
"focusOnSearchBar": "Фокус на претрагу на покретање",
"confirmUpdatingkey": "Јесте ли сигурни да желите да ажурирате тајну кључ?",
"minimizeAppOnCopy": "Умањи апликацију после копије",
"editCodeAuthMessage": "Аутентификуј се за уред кôда",
"deleteCodeAuthMessage": "Аутентификуј се за брсање кôда",
"showQRAuthMessage": "Аутентификуј се за приказ QR кôда",
"confirmAccountDeleteTitle": "Потврда брисања рачуна",
"confirmAccountDeleteMessage": "Овај налог је повезан са другим Ente апликацијама, ако користите било коју.\n\nВаши преношени подаци, на свим Ente апликацијама биће заказани за брисање, и ваш рачун ће се трајно избрисати.",
"androidBiometricHint": "Потврдите идентитет",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
},
"androidBiometricNotRecognized": "Нисмо препознали. Покушати поново.",
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
"androidBiometricSuccess": "Успех",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
"androidCancelButton": "Откажи",
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
"androidSignInTitle": "Потребна аутентификација",
"@androidSignInTitle": {
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
},
"androidBiometricRequiredTitle": "Потребна је биометрија",
"@androidBiometricRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsRequiredTitle": "Потребни су акредитиви уређаја",
"@androidDeviceCredentialsRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
},
"androidDeviceCredentialsSetupDescription": "Потребни су акредитиви уређаја",
"@androidDeviceCredentialsSetupDescription": {
"description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
},
"goToSettings": "Иди на поставке",
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
},
"androidGoToSettingsDescription": "Биометријска аутентификација није постављена на вашем уређају. Идите на \"Подешавања> Сигурност\" да бисте додали биометријску аутентификацију.",
"@androidGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure biometric on their device. It shows in a dialog on Android side."
},
"iOSLockOut": "Биометријска аутентификација је онемогућена. Закључајте и откључите екран да бисте је омогућили.",
"@iOSLockOut": {
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
},
"iOSGoToSettingsDescription": "Биометријска аутентификација није постављена на вашем уређају. Молимо или омогућите Touch ID или Face ID.",
"@iOSGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side."
},
"iOSOkButton": "У реду",
"@iOSOkButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
},
"noInternetConnection": "Нема интернет везе",
"pleaseCheckYourInternetConnectionAndTryAgain": "Провери своју везу са интернетом и покушај поново.",
"signOutFromOtherDevices": "Одјави се из других уређаја",
"signOutOtherBody": "Ако мислиш да неко може знати твоју лозинку, можеш приморати одјављивање све остале уређаје које користе твој налог.",
"signOutOtherDevices": "Одјави друге уређаје",
"doNotSignOut": "Не одјави",
"hearUsWhereTitle": "Како сте чули о Ente? (опционо)",
"hearUsExplanation": "Не пратимо инсталацију апликације. Помогло би да нам кажеш како си нас нашао!",
"recoveryKeySaved": "Кључ за опоравак сачуван у фасцикли за преузимање!",
"waitingForBrowserRequest": "Чека се захтев за претраживач...",
"waitingForVerification": "Чека се верификација...",
"passkey": "Кључ за приступ",
"passKeyPendingVerification": "Верификација је још у току",
"loginSessionExpired": "Сесија је истекла",
"loginSessionExpiredDetails": "Ваша сесија је истекла. Молимо пријавите се поново.",
"developerSettingsWarning": "Сигурно желиш да промениш подешавања за програмере?",
"developerSettings": "Подешавања за програмере",
"serverEndpoint": "Крајња тачка сервера",
"invalidEndpoint": "Погрешна крајња тачка",
"invalidEndpointMessage": "Извини, крајња тачка коју си унео је неважећа. Унеси важећу крајњу тачку и покушај поново.",
"endpointUpdatedMessage": "Крајна тачка успешно ажурирана",
"customEndpoint": "Везано за {endpoint}",
"pinText": "Закачи",
"unpinText": "Откачи",
"pinnedCodeMessage": "{code} је прикачен",
"unpinnedCodeMessage": "{code} је одкачен",
"pinned": "Прикачено",
"tags": "Ознаке",
"createNewTag": "Креирај нову ознаку",
"tag": "Ознака",
"create": "Направи",
"editTag": "Уреди ознаку",
"deleteTagTitle": "Обрисати ознаку?",
"deleteTagMessage": "Сигурно желите да избришете ову ознаку? Ова акција је неповратна.",
"somethingWentWrongParsingCode": "Нисмо били у стању да рашчланимо {x} кôдова.",
"updateNotAvailable": "Ажурирање није доступно",
"viewRawCodes": "Погледајте сирове кôдове",
"rawCodes": "Сирове кôдове",
"rawCodeData": "Податак сировог кôда",
"appLock": "Закључавање апликације",
"noSystemLockFound": "Није пронађено ниједно закључавање система",
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Да бисте омогућили закључавање апликације, молимо вас да подесите шифру уређаја или закључавање екрана у системским подешавањима.",
"autoLock": "Ауто-закључавање",
"immediately": "Одмах",
"reEnterPassword": "Поново унеси лозинку",
"reEnterPin": "Поново унеси ПИН",
"next": "Следеће",
"tooManyIncorrectAttempts": "Превише погрешних покушаја",
"tapToUnlock": "Додирните да бисте откључали",
"setNewPassword": "Постави нову лозинку",
"deviceLock": "Закључавање уређаја",
"hideContent": "Сакриј садржај",
"hideContentDescriptionAndroid": "Сакрива садржај апликације у пребацивање апликација и онемогућује снимке екрана",
"hideContentDescriptioniOS": "Сакрива садржај апликације у пребацивање апликација",
"autoLockFeatureDescription": "Време након којег се апликација блокира након што је постављенеа у позадину",
"appLockDescription": "Изаберите између заданог закључавање екрана вашег уређаја и прилагођени екран за закључавање са ПИН-ом или лозинком.",
"pinLock": "ПИН клокирање",
"enterPin": "Унеси ПИН",
"setNewPin": "Постави нови ПИН",
"importFailureDescNew": "Није могао да анализира изабрану датотеку.",
"appLockNotEnabled": "Блокирање апликације није упаљено",
"appLockNotEnabledDescription": "Молимо упалие блокирање апликације на Безбедност > Блокирај апликацију",
"authToViewPasskey": "Аутентификујте се да бисте прегледали кључ",
"appLockOfflineModeWarning": "Одлучили сте да наставите без резервних копија. Ако заборавите лозинку, нећете моћи да приступите својим подацима.",
"duplicateCodes": "Дупликатни кодови",
"noDuplicates": "✨ Нема дупликата",
"youveNoDuplicateCodesThatCanBeCleared": "Немате дупликатне кодове који се могу очистити",
"deduplicateCodes": "Дедуплицирај кодове",
"deselectAll": "Поништи избор свега",
"selectAll": "Изабери све",
"deleteDuplicates": "Обриши дупликате",
"plainHTML": "HTML",
"tellUsWhatYouThink": "Реци нам шта мислиш",
"dropReviewiOS": "Напиши мишљење на App Store",
"dropReviewAndroid": "Напиши мишљење на Play Store",
"supportEnte": "Подржи <bold-green>ente</bold-green>",
"giveUsAStarOnGithub": "Дај нам звездицу на Github",
"free5GB": "5GB бесплатно на <bold-green>ente</bold-green> Photos",
"loginWithAuthAccount": "Пријави се са твојим Auth налогом",
"freeStorageOffer": "Попуст од 10% на <bold-green>ente</bold-green> photos",
"freeStorageOfferDescription": "Употребите кôд \"AUTH\" да би добили попуст од 10% прве године",
"advanced": "Напредно",
"algorithm": "Алгоритам",
"type": "Тип",
"period": "Период",
"digits": "Цифре"
}

View File

@@ -173,6 +173,7 @@
"invalidQRCode": "Ogiltig QR-kod",
"noRecoveryKeyTitle": "Ingen återställningsnyckel?",
"enterEmailHint": "Ange din e-postadress",
"enterNewEmailHint": "Ange din nya e-postadress",
"invalidEmailTitle": "Ogiltig e-postadress",
"invalidEmailMessage": "Ange en giltig e-postadress.",
"deleteAccount": "Radera konto",
@@ -368,16 +369,19 @@
"signInToBackup": "Logga in för att säkerhetskopiera dina koder",
"singIn": "Logga in",
"sigInBackupReminder": "Vänligen exportera dina koder för att säkerställa att du har en säkerhetskopia som du kan återställa från.",
"offlineModeWarning": "Du har valt att fortsätta utan säkerhetskopior. Vänligen ta manuella säkerhetskopior för att se till att dina koder är säkra.",
"showLargeIcons": "Visa stora ikoner",
"compactMode": "Kompakt läge",
"shouldHideCode": "Dölj koder",
"doubleTapToViewHiddenCode": "Du kan dubbeltrycka på en post för att visa koden",
"focusOnSearchBar": "Fokusera på sök vid appstart",
"confirmUpdatingkey": "Är du säker på att du vill uppdatera den hemliga nyckeln?",
"minimizeAppOnCopy": "Minimera appen vid kopiering",
"editCodeAuthMessage": "Autentisera för att redigera kod",
"deleteCodeAuthMessage": "Autentisera för att radera kod",
"showQRAuthMessage": "Autentisera för att visa QR-kod",
"confirmAccountDeleteTitle": "Bekräfta radering av kontot",
"confirmAccountDeleteMessage": "Detta konto är kopplat till andra Ente apps, om du använder någon.\n\nDina uppladdade data, över alla Ente appar, kommer att schemaläggas för radering och ditt konto kommer att raderas permanent.",
"androidBiometricHint": "Verifiera identitet",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
@@ -414,6 +418,18 @@
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
},
"androidGoToSettingsDescription": "Biometrisk autentisering är inte konfigurerad på din enhet. Gå till \"Inställningar > Säkerhet\" för att lägga till biometrisk autentisering.",
"@androidGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure biometric on their device. It shows in a dialog on Android side."
},
"iOSLockOut": "Biometrisk autentisering är inaktiverat. Lås och lås upp din skärm för att aktivera den.",
"@iOSLockOut": {
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
},
"iOSGoToSettingsDescription": "Biometrisk autentisering är inte konfigurerad på din enhet. Aktivera antingen Touch ID eller Face ID på din telefon.",
"@iOSGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side."
},
"iOSOkButton": "OK",
"@iOSOkButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
@@ -421,6 +437,7 @@
"noInternetConnection": "Ingen internetanslutning",
"pleaseCheckYourInternetConnectionAndTryAgain": "Kontrollera din internetanslutning och försök igen.",
"signOutFromOtherDevices": "Logga ut från andra enheter",
"signOutOtherBody": "Om du tror att någon kanske känner till ditt lösenord kan du tvinga alla andra enheter med ditt konto att logga ut.",
"signOutOtherDevices": "Logga ut andra enheter",
"doNotSignOut": "Logga inte ut",
"hearUsWhereTitle": "Hur hörde du talas om Ente? (valfritt)",
@@ -450,6 +467,7 @@
"create": "Skapa",
"editTag": "Redigera tagg",
"deleteTagTitle": "Radera tagg?",
"deleteTagMessage": "Vill du ta bort den här koden? Det går inte att ångra den här åtgärden.",
"somethingWentWrongParsingCode": "Vi kunde inte tolka {x} koder.",
"updateNotAvailable": "Uppdateringen är inte tillgänglig",
"viewRawCodes": "Visa råa koder",

View File

@@ -173,6 +173,7 @@
"invalidQRCode": "Geçersiz QR kodu",
"noRecoveryKeyTitle": "Kurtarma anahtarınız yok mu?",
"enterEmailHint": "E-posta adresinizi girin",
"enterNewEmailHint": "Yeni e-posta adresinizi girin",
"invalidEmailTitle": "Geçersiz e-posta adresi",
"invalidEmailMessage": "Lütfen geçerli bir e-posta adresi girin.",
"deleteAccount": "Hesabı sil",

View File

@@ -173,6 +173,7 @@
"invalidQRCode": "二维码无效",
"noRecoveryKeyTitle": "没有恢复密钥吗?",
"enterEmailHint": "请输入您的电子邮件地址",
"enterNewEmailHint": "请输入您的新电子邮件地址",
"invalidEmailTitle": "无效的电子邮件地址",
"invalidEmailMessage": "请输入一个有效的电子邮件地址。",
"deleteAccount": "删除账户",

View File

@@ -173,6 +173,7 @@
"invalidQRCode": "QR 碼無效",
"noRecoveryKeyTitle": "沒有復原密鑰嗎?",
"enterEmailHint": "請輸入您的電子郵件地址",
"enterNewEmailHint": "輸入你的新電子郵件地址",
"invalidEmailTitle": "無效的電子郵件地址",
"invalidEmailMessage": "請輸入一個有效的電子郵件地址。",
"deleteAccount": "刪除帳戶",

View File

@@ -14,7 +14,6 @@ import 'package:ente_auth/services/billing_service.dart';
import 'package:ente_auth/services/notification_service.dart';
import 'package:ente_auth/services/preference_service.dart';
import 'package:ente_auth/services/update_service.dart';
import 'package:ente_auth/services/user_remote_flag_service.dart';
import 'package:ente_auth/services/user_service.dart';
import 'package:ente_auth/services/window_listener_service.dart';
import 'package:ente_auth/store/code_display_store.dart';
@@ -87,19 +86,6 @@ void main() async {
}
}
// Future<void> whiteListLetsEncryptRootCA() async {
// try {
// // https://stackoverflow.com/a/71090239
// // https://github.com/ente-io/ente/issues/2178
// ByteData data =
// await PlatformAssetBundle().load('assets/ca/lets-encrypt-r3.pem');
// SecurityContext.defaultContext
// .setTrustedCertificatesBytes(data.buffer.asUint8List());
// } catch (e) {
// _logger.severe("Failed to whitelist Let's Encrypt Root CA", e);
// }
// }
Future<void> _runInForeground() async {
final savedThemeMode = _themeMode(await AdaptiveTheme.getThemeMode());
return await _runWithLogs(() async {
@@ -116,7 +102,7 @@ Future<void> _runInForeground() async {
AppLock(
builder: (args) => App(locale: locale),
lockScreen: const LockScreen(),
enabled: await Configuration.instance.shouldShowLockScreen(),
enabled: await LockScreenSettings.instance.shouldShowLockScreen(),
locale: locale,
lightTheme: lightThemeData,
darkTheme: darkThemeData,
@@ -169,7 +155,6 @@ Future<void> _init(bool bool, {String? via}) async {
await Configuration.instance.init();
await Network.instance.init();
await UserService.instance.init();
await UserRemoteFlagService.instance.init();
await AuthenticatorService.instance.init();
await BillingService.instance.init();
await NotificationService.instance.init();

View File

@@ -13,6 +13,7 @@ import 'package:ente_auth/models/authenticator/auth_entity.dart';
import 'package:ente_auth/models/authenticator/auth_key.dart';
import 'package:ente_auth/models/authenticator/entity_result.dart';
import 'package:ente_auth/models/authenticator/local_auth_entity.dart';
import 'package:ente_auth/services/preference_service.dart';
import 'package:ente_auth/store/authenticator_db.dart';
import 'package:ente_auth/store/offline_authenticator_db.dart';
import 'package:ente_crypto_dart/ente_crypto_dart.dart';
@@ -194,8 +195,13 @@ class AuthenticatorService {
final int lastSyncTime = _prefs.getInt(_lastEntitySyncTime) ?? 0;
_logger.info("Current sync is $lastSyncTime");
const int fetchLimit = 500;
final List<AuthEntity> result =
late final List<AuthEntity> result;
late final int? epochTimeInMicroseconds;
(result, epochTimeInMicroseconds) =
await _gateway.getDiff(lastSyncTime, limit: fetchLimit);
PreferenceService.instance
.computeAndStoreTimeOffset(epochTimeInMicroseconds);
_logger.info("${result.length} entries fetched from remote");
if (result.isEmpty) {
return;

View File

@@ -1,6 +1,5 @@
import 'dart:io';
import 'package:ente_auth/core/configuration.dart';
import 'package:ente_auth/ui/settings/lock_screen/lock_screen_password.dart';
import 'package:ente_auth/ui/settings/lock_screen/lock_screen_pin.dart';
import 'package:ente_auth/ui/tools/app_lock.dart';
@@ -42,7 +41,7 @@ class LocalAuthenticationService {
isAuthenticatingForInAppChange: true,
);
AppLock.of(context)!.setEnabled(
await Configuration.instance.shouldShowLockScreen(),
await LockScreenSettings.instance.shouldShowLockScreen(),
);
if (!result) {
showToast(context, infoMessage);
@@ -114,12 +113,13 @@ class LocalAuthenticationService {
);
if (result) {
AppLock.of(context)!.setEnabled(shouldEnableLockScreen);
await Configuration.instance
await LockScreenSettings.instance
.setSystemLockScreen(shouldEnableLockScreen);
return true;
} else {
AppLock.of(context)!
.setEnabled(await Configuration.instance.shouldShowLockScreen());
AppLock.of(context)!.setEnabled(
await LockScreenSettings.instance.shouldShowLockScreen(),
);
}
} else {
// ignore: unawaited_futures

View File

@@ -18,6 +18,7 @@ class PreferenceService {
late final SharedPreferences _prefs;
static const kHasShownCoachMarkKey = "has_shown_coach_mark_v2";
static const kLocalTimeOffsetKey = "local_time_offset";
static const kShouldShowLargeIconsKey = "should_show_large_icons";
static const kShouldHideCodesKey = "should_hide_codes";
static const kShouldAutoFocusOnSearchBar = "should_auto_focus_on_search_bar";
@@ -114,4 +115,24 @@ class PreferenceService {
return installedTimeinMillis;
}
}
// localEpochOffsetInMilliSecond returns the local epoch offset in milliseconds.
// This is used to adjust the time for TOTP calculations when device local time is not in sync with actual time.
int timeOffsetInMilliSeconds() {
return _prefs.getInt(kLocalTimeOffsetKey) ?? 0;
}
void computeAndStoreTimeOffset(
int? epochTimeInMicroseconds,
) {
if (epochTimeInMicroseconds == null) {
_prefs.remove(kLocalTimeOffsetKey);
return;
}
int serverEpochTimeInMilliSecond = epochTimeInMicroseconds ~/ 1000;
int localEpochTimeInMilliSecond = DateTime.now().millisecondsSinceEpoch;
int localEpochOffset =
serverEpochTimeInMilliSecond - localEpochTimeInMilliSecond;
_prefs.setInt(kLocalTimeOffsetKey, localEpochOffset);
}
}

View File

@@ -1,141 +0,0 @@
import 'dart:async';
import 'dart:io';
import 'package:collection/collection.dart';
import 'package:dio/dio.dart';
import 'package:ente_auth/core/configuration.dart';
import 'package:ente_auth/core/event_bus.dart';
import 'package:ente_auth/core/network.dart';
import 'package:ente_auth/events/notification_event.dart';
import 'package:ente_auth/services/user_service.dart';
import 'package:logging/logging.dart';
import 'package:shared_preferences/shared_preferences.dart';
class UserRemoteFlagService {
final _dio = Network.instance.getDio();
final _logger = Logger((UserRemoteFlagService).toString());
final _config = Configuration.instance;
late SharedPreferences _prefs;
UserRemoteFlagService._privateConstructor();
static final UserRemoteFlagService instance =
UserRemoteFlagService._privateConstructor();
static const String recoveryVerificationFlag = "recoveryKeyVerified";
static const String needRecoveryKeyVerification =
"needRecoveryKeyVerification";
Future<void> init() async {
_prefs = await SharedPreferences.getInstance();
}
bool shouldShowRecoveryVerification() {
if (!_prefs.containsKey(needRecoveryKeyVerification)) {
// fetch the status from remote
unawaited(_refreshRecoveryVerificationFlag());
return false;
} else {
final bool shouldShow = _prefs.getBool(needRecoveryKeyVerification)!;
if (shouldShow) {
// refresh the status to check if user marked it as done on another device
unawaited(_refreshRecoveryVerificationFlag());
}
return shouldShow;
}
}
// markRecoveryVerificationAsDone is used to track if user has verified their
// recovery key in the past or not. This helps in avoid showing the same
// prompt to the user on re-install or signing into a different device
Future<void> markRecoveryVerificationAsDone() async {
await _updateKeyValue(recoveryVerificationFlag, true.toString());
await _prefs.setBool(needRecoveryKeyVerification, false);
}
Future<void> _refreshRecoveryVerificationFlag() async {
_logger.finest('refresh recovery key verification flag');
final remoteStatusValue =
await _getValue(recoveryVerificationFlag, "false");
final bool isNeedVerificationFlagSet =
_prefs.containsKey(needRecoveryKeyVerification);
if (remoteStatusValue.toLowerCase() == "true") {
await _prefs.setBool(needRecoveryKeyVerification, false);
// If the user verified on different device, then we should refresh
// the UI to dismiss the Notification.
if (isNeedVerificationFlagSet) {
Bus.instance.fire(NotificationEvent());
}
} else if (!isNeedVerificationFlagSet) {
// Verification is not done yet as remoteStatus is false and local flag to
// show notification isn't set. Set the flag to true if any active
// session is older than 1 day.
final activeSessions = await UserService.instance.getActiveSessions();
final int microSecondsInADay = const Duration(days: 1).inMicroseconds;
final bool anyActiveSessionOlderThanADay =
activeSessions.sessions.firstWhereOrNull(
(e) =>
(e.creationTime + microSecondsInADay) <
DateTime.now().microsecondsSinceEpoch,
) !=
null;
if (anyActiveSessionOlderThanADay) {
await _prefs.setBool(needRecoveryKeyVerification, true);
Bus.instance.fire(NotificationEvent());
} else {
// continue defaulting to no verification prompt
_logger.finest('No active session older than 1 day');
}
}
}
Future<String> _getValue(String key, String? defaultValue) async {
try {
final Map<String, dynamic> queryParams = {"key": key};
if (defaultValue != null) {
queryParams["defaultValue"] = defaultValue;
}
final response = await _dio.get(
"${_config.getHttpEndpoint()}/remote-store",
queryParameters: queryParams,
options: Options(
headers: {
"X-Auth-Token": _config.getToken(),
},
),
);
if (response.statusCode != HttpStatus.ok) {
throw Exception("Unexpected status code ${response.statusCode}");
}
return response.data["value"];
} catch (e) {
_logger.info("Error while fetching bool status for $key", e);
rethrow;
}
}
// _setBooleanFlag sets the corresponding flag on remote
// to mark recovery as completed
Future<void> _updateKeyValue(String key, String value) async {
try {
final response = await _dio.post(
"${_config.getHttpEndpoint()}/remote-store/update",
data: {
"key": key,
"value": value,
},
options: Options(
headers: {
"X-Auth-Token": _config.getToken(),
},
),
);
if (response.statusCode != HttpStatus.ok) {
throw Exception("Unexpected state");
}
} catch (e) {
_logger.warning("Failed to set flag for $key", e);
rethrow;
}
}
}

View File

@@ -18,7 +18,7 @@ class _ChangeEmailDialogState extends State<ChangeEmailDialog> {
Widget build(BuildContext context) {
final l10n = context.l10n;
return AlertDialog(
title: Text(l10n.enterEmailHint),
title: Text(l10n.enterNewEmailHint),
content: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,

View File

@@ -1,219 +0,0 @@
import 'package:bip39/bip39.dart' as bip39;
import 'package:dio/dio.dart';
import 'package:ente_auth/core/configuration.dart';
import 'package:ente_auth/ente_theme_data.dart';
import 'package:ente_auth/l10n/l10n.dart';
import 'package:ente_auth/services/local_authentication_service.dart';
import 'package:ente_auth/services/user_remote_flag_service.dart';
import 'package:ente_auth/ui/account/recovery_key_page.dart';
import 'package:ente_auth/ui/common/gradient_button.dart';
import 'package:ente_auth/ui/components/buttons/button_widget.dart';
import 'package:ente_auth/utils/dialog_util.dart';
import 'package:ente_auth/utils/navigation_util.dart';
import 'package:ente_auth/utils/platform_util.dart';
import 'package:ente_crypto_dart/ente_crypto_dart.dart';
import 'package:flutter/material.dart';
import 'package:logging/logging.dart';
class VerifyRecoveryPage extends StatefulWidget {
const VerifyRecoveryPage({super.key});
@override
State<VerifyRecoveryPage> createState() => _VerifyRecoveryPageState();
}
class _VerifyRecoveryPageState extends State<VerifyRecoveryPage> {
final _recoveryKey = TextEditingController();
final Logger _logger = Logger((_VerifyRecoveryPageState).toString());
void _verifyRecoveryKey() async {
final dialog =
createProgressDialog(context, context.l10n.verifyingRecoveryKey);
await dialog.show();
try {
final String inputKey = _recoveryKey.text.trim();
final String recoveryKey =
CryptoUtil.bin2hex(Configuration.instance.getRecoveryKey());
final String recoveryKeyWords = bip39.entropyToMnemonic(recoveryKey);
if (inputKey == recoveryKey || inputKey == recoveryKeyWords) {
try {
await UserRemoteFlagService.instance.markRecoveryVerificationAsDone();
} catch (e) {
await dialog.hide();
if (e is DioException && e.type == DioExceptionType.unknown) {
await showErrorDialog(
context,
"No internet connection",
"Please check your internet connection and try again.",
);
} else {
await showGenericErrorDialog(
context: context,
error: e,
);
}
return;
}
await dialog.hide();
// todo: change this as per figma once the component is ready
await showErrorDialog(
context,
context.l10n.recoveryKeyVerified,
context.l10n.recoveryKeySuccessBody,
);
Navigator.of(context).pop();
} else {
throw Exception("recovery key didn't match");
}
} catch (e, s) {
_logger.severe("failed to verify recovery key", e, s);
await dialog.hide();
final String errMessage = context.l10n.invalidRecoveryKey;
final result = await showChoiceDialog(
context,
title: context.l10n.invalidKey,
body: errMessage,
firstButtonLabel: context.l10n.tryAgain,
secondButtonLabel: context.l10n.viewRecoveryKey,
secondButtonAction: ButtonAction.second,
);
if (result!.action == ButtonAction.second) {
await _onViewRecoveryKeyClick();
}
}
}
Future<void> _onViewRecoveryKeyClick() async {
final hasAuthenticated =
await LocalAuthenticationService.instance.requestLocalAuthentication(
context,
"Please authenticate to view your recovery key",
);
await PlatformUtil.refocusWindows();
if (hasAuthenticated) {
String recoveryKey;
try {
recoveryKey =
CryptoUtil.bin2hex(Configuration.instance.getRecoveryKey());
await routeToPage(
context,
RecoveryKeyPage(
recoveryKey,
context.l10n.ok,
showAppBar: true,
onDone: () {
Navigator.of(context).pop();
},
),
);
} catch (e) {
// ignore: unawaited_futures
showGenericErrorDialog(
context: context,
error: e,
);
return;
}
}
}
@override
Widget build(BuildContext context) {
final enteTheme = Theme.of(context).colorScheme.enteTheme;
return Scaffold(
appBar: AppBar(
elevation: 0,
leading: IconButton(
icon: const Icon(Icons.arrow_back),
color: Theme.of(context).iconTheme.color,
onPressed: () {
Navigator.of(context).pop();
},
),
),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: LayoutBuilder(
builder: (context, constraints) {
return SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(
minWidth: constraints.maxWidth,
minHeight: constraints.maxHeight,
),
child: IntrinsicHeight(
child: Column(
children: [
const SizedBox(height: 12),
SizedBox(
width: double.infinity,
child: Text(
context.l10n.confirmRecoveryKey,
style: enteTheme.textTheme.h3Bold,
textAlign: TextAlign.left,
),
),
const SizedBox(height: 18),
Text(
context.l10n.recoveryKeyVerifyReason,
style: enteTheme.textTheme.small
.copyWith(color: enteTheme.colorScheme.textMuted),
),
const SizedBox(height: 12),
TextFormField(
decoration: InputDecoration(
filled: true,
hintText: context.l10n.enterYourRecoveryKey,
contentPadding: const EdgeInsets.all(20),
border: UnderlineInputBorder(
borderSide: BorderSide.none,
borderRadius: BorderRadius.circular(6),
),
),
style: const TextStyle(
fontSize: 14,
fontFeatures: [FontFeature.tabularFigures()],
),
controller: _recoveryKey,
autofocus: false,
autocorrect: false,
keyboardType: TextInputType.multiline,
minLines: 4,
maxLines: null,
onChanged: (_) {
setState(() {});
},
),
const SizedBox(height: 12),
Expanded(
child: Container(
alignment: Alignment.bottomCenter,
width: double.infinity,
padding: const EdgeInsets.fromLTRB(0, 12, 0, 40),
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
GradientButton(
onTap: _verifyRecoveryKey,
text: context.l10n.confirm,
),
const SizedBox(height: 8),
],
),
),
),
const SizedBox(height: 20),
],
),
),
),
);
},
),
),
);
}
}

View File

@@ -7,10 +7,12 @@ import 'package:flutter/material.dart';
class CodeTimerProgress extends StatefulWidget {
final int period;
final bool isCompactMode;
final int timeOffsetInMilliseconds;
const CodeTimerProgress({
super.key,
required this.period,
this.isCompactMode = false,
this.timeOffsetInMilliseconds = 0,
});
@override
@@ -20,7 +22,7 @@ class CodeTimerProgress extends StatefulWidget {
class _CodeTimerProgressState extends State<CodeTimerProgress> {
late final Timer _timer;
late final ValueNotifier<double> _progress;
late final int _periodInMicros;
late final int _periodInMilii;
// Reduce update frequency
final int _updateIntervalMs =
@@ -29,29 +31,30 @@ class _CodeTimerProgressState extends State<CodeTimerProgress> {
@override
void initState() {
super.initState();
_periodInMicros = widget.period * 1000000;
_periodInMilii = widget.period * 1000;
_progress = ValueNotifier<double>(0.0);
_updateTimeRemaining(DateTime.now().microsecondsSinceEpoch);
_updateTimeRemaining(DateTime.now().millisecondsSinceEpoch);
_timer = Timer.periodic(Duration(milliseconds: _updateIntervalMs), (timer) {
final now = DateTime.now().microsecondsSinceEpoch;
final now = DateTime.now().millisecondsSinceEpoch;
_updateTimeRemaining(now);
});
}
void _updateTimeRemaining(int currentMicros) {
void _updateTimeRemaining(int currentMilliSeconds) {
// More efficient time calculation using modulo
final elapsed = (currentMicros) % _periodInMicros;
final timeRemaining = _periodInMicros - elapsed;
_progress.value = timeRemaining / _periodInMicros;
final elapsed = (currentMilliSeconds + widget.timeOffsetInMilliseconds) %
_periodInMilii;
final timeRemaining = _periodInMilii - elapsed;
_progress.value = timeRemaining / _periodInMilii;
}
@override
void didUpdateWidget(covariant CodeTimerProgress oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.period != widget.period) {
_periodInMicros = widget.period * 1000000;
_updateTimeRemaining(DateTime.now().microsecondsSinceEpoch);
_periodInMilii = widget.period * 1000;
_updateTimeRemaining(DateTime.now().millisecondsSinceEpoch);
}
}

View File

@@ -152,6 +152,8 @@ class _CodeWidgetState extends State<CodeWidget> {
key: ValueKey('period_${widget.code.period}'),
period: widget.code.period,
isCompactMode: widget.isCompactMode,
timeOffsetInMilliseconds:
PreferenceService.instance.timeOffsetInMilliSeconds(),
),
widget.isCompactMode
? const SizedBox(height: 4)

View File

@@ -319,7 +319,7 @@ class _HomePageState extends State<HomePage> {
Future<void> navigateToLockScreen() async {
final bool shouldShowLockScreen =
await Configuration.instance.shouldShowLockScreen();
await LockScreenSettings.instance.shouldShowLockScreen();
if (shouldShowLockScreen) {
await AppLock.of(context)!.showLockScreen();
} else {

View File

@@ -1,7 +1,6 @@
import "dart:async";
import "dart:io";
import "package:ente_auth/core/configuration.dart";
import "package:ente_auth/l10n/l10n.dart";
import "package:ente_auth/services/local_authentication_service.dart";
import "package:ente_auth/theme/ente_theme.dart";
@@ -31,8 +30,7 @@ class LockScreenOptions extends StatefulWidget {
}
class _LockScreenOptionsState extends State<LockScreenOptions> {
final Configuration _configuration = Configuration.instance;
final LockScreenSettings _lockscreenSetting = LockScreenSettings.instance;
final LockScreenSettings _lockScreenSettings = LockScreenSettings.instance;
late bool appLock = false;
bool isPinEnabled = false;
bool isPasswordEnabled = false;
@@ -43,18 +41,18 @@ class _LockScreenOptionsState extends State<LockScreenOptions> {
@override
void initState() {
super.initState();
hideAppContent = _lockscreenSetting.getShouldHideAppContent();
autoLockTimeInMilliseconds = _lockscreenSetting.getAutoLockTime();
hideAppContent = _lockScreenSettings.getShouldHideAppContent();
autoLockTimeInMilliseconds = _lockScreenSettings.getAutoLockTime();
_initializeSettings();
appLock = _lockscreenSetting.getIsAppLockSet();
appLock = _lockScreenSettings.getIsAppLockSet();
}
Future<void> _initializeSettings() async {
final bool passwordEnabled = await _lockscreenSetting.isPasswordSet();
final bool pinEnabled = await _lockscreenSetting.isPinSet();
final bool passwordEnabled = await _lockScreenSettings.isPasswordSet();
final bool pinEnabled = await _lockScreenSettings.isPinSet();
final bool shouldHideAppContent =
_lockscreenSetting.getShouldHideAppContent();
final bool systemLockEnabled = _configuration.shouldShowSystemLockScreen();
_lockScreenSettings.getShouldHideAppContent();
final bool systemLockEnabled = _lockScreenSettings.shouldShowSystemLockScreen();
setState(() {
isPasswordEnabled = passwordEnabled;
isPinEnabled = pinEnabled;
@@ -66,8 +64,8 @@ class _LockScreenOptionsState extends State<LockScreenOptions> {
Future<void> _deviceLock() async {
if (await LocalAuthenticationService.instance
.isLocalAuthSupportedOnDevice()) {
await _lockscreenSetting.removePinAndPassword();
await _configuration.setSystemLockScreen(!isSystemLockEnabled);
await _lockScreenSettings.removePinAndPassword();
await _lockScreenSettings.setSystemLockScreen(!isSystemLockEnabled);
} else {
await showDialogWidget(
context: context,
@@ -96,10 +94,10 @@ class _LockScreenOptionsState extends State<LockScreenOptions> {
);
if (result) {
await _configuration.setSystemLockScreen(false);
await _lockscreenSetting.setAppLockEnabled(true);
await _lockScreenSettings.setSystemLockScreen(false);
await _lockScreenSettings.setAppLockEnabled(true);
setState(() {
appLock = _lockscreenSetting.getIsAppLockSet();
appLock = _lockScreenSettings.getIsAppLockSet();
});
}
await _initializeSettings();
@@ -114,9 +112,9 @@ class _LockScreenOptionsState extends State<LockScreenOptions> {
),
);
if (result) {
await _configuration.setSystemLockScreen(false);
await _lockScreenSettings.setSystemLockScreen(false);
setState(() {
appLock = _lockscreenSetting.getIsAppLockSet();
appLock = _lockScreenSettings.getIsAppLockSet();
});
}
await _initializeSettings();
@@ -126,17 +124,17 @@ class _LockScreenOptionsState extends State<LockScreenOptions> {
AppLock.of(context)!.setEnabled(!appLock);
if (await LocalAuthenticationService.instance
.isLocalAuthSupportedOnDevice()) {
await _configuration.setSystemLockScreen(!appLock);
await _lockscreenSetting.setAppLockEnabled(!appLock);
await _lockScreenSettings.setSystemLockScreen(!appLock);
await _lockScreenSettings.setAppLockEnabled(!appLock);
} else {
await _configuration.setSystemLockScreen(false);
await _lockscreenSetting.setAppLockEnabled(false);
await _lockScreenSettings.setSystemLockScreen(false);
await _lockScreenSettings.setAppLockEnabled(false);
}
await _lockscreenSetting.removePinAndPassword();
await _lockScreenSettings.removePinAndPassword();
if (PlatformUtil.isMobile()) {
await _lockscreenSetting.setHideAppContent(!appLock);
await _lockScreenSettings.setHideAppContent(!appLock);
setState(() {
hideAppContent = _lockscreenSetting.getShouldHideAppContent();
hideAppContent = _lockScreenSettings.getShouldHideAppContent();
});
}
await _initializeSettings();
@@ -152,7 +150,7 @@ class _LockScreenOptionsState extends State<LockScreenOptions> {
).then(
(value) {
setState(() {
autoLockTimeInMilliseconds = _lockscreenSetting.getAutoLockTime();
autoLockTimeInMilliseconds = _lockScreenSettings.getAutoLockTime();
});
},
);
@@ -162,7 +160,7 @@ class _LockScreenOptionsState extends State<LockScreenOptions> {
setState(() {
hideAppContent = !hideAppContent;
});
await _lockscreenSetting.setHideAppContent(hideAppContent);
await _lockScreenSettings.setHideAppContent(hideAppContent);
}
String _formatTime(Duration duration) {

View File

@@ -166,7 +166,7 @@ class _SecuritySectionWidgetState extends State<SecuritySectionWidget> {
return;
}
}
if (await Configuration.instance.shouldShowLockScreen()) {
if (await LockScreenSettings.instance.shouldShowLockScreen()) {
final bool result = await requestAuthentication(
context,
context.l10n.authToChangeLockscreenSetting,

View File

@@ -53,6 +53,7 @@ Future<bool> requestAuthentication(
signInTitle: l10n.androidSignInTitle,
),
IOSAuthMessages(
localizedFallbackTitle: l10n.enterPassword,
goToSettingsButton: l10n.goToSettings,
goToSettingsDescription: l10n.goToSettings,
lockOut: l10n.iOSLockOut,

View File

@@ -3,6 +3,8 @@ import "dart:io";
import "dart:typed_data";
import "package:ente_auth/core/configuration.dart";
import "package:ente_auth/core/event_bus.dart";
import "package:ente_auth/events/signed_out_event.dart";
import "package:ente_auth/utils/platform_util.dart";
import "package:ente_crypto_dart/ente_crypto_dart.dart";
import "package:flutter/material.dart";
@@ -26,6 +28,7 @@ class LockScreenSettings {
static const keyHasMigratedLockScreenChanges =
"ls_has_migrated_lock_screen_changes";
static const keyShowOfflineModeWarning = "ls_show_offline_mode_warning";
static const keyShouldShowLockScreen = "should_show_lock_screen";
static const String kIsLightMode = "is_light_mode";
final List<Duration> autoLockDurations = const [
@@ -52,6 +55,10 @@ class LockScreenSettings {
await runLockScreenChangesMigration();
await _clearLsDataInKeychainIfFreshInstall();
Bus.instance.on<SignedOutEvent>().listen((event) {
removePinAndPassword();
});
}
Future<void> setOfflineModeWarningStatus(bool value) async {
@@ -69,8 +76,7 @@ class LockScreenSettings {
final bool passwordEnabled = await isPasswordSet();
final bool pinEnabled = await isPinSet();
final bool systemLockEnabled =
Configuration.instance.shouldShowSystemLockScreen();
final bool systemLockEnabled = shouldShowSystemLockScreen();
if (passwordEnabled || pinEnabled || systemLockEnabled) {
await setAppLockEnabled(true);
@@ -214,6 +220,24 @@ class LockScreenSettings {
return await _secureStorage.containsKey(key: password);
}
Future<bool> shouldShowLockScreen() async {
final bool isPin = await isPinSet();
final bool isPass = await isPasswordSet();
return isPin || isPass || shouldShowSystemLockScreen();
}
bool shouldShowSystemLockScreen() {
if (_preferences.containsKey(keyShouldShowLockScreen)) {
return _preferences.getBool(keyShouldShowLockScreen)!;
} else {
return false;
}
}
Future<void> setSystemLockScreen(bool value) {
return _preferences.setBool(keyShouldShowLockScreen, value);
}
// If the app was uninstalled (without logging out if it was used with
// backups), keychain items of the app persist in the keychain. To avoid using
// old keychain items, we delete them on reinstall.

View File

@@ -1,8 +1,14 @@
import 'package:ente_auth/models/code.dart';
import 'package:ente_auth/services/preference_service.dart';
import 'package:flutter/foundation.dart';
import 'package:otp/otp.dart' as otp;
import 'package:steam_totp/steam_totp.dart';
int millisecondsSinceEpoch() {
return DateTime.now().millisecondsSinceEpoch +
PreferenceService.instance.timeOffsetInMilliSeconds();
}
String getOTP(Code code) {
if (code.type == Type.steam || code.issuer.toLowerCase() == 'steam') {
return _getSteamCode(code);
@@ -12,7 +18,7 @@ String getOTP(Code code) {
}
return otp.OTP.generateTOTPCodeString(
getSanitizedSecret(code.secret),
DateTime.now().millisecondsSinceEpoch,
millisecondsSinceEpoch(),
length: code.digits,
interval: code.period,
algorithm: _getAlgorithm(code),
@@ -34,7 +40,7 @@ String _getSteamCode(Code code, [bool isNext = false]) {
final SteamTOTP steamtotp = SteamTOTP(secret: code.secret);
return steamtotp.generate(
DateTime.now().millisecondsSinceEpoch ~/ 1000 + (isNext ? code.period : 0),
millisecondsSinceEpoch() ~/ 1000 + (isNext ? code.period : 0),
);
}
@@ -44,7 +50,7 @@ String getNextTotp(Code code) {
}
return otp.OTP.generateTOTPCodeString(
getSanitizedSecret(code.secret),
DateTime.now().millisecondsSinceEpoch + code.period * 1000,
millisecondsSinceEpoch() + code.period * 1000,
length: code.digits,
interval: code.period,
algorithm: _getAlgorithm(code),
@@ -56,9 +62,7 @@ String getNextTotp(Code code) {
// It returns the start time and a list of future codes.
(int, List<String>) generateFutureTotpCodes(Code code, int count) {
final int startTime =
((DateTime.now().millisecondsSinceEpoch ~/ 1000) ~/ code.period) *
code.period *
1000;
((millisecondsSinceEpoch() ~/ 1000) ~/ code.period) * code.period * 1000;
final String secret = getSanitizedSecret(code.secret);
final List<String> codes = [];
if (code.type == Type.steam || code.issuer.toLowerCase() == 'steam') {

View File

@@ -18,6 +18,7 @@
</screenshot>
</screenshots>
<releases>
<release version="4.4.0" date="2025-05-31" />
<release version="4.3.8" date="2025-05-20" />
<release version="4.2.4" date="2025-01-11" />
<release version="4.0.3" date="2024-10-08" />

View File

@@ -543,67 +543,74 @@ packages:
flutter_inappwebview:
dependency: "direct main"
description:
name: flutter_inappwebview
sha256: "80092d13d3e29b6227e25b67973c67c7210bd5e35c4b747ca908e31eb71a46d5"
url: "https://pub.dev"
source: hosted
version: "6.1.5"
path: flutter_inappwebview
ref: "3e6c4c4a25340cd363af9d38891d88498b90be26"
resolved-ref: "3e6c4c4a25340cd363af9d38891d88498b90be26"
url: "https://github.com/pichillilorenzo/flutter_inappwebview.git"
source: git
version: "6.2.0-beta.3"
flutter_inappwebview_android:
dependency: transitive
description:
name: flutter_inappwebview_android
sha256: "62557c15a5c2db5d195cb3892aab74fcaec266d7b86d59a6f0027abd672cddba"
url: "https://pub.dev"
source: hosted
version: "1.1.3"
path: flutter_inappwebview_android
ref: "3e6c4c4a25340cd363af9d38891d88498b90be26"
resolved-ref: "3e6c4c4a25340cd363af9d38891d88498b90be26"
url: "https://github.com/pichillilorenzo/flutter_inappwebview.git"
source: git
version: "1.2.0-beta.3"
flutter_inappwebview_internal_annotations:
dependency: transitive
description:
name: flutter_inappwebview_internal_annotations
sha256: "5f80fd30e208ddded7dbbcd0d569e7995f9f63d45ea3f548d8dd4c0b473fb4c8"
sha256: "787171d43f8af67864740b6f04166c13190aa74a1468a1f1f1e9ee5b90c359cd"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
version: "1.2.0"
flutter_inappwebview_ios:
dependency: transitive
description:
name: flutter_inappwebview_ios
sha256: "5818cf9b26cf0cbb0f62ff50772217d41ea8d3d9cc00279c45f8aabaa1b4025d"
url: "https://pub.dev"
source: hosted
version: "1.1.2"
path: flutter_inappwebview_ios
ref: "3e6c4c4a25340cd363af9d38891d88498b90be26"
resolved-ref: "3e6c4c4a25340cd363af9d38891d88498b90be26"
url: "https://github.com/pichillilorenzo/flutter_inappwebview.git"
source: git
version: "1.2.0-beta.3"
flutter_inappwebview_macos:
dependency: transitive
description:
name: flutter_inappwebview_macos
sha256: c1fbb86af1a3738e3541364d7d1866315ffb0468a1a77e34198c9be571287da1
url: "https://pub.dev"
source: hosted
version: "1.1.2"
path: flutter_inappwebview_macos
ref: "3e6c4c4a25340cd363af9d38891d88498b90be26"
resolved-ref: "3e6c4c4a25340cd363af9d38891d88498b90be26"
url: "https://github.com/pichillilorenzo/flutter_inappwebview.git"
source: git
version: "1.2.0-beta.3"
flutter_inappwebview_platform_interface:
dependency: transitive
description:
name: flutter_inappwebview_platform_interface
sha256: cf5323e194096b6ede7a1ca808c3e0a078e4b33cc3f6338977d75b4024ba2500
url: "https://pub.dev"
source: hosted
version: "1.3.0+1"
path: flutter_inappwebview_platform_interface
ref: "3e6c4c4a25340cd363af9d38891d88498b90be26"
resolved-ref: "3e6c4c4a25340cd363af9d38891d88498b90be26"
url: "https://github.com/pichillilorenzo/flutter_inappwebview.git"
source: git
version: "1.4.0-beta.3"
flutter_inappwebview_web:
dependency: transitive
description:
name: flutter_inappwebview_web
sha256: "55f89c83b0a0d3b7893306b3bb545ba4770a4df018204917148ebb42dc14a598"
url: "https://pub.dev"
source: hosted
version: "1.1.2"
path: flutter_inappwebview_web
ref: "3e6c4c4a25340cd363af9d38891d88498b90be26"
resolved-ref: "3e6c4c4a25340cd363af9d38891d88498b90be26"
url: "https://github.com/pichillilorenzo/flutter_inappwebview.git"
source: git
version: "1.2.0-beta.3"
flutter_inappwebview_windows:
dependency: transitive
description:
name: flutter_inappwebview_windows
sha256: "8b4d3a46078a2cdc636c4a3d10d10f2a16882f6be607962dbfff8874d1642055"
url: "https://pub.dev"
source: hosted
version: "0.6.0"
path: flutter_inappwebview_windows
ref: "3e6c4c4a25340cd363af9d38891d88498b90be26"
resolved-ref: "3e6c4c4a25340cd363af9d38891d88498b90be26"
url: "https://github.com/pichillilorenzo/flutter_inappwebview.git"
source: git
version: "0.7.0-beta.3"
flutter_launcher_icons:
dependency: "direct main"
description:

View File

@@ -1,7 +1,7 @@
name: ente_auth
description: ente two-factor authenticator
version: 4.3.8+438
version: 4.4.1+441
publish_to: none
environment:
@@ -45,7 +45,13 @@ dependencies:
flutter_context_menu: ^0.2.0
flutter_displaymode: ^0.6.0
flutter_email_sender: ^6.0.2
flutter_inappwebview: ^6.1.5
# revert to pub.dev when merged
# https://github.com/pichillilorenzo/flutter_inappwebview/pull/2548
flutter_inappwebview:
git:
url: https://github.com/pichillilorenzo/flutter_inappwebview.git
path: flutter_inappwebview
ref: 3e6c4c4a25340cd363af9d38891d88498b90be26
flutter_launcher_icons: ^0.14.1
flutter_local_authentication:
git:

View File

@@ -5,8 +5,6 @@
endpoint:
api: "http://localhost:8080"
# Endpoint for the account service for passkey
accounts: "http://localhost:3001"
log:
http: false # log status code & time taken by requests

View File

@@ -35,6 +35,7 @@ type AuthorizationResponse struct {
ID int64 `json:"id"`
KeyAttributes *KeyAttributes `json:"keyAttributes,omitempty"`
EncryptedToken string `json:"encryptedToken,omitempty"`
AccountsUrl string `json:"accountsUrl"`
Token string `json:"token,omitempty"`
TwoFactorSessionID string `json:"twoFactorSessionID"`
PassKeySessionID string `json:"passkeySessionID"`

View File

@@ -110,7 +110,6 @@ func initConfig(cliConfigDir string) {
viper.AddConfigPath(".") // optionally look for config in the working directory
viper.SetDefault("endpoint.api", constants.EnteApiUrl)
viper.SetDefault("endpoint.accounts", constants.EnteAccountUrl)
viper.SetDefault("log.http", false)
if err := viper.ReadInConfig(); err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {

View File

@@ -8,8 +8,8 @@ import (
eCrypto "github.com/ente-io/cli/internal/crypto"
"github.com/ente-io/cli/pkg/model"
"github.com/ente-io/cli/utils/browser"
"github.com/ente-io/cli/utils/constants"
"github.com/ente-io/cli/utils/encoding"
"github.com/spf13/viper"
"log"
"github.com/kong/go-srp"
@@ -145,7 +145,10 @@ func (c *ClICtrl) verifyPassKey(ctx context.Context, authResp *api.Authorization
if !authResp.IsPasskeyRequired() {
return authResp, nil
}
baseAccountUrl := viper.GetString("endpoint.accounts")
baseAccountUrl := constants.EnteAccountUrl
if authResp.AccountsUrl != "" {
baseAccountUrl = authResp.AccountsUrl
}
passkeyAuthUrl := fmt.Sprintf("%s/passkeys/verify?passkeySessionID=%s&redirect=ente-cli://passkey&clientPackage=%s", baseAccountUrl, authResp.PassKeySessionID, app.ClientPkg())
fmt.Printf("Open this url in browser to verify passkey: %s\n", passkeyAuthUrl)
err := browser.OpenURL(passkeyAuthUrl)

View File

@@ -113,6 +113,11 @@ jobs:
APPLE_APP_SPECIFIC_PASSWORD:
${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
# Windows Azure Trusted Signing related values
# https://www.electron.build/code-signing-win#using-azure-trusted-signing-beta
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
# Default is "draft", but since our nightly builds update
# existing pre-releases, set this to "prerelease".
EP_PRE_RELEASE: true

View File

@@ -1,9 +1,21 @@
# CHANGELOG
## v1.7.13 (Unreleased)
## v1.7.15 (Unreleased)
- .
## v1.7.14
- Increase file size limit to 10 GB.
## v1.7.13
- Generate streams for videos (beta)
> Streamable videos can be enabled in Preferences. For more details, see the
> [video streaming FAQ](https://help.ente.io/photos/faq/video-streaming).
- Support Turkish translations.
- .
## v1.7.12

View File

@@ -3,6 +3,7 @@
- [Electron](#electron)
- [Dev dependencies](#dev)
- [Functionality](#functionality)
- [Pinned](#pinned)
## Electron
@@ -140,3 +141,24 @@ handles to avoid reopening them for every operation.
[chokidar](https://github.com/paulmillr/chokidar) is used as a file system
watcher for the watch folders functionality.
## Pinned
- `electron-builder` is pinned to 26.0.16 because of
https://github.com/electron-userland/electron-builder/issues/9161#issuecomment-2977829326
- `electron-builder` is pinned to 26.0.14 because of a new error when building:
> Detected file
> "Contents/Resources/app.asar.unpacked/node_modules/onnxruntime-node/bin/napi-v3/darwin/arm64/libonnxruntime.1.20.1.dylib"
> that's the same in both x64 and arm64 builds and not covered by the
> x64ArchFiles rule: "undefined" failedTask=build stackTrace=Error: Detected
> file
> "Contents/Resources/app.asar.unpacked/node_modules/onnxruntime-node/bin/napi-v3/darwin/arm64/libonnxruntime.1.20.1.dylib"
> that's the same in both x64 and arm64 builds and not covered by the
> x64ArchFiles rule: "undefined"
To reproduce this locally, add `x64ArchFiles: "ffmpeg"` to
`electron-builder.yml`, then run `node_modules/.bin/electron-builder --mac`
- `electron-store` is pinned to 8.2.0 because subsequent versions are ESM only.

View File

@@ -14,6 +14,11 @@ win:
target:
- target: nsis
arch: [x64, arm64]
azureSignOptions:
publisherName: ENTE TECHNOLOGIES, INC.
endpoint: https://eus.codesigning.azure.net/
certificateProfileName: EnteTrustCertProfile
codeSigningAccountName: EnteTechnologiesInc
nsis:
deleteAppDataOnUninstall: true
linux:

View File

@@ -1,6 +1,6 @@
{
"name": "ente",
"version": "1.7.13-beta",
"version": "1.7.15-beta",
"private": true,
"description": "Desktop client for Ente Photos",
"repository": "github:ente-io/photos-desktop",
@@ -31,32 +31,32 @@
"clip-bpe-js": "^0.0.6",
"comlink": "^4.4.2",
"compare-versions": "^6.1.1",
"electron-log": "^5.4.0",
"electron-log": "^5.4.1",
"electron-store": "^8.2.0",
"electron-updater": "^6.6.3",
"electron-updater": "^6.6.5",
"ffmpeg-static": "^5.2.0",
"lru-cache": "^11.1.0",
"next-electron-server": "^1.0.0",
"node-stream-zip": "^1.15.0",
"onnxruntime-node": "^1.20.1"
"onnxruntime-node": "^1.20.1",
"zod": "^3.25.67"
},
"devDependencies": {
"@eslint/js": "^9.25.1",
"@tsconfig/node22": "^22.0.1",
"@eslint/js": "^9.29.0",
"@tsconfig/node22": "^22.0.2",
"@types/auto-launch": "^5.0.5",
"@types/ffmpeg-static": "^3.0.3",
"ajv": "^8.17.1",
"concurrently": "^9.1.2",
"cross-env": "^7.0.3",
"electron": "^36.2.1",
"electron-builder": "^26.0.14",
"electron": "^37.1.0",
"electron-builder": "26.0.14",
"eslint": "^9",
"prettier": "3.5.3",
"prettier-plugin-organize-imports": "^4.1.0",
"prettier-plugin-packagejson": "^2.5.13",
"prettier-plugin-packagejson": "^2.5.15",
"shx": "^0.4.0",
"typescript": "^5.8.3",
"typescript-eslint": "^8.32.1"
"typescript-eslint": "^8.34.1"
},
"packageManager": "yarn@1.22.22",
"productName": "ente"

View File

@@ -50,8 +50,8 @@ import { convertToJPEG, generateImageThumbnail } from "./services/image";
import { logout } from "./services/logout";
import {
lastShownChangelogVersion,
masterKeyB64,
saveMasterKeyB64,
masterKeyFromSafeStorage,
saveMasterKeyInSafeStorage,
setLastShownChangelogVersion,
} from "./services/store";
import {
@@ -108,10 +108,12 @@ export const attachIPCHandlers = () => {
ipcMain.handle("selectDirectory", () => selectDirectory());
ipcMain.handle("masterKeyB64", () => masterKeyB64());
ipcMain.handle("masterKeyFromSafeStorage", () =>
masterKeyFromSafeStorage(),
);
ipcMain.handle("saveMasterKeyB64", (_, masterKeyB64: string) =>
saveMasterKeyB64(masterKeyB64),
ipcMain.handle("saveMasterKeyInSafeStorage", (_, masterKey: string) =>
saveMasterKeyInSafeStorage(masterKey),
);
ipcMain.handle("lastShownChangelogVersion", () =>

View File

@@ -12,11 +12,16 @@ import fs_ from "node:fs";
import fs from "node:fs/promises";
import path from "node:path";
import { Readable } from "node:stream";
import { z } from "zod/v4";
import type { FFmpegCommand } from "../../types/ipc";
import log from "../log-worker";
import { messagePortMainEndpoint } from "../utils/comlink";
import { wait } from "../utils/common";
import { nullToUndefined, wait } from "../utils/common";
import { execAsyncWorker } from "../utils/exec-worker";
import {
authenticatedRequestHeaders,
publicRequestHeaders,
} from "../utils/http";
/* Ditto in the web app's code (used by the Wasm FFmpeg invocation). */
const ffmpegPathPlaceholder = "FFMPEG";
@@ -44,7 +49,9 @@ export interface FFmpegUtilityProcess {
ffmpegGenerateHLSPlaylistAndSegments: (
inputFilePath: string,
outputPathPrefix: string,
outputUploadURL: string,
fileID: number,
fetchURL: string,
authToken: string,
) => Promise<FFmpegGenerateHLSPlaylistAndSegmentsResult | undefined>;
ffmpegDetermineVideoDuration: (inputFilePath: string) => Promise<number>;
@@ -52,7 +59,11 @@ export interface FFmpegUtilityProcess {
log.debugString("Started ffmpeg utility process");
process.on("uncaughtException", (e, origin) => log.error(origin, e));
process.parentPort.once("message", (e) => {
// Initialize ourselves with the data we got from our parent.
parseInitData(e.data);
// Expose an instance of `FFmpegUtilityProcess` on the port we got from our
// parent.
expose(
@@ -64,9 +75,26 @@ process.parentPort.once("message", (e) => {
} satisfies FFmpegUtilityProcess,
messagePortMainEndpoint(e.ports[0]!),
);
// Let the main process know we're ready.
mainProcess("ack", undefined);
});
/**
* We cannot access Electron's {@link app} object within a utility process, so
* we pass the value of `app.getVersion()` during initialization, and it can be
* subsequently retrieved from here.
*/
let _desktopAppVersion: string | undefined;
/** Equivalent to `app.getVersion()` */
const desktopAppVersion = () => _desktopAppVersion!;
const FFmpegWorkerInitData = z.object({ appVersion: z.string() });
const parseInitData = (data: unknown) => {
_desktopAppVersion = FFmpegWorkerInitData.parse(data).appVersion;
};
/**
* Send a message to the main process using a barebones RPC protocol.
*/
@@ -184,6 +212,7 @@ export interface FFmpegGenerateHLSPlaylistAndSegmentsResult {
playlistPath: string;
dimensions: { width: number; height: number };
videoSize: number;
videoObjectID: string;
}
/**
@@ -199,7 +228,7 @@ export interface FFmpegGenerateHLSPlaylistAndSegmentsResult {
*
* Example invocation:
*
* ffmpeg -i in.mov -vf 'scale=-2:720,fps=30,zscale=transfer=linear,tonemap=tonemap=hable:desat=0,zscale=primaries=709:transfer=709:matrix=709,format=yuv420p' -c:v libx264 -c:a aac -f hls -hls_key_info_file out.m3u8.info -hls_list_size 0 -hls_flags single_file out.m3u8
* ffmpeg -i in.mov -vf "scale=-2:'min(720,ih)',fps=30,zscale=transfer=linear,tonemap=tonemap=hable:desat=0,zscale=primaries=709:transfer=709:matrix=709,format=yuv420p" -c:v libx264 -c:a aac -f hls -hls_key_info_file out.m3u8.info -hls_list_size 0 -hls_flags single_file out.m3u8
*
* See: [Note: Preview variant of videos]
*
@@ -210,9 +239,17 @@ export interface FFmpegGenerateHLSPlaylistAndSegmentsResult {
* the user's local file system. This function will write the generated HLS
* playlist and video segments under this prefix.
*
* @returns The paths to two files on the user's local file system - one
* containing the generated HLS playlist, and the other containing the
* transcoded and encrypted video segments that the HLS playlist refers to.
* @param fileID The ID of the {@link EnteFile} whose HLS playlist we are
* generating.
*
* @param fetchURL The fully resolved API URL for obtaining pre-signed S3 URLs
* for uploading the generated video segment file.
*
* @param authToken A token that can be used to make API request to
* {@link fetchURL}.
*
* @returns The path to the file on the user's file system containing the
* generated HLS playlist, and other metadata about the generated video stream.
*
* If the video is such that it doesn't require stream generation, then this
* function returns `undefined`.
@@ -220,7 +257,9 @@ export interface FFmpegGenerateHLSPlaylistAndSegmentsResult {
const ffmpegGenerateHLSPlaylistAndSegments = async (
inputFilePath: string,
outputPathPrefix: string,
outputUploadURL: string,
fileID: number,
fetchURL: string,
authToken: string,
): Promise<FFmpegGenerateHLSPlaylistAndSegmentsResult | undefined> => {
const { isH264, isHDR, bitrate } =
await detectVideoCharacteristics(inputFilePath);
@@ -357,11 +396,23 @@ const ffmpegGenerateHLSPlaylistAndSegments = async (
// - the first line specifies the key URI that is written into the playlist.
// - the second line specifies the path to the local file system file from
// where ffmpeg should read the key.
//
// [Note: ffmpeg newlines]
//
// Tested on Windows that ffmpeg recognizes these lines correctly. In
// general, ffmpeg tends to expect input and write output the Unix way (\n),
// even when we're running on Windows.
//
// - The ffmetadata and the HLS playlist file generated by ffmpeg uses \n
// separators, even on Windows.
// - The HLS key info file, expected as an input by ffmpeg, works fine when
// \n separated even on Windows.
//
const keyInfo = [keyURI, keyPath].join("\n");
// Overview:
//
// - Video H.264 HD 720p 30fps.
// - Video H.264 HD 720p (max) 30fps.
// - Audio AAC 128kbps.
// - Encrypted HLS playlist with a single file containing all the chunks.
//
@@ -399,7 +450,7 @@ const ffmpegGenerateHLSPlaylistAndSegments = async (
// keeping aspect ratio and the calculated
// dimension divisible by 2 (some of the other
// operations require an even pixel count).
"scale=-2:720",
"scale=-2:'min(720,ih)'",
// Convert the video to a constant 30 fps,
// duplicating or dropping frames as necessary.
"fps=30",
@@ -475,6 +526,7 @@ const ffmpegGenerateHLSPlaylistAndSegments = async (
let dimensions: { width: number; height: number };
let videoSize: number;
let videoObjectID: string;
try {
// Write the key and the keyInfo to their desired paths.
@@ -491,6 +543,15 @@ const ffmpegGenerateHLSPlaylistAndSegments = async (
// Note: Depending on the size of the input file, this may take long!
await execAsyncWorker(commandWithRedirection);
// While ffmpeg uses \n as the line separator in the generated playlist
// file on Windows too, add an extra safety check that should fail the
// HLS generation if this doesn't hold. See: [Note: ffmpeg newlines].
if (process.platform == "win32") {
const playlistText = await fs.readFile(playlistPath, "utf-8");
if (playlistText.includes("\r\n"))
throw new Error("Unexpected Windows newlines in playlist");
}
// Determine the dimensions of the generated video from the stderr
// output produced by ffmpeg during the conversion.
dimensions = await detectVideoDimensions(stderrPath);
@@ -499,7 +560,13 @@ const ffmpegGenerateHLSPlaylistAndSegments = async (
// the generated .ts file.
videoSize = await fs.stat(videoPath).then((st) => st.size);
await uploadVideoSegments(videoPath, videoSize, outputUploadURL);
videoObjectID = await uploadVideoSegments(
videoPath,
videoSize,
fileID,
fetchURL,
authToken,
);
} catch (e) {
log.error("HLS generation failed", e);
await Promise.all([deletePathIgnoringErrors(playlistPath)]);
@@ -515,7 +582,7 @@ const ffmpegGenerateHLSPlaylistAndSegments = async (
]);
}
return { playlistPath, dimensions, videoSize };
return { playlistPath, dimensions, videoSize, videoObjectID };
};
/**
@@ -544,10 +611,10 @@ const deletePathIgnoringErrors = async (tempFilePath: string) => {
*
* Stream #0:1[0x2](und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(progressive), 480x270 [SAR 1:1 DAR 16:9], 539 kb/s, 29.97 fps, 29.97 tbr, 30k tbn (default)
*/
const videoStreamLineRegex = /Stream #.+: Video:(.+)\n/;
const videoStreamLineRegex = /Stream #.+: Video:(.+)\r?\n/;
/** {@link videoStreamLineRegex}, but global. */
const videoStreamLinesRegex = /Stream #.+: Video:(.+)\n/g;
const videoStreamLinesRegex = /Stream #.+: Video:(.+)\r?\n/g;
/**
* A regex that matches "<digits> kb/s" preceded by a space. See
@@ -762,10 +829,11 @@ const pseudoFFProbeVideo = async (inputFilePath: string) => {
};
/**
* Upload the file at the given {@link videoFilePath} to the provided presigned
* {@link objectUploadURL} using a HTTP PUT request.
* Upload the file at the given {@link videoFilePath} to the provided pre-signed
* URL(s) using a HTTP PUT request.
*
* In case on non-HTTP-4xx errors, retry up to 3 times with exponential backoff.
* All HTTP requests are retried up to 4 times (1 original + 3 retries) with
* exponential backoff.
*
* See: [Note: Upload HLS video segment from node side].
*
@@ -774,20 +842,155 @@ const pseudoFFProbeVideo = async (inputFilePath: string) => {
*
* @param videoSize The size in bytes of the file at {@link videoFilePath}.
*
* @param objectUploadURL A pre-signed URL to upload the file.
* @param fileID The ID of the {@link EnteFile} whose video segment this is.
*
* ---
* @param fetchURL The API URL for fetching pre-signed upload URLs.
*
* This is an inlined but bespoke reimplementation of `retryEnsuringHTTPOkOr4xx`
* from `web/packages/base/http.ts`
* @param authToken The user's auth token for use with {@link fetchURL}.
*
* @return The object ID of the uploaded file on remote storage.
*/
const uploadVideoSegments = async (
videoFilePath: string,
videoSize: number,
fileID: number,
fetchURL: string,
authToken: string,
) => {
// Self hosters might be using Cloudflare's free plan which (currently) has
// a maximum request size of 100 MB. Keeping a bit of margin for headers,
const partSize = 96 * 1024 * 1024; /* 96 MB */
const partCount = Math.ceil(videoSize / partSize);
const { objectID, url, partURLs, completeURL } =
await getFilePreviewDataUploadURL(
partCount,
fileID,
fetchURL,
authToken,
);
if (url) {
await uploadVideoSegmentsSingle(videoFilePath, videoSize, url);
} else if (partURLs && completeURL) {
await uploadVideoSegmentsMultipart(
videoFilePath,
videoSize,
partSize,
partURLs,
completeURL,
);
} else {
throw new Error("Malformed upload URLs");
}
return objectID;
};
const FilePreviewDataUploadURLResponse = z.object({
/**
* The objectID with which this uploaded data can be referred to post upload
* (e.g. when invoking {@link putVideoData}).
*/
objectID: z.string(),
/**
* A pre-signed URL that can be used to upload the file.
*
* This will be present only if we requested a singular object upload URL.
*/
url: z.string().nullish().transform(nullToUndefined),
/**
* A list of pre-signed URLs that can be used to upload parts of a multipart
* upload of the uploaded data.
*
* This will be present only if we requested a multipart upload URLs for the
* object by setting `isMultiPart` true in the request.
*/
partURLs: z.string().array().nullish().transform(nullToUndefined),
/**
* A pre-signed URL that can be used to finalize the multipart upload.
*
* This will be present only if we requested a multipart upload URLs for the
* object by setting `isMultiPart` true in the request.
*/
completeURL: z.string().nullish().transform(nullToUndefined),
});
/**
* Obtain a pre-signed URL(s) that can be used to upload the "file preview data"
* of type "vid_preview".
*
* This will be the file containing the encrypted video segments which the
* "vid_preview" HLS playlist for the file would refer to.
*
* @param partCount If greater than 1, then we request for a multipart upload.
*/
export const getFilePreviewDataUploadURL = async (
partCount: number,
fileID: number,
fetchURL: string,
authToken: string,
) => {
const params = new URLSearchParams({
fileID: fileID.toString(),
type: "vid_preview",
});
if (partCount > 1) {
params.set("isMultiPart", "true");
params.set("count", partCount.toString());
}
const res = await retryEnsuringHTTPOk(() =>
fetch(`${fetchURL}?${params.toString()}`, {
headers: authenticatedRequestHeaders(
desktopAppVersion(),
authToken,
),
}),
);
return FilePreviewDataUploadURLResponse.parse(await res.json());
};
const uploadVideoSegmentsSingle = (
videoFilePath: string,
videoSize: number,
objectUploadURL: string,
) =>
retryEnsuringHTTPOk(() =>
// net.fetch is 40-50x slower than the native fetch for this particular
// PUT request. This is easily reproducible - replace `fetch` with
// `net.fetch`, then even on localhost the PUT requests start taking a
// minute or so, while they take second(s) with node's native fetch.
fetch(objectUploadURL, {
method: "PUT",
// net.fetch deduces and inserts a content-length for us, when we
// use the node native fetch then we need to provide it explicitly.
headers: {
...publicRequestHeaders(desktopAppVersion()),
"Content-Length": `${videoSize}`,
},
// See: [Note: duplex param required for stream body]
// @ts-expect-error ^see note above
duplex: "half",
body: Readable.toWeb(fs_.createReadStream(videoFilePath)),
}),
);
/**
* Retry a async operation on failure up to 4 times (1 original + 3 retries)
* with exponential backoff.
*
* This is an inlined but bespoke reimplementation of `retryEnsuringHTTPOk` from
* `web/packages/base/http.ts`
*
* - We don't have the rest of the scaffolding used by that function, which is
* why it is intially inlined bespoked.
*
* - It handles the specific use case of uploading videos since generating the
* HLS stream is a fairly expensive operation, so a retry to discount
* transient network issues is called for. There are only 2 retries for a
* total of 3 attempts, and the retry gaps are more spaced out.
* transient network issues is called for. The number of retries and their
* gaps are same as the "background" `retryProfile` of the web implementation.
*
* - Later it was discovered that net.fetch is much slower than node's native
* fetch, so this implementation has further diverged.
@@ -795,65 +998,84 @@ const pseudoFFProbeVideo = async (inputFilePath: string) => {
* - This also moved to a utility process, where we also have a more restricted
* ability to import electron API.
*/
const uploadVideoSegments = async (
videoFilePath: string,
videoSize: number,
objectUploadURL: string,
) => {
const waitTimeBeforeNextTry = [5000, 20000];
const retryEnsuringHTTPOk = async (request: () => Promise<Response>) => {
const waitTimeBeforeNextTry = [10000, 30000, 120000];
while (true) {
let abort = false;
try {
const nodeStream = fs_.createReadStream(videoFilePath);
const webStream = Readable.toWeb(nodeStream);
// net.fetch is 40-50x slower than the native fetch for this
// particular PUT request. This is easily reproducible - replace
// `fetch` with `net.fetch`, then even on localhost the PUT requests
// start taking a minute or so, while they take second(s) with
// node's native fetch.
const res = await fetch(objectUploadURL, {
method: "PUT",
// net.fetch apparently deduces and inserts a content-length,
// because when we use the node native fetch then we need to
// provide it explicitly.
headers: { "Content-Length": `${videoSize}` },
// The duplex option is required since we're passing a stream.
//
// @ts-expect-error TypeScript's libdom.d.ts does not include
// the "duplex" parameter, e.g. see
// https://github.com/node-fetch/node-fetch/issues/1769.
duplex: "half",
body: webStream,
});
if (res.ok) {
// Success.
return;
}
if (res.status >= 400 && res.status < 500 && res.status != 429) {
// HTTP 4xx, except potentially transient 429 rate limits.
abort = true;
}
const res = await request();
if (res.ok) /* Success. */ return res;
throw new Error(
`Failed to upload generated HLS video: HTTP ${res.status} ${res.statusText}`,
`Request failed: HTTP ${res.status} ${res.statusText}`,
);
} catch (e) {
if (abort) {
throw e;
}
const t = waitTimeBeforeNextTry.shift();
if (!t) {
throw e;
} else {
log.warn("Will retry potentially transient request failure", e);
await wait(t);
}
await wait(t);
}
}
};
const uploadVideoSegmentsMultipart = async (
videoFilePath: string,
videoSize: number,
partSize: number,
partUploadURLs: string[],
completionURL: string,
) => {
// The part we're currently uploading.
let partNumber = 0;
// A rolling offset into the file.
let start = 0;
// See `createMultipartUploadRequestBody` in the web code for a more
// expansive and documented version of this XML body construction.
const completionXML = ["<CompleteMultipartUpload>"];
for (const partUploadURL of partUploadURLs) {
partNumber += 1;
const size = Math.min(start + partSize, videoSize) - start;
const end = start + size - 1;
const res = await retryEnsuringHTTPOk(() =>
fetch(partUploadURL, {
method: "PUT",
headers: {
...publicRequestHeaders(desktopAppVersion()),
"Content-Length": `${size}`,
},
// See: [Note: duplex param required for stream body]
// @ts-expect-error ^see note above
duplex: "half",
body: Readable.toWeb(
// start and end are inclusive 0-indexed range of bytes to
// read from the file.
fs_.createReadStream(videoFilePath, { start, end }),
),
}),
);
const eTag = res.headers.get("etag");
if (!eTag) throw new Error("Response did not have an ETag");
start += size;
completionXML.push(
`<Part><PartNumber>${partNumber}</PartNumber><ETag>${eTag}</ETag></Part>`,
);
}
completionXML.push("</CompleteMultipartUpload>");
const completionBody = completionXML.join("");
return await retryEnsuringHTTPOk(() =>
fetch(completionURL, {
method: "POST",
headers: {
...publicRequestHeaders(desktopAppVersion()),
"Content-Type": "text/xml",
},
body: completionBody,
}),
);
};
/**
* A regex that matches the first line of the form
*

View File

@@ -3,6 +3,7 @@ import log from "../log";
import { clearPendingVideoResults } from "../stream";
import { clearStores } from "./store";
import { watchReset } from "./watch";
import { terminateUtilityProcesses } from "./workers";
import { clearOpenZipCache } from "./zip";
/**
@@ -36,4 +37,9 @@ export const logout = (watcher: FSWatcher) => {
} catch (e) {
ignoreError("zip cache", e);
}
try {
terminateUtilityProcesses();
} catch (e) {
ignoreError("utility processes", e);
}
};

View File

@@ -15,6 +15,7 @@ import { existsSync } from "fs";
import fs from "node:fs/promises";
import path from "node:path";
import * as ort from "onnxruntime-node";
import { z } from "zod/v4";
import log from "../log-worker";
import { messagePortMainEndpoint } from "../utils/comlink";
import { wait } from "../utils/common";
@@ -23,6 +24,8 @@ import { fsStatMtime } from "./fs";
log.debugString("Started ML utility process");
process.on("uncaughtException", (e, origin) => log.error(origin, e));
process.parentPort.once("message", (e) => {
// Initialize ourselves with the data we got from our parent.
parseInitData(e.data);
@@ -50,17 +53,10 @@ let _userDataPath: string | undefined;
/** Equivalent to app.getPath("userData") */
const userDataPath = () => _userDataPath!;
const MLWorkerInitData = z.object({ userDataPath: z.string() });
const parseInitData = (data: unknown) => {
if (
data &&
typeof data == "object" &&
"userDataPath" in data &&
typeof data.userDataPath == "string"
) {
_userDataPath = data.userDataPath;
} else {
log.error("Unparseable initialization data");
}
_userDataPath = MLWorkerInitData.parse(data).userDataPath;
};
/**
@@ -188,14 +184,13 @@ const downloadModel = async (saveLocation: string, name: string) => {
/**
* Create an ONNX {@link InferenceSession} with some defaults.
*/
const createInferenceSession = async (modelPath: string) => {
return await ort.InferenceSession.create(modelPath, {
const createInferenceSession = (modelPath: string) =>
ort.InferenceSession.create(modelPath, {
// Restrict the number of threads to 1.
intraOpNumThreads: 1,
// Be more conservative with RAM usage.
enableCpuMemArena: false,
});
};
const cachedCLIPImageSession = makeCachedInferenceSession(
"mobileclip_s2_image_opset18_rgba_opt.onnx",
@@ -237,9 +232,11 @@ const getTokenizer = () => (_tokenizer ??= new Tokenizer());
export const computeCLIPTextEmbeddingIfAvailable = async (text: string) => {
const sessionOrSkip = await Promise.race([
cachedCLIPTextSession(),
// Wait for a tick to get the session promise to resolved the first time
// this code runs on each app start (and the model has been downloaded).
wait(0).then(() => 1),
// Wait a bit to get the session promise to resolved the first time this
// code runs on each app start (in these cases the model will already be
// downloaded, so session creation should take only a 1 or 2 ticks: file
// system stat, and ort.InferenceSession.create).
wait(50).then(() => 1),
]);
// Don't wait for the download to complete.

View File

@@ -24,17 +24,17 @@ export const clearStores = () => {
* On macOS, `safeStorage` stores our data under a Keychain entry named
* "<app-name> Safe Storage". In our case, "ente Safe Storage".
*/
export const saveMasterKeyB64 = (masterKeyB64: string) => {
const encryptedKey = safeStorage.encryptString(masterKeyB64);
const b64EncryptedKey = Buffer.from(encryptedKey).toString("base64");
safeStorageStore.set("encryptionKey", b64EncryptedKey);
export const saveMasterKeyInSafeStorage = (masterKey: string) => {
const encryptedKeyBuffer = safeStorage.encryptString(masterKey);
const encryptedKey = Buffer.from(encryptedKeyBuffer).toString("base64");
safeStorageStore.set("encryptionKey", encryptedKey);
};
export const masterKeyB64 = (): string | undefined => {
const b64EncryptedKey = safeStorageStore.get("encryptionKey");
if (!b64EncryptedKey) return undefined;
const keyBuffer = Buffer.from(b64EncryptedKey, "base64");
return safeStorage.decryptString(keyBuffer);
export const masterKeyFromSafeStorage = (): string | undefined => {
const encryptedKey = safeStorageStore.get("encryptionKey");
if (!encryptedKey) return undefined;
const encryptedKeyBuffer = Buffer.from(encryptedKey, "base64");
return safeStorage.decryptString(encryptedKeyBuffer);
};
export const lastShownChangelogVersion = (): number | undefined =>

View File

@@ -28,6 +28,13 @@ export const createWatcher = (mainWindow: BrowserWindow) => {
// Ask the watcher to wait for a the file size to stabilize before
// telling us about a new file. By default, it waits for 2 seconds.
awaitWriteFinish: true,
// On macOS we start getting "EMFILE: too many open files" when watching
// large folders. This is a known regression in Chokidar v4:
// https://github.com/paulmillr/chokidar/issues/1385
//
// The recommended workaround for now is to enable usePolling. Since it
// comes at a performance cost, we only do it where needed (macOS).
...(process.platform == "darwin" ? { usePolling: true } : {}),
});
watcher

View File

@@ -15,9 +15,22 @@ import type { UtilityProcessType } from "../../types/ipc";
import log, { processUtilityProcessLogMessage } from "../log";
import { messagePortMainEndpoint } from "../utils/comlink";
/**
* Terminate any existing utility processes if they're running.
*
* This function is called during the logout sequence.
*/
export const terminateUtilityProcesses = () => {
terminateMLProcessIfRunning();
terminateFFmpegProcessIfRunning();
};
/** The active ML utility process, if any. */
let _utilityProcessML: UtilityProcess | undefined;
/** The active FFmpeg utility process, if any. */
let _utilityProcessFFmpeg: UtilityProcess | undefined;
/**
* A promise to a comlink {@link Endpoint} that can be used to communicate with
* the active ffmpeg utility process (if any).
@@ -92,18 +105,22 @@ export const triggerCreateUtilityProcess = (
window: BrowserWindow,
) => triggerCreateMLUtilityProcess(window);
export const triggerCreateMLUtilityProcess = (window: BrowserWindow) => {
const terminateMLProcessIfRunning = () => {
if (_utilityProcessML) {
log.debug(() => "Terminating previous ML utility process");
log.debug(() => "Terminating running ML utility process");
_utilityProcessML.kill();
_utilityProcessML = undefined;
}
};
export const triggerCreateMLUtilityProcess = (window: BrowserWindow) => {
terminateMLProcessIfRunning();
const { port1, port2 } = new MessageChannelMain();
const child = utilityProcess.fork(path.join(__dirname, "ml-worker.js"));
const userDataPath = app.getPath("userData");
child.postMessage({ userDataPath }, [port1]);
child.postMessage(/* MLWorkerInitData */ { userDataPath }, [port1]);
window.webContents.postMessage("utilityProcessPort/ml", undefined, [port2]);
@@ -173,7 +190,20 @@ const handleMessagesFromMLUtilityProcess = (child: UtilityProcess) => {
export const ffmpegUtilityProcessEndpoint = () =>
(_utilityProcessFFmpegEndpoint ??= createFFmpegUtilityProcessEndpoint());
const terminateFFmpegProcessIfRunning = () => {
if (_utilityProcessFFmpeg) {
log.debug(() => "Terminating running FFmpeg utility process");
_utilityProcessFFmpeg.kill();
_utilityProcessFFmpeg = undefined;
_utilityProcessFFmpegEndpoint = undefined;
}
};
const createFFmpegUtilityProcessEndpoint = () => {
if (_utilityProcessFFmpeg) {
throw new Error("FFmpeg utility process is already running");
}
// Promise.withResolvers is currently in the node available to us.
let resolve: ((endpoint: Endpoint) => void) | undefined;
const promise = new Promise<Endpoint>((r) => (resolve = r));
@@ -182,8 +212,10 @@ const createFFmpegUtilityProcessEndpoint = () => {
const child = utilityProcess.fork(path.join(__dirname, "ffmpeg-worker.js"));
// Send a handle to the port (one end of the message channel) to the utility
// process. The utility process will reply with an "ack" when it get it.
child.postMessage({}, [port1]);
// process (alongwith any other init data). The utility process will reply
// with an "ack" when it get it.
const appVersion = app.getVersion();
child.postMessage(/* FFmpegWorkerInitData */ { appVersion }, [port1]);
child.on("message", (m: unknown) => {
if (m && typeof m == "object" && "method" in m) {
@@ -201,6 +233,8 @@ const createFFmpegUtilityProcessEndpoint = () => {
log.info("Ignoring unknown message from ffmpeg utility process", m);
});
_utilityProcessFFmpeg = child;
// Resolve with the other end of the message channel (once we get an "ack"
// from the utility process).
return promise;

View File

@@ -277,9 +277,9 @@ const handleVideoDone = async (token: string) => {
*
* The difference here is that we the conversion generates two streams^ - one
* for the HLS playlist itself, and one for the file containing the encrypted
* and transcoded video chunks. The video stream we write to the objectUploadURL
* (provided via {@link params}), and then we return a JSON object containing
* the token for the playlist, and other metadata for use by the renderer.
* and transcoded video chunks. The video stream we write to the pre-signed
* object upload URL(s), and then we return a JSON object containing the token
* for the playlist, and other metadata for use by the renderer.
*
* ^ if the video doesn't require a stream to be generated (e.g. it is very
* small and already uses a compatible codec) then a HTT 204 is returned and
@@ -289,8 +289,10 @@ const handleGenerateHLSWrite = async (
request: Request,
params: URLSearchParams,
) => {
const objectUploadURL = params.get("objectUploadURL");
if (!objectUploadURL) throw new Error("Missing objectUploadURL");
const fileID = parseInt(params.get("fileID") ?? "", 10);
const fetchURL = params.get("fetchURL");
const authToken = params.get("authToken");
if (!fileID || !fetchURL || !authToken) throw new Error("Missing params");
let inputItem: Parameters<typeof makeFileForStreamOrPathOrZipItem>[0];
const path = params.get("path");
@@ -324,7 +326,9 @@ const handleGenerateHLSWrite = async (
result = await worker.ffmpegGenerateHLSPlaylistAndSegments(
inputFilePath,
outputFilePathPrefix,
objectUploadURL,
fileID,
fetchURL,
authToken,
);
if (!result) {
@@ -332,13 +336,18 @@ const handleGenerateHLSWrite = async (
return new Response(null, { status: 204 });
}
const { playlistPath, videoSize, dimensions } = result;
const { playlistPath, dimensions, videoSize, videoObjectID } = result;
const playlistToken = randomUUID();
pendingVideoResults.set(playlistToken, playlistPath);
return new Response(
JSON.stringify({ playlistToken, videoSize, dimensions }),
JSON.stringify({
playlistToken,
dimensions,
videoSize,
videoObjectID,
}),
{ status: 200 },
);
} finally {

View File

@@ -15,3 +15,11 @@
*/
export const wait = (ms: number) =>
new Promise((resolve) => setTimeout(resolve, ms));
/**
* Convert `null` to `undefined`, passthrough everything else unchanged.
*
* Duplicated from `web/packages/utils/transform.ts`.
*/
export const nullToUndefined = <T>(v: T | null | undefined): T | undefined =>
v === null ? undefined : v;

View File

@@ -0,0 +1,31 @@
export const clientPackageName = "io.ente.photos.desktop";
/**
* Reimplementation of {@link publicRequestHeaders} from the web source.
*
* @param desktopAppVersion The desktop app's version. This will get passed on
* as the "X-Client-Version" header.
*
* We cannot directly use `app.getVersion()` to obtain this value since the
* {@link app} module is not accessible to Electron utility processes which also
* calls this function.
*/
export const publicRequestHeaders = (desktopAppVersion: string) => ({
"X-Client-Package": clientPackageName,
"X-Client-Version": desktopAppVersion,
});
/**
* Reimplementation of {@link authenticatedRequestHeaders} from the web source.
*
* This builds on top of {@link publicRequestHeaders} and takes the same
* parameters, and additionally also requires the {@link authToken} that will be
* passed as the "X-Auth-Token" header.
*/
export const authenticatedRequestHeaders = (
desktopAppVersion: string,
authToken: string,
) => ({
...publicRequestHeaders(desktopAppVersion),
"X-Auth-Token": authToken,
});

View File

@@ -113,10 +113,11 @@ const logout = () => {
return ipcRenderer.invoke("logout");
};
const masterKeyB64 = () => ipcRenderer.invoke("masterKeyB64");
const masterKeyFromSafeStorage = () =>
ipcRenderer.invoke("masterKeyFromSafeStorage");
const saveMasterKeyB64 = (masterKeyB64: string) =>
ipcRenderer.invoke("saveMasterKeyB64", masterKeyB64);
const saveMasterKeyInSafeStorage = (masterKey: string) =>
ipcRenderer.invoke("saveMasterKeyInSafeStorage", masterKey);
const lastShownChangelogVersion = () =>
ipcRenderer.invoke("lastShownChangelogVersion");
@@ -358,8 +359,8 @@ contextBridge.exposeInMainWorld("electron", {
selectDirectory,
pathForFile,
logout,
masterKeyB64,
saveMasterKeyB64,
masterKeyFromSafeStorage,
saveMasterKeyInSafeStorage,
lastShownChangelogVersion,
setLastShownChangelogVersion,
isAutoLaunchEnabled,

View File

@@ -25,7 +25,7 @@
ajv "^6.12.0"
ajv-keywords "^3.4.1"
"@electron/asar@3.4.1":
"@electron/asar@3.4.1", "@electron/asar@^3.2.7":
version "3.4.1"
resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.4.1.tgz#4e9196a4b54fba18c56cd8d5cac67c5bdc588065"
integrity sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==
@@ -34,15 +34,6 @@
glob "^7.1.6"
minimatch "^3.0.4"
"@electron/asar@^3.2.7":
version "3.2.18"
resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.18.tgz#fa607f829209bab8b9e0ce6658d3fe81b2cba517"
integrity sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg==
dependencies:
commander "^5.0.0"
glob "^7.1.6"
minimatch "^3.0.4"
"@electron/fuses@^1.8.0":
version "1.8.0"
resolved "https://registry.yarnpkg.com/@electron/fuses/-/fuses-1.8.0.tgz#ad34d3cc4703b1258b83f6989917052cfc1490a0"
@@ -184,10 +175,10 @@
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06"
integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==
"@eslint/js@^9.25.1":
version "9.25.1"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.25.1.tgz#25f5c930c2b68b5ebe7ac857f754cbd61ef6d117"
integrity sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==
"@eslint/js@^9.29.0":
version "9.29.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.29.0.tgz#dc6fd117c19825f8430867a662531da36320fe56"
integrity sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==
"@eslint/object-schema@^2.1.4":
version "2.1.4"
@@ -209,6 +200,18 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.0.tgz#6d86b8cb322660f03d3f0aa94b99bdd8e172d570"
integrity sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==
"@isaacs/balanced-match@^4.0.1":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29"
integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==
"@isaacs/brace-expansion@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3"
integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==
dependencies:
"@isaacs/balanced-match" "^4.0.1"
"@isaacs/fs-minipass@^4.0.0":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32"
@@ -297,10 +300,10 @@
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
"@tsconfig/node22@^22.0.1":
version "22.0.1"
resolved "https://registry.yarnpkg.com/@tsconfig/node22/-/node22-22.0.1.tgz#27e3ee9b359e31e5b94690bf2bad5a923c1d57d0"
integrity sha512-VkgOa3n6jvs1p+r3DiwBqeEwGAwEvnVCg/hIjiANl5IEcqP3G0u5m8cBJspe1t9qjZRlZ7WFgqq5bJrGdgAKMg==
"@tsconfig/node22@^22.0.2":
version "22.0.2"
resolved "https://registry.yarnpkg.com/@tsconfig/node22/-/node22-22.0.2.tgz#1e04e2c5cc946dac787d69bb502462a851ae51b6"
integrity sha512-Kmwj4u8sDRDrMYRoN9FDEcXD8UpBSaPQQ24Gz+Gamqfm7xxn+GBR7ge/Z7pK8OXNGyUzbSwJj+TH6B+DS/epyA==
"@types/auto-launch@^5.0.5":
version "5.0.5"
@@ -324,11 +327,6 @@
dependencies:
"@types/ms" "*"
"@types/ffmpeg-static@^3.0.3":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@types/ffmpeg-static/-/ffmpeg-static-3.0.3.tgz#605358ac6304507a75c2fd5fd861534837b19e2f"
integrity sha512-wmjANN0CiYs5clQESK+xE6plet0y9ndqaNBdQx4IIw7ZbPBMQw+14Lq4ky2WqMqGlpFJ9ZUxU0O43TvVZziyyA==
"@types/fs-extra@9.0.13", "@types/fs-extra@^9.0.11":
version "9.0.13"
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45"
@@ -392,62 +390,78 @@
dependencies:
"@types/node" "*"
"@typescript-eslint/eslint-plugin@8.32.1":
version "8.32.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.1.tgz#9185b3eaa3b083d8318910e12d56c68b3c4f45b4"
integrity sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==
"@typescript-eslint/eslint-plugin@8.34.1":
version "8.34.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz#56cf35b89383eaf2bdcf602f5bbdac6dbb11e51b"
integrity sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==
dependencies:
"@eslint-community/regexpp" "^4.10.0"
"@typescript-eslint/scope-manager" "8.32.1"
"@typescript-eslint/type-utils" "8.32.1"
"@typescript-eslint/utils" "8.32.1"
"@typescript-eslint/visitor-keys" "8.32.1"
"@typescript-eslint/scope-manager" "8.34.1"
"@typescript-eslint/type-utils" "8.34.1"
"@typescript-eslint/utils" "8.34.1"
"@typescript-eslint/visitor-keys" "8.34.1"
graphemer "^1.4.0"
ignore "^7.0.0"
natural-compare "^1.4.0"
ts-api-utils "^2.1.0"
"@typescript-eslint/parser@8.32.1":
version "8.32.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.32.1.tgz#18b0e53315e0bc22b2619d398ae49a968370935e"
integrity sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==
"@typescript-eslint/parser@8.34.1":
version "8.34.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.34.1.tgz#f102357ab3a02d5b8aa789655905662cc5093067"
integrity sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==
dependencies:
"@typescript-eslint/scope-manager" "8.32.1"
"@typescript-eslint/types" "8.32.1"
"@typescript-eslint/typescript-estree" "8.32.1"
"@typescript-eslint/visitor-keys" "8.32.1"
"@typescript-eslint/scope-manager" "8.34.1"
"@typescript-eslint/types" "8.34.1"
"@typescript-eslint/typescript-estree" "8.34.1"
"@typescript-eslint/visitor-keys" "8.34.1"
debug "^4.3.4"
"@typescript-eslint/scope-manager@8.32.1":
version "8.32.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz#9a6bf5fb2c5380e14fe9d38ccac6e4bbe17e8afc"
integrity sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==
"@typescript-eslint/project-service@8.34.1":
version "8.34.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.34.1.tgz#20501f8b87202c45f5e70a5b24dcdcb8fe12d460"
integrity sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==
dependencies:
"@typescript-eslint/types" "8.32.1"
"@typescript-eslint/visitor-keys" "8.32.1"
"@typescript-eslint/tsconfig-utils" "^8.34.1"
"@typescript-eslint/types" "^8.34.1"
debug "^4.3.4"
"@typescript-eslint/type-utils@8.32.1":
version "8.32.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.32.1.tgz#b9292a45f69ecdb7db74d1696e57d1a89514d21e"
integrity sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==
"@typescript-eslint/scope-manager@8.34.1":
version "8.34.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz#727ea43441f4d23d5c73d34195427d85042e5117"
integrity sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==
dependencies:
"@typescript-eslint/typescript-estree" "8.32.1"
"@typescript-eslint/utils" "8.32.1"
"@typescript-eslint/types" "8.34.1"
"@typescript-eslint/visitor-keys" "8.34.1"
"@typescript-eslint/tsconfig-utils@8.34.1", "@typescript-eslint/tsconfig-utils@^8.34.1":
version "8.34.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz#d6abb1b1e9f1f1c83ac92051c8fbf2dbc4dc9f5e"
integrity sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==
"@typescript-eslint/type-utils@8.34.1":
version "8.34.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz#df860d8edefbfe142473ea4defb7408edb0c379e"
integrity sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==
dependencies:
"@typescript-eslint/typescript-estree" "8.34.1"
"@typescript-eslint/utils" "8.34.1"
debug "^4.3.4"
ts-api-utils "^2.1.0"
"@typescript-eslint/types@8.32.1":
version "8.32.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.32.1.tgz#b19fe4ac0dc08317bae0ce9ec1168123576c1d4b"
integrity sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==
"@typescript-eslint/types@8.34.1", "@typescript-eslint/types@^8.34.1":
version "8.34.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.34.1.tgz#565a46a251580dae674dac5aafa8eb14b8322a35"
integrity sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==
"@typescript-eslint/typescript-estree@8.32.1":
version "8.32.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz#9023720ca4ecf4f59c275a05b5fed69b1276face"
integrity sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==
"@typescript-eslint/typescript-estree@8.34.1":
version "8.34.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz#befdb042a6bc44fdad27429b2d3b679c80daad71"
integrity sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==
dependencies:
"@typescript-eslint/types" "8.32.1"
"@typescript-eslint/visitor-keys" "8.32.1"
"@typescript-eslint/project-service" "8.34.1"
"@typescript-eslint/tsconfig-utils" "8.34.1"
"@typescript-eslint/types" "8.34.1"
"@typescript-eslint/visitor-keys" "8.34.1"
debug "^4.3.4"
fast-glob "^3.3.2"
is-glob "^4.0.3"
@@ -455,23 +469,23 @@
semver "^7.6.0"
ts-api-utils "^2.1.0"
"@typescript-eslint/utils@8.32.1":
version "8.32.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.32.1.tgz#4d6d5d29b9e519e9a85e9a74e9f7bdb58abe9704"
integrity sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==
"@typescript-eslint/utils@8.34.1":
version "8.34.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.34.1.tgz#f98c9b0c5cae407e34f5131cac0f3a74347a398e"
integrity sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==
dependencies:
"@eslint-community/eslint-utils" "^4.7.0"
"@typescript-eslint/scope-manager" "8.32.1"
"@typescript-eslint/types" "8.32.1"
"@typescript-eslint/typescript-estree" "8.32.1"
"@typescript-eslint/scope-manager" "8.34.1"
"@typescript-eslint/types" "8.34.1"
"@typescript-eslint/typescript-estree" "8.34.1"
"@typescript-eslint/visitor-keys@8.32.1":
version "8.32.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz#4321395cc55c2eb46036cbbb03e101994d11ddca"
integrity sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==
"@typescript-eslint/visitor-keys@8.34.1":
version "8.34.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz#28a1987ea3542ccafb92aa792726a304b39531cf"
integrity sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==
dependencies:
"@typescript-eslint/types" "8.32.1"
eslint-visitor-keys "^4.2.0"
"@typescript-eslint/types" "8.34.1"
eslint-visitor-keys "^4.2.1"
"@xmldom/xmldom@^0.8.8":
version "0.8.10"
@@ -1177,7 +1191,7 @@ ejs@^3.1.8:
dependencies:
jake "^10.8.5"
electron-builder@^26.0.14:
electron-builder@26.0.14:
version "26.0.14"
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-26.0.14.tgz#8927c6da42a69425d15e08f351e944ea0e7866da"
integrity sha512-YBxpWLMGj0oS7fbS3LVingeZqFunU0F8s+uB9QTd5+wN4qgrf/rSGRkqoImbWg2+F2yHq11wmaA/Xr9xzvgQ0w==
@@ -1193,10 +1207,10 @@ electron-builder@^26.0.14:
simple-update-notifier "2.0.0"
yargs "^17.6.2"
electron-log@^5.4.0:
version "5.4.0"
resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.4.0.tgz#3180bf5194b2e2efacb62ec1392f8150faf4de6b"
integrity sha512-AXI5OVppskrWxEAmCxuv8ovX+s2Br39CpCAgkGMNHQtjYT3IiVbSQTncEjFVGPgoH35ZygRm/mvUMBDWwhRxgg==
electron-log@^5.4.1:
version "5.4.1"
resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.4.1.tgz#700ddc6ef4b06c13a983468580ba7a7e579129d4"
integrity sha512-QvisA18Z++8E3Th0zmhUelys9dEv7aIeXJlbFw3UrxCc8H9qSRW0j8/ooTef/EtHui8tVmbKSL+EIQzP9GoRLg==
electron-publish@26.0.13:
version "26.0.13"
@@ -1220,10 +1234,10 @@ electron-store@^8.2.0:
conf "^10.2.0"
type-fest "^2.17.0"
electron-updater@^6.6.3:
version "6.6.3"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-6.6.3.tgz#a1f53671ffbb08a475d495d48f0c0d971e665d5d"
integrity sha512-i448/SwMtqxy5wqAcXScnWjiFxZp+hmWA2jZCmojcdfodEGhi/DWTdRP01mE3lCILb8hmdE28SBaHf1oQW3+kw==
electron-updater@^6.6.5:
version "6.6.5"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-6.6.5.tgz#6614daa2f737c294471eee7ce7b61deda0d5543a"
integrity sha512-jnk38WfByl2Pb0cje02xls/pJkvkq3AQZI7usDCLriU23adkerLTkRrugbCPuUxUOa79nY1g/rokHPWHZFBKyA==
dependencies:
builder-util-runtime "9.3.2"
fs-extra "^10.1.0"
@@ -1234,10 +1248,10 @@ electron-updater@^6.6.3:
semver "^7.6.3"
tiny-typed-emitter "^2.1.0"
electron@^36.2.1:
version "36.2.1"
resolved "https://registry.yarnpkg.com/electron/-/electron-36.2.1.tgz#7c9d7c6c7076a3ddb7b1c326a851cb92c775b0b1"
integrity sha512-mm1Y+Ms46xcOTA69h8hpqfX392HfV4lga9aEkYkd/Syx1JBStvcACOIouCgGrnZpxNZPVS1jM8NTcMkNjuK6BQ==
electron@^37.1.0:
version "37.1.0"
resolved "https://registry.yarnpkg.com/electron/-/electron-37.1.0.tgz#6d6d1891f8add5d2d44007e2ee5d4542140fc4b4"
integrity sha512-Fcr3yfAw4oU392waVZSlrFUQx4P+h/k31+PRgkBY9tFx9E/zxzdPQQj0achZlG1HRDusw3ooQB+OXb9PvufdzA==
dependencies:
"@electron/get" "^2.0.0"
"@types/node" "^22.7.7"
@@ -1312,11 +1326,16 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
eslint-visitor-keys@^4.0.0, eslint-visitor-keys@^4.2.0:
eslint-visitor-keys@^4.0.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45"
integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==
eslint-visitor-keys@^4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1"
integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==
eslint@^9:
version "9.9.1"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.9.1.tgz#147ac9305d56696fb84cf5bdecafd6517ddc77ec"
@@ -2260,11 +2279,11 @@ mimic-response@^3.1.0:
integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
minimatch@^10.0.0:
version "10.0.1"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b"
integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==
version "10.0.3"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.3.tgz#cf7a0314a16c4d9ab73a7730a0e8e3c3502d47aa"
integrity sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==
dependencies:
brace-expansion "^2.0.1"
"@isaacs/brace-expansion" "^5.0.0"
minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
@@ -2664,13 +2683,13 @@ prettier-plugin-organize-imports@^4.1.0:
resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz#f3d3764046a8e7ba6491431158b9be6ffd83b90f"
integrity sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==
prettier-plugin-packagejson@^2.5.13:
version "2.5.13"
resolved "https://registry.yarnpkg.com/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.13.tgz#4e908d25b97a8f8f1cb69fd611caa677653787d5"
integrity sha512-94B/Xy25HwiwSkGUGnwQw3cBw9jg9L5LfKCHpuRMjC8ETPq4oCMa2S4EblV628E0XER9n6v5rH0TQY9cUd10pg==
prettier-plugin-packagejson@^2.5.15:
version "2.5.15"
resolved "https://registry.yarnpkg.com/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.15.tgz#7ea880d4bb1681b5331ea7044efd3d653776f469"
integrity sha512-2QSx6y4IT6LTwXtCvXAopENW5IP/aujC8fobEM2pDbs0IGkiVjW/ipPuYAHuXigbNe64aGWF7vIetukuzM3CBw==
dependencies:
sort-package-json "3.2.1"
synckit "0.11.5"
synckit "0.11.8"
prettier@3.5.3:
version "3.5.3"
@@ -3108,13 +3127,12 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
synckit@0.11.5:
version "0.11.5"
resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.5.tgz#258b3185736512f7ef11a42d67c4f3ad49da1744"
integrity sha512-frqvfWyDA5VPVdrWfH24uM6SI/O8NLpVbIIJxb8t/a3YGsp4AW9CYgSKC0OaSEfexnp7Y1pVh2Y6IHO8ggGDmA==
synckit@0.11.8:
version "0.11.8"
resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.8.tgz#b2aaae998a4ef47ded60773ad06e7cb821f55457"
integrity sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==
dependencies:
"@pkgr/core" "^0.2.4"
tslib "^2.8.1"
tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.2.1:
version "6.2.1"
@@ -3214,11 +3232,6 @@ tslib@^2.1.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01"
integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==
tslib@^2.8.1:
version "2.8.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
@@ -3241,14 +3254,14 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
typescript-eslint@^8.32.1:
version "8.32.1"
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.32.1.tgz#1784335c781491be528ff84ab666e2f0f7591fd1"
integrity sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==
typescript-eslint@^8.34.1:
version "8.34.1"
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.34.1.tgz#4bab64b298531b9f6f3ff59b41a7161321ef8cd6"
integrity sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==
dependencies:
"@typescript-eslint/eslint-plugin" "8.32.1"
"@typescript-eslint/parser" "8.32.1"
"@typescript-eslint/utils" "8.32.1"
"@typescript-eslint/eslint-plugin" "8.34.1"
"@typescript-eslint/parser" "8.34.1"
"@typescript-eslint/utils" "8.34.1"
typescript@^5.4.3, typescript@^5.8.3:
version "5.8.3"
@@ -3410,3 +3423,8 @@ yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
zod@^3.25.67:
version "3.25.67"
resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.67.tgz#62987e4078e2ab0f63b491ef0c4f33df24236da8"
integrity sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==

View File

@@ -8,13 +8,6 @@ export default defineConfig({
head: [["link", { rel: "icon", type: "image/png", href: "/favicon.png" }]],
cleanUrls: true,
ignoreDeadLinks: "localhostLinks",
vite: {
build: {
rollupOptions: {
external: ['client-museum-s3.png'] // Added to handle static asset import
}
}
},
themeConfig: {
// We use the default theme (with some CSS color overrides). This
// themeConfig block can be used to further customize the default theme.

View File

@@ -52,6 +52,10 @@ export const sidebar = [
link: "/photos/features/machine-learning",
},
{ text: "Map", link: "/photos/features/map" },
{
text: "Notifications",
link: "/photos/features/notifications",
},
{
text: "Passkeys",
link: "/photos/features/passkeys",
@@ -292,7 +296,7 @@ export const sidebar = [
},
{
text: "Bucket CORS",
link: '/self-hosting/troubleshooting/bucket-cors'
link: "/self-hosting/troubleshooting/bucket-cors",
},
{
text: "Uploads",
@@ -311,16 +315,16 @@ export const sidebar = [
{
text: "Community Guides",
collapsed: true,
items :[
items: [
{
text: "Ente via Tailscale",
link: "/self-hosting/guides/Tailscale",
link: "/self-hosting/guides/tailscale",
},
{
text: "Ente with External S3",
link: "/self-hosting/guides/external-s3",
}
]
},
],
},
{
text: "FAQ",
@@ -347,12 +351,4 @@ export const sidebar = [
},
],
},
{
text: "About",
link: "/about/",
},
{
text: "Contribute",
link: "/about/contribute",
},
];

View File

@@ -1,15 +0,0 @@
---
title: Contribute
description: Details about how to contribute to Ente's docs
---
# Contributing
To contribute to these docs, you can use the "Edit this page" button at the
bottom of each page. This will allow you to directly edit the markdown file that
is used to generate this documentation and open a quick pull request directly
from GitHub's UI.
If you're more comfortable in contributing with your text editor, see the
`docs/` folder of our GitHub repository,
[github.com/ente-io/ente](https://github.com/ente-io/ente).

View File

@@ -1,72 +0,0 @@
---
title: About Ente
description: >
An overview of Ente: the company, and the people behind it, and the products
that we make.
---
# About
Ente is a end-to-end encrypted platform for privately, reliably, and securely
storing your data on the cloud. On top of this platform, Ente offers two
products:
- **Ente Photos** - An alternative to Google Photos and Apple Photos
- **Ente Auth** - A free 2FA alternative to Authy
Both these apps are available for all desktop (Linux, Mac, Windows) and mobile
(Android, iOS and F-Droid) platforms. They also work directly in your web
browser without you needing to install anything.
More products are in the pipeline.
## History
Ente was the founded by Vishnu Mohandas (he's also Ente's CEO) in response to
privacy concerns with major tech companies. The underlying motivation was the
understanding that big tech had no incentive to fix their act, but with
end-to-end encrypted cross platform apps, there was a way for people to take
back control over their own data without sacrificing on features.
### What does Ente mean?
In Malayalam, Vishnu's native language, "ente" means "mine". Thus "Ente Photos"
has the literal meaning "my photos".
This was a good name, but still Vishnu looked around for better ones. But one
day, he discovered that "ente" means "duck" in German. This unexpected
connection sealed the deal. We should ask him why he likes ducks so much, but
apparently he does, so this dual meaning ("mine" / "duck") led him to finalize
the name, and also led to the adoption of "Ducky", Ente's mascot:
<div align="center">
![Ente's mascot, Ducky](ducky.png){width=200px}
</div>
For the full origin story of Ducky you can check out
[this blog post](https://ente.io/blog/ducky/).
### How do I pronounce Ente?
en-_tay_. Like ca<i>fe</i>.
## Get in touch
If you have a support query that is not answered by these docs, please reach out
to our Customer Support by sending an email to support@ente.io
To stay up to date with new product launches, and behind the scenes details of
how we're building Ente, you can read our [blog](https://ente.io/blog) (or
subscribe to it via [RSS](https://ente.io/blog/rss.xml))
To suggest new features and/or offer your perspective on how we should design
planned and upcoming features, use our
[GitHub discussions](https://github.com/ente-io/ente/discussions)
Or if you'd just like to hang out, join our
[Discord](https://discord.gg/z2YVKkycX3), follow us on
[Twitter](https://twitter.com/enteio) or give us a shout out on
[Mastodon](https://mstdn.social/@ente)

View File

@@ -41,6 +41,16 @@ Usually, this discrepancy occurs because the time in your browser might be
incorrect. In particular, multiple users have reported that Firefox provides
incorrect time when certain privacy settings are enabled.
> [!TIP]
>
> Newer Ente Auth clients (upcoming 4.4.0+) will automatically try to correct
> for incorrect system time, so you should be seeing correct codes even if your
> system time is out of sync. However, this automatic correction will not work
> if you're using Ente Auth in offline mode.
>
> If you've recently changed your system time and the codes are still incorrect,
> try to refresh / restart the app if needed.
### Can I access my codes on web?
You can access your codes on the web at [auth.ente.io](https://auth.ente.io).

View File

@@ -10,8 +10,9 @@ A guide written by Green, an ente.io lover
> [!WARNING]
>
> Authy has dropped all support for its desktop apps. It is no longer possible
> to export data from Authy using methods 1 and 2. You will need either an iOS device
> and computer (method 4) or a rooted Android phone (method 3) to follow this guide.
> to export data from Authy using methods 1 and 2. You will need either an iOS
> device and computer (method 4) or a rooted Android phone (method 3) to follow
> this guide.
---
@@ -204,11 +205,24 @@ This uses the tool [Aegis Authenticator](https://getaegis.app/) from
## Method 4: Authy-iOS-MiTM
**Who should use this?** Technical iOS users of Authy that cannot export their tokens with methods 1 or 2 (due to those methods being patched) or method 3 (due to that method requiring a rooted Android device).
**Who should use this?** Technical iOS users of Authy that cannot export their
tokens with methods 1 or 2 (due to those methods being patched) or method 3 (due
to that method requiring a rooted Android device).
This method works by intercepting the data the Authy app receives while logging in for the first time, which contains your encrypted authenticator tokens. After the encrypted authenticator tokens are dumped, you can decrypt them using your backup password and convert them to an Ente token file.
This method works by intercepting the data the Authy app receives while logging
in for the first time, which contains your encrypted authenticator tokens. After
the encrypted authenticator tokens are dumped, you can decrypt them using your
backup password and convert them to an Ente token file.
For an up-to-date guide of how to retrieve the encrypted authenticator tokens and decrypt them, please see [Authy-iOS-MiTM](https://github.com/AlexTech01/Authy-iOS-MiTM). To convert the `decrypted_tokens.json` file from that guide into a format Ente Authenticator can recognize, use [this](https://gist.github.com/gboudreau/94bb0c11a6209c82418d01a59d958c93?permalink_comment_id=5317087#gistcomment-5317087) Python script. Once you have the `ente_auth_import.plain` file from that script, transfer it to your device and follow the instructions below to import it into Ente Authenticator.
For an up-to-date guide of how to retrieve the encrypted authenticator tokens
and decrypt them, please see
[Authy-iOS-MiTM](https://github.com/AlexTech01/Authy-iOS-MiTM). To convert the
`decrypted_tokens.json` file from that guide into a format Ente Authenticator
can recognize, use
[this](https://gist.github.com/gboudreau/94bb0c11a6209c82418d01a59d958c93?permalink_comment_id=5317087#gistcomment-5317087)
Python script. Once you have the `ente_auth_import.plain` file from that script,
transfer it to your device and follow the instructions below to import it into
Ente Authenticator.
## Importing to Ente Authenticator (Method 1, method 2.1, method 4)

View File

@@ -10,4 +10,4 @@ Ende-zu-Ende-verschlüsselte Authenticator-App für jedermann. Wir sind froh, da
du hier bist!
**Please note that this German translation is currently just a placeholder.**
Know German? [Help us fill this in!](/about/contribute).
Know German? [Help us fill this in!](/#contribute).

View File

@@ -1,15 +1,82 @@
---
title: Home
description: >
Introduction to Ente: Products, Community and Support
---
# Welcome!
This site contains documentation and help for Ente Photos and Ente Auth. It
describes various features, and also offers various troubleshooting suggestions.
![Ducky: Ente's Mascot](/public/ducky.png){width=50% style="margin: 0 auto"}
Use the **sidebar** menu to navigate to information about the product (Photos or
Auth) you'd like to know more about. Or use the **search** at the top to try and
jump directly to page that might contain the information you need.
## Introduction
To know more about Ente, see [about](/about/) or visit our website
[ente.io](https://ente.io).
Ente (pronounced en-_tay_) is a end-to-end encrypted platform for privately,
reliably, and securely storing your data on the cloud, over which 2 applications
have been developed and made available for mobile, web and desktop, namely:
- **Ente Photos** - An alternative to Google Photos and Apple Photos
- **Ente Auth** - A free 2FA alternative to Authy
## History
Ente was the founded by Vishnu Mohandas (he's also Ente's CEO) in response to
privacy concerns with major tech companies. The underlying motivation was the
understanding that big tech had no incentive to fix their act, but with
end-to-end encrypted cross platform apps, there was a way for people to take
back control over their own data without sacrificing on features.
### Origin of the name
In Malayalam, Vishnu's native language, "ente" means "mine", thus "Ente Photos"
literally means "my photos".
But one day, he discovered that "ente" means "duck" in German. This unexpected
connection sealed the deal after looking for alternative names and led to the
adoption of ["Ducky"](https://ente.io/blog/ducky/), representing the playfulness
and friendly nature of the community and team.
## Getting Started
We recommend reading the documentation for [Ente Photos](/photos/) or
[Ente Auth](/auth/) to get started with installation on the desired platform,
explore available features and usage.
If you are looking to self-host Ente, we recommend you to read the
[official documentation](/self-hosting/) for updated information on getting
started, installation, administration and maintenance.
## Contributing
There are many ways to support Ente and you don't have to be a programmer for
that. You can spread the word, give feedback, report bugs, help us with
translations, contribute documentation and community guides and more.
To suggest new features and/or offer your perspective on how we should design
(planned and upcoming features), use our
[GitHub discussions](https://github.com/ente-io/ente/discussions)
You can find our contribution guidelines
[here](https://github.com/ente-io/ente/blob/main/CONTRIBUTING.md).
You can always engage with our community and team to hang out, answer queries
and stay updated:
- Chat: [Discord](https://ente.io/discord)
- Discussions: [GitHub](https://github.com/ente-io/ente/discussions)
- Socials:
- Twitter: [enteio](https://twitter.com/enteio)
- Mastodon: [@ente@fosstodon.org](https://fosstodon.org/@ente)
- Bluesky: [ente.io](https://bsky.app/profile/ente.io)
- Instagram: [ente.app](https://www.instagram.com/ente.app)
- Website:
- [Blog](https://ente.io/blog)
- [RSS](https://ente.io/blog/rss.xml)
## Getting Help
If you encounter any issues with any of the products that's not answered by our
documentation, please reach out to our team by sending an email to
[support@ente.io](mailto:support@ente.io)
For community support, please post your queries on
[Discord](https://discord.gg/z2YVKkycX3)

View File

@@ -1,6 +1,7 @@
---
title: Desktop app FAQ
description: An assortment of frequently asked questions about Ente Photos desktop app
description:
An assortment of frequently asked questions about Ente Photos desktop app
---
# Desktop app FAQ
@@ -15,7 +16,8 @@ to manually update the software.
### Upload errors
**How do I identify which files experienced upload issues within the desktop app?**
**How do I identify which files experienced upload issues within the desktop
app?**
Check the sections within the upload progress bar for "Failed Uploads," "Ignored
Uploads," and "Unsuccessful Uploads."
@@ -33,6 +35,5 @@ 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).
> 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).

View File

@@ -7,9 +7,10 @@ description: Frequently asked questions about keeping extra backups of your data
## How can I backup my data in a local drive outside Ente?
You can use our CLI tool or our desktop app to set up exports of your data
to your local drive. This way, you can use Ente in your day to day use, with an additional guarantee that a copy of your original photos and videos are
always available on your machine.
You can use our CLI tool or our desktop app to set up exports of your data to
your local drive. This way, you can use Ente in your day to day use, with an
additional guarantee that a copy of your original photos and videos are always
available on your machine.
- You can use [Ente's CLI](https://github.com/ente-io/ente/tree/main/cli#export)
to export your data in a cron job to a location of your choice. The exports
@@ -21,7 +22,7 @@ always available on your machine.
background without you needing to run any other cron jobs. See
[migration/export](/photos/migration/export/) for more details.
## Does the exported data preserve folder structure?
## Does the exported data preserve album structure?
Yes. When you export your data for local backup, it will maintain the exact
album structure how you have set up within Ente.

View File

@@ -1,7 +1,6 @@
---
title: Face recognition
description:
Frequently asked questions about Ente's face recognition
description: Frequently asked questions about Ente's face recognition
---
# Face recognition

View File

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

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