Compare commits
578 Commits
docs-addiO
...
fdroid-v1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
68c2fbfec6 | ||
|
|
fd3bcbf2a8 | ||
|
|
78077e70c6 | ||
|
|
04e2fd0262 | ||
|
|
3c789e9758 | ||
|
|
e430d4a47d | ||
|
|
fa88396072 | ||
|
|
f4760187ab | ||
|
|
3644993964 | ||
|
|
4bdf879a50 | ||
|
|
6484419839 | ||
|
|
1440c7e07a | ||
|
|
85c899b41d | ||
|
|
a4ab3168ad | ||
|
|
5a524fa5b0 | ||
|
|
c597c2596c | ||
|
|
916c748479 | ||
|
|
45ef2b6976 | ||
|
|
a4141bb296 | ||
|
|
4f6eff1034 | ||
|
|
0ab2e2834a | ||
|
|
d84bdb645b | ||
|
|
99bb2b1d98 | ||
|
|
0dcb185744 | ||
|
|
12ba72e87c | ||
|
|
350a0159c9 | ||
|
|
f5f323cf3e | ||
|
|
f493f4d444 | ||
|
|
85cc0af308 | ||
|
|
2d88f4f6d7 | ||
|
|
8b52d5583c | ||
|
|
3fdbd8c735 | ||
|
|
dbb2ae79c6 | ||
|
|
58ffbc5eb4 | ||
|
|
1a764779ba | ||
|
|
7a35558175 | ||
|
|
d7f5ee6039 | ||
|
|
e8cf80bfde | ||
|
|
f03d269a5f | ||
|
|
e286696552 | ||
|
|
8142a7460b | ||
|
|
2216c2c746 | ||
|
|
d5488954b3 | ||
|
|
a6f9f3565d | ||
|
|
aada6bf415 | ||
|
|
822d74b65b | ||
|
|
cfc76b7e14 | ||
|
|
bb8a25bf63 | ||
|
|
74eff4d50b | ||
|
|
d01fdd966f | ||
|
|
0758c8a623 | ||
|
|
47e6419e23 | ||
|
|
137208f088 | ||
|
|
e69d466ff2 | ||
|
|
ff9473425c | ||
|
|
34dd088a9d | ||
|
|
92fa3488b4 | ||
|
|
a5c9ef207d | ||
|
|
4ebbb75ef6 | ||
|
|
b5909ac3b2 | ||
|
|
ea0c02a662 | ||
|
|
25e4cae14b | ||
|
|
4611db3983 | ||
|
|
ca7ff8cd16 | ||
|
|
c872f9177d | ||
|
|
b82df80864 | ||
|
|
c3fe7ab171 | ||
|
|
f2acf75b4a | ||
|
|
9327238d19 | ||
|
|
7342963f96 | ||
|
|
3579d44c78 | ||
|
|
35f5c7271b | ||
|
|
6521e09056 | ||
|
|
aa57c1a827 | ||
|
|
a0b4315842 | ||
|
|
4254a54071 | ||
|
|
df7d49d2cc | ||
|
|
0a33a44752 | ||
|
|
bf52a6923d | ||
|
|
778c72e33b | ||
|
|
eb874b8907 | ||
|
|
c06175cf11 | ||
|
|
b4a5c0c594 | ||
|
|
8830bb65a7 | ||
|
|
36bc214497 | ||
|
|
0f08280f2f | ||
|
|
292187ee9c | ||
|
|
ee7fba3c11 | ||
|
|
b37c2bc047 | ||
|
|
29ef3d4522 | ||
|
|
08d6fa3b6b | ||
|
|
0d181361a7 | ||
|
|
f4d4e1ad6b | ||
|
|
d91201a25b | ||
|
|
fbf0f934fb | ||
|
|
5abc106494 | ||
|
|
9ffba2fe91 | ||
|
|
4f55310145 | ||
|
|
ee7f6c3021 | ||
|
|
940de19b7d | ||
|
|
38c17bd813 | ||
|
|
82fb3324a7 | ||
|
|
f7a6a5e115 | ||
|
|
bdda47656c | ||
|
|
cc1b1a70f0 | ||
|
|
8b22d1e03f | ||
|
|
b4d22996c8 | ||
|
|
cd20b22eae | ||
|
|
149fba11f1 | ||
|
|
1da0455b77 | ||
|
|
9222b029b2 | ||
|
|
938e2dcadb | ||
|
|
ebf85c15c3 | ||
|
|
91494f7823 | ||
|
|
39f7af7932 | ||
|
|
960399b0a5 | ||
|
|
9a93cc121c | ||
|
|
6d3cb97ab0 | ||
|
|
970c1229c4 | ||
|
|
f213e9ad8c | ||
|
|
d943586faf | ||
|
|
27fe549e15 | ||
|
|
c1d1a3540a | ||
|
|
df64413478 | ||
|
|
2cd31826e7 | ||
|
|
a5ef3461d8 | ||
|
|
97e5b251c1 | ||
|
|
fd31cb3433 | ||
|
|
c1b6006f12 | ||
|
|
5d72070890 | ||
|
|
4e3bec7ad7 | ||
|
|
a002b26114 | ||
|
|
99e6425408 | ||
|
|
daae621770 | ||
|
|
c56801c024 | ||
|
|
551d099c4a | ||
|
|
d615614985 | ||
|
|
d80b220ad4 | ||
|
|
3916d2b7d8 | ||
|
|
4cdc72bc29 | ||
|
|
b5e429ebc5 | ||
|
|
c329b30e49 | ||
|
|
0285cd6b8c | ||
|
|
f145e0b424 | ||
|
|
a4bc596b66 | ||
|
|
5637d533ed | ||
|
|
f498a986c9 | ||
|
|
97935a5890 | ||
|
|
c5e7f233a7 | ||
|
|
675121f243 | ||
|
|
543fec4e4e | ||
|
|
5b3fa5e141 | ||
|
|
0e5bed8053 | ||
|
|
8d7333a223 | ||
|
|
20b873d266 | ||
|
|
a80c724d0f | ||
|
|
c45e4ad1d1 | ||
|
|
7201e796fb | ||
|
|
2fdb0ccbe4 | ||
|
|
e05701fce2 | ||
|
|
14b2f1aa94 | ||
|
|
533b2193be | ||
|
|
603e0bdb28 | ||
|
|
8b0267cce7 | ||
|
|
dfda91b99b | ||
|
|
43f3d4a5fe | ||
|
|
184852295f | ||
|
|
38fd244811 | ||
|
|
3024384628 | ||
|
|
55ec76d5f6 | ||
|
|
2e9517d75f | ||
|
|
8aacb503c1 | ||
|
|
743205f4c8 | ||
|
|
80188cb8ea | ||
|
|
f21ed45fee | ||
|
|
a28932c319 | ||
|
|
e6761ac703 | ||
|
|
c120cfc74b | ||
|
|
6a3b5a7f0e | ||
|
|
8308652d17 | ||
|
|
8e572c39d3 | ||
|
|
fd40383482 | ||
|
|
b79f72930a | ||
|
|
40f3ed7aad | ||
|
|
9c54e3f002 | ||
|
|
9e7833bf93 | ||
|
|
0b9242c527 | ||
|
|
3912f00fb7 | ||
|
|
7c58dbf551 | ||
|
|
705c9fbf86 | ||
|
|
d004bfa83d | ||
|
|
64d4c69159 | ||
|
|
f3ac886616 | ||
|
|
4fef527ac2 | ||
|
|
e9344c2ddc | ||
|
|
23039eba18 | ||
|
|
46c7eb140e | ||
|
|
280d29ffda | ||
|
|
e0843485d5 | ||
|
|
8b427bccad | ||
|
|
e291255838 | ||
|
|
08594222e0 | ||
|
|
26f7f85e75 | ||
|
|
4ece954c3a | ||
|
|
c0b83df2c3 | ||
|
|
a741d4126b | ||
|
|
6ef977be9c | ||
|
|
67ff3c9093 | ||
|
|
f21abd5133 | ||
|
|
04ad4a24c8 | ||
|
|
86675c66bc | ||
|
|
b7ef4a4adb | ||
|
|
78c35e2571 | ||
|
|
f9d42393a9 | ||
|
|
fb15ff540a | ||
|
|
8f4f66987c | ||
|
|
935456bd16 | ||
|
|
2a55215c62 | ||
|
|
16d2539bbf | ||
|
|
2a883e48ca | ||
|
|
96fa0a8472 | ||
|
|
0c00433bec | ||
|
|
a05cf1168f | ||
|
|
76360d7100 | ||
|
|
91e4ab3e4d | ||
|
|
a2475c32e9 | ||
|
|
7182ce015d | ||
|
|
dfca616ba5 | ||
|
|
bad4ae47a4 | ||
|
|
0d05b9134a | ||
|
|
2b784d80c3 | ||
|
|
48eec72bf6 | ||
|
|
b065e20d65 | ||
|
|
5e0991aa9c | ||
|
|
05b0e84a2a | ||
|
|
4a478e67e3 | ||
|
|
80eb4deece | ||
|
|
614c3e0548 | ||
|
|
30da80f058 | ||
|
|
582709f4f5 | ||
|
|
62a8b2dc88 | ||
|
|
2fa9561c8c | ||
|
|
f26a2f6c83 | ||
|
|
c145412b9f | ||
|
|
d854019897 | ||
|
|
d3d65d26cf | ||
|
|
8c16c41b90 | ||
|
|
58ce181a40 | ||
|
|
fb7fe05716 | ||
|
|
9551861ed7 | ||
|
|
fb7d18e749 | ||
|
|
c3af3fada1 | ||
|
|
0455f7bd23 | ||
|
|
7057e732d8 | ||
|
|
ecbb0e3ea7 | ||
|
|
74116263a3 | ||
|
|
361a73075e | ||
|
|
aa72fc2e39 | ||
|
|
f9365016c3 | ||
|
|
4ed8c2004a | ||
|
|
3424700cfe | ||
|
|
85143b9a24 | ||
|
|
278c082a38 | ||
|
|
8dee052ebb | ||
|
|
c224b5c8f8 | ||
|
|
42edba6680 | ||
|
|
d58af3f88d | ||
|
|
4c1bdcf3d0 | ||
|
|
2976fd7269 | ||
|
|
df17ac3c91 | ||
|
|
8575bd83ac | ||
|
|
be046cd906 | ||
|
|
f0d23fe873 | ||
|
|
bdd6adcee3 | ||
|
|
5791bfdf76 | ||
|
|
592e6c914b | ||
|
|
7f58b58ea9 | ||
|
|
8220f5a484 | ||
|
|
acfaf79178 | ||
|
|
a8cff32d04 | ||
|
|
b2f5b58fe9 | ||
|
|
e36e99fa57 | ||
|
|
2aad26b048 | ||
|
|
19f3cc1141 | ||
|
|
89b8e98cd2 | ||
|
|
7a4fa1c2ac | ||
|
|
d032df105b | ||
|
|
c1cca99973 | ||
|
|
3017f189fd | ||
|
|
71865607b7 | ||
|
|
20c8d4cefa | ||
|
|
109203d331 | ||
|
|
e807747079 | ||
|
|
0024b7a400 | ||
|
|
7f6974697a | ||
|
|
632d6119d2 | ||
|
|
ac5fc4b893 | ||
|
|
f2c8383cb7 | ||
|
|
76ad97e59e | ||
|
|
3ad0a260e0 | ||
|
|
dff8ef8512 | ||
|
|
2d003d8359 | ||
|
|
a5e1cd2a5c | ||
|
|
57f43a20e3 | ||
|
|
0ec76545c5 | ||
|
|
346cb175b4 | ||
|
|
efb6656c28 | ||
|
|
1f8fa69f8b | ||
|
|
400157a46d | ||
|
|
a70d2b9c05 | ||
|
|
0849f6d85c | ||
|
|
a488e4bb9f | ||
|
|
df2678f358 | ||
|
|
f7d5a305b7 | ||
|
|
0b45e6c3c0 | ||
|
|
8f87d141ad | ||
|
|
06e60d60ca | ||
|
|
c366d7e282 | ||
|
|
1db7d3aa90 | ||
|
|
2ba4bce241 | ||
|
|
e71379e725 | ||
|
|
f8e1736254 | ||
|
|
5b896125f8 | ||
|
|
f2a3ebf1c5 | ||
|
|
810d9a7acd | ||
|
|
a8e06372af | ||
|
|
4e6e02e300 | ||
|
|
accf820978 | ||
|
|
71646c4136 | ||
|
|
7e4e72979f | ||
|
|
20d17ec817 | ||
|
|
546f438b59 | ||
|
|
49b280d2b0 | ||
|
|
3461710b79 | ||
|
|
9de85946bf | ||
|
|
32a5399c58 | ||
|
|
74b02130a5 | ||
|
|
c6da46d6fe | ||
|
|
6ad6db84ae | ||
|
|
9825ab2a6f | ||
|
|
de567f9c5b | ||
|
|
be00a108c6 | ||
|
|
2532ebc34e | ||
|
|
00db0ebf25 | ||
|
|
f67764f9fe | ||
|
|
31652347d1 | ||
|
|
59f3687c97 | ||
|
|
1b501025c4 | ||
|
|
60203e7b0b | ||
|
|
7fe914258e | ||
|
|
4d37231561 | ||
|
|
9a4027de24 | ||
|
|
b48a0aed42 | ||
|
|
39082c71b9 | ||
|
|
2e7f76bdba | ||
|
|
0ec87cd10f | ||
|
|
4a58909f03 | ||
|
|
b4a32ff28a | ||
|
|
7e3d0952a7 | ||
|
|
0168118920 | ||
|
|
8819c7ec09 | ||
|
|
d7c3d3d89f | ||
|
|
4dea737f5f | ||
|
|
36dd02d6f0 | ||
|
|
7b1c770705 | ||
|
|
8733758504 | ||
|
|
3f476ec770 | ||
|
|
31c490734b | ||
|
|
f5acad963f | ||
|
|
7adebef19e | ||
|
|
f1e477f140 | ||
|
|
b3a9ed0105 | ||
|
|
920e318074 | ||
|
|
47f76dc40e | ||
|
|
ed7b646067 | ||
|
|
fd8a324f58 | ||
|
|
f05c3c98a7 | ||
|
|
35ab57f316 | ||
|
|
42a60fcf85 | ||
|
|
732d2fca97 | ||
|
|
ae2c47f236 | ||
|
|
883e0f5a52 | ||
|
|
fc79d3d967 | ||
|
|
97f1951ba1 | ||
|
|
7aead5fe11 | ||
|
|
bc75cd460f | ||
|
|
cdcfb35053 | ||
|
|
5b0530013e | ||
|
|
71399e01f0 | ||
|
|
8245ba0f9b | ||
|
|
78067230aa | ||
|
|
41365619b5 | ||
|
|
c15000dd67 | ||
|
|
7f795407d8 | ||
|
|
1c44f077ba | ||
|
|
0f0270a8bd | ||
|
|
dc2aebbffc | ||
|
|
91ff3f55a3 | ||
|
|
eb19d0af97 | ||
|
|
e099aa0e0f | ||
|
|
24f0638975 | ||
|
|
f0328f6563 | ||
|
|
60afab62b0 | ||
|
|
0e3609542c | ||
|
|
5c65f6a30d | ||
|
|
8e0a5e4419 | ||
|
|
0d99c90d9f | ||
|
|
b57f553d8d | ||
|
|
1394d539f0 | ||
|
|
16c2358b4d | ||
|
|
18671730c5 | ||
|
|
79ddde8777 | ||
|
|
0702ee98bc | ||
|
|
7391602302 | ||
|
|
1e96044a51 | ||
|
|
b0a1cf0ca1 | ||
|
|
4b862f52fc | ||
|
|
629d0e69cd | ||
|
|
8e220f474c | ||
|
|
f49cf78b2d | ||
|
|
7ca49bb753 | ||
|
|
5526a46434 | ||
|
|
1675cfc388 | ||
|
|
05f91d233c | ||
|
|
217eaaea98 | ||
|
|
5670de7e01 | ||
|
|
d62dd4d63a | ||
|
|
deb458801a | ||
|
|
a616e0b67e | ||
|
|
21cc52987c | ||
|
|
4009078fb0 | ||
|
|
b82cbfb025 | ||
|
|
40ae8d91c3 | ||
|
|
8aab6513f2 | ||
|
|
cf3da97a50 | ||
|
|
24f2ac2d8b | ||
|
|
f27807622d | ||
|
|
7a090910cc | ||
|
|
50add97171 | ||
|
|
de7cd585ba | ||
|
|
9cfd8a7671 | ||
|
|
ab89b28ccc | ||
|
|
fc7203d2ab | ||
|
|
2f7a6c7fd1 | ||
|
|
6746c64a66 | ||
|
|
2578dec249 | ||
|
|
185da3fa9a | ||
|
|
2ccd92519b | ||
|
|
b96c350c2e | ||
|
|
0625571fdc | ||
|
|
5e2fbf9c7f | ||
|
|
84f329ea9c | ||
|
|
f8decd42f1 | ||
|
|
f92b7b3ea8 | ||
|
|
70418d70a7 | ||
|
|
c12335d5fe | ||
|
|
a9887cb235 | ||
|
|
f7c47674d1 | ||
|
|
2e70eb678d | ||
|
|
c8b07fcae5 | ||
|
|
6d31ecbe2f | ||
|
|
8375c54b9b | ||
|
|
117e4f3475 | ||
|
|
7f6d4027a5 | ||
|
|
faf2f39990 | ||
|
|
4312b024f6 | ||
|
|
500ecc3966 | ||
|
|
f92db38ca1 | ||
|
|
c07f2f4775 | ||
|
|
57a226ed2a | ||
|
|
367d373c18 | ||
|
|
fc9bac09ef | ||
|
|
5d15905736 | ||
|
|
39bb4b4400 | ||
|
|
30b3af8691 | ||
|
|
890b8a5ac7 | ||
|
|
07de44b235 | ||
|
|
c62cde415f | ||
|
|
83404a646e | ||
|
|
45c878aa35 | ||
|
|
54be18dac6 | ||
|
|
a1c74bb0b2 | ||
|
|
1977129a68 | ||
|
|
cfb2e5f1bd | ||
|
|
6552562d83 | ||
|
|
226d2b6925 | ||
|
|
26e903b1f1 | ||
|
|
701676beeb | ||
|
|
fe9c236b71 | ||
|
|
df20a6185b | ||
|
|
9c18de33e6 | ||
|
|
8dd1180c85 | ||
|
|
3dec686458 | ||
|
|
ac57a5d90d | ||
|
|
afb80f2131 | ||
|
|
7c520655a3 | ||
|
|
812dffc231 | ||
|
|
b377217ece | ||
|
|
5898aebcf1 | ||
|
|
439664fcca | ||
|
|
7c8599a370 | ||
|
|
340ca6500a | ||
|
|
04c591a38c | ||
|
|
06c126544d | ||
|
|
53a45f7cdc | ||
|
|
7d664986ac | ||
|
|
c4c542bc25 | ||
|
|
7ff9031ac0 | ||
|
|
0ad3878bbd | ||
|
|
013f83cc39 | ||
|
|
ee6e389fca | ||
|
|
de252b4ad8 | ||
|
|
7242176243 | ||
|
|
54c8d5851b | ||
|
|
2a98ed4815 | ||
|
|
a2b0c06a5b | ||
|
|
d8fd5add26 | ||
|
|
0774d53efc | ||
|
|
d41f1da48d | ||
|
|
b3123a6440 | ||
|
|
f4eb511beb | ||
|
|
1a689b2c19 | ||
|
|
b0c6ffdbb2 | ||
|
|
b7ccf4aaf9 | ||
|
|
e7c8265ae1 | ||
|
|
21dc35355d | ||
|
|
f86994b1d3 | ||
|
|
260a26d45c | ||
|
|
cdfa368a8c | ||
|
|
d67c6aef53 | ||
|
|
6ebb5d5bf4 | ||
|
|
224b79b648 | ||
|
|
7e0a3cdd6c | ||
|
|
f6db381e20 | ||
|
|
f0c29fef5c | ||
|
|
2a3e317725 | ||
|
|
1a1b3ebf12 | ||
|
|
f995589a02 | ||
|
|
6e0990d658 | ||
|
|
4da4261f4c | ||
|
|
0abe66ea8c | ||
|
|
193b27a186 | ||
|
|
e323096172 | ||
|
|
e41f306ac8 | ||
|
|
01d45d7c14 | ||
|
|
d55a29336f | ||
|
|
cfcbd0fbb2 | ||
|
|
21174548b5 | ||
|
|
910f13e9a8 | ||
|
|
762688db28 | ||
|
|
9df1ea0c57 | ||
|
|
e48ab71fa4 | ||
|
|
246314367a | ||
|
|
ad70bbb571 | ||
|
|
3962c55140 | ||
|
|
82e478bb12 | ||
|
|
63c8e98492 | ||
|
|
ae92d2f759 | ||
|
|
761c3e6ac2 | ||
|
|
f9a3009c60 | ||
|
|
ca0474faca | ||
|
|
b469985277 | ||
|
|
2a5dacb460 | ||
|
|
d16f98cf07 | ||
|
|
8677cbb4f8 | ||
|
|
0e33299863 | ||
|
|
93ba4e011a | ||
|
|
7977bebcaa | ||
|
|
f28f49d724 | ||
|
|
d9a93ddad6 | ||
|
|
07808d6139 | ||
|
|
1e1633bb45 | ||
|
|
c0f33de0c8 | ||
|
|
417621b17c | ||
|
|
8322540732 | ||
|
|
2d61be37bb | ||
|
|
2a10aa7d61 | ||
|
|
004eb310b3 |
92
.github/workflows/auth-release.yml
vendored
@@ -32,8 +32,8 @@ env:
|
||||
FLUTTER_VERSION: "3.24.3"
|
||||
|
||||
jobs:
|
||||
build-ubuntu:
|
||||
runs-on: ubuntu-20.04
|
||||
build-linux-latest:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
defaults:
|
||||
run:
|
||||
@@ -90,22 +90,31 @@ jobs:
|
||||
- name: Install dependencies for desktop build
|
||||
run: |
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y libsecret-1-dev libsodium-dev libfuse2 ninja-build libgtk-3-dev dpkg-dev pkg-config libsqlite3-dev locate appindicator3-0.1 libappindicator3-dev libffi-dev libtiff5
|
||||
sudo apt-get install -y libsecret-1-dev libsodium-dev libfuse2 ninja-build libgtk-3-dev dpkg-dev pkg-config rpm patchelf libsqlite3-dev locate libayatana-appindicator3-dev libffi-dev libtiff6 xz-utils libarchive-tools libcurl4-openssl-dev
|
||||
sudo updatedb --localpaths='/usr/lib/x86_64-linux-gnu'
|
||||
|
||||
- name: Install appimagetool
|
||||
run: |
|
||||
wget -O appimagetool "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
|
||||
chmod +x appimagetool
|
||||
mv appimagetool /usr/local/bin/
|
||||
|
||||
- name: Build desktop app
|
||||
run: |
|
||||
flutter config --enable-linux-desktop
|
||||
# dart pub global activate flutter_distributor
|
||||
dart pub global activate --source git https://github.com/prateekmedia/flutter_distributor --git-ref develop --git-path packages/flutter_distributor
|
||||
dart pub global activate --source git https://github.com/ente-io/flutter_distributor_fork --git-ref develop --git-path packages/flutter_distributor
|
||||
# RPM
|
||||
flutter_distributor package --platform=linux --targets=rpm --skip-clean
|
||||
mv dist/**/*-*-linux.rpm artifacts/ente-${{ github.ref_name }}-x86_64.rpm
|
||||
# APPIMAGE
|
||||
flutter_distributor package --platform=linux --targets=appimage --skip-clean
|
||||
mv dist/**/*-*-linux.AppImage artifacts/ente-${{ github.ref_name }}-x86_64.AppImage
|
||||
# DEB
|
||||
flutter_distributor package --platform=linux --targets=deb --skip-clean
|
||||
mv dist/**/*-*-linux.deb artifacts/ente-${{ github.ref_name }}-x86_64.deb
|
||||
env:
|
||||
LIBSODIUM_USE_PKGCONFIG: 1
|
||||
|
||||
- name: Generate checksums and push to artifacts
|
||||
run: |
|
||||
sha256sum artifacts/ente-* > artifacts/sha256sum-apk-deb
|
||||
- name: Generate checksums
|
||||
run: sha256sum artifacts/ente-* >> artifacts/sha256sum-rpm-appimage
|
||||
|
||||
- name: Create a draft GitHub release
|
||||
uses: ncipollo/release-action@v1
|
||||
@@ -125,67 +134,6 @@ jobs:
|
||||
releaseFiles: auth/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
|
||||
track: internal
|
||||
|
||||
build-fedora-etc:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
defaults:
|
||||
run:
|
||||
working-directory: auth
|
||||
|
||||
steps:
|
||||
- name: Checkout code and submodules
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install Flutter ${{ env.FLUTTER_VERSION }}
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
cache: true
|
||||
|
||||
- name: Create artifacts directory
|
||||
run: mkdir artifacts
|
||||
|
||||
- name: Install dependencies for desktop build
|
||||
run: |
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y libsecret-1-dev libsodium-dev libfuse2 ninja-build libgtk-3-dev dpkg-dev pkg-config rpm patchelf libsqlite3-dev locate libayatana-appindicator3-dev libffi-dev libtiff6 xz-utils libarchive-tools libcurl4-openssl-dev
|
||||
sudo updatedb --localpaths='/usr/lib/x86_64-linux-gnu'
|
||||
|
||||
- name: Install appimagetool
|
||||
run: |
|
||||
wget -O appimagetool "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
|
||||
chmod +x appimagetool
|
||||
mv appimagetool /usr/local/bin/
|
||||
|
||||
- name: Build desktop app
|
||||
run: |
|
||||
flutter config --enable-linux-desktop
|
||||
# dart pub global activate flutter_distributor
|
||||
dart pub global activate --source git https://github.com/prateekmedia/flutter_distributor --git-ref develop --git-path packages/flutter_distributor
|
||||
# Run below command if it is a beta or nightly
|
||||
if [[ ${{ github.ref }} =~ beta|nightly ]]; then
|
||||
flutter_distributor package --platform=linux --targets=pacman --skip-clean
|
||||
mv dist/**/*-*-linux.pacman artifacts/ente-${{ github.ref_name }}-x86_64.pacman
|
||||
fi
|
||||
flutter_distributor package --platform=linux --targets=rpm --skip-clean
|
||||
mv dist/**/*-*-linux.rpm artifacts/ente-${{ github.ref_name }}-x86_64.rpm
|
||||
flutter_distributor package --platform=linux --targets=appimage --skip-clean
|
||||
mv dist/**/*-*-linux.AppImage artifacts/ente-${{ github.ref_name }}-x86_64.AppImage
|
||||
|
||||
- name: Generate checksums
|
||||
run: sha256sum artifacts/ente-* >> artifacts/sha256sum-rpm-appimage
|
||||
|
||||
- name: Create a draft GitHub release
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
artifacts: "auth/artifacts/*"
|
||||
draft: true
|
||||
allowUpdates: true
|
||||
updateOnlyUnreleased: true
|
||||
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
|
||||
@@ -213,7 +161,7 @@ jobs:
|
||||
run: |
|
||||
flutter config --enable-windows-desktop
|
||||
# dart pub global activate flutter_distributor
|
||||
dart pub global activate --source git https://github.com/prateekmedia/flutter_distributor --git-ref develop --git-path packages/flutter_distributor
|
||||
dart pub global activate --source git https://github.com/ente-io/flutter_distributor_fork --git-ref develop --git-path packages/flutter_distributor
|
||||
make innoinstall
|
||||
flutter_distributor package --platform=windows --targets=exe --skip-clean
|
||||
mv dist/**/*-windows-setup.exe artifacts/ente-${{ github.ref_name }}-installer.exe
|
||||
|
||||
@@ -36,6 +36,6 @@ jobs:
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Update branch server/ghcr to point to source commit
|
||||
- name: Update branch ghcr/server to point to source commit
|
||||
run: |
|
||||
git push -f origin HEAD:refs/heads/server/ghcr
|
||||
git push -f origin HEAD:refs/heads/ghcr/server
|
||||
34
.github/workflows/web-publish-ghcr.yml
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
name: "Publish ghcr (web)"
|
||||
|
||||
on:
|
||||
# Run automatically every Wednesday, at 07:00 UTC.
|
||||
schedule:
|
||||
- cron: '0 7 * * 3'
|
||||
# Run manually if needed to publish out of schedule.
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Build and push
|
||||
uses: mr-smithers-excellent/docker-build-push@v6
|
||||
with:
|
||||
dockerfile: web/Dockerfile
|
||||
directory: web
|
||||
# Resultant package name will be ghcr.io/ente-io/web
|
||||
image: web
|
||||
registry: ghcr.io
|
||||
enableBuildKit: true
|
||||
multiPlatform: true
|
||||
platform: linux/amd64,linux/arm64
|
||||
tags: ${{ github.sha }}, latest
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Update branch ghcr/web to point to source commit
|
||||
run: |
|
||||
git push -f origin HEAD:refs/heads/ghcr/web
|
||||
3
.gitmodules
vendored
@@ -9,3 +9,6 @@
|
||||
[submodule "auth/assets/simple-icons"]
|
||||
path = auth/assets/simple-icons
|
||||
url = https://github.com/simple-icons/simple-icons.git
|
||||
[submodule "mobile/thirdparty/flutter"]
|
||||
path = mobile/thirdparty/flutter
|
||||
url = https://github.com/flutter/flutter.git
|
||||
|
||||
@@ -350,6 +350,7 @@ class UserService {
|
||||
userPassword,
|
||||
_config.getKeyAttributes()!,
|
||||
);
|
||||
_config.resetVolatilePassword();
|
||||
page = const HomePage();
|
||||
} else {
|
||||
throw Exception("unexpected response during passkey verification");
|
||||
|
||||
@@ -41,14 +41,14 @@
|
||||
"onnxruntime-node": "^1.20.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.21.0",
|
||||
"@eslint/js": "^9.22.0",
|
||||
"@tsconfig/node20": "^20.1.4",
|
||||
"@types/auto-launch": "^5.0.5",
|
||||
"@types/ffmpeg-static": "^3.0.3",
|
||||
"ajv": "^8.17.1",
|
||||
"concurrently": "^9.1.2",
|
||||
"cross-env": "^7.0.3",
|
||||
"electron": "^34.3.1",
|
||||
"electron": "^34.3.3",
|
||||
"electron-builder": "^26.0.0",
|
||||
"eslint": "^9",
|
||||
"prettier": "3.5.3",
|
||||
@@ -56,7 +56,7 @@
|
||||
"prettier-plugin-packagejson": "^2.5.10",
|
||||
"shx": "^0.3.4",
|
||||
"typescript": "^5.8.2",
|
||||
"typescript-eslint": "^8.26.0"
|
||||
"typescript-eslint": "^8.26.1"
|
||||
},
|
||||
"packageManager": "yarn@1.22.22",
|
||||
"productName": "ente"
|
||||
|
||||
@@ -404,10 +404,11 @@ const createMainWindow = () => {
|
||||
// "The unresponsive event is fired when Chromium detects that your
|
||||
// webContents is not responding to input messages for > 30 seconds."
|
||||
window.webContents.on("unresponsive", () => {
|
||||
log.error(
|
||||
"MainWindow's webContents are unresponsive, will restart the renderer process",
|
||||
);
|
||||
window.webContents.forcefullyCrashRenderer();
|
||||
// There is a known case when this can happen: When the user to select a
|
||||
// folder to upload (Upload > Folder), the browser callback to us takes
|
||||
// some time. When trying to upload very large folders on slower Windows
|
||||
// machines, this can take up to 30 seconds.
|
||||
log.warn("MainWindow's webContents are unresponsive");
|
||||
});
|
||||
|
||||
window.on("close", (event) => {
|
||||
|
||||
@@ -177,10 +177,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06"
|
||||
integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==
|
||||
|
||||
"@eslint/js@^9.21.0":
|
||||
version "9.21.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.21.0.tgz#4303ef4e07226d87c395b8fad5278763e9c15c08"
|
||||
integrity sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==
|
||||
"@eslint/js@^9.22.0":
|
||||
version "9.22.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.22.0.tgz#4ff53649ded7cbce90b444b494c234137fa1aa3d"
|
||||
integrity sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==
|
||||
|
||||
"@eslint/object-schema@^2.1.4":
|
||||
version "2.1.4"
|
||||
@@ -392,62 +392,62 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@typescript-eslint/eslint-plugin@8.26.0":
|
||||
version "8.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.0.tgz#7e880faf91f89471c30c141951e15f0eb3a0599e"
|
||||
integrity sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==
|
||||
"@typescript-eslint/eslint-plugin@8.26.1":
|
||||
version "8.26.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.1.tgz#3e48eb847924161843b092c87a9b65176b53782f"
|
||||
integrity sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==
|
||||
dependencies:
|
||||
"@eslint-community/regexpp" "^4.10.0"
|
||||
"@typescript-eslint/scope-manager" "8.26.0"
|
||||
"@typescript-eslint/type-utils" "8.26.0"
|
||||
"@typescript-eslint/utils" "8.26.0"
|
||||
"@typescript-eslint/visitor-keys" "8.26.0"
|
||||
"@typescript-eslint/scope-manager" "8.26.1"
|
||||
"@typescript-eslint/type-utils" "8.26.1"
|
||||
"@typescript-eslint/utils" "8.26.1"
|
||||
"@typescript-eslint/visitor-keys" "8.26.1"
|
||||
graphemer "^1.4.0"
|
||||
ignore "^5.3.1"
|
||||
natural-compare "^1.4.0"
|
||||
ts-api-utils "^2.0.1"
|
||||
|
||||
"@typescript-eslint/parser@8.26.0":
|
||||
version "8.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.26.0.tgz#9b4d2198e89f64fb81e83167eedd89a827d843a9"
|
||||
integrity sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==
|
||||
"@typescript-eslint/parser@8.26.1":
|
||||
version "8.26.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.26.1.tgz#0e2f915a497519fc43f52cf2ecbfa607ff56f72e"
|
||||
integrity sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager" "8.26.0"
|
||||
"@typescript-eslint/types" "8.26.0"
|
||||
"@typescript-eslint/typescript-estree" "8.26.0"
|
||||
"@typescript-eslint/visitor-keys" "8.26.0"
|
||||
"@typescript-eslint/scope-manager" "8.26.1"
|
||||
"@typescript-eslint/types" "8.26.1"
|
||||
"@typescript-eslint/typescript-estree" "8.26.1"
|
||||
"@typescript-eslint/visitor-keys" "8.26.1"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/scope-manager@8.26.0":
|
||||
version "8.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz#b06623fad54a3a77fadab5f652ef75ed3780b545"
|
||||
integrity sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==
|
||||
"@typescript-eslint/scope-manager@8.26.1":
|
||||
version "8.26.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.26.1.tgz#5e6ad0ac258ccf79462e91c3f43a3f1f7f31a6cc"
|
||||
integrity sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.26.0"
|
||||
"@typescript-eslint/visitor-keys" "8.26.0"
|
||||
"@typescript-eslint/types" "8.26.1"
|
||||
"@typescript-eslint/visitor-keys" "8.26.1"
|
||||
|
||||
"@typescript-eslint/type-utils@8.26.0":
|
||||
version "8.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.26.0.tgz#9ee8cc98184b5f66326578de9c097edc89da6f68"
|
||||
integrity sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==
|
||||
"@typescript-eslint/type-utils@8.26.1":
|
||||
version "8.26.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.26.1.tgz#462f0bae09de72ac6e8e1af2ebe588c23224d7f8"
|
||||
integrity sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==
|
||||
dependencies:
|
||||
"@typescript-eslint/typescript-estree" "8.26.0"
|
||||
"@typescript-eslint/utils" "8.26.0"
|
||||
"@typescript-eslint/typescript-estree" "8.26.1"
|
||||
"@typescript-eslint/utils" "8.26.1"
|
||||
debug "^4.3.4"
|
||||
ts-api-utils "^2.0.1"
|
||||
|
||||
"@typescript-eslint/types@8.26.0":
|
||||
version "8.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.26.0.tgz#c4e93a8faf3a38a8d8adb007dc7834f1c89ee7bf"
|
||||
integrity sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==
|
||||
"@typescript-eslint/types@8.26.1":
|
||||
version "8.26.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.26.1.tgz#d5978721670cff263348d5062773389231a64132"
|
||||
integrity sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==
|
||||
|
||||
"@typescript-eslint/typescript-estree@8.26.0":
|
||||
version "8.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz#128972172005a7376e34ed2ecba4e29363b0cad1"
|
||||
integrity sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==
|
||||
"@typescript-eslint/typescript-estree@8.26.1":
|
||||
version "8.26.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.1.tgz#eb0e4ce31753683d83be53441a409fd5f0b34afd"
|
||||
integrity sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.26.0"
|
||||
"@typescript-eslint/visitor-keys" "8.26.0"
|
||||
"@typescript-eslint/types" "8.26.1"
|
||||
"@typescript-eslint/visitor-keys" "8.26.1"
|
||||
debug "^4.3.4"
|
||||
fast-glob "^3.3.2"
|
||||
is-glob "^4.0.3"
|
||||
@@ -455,22 +455,22 @@
|
||||
semver "^7.6.0"
|
||||
ts-api-utils "^2.0.1"
|
||||
|
||||
"@typescript-eslint/utils@8.26.0":
|
||||
version "8.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.26.0.tgz#845d20ed8378a5594e6445f54e53b972aee7b3e6"
|
||||
integrity sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==
|
||||
"@typescript-eslint/utils@8.26.1":
|
||||
version "8.26.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.26.1.tgz#54cc58469955f25577f659753b71a0e117a0539f"
|
||||
integrity sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.4.0"
|
||||
"@typescript-eslint/scope-manager" "8.26.0"
|
||||
"@typescript-eslint/types" "8.26.0"
|
||||
"@typescript-eslint/typescript-estree" "8.26.0"
|
||||
"@typescript-eslint/scope-manager" "8.26.1"
|
||||
"@typescript-eslint/types" "8.26.1"
|
||||
"@typescript-eslint/typescript-estree" "8.26.1"
|
||||
|
||||
"@typescript-eslint/visitor-keys@8.26.0":
|
||||
version "8.26.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz#a4876216756c69130ea958df3b77222c2ad95290"
|
||||
integrity sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==
|
||||
"@typescript-eslint/visitor-keys@8.26.1":
|
||||
version "8.26.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.1.tgz#c5267fcc82795cf10280363023837deacad2647c"
|
||||
integrity sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.26.0"
|
||||
"@typescript-eslint/types" "8.26.1"
|
||||
eslint-visitor-keys "^4.2.0"
|
||||
|
||||
"@xmldom/xmldom@^0.8.8":
|
||||
@@ -1264,10 +1264,10 @@ electron-updater@^6.4.0:
|
||||
semver "^7.6.3"
|
||||
tiny-typed-emitter "^2.1.0"
|
||||
|
||||
electron@^34.3.1:
|
||||
version "34.3.1"
|
||||
resolved "https://registry.yarnpkg.com/electron/-/electron-34.3.1.tgz#2c337a496d923463a2c7be7eaab191ad8220459b"
|
||||
integrity sha512-Vsgxc4FDGg7hjduKyvTP5qfNDxZHTliZIiWD1HlR5hHXx3BFjyVv3db/uEH1GaCU0KKyeNsBXRwS4WAOMaSH5g==
|
||||
electron@^34.3.3:
|
||||
version "34.3.3"
|
||||
resolved "https://registry.yarnpkg.com/electron/-/electron-34.3.3.tgz#2979329d182a195756bfbf6e5687a835cd65a2ec"
|
||||
integrity sha512-7m1FiO1mwc1K/UqqnnkG7Ik/kAngDzmLfHwcl+xaWgCQ+Sts9rlEqzOh6g1GHhDqebrbs4bO/aU+NDi32fCciQ==
|
||||
dependencies:
|
||||
"@electron/get" "^2.0.0"
|
||||
"@types/node" "^20.9.0"
|
||||
@@ -3209,14 +3209,14 @@ typedarray@^0.0.6:
|
||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
|
||||
|
||||
typescript-eslint@^8.26.0:
|
||||
version "8.26.0"
|
||||
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.26.0.tgz#f44cafdaa6edc99e3612b33b791eb77a56286320"
|
||||
integrity sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA==
|
||||
typescript-eslint@^8.26.1:
|
||||
version "8.26.1"
|
||||
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.26.1.tgz#d17a638a7543bc535157b83cdf5876513c71493b"
|
||||
integrity sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==
|
||||
dependencies:
|
||||
"@typescript-eslint/eslint-plugin" "8.26.0"
|
||||
"@typescript-eslint/parser" "8.26.0"
|
||||
"@typescript-eslint/utils" "8.26.0"
|
||||
"@typescript-eslint/eslint-plugin" "8.26.1"
|
||||
"@typescript-eslint/parser" "8.26.1"
|
||||
"@typescript-eslint/utils" "8.26.1"
|
||||
|
||||
typescript@^5.4.3:
|
||||
version "5.5.4"
|
||||
|
||||
@@ -142,6 +142,7 @@ export const sidebar = [
|
||||
text: "Video streaming",
|
||||
link: "/photos/faq/video-streaming",
|
||||
},
|
||||
{ text: "Misc", link: "/photos/faq/misc" },
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -311,6 +312,10 @@ export const sidebar = [
|
||||
text: "Uploads",
|
||||
link: "/self-hosting/troubleshooting/uploads",
|
||||
},
|
||||
{
|
||||
text: "Docker",
|
||||
link: "/self-hosting/troubleshooting/docker",
|
||||
},
|
||||
{
|
||||
text: "Yarn",
|
||||
link: "/self-hosting/troubleshooting/yarn",
|
||||
|
||||
@@ -115,4 +115,28 @@ clicking on "Your map" under "Locations" on the search screen.
|
||||
|
||||
## How to reset my password if I lost it?
|
||||
|
||||
On the login page, enter your email and click on Forgot Password. Then, enter your recovery key and create a new password.
|
||||
On the login page, enter your email and click on Forgot Password. Then, enter your recovery key and create a new password.
|
||||
|
||||
# iOS Album Backup and Organization in Ente
|
||||
|
||||
### How does Ente handle photos that are part of multiple iOS albums?
|
||||
When you select multiple albums for backup, Ente prioritizes uploading each photo to the album with the fewest photos. This means a photo will only be uploaded once, even if it exists in multiple albums on your device. If you create new albums on your device after the initial backup, those photos may not appear in the corresponding Ente album if they were already uploaded to a different album.
|
||||
|
||||
|
||||
### Why don’t 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) won’t automatically reflect in Ente. You’ll need to manually add those photos to the corresponding albums in Ente to maintain consistency.
|
||||
|
||||
### Can I search for photos using the descriptions I’ve added?
|
||||
Yes, descriptions are searchable, making it easier to find specific photos later.
|
||||
To do this, open the photo, tap the (i) button, and enter your description.
|
||||
|
||||
### How does the deduplication feature work on the desktop app?
|
||||
If the app finds exact duplicates, it will show them in the deduplication. When you delete a duplicate, the app keeps one copy and creates a symlink for the other duplicate. This helps save storage space.
|
||||
|
||||
### What happens if I lose access to my email address? Can I use my recovery key to bypass email verification?
|
||||
No, the recovery key does not bypass email verification. For security reasons, we do not disable or bypass email verification unless the account owner reaches out to us and successfully verifies their identity by providing details about their account.
|
||||
|
||||
If you lose access to your email, please contact our support team at support@ente.io
|
||||
20
docs/docs/photos/faq/misc.md
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
title: Miscellaneous general FAQ
|
||||
description: Unsorted frequently asked questions about Ente Photos
|
||||
---
|
||||
|
||||
# Miscellaneous FAQ
|
||||
|
||||
## Exif Description
|
||||
|
||||
Ente will try to read as much information from Exif when the image is uploaded,
|
||||
but after that, only the fields which have been parsed into Ente can be
|
||||
searched.
|
||||
|
||||
The app still show all the fields in the raw Exif data in the file info panel
|
||||
when someone taps on the "View all Exif" option, but otherwise the app is
|
||||
unaware of these fields.
|
||||
|
||||
In particular, for the description associated with a photo, the exact logic to
|
||||
determine the description from the Exif when uploading the image can be seen
|
||||
[in this part of the code](https://github.com/ente-io/ente/blob/0dcb185744da469848b41b668fe4b647226b6fe2/web/packages/gallery/services/exif.ts#L609-L620).
|
||||
@@ -12,6 +12,11 @@ verification code by:
|
||||
|
||||
- Reading it from the DB (otts table)
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> You can also configure your instance to send out emails so that you can get
|
||||
> your verification code via emails by using the `smtp` section in the config.
|
||||
|
||||
You can also set pre-defined hardcoded OTTs for certain users when running
|
||||
locally by creating a `museum.yaml` and adding the `internal.hardcoded-ott`
|
||||
configuration setting to it. See
|
||||
|
||||
@@ -9,11 +9,11 @@ description:
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> This is a community contributed guide, and some of these steps might be out of
|
||||
> sync with the upstream documentation. If something is not working correctly,
|
||||
> please also see the latest
|
||||
> [READMEs](https://github.com/ente-io/ente/blob/main/server/README.md) in the
|
||||
> repository and/or other guides in [self-hosting](/self-hosting/).
|
||||
> This is a community contributed guide, and some of these steps ~~might be~~
|
||||
> ARE out of sync with the upstream changes. This document is retained for
|
||||
> reference purposes, but if something is not working correctly, please see the
|
||||
> latest [READMEs](https://github.com/ente-io/ente/blob/main/server/README.md)
|
||||
> in the repository and/or other guides in [self-hosting](/self-hosting/).
|
||||
|
||||
This guide is for self hosting the server and the web application of Ente Photos
|
||||
using docker compose and an external S3 bucket. So we assume that you already
|
||||
|
||||
@@ -30,10 +30,6 @@ longer term, then it is recommended to follow the Docker approach.
|
||||
|
||||
> [!IMPORTANT]
|
||||
>
|
||||
> This docker image is still in testing stage and it might show up with some
|
||||
> unknown variables in different scenarios. But this image has been tested on a
|
||||
> production Ente site.
|
||||
>
|
||||
> Recurring changes might be made by the team or from community if more
|
||||
> improvements can be made so that we are able to build a full-fledged docker
|
||||
> image.
|
||||
@@ -50,8 +46,8 @@ COPY apps/ .
|
||||
RUN corepack enable
|
||||
|
||||
# Endpoint for Ente Server
|
||||
ENV NEXT_PUBLIC_ENTE_ENDPOINT=https://your-ente-endpoint.com
|
||||
ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://your-albums-endpoint.com
|
||||
ENV NEXT_PUBLIC_ENTE_ENDPOINT=https://changeme.com
|
||||
ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://changeme.com
|
||||
|
||||
RUN yarn cache clean
|
||||
RUN yarn install --network-timeout 1000000000
|
||||
@@ -142,75 +138,6 @@ docker compose up -d # --build
|
||||
docker compose logs <container-name>
|
||||
```
|
||||
|
||||
## Without Docker / Docker compose
|
||||
|
||||
One way to run all the apps together without Docker is by using
|
||||
[PM2](https://pm2.keymetrics.io/) in this setup. The configuration and usage is
|
||||
very simple and just needs one configuration file for it. You can run the apps
|
||||
both in dev server mode as well as static files.
|
||||
|
||||
The below configuration will run the apps in dev server mode.
|
||||
|
||||
|
||||
|
||||
### Install PM2
|
||||
|
||||
```sh
|
||||
npm install pm2@latest
|
||||
```
|
||||
|
||||
Copy the below contents to a file called `ecosystem.config.js` inside the
|
||||
`ente/web` directory.
|
||||
|
||||
```js
|
||||
module.exports = {
|
||||
apps: [
|
||||
{
|
||||
name: "photos",
|
||||
script: "yarn workspace photos next dev",
|
||||
env: {
|
||||
NODE_ENV: "development",
|
||||
PORT: "3000"
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "accounts",
|
||||
script: "yarn workspace accounts next dev",
|
||||
env: {
|
||||
NODE_ENV: "development",
|
||||
PORT: "3001"
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "auth",
|
||||
script: "yarn workspace auth next dev",
|
||||
env: {
|
||||
NODE_ENV: "development",
|
||||
PORT: "3002"
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "cast",
|
||||
script: "yarn workspace cast next dev",
|
||||
env: {
|
||||
NODE_ENV: "development",
|
||||
PORT: "3003"
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
Finally, start pm2.
|
||||
|
||||
```sh
|
||||
pm2 start
|
||||
|
||||
# for logs
|
||||
pm2 logs all
|
||||
```
|
||||
|
||||
## Configure App Endpoints
|
||||
|
||||
> [!NOTE]
|
||||
|
||||
@@ -14,7 +14,34 @@ the same code we use for our own cloud service.
|
||||
> [blog post](https://ente.io/blog/open-sourcing-our-server/) announcing the
|
||||
> open sourcing of our server useful.
|
||||
|
||||
## Getting started
|
||||
## Getting started - Quickstart
|
||||
|
||||
Install [Docker](https://www.docker.com). Then, paste the following command in a
|
||||
your terminal:
|
||||
|
||||
```sh
|
||||
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ente-io/ente/main/server/quickstart.sh)"
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> For more details about what this does, see [the quickstart
|
||||
> README](https://github.com/ente-io/ente/blob/main/server/docs/quickstart.md).
|
||||
|
||||
That's about it. If you open http://localhost:3000, you will be able to create
|
||||
an account on a Ente Photos web app running on your machine, and this web app
|
||||
will be connecting to the server running on your local machine at
|
||||
`localhost:8080`. The verification code will be shown in the server logs.
|
||||
|
||||
For the mobile or desktop apps, you don't even need to build, and can install
|
||||
normal Ente apps and configure them to use your
|
||||
[custom self-hosted server](guides/custom-server/).
|
||||
|
||||
## Getting started - From source
|
||||
|
||||
The quickstart method above uses pre-built images. Alternatively, if you want to
|
||||
build the self hosted server images from source, you can use the steps in this
|
||||
section.
|
||||
|
||||
#### Installing Docker
|
||||
|
||||
@@ -30,11 +57,6 @@ cd ente/server
|
||||
docker compose up --build
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> You can also use a pre-built Docker image from `ghcr.io/ente-io/server`
|
||||
> ([More info](https://github.com/ente-io/ente/blob/main/server/docs/docker.md))
|
||||
|
||||
Install the necessary dependencies for running the web client
|
||||
|
||||
```sh
|
||||
@@ -53,15 +75,6 @@ yarn install
|
||||
NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 yarn dev
|
||||
```
|
||||
|
||||
That's about it. If you open http://localhost:3000, you will be able to create
|
||||
an account on a Ente Photos web app running on your machine, and this web app
|
||||
will be connecting to the server running on your local machine at
|
||||
`localhost:8080`.
|
||||
|
||||
For the mobile apps, you don't even need to build, and can install normal Ente
|
||||
apps and configure them to use your
|
||||
[custom self-hosted server](guides/custom-server/).
|
||||
|
||||
> If you want to build the mobile apps from source, see the instructions
|
||||
> [here](guides/mobile-build).
|
||||
|
||||
|
||||
72
docs/docs/self-hosting/troubleshooting/docker.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
title: Docker errors
|
||||
description: Fixing docker related errors when trying to self host Ente
|
||||
---
|
||||
|
||||
# Docker
|
||||
|
||||
## configs
|
||||
|
||||
Remember to restart your cluster to ensure changes that you make in the
|
||||
`configs` section in `compose.yaml` get picked up.
|
||||
|
||||
```sh
|
||||
docker compose down
|
||||
docker compose up
|
||||
```
|
||||
|
||||
## post_start
|
||||
|
||||
The `server/compose.yaml` Docker compose file uses the "post_start" lifecycle
|
||||
hook to provision the MinIO instance.
|
||||
|
||||
The lifecycle hook **requires Docker Compose version 2.30.0+**, and if you're
|
||||
using an older version of docker compose you will see an error like this:
|
||||
|
||||
```
|
||||
validating compose.yaml: services.minio Additional property post_start is not allowed
|
||||
```
|
||||
|
||||
The easiest way to resolve this is to upgrade your Docker compose.
|
||||
|
||||
If you cannot update your Docker compose version, then alternatively you can
|
||||
perform the same configuration by removing the "post_start" hook, and adding a
|
||||
new service definition:
|
||||
|
||||
```yaml
|
||||
minio-provision:
|
||||
image: minio/mc
|
||||
depends_on:
|
||||
- minio
|
||||
volumes:
|
||||
- minio-data:/data
|
||||
networks:
|
||||
- internal
|
||||
entrypoint: |
|
||||
sh -c '
|
||||
#!/bin/sh
|
||||
|
||||
while ! mc config host add h0 http://minio:3200 changeme changeme1234
|
||||
do
|
||||
echo "waiting for minio..."
|
||||
sleep 0.5
|
||||
done
|
||||
|
||||
cd /data
|
||||
|
||||
mc mb -p b2-eu-cen
|
||||
mc mb -p wasabi-eu-central-2-v3
|
||||
mc mb -p scw-eu-fr-v3
|
||||
'
|
||||
```
|
||||
|
||||
## start_interval
|
||||
|
||||
Similar to the `post_start` case above, if you are seeing an error like
|
||||
|
||||
```
|
||||
services.postgres.healthcheck Additional property start_interval is not allowed
|
||||
```
|
||||
|
||||
You will need to upgrade your Docker compose version to a newer version that
|
||||
supports the `start_interval` property on the health check.
|
||||
@@ -5,7 +5,8 @@ description: Fixing yarn install errors when trying to self host Ente
|
||||
|
||||
# Yarn
|
||||
|
||||
If your `yarn install` is failing, make sure you are using Yarn Classic
|
||||
If your `yarn install` is failing, make sure you are using Yarn v1 (also known
|
||||
as "Yarn Classic"):
|
||||
|
||||
- https://classic.yarnpkg.com/lang/en/docs/install
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ plugins {
|
||||
id "com.android.application"
|
||||
id "kotlin-android"
|
||||
id "dev.flutter.flutter-gradle-plugin"
|
||||
id 'org.jetbrains.kotlin.plugin.serialization' version '2.1.10'
|
||||
}
|
||||
def localProperties = new Properties()
|
||||
def localPropertiesFile = rootProject.file('local.properties')
|
||||
@@ -81,10 +82,6 @@ android {
|
||||
dimension "default"
|
||||
applicationIdSuffix ".dev"
|
||||
}
|
||||
face {
|
||||
dimension "default"
|
||||
applicationIdSuffix ".face"
|
||||
}
|
||||
playstore {
|
||||
dimension "default"
|
||||
}
|
||||
@@ -137,7 +134,8 @@ flutter {
|
||||
|
||||
dependencies {
|
||||
implementation 'io.sentry:sentry-android:2.0.0'
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.21"
|
||||
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.21'
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0'
|
||||
implementation 'com.android.support:multidex:1.0.3'
|
||||
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
|
||||
implementation 'com.microsoft.onnxruntime:onnxruntime-android:1.8.1'
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="io.ente.photos">
|
||||
|
||||
<!-- Adding the following block to prevent the app from having multiple
|
||||
launcher entries. We can remove this along with the `LAUNCHER` category from
|
||||
main/AndroidManifest.xml once
|
||||
https://github.com/flutter/flutter/issues/38965 is fixed. -->
|
||||
<application>
|
||||
<activity android:name=".MainActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:theme="@style/LaunchTheme"
|
||||
android:exported="true"
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||
android:hardwareAccelerated="true"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER" tools:node="remove"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
<!-- Flutter needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="io.ente.photos">
|
||||
<!-- Flutter needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
</manifest>
|
||||
@@ -1,4 +0,0 @@
|
||||
<resources>
|
||||
<string name="app_name">Ente Face</string>
|
||||
<string name="backup">backup face</string>
|
||||
</resources>
|
||||
@@ -1,4 +1,25 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
|
||||
package="io.ente.photos">
|
||||
|
||||
<!-- Adding the following block to prevent the app from having multiple
|
||||
launcher entries. We can remove this along with the `LAUNCHER` category from
|
||||
main/AndroidManifest.xml once
|
||||
https://github.com/flutter/flutter/issues/38965 is fixed. -->
|
||||
<application>
|
||||
<activity android:name=".MainActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:theme="@style/LaunchTheme"
|
||||
android:exported="true"
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||
android:hardwareAccelerated="true"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER" tools:node="remove"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
<uses-permission android:name="com.android.vending.BILLING" tools:node="remove"/>
|
||||
</manifest>
|
||||
|
||||
24
mobile/android/app/src/independent/AndroidManifest.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="io.ente.photos">
|
||||
|
||||
<!-- Adding the following block to prevent the app from having multiple
|
||||
launcher entries. We can remove this along with the `LAUNCHER` category from
|
||||
main/AndroidManifest.xml once
|
||||
https://github.com/flutter/flutter/issues/38965 is fixed. -->
|
||||
<application>
|
||||
<activity android:name=".MainActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:theme="@style/LaunchTheme"
|
||||
android:exported="true"
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||
android:hardwareAccelerated="true"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER" tools:node="remove"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
</manifest>
|
||||
@@ -1,9 +1,11 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="io.ente.photos">
|
||||
<application android:name="${applicationName}"
|
||||
<application
|
||||
tools:replace="android:label"
|
||||
android:name="${applicationName}"
|
||||
android:label="@string/app_name"
|
||||
android:icon="@mipmap/launcher_icon"
|
||||
android:icon="@mipmap/icon_green"
|
||||
android:usesCleartextTraffic="true"
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:allowBackup="false"
|
||||
@@ -17,8 +19,11 @@
|
||||
android:hardwareAccelerated="true"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="es.antonborri.home_widget.action.LAUNCH" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
@@ -85,6 +90,50 @@
|
||||
</intent-filter>
|
||||
|
||||
</activity>
|
||||
<activity-alias
|
||||
android:name="${applicationId}.IconGreen"
|
||||
android:icon="@mipmap/icon_green"
|
||||
android:enabled="true"
|
||||
android:exported="true"
|
||||
android:targetActivity=".MainActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
<activity-alias
|
||||
android:name="${applicationId}.IconLight"
|
||||
android:icon="@mipmap/icon_light"
|
||||
android:enabled="false"
|
||||
android:exported="true"
|
||||
android:targetActivity=".MainActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
<activity-alias
|
||||
android:name="${applicationId}.IconDark"
|
||||
android:icon="@mipmap/icon_dark"
|
||||
android:enabled="false"
|
||||
android:exported="true"
|
||||
android:targetActivity=".MainActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
<activity-alias
|
||||
android:name="${applicationId}.IconOG"
|
||||
android:icon="@mipmap/icon_og"
|
||||
android:enabled="false"
|
||||
android:exported="true"
|
||||
android:targetActivity=".MainActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
<!-- Don't delete the meta-data below.
|
||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
||||
@@ -96,12 +145,12 @@
|
||||
android:value="https://2235e5c99219488ea93da34b9ac1cb68@sentry.ente.io/4" />
|
||||
<meta-data android:name="firebase_analytics_collection_deactivated"
|
||||
android:value="true" />
|
||||
<receiver android:name="SlideshowWidgetProvider" android:label="Favorites" android:exported="true">
|
||||
<receiver android:name="EnteMemoryWidgetProvider" android:label="Memories" android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
<meta-data android:name="android.appwidget.provider"
|
||||
android:resource="@xml/slideshow_widget" />
|
||||
android:resource="@xml/memory_widget" />
|
||||
</receiver>
|
||||
</application>
|
||||
|
||||
|
||||
@@ -0,0 +1,198 @@
|
||||
package io.ente.photos
|
||||
|
||||
import android.appwidget.AppWidgetManager
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.net.Uri
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.widget.RemoteViews
|
||||
import androidx.core.content.ContextCompat
|
||||
import es.antonborri.home_widget.HomeWidgetLaunchIntent
|
||||
import es.antonborri.home_widget.HomeWidgetProvider
|
||||
import java.io.File
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.json.Json
|
||||
|
||||
@Serializable
|
||||
data class MemoryFileData(val title: String?, val subText: String?, val generatedId: Int?)
|
||||
|
||||
class EnteMemoryWidgetProvider : HomeWidgetProvider() {
|
||||
override fun onUpdate(
|
||||
context: Context,
|
||||
appWidgetManager: AppWidgetManager,
|
||||
appWidgetIds: IntArray,
|
||||
widgetData: SharedPreferences
|
||||
) {
|
||||
appWidgetIds.forEach { widgetId ->
|
||||
val views =
|
||||
RemoteViews(context.packageName, R.layout.memory_widget_layout)
|
||||
.apply {
|
||||
val totalMemories =
|
||||
widgetData.getInt("totalMemories", 0)
|
||||
var randomNumber = -1
|
||||
var imagePath: String? = null
|
||||
if (totalMemories > 0) {
|
||||
randomNumber =
|
||||
(0 until totalMemories!!).random()
|
||||
imagePath =
|
||||
widgetData.getString(
|
||||
"memory_widget_" +
|
||||
randomNumber,
|
||||
null
|
||||
)
|
||||
}
|
||||
var imageExists: Boolean = false
|
||||
if (imagePath != null) {
|
||||
val imageFile = File(imagePath)
|
||||
imageExists = imageFile.exists()
|
||||
}
|
||||
if (imageExists) {
|
||||
val data =
|
||||
widgetData.getString(
|
||||
"memory_widget_${randomNumber}_data",
|
||||
null
|
||||
)
|
||||
val decoded: MemoryFileData? =
|
||||
data?.let {
|
||||
Json.decodeFromString<
|
||||
MemoryFileData>(it)
|
||||
}
|
||||
val title = decoded?.title
|
||||
val subText = decoded?.subText
|
||||
val generatedId = decoded?.generatedId
|
||||
|
||||
val deepLinkUri =
|
||||
Uri.parse(
|
||||
"memorywidget://message?generatedId=${generatedId}&homeWidget"
|
||||
)
|
||||
|
||||
val pendingIntent =
|
||||
HomeWidgetLaunchIntent.getActivity(
|
||||
context,
|
||||
MainActivity::class.java,
|
||||
deepLinkUri
|
||||
)
|
||||
|
||||
setOnClickPendingIntent(
|
||||
R.id.widget_container,
|
||||
pendingIntent
|
||||
)
|
||||
|
||||
Log.d(
|
||||
"EnteMemoryWidgetProvider",
|
||||
"Image exists: $imagePath"
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_img,
|
||||
View.VISIBLE
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_placeholder_container,
|
||||
View.VISIBLE
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_subtitle,
|
||||
View.VISIBLE
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_title,
|
||||
View.VISIBLE
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_overlay,
|
||||
View.VISIBLE
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_placeholder,
|
||||
View.GONE
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_placeholder_text,
|
||||
View.GONE
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_placeholder_container,
|
||||
View.GONE
|
||||
)
|
||||
|
||||
val bitmap: Bitmap =
|
||||
BitmapFactory.decodeFile(imagePath)
|
||||
setImageViewBitmap(R.id.widget_img, bitmap)
|
||||
setTextViewText(R.id.widget_title, title)
|
||||
setTextViewText(
|
||||
R.id.widget_subtitle,
|
||||
subText
|
||||
)
|
||||
} else {
|
||||
// Open App on Widget Click
|
||||
val pendingIntent =
|
||||
HomeWidgetLaunchIntent.getActivity(
|
||||
context,
|
||||
MainActivity::class.java
|
||||
)
|
||||
setOnClickPendingIntent(
|
||||
R.id.widget_container,
|
||||
pendingIntent
|
||||
)
|
||||
|
||||
Log.d(
|
||||
"EnteMemoryWidgetProvider",
|
||||
"Image doesn't exists"
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_img,
|
||||
View.GONE
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_placeholder_container,
|
||||
View.GONE
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_subtitle,
|
||||
View.GONE
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_title,
|
||||
View.GONE
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_overlay,
|
||||
View.GONE
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_placeholder,
|
||||
View.VISIBLE
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_placeholder_text,
|
||||
View.VISIBLE
|
||||
)
|
||||
setViewVisibility(
|
||||
R.id.widget_placeholder_container,
|
||||
View.VISIBLE
|
||||
)
|
||||
|
||||
val drawable =
|
||||
ContextCompat.getDrawable(
|
||||
context,
|
||||
R.drawable
|
||||
.ic_home_widget_default
|
||||
)
|
||||
val bitmap =
|
||||
(drawable as BitmapDrawable).bitmap
|
||||
setImageViewBitmap(
|
||||
R.id.widget_placeholder,
|
||||
bitmap
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
appWidgetManager.updateAppWidget(widgetId, views)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
package io.ente.photos
|
||||
|
||||
import android.appwidget.AppWidgetManager
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.widget.RemoteViews
|
||||
import androidx.core.content.ContextCompat
|
||||
import es.antonborri.home_widget.HomeWidgetLaunchIntent
|
||||
import es.antonborri.home_widget.HomeWidgetProvider
|
||||
import java.io.File
|
||||
|
||||
class SlideshowWidgetProvider : HomeWidgetProvider() {
|
||||
override fun onUpdate(
|
||||
context: Context,
|
||||
appWidgetManager: AppWidgetManager,
|
||||
appWidgetIds: IntArray,
|
||||
widgetData: SharedPreferences
|
||||
) {
|
||||
appWidgetIds.forEach { widgetId ->
|
||||
val views =
|
||||
RemoteViews(context.packageName, R.layout.slideshow_layout).apply {
|
||||
// Open App on Widget Click
|
||||
val pendingIntent =
|
||||
HomeWidgetLaunchIntent.getActivity(
|
||||
context,
|
||||
MainActivity::class.java
|
||||
)
|
||||
setOnClickPendingIntent(R.id.widget_container, pendingIntent)
|
||||
|
||||
// Show Images saved with `renderFlutterWidget`
|
||||
val imagePath = widgetData.getString("slideshow", null)
|
||||
var imageExists: Boolean = false
|
||||
if (imagePath != null) {
|
||||
val imageFile = File(imagePath)
|
||||
imageExists = imageFile.exists()
|
||||
}
|
||||
if (imageExists) {
|
||||
Log.d("SlideshowWidgetProvider", "Image exists: $imagePath")
|
||||
setViewVisibility(R.id.widget_img, View.VISIBLE)
|
||||
setViewVisibility(R.id.widget_placeholder, View.GONE)
|
||||
|
||||
val bitmap: Bitmap = BitmapFactory.decodeFile(imagePath)
|
||||
setImageViewBitmap(R.id.widget_img, bitmap)
|
||||
} else {
|
||||
Log.d("SlideshowWidgetProvider", "Image doesn't exists")
|
||||
setViewVisibility(R.id.widget_img, View.GONE)
|
||||
setViewVisibility(R.id.widget_placeholder, View.VISIBLE)
|
||||
|
||||
val drawable =
|
||||
ContextCompat.getDrawable(
|
||||
context,
|
||||
R.drawable.ic_home_widget_default
|
||||
)
|
||||
val bitmap = (drawable as BitmapDrawable).bitmap
|
||||
setImageViewBitmap(R.id.widget_placeholder, bitmap)
|
||||
}
|
||||
}
|
||||
|
||||
appWidgetManager.updateAppWidget(widgetId, views)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 70 B After Width: | Height: | Size: 69 B |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 70 B After Width: | Height: | Size: 69 B |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 69 B |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 216 KiB After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 343 KiB After Width: | Height: | Size: 202 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 69 B |
|
After Width: | Height: | Size: 125 KiB |
|
Before Width: | Height: | Size: 886 B After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 40 KiB |
@@ -0,0 +1,8 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<gradient
|
||||
android:angle="90"
|
||||
android:startColor="#80000000"
|
||||
android:endColor="#00000000"
|
||||
android:centerY="1.0"
|
||||
android:centerColor="#20000000"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/widget_container">
|
||||
|
||||
<!-- Main Image (if available) -->
|
||||
<ImageView
|
||||
android:id="@+id/widget_img"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="centerCrop"
|
||||
android:visibility="gone" /> <!-- Initially hidden -->
|
||||
|
||||
<!-- Gradient Overlay for Text Readability -->
|
||||
<LinearLayout
|
||||
android:id="@+id/widget_overlay"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom"
|
||||
android:orientation="vertical"
|
||||
android:paddingStart="16dp"
|
||||
android:paddingEnd="16dp"
|
||||
android:paddingBottom="16dp"
|
||||
android:paddingTop="4dp"
|
||||
android:background="@layout/gradient_overlay"
|
||||
android:visibility="gone"> <!-- Initially hidden, shown when image is available -->
|
||||
|
||||
<!-- Title -->
|
||||
<TextView
|
||||
android:id="@+id/widget_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text=""
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="14sp"
|
||||
android:textStyle="bold"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<!-- Subtitle -->
|
||||
<TextView
|
||||
android:id="@+id/widget_subtitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text=""
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="12sp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:visibility="gone"/>
|
||||
</LinearLayout>
|
||||
|
||||
<!-- Placeholder View (when no image available) -->
|
||||
<LinearLayout
|
||||
android:id="@+id/widget_placeholder_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:background="@color/widget_placeholder_bg">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/widget_placeholder"
|
||||
android:layout_width="120dp"
|
||||
android:layout_height="120dp"
|
||||
android:src="@drawable/ic_home_widget_default"
|
||||
android:scaleType="fitCenter" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widget_placeholder_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Your memories will appear here"
|
||||
android:textSize="14sp"
|
||||
android:gravity="center_horizontal"
|
||||
android:textColor="@color/widget_text_color"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:layout_marginTop="12dp"/>
|
||||
</LinearLayout>
|
||||
|
||||
</FrameLayout>
|
||||
@@ -1,27 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:id="@+id/widget_container">
|
||||
<ImageView
|
||||
android:id="@+id/widget_placeholder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="fitCenter"
|
||||
android:adjustViewBounds="true"
|
||||
android:visibility="visible"
|
||||
tools:visibility="visible"
|
||||
/>
|
||||
<ImageView
|
||||
android:id="@+id/widget_img"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="fitCenter"
|
||||
android:adjustViewBounds="true"
|
||||
android:visibility="visible"
|
||||
tools:visibility="visible"
|
||||
/>
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background_dark"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_monochrome_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_monochrome_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background_light"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_monochrome_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background_light"/>
|
||||
<foreground android:drawable="@drawable/ic_og_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_og_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -2,5 +2,5 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_monochrome_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
||||
BIN
mobile/android/app/src/main/res/mipmap-hdpi/icon_dark.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
mobile/android/app/src/main/res/mipmap-hdpi/icon_green.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
mobile/android/app/src/main/res/mipmap-hdpi/icon_light.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
mobile/android/app/src/main/res/mipmap-hdpi/icon_monochrome.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
mobile/android/app/src/main/res/mipmap-hdpi/icon_og.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
mobile/android/app/src/main/res/mipmap-mdpi/icon_dark.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
mobile/android/app/src/main/res/mipmap-mdpi/icon_green.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
mobile/android/app/src/main/res/mipmap-mdpi/icon_light.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
mobile/android/app/src/main/res/mipmap-mdpi/icon_monochrome.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
mobile/android/app/src/main/res/mipmap-mdpi/icon_og.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
mobile/android/app/src/main/res/mipmap-xhdpi/icon_dark.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
mobile/android/app/src/main/res/mipmap-xhdpi/icon_green.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
mobile/android/app/src/main/res/mipmap-xhdpi/icon_light.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
mobile/android/app/src/main/res/mipmap-xhdpi/icon_monochrome.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
mobile/android/app/src/main/res/mipmap-xhdpi/icon_og.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
mobile/android/app/src/main/res/mipmap-xxhdpi/icon_dark.png
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
mobile/android/app/src/main/res/mipmap-xxhdpi/icon_green.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
mobile/android/app/src/main/res/mipmap-xxhdpi/icon_light.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 3.7 KiB |