Compare commits
1659 commits
rc1.26.0-2
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
03c0b8736c | ||
|
|
9fde066a5b | ||
|
|
344e84ae3e | ||
|
|
7128ba98b2 | ||
|
|
2f35f07252 | ||
|
|
9e29533502 | ||
|
|
e0738cca97 | ||
|
|
14ef8a1d0e | ||
|
|
0134e9c367 | ||
|
|
682090c6d7 | ||
|
|
6223ea85b5 | ||
|
|
0493e24b08 | ||
|
|
8aee82dd6f | ||
|
|
eab984541e | ||
|
|
dda8e6cbc7 | ||
|
|
f9bb2715b0 | ||
|
|
f6c4e69302 | ||
|
|
b8a2d19d2f | ||
|
|
df9325a5e4 | ||
|
|
b333d78c8c | ||
|
|
358c7f25d4 | ||
|
|
1bd1298443 | ||
|
|
f6a739b78e | ||
|
|
4a8773c67b | ||
|
|
ac24b86a3a | ||
|
|
17b5304995 | ||
|
|
74c3277eb6 | ||
|
|
c9e16cc469 | ||
|
|
4b676cc23b | ||
|
|
f961b22435 | ||
|
|
de96b27e29 | ||
|
|
06827038d8 | ||
|
|
3b204373e9 | ||
|
|
aa605ae0c1 | ||
|
|
f64cc1e996 | ||
|
|
25814f4a52 | ||
|
|
77fbf33f90 | ||
|
|
46b1a4846d | ||
|
|
33d28c2f94 | ||
|
|
1157cf96b3 | ||
|
|
0294b8d29b | ||
|
|
4f09b43f0e | ||
|
|
e68424e1e8 | ||
|
|
54a7b4ea69 | ||
|
|
1f42aa3605 | ||
|
|
9c28e5ed6e | ||
|
|
54ba19d39e | ||
|
|
eea4e431b4 | ||
|
|
e95069478d | ||
|
|
9ede56427f | ||
|
|
6c05ed8aaa | ||
|
|
76fdabecaa | ||
|
|
4ed353fbbd | ||
|
|
9724b852bb | ||
|
|
a8a0212d3d | ||
|
|
5c88133691 | ||
|
|
9b531179a4 | ||
|
|
a8aadc834f | ||
|
|
38cda39672 | ||
|
|
1770f3e17c | ||
|
|
096a995b89 | ||
|
|
5cc8ab636c | ||
|
|
922156498f | ||
|
|
ba06e09b9e | ||
|
|
b99b23c652 | ||
|
|
0eecc9597b | ||
|
|
5fd377a611 | ||
|
|
26e72d789f | ||
|
|
04edda0b1a | ||
|
|
657143b3b6 | ||
|
|
d1c96b1c45 | ||
|
|
2d9710d2b4 | ||
|
|
46bf54e540 | ||
|
|
5e368b9df0 | ||
|
|
150ab800ee | ||
|
|
14ce0a5927 | ||
|
|
57044f01d8 | ||
|
|
a7c89418eb | ||
|
|
210ebdae6e | ||
|
|
cd99f6a460 | ||
|
|
a490a40379 | ||
|
|
c90fdc3e75 | ||
|
|
e8ee58d6d9 | ||
|
|
8571c42ba4 | ||
|
|
a2857ef36a | ||
|
|
1e763f05f5 | ||
|
|
47ac9c8f97 | ||
|
|
85c21e61c3 | ||
|
|
fc7eb6954c | ||
|
|
084801fd84 | ||
|
|
d2cb802436 | ||
|
|
9438594fa2 | ||
|
|
1cfda2e338 | ||
|
|
4825135de2 | ||
|
|
8f8309aa63 | ||
|
|
a3a2a37a14 | ||
|
|
bad0a549cb | ||
|
|
71bbe4ad74 | ||
|
|
aba8c3faf2 | ||
|
|
9c49141f9e | ||
|
|
d2777cacee | ||
|
|
c9e32cdad8 | ||
|
|
e0c20f249b | ||
|
|
ece4628751 | ||
|
|
edf7d81b60 | ||
|
|
9d229e04c6 | ||
|
|
89864cfd0c | ||
|
|
9f9111dac2 | ||
|
|
43ba692a21 | ||
|
|
39845d95ab | ||
|
|
d0901da51e | ||
|
|
424d4eef40 | ||
|
|
dba3553a59 | ||
|
|
cb8b3be205 | ||
|
|
661339f7ab | ||
|
|
0fe91bfe14 | ||
|
|
993e12a946 | ||
|
|
18d98d96c6 | ||
|
|
d1abd71527 | ||
|
|
febd0e6b41 | ||
|
|
d69b42e1c5 | ||
|
|
bfcd78fcdf | ||
|
|
58d5de4aba | ||
|
|
e311c9573e | ||
|
|
8fdf58e071 | ||
|
|
a22c8fa6fa | ||
|
|
9d8c332fc3 | ||
|
|
9f5250ee04 | ||
|
|
386d01296f | ||
|
|
127c3fd7bf | ||
|
|
c206a51515 | ||
|
|
3165cd6fb6 | ||
|
|
de76969993 | ||
|
|
4bbba18cc0 | ||
|
|
03f8f98e03 | ||
|
|
3c77e2f457 | ||
|
|
4dfa9873ee | ||
|
|
08e396c02c | ||
|
|
7f7e7eb928 | ||
|
|
2cb73d726c | ||
|
|
d700d8db0a | ||
|
|
1f17d68f8d | ||
|
|
7ddfc254e3 | ||
|
|
c4cf4a3e7c | ||
|
|
d808fc857c | ||
|
|
76c5335d32 | ||
|
|
d58b65a4b8 | ||
|
|
e8c974fa67 | ||
|
|
266f2759df | ||
|
|
d83ea7731a | ||
|
|
caa5847b66 | ||
|
|
23f97df1f1 | ||
|
|
9990fa83d2 | ||
|
|
2a50300d97 | ||
|
|
21202c8b29 | ||
|
|
c11877d893 | ||
|
|
95aca9f9d7 | ||
|
|
1a8a5c6187 | ||
|
|
652152481c | ||
|
|
2b17e7401b | ||
|
|
c360abb0fc | ||
|
|
5053dd7978 | ||
|
|
55a886c68a | ||
|
|
f6a96617c7 | ||
|
|
e53bb3de90 | ||
|
|
644601ea93 | ||
|
|
6319dd101c | ||
|
|
2cba2dde83 | ||
|
|
7488fb0ac5 | ||
|
|
a0ad140262 | ||
|
|
ab8574590d | ||
|
|
197ed41ff2 | ||
|
|
273112406b | ||
|
|
f18404fb7e | ||
|
|
d376e009bc | ||
|
|
9fd85a8b58 | ||
|
|
0061c948cd | ||
|
|
0de474cbe7 | ||
|
|
10a5673391 | ||
|
|
26d3f4859d | ||
|
|
5e6c80ddd8 | ||
|
|
13bd504f17 | ||
|
|
0436f16aa9 | ||
|
|
d7d104de91 | ||
|
|
959d3da494 | ||
|
|
ebebd8809b | ||
|
|
52f4e00723 | ||
|
|
2e8b3c1e1e | ||
|
|
1fc49db3d3 | ||
|
|
f0aa15843b | ||
|
|
29fcc223d6 | ||
|
|
e7116c97e2 | ||
|
|
746aeed770 | ||
|
|
c4d4cbcc83 | ||
|
|
6f0ab83ffc | ||
|
|
a91e35bb0b | ||
|
|
cc35030846 | ||
|
|
5b196becaa | ||
|
|
bf7a078015 | ||
|
|
f380219a2c | ||
|
|
c4b0082512 | ||
|
|
e9ed2db39d | ||
|
|
69bafd1dfe | ||
|
|
f4c6f431c8 | ||
|
|
a0f6dc3afe | ||
|
|
a7019f891e | ||
|
|
c28136a692 | ||
|
|
ba942f1dfb | ||
|
|
a2de30360e | ||
|
|
c2f44ad978 | ||
|
|
f4ee2670a8 | ||
|
|
41393c96be | ||
|
|
a04067d1e9 | ||
|
|
fd70c292e9 | ||
|
|
47934a3378 | ||
|
|
1ea607f633 | ||
|
|
c7a0a41c82 | ||
|
|
f0841fea9d | ||
|
|
cfe43c23d5 | ||
|
|
1cbeb16616 | ||
|
|
ad7a2d9a01 | ||
|
|
af6147cde4 | ||
|
|
88900bf72d | ||
|
|
740f04206a | ||
|
|
0052a15b54 | ||
|
|
2408568f36 | ||
|
|
3cdaf97a4c | ||
|
|
e3b5cf2baa | ||
|
|
2bf200d44a | ||
|
|
f5992ddeca | ||
|
|
7e9478b92f | ||
|
|
0012dbd425 | ||
|
|
a58c2244b3 | ||
|
|
9234ac2cc1 | ||
|
|
03d1b279d3 | ||
|
|
becdff56b1 | ||
|
|
0401456481 | ||
|
|
00c95e008c | ||
|
|
c40c9cc70f | ||
|
|
28af7bb0c7 | ||
|
|
f797bce8d0 | ||
|
|
2d23f88e6b | ||
|
|
ab976db8e7 | ||
|
|
67d9eaf5b7 | ||
|
|
e82438975b | ||
|
|
b7c9dcefb6 | ||
|
|
278bd2580e | ||
|
|
8e4b4f1338 | ||
|
|
75db25874a | ||
|
|
9873c7699b | ||
|
|
9f5794004e | ||
|
|
bfbcd31f35 | ||
|
|
bed0a89d65 | ||
|
|
a422d07d63 | ||
|
|
0dd9caca50 | ||
|
|
e9efce150e | ||
|
|
df847abbeb | ||
|
|
8998d5600a | ||
|
|
2ac1193889 | ||
|
|
67218a0acb | ||
|
|
c4122f7ac1 | ||
|
|
f9d1d4a9ca | ||
|
|
39ed7a3aa9 | ||
|
|
d932e5817c | ||
|
|
c1541bc4bf | ||
|
|
15a7053c58 | ||
|
|
df6cb5ca1c | ||
|
|
0869a93a7a | ||
|
|
7cde0f9d0a | ||
|
|
08379a72e5 | ||
|
|
ae1a1919b5 | ||
|
|
b1a2b96aa4 | ||
|
|
f0301b6710 | ||
|
|
d434489f39 | ||
|
|
c3ae496bee | ||
|
|
812ea75aba | ||
|
|
187bc676cf | ||
|
|
81af04f60a | ||
|
|
1b5c1547d6 | ||
|
|
213019f083 | ||
|
|
d233a22793 | ||
|
|
5dfb40fdb8 | ||
|
|
42cf87fde5 | ||
|
|
475bb15875 | ||
|
|
68d6730054 | ||
|
|
a184327d10 | ||
|
|
b8085bdfb1 | ||
|
|
154ac0ae0c | ||
|
|
3aa102d5c0 | ||
|
|
9128b6d283 | ||
|
|
593750ad15 | ||
|
|
bb225689bd | ||
|
|
fda155d95a | ||
|
|
b81b52330a | ||
|
|
1e75aa3385 | ||
|
|
d36d3f7cd2 | ||
|
|
54300984b4 | ||
|
|
a7fb6f976a | ||
|
|
0c670a3399 | ||
|
|
9ec8bf5c37 | ||
|
|
4d5211820e | ||
|
|
a9ea64d08b | ||
|
|
39e7954e0f | ||
|
|
8d86dcec21 | ||
|
|
be39f1b1f8 | ||
|
|
d3e6dbe997 | ||
|
|
64272f1c91 | ||
|
|
6322dbd68b | ||
|
|
6d9a6a7310 | ||
|
|
f449b1002c | ||
|
|
7997da248d | ||
|
|
067db94626 | ||
|
|
a84b73bb24 | ||
|
|
baba28010a | ||
|
|
df1bda1c69 | ||
|
|
0bdff47e41 | ||
|
|
c0cba9816f | ||
|
|
882c1cac74 | ||
|
|
4a2cd13910 | ||
|
|
1972eef11d | ||
|
|
dbcc4b594f | ||
|
|
74cfee334e | ||
|
|
162a594d80 | ||
|
|
a9a8b39465 | ||
|
|
84993dec59 | ||
|
|
a0a03941c2 | ||
|
|
5283d0fcc8 | ||
|
|
d421f7ec76 | ||
|
|
c59031c44c | ||
|
|
4a9569156a | ||
|
|
66566e6901 | ||
|
|
5bcdd6d1b0 | ||
|
|
2b2b96872d | ||
|
|
7a1eded1bb | ||
|
|
1cd3a91037 | ||
|
|
d08364688e | ||
|
|
9d007815df | ||
|
|
298a2d0760 | ||
|
|
8381281086 | ||
|
|
e852453dec | ||
|
|
42fae5fbe6 | ||
|
|
1896c56544 | ||
|
|
b4fbe46d43 | ||
|
|
6d5ceba885 | ||
|
|
e5000b83dd | ||
|
|
413352628e | ||
|
|
299174c922 | ||
|
|
fe51d22b26 | ||
|
|
ecd13b7efc | ||
|
|
10a138bb6f | ||
|
|
c87e07843f | ||
|
|
127bc6d698 | ||
|
|
78aeceeb93 | ||
|
|
39a335ffac | ||
|
|
0323a16821 | ||
|
|
6cb7775c93 | ||
|
|
193d68a525 | ||
|
|
727e442c94 | ||
|
|
7be2d3df59 | ||
|
|
c5b683f842 | ||
|
|
402801c458 | ||
|
|
7de276f071 | ||
|
|
819d068485 | ||
|
|
51ae4390ab | ||
|
|
6bdefc43e9 | ||
|
|
16098635c3 | ||
|
|
65c3566dbd | ||
|
|
acda3e40ff | ||
|
|
db4b3240c3 | ||
|
|
da8336b1fe | ||
|
|
aae427c8a5 | ||
|
|
52409ee657 | ||
|
|
83e9bedbc1 | ||
|
|
c82d4dbac1 | ||
|
|
7d4fdb60f7 | ||
|
|
8ef3dfd360 | ||
|
|
58351535ae | ||
|
|
7ec4c6f34e | ||
|
|
6ad538ecab | ||
|
|
2b328b0faf | ||
|
|
c0400e38ac | ||
|
|
d052b5385d | ||
|
|
abea52d4d7 | ||
|
|
ab2592bdef | ||
|
|
eccf291856 | ||
|
|
49003af949 | ||
|
|
2a390db509 | ||
|
|
ea795b89ed | ||
|
|
02ece86f2b | ||
|
|
0c7c8f8d5a | ||
|
|
dd1e2f34d3 | ||
|
|
4b1970d613 | ||
|
|
eaa7e8a1fc | ||
|
|
2e22f8b2c4 | ||
|
|
8f4c8b7501 | ||
|
|
4d7f0295ca | ||
|
|
f7932639e2 | ||
|
|
feddf0e911 | ||
|
|
f38cee0322 | ||
|
|
d487939d27 | ||
|
|
d98d80bfe7 | ||
|
|
717a6bc44b | ||
|
|
741ec79dea | ||
|
|
ca669124a3 | ||
|
|
0331f915f8 | ||
|
|
2a8fb81e8c | ||
|
|
9333cd29fd | ||
|
|
5a148521a5 | ||
|
|
54cd2af6dc | ||
|
|
eb5215c81a | ||
|
|
b2654f4cc1 | ||
|
|
6ed67cd714 | ||
|
|
7936982929 | ||
|
|
e40d9b5df2 | ||
|
|
f31887b6d2 | ||
|
|
6312f8fef8 | ||
|
|
fa27ab2141 | ||
|
|
72c814a815 | ||
|
|
3c1e210f3b | ||
|
|
8c8de1837b | ||
|
|
2619cd4332 | ||
|
|
3cd998e135 | ||
|
|
51b42b93a6 | ||
|
|
7678da506a | ||
|
|
8816611f89 | ||
|
|
bd9ec1bca6 | ||
|
|
7bc375ea01 | ||
|
|
86833b908b | ||
|
|
00a1ef2fd1 | ||
|
|
afeb46a4b4 | ||
|
|
078d0f0221 | ||
|
|
dce2ca8693 | ||
|
|
4a360de5df | ||
|
|
cbd00969a2 | ||
|
|
ce21b821d2 | ||
|
|
ea4f84e95f | ||
|
|
ad8a259a76 | ||
|
|
87e5a831a0 | ||
|
|
683fa4dc84 | ||
|
|
24c71b2816 | ||
|
|
d9d64c85a3 | ||
|
|
5fd7f114ec | ||
|
|
4bfda27946 | ||
|
|
1b17588039 | ||
|
|
a880140e40 | ||
|
|
4dffb94720 | ||
|
|
df85f9c48c | ||
|
|
2b67559cec | ||
|
|
ad412381c2 | ||
|
|
a6757bd4a6 | ||
|
|
d61dabd5e7 | ||
|
|
19e0bda239 | ||
|
|
0a5912b20a | ||
|
|
2d508da82d | ||
|
|
9e3bd2b66b | ||
|
|
a1214908c2 | ||
|
|
fa43658923 | ||
|
|
bcd350d401 | ||
|
|
4b12353a20 | ||
|
|
731932a210 | ||
|
|
a0aeab34ea | ||
|
|
3a6d18038e | ||
|
|
03109371dc | ||
|
|
dba2d2eb98 | ||
|
|
c43c721f7f | ||
|
|
f3db6592e8 | ||
|
|
513ef6862a | ||
|
|
f1e947d2e7 | ||
|
|
52ef7cf43b | ||
|
|
f15e092354 | ||
|
|
4b23580a6a | ||
|
|
a361c7ad59 | ||
|
|
6368c46c54 | ||
|
|
c94fc39280 | ||
|
|
d67dd0519b | ||
|
|
61913591e6 | ||
|
|
840a37d395 | ||
|
|
127c1845ea | ||
|
|
87861ac9e2 | ||
|
|
840576bc39 | ||
|
|
dadda9b52c | ||
|
|
9563f8097b | ||
|
|
47662653cf | ||
|
|
fe8a4f1775 | ||
|
|
cebb652b20 | ||
|
|
45ce312066 | ||
|
|
8f166980c5 | ||
|
|
ff7bb45a1f | ||
|
|
5412ab5742 | ||
|
|
3260bc64d5 | ||
|
|
5782c37b51 | ||
|
|
3678e46f85 | ||
|
|
cffc25d081 | ||
|
|
5a148333f6 | ||
|
|
78b73c8199 | ||
|
|
2de0f38e87 | ||
|
|
22c4fa7552 | ||
|
|
0ec617b6c3 | ||
|
|
1f69cf7272 | ||
|
|
dd8604adbe | ||
|
|
f785510bc9 | ||
|
|
7aedd78429 | ||
|
|
70d2a81fee | ||
|
|
040c18d80f | ||
|
|
5c5511b5ca | ||
|
|
81eb4a01a1 | ||
|
|
495de8fc17 | ||
|
|
59d1e51b8d | ||
|
|
043189cb47 | ||
|
|
6d5383453c | ||
|
|
b7374ff7f8 | ||
|
|
5b9466392a | ||
|
|
fa012027e3 | ||
|
|
8e07adfad2 | ||
|
|
6af0562c99 | ||
|
|
a4c35e1ec6 | ||
|
|
174479a0b8 | ||
|
|
00582c8e79 | ||
|
|
1db0ecc5d4 | ||
|
|
3b1ec4263b | ||
|
|
01b466b826 | ||
|
|
42b9eca9b8 | ||
|
|
7bf02c4c9f | ||
|
|
95faaac7d0 | ||
|
|
04e277fe49 | ||
|
|
ff1882c3e9 | ||
|
|
6162e005c7 | ||
|
|
adba41981d | ||
|
|
fd9bc08a3e | ||
|
|
5516916a71 | ||
|
|
d21eed350f | ||
|
|
ee3e5fd1db | ||
|
|
b5feaba537 | ||
|
|
4586967844 | ||
|
|
68f303bcd8 | ||
|
|
b62f16006b | ||
|
|
5f19539970 | ||
|
|
6763982445 | ||
|
|
8f647d4de9 | ||
|
|
684be61ca8 | ||
|
|
758a10d94a | ||
|
|
590a09fbfa | ||
|
|
a83d9eb70e | ||
|
|
26b83b7626 | ||
|
|
37cafe26d8 | ||
|
|
75b08b3281 | ||
|
|
620ad5d19a | ||
|
|
4f196b29bd | ||
|
|
e80e3273ea | ||
|
|
fc052c84ac | ||
|
|
4e2b185f5d | ||
|
|
cacb944918 | ||
|
|
53af09227f | ||
|
|
803602e3c5 | ||
|
|
2b5d00fa41 | ||
|
|
66a788129b | ||
|
|
11a26ef81b | ||
|
|
59a507925d | ||
|
|
3fb05c9854 | ||
|
|
2c4a16d608 | ||
|
|
dc64d1679b | ||
|
|
faf1cf42b2 | ||
|
|
8b62b2e474 | ||
|
|
50aed3ab93 | ||
|
|
6ff886b112 | ||
|
|
b3d7aebf11 | ||
|
|
e555abe0b8 | ||
|
|
037393c598 | ||
|
|
5c7520fd73 | ||
|
|
6e3cb85a57 | ||
|
|
89a167dc57 | ||
|
|
86a73f9909 | ||
|
|
3b181291cc | ||
|
|
903f7c7d15 | ||
|
|
d9c43f976a | ||
|
|
beca025ccb | ||
|
|
40dffa17e3 | ||
|
|
f4e454a050 | ||
|
|
d19cc4f46e | ||
|
|
9889aae2fe | ||
|
|
ef37f09d25 | ||
|
|
1ea649f01e | ||
|
|
75a37f3f7c | ||
|
|
35983437e2 | ||
|
|
b473f514ba | ||
|
|
0b51a7449e | ||
|
|
031c47268e | ||
|
|
352e4a679c | ||
|
|
a360be56ec | ||
|
|
d73ee31986 | ||
|
|
14b85d1de6 | ||
|
|
792c0efdc2 | ||
|
|
bb7e88ad96 | ||
|
|
2c2a173235 | ||
|
|
e3e871d5e8 | ||
|
|
b4dd465f3c | ||
|
|
04ea9daa62 | ||
|
|
07f2396790 | ||
|
|
8d65b57a46 | ||
|
|
b0e94c7737 | ||
|
|
3bc3828cb5 | ||
|
|
fbe0345296 | ||
|
|
ef1cc391c2 | ||
|
|
eb4ecff9bf | ||
|
|
07f621c420 | ||
|
|
5ec7f95b8e | ||
|
|
8cfc25a139 | ||
|
|
1c468ab1e6 | ||
|
|
eba8360ae8 | ||
|
|
02b0fcb8a6 | ||
|
|
22eb82f7d2 | ||
|
|
31a204f1ea | ||
|
|
34a58c5962 | ||
|
|
f279b40c67 | ||
|
|
621d52e993 | ||
|
|
70e8b53333 | ||
|
|
5165b1b596 | ||
|
|
5d590c2c75 | ||
|
|
286fa63115 | ||
|
|
8e4d1dd244 | ||
|
|
c850ef05d7 | ||
|
|
e0187dcc9b | ||
|
|
bb90203835 | ||
|
|
c0148d4ee5 | ||
|
|
e6c870f8af | ||
|
|
deedf0b16f | ||
|
|
a4e5921122 | ||
|
|
08d3aebfa7 | ||
|
|
5baa6fce86 | ||
|
|
585389e313 | ||
|
|
92f7208558 | ||
|
|
e6dfd175d7 | ||
|
|
5815dbde17 | ||
|
|
32213e1c09 | ||
|
|
7efc426c88 | ||
|
|
205eb1bbc9 | ||
|
|
a8bcf12763 | ||
|
|
85500e76c2 | ||
|
|
489402be91 | ||
|
|
87ca3c1f1f | ||
|
|
089932a9f4 | ||
|
|
43c5c35fcc | ||
|
|
3c86da7932 | ||
|
|
b625249ff8 | ||
|
|
ed945311d9 | ||
|
|
726de6e92b | ||
|
|
2b4381dd07 | ||
|
|
18d69ae608 | ||
|
|
5a3703ff2d | ||
|
|
1d92e07c47 | ||
|
|
08b91333fa | ||
|
|
61a4126c0a | ||
|
|
91e60efbb1 | ||
|
|
7724de65a2 | ||
|
|
bc5a38230f | ||
|
|
1ab29963fd | ||
|
|
1c614490f1 | ||
|
|
175d06515d | ||
|
|
27b2eac7ed | ||
|
|
acce4a8d7b | ||
|
|
940d3e62db | ||
|
|
ccb2a23075 | ||
|
|
cbb2810b37 | ||
|
|
5262395340 | ||
|
|
c3ec0491d1 | ||
|
|
6836cab40e | ||
|
|
d8d0abf27c | ||
|
|
8e4c61f03b | ||
|
|
f345ec4210 | ||
|
|
b72ea373de | ||
|
|
419f57a14c | ||
|
|
e7f9302e52 | ||
|
|
6560f7e533 | ||
|
|
61e939d04c | ||
|
|
c47a1bcdc0 | ||
|
|
601271187c | ||
|
|
dc66985ef5 | ||
|
|
6f89151eaf | ||
|
|
8589a17eb3 | ||
|
|
549b7bdd4b | ||
|
|
f97c98c1c0 | ||
|
|
34a18f9775 | ||
|
|
8f0146b125 | ||
|
|
3f966fd6ce | ||
|
|
fcdd373649 | ||
|
|
f133cb6e3b | ||
|
|
9356c2e1de | ||
|
|
06fe6ad37b | ||
|
|
09f96e48d1 | ||
|
|
f8bb996622 | ||
|
|
dbf6b372be | ||
|
|
beec41bc07 | ||
|
|
49f05be221 | ||
|
|
e92b013d7b | ||
|
|
f0cf278683 | ||
|
|
1528026298 | ||
|
|
4ede88a370 | ||
|
|
c5f327ecb8 | ||
|
|
50e3531b7f | ||
|
|
aeec3443c0 | ||
|
|
2fbacce3de | ||
|
|
b357d5e09b | ||
|
|
acfe86c57c | ||
|
|
13bba1ec6c | ||
|
|
24d2b90f7a | ||
|
|
c4099e9fa7 | ||
|
|
d05a5a6968 | ||
|
|
cf97ead544 | ||
|
|
e27daa5f1d | ||
|
|
a68271da25 | ||
|
|
24b6b08094 | ||
|
|
ded28a021f | ||
|
|
931d821cab | ||
|
|
2f9d0b4378 | ||
|
|
90945b4787 | ||
|
|
33511e1d2b | ||
|
|
288d7bf64c | ||
|
|
39bc43d892 | ||
|
|
cb50319654 | ||
|
|
863359e287 | ||
|
|
80512651b6 | ||
|
|
2939415106 | ||
|
|
73b32d0119 | ||
|
|
02945d6b9d | ||
|
|
b45f3aade9 | ||
|
|
f3bfdf6f03 | ||
|
|
bbf5093552 | ||
|
|
2eb77788cd | ||
|
|
96b2b31737 | ||
|
|
db9f1290fd | ||
|
|
f0928daa83 | ||
|
|
a189bfb767 | ||
|
|
2686e299a9 | ||
|
|
fef96de3c4 | ||
|
|
5de67c8641 | ||
|
|
fc07addc07 | ||
|
|
b5cfe22200 | ||
|
|
5b0d62e984 | ||
|
|
a445ec4b43 | ||
|
|
dd3c65a577 | ||
|
|
7d16329cb5 | ||
|
|
b65279f908 | ||
|
|
25e42c0c6d | ||
|
|
1a38777cea | ||
|
|
7c80a58fec | ||
|
|
e16c170642 | ||
|
|
53fe970a2f | ||
|
|
8f2b3cdaec | ||
|
|
b2ea5c8e20 | ||
|
|
b63b461706 | ||
|
|
449a885a4d | ||
|
|
5174a6e25d | ||
|
|
485cc5fa8e | ||
|
|
31b3758622 | ||
|
|
8d7f376112 | ||
|
|
d02c6c70ea | ||
|
|
8ba99aa306 | ||
|
|
35a4a3cc40 | ||
|
|
9418b769fc | ||
|
|
38b6a7956e | ||
|
|
019a4fe4e7 | ||
|
|
aa46c180b9 | ||
|
|
3920d8760b | ||
|
|
fe80ade35f | ||
|
|
8a4b747a1e | ||
|
|
baa0a226ad | ||
|
|
bac8f39ecb | ||
|
|
bea4b811d9 | ||
|
|
991b6a79cb | ||
|
|
4f3629ccf4 | ||
|
|
1334909a62 | ||
|
|
a27337aa4a | ||
|
|
3c049211ca | ||
|
|
b7e112a224 | ||
|
|
4f37d8e8ff | ||
|
|
741224209e | ||
|
|
ae11d5b47f | ||
|
|
92fcfacfc4 | ||
|
|
582797b5f6 | ||
|
|
0d7807bed3 | ||
|
|
4969b7fcb9 | ||
|
|
d1bbde8414 | ||
|
|
ec277ea992 | ||
|
|
73bc621b21 | ||
|
|
0d679d3d14 | ||
|
|
1d53b180b6 | ||
|
|
20dc024922 | ||
|
|
365a82cd75 | ||
|
|
71ba074e7d | ||
|
|
fd13b3c879 | ||
|
|
97fe704f5a | ||
|
|
5ed33122b8 | ||
|
|
a2c88af69b | ||
|
|
72907a64c4 | ||
|
|
fb91bee453 | ||
|
|
1e6ac977ff | ||
|
|
f02e2826e5 | ||
|
|
76c85d3902 | ||
|
|
021c4a6b2f | ||
|
|
269313bdd2 | ||
|
|
bac25d07f8 | ||
|
|
ce48f6434f | ||
|
|
6465202037 | ||
|
|
8bd786e000 | ||
|
|
61a6508752 | ||
|
|
06e4b28e6f | ||
|
|
6f059b8b5d | ||
|
|
af291ab237 | ||
|
|
1654af9735 | ||
|
|
e29a1bdd83 | ||
|
|
28ea59230c | ||
|
|
eae10fc4d1 | ||
|
|
715f9ed68c | ||
|
|
4786778449 | ||
|
|
64e7c7e9f6 | ||
|
|
33b2ec399d | ||
|
|
4020317873 | ||
|
|
1884149be1 | ||
|
|
139b7ff5bd | ||
|
|
c518f470db | ||
|
|
a74b22f5ec | ||
|
|
71618d2e07 | ||
|
|
9c35913057 | ||
|
|
c78e715dfa | ||
|
|
39bdc34eb9 | ||
|
|
36e875aede | ||
|
|
01636cae8f | ||
|
|
380625327a | ||
|
|
b5e59d9bb9 | ||
|
|
da56e0cffe | ||
|
|
56934ea1a6 | ||
|
|
73e897fb09 | ||
|
|
401946970b | ||
|
|
174b5ec13c | ||
|
|
0a3c156604 | ||
|
|
71fa853f05 | ||
|
|
f3ea64086b | ||
|
|
bcc2f0c62f | ||
|
|
38a1819e6b | ||
|
|
3d73391aa5 | ||
|
|
adbdaf6e41 | ||
|
|
3f12312e93 | ||
|
|
60f688afa9 | ||
|
|
2a5b27436e | ||
|
|
545c4cdec4 | ||
|
|
eb0e0cddef | ||
|
|
c6816b5db5 | ||
|
|
5b7944b181 | ||
|
|
816c52630b | ||
|
|
f72ffb6b3c | ||
|
|
975ba31b4d | ||
|
|
422e94ab45 | ||
|
|
1ae60dd2b9 | ||
|
|
1ac19682d2 | ||
|
|
474e263a0b | ||
|
|
3cffe6ff51 | ||
|
|
fbc5924ace | ||
|
|
774ab41a87 | ||
|
|
45005d7ee0 | ||
|
|
c6f0f2b085 | ||
|
|
8cf46f0a7f | ||
|
|
fb29b4c54e | ||
|
|
2bf7c30d73 | ||
|
|
5e154d51bc | ||
|
|
91292500cd | ||
|
|
6e87353e08 | ||
|
|
55705942ef | ||
|
|
143d2d93f7 | ||
|
|
9684d316f2 | ||
|
|
7b8059466b | ||
|
|
5dc9973cab | ||
|
|
f33523a509 | ||
|
|
b2bacf42f3 | ||
|
|
4dab18bbc8 | ||
|
|
0ee4d1ceff | ||
|
|
74573fcae9 | ||
|
|
e10a1c27c4 | ||
|
|
116a1d24b5 | ||
|
|
f03130ddc1 | ||
|
|
bb069a988a | ||
|
|
f803836dd8 | ||
|
|
2eeba98a43 | ||
|
|
ea470b2f23 | ||
|
|
d5a4e8ae5d | ||
|
|
04bb1d0022 | ||
|
|
ffee0f636b | ||
|
|
2e38a2a7cd | ||
|
|
01f890a3ff | ||
|
|
4953b8c875 | ||
|
|
93fa8188b1 | ||
|
|
ef7086f739 | ||
|
|
71eaaadcbd | ||
|
|
8f5bd72e5d | ||
|
|
f31faeb2da | ||
|
|
f4e9af1ac7 | ||
|
|
5fca3dfdfb | ||
|
|
0d7e1aa40f | ||
|
|
d3bf87e0f5 | ||
|
|
1f0e80dd2d | ||
|
|
650ba0c036 | ||
|
|
0495b58065 | ||
|
|
286d1662a4 | ||
|
|
89243bafeb | ||
|
|
a8062de815 | ||
|
|
31b5ce910d | ||
|
|
2e7d6ccde1 | ||
|
|
e5c7707321 | ||
|
|
8cafffdb3c | ||
|
|
ae29f949d2 | ||
|
|
08b5448ffc | ||
|
|
c37082ec40 | ||
|
|
f9b1a55e23 | ||
|
|
bcf1cfc7f3 | ||
|
|
a94d9f88c4 | ||
|
|
dfc97aa3d7 | ||
|
|
136ddd7681 | ||
|
|
b856e83e83 | ||
|
|
c434b3dddc | ||
|
|
90ec0013f1 | ||
|
|
4c357f6249 | ||
|
|
4f0ed3e93f | ||
|
|
fdb5826d09 | ||
|
|
c7bc84e6f5 | ||
|
|
8bf46a3878 | ||
|
|
d6dcbe0421 | ||
|
|
9eb1f4fc1e | ||
|
|
70c5f03e8d | ||
|
|
765bff9e32 | ||
|
|
7fa7941f84 | ||
|
|
2538f31351 | ||
|
|
bedfde7c10 | ||
|
|
f2207e0d48 | ||
|
|
4279223e62 | ||
|
|
bc226b2093 | ||
|
|
c2808179c0 | ||
|
|
b5613832cd | ||
|
|
5a290d8c3f | ||
|
|
fa8963a519 | ||
|
|
966f13792c | ||
|
|
1cf422f45d | ||
|
|
cf64812ffd | ||
|
|
7ff6d7b401 | ||
|
|
50995e57ff | ||
|
|
8a64b3630c | ||
|
|
7e910a4080 | ||
|
|
7f345bb11a | ||
|
|
ac1fbf8289 | ||
|
|
15dc9f7e50 | ||
|
|
a61bad7e3a | ||
|
|
47a6c8a335 | ||
|
|
4688b5f3f5 | ||
|
|
5357d0353d | ||
|
|
b50f0d35ac | ||
|
|
1d772a4914 | ||
|
|
ff6477d991 | ||
|
|
43346509ca | ||
|
|
a84471e349 | ||
|
|
578da17da9 | ||
|
|
11fdec7b2d | ||
|
|
1365b97153 | ||
|
|
7a072d1b3d | ||
|
|
23e9b714b2 | ||
|
|
d175b1e3be | ||
|
|
345f419c6f | ||
|
|
a41dadc6cf | ||
|
|
c4f07f9f10 | ||
|
|
9c260313ce | ||
|
|
f634e67d69 | ||
|
|
d48ff5b9a3 | ||
|
|
1bef2dcbbb | ||
|
|
a88849c2db | ||
|
|
40bd7eed91 | ||
|
|
2d240ccda3 | ||
|
|
56ddc4387b | ||
|
|
55b508e760 | ||
|
|
9fbf33d02f | ||
|
|
5a2a2e707a | ||
|
|
8830c9b297 | ||
|
|
04b5ecce54 | ||
|
|
2e07b7bcf1 | ||
|
|
662a4ee17d | ||
|
|
b34bb878c8 | ||
|
|
72d27e8ca2 | ||
|
|
eb0204f532 | ||
|
|
59b08f401f | ||
|
|
93c3b26909 | ||
|
|
4d7abb15f1 | ||
|
|
847662a9bb | ||
|
|
495efef591 | ||
|
|
969f1deb48 | ||
|
|
57a5e1c96f | ||
|
|
af130815e1 | ||
|
|
fc4e089da9 | ||
|
|
2add91fc57 | ||
|
|
0be267e8a4 | ||
|
|
42438052b1 | ||
|
|
f6d502459a | ||
|
|
1549b47fed | ||
|
|
e86deb99c9 | ||
|
|
4482b37feb | ||
|
|
f5b9c3dd8d | ||
|
|
07a26563a0 | ||
|
|
87704700cb | ||
|
|
2c40e15dc7 | ||
|
|
916d66ca7b | ||
|
|
8e5613e057 | ||
|
|
25057408ed | ||
|
|
547f34f2a8 | ||
|
|
524a63e1d6 | ||
|
|
0a23dca11e | ||
|
|
adc17d63aa | ||
|
|
32c61909cc | ||
|
|
69bbfa5389 | ||
|
|
e122bdeb98 | ||
|
|
db8e6d3ce3 | ||
|
|
ed971538b7 | ||
|
|
e079346424 | ||
|
|
1cd1c743eb | ||
|
|
4829a2cfa3 | ||
|
|
c1b522c282 | ||
|
|
9628bd39dd | ||
|
|
a2c9ac7ee6 | ||
|
|
f50015e6e9 | ||
|
|
1a1000dd1b | ||
|
|
1dcd4a92b5 | ||
|
|
e6c768333b | ||
|
|
161ae539d7 | ||
|
|
b5e94330e7 | ||
|
|
ab7bbbed53 | ||
|
|
1ea8664c48 | ||
|
|
21a1ceb19e | ||
|
|
24475fbb86 | ||
|
|
0a97836cd8 | ||
|
|
b5caea7913 | ||
|
|
fbe1635fc1 | ||
|
|
55391177c4 | ||
|
|
4be54ccbfd | ||
|
|
8f044e4966 | ||
|
|
6b1b8bf6ad | ||
|
|
ad74e33487 | ||
|
|
0ac93fc2db | ||
|
|
6370c486a0 | ||
|
|
dce4b36150 | ||
|
|
4d10808270 | ||
|
|
8d3c72fe71 | ||
|
|
45331c1812 | ||
|
|
69ef0059fa | ||
|
|
b40b0eda57 | ||
|
|
ace9c93113 | ||
|
|
380ca49995 | ||
|
|
761f6fe680 | ||
|
|
48efd2f784 | ||
|
|
07e721594f | ||
|
|
5f56fe3304 | ||
|
|
9224a7aea4 | ||
|
|
9989246d97 | ||
|
|
fdceefb700 | ||
|
|
2d2a48357d | ||
|
|
ca350b19db | ||
|
|
044290db73 | ||
|
|
a8bbbbcbd7 | ||
|
|
da68b5feb1 | ||
|
|
ec3d0eda81 | ||
|
|
d65feb4a99 | ||
|
|
7dc160da99 | ||
|
|
c923efb4e8 | ||
|
|
3c5bab30b3 | ||
|
|
7571124a27 | ||
|
|
4d91aa138b | ||
|
|
c8fd6a66f5 | ||
|
|
11e54ec496 | ||
|
|
04a4395d3d | ||
|
|
d42ab9e273 | ||
|
|
bb4fbeda08 | ||
|
|
98ddf489b0 | ||
|
|
bc473694f8 | ||
|
|
f38a2ae8b4 | ||
|
|
b1f6e60fd0 | ||
|
|
6bea0faf84 | ||
|
|
30223f192b | ||
|
|
f4cfc2c34a | ||
|
|
d8b9a0f560 | ||
|
|
046b3b8b14 | ||
|
|
e584c22c8b | ||
|
|
d7d3eb64e6 | ||
|
|
37db1e3e0d | ||
|
|
b85b056c70 | ||
|
|
66b4fa1d2b | ||
|
|
14cab813ff | ||
|
|
ea742d81fe | ||
|
|
1c2bc12990 | ||
|
|
676af5b8cf | ||
|
|
ae8903ffba | ||
|
|
6b3ecde0a0 | ||
|
|
13fa8656c9 | ||
|
|
1e1b0a9c83 | ||
|
|
4bc1515e4a | ||
|
|
9c025a528b | ||
|
|
fff7b743a2 | ||
|
|
fb7f515aae | ||
|
|
90a0f64d23 | ||
|
|
e5c364bb21 | ||
|
|
e0db8c7462 | ||
|
|
938bf01277 | ||
|
|
e3e6c6cff8 | ||
|
|
6b877aacc1 | ||
|
|
9752ba2356 | ||
|
|
8e6cfb3acf | ||
|
|
1094f51143 | ||
|
|
4b2611e892 | ||
|
|
b8543ab995 | ||
|
|
4b4be68433 | ||
|
|
3403ac34a9 | ||
|
|
d82efb9a62 | ||
|
|
8377a0382a | ||
|
|
83100cb843 | ||
|
|
b484c1fddc | ||
|
|
f75012e9c1 | ||
|
|
34492bd45e | ||
|
|
737f7306cd | ||
|
|
99de670e04 | ||
|
|
cfc9df59cc | ||
|
|
bee33f059d | ||
|
|
aec841545b | ||
|
|
f3312a3e5a | ||
|
|
7b32ce0260 | ||
|
|
1f14b96d42 | ||
|
|
8e443b84a5 | ||
|
|
d1c9ced335 | ||
|
|
f950034871 | ||
|
|
219f52b808 | ||
|
|
1f248a897e | ||
|
|
14688dfd57 | ||
|
|
f97ba86e0f | ||
|
|
5b0c67d98a | ||
|
|
5bf6039e50 | ||
|
|
2f1f04da49 | ||
|
|
6540a6303f | ||
|
|
07a2c9a256 | ||
|
|
8df7bf6261 | ||
|
|
c3d8fed8a9 | ||
|
|
44fb1cfede | ||
|
|
8bc4775a37 | ||
|
|
d840d30093 | ||
|
|
097f9f02a0 | ||
|
|
dca037b676 | ||
|
|
6fa6c008f0 | ||
|
|
c4af7851b0 | ||
|
|
14f479e978 | ||
|
|
0c37ac97d4 | ||
|
|
80e8bb5dfe | ||
|
|
d620113af5 | ||
|
|
0e436b15f2 | ||
|
|
549c922ba3 | ||
|
|
c3bc089306 | ||
|
|
c4d6eaa5e8 | ||
|
|
660a775ecf | ||
|
|
2710e66fae | ||
|
|
ce6915450d | ||
|
|
c8d2bd8d0a | ||
|
|
510f9ca9d0 | ||
|
|
c7871b2421 | ||
|
|
a95eecf998 | ||
|
|
4fc88d83e7 | ||
|
|
b02ce64979 | ||
|
|
de5cc3579f | ||
|
|
4cc6628b38 | ||
|
|
a7c54e6f33 | ||
|
|
e0c934dbdf | ||
|
|
85139f533c | ||
|
|
565926809d | ||
|
|
247799f29a | ||
|
|
b020c90ac5 | ||
|
|
51d891c62c | ||
|
|
b3c8c6326d | ||
|
|
871da6c6a6 | ||
|
|
9dae089a4b | ||
|
|
182d2429c0 | ||
|
|
12f26af3be | ||
|
|
a2b397a7a9 | ||
|
|
90acab334f | ||
|
|
6749cc463d | ||
|
|
75a26060e1 | ||
|
|
166ea07c1e | ||
|
|
1cc1e45e30 | ||
|
|
f7bf696519 | ||
|
|
2e61e148d2 | ||
|
|
8dc1876aae | ||
|
|
b1ea6edaee | ||
|
|
f2d0fc28f9 | ||
|
|
2078b3d0ed | ||
|
|
c9d60deb3f | ||
|
|
a372c7f8fd | ||
|
|
b5340ae474 | ||
|
|
bd609ae807 | ||
|
|
e0b156b9f1 | ||
|
|
34a07fad82 | ||
|
|
348d87bb89 | ||
|
|
5366d3e2ed | ||
|
|
8075089f8a | ||
|
|
92bbf7962d | ||
|
|
1503f89357 | ||
|
|
d879c27e3a | ||
|
|
1a838b26bd | ||
|
|
82a9c1e522 | ||
|
|
f7e46b391e | ||
|
|
13f67544e0 | ||
|
|
86efd2c520 | ||
|
|
850fda0840 | ||
|
|
384cd51222 | ||
|
|
7faf4a6c2d | ||
|
|
da5804273b | ||
|
|
7febb69599 | ||
|
|
dd891395c4 | ||
|
|
da1de72663 | ||
|
|
00771be840 | ||
|
|
7198e631f5 | ||
|
|
94393e06e8 | ||
|
|
668e258e4b | ||
|
|
378bae0a47 | ||
|
|
d2c2fd48d4 | ||
|
|
9c9ad57506 | ||
|
|
3d6cb7e876 | ||
|
|
11c219fa50 | ||
|
|
34067570d6 | ||
|
|
3c0853b2b1 | ||
|
|
92c5549f74 | ||
|
|
ee713384bc | ||
|
|
b1bfdb1130 | ||
|
|
783c5f1ecd | ||
|
|
779a84c73e | ||
|
|
e86a9495a8 | ||
|
|
10d0caab15 | ||
|
|
a7a4e42647 | ||
|
|
0c2136f793 | ||
|
|
681e939664 | ||
|
|
981f90eb81 | ||
|
|
163c3352db | ||
|
|
2d3b8bec5d | ||
|
|
f00c9c3a19 | ||
|
|
69c437791a | ||
|
|
0c0aa03f6f | ||
|
|
57f7ab85aa | ||
|
|
2471c2e66b | ||
|
|
359108398a | ||
|
|
7a5cb3b7d9 | ||
|
|
f7df8bd75c | ||
|
|
ee6bd75189 | ||
|
|
c2e0d3e0cb | ||
|
|
2618ceac1f | ||
|
|
cc5259b41f | ||
|
|
cb1bbbf0e3 | ||
|
|
bc7a1acc9f | ||
|
|
5764cf2a79 | ||
|
|
d4fa291e20 | ||
|
|
85199b69b9 | ||
|
|
e93c87e97a | ||
|
|
fd0651c365 | ||
|
|
95b98d0090 | ||
|
|
c5f18b9c60 | ||
|
|
a606e95082 | ||
|
|
029eae7979 | ||
|
|
0aefd17809 | ||
|
|
2797974d45 | ||
|
|
c9e4c2aa11 | ||
|
|
eebab84692 | ||
|
|
733bf5d809 | ||
|
|
199baf8548 | ||
|
|
8efab75db6 | ||
|
|
9a2665830e | ||
|
|
8d0fb43884 | ||
|
|
d0a0ff68cd | ||
|
|
140d27ff7b | ||
|
|
ce9d21a203 | ||
|
|
b10c9e6ac9 | ||
|
|
815cb3f78b | ||
|
|
1cc41992c5 | ||
|
|
b864e7c28a | ||
|
|
de339cb171 | ||
|
|
1e2350c3c3 | ||
|
|
71e5c635f3 | ||
|
|
fed18713e4 | ||
|
|
6945363753 | ||
|
|
74b6e4d081 | ||
|
|
4842ce93c6 | ||
|
|
d6ae036e94 | ||
|
|
d1d6b26fb1 | ||
|
|
a691a7636f | ||
|
|
223f036515 | ||
|
|
c82b14971e | ||
|
|
0d9904d8bb | ||
|
|
78884b7b31 | ||
|
|
70f0a7cff0 | ||
|
|
1bb7b3a10a | ||
|
|
b878efbb06 | ||
|
|
648da8c11b | ||
|
|
2d613d2fb4 | ||
|
|
51f1953f13 | ||
|
|
b53f1c36f0 | ||
|
|
340a68c885 | ||
|
|
d86b098bd5 | ||
|
|
068d34419d | ||
|
|
278ddc4410 | ||
|
|
a37810c061 | ||
|
|
9e416eefa1 | ||
|
|
89044f215f | ||
|
|
177efac783 | ||
|
|
f094a05277 | ||
|
|
e2c12fb58f | ||
|
|
e96f6669cc | ||
|
|
23b52d74d6 | ||
|
|
56f8a2e8bc | ||
|
|
46d5dd9790 | ||
|
|
86ed938df8 | ||
|
|
73fff915de | ||
|
|
40da0c107a | ||
|
|
9ae4b16b7f | ||
|
|
025f665bd8 | ||
|
|
c98dd72428 | ||
|
|
dbb1bce90c | ||
|
|
125b82b450 | ||
|
|
304a05ceb7 | ||
|
|
927aedce19 | ||
|
|
e1ddcfaea3 | ||
|
|
96a3aed6b9 | ||
|
|
fe12572172 | ||
|
|
c54f071594 | ||
|
|
00338a7120 | ||
|
|
f5350ad81a | ||
|
|
0cedec3d16 | ||
|
|
7ddb75add6 | ||
|
|
579acb5305 | ||
|
|
a0c99d4610 | ||
|
|
43443b4273 | ||
|
|
7f82d3081b | ||
|
|
ccb1c0a175 | ||
|
|
e6200cc301 | ||
|
|
f2abb5ce05 | ||
|
|
d182e00965 | ||
|
|
8c029e215b | ||
|
|
2b603048b2 | ||
|
|
ef95b4503f | ||
|
|
462facadfe | ||
|
|
750dc15a4a | ||
|
|
458dfa6e3e | ||
|
|
5bccaffab4 | ||
|
|
933119a308 | ||
|
|
0e1874b226 | ||
|
|
80997b44cf | ||
|
|
9643242cc8 | ||
|
|
f798421dd2 | ||
|
|
4a9efddf15 | ||
|
|
f2cf771d59 | ||
|
|
050d5adfb0 | ||
|
|
4afd9684c9 | ||
|
|
02c8db1c9f | ||
|
|
87a2449f41 | ||
|
|
1991707be7 | ||
|
|
15d42a1fbd | ||
|
|
1c7bc7f5d0 | ||
|
|
4bbaa9c5a0 | ||
|
|
b63a1d3e5c | ||
|
|
cf6b34f8c0 | ||
|
|
ea24eccd22 | ||
|
|
36bcfd8f9b | ||
|
|
5a7a76ff3a | ||
|
|
24b88819ba | ||
|
|
1f7a3ead51 | ||
|
|
eda8004f43 | ||
|
|
0129f94331 | ||
|
|
899f83e0e6 | ||
|
|
ed07d320b2 | ||
|
|
fe536a6cdf | ||
|
|
65bf3f2ea8 | ||
|
|
1105073fe9 | ||
|
|
476d611327 | ||
|
|
6dc0a3fd63 | ||
|
|
2d12b842b8 | ||
|
|
4052e8aa1e | ||
|
|
640fa26c1d | ||
|
|
abebe83c14 | ||
|
|
2f8a15c198 | ||
|
|
aca2d20828 | ||
|
|
09b25df778 | ||
|
|
eead20ac63 | ||
|
|
e625e0faed | ||
|
|
e931f89f35 | ||
|
|
88d068fa84 | ||
|
|
4559abfaf7 | ||
|
|
a791f6336e | ||
|
|
aeb853cbd1 | ||
|
|
a217213f77 | ||
|
|
e5d939debd | ||
|
|
b31913b6a4 | ||
|
|
6ed9c9d6aa | ||
|
|
44919d4f3b | ||
|
|
c06b2cf640 | ||
|
|
103cb8328d | ||
|
|
3d0a3ee226 | ||
|
|
b8d64a113e | ||
|
|
a20bfeca21 | ||
|
|
95ca19ba89 | ||
|
|
44b577e978 | ||
|
|
5d8bad7458 | ||
|
|
4802277dca | ||
|
|
e41537271f | ||
|
|
95172aed8f | ||
|
|
88cf02a540 | ||
|
|
15987cac46 | ||
|
|
c7cf12287d | ||
|
|
94013fb2c6 | ||
|
|
ed30991e56 | ||
|
|
becb1dec85 | ||
|
|
4cef05cf97 | ||
|
|
0b3cc1260a | ||
|
|
7d798c5770 | ||
|
|
29a2dc83c0 | ||
|
|
f82d26eed1 | ||
|
|
959d75fb9d | ||
|
|
ba61e3c164 | ||
|
|
ad99fea494 | ||
|
|
c90355a2cf | ||
|
|
5b726d58b6 | ||
|
|
48ec98c614 | ||
|
|
46dc017e15 | ||
|
|
ad8c0b266d | ||
|
|
816b753efb | ||
|
|
aa4a575c5c | ||
|
|
505f2e149a | ||
|
|
8f7ff403ea | ||
|
|
7673795077 | ||
|
|
e55adbd65c | ||
|
|
0a10d4fb7d | ||
|
|
13f27eda9f | ||
|
|
e1ec87d3aa | ||
|
|
37d313c271 | ||
|
|
033feed6b1 | ||
|
|
0eecd0a669 | ||
|
|
8427802841 | ||
|
|
2a7901eb76 | ||
|
|
0edd4e320d | ||
|
|
2616ba6e4b | ||
|
|
355f2fcee5 | ||
|
|
7eeadee6c3 | ||
|
|
9e47182a7f | ||
|
|
eeb17003b1 | ||
|
|
c976b52dc7 | ||
|
|
3ef219c96b | ||
|
|
ec56e4c6b0 | ||
|
|
aec69bdffa | ||
|
|
02434b1f9c | ||
|
|
88bb7fbff4 | ||
|
|
63dc9dfb23 | ||
|
|
aaef499b7c | ||
|
|
ec1c051d85 | ||
|
|
91cb651256 | ||
|
|
23707b1b3a | ||
|
|
c3ab567590 | ||
|
|
3068dd6c96 | ||
|
|
2ba5b1170d | ||
|
|
04839a5b60 | ||
|
|
00c0492574 | ||
|
|
11a45b281f | ||
|
|
fe409481d6 | ||
|
|
92735062f7 | ||
|
|
72f0b821a7 | ||
|
|
2476e82c8e | ||
|
|
a37b0946f2 | ||
|
|
40a7dde059 | ||
|
|
c9927477bc | ||
|
|
47a37ccc7a | ||
|
|
bb5374a0eb | ||
|
|
ed1767ae93 | ||
|
|
4e9d299d33 | ||
|
|
e548d8f895 | ||
|
|
ca4db07d83 | ||
|
|
970de1f4b0 | ||
|
|
a22a1f7702 | ||
|
|
dde0365457 | ||
|
|
fef96359c9 | ||
|
|
43b1d8802d | ||
|
|
130a094f35 | ||
|
|
4ca098cc65 | ||
|
|
29a20f342e | ||
|
|
647ed04901 | ||
|
|
c52209ccdd | ||
|
|
dbdd25aeb2 | ||
|
|
5fb882955c | ||
|
|
52ba9468a4 | ||
|
|
fb134cba2f | ||
|
|
8725de504f | ||
|
|
dbba21f552 | ||
|
|
1c9a3115c9 | ||
|
|
30fe351531 | ||
|
|
c445a6a294 | ||
|
|
49780b01fe | ||
|
|
3078e9788f | ||
|
|
6583bfdabf | ||
|
|
44b99e7242 | ||
|
|
a5ceab58d3 | ||
|
|
cbb59c578d | ||
|
|
87c2639625 | ||
|
|
e01cd39be9 | ||
|
|
317a578a02 | ||
|
|
47b00bce3b | ||
|
|
d23b04cd84 | ||
|
|
c65c6f7e09 | ||
|
|
40cceb2176 | ||
|
|
d4f1381a26 | ||
|
|
4739ea42fa | ||
|
|
1772fc71df | ||
|
|
52c44e13a7 | ||
|
|
9283fe8797 | ||
|
|
af28cd2af8 | ||
|
|
38f35b7a10 | ||
|
|
b8547c4792 | ||
|
|
9785b16c34 | ||
|
|
3110b44c96 | ||
|
|
ad273794cb | ||
|
|
1a5b0508af | ||
|
|
01497772b6 | ||
|
|
4b926935bd | ||
|
|
12320d4198 | ||
|
|
73e796c0b6 | ||
|
|
92d3e7f1c3 | ||
|
|
d3330c8bdf | ||
|
|
616d36ad39 | ||
|
|
98642f676a | ||
|
|
f94d3a96d2 | ||
|
|
3a0ea19d39 | ||
|
|
445c212be9 | ||
|
|
7a70e0d36d | ||
|
|
fc300b74bf | ||
|
|
417e3d4b92 | ||
|
|
b060d70a48 | ||
|
|
d417f1d9f4 | ||
|
|
c018fd418c | ||
|
|
b1b57bd82b | ||
|
|
cb1aedb9ae | ||
|
|
c005b320d4 | ||
|
|
a9bd48965e | ||
|
|
80c1650f0e | ||
|
|
9f864291fa | ||
|
|
44af2d88a7 | ||
|
|
2020a2f047 | ||
|
|
806d759ea2 | ||
|
|
10c286e958 | ||
|
|
ae4459a766 | ||
|
|
b1da47561f | ||
|
|
ab0c06ec1f | ||
|
|
2ff3a3b587 | ||
|
|
0ee3641fc0 | ||
|
|
415b7c4c5c | ||
|
|
0c8639e3fb | ||
|
|
417d162cdb | ||
|
|
d4332d5705 | ||
|
|
2f8547869f | ||
|
|
ae2086f3c2 | ||
|
|
36a2f57b22 | ||
|
|
3fdbaef7b2 | ||
|
|
0e14f0f086 | ||
|
|
87f3019022 | ||
|
|
15543275c4 | ||
|
|
e8ee3722db | ||
|
|
723de21d71 | ||
|
|
befc90a4b3 | ||
|
|
08a6442068 | ||
|
|
7b5a9c10c6 | ||
|
|
d656e23472 | ||
|
|
e7034184d6 | ||
|
|
093ee16067 | ||
|
|
200f2c34be | ||
|
|
e7dfa00337 | ||
|
|
174762c6e6 | ||
|
|
ddf304fdf9 | ||
|
|
aed7680b7a | ||
|
|
f267dc2a56 | ||
|
|
32e31834d1 | ||
|
|
1e938c8e37 | ||
|
|
c54e167268 | ||
|
|
8c7563ef88 | ||
|
|
38de39e046 | ||
|
|
5e4e40af42 | ||
|
|
bc4916d948 | ||
|
|
cacf942adc | ||
|
|
22200a7529 | ||
|
|
0122a93c50 | ||
|
|
525374ed4e | ||
|
|
6d9ef9d24e | ||
|
|
35eddc2793 | ||
|
|
f6718e32e8 | ||
|
|
4a048576e9 | ||
|
|
5811089641 | ||
|
|
6965602246 | ||
|
|
a383ea9f46 | ||
|
|
5e3b2264c0 | ||
|
|
58c284a1ad | ||
|
|
702423005b | ||
|
|
1038da6c09 | ||
|
|
1c62c493b7 | ||
|
|
1677271597 | ||
|
|
5349004a7f | ||
|
|
7a6c699605 | ||
|
|
06ac929caa | ||
|
|
448f9da473 | ||
|
|
17135ffef8 | ||
|
|
17e8a023fd | ||
|
|
1934653005 | ||
|
|
4d2de3b131 | ||
|
|
9ce0c2ccd3 | ||
|
|
bac6e7108c | ||
|
|
b08e59cdd6 | ||
|
|
71751feb69 | ||
|
|
1305171219 | ||
|
|
a74c00f41c | ||
|
|
51449fc724 | ||
|
|
2fb8156718 | ||
|
|
f3c36e0b09 | ||
|
|
55705d761d | ||
|
|
b022741310 | ||
|
|
9da7a5704e | ||
|
|
a2e5a940bd | ||
|
|
7cc341ac91 | ||
|
|
5028b2e6e4 | ||
|
|
276003aedd | ||
|
|
dc26309489 | ||
|
|
6c332c1d83 | ||
|
|
87572be6f7 | ||
|
|
24e25c1d9b | ||
|
|
cf1dc0c37a | ||
|
|
c921e0fbc3 | ||
|
|
8664f21ad8 | ||
|
|
9a5bb2a0db | ||
|
|
a1b198bfbc | ||
|
|
c95930de89 | ||
|
|
5c0bf025af | ||
|
|
89fb866cde | ||
|
|
dbf07dd7a3 | ||
|
|
363f6f86ae | ||
|
|
a1c080aeb4 | ||
|
|
856a53a310 | ||
|
|
6aaa2bc2db | ||
|
|
d90c1e6fd8 | ||
|
|
22aa50fd02 | ||
|
|
43853417d5 | ||
|
|
1765463bd8 | ||
|
|
be719f8b99 | ||
|
|
c4226f3fcf | ||
|
|
380639496d | ||
|
|
0c27757154 | ||
|
|
635f92f0c1 | ||
|
|
809e621068 | ||
|
|
9069c61b97 | ||
|
|
c5b61aba64 | ||
|
|
9672bdd11d | ||
|
|
fc8ad51380 | ||
|
|
4b961b6fcb | ||
|
|
92dada533b | ||
|
|
c96cf2339c |
517 changed files with 124898 additions and 135243 deletions
3
.github/CODEOWNERS
vendored
3
.github/CODEOWNERS
vendored
|
|
@ -1,2 +1,3 @@
|
|||
* @krille-chan
|
||||
assets/l10n/*.arb @weblate
|
||||
pubspec.* @dependabot
|
||||
lib/l10n/*.arb @weblate
|
||||
22
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
22
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
|
|
@ -34,6 +34,28 @@ body:
|
|||
placeholder: "e.g. 1.12.0"
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: platform
|
||||
attributes:
|
||||
label: "Platform"
|
||||
description: "Select the platform where the bug occurs."
|
||||
options:
|
||||
- Android (PlayStore)
|
||||
- Android (F-Droid)
|
||||
- Android (Other)
|
||||
- iOS (iPhone)
|
||||
- iOS (iPad)
|
||||
- Web (Chrome(ium))
|
||||
- Web (Firefox)
|
||||
- Web (Safari)
|
||||
- Linux (Snap)
|
||||
- Linux (Flatpak)
|
||||
- Linux (Other)
|
||||
- macOS (iOS/iPadOS version)
|
||||
- macOS (Self-compiled)
|
||||
- Windows (Self-compiled)
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: platform-info
|
||||
attributes:
|
||||
|
|
|
|||
4
.github/ISSUE_TEMPLATE/config.yml
vendored
4
.github/ISSUE_TEMPLATE/config.yml
vendored
|
|
@ -1,5 +1,5 @@
|
|||
blank_issues_enabled: true
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: 👬 FluffyChat Community
|
||||
url: https://matrix.to/#/#fluffychat:matrix.org
|
||||
url: https://matrix.to/#/#fluffy-space:matrix.org
|
||||
about: Please ask and answer questions here.
|
||||
|
|
|
|||
27
.github/ISSUE_TEMPLATE/issue_pr_management.yml
vendored
Normal file
27
.github/ISSUE_TEMPLATE/issue_pr_management.yml
vendored
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
name: Close Inactive Issues And PRs
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 1 * * *"
|
||||
|
||||
jobs:
|
||||
close-issues:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
days-before-issue-stale: 365
|
||||
days-before-issue-close: 14
|
||||
stale-issue-label: "stale"
|
||||
stale-issue-message: "This issue is stale because it has been open for 365 days with no activity."
|
||||
close-issue-message: "This issue was closed because it has been inactive for 14 days since being marked as stale."
|
||||
stale-pr-message: "This pull request is stale because it has been open for 365 days with no activity."
|
||||
close-pr-message: "This pull request was closed because it has been inactive for 14 days since being marked as stale."
|
||||
days-before-pr-stale: 365
|
||||
days-before-pr-close: 14
|
||||
exempt-milestones: true
|
||||
exempt-assignees: krille-chan
|
||||
operations-per-run: 500
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
3
.github/ISSUE_TEMPLATE/test_report.md
vendored
3
.github/ISSUE_TEMPLATE/test_report.md
vendored
|
|
@ -39,3 +39,6 @@ labels: test
|
|||
10. Drag&Drop to send a file into a chat still works:
|
||||
- [ ] Web
|
||||
- [ ] Linux
|
||||
11. Deeplinks are still working? https://matrix.to/#/@krille:janian.de
|
||||
- [ ] Android
|
||||
- [ ] iOS
|
||||
50
.github/actions/free_up_space/action.yaml
vendored
Normal file
50
.github/actions/free_up_space/action.yaml
vendored
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
name: "Free up space"
|
||||
|
||||
inputs:
|
||||
target:
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Free up space
|
||||
shell: bash
|
||||
run: |
|
||||
sudo rm -rf /usr/share/dotnet
|
||||
sudo rm -rf /usr/local/share/boost
|
||||
sudo rm -rf /usr/local/share/chromium
|
||||
sudo rm -rf /usr/local/share/powershell
|
||||
sudo rm -rf /usr/local/share/vcpkg
|
||||
sudo rm -rf /usr/local/share/miniconda
|
||||
sudo rm -rf /opt/ghc
|
||||
sudo rm -rf /opt/hostedtoolcache/CodeQL
|
||||
sudo rm -rf /opt/hostedtoolcache/go
|
||||
sudo rm -rf /opt/hostedtoolcache/Python
|
||||
sudo rm -rf /opt/hostedtoolcache/node
|
||||
sudo rm -rf /opt/hostedtoolcache/R
|
||||
sudo rm -rf /opt/hostedtoolcache/Java
|
||||
sudo rm -rf /opt/hostedtoolcache/LLVM
|
||||
sudo rm -rf /opt/hostedtoolcache/Swift
|
||||
sudo rm -rf /opt/hostedtoolcache/Php
|
||||
sudo rm -rf /opt/hostedtoolcache/Perl
|
||||
sudo rm -rf /opt/hostedtoolcache/Scala
|
||||
sudo rm -rf /opt/hostedtoolcache/Julia
|
||||
sudo rm -rf /opt/hostedtoolcache/Mono
|
||||
sudo rm -rf /opt/hostedtoolcache/PowerShell
|
||||
sudo rm -rf /opt/hostedtoolcache/Crystal
|
||||
sudo rm -rf /opt/hostedtoolcache/Elixir
|
||||
sudo rm -rf /opt/hostedtoolcache/Erlang
|
||||
sudo rm -rf /opt/hostedtoolcache/FSharp
|
||||
sudo rm -rf /opt/hostedtoolcache/Haskell
|
||||
sudo rm -rf /opt/hostedtoolcache/OCaml
|
||||
sudo rm -rf /opt/hostedtoolcache/Sbt
|
||||
sudo rm -rf /opt/hostedtoolcache/Solidity
|
||||
sudo rm -rf /opt/hostedtoolcache/VisualStudio
|
||||
sudo rm -rf /opt/hostedtoolcache/WinAppDriver
|
||||
sudo rm -rf /opt/hostedtoolcache/Xamarin
|
||||
sudo rm -rf /opt/hostedtoolcache/Yarn
|
||||
sudo rm -rf /opt/hostedtoolcache/Zephyr
|
||||
sudo rm -rf /opt/hostedtoolcache/zig
|
||||
sudo rm -rf /opt/hostedtoolcache/zulu
|
||||
sudo rm -rf /opt/hostedtoolcache/azcopy
|
||||
echo "export CARGO_BUILD_JOBS=1" >> $GITHUB_ENV
|
||||
3
.github/dependabot.yml
vendored
3
.github/dependabot.yml
vendored
|
|
@ -9,6 +9,9 @@ updates:
|
|||
commit-message:
|
||||
prefix: "build: "
|
||||
include: "scope"
|
||||
assignees:
|
||||
- "krille-chan"
|
||||
open-pull-requests-limit: 5
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
|
|
|
|||
9
.github/pull_request_template.md
vendored
9
.github/pull_request_template.md
vendored
|
|
@ -1,13 +1,6 @@
|
|||
*Thank you so much for your contribution to FluffyChat ❤️❤️❤️*
|
||||
|
||||
Please make sure that your Pull Request meet the following **acceptance criteria**:
|
||||
|
||||
- [ ] Code formatting and import sorting has been done with `dart format lib/ test/` and `dart run import_sorter:main --no-comments`
|
||||
- [ ] The commit message uses the format of [Conventional Commits](https://www.conventionalcommits.org)
|
||||
- [ ] The commit message describes what has been changed, why it has been changed and how it has been changed
|
||||
- [ ] Every new feature or change of the design/GUI is linked to an approved design proposal in an issue
|
||||
- [ ] Every new feature in the app or the build system has a strategy how this will be tested and maintained from now on for every release, e.g. a volunteer who takes over maintainership
|
||||
|
||||
- [ ] I have read and understood the [contributing guidelines](https://github.com/krille-chan/fluffychat/blob/main/CONTRIBUTING.md).
|
||||
|
||||
### Pull Request has been tested on:
|
||||
|
||||
|
|
|
|||
214
.github/workflows/integrate.yaml
vendored
214
.github/workflows/integrate.yaml
vendored
|
|
@ -8,16 +8,19 @@ jobs:
|
|||
code_tests:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
- uses: webiny/action-conventional-commits@v1.3.1
|
||||
- run: ./scripts/generate-locale-config.sh
|
||||
- run: git diff --exit-code
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
flutter-version-file: .tool_versions.yaml
|
||||
cache: true
|
||||
- name: Check for unused translations
|
||||
run: flutter pub run translations_cleaner list-unused-terms -a
|
||||
- run: flutter pub get
|
||||
- run: flutter gen-l10n
|
||||
- name: Check if pubspec.lock is up to date
|
||||
run: git diff --exit-code pubspec.lock
|
||||
- name: Check formatting
|
||||
run: dart format lib/ test/ --set-exit-if-changed
|
||||
- name: Check import formatting
|
||||
|
|
@ -25,71 +28,222 @@ jobs:
|
|||
- name: Check license compliance
|
||||
run: dart run license_checker check-licenses -c licenses.yaml --problematic
|
||||
- run: flutter analyze
|
||||
- name: Apply google services patch
|
||||
run: git apply ./scripts/enable-android-google-services.patch
|
||||
- name: Search unused dependencies
|
||||
run: |
|
||||
dart pub global activate dependency_validator
|
||||
dart pub global run dependency_validator
|
||||
- run: dart run dart_code_linter:metrics analyze lib --reporter=github
|
||||
- run: dart run dart_code_linter:metrics check-unused-code lib
|
||||
- run: dart run dart_code_linter:metrics check-unused-files lib
|
||||
- run: dart run dart_code_linter:metrics check-unused-l10n lib
|
||||
- name: Check for commented-out Dart code with semicolons
|
||||
run: |
|
||||
if grep -R --include="*.dart" -nE '^[[:space:]]*//[^/<].*;[[:space:]]*$' lib/; then
|
||||
echo ""
|
||||
echo "❌ Found commented-out Dart code ending with semicolon."
|
||||
exit 1
|
||||
fi
|
||||
- name: Add Firebase Messaging
|
||||
run: ./scripts/add-firebase-messaging.sh
|
||||
- run: flutter analyze
|
||||
- run: flutter test
|
||||
|
||||
build_debug_apk:
|
||||
needs: [ code_tests ]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: ${{ env.JAVA_VERSION }}
|
||||
distribution: "zulu"
|
||||
- uses: actions/checkout@v6
|
||||
- uses: ./.github/actions/free_up_space
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
flutter-version-file: .tool_versions.yaml
|
||||
cache: true
|
||||
- run: flutter pub get
|
||||
- run: flutter build apk --debug
|
||||
- uses: moonrepo/setup-rust@v1
|
||||
with:
|
||||
cache: true
|
||||
- name: Cache Gradle
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: |
|
||||
~/.gradle/caches
|
||||
~/.gradle/wrapper
|
||||
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||
restore-keys: gradle-${{ runner.os }}-
|
||||
- run: ./scripts/add-firebase-messaging.sh
|
||||
- run: flutter build apk --debug --target-platform android-x64
|
||||
- name: Upload Debug APK
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: debug-apk-x64
|
||||
path: build/app/outputs/flutter-apk/app-debug.apk
|
||||
|
||||
build_debug_web:
|
||||
needs: [ code_tests ]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: actions/checkout@v6
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
flutter-version-file: .tool_versions.yaml
|
||||
cache: true
|
||||
- uses: moonrepo/setup-rust@v1
|
||||
- run: rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
|
||||
- run: flutter pub get
|
||||
- name: Prepare web
|
||||
run: ./scripts/prepare-web.sh
|
||||
- run: flutter build web
|
||||
- run: flutter build web --dart-define=WITH_SEMANTICS=true
|
||||
- name: Upload Web Build
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: Web Build
|
||||
path: build/web
|
||||
|
||||
build_debug_linux:
|
||||
needs: [ code_tests ]
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [ x64, arm64 ]
|
||||
runs-on: ${{ matrix.arch == 'arm64' && 'self-hosted' || 'ubuntu-latest'}}
|
||||
runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest'}}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: actions/checkout@v6
|
||||
- name: Install dependencies
|
||||
run: sudo apt-get update && sudo apt-get install git wget curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libssl-dev libwebkit2gtk-4.1-dev -y
|
||||
run: sudo apt-get update && sudo apt-get install git wget curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libwebkit2gtk-4.1-dev -y
|
||||
- run: echo "FLUTTER_VERSION=$(yq '.environment.flutter' < .tool_versions.yaml)" >> $GITHUB_ENV
|
||||
- name: Install Flutter
|
||||
run: |
|
||||
git clone --branch ${{ env.FLUTTER_VERSION }} https://github.com/flutter/flutter.git
|
||||
./flutter/bin/flutter doctor
|
||||
- uses: moonrepo/setup-rust@v1
|
||||
- run: ./flutter/bin/flutter pub get
|
||||
- run: ./flutter/bin/flutter build linux --target-platform linux-${{ matrix.arch }}
|
||||
|
||||
build_debug_ios:
|
||||
needs: [ code_tests ]
|
||||
runs-on: macos-15
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: actions/checkout@v6
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
flutter-version-file: .tool_versions.yaml
|
||||
cache: true
|
||||
- name: Setup Xcode version
|
||||
uses: maxim-lobanov/setup-xcode@v1.6.0
|
||||
with:
|
||||
xcode-version: latest
|
||||
- name: Use Xcode 16.4
|
||||
run: sudo xcode-select --switch /Applications/Xcode_16.4.app
|
||||
- run: brew install sqlcipher
|
||||
- uses: moonrepo/setup-rust@v1
|
||||
- name: Add Firebase Messaging
|
||||
run: |
|
||||
flutter pub add fcm_shared_isolate:0.1.0
|
||||
sed -i '' 's,//<GOOGLE_SERVICES>,,g' lib/utils/background_push.dart
|
||||
- run: flutter pub get
|
||||
- run: flutter build ios --no-codesign
|
||||
|
||||
integration_test:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 60
|
||||
needs: [ build_debug_apk ]
|
||||
strategy:
|
||||
matrix:
|
||||
api-level: [34]
|
||||
env:
|
||||
ANDROID_USER_HOME: /home/runner/.android
|
||||
ANDROID_EMULATOR_HOME: /home/runner/.android
|
||||
ANDROID_AVD_HOME: /home/runner/.android/avd
|
||||
AVD_CONFIG_PATH: "~/.android/avd/test.avd/config.ini"
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: debug-apk-x64
|
||||
path: .
|
||||
- uses: ./.github/actions/free_up_space
|
||||
# https://github.blog/changelog/2023-02-23-hardware-accelerated-android-virtualization-on-actions-windows-and-linux-larger-hosted-runners/
|
||||
- name: Enable KVM group perms
|
||||
run: |
|
||||
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
|
||||
sudo udevadm control --reload-rules
|
||||
sudo udevadm trigger --name-match=kvm
|
||||
- name: AVD cache
|
||||
uses: actions/cache@v5
|
||||
id: avd-cache
|
||||
with:
|
||||
path: ~/.android/*
|
||||
key: avd-${{ matrix.api-level }}-integration_docker
|
||||
- name: create AVD and generate snapshot for caching
|
||||
if: steps.avd-cache.outputs.cache-hit != 'true'
|
||||
uses: reactivecircus/android-emulator-runner@d94c3fbe4fe6a29e4a5ba47c12fb47677c73656b
|
||||
with:
|
||||
api-level: ${{ matrix.api-level }}
|
||||
target: google_apis
|
||||
arch: x86_64
|
||||
cores: 16
|
||||
ndk: 28.2.13676358
|
||||
force-avd-creation: false
|
||||
disk-size: 4096M
|
||||
ram-size: 4096M
|
||||
sdcard-path-or-size: 4096M
|
||||
emulator-options: -no-window -wipe-data -accel on -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
|
||||
script: |
|
||||
cat ${{ env.AVD_CONFIG_PATH }}
|
||||
|
||||
sed -i.bak 's/hw.lcd.density = .*/hw.lcd.density=420/' ${{ env.AVD_CONFIG_PATH }}
|
||||
sed -i.bak 's/hw.lcd.height = .*/hw.lcd.height=1920/' ${{ env.AVD_CONFIG_PATH }}
|
||||
sed -i.bak 's/hw.lcd.width = .*/hw.lcd.width=1080/' ${{ env.AVD_CONFIG_PATH }}
|
||||
|
||||
if ! grep -q "hw.lcd.density" ${{ env.AVD_CONFIG_PATH }} && echo "hw.lcd.density = 420" >> ${{ env.AVD_CONFIG_PATH }}; then :; fi
|
||||
if ! grep -q "hw.lcd.height" ${{ env.AVD_CONFIG_PATH }} && echo "hw.lcd.height = 1920" >> ${{ env.AVD_CONFIG_PATH }}; then :; fi
|
||||
if ! grep -q "hw.lcd.width" ${{ env.AVD_CONFIG_PATH }} && echo "hw.lcd.width = 1080" >> ${{ env.AVD_CONFIG_PATH }}; then :; fi
|
||||
|
||||
echo "Emulator settings (${{ env.AVD_CONFIG_PATH }})"
|
||||
cat ${{ env.AVD_CONFIG_PATH }}
|
||||
echo "Generated AVD snapshot for caching."
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version-file: .tool_versions.yaml
|
||||
cache: true
|
||||
- uses: remarkablemark/setup-maestro-cli@v1
|
||||
- name: Load integration test env
|
||||
run: cat integration_test/data/integration_users.env >> $GITHUB_ENV
|
||||
- name: Prepare Homeserver
|
||||
run: |
|
||||
docker run -d --name synapse --tmpfs /data \
|
||||
--volume="$(pwd)/integration_test/synapse/data/homeserver.yaml":/data/homeserver.yaml:rw \
|
||||
--volume="$(pwd)/integration_test/synapse/data/localhost.log.config":/data/localhost.log.config:rw \
|
||||
-p 80:80 matrixdotorg/synapse:latest
|
||||
while ! curl -XGET "http://$HOMESERVER/_matrix/client/v3/login" >/dev/null 2>/dev/null; do
|
||||
echo "Waiting for homeserver to be available... (GET http://$HOMESERVER/_matrix/client/v3/login)"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
echo "Homeserver is online!"
|
||||
|
||||
# create users
|
||||
curl -fS --retry 3 -XPOST -d "{\"username\":\"$USER1_NAME\", \"password\":\"$USER1_PW\", \"inhibit_login\":true, \"auth\": {\"type\":\"m.login.dummy\"}}" "http://$HOMESERVER/_matrix/client/r0/register"
|
||||
curl -fS --retry 3 -XPOST -d "{\"username\":\"$USER2_NAME\", \"password\":\"$USER2_PW\", \"inhibit_login\":true, \"auth\": {\"type\":\"m.login.dummy\"}}" "http://$HOMESERVER/_matrix/client/r0/register"
|
||||
|
||||
- name: Integration tests
|
||||
id: integration_tests
|
||||
uses: reactivecircus/android-emulator-runner@v2
|
||||
with:
|
||||
api-level: ${{ matrix.api-level }}
|
||||
target: google_apis
|
||||
arch: x86_64
|
||||
cores: 16
|
||||
ndk: 28.2.13676358
|
||||
force-avd-creation: false
|
||||
disk-size: 4096M
|
||||
ram-size: 4096M
|
||||
sdcard-path-or-size: 4096M
|
||||
emulator-options: -no-snapshot-save -no-window -wipe-data -accel on -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
|
||||
script: |
|
||||
flutter run --use-application-binary=$PWD/app-debug.apk > flutter_logs.txt 2>&1 &
|
||||
FLUTTER_PID=$!
|
||||
maestro test integration_test/login.yaml --env HOMESERVER=10.0.2.2 --env USER1_NAME=${USER1_NAME} --env USER1_PW=${USER1_PW}
|
||||
kill $FLUTTER_PID 2>/dev/null || true
|
||||
cp flutter_logs.txt ~/.maestro/tests/
|
||||
- name: Upload Flutter and Maestro logs
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: maestro-logs
|
||||
path: ~/.maestro/tests
|
||||
if-no-files-found: ignore
|
||||
32
.github/workflows/main_deploy.yaml
vendored
32
.github/workflows/main_deploy.yaml
vendored
|
|
@ -14,14 +14,16 @@ jobs:
|
|||
deploy_web:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: actions/checkout@v6
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
- run: flutter pub get
|
||||
flutter-version-file: .tool_versions.yaml
|
||||
- uses: moonrepo/setup-rust@v1
|
||||
- run: rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
|
||||
- name: Prepare web
|
||||
run: ./scripts/prepare-web.sh
|
||||
- run: rm ./assets/vodozemac/.gitignore
|
||||
- run: flutter pub get
|
||||
- name: Build Release Web
|
||||
run: flutter build web --dart-define=FLUTTER_WEB_CANVASKIT_URL=canvaskit/ --release --source-maps --base-href "/nightly/"
|
||||
- run: mv build/web/ public
|
||||
|
|
@ -36,24 +38,23 @@ jobs:
|
|||
deploy_playstore_internal:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: ${{ env.JAVA_VERSION }}
|
||||
distribution: 'zulu'
|
||||
- uses: actions/checkout@v6
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
flutter-version-file: .tool_versions.yaml
|
||||
cache: true
|
||||
- name: Set up Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '3.3'
|
||||
- uses: ./.github/actions/free_up_space
|
||||
- uses: moonrepo/setup-rust@v1
|
||||
- name: Install Fastlane
|
||||
run: gem install fastlane -NV
|
||||
- name: Apply Google Services Patch
|
||||
run: git apply ./scripts/enable-android-google-services.patch
|
||||
- name: Add Firebase Messaging
|
||||
run: |
|
||||
echo '${{secrets.GOOGLE_SERVICES_JSON}}' | base64 -d > android/app/google-services.json
|
||||
./scripts/add-firebase-messaging.sh
|
||||
- run: flutter pub get
|
||||
- name: Prepare Android Release Build
|
||||
env:
|
||||
|
|
@ -62,7 +63,10 @@ jobs:
|
|||
PLAYSTORE_DEPLOY_KEY: ${{ secrets.PLAYSTORE_DEPLOY_KEY }}
|
||||
run: ./scripts/prepare-android-release.sh
|
||||
- name: Build Android Release
|
||||
run: flutter build appbundle --target-platform android-arm,android-arm64,android-x64
|
||||
run: flutter build appbundle --target-platform android-arm,android-arm64
|
||||
- name: Set changelog
|
||||
working-directory: android/fastlane/metadata/android/en-US/changelogs
|
||||
run: git log --no-merges -1 --pretty=%B > default.txt
|
||||
- name: Deploy Android Release
|
||||
run: |
|
||||
mkdir -p build/android
|
||||
|
|
|
|||
26
.github/workflows/matrix_notification.yaml
vendored
26
.github/workflows/matrix_notification.yaml
vendored
|
|
@ -1,26 +0,0 @@
|
|||
name: Matrix Notification
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [ opened ]
|
||||
issue_comment:
|
||||
types: [ created ]
|
||||
|
||||
jobs:
|
||||
notify:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Send Matrix Notification
|
||||
env:
|
||||
MATRIX_URL: https://matrix.janian.de/_matrix/client/v3/rooms/${{ secrets.MATRIX_MANAGEMENT_ROOM }}/send/m.room.message
|
||||
run: |
|
||||
if [ "${{ github.event.action }}" == "opened" ]; then
|
||||
PAYLOAD="{\"msgtype\": \"m.notice\", \"body\": \"New Issue from ${{ github.event.issue.user.login }}\\n${{ github.event.issue.title }}\\n\\n${{ github.event.issue.body }}\\n\\nURL: ${{ github.event.issue.html_url }}\"}"
|
||||
elif [ "${{ github.event.action }}" == "created" ]; then
|
||||
PAYLOAD="{\"msgtype\": \"m.notice\", \"body\": \"New Comment from ${{ github.event.comment.user.login }}\\n\\n${{ github.event.comment.body }}\\n\\nURL: ${{ github.event.comment.html_url }}\"}"
|
||||
fi
|
||||
curl -X POST -H "Authorization: Bearer ${{ secrets.MATRIX_BOT_TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$PAYLOAD" \
|
||||
$MATRIX_URL
|
||||
60
.github/workflows/matrix_notify.yaml
vendored
Normal file
60
.github/workflows/matrix_notify.yaml
vendored
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
name: Matrix Notification
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
pull_request_target:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
notify:
|
||||
if: ${{ (github.event_name == 'issues' && github.event.issue.user.login != 'krille-chan') || (github.event_name == 'pull_request_target' && github.event.pull_request.user.login != 'krille-chan') }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Send notification to Matrix room
|
||||
env:
|
||||
HOMESERVER: ${{ secrets.MATRIX_HOMESERVER }}
|
||||
ACCESS_TOKEN: ${{ secrets.MATRIX_ACCESS_TOKEN }}
|
||||
ROOM_ID: ${{ secrets.MATRIX_ROOM_ID }}
|
||||
EVENT_NAME: ${{ github.event_name }}
|
||||
ISSUE_TITLE: ${{ github.event.issue.title }}
|
||||
ISSUE_URL: ${{ github.event.issue.html_url }}
|
||||
ISSUE_LABELS: ${{ join(github.event.issue.labels.*.name, ', ') }}
|
||||
ISSUE_AUTHOR: ${{ github.event.issue.user.login }}
|
||||
PR_TITLE: ${{ github.event.pull_request.title }}
|
||||
PR_URL: ${{ github.event.pull_request.html_url }}
|
||||
PR_LABELS: ${{ join(github.event.pull_request.labels.*.name, ', ') }}
|
||||
PR_AUTHOR: ${{ github.event.pull_request.user.login }}
|
||||
run: |
|
||||
if [ "${EVENT_NAME}" = "issues" ]; then
|
||||
EMOJI="📝"
|
||||
PREFIX="New Issue"
|
||||
TITLE="${ISSUE_TITLE}"
|
||||
URL="${ISSUE_URL}"
|
||||
LABELS="${ISSUE_LABELS}"
|
||||
AUTHOR="${ISSUE_AUTHOR}"
|
||||
else
|
||||
EMOJI="🔀"
|
||||
PREFIX="New Pull Request"
|
||||
TITLE="${PR_TITLE}"
|
||||
URL="${PR_URL}"
|
||||
LABELS="${PR_LABELS}"
|
||||
AUTHOR="${PR_AUTHOR}"
|
||||
fi
|
||||
|
||||
AUTHOR_URL="https://github.com/${AUTHOR}"
|
||||
PLAIN="${EMOJI} ${PREFIX} by ${AUTHOR}: ${TITLE} - ${URL}"
|
||||
HTML="<h3>${EMOJI} ${PREFIX}</h3>"
|
||||
HTML="${HTML}<b><a href='${URL}'>${TITLE}</a></b><br/>"
|
||||
HTML="${HTML}👤 <a href='${AUTHOR_URL}'>${AUTHOR}</a>"
|
||||
if [ -n "${LABELS}" ]; then
|
||||
HTML="${HTML}<br/>🏷️ ${LABELS}"
|
||||
fi
|
||||
TXN_ID=$(date +%s%N)
|
||||
|
||||
curl -s -o /dev/null -w "%{http_code}" -X PUT \
|
||||
"${HOMESERVER}/_matrix/client/v3/rooms/${ROOM_ID}/send/m.room.message/${TXN_ID}" \
|
||||
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$(jq -n --arg body "$PLAIN" --arg html "$HTML" \
|
||||
'{"msgtype":"m.notice","body":$body,"format":"org.matrix.custom.html","formatted_body":$html}')"
|
||||
116
.github/workflows/release.yaml
vendored
116
.github/workflows/release.yaml
vendored
|
|
@ -17,23 +17,23 @@ jobs:
|
|||
build_web:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: actions/checkout@v6
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
flutter-version-file: .tool_versions.yaml
|
||||
cache: true
|
||||
- name: Install dependencies
|
||||
run: sudo apt-get update && sudo apt-get install nodejs -y
|
||||
- uses: moonrepo/setup-rust@v1
|
||||
- run: rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
|
||||
- run: flutter pub get
|
||||
- name: Prepare web
|
||||
run: ./scripts/prepare-web.sh
|
||||
- run: rm ./assets/vodozemac/.gitignore
|
||||
- name: Build Release Web
|
||||
run: flutter build web --dart-define=FLUTTER_WEB_CANVASKIT_URL=canvaskit/ --release --source-maps --base-href "/web/"
|
||||
run: flutter build web --dart-define=FLUTTER_WEB_CANVASKIT_URL=canvaskit/ --release --source-maps
|
||||
- name: Create archive
|
||||
run: tar -czf fluffychat-web.tar.gz build/web/
|
||||
- name: Upload Web Build
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: Web Build
|
||||
path: fluffychat-web.tar.gz
|
||||
|
|
@ -46,17 +46,25 @@ jobs:
|
|||
asset_path: fluffychat-web.tar.gz
|
||||
asset_name: fluffychat-web.tar.gz
|
||||
asset_content_type: application/gzip
|
||||
- name: Install and build tailwindcss
|
||||
working-directory: docs
|
||||
- name: Clone fluffychat website
|
||||
run: |
|
||||
git clone https://github.com/krille-chan/fluffychat-website.git
|
||||
cp CHANGELOG.md fluffychat-website/
|
||||
cp PRIVACY.md fluffychat-website/
|
||||
- name: Build website
|
||||
working-directory: fluffychat-website
|
||||
run: |
|
||||
npm install tailwindcss @tailwindcss/cli
|
||||
npx tailwindcss -o ./tailwind.css
|
||||
- name: Build Website
|
||||
npx tailwindcss -i ./src/styles.css -o ./src/assets/tailwind.css --minify
|
||||
npx @11ty/eleventy
|
||||
mv public ../
|
||||
- name: Copy FluffyChat web into it
|
||||
run: |
|
||||
mv docs public
|
||||
mv repo public || true
|
||||
mv build/web/ public/web
|
||||
cp public/web -r public/nightly
|
||||
mkdir public/web
|
||||
mkdir public/nightly
|
||||
cp -r build/web/* public/web/
|
||||
cp -r build/web/* public/nightly/
|
||||
echo "fluffychat.im" >> public/CNAME
|
||||
- name: Deploy to GitHub Pages
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
uses: peaceiris/actions-gh-pages@v4
|
||||
|
|
@ -69,18 +77,17 @@ jobs:
|
|||
build_apk:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: ${{ env.JAVA_VERSION }}
|
||||
distribution: 'zulu'
|
||||
- uses: actions/checkout@v6
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
flutter-version-file: .tool_versions.yaml
|
||||
cache: true
|
||||
- name: Apply Google Services Patch
|
||||
run: git apply ./scripts/enable-android-google-services.patch
|
||||
- name: Add Firebase Messaging
|
||||
run: |
|
||||
echo '${{secrets.GOOGLE_SERVICES_JSON}}' | base64 -d > android/app/google-services.json
|
||||
./scripts/add-firebase-messaging.sh
|
||||
- uses: ./.github/actions/free_up_space
|
||||
- uses: moonrepo/setup-rust@v1
|
||||
- run: flutter pub get
|
||||
- name: Prepare Android Release Build
|
||||
env:
|
||||
|
|
@ -88,7 +95,7 @@ jobs:
|
|||
FDROID_KEY_PASS: ${{ secrets.FDROID_KEY_PASS }}
|
||||
PLAYSTORE_DEPLOY_KEY: ${{ secrets.PLAYSTORE_DEPLOY_KEY }}
|
||||
run: ./scripts/prepare-android-release.sh
|
||||
- run: flutter build apk --release
|
||||
- run: flutter build apk --release --target-platform android-arm,android-arm64
|
||||
- name: Upload to release
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
|
|
@ -103,16 +110,17 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
arch: [ x64, arm64 ]
|
||||
runs-on: ${{ matrix.arch == 'arm64' && 'self-hosted' || 'ubuntu-latest'}}
|
||||
runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest'}}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: actions/checkout@v6
|
||||
- name: Install dependencies
|
||||
run: sudo apt-get update && sudo apt-get install curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libssl-dev libwebkit2gtk-4.1-dev -y
|
||||
run: sudo apt-get update && sudo apt-get install curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libwebkit2gtk-4.1-dev -y
|
||||
- run: echo "FLUTTER_VERSION=$(yq '.environment.flutter' < .tool_versions.yaml)" >> $GITHUB_ENV
|
||||
- name: Install Flutter
|
||||
run: |
|
||||
git clone --branch ${{ env.FLUTTER_VERSION }} https://github.com/flutter/flutter.git
|
||||
./flutter/bin/flutter doctor
|
||||
- uses: moonrepo/setup-rust@v1
|
||||
- run: ./flutter/bin/flutter pub get
|
||||
- run: ./flutter/bin/flutter build linux --target-platform linux-${{ matrix.arch }}
|
||||
- name: Create archive
|
||||
|
|
@ -130,24 +138,24 @@ jobs:
|
|||
deploy_playstore:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
|
||||
- uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: ${{ env.JAVA_VERSION }}
|
||||
distribution: 'zulu'
|
||||
- uses: actions/checkout@v6
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
flutter-version-file: .tool_versions.yaml
|
||||
cache: true
|
||||
- name: Set up Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '3.3'
|
||||
- uses: ./.github/actions/free_up_space
|
||||
- uses: moonrepo/setup-rust@v1
|
||||
- name: Install Fastlane
|
||||
working-directory: android
|
||||
run: gem install fastlane -NV
|
||||
- name: Apply Google Services Patch
|
||||
run: git apply ./scripts/enable-android-google-services.patch
|
||||
- name: Add Firebase Messaging
|
||||
run: |
|
||||
echo '${{secrets.GOOGLE_SERVICES_JSON}}' | base64 -d > android/app/google-services.json
|
||||
./scripts/add-firebase-messaging.sh
|
||||
- run: flutter pub get
|
||||
- name: Prepare Android Release Build
|
||||
env:
|
||||
|
|
@ -156,7 +164,7 @@ jobs:
|
|||
PLAYSTORE_DEPLOY_KEY: ${{ secrets.PLAYSTORE_DEPLOY_KEY }}
|
||||
run: ./scripts/prepare-android-release.sh
|
||||
- name: Build Android Release
|
||||
run: flutter build appbundle --target-platform android-arm,android-arm64,android-x64
|
||||
run: flutter build appbundle --target-platform android-arm,android-arm64
|
||||
- name: Get Tag Name
|
||||
id: tag_name
|
||||
run: echo "::set-output name=tag::$(echo ${GITHUB_REF#refs/tags/})"
|
||||
|
|
@ -175,28 +183,6 @@ jobs:
|
|||
fi
|
||||
cd ..
|
||||
|
||||
promote_snapcraft:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_TOKEN }}
|
||||
steps:
|
||||
- name: Check out Git repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Snapcraft
|
||||
uses: samuelmeuli/action-snapcraft@v3
|
||||
- name: Get Tag Name
|
||||
id: tag_name
|
||||
run: echo "::set-output name=tag::$(echo ${GITHUB_REF#refs/tags/})"
|
||||
- name: Promote Snap
|
||||
env: # Workaround for https://github.com/snapcore/snapcraft/issues/4439
|
||||
SNAPCRAFT_HAS_TTY: "true"
|
||||
run: |
|
||||
if [[ $GITHUB_REF_NAME == rc* ]]; then
|
||||
yes | snapcraft promote fluffychat --from-channel edge --to-channel candidate
|
||||
else
|
||||
yes | snapcraft promote fluffychat --from-channel edge --to-channel stable
|
||||
fi
|
||||
|
||||
deploy_docker:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
|
|
@ -204,20 +190,20 @@ jobs:
|
|||
packages: write
|
||||
steps:
|
||||
- name: Check out Git repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
- name: Log in to the Container registry
|
||||
uses: docker/login-action@v3
|
||||
uses: docker/login-action@v4
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Extract metadata (tags, labels) for Docker
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
uses: docker/metadata-action@v6
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v6
|
||||
uses: docker/build-push-action@v7
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
|
|
|
|||
21
.github/workflows/stale.yaml
vendored
Normal file
21
.github/workflows/stale.yaml
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
name: 'Close stale issues and PRs'
|
||||
on:
|
||||
schedule:
|
||||
- cron: '30 1 * * *'
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v10
|
||||
with:
|
||||
stale-issue-message: 'This issue is stale because it has been open 365 days with no activity. Remove stale label or comment or this will be closed in 30 days.'
|
||||
stale-pr-message: 'This PR is stale because it has been open 365 days with no activity. Remove stale label or comment or this will be closed in 30 days.'
|
||||
close-issue-message: 'This issue was closed because it has been stalled for 30 days with no activity.'
|
||||
close-pr-message: 'This PR was closed because it has been stalled for 30 days with no activity.'
|
||||
days-before-issue-stale: 365
|
||||
days-before-pr-stale: 365
|
||||
days-before-issue-close: 30
|
||||
days-before-pr-close: 30
|
||||
exempt-all-assignees: true
|
||||
operations-per-run: 1000
|
||||
2
.github/workflows/versions.env
vendored
2
.github/workflows/versions.env
vendored
|
|
@ -1,2 +0,0 @@
|
|||
FLUTTER_VERSION=3.29.3
|
||||
JAVA_VERSION=17
|
||||
318
.gitignore
vendored
318
.gitignore
vendored
|
|
@ -13,7 +13,8 @@
|
|||
prime
|
||||
|
||||
# libolm package
|
||||
/assets/js/package
|
||||
web/Imaging.js
|
||||
web/Imaging.wasm
|
||||
|
||||
# IntelliJ related
|
||||
*.iml
|
||||
|
|
@ -49,10 +50,11 @@ docs/tailwind.css
|
|||
android/key.jks
|
||||
android/keys.json
|
||||
android/Gemfile.lock
|
||||
lib/l10n_old
|
||||
lib/l10n/*.dart
|
||||
ios/Flutter/.last_build_id
|
||||
ios/Podfile.lock
|
||||
ios/Runner.ipa
|
||||
ios/Runner/GoogleServices-Info.plist
|
||||
|
||||
/windows/out
|
||||
/winuwp/out
|
||||
|
|
@ -60,305 +62,13 @@ ios/Runner.ipa
|
|||
/macos/out
|
||||
.vs
|
||||
olm
|
||||
docs/node_modules/.package-lock.json
|
||||
docs/node_modules/.bin/detect-libc
|
||||
docs/node_modules/.bin/jiti
|
||||
docs/node_modules/.bin/tailwindcss
|
||||
docs/node_modules/@parcel/watcher/binding.gyp
|
||||
docs/node_modules/@parcel/watcher/index.d.ts
|
||||
docs/node_modules/@parcel/watcher/index.js
|
||||
docs/node_modules/@parcel/watcher/index.js.flow
|
||||
docs/node_modules/@parcel/watcher/LICENSE
|
||||
docs/node_modules/@parcel/watcher/package.json
|
||||
docs/node_modules/@parcel/watcher/README.md
|
||||
docs/node_modules/@parcel/watcher/wrapper.js
|
||||
docs/node_modules/@parcel/watcher/scripts/build-from-source.js
|
||||
docs/node_modules/@parcel/watcher/src/Backend.cc
|
||||
docs/node_modules/@parcel/watcher/src/Backend.hh
|
||||
docs/node_modules/@parcel/watcher/src/binding.cc
|
||||
docs/node_modules/@parcel/watcher/src/Debounce.cc
|
||||
docs/node_modules/@parcel/watcher/src/Debounce.hh
|
||||
docs/node_modules/@parcel/watcher/src/DirTree.cc
|
||||
docs/node_modules/@parcel/watcher/src/DirTree.hh
|
||||
docs/node_modules/@parcel/watcher/src/Event.hh
|
||||
docs/node_modules/@parcel/watcher/src/Glob.cc
|
||||
docs/node_modules/@parcel/watcher/src/Glob.hh
|
||||
docs/node_modules/@parcel/watcher/src/PromiseRunner.hh
|
||||
docs/node_modules/@parcel/watcher/src/Signal.hh
|
||||
docs/node_modules/@parcel/watcher/src/Watcher.cc
|
||||
docs/node_modules/@parcel/watcher/src/Watcher.hh
|
||||
docs/node_modules/@parcel/watcher/src/kqueue/KqueueBackend.cc
|
||||
docs/node_modules/@parcel/watcher/src/kqueue/KqueueBackend.hh
|
||||
docs/node_modules/@parcel/watcher/src/linux/InotifyBackend.cc
|
||||
docs/node_modules/@parcel/watcher/src/linux/InotifyBackend.hh
|
||||
docs/node_modules/@parcel/watcher/src/macos/FSEventsBackend.cc
|
||||
docs/node_modules/@parcel/watcher/src/macos/FSEventsBackend.hh
|
||||
docs/node_modules/@parcel/watcher/src/shared/BruteForceBackend.cc
|
||||
docs/node_modules/@parcel/watcher/src/shared/BruteForceBackend.hh
|
||||
docs/node_modules/@parcel/watcher/src/unix/fts.cc
|
||||
docs/node_modules/@parcel/watcher/src/unix/legacy.cc
|
||||
docs/node_modules/@parcel/watcher/src/wasm/include.h
|
||||
docs/node_modules/@parcel/watcher/src/wasm/WasmBackend.cc
|
||||
docs/node_modules/@parcel/watcher/src/wasm/WasmBackend.hh
|
||||
docs/node_modules/@parcel/watcher/src/watchman/BSER.cc
|
||||
docs/node_modules/@parcel/watcher/src/watchman/BSER.hh
|
||||
docs/node_modules/@parcel/watcher/src/watchman/IPC.hh
|
||||
docs/node_modules/@parcel/watcher/src/watchman/WatchmanBackend.cc
|
||||
docs/node_modules/@parcel/watcher/src/watchman/WatchmanBackend.hh
|
||||
docs/node_modules/@parcel/watcher/src/windows/win_utils.cc
|
||||
docs/node_modules/@parcel/watcher/src/windows/win_utils.hh
|
||||
docs/node_modules/@parcel/watcher/src/windows/WindowsBackend.cc
|
||||
docs/node_modules/@parcel/watcher/src/windows/WindowsBackend.hh
|
||||
docs/node_modules/@parcel/watcher-linux-x64-glibc/LICENSE
|
||||
docs/node_modules/@parcel/watcher-linux-x64-glibc/package.json
|
||||
docs/node_modules/@parcel/watcher-linux-x64-glibc/README.md
|
||||
docs/node_modules/@parcel/watcher-linux-x64-glibc/watcher.node
|
||||
docs/node_modules/@tailwindcss/cli/LICENSE
|
||||
docs/node_modules/@tailwindcss/cli/package.json
|
||||
docs/node_modules/@tailwindcss/cli/README.md
|
||||
docs/node_modules/@tailwindcss/cli/dist/index.mjs
|
||||
docs/node_modules/@tailwindcss/node/LICENSE
|
||||
docs/node_modules/@tailwindcss/node/package.json
|
||||
docs/node_modules/@tailwindcss/node/README.md
|
||||
docs/node_modules/@tailwindcss/node/dist/esm-cache.loader.d.mts
|
||||
docs/node_modules/@tailwindcss/node/dist/esm-cache.loader.mjs
|
||||
docs/node_modules/@tailwindcss/node/dist/index.d.mts
|
||||
docs/node_modules/@tailwindcss/node/dist/index.d.ts
|
||||
docs/node_modules/@tailwindcss/node/dist/index.js
|
||||
docs/node_modules/@tailwindcss/node/dist/index.mjs
|
||||
docs/node_modules/@tailwindcss/node/dist/require-cache.d.ts
|
||||
docs/node_modules/@tailwindcss/node/dist/require-cache.js
|
||||
docs/node_modules/@tailwindcss/oxide/index.d.ts
|
||||
docs/node_modules/@tailwindcss/oxide/index.js
|
||||
docs/node_modules/@tailwindcss/oxide/LICENSE
|
||||
docs/node_modules/@tailwindcss/oxide/package.json
|
||||
docs/node_modules/@tailwindcss/oxide-linux-x64-gnu/LICENSE
|
||||
docs/node_modules/@tailwindcss/oxide-linux-x64-gnu/package.json
|
||||
docs/node_modules/@tailwindcss/oxide-linux-x64-gnu/README.md
|
||||
docs/node_modules/@tailwindcss/oxide-linux-x64-gnu/tailwindcss-oxide.linux-x64-gnu.node
|
||||
docs/node_modules/braces/index.js
|
||||
docs/node_modules/braces/LICENSE
|
||||
docs/node_modules/braces/package.json
|
||||
docs/node_modules/braces/README.md
|
||||
docs/node_modules/braces/lib/compile.js
|
||||
docs/node_modules/braces/lib/constants.js
|
||||
docs/node_modules/braces/lib/expand.js
|
||||
docs/node_modules/braces/lib/parse.js
|
||||
docs/node_modules/braces/lib/stringify.js
|
||||
docs/node_modules/braces/lib/utils.js
|
||||
docs/node_modules/detect-libc/.npmignore
|
||||
docs/node_modules/detect-libc/LICENSE
|
||||
docs/node_modules/detect-libc/package.json
|
||||
docs/node_modules/detect-libc/README.md
|
||||
docs/node_modules/detect-libc/bin/detect-libc.js
|
||||
docs/node_modules/detect-libc/lib/detect-libc.js
|
||||
docs/node_modules/enhanced-resolve/LICENSE
|
||||
docs/node_modules/enhanced-resolve/package.json
|
||||
docs/node_modules/enhanced-resolve/README.md
|
||||
docs/node_modules/enhanced-resolve/types.d.ts
|
||||
docs/node_modules/enhanced-resolve/lib/AliasFieldPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/AliasPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/AppendPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js
|
||||
docs/node_modules/enhanced-resolve/lib/CloneBasenamePlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/ConditionalPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/createInnerContext.js
|
||||
docs/node_modules/enhanced-resolve/lib/DescriptionFilePlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/DescriptionFileUtils.js
|
||||
docs/node_modules/enhanced-resolve/lib/DirectoryExistsPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/ExportsFieldPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/ExtensionAliasPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/FileExistsPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/forEachBail.js
|
||||
docs/node_modules/enhanced-resolve/lib/getInnerRequest.js
|
||||
docs/node_modules/enhanced-resolve/lib/getPaths.js
|
||||
docs/node_modules/enhanced-resolve/lib/ImportsFieldPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/index.js
|
||||
docs/node_modules/enhanced-resolve/lib/JoinRequestPartPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/JoinRequestPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/LogInfoPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/MainFieldPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/ModulesInHierachicDirectoriesPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/ModulesInHierarchicalDirectoriesPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/ModulesInRootPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/NextPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/ParsePlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/PnpPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/Resolver.js
|
||||
docs/node_modules/enhanced-resolve/lib/ResolverFactory.js
|
||||
docs/node_modules/enhanced-resolve/lib/RestrictionsPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/ResultPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/RootsPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/SelfReferencePlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/SymlinkPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/SyncAsyncFileSystemDecorator.js
|
||||
docs/node_modules/enhanced-resolve/lib/TryNextPlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/UseFilePlugin.js
|
||||
docs/node_modules/enhanced-resolve/lib/util/entrypoints.js
|
||||
docs/node_modules/enhanced-resolve/lib/util/identifier.js
|
||||
docs/node_modules/enhanced-resolve/lib/util/module-browser.js
|
||||
docs/node_modules/enhanced-resolve/lib/util/path.js
|
||||
docs/node_modules/enhanced-resolve/lib/util/process-browser.js
|
||||
docs/node_modules/fill-range/index.js
|
||||
docs/node_modules/fill-range/LICENSE
|
||||
docs/node_modules/fill-range/package.json
|
||||
docs/node_modules/fill-range/README.md
|
||||
docs/node_modules/graceful-fs/clone.js
|
||||
docs/node_modules/graceful-fs/graceful-fs.js
|
||||
docs/node_modules/graceful-fs/legacy-streams.js
|
||||
docs/node_modules/graceful-fs/LICENSE
|
||||
docs/node_modules/graceful-fs/package.json
|
||||
docs/node_modules/graceful-fs/polyfills.js
|
||||
docs/node_modules/graceful-fs/README.md
|
||||
docs/node_modules/is-extglob/index.js
|
||||
docs/node_modules/is-extglob/LICENSE
|
||||
docs/node_modules/is-extglob/package.json
|
||||
docs/node_modules/is-extglob/README.md
|
||||
docs/node_modules/is-glob/index.js
|
||||
docs/node_modules/is-glob/LICENSE
|
||||
docs/node_modules/is-glob/package.json
|
||||
docs/node_modules/is-glob/README.md
|
||||
docs/node_modules/is-number/index.js
|
||||
docs/node_modules/is-number/LICENSE
|
||||
docs/node_modules/is-number/package.json
|
||||
docs/node_modules/is-number/README.md
|
||||
docs/node_modules/jiti/LICENSE
|
||||
docs/node_modules/jiti/package.json
|
||||
docs/node_modules/jiti/README.md
|
||||
docs/node_modules/jiti/dist/babel.cjs
|
||||
docs/node_modules/jiti/dist/jiti.cjs
|
||||
docs/node_modules/jiti/lib/jiti-cli.mjs
|
||||
docs/node_modules/jiti/lib/jiti-hooks.mjs
|
||||
docs/node_modules/jiti/lib/jiti-native.mjs
|
||||
docs/node_modules/jiti/lib/jiti-register.d.mts
|
||||
docs/node_modules/jiti/lib/jiti-register.mjs
|
||||
docs/node_modules/jiti/lib/jiti.cjs
|
||||
docs/node_modules/jiti/lib/jiti.d.cts
|
||||
docs/node_modules/jiti/lib/jiti.d.mts
|
||||
docs/node_modules/jiti/lib/jiti.mjs
|
||||
docs/node_modules/jiti/lib/types.d.ts
|
||||
docs/node_modules/lightningcss/LICENSE
|
||||
docs/node_modules/lightningcss/package.json
|
||||
docs/node_modules/lightningcss/README.md
|
||||
docs/node_modules/lightningcss/node/ast.d.ts
|
||||
docs/node_modules/lightningcss/node/ast.js.flow
|
||||
docs/node_modules/lightningcss/node/browserslistToTargets.js
|
||||
docs/node_modules/lightningcss/node/composeVisitors.js
|
||||
docs/node_modules/lightningcss/node/flags.js
|
||||
docs/node_modules/lightningcss/node/index.d.ts
|
||||
docs/node_modules/lightningcss/node/index.js
|
||||
docs/node_modules/lightningcss/node/index.js.flow
|
||||
docs/node_modules/lightningcss/node/index.mjs
|
||||
docs/node_modules/lightningcss/node/targets.d.ts
|
||||
docs/node_modules/lightningcss/node/targets.js.flow
|
||||
docs/node_modules/lightningcss-linux-x64-gnu/LICENSE
|
||||
docs/node_modules/lightningcss-linux-x64-gnu/lightningcss.linux-x64-gnu.node
|
||||
docs/node_modules/lightningcss-linux-x64-gnu/package.json
|
||||
docs/node_modules/lightningcss-linux-x64-gnu/README.md
|
||||
docs/node_modules/micromatch/index.js
|
||||
docs/node_modules/micromatch/LICENSE
|
||||
docs/node_modules/micromatch/package.json
|
||||
docs/node_modules/micromatch/README.md
|
||||
docs/node_modules/mri/index.d.ts
|
||||
docs/node_modules/mri/license.md
|
||||
docs/node_modules/mri/package.json
|
||||
docs/node_modules/mri/readme.md
|
||||
docs/node_modules/mri/lib/index.js
|
||||
docs/node_modules/mri/lib/index.mjs
|
||||
docs/node_modules/node-addon-api/common.gypi
|
||||
docs/node_modules/node-addon-api/except.gypi
|
||||
docs/node_modules/node-addon-api/index.js
|
||||
docs/node_modules/node-addon-api/LICENSE.md
|
||||
docs/node_modules/node-addon-api/napi-inl.deprecated.h
|
||||
docs/node_modules/node-addon-api/napi-inl.h
|
||||
docs/node_modules/node-addon-api/napi.h
|
||||
docs/node_modules/node-addon-api/node_addon_api.gyp
|
||||
docs/node_modules/node-addon-api/node_api.gyp
|
||||
docs/node_modules/node-addon-api/noexcept.gypi
|
||||
docs/node_modules/node-addon-api/nothing.c
|
||||
docs/node_modules/node-addon-api/package-support.json
|
||||
docs/node_modules/node-addon-api/package.json
|
||||
docs/node_modules/node-addon-api/README.md
|
||||
docs/node_modules/node-addon-api/tools/check-napi.js
|
||||
docs/node_modules/node-addon-api/tools/clang-format.js
|
||||
docs/node_modules/node-addon-api/tools/conversion.js
|
||||
docs/node_modules/node-addon-api/tools/eslint-format.js
|
||||
docs/node_modules/node-addon-api/tools/README.md
|
||||
docs/node_modules/picocolors/LICENSE
|
||||
docs/node_modules/picocolors/package.json
|
||||
docs/node_modules/picocolors/picocolors.browser.js
|
||||
docs/node_modules/picocolors/picocolors.d.ts
|
||||
docs/node_modules/picocolors/picocolors.js
|
||||
docs/node_modules/picocolors/README.md
|
||||
docs/node_modules/picocolors/types.d.ts
|
||||
docs/node_modules/picomatch/CHANGELOG.md
|
||||
docs/node_modules/picomatch/index.js
|
||||
docs/node_modules/picomatch/LICENSE
|
||||
docs/node_modules/picomatch/package.json
|
||||
docs/node_modules/picomatch/README.md
|
||||
docs/node_modules/picomatch/lib/constants.js
|
||||
docs/node_modules/picomatch/lib/parse.js
|
||||
docs/node_modules/picomatch/lib/picomatch.js
|
||||
docs/node_modules/picomatch/lib/scan.js
|
||||
docs/node_modules/picomatch/lib/utils.js
|
||||
docs/node_modules/tailwindcss/index.css
|
||||
docs/node_modules/tailwindcss/LICENSE
|
||||
docs/node_modules/tailwindcss/package.json
|
||||
docs/node_modules/tailwindcss/preflight.css
|
||||
docs/node_modules/tailwindcss/README.md
|
||||
docs/node_modules/tailwindcss/theme.css
|
||||
docs/node_modules/tailwindcss/utilities.css
|
||||
docs/node_modules/tailwindcss/dist/chunk-AZANAYY2.mjs
|
||||
docs/node_modules/tailwindcss/dist/chunk-CH45MXZF.mjs
|
||||
docs/node_modules/tailwindcss/dist/chunk-V2K3XTS4.mjs
|
||||
docs/node_modules/tailwindcss/dist/colors-b_6i0Oi7.d.ts
|
||||
docs/node_modules/tailwindcss/dist/colors.d.mts
|
||||
docs/node_modules/tailwindcss/dist/colors.d.ts
|
||||
docs/node_modules/tailwindcss/dist/colors.js
|
||||
docs/node_modules/tailwindcss/dist/colors.mjs
|
||||
docs/node_modules/tailwindcss/dist/default-theme.d.mts
|
||||
docs/node_modules/tailwindcss/dist/default-theme.d.ts
|
||||
docs/node_modules/tailwindcss/dist/default-theme.js
|
||||
docs/node_modules/tailwindcss/dist/default-theme.mjs
|
||||
docs/node_modules/tailwindcss/dist/flatten-color-palette.d.mts
|
||||
docs/node_modules/tailwindcss/dist/flatten-color-palette.d.ts
|
||||
docs/node_modules/tailwindcss/dist/flatten-color-palette.js
|
||||
docs/node_modules/tailwindcss/dist/flatten-color-palette.mjs
|
||||
docs/node_modules/tailwindcss/dist/lib.d.mts
|
||||
docs/node_modules/tailwindcss/dist/lib.d.ts
|
||||
docs/node_modules/tailwindcss/dist/lib.js
|
||||
docs/node_modules/tailwindcss/dist/lib.mjs
|
||||
docs/node_modules/tailwindcss/dist/plugin.d.mts
|
||||
docs/node_modules/tailwindcss/dist/plugin.d.ts
|
||||
docs/node_modules/tailwindcss/dist/plugin.js
|
||||
docs/node_modules/tailwindcss/dist/plugin.mjs
|
||||
docs/node_modules/tailwindcss/dist/resolve-config-BIFUA2FY.d.ts
|
||||
docs/node_modules/tailwindcss/dist/resolve-config-QUZ9b-Gn.d.mts
|
||||
docs/node_modules/tailwindcss/dist/types-B254mqw1.d.mts
|
||||
docs/node_modules/tapable/LICENSE
|
||||
docs/node_modules/tapable/package.json
|
||||
docs/node_modules/tapable/README.md
|
||||
docs/node_modules/tapable/tapable.d.ts
|
||||
docs/node_modules/tapable/lib/AsyncParallelBailHook.js
|
||||
docs/node_modules/tapable/lib/AsyncParallelHook.js
|
||||
docs/node_modules/tapable/lib/AsyncSeriesBailHook.js
|
||||
docs/node_modules/tapable/lib/AsyncSeriesHook.js
|
||||
docs/node_modules/tapable/lib/AsyncSeriesLoopHook.js
|
||||
docs/node_modules/tapable/lib/AsyncSeriesWaterfallHook.js
|
||||
docs/node_modules/tapable/lib/Hook.js
|
||||
docs/node_modules/tapable/lib/HookCodeFactory.js
|
||||
docs/node_modules/tapable/lib/HookMap.js
|
||||
docs/node_modules/tapable/lib/index.js
|
||||
docs/node_modules/tapable/lib/MultiHook.js
|
||||
docs/node_modules/tapable/lib/SyncBailHook.js
|
||||
docs/node_modules/tapable/lib/SyncHook.js
|
||||
docs/node_modules/tapable/lib/SyncLoopHook.js
|
||||
docs/node_modules/tapable/lib/SyncWaterfallHook.js
|
||||
docs/node_modules/tapable/lib/util-browser.js
|
||||
docs/node_modules/to-regex-range/index.js
|
||||
docs/node_modules/to-regex-range/LICENSE
|
||||
docs/node_modules/to-regex-range/package.json
|
||||
docs/node_modules/to-regex-range/README.md
|
||||
docs/package.json
|
||||
docs/package-lock.json
|
||||
docs/node_modules
|
||||
rust
|
||||
|
||||
libcrypto.3.dylib
|
||||
android/app/src/main/jniLibs/**
|
||||
android/app/google-services.json
|
||||
web/pkg/package.json
|
||||
web/pkg/vodozemac_bindings_dart_bg.wasm
|
||||
web/pkg/vodozemac_bindings_dart.js
|
||||
web/native_executor.js*
|
||||
|
|
|
|||
12
.metadata
12
.metadata
|
|
@ -4,7 +4,7 @@
|
|||
# This file should be version controlled and should not be manually edited.
|
||||
|
||||
version:
|
||||
revision: "abb292a07e20d696c4568099f918f6c5f330e6b0"
|
||||
revision: "fcf2c11572af6f390246c056bc905eca609533a0"
|
||||
channel: "stable"
|
||||
|
||||
project_type: app
|
||||
|
|
@ -13,11 +13,11 @@ project_type: app
|
|||
migration:
|
||||
platforms:
|
||||
- platform: root
|
||||
create_revision: abb292a07e20d696c4568099f918f6c5f330e6b0
|
||||
base_revision: abb292a07e20d696c4568099f918f6c5f330e6b0
|
||||
- platform: linux
|
||||
create_revision: abb292a07e20d696c4568099f918f6c5f330e6b0
|
||||
base_revision: abb292a07e20d696c4568099f918f6c5f330e6b0
|
||||
create_revision: fcf2c11572af6f390246c056bc905eca609533a0
|
||||
base_revision: fcf2c11572af6f390246c056bc905eca609533a0
|
||||
- platform: android
|
||||
create_revision: fcf2c11572af6f390246c056bc905eca609533a0
|
||||
base_revision: fcf2c11572af6f390246c056bc905eca609533a0
|
||||
|
||||
# User provided section
|
||||
|
||||
|
|
|
|||
2
.tool_versions.yaml
Normal file
2
.tool_versions.yaml
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
environment:
|
||||
flutter: 3.41.4
|
||||
690
CHANGELOG.md
690
CHANGELOG.md
|
|
@ -1,3 +1,691 @@
|
|||
## v2.5.0
|
||||
FluffyChat 2.5.0 introduces a new homeserver picker for onboarding, better image compression performance and several smaller new features, design adjustments and bug fixes.
|
||||
|
||||
- feat: Add mute notification action (Christian Kußowski)
|
||||
- feat: Add presetHomeserver config to enforce a homeserver for web (Christian Kußowski)
|
||||
- feat: Display particle animation on login page (Christian Kußowski)
|
||||
- feat: Display read receipts for every event (Christian Kußowski)
|
||||
- feat: Enable audio recording on web (Christian Kußowski)
|
||||
- feat: Implement low priority for rooms (Christian Kußowski)
|
||||
- feat: Implement matrix native oidc (Christian Kußowski)
|
||||
- feat: Implement new sign in flow (Christian Kußowski)
|
||||
- feat: OIDC Login on same page (Christian Kußowski)
|
||||
- feat: Reenable native imaging for all platforms (Christian Kußowski)
|
||||
- feat: Remember last successful logged in homeserver (Christian Kußowski)
|
||||
- Add lld to install custom dependency for Linux in README (Stephen)
|
||||
- build: Add llvm-18 to packages for snap (krille-chan)
|
||||
- build: Add maestro based integration tests (Christian Kußowski)
|
||||
- chore(translations): Added translation using Weblate (Albanian) (Besnik Bleta)
|
||||
- chore(translations): Added translation using Weblate (Kabyle) (Amadɣas)
|
||||
- chore(translations): Translated using Weblate (Basque) (xabirequejo)
|
||||
- chore(translations): Translated using Weblate (Catalan) (fadelkon)
|
||||
- chore(translations): Translated using Weblate (Chinese (Simplified Han script)) (大王叫我来巡山)
|
||||
- chore(translations): Translated using Weblate (Croatian) (Milo Ivir)
|
||||
- chore(translations): Translated using Weblate (Czech) (Matyáš Caras)
|
||||
- chore(translations): Translated using Weblate (Danish) (Øjvind Fritjof Arnfred)
|
||||
- chore(translations): Translated using Weblate (Dutch) (Jelv)
|
||||
- chore(translations): Translated using Weblate (English) (Christian)
|
||||
- chore(translations): Translated using Weblate (English) (SpikyBee)
|
||||
- chore(translations): Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- chore(translations): Translated using Weblate (Galician) (josé m.)
|
||||
- chore(translations): Translated using Weblate (Georgian) (Dimitri Tabatadze)
|
||||
- chore(translations): Translated using Weblate (Georgian) (Temuri Doghonadze)
|
||||
- chore(translations): Translated using Weblate (German) (Christian)
|
||||
- chore(translations): Translated using Weblate (German) (Ettore Atalan)
|
||||
- chore(translations): Translated using Weblate (German) (nautilusx)
|
||||
- chore(translations): Translated using Weblate (Hindi) (Vishal Singh)
|
||||
- chore(translations): Translated using Weblate (Indonesian) (Arif Budiman)
|
||||
- chore(translations): Translated using Weblate (Irish) (Aindriú Mac Giolla Eoin)
|
||||
- chore(translations): Translated using Weblate (Japanese) (NPL)
|
||||
- chore(translations): Translated using Weblate (Japanese) (Sayaka Halton)
|
||||
- chore(translations): Translated using Weblate (Kabyle) (Amadɣas)
|
||||
- chore(translations): Translated using Weblate (Kabyle) (ButterflyOfFire)
|
||||
- chore(translations): Translated using Weblate (Kabyle) (Christian)
|
||||
- chore(translations): Translated using Weblate (Latvian) (Edgars Andersons)
|
||||
- chore(translations): Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye)
|
||||
- chore(translations): Translated using Weblate (Norwegian Bokmål) (sunniva)
|
||||
- chore(translations): Translated using Weblate (Persian) (saok91)
|
||||
- chore(translations): Translated using Weblate (Polish) (gredzikk)
|
||||
- chore(translations): Translated using Weblate (Portuguese (Brazil)) (Logaritmica)
|
||||
- chore(translations): Translated using Weblate (Russian) (-)
|
||||
- chore(translations): Translated using Weblate (Russian) (Artem Pereverzev)
|
||||
- chore(translations): Translated using Weblate (Russian) (mikinol)
|
||||
- chore(translations): Translated using Weblate (Spanish) (Kimby)
|
||||
- chore(translations): Translated using Weblate (Spanish) (SpikyBee)
|
||||
- chore(translations): Translated using Weblate (Swedish) (Malva Jakobsson)
|
||||
- chore(translations): Translated using Weblate (Swedish) (spinningpaprika)
|
||||
- chore(translations): Translated using Weblate (Tamil) (தமிழ்நேரம்)
|
||||
- chore(translations): Translated using Weblate (Ukrainian) (Andriy Kushnir)
|
||||
- chore(translations): Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- chore(translations): Translated using Weblate (Uzbek) (BeMeritus)
|
||||
- chore: Add config search textfield (Christian Kußowski)
|
||||
- chore: Add matrix notify workflow (Christian Kußowski)
|
||||
- chore: Add recommended homeservers (Christian Kußowski)
|
||||
- chore: Add reset button for config viewer (Christian Kußowski)
|
||||
- chore: Add support button everywhere (Christian Kußowski)
|
||||
- chore: Added deeplinks to test protocol (Christian Kußowski)
|
||||
- chore: Adjust avatar size and chat list item design (krille-chan)
|
||||
- chore: Adjust chat input row design (Christian Kußowski)
|
||||
- chore: Adjust design (Christian Kußowski)
|
||||
- chore: Adjust design of navrail (Christian Kußowski)
|
||||
- chore: Adjust design of space avatars and more (Christian Kußowski)
|
||||
- chore: Adjust design of user viewer and popup buttons (Christian Kußowski)
|
||||
- chore: Adjust join space child UX (Christian Kußowski)
|
||||
- chore: Adjust paddings (krille-chan)
|
||||
- chore: Adjust power level UX (Christian Kußowski)
|
||||
- chore: Adjust search field design (Christian Kußowski)
|
||||
- chore: Adjust status header design (Christian Kußowski)
|
||||
- chore: Adjust styles and animations (Christian Kußowski)
|
||||
- chore: Adjust support button design (Christian Kußowski)
|
||||
- chore: Always show filter for messages (Christian Kußowski)
|
||||
- chore: Avoid unnecessary lambdas (Christian Kußowski)
|
||||
- chore: Better context menu for space children (Christian Kußowski)
|
||||
- chore: bump ios version (ShootingStarDragons)
|
||||
- chore: Check conventional commits in CI (krille-chan)
|
||||
- chore: Check if pubspec.lock is up to date in CI (Christian Kußowski)
|
||||
- chore: Check of unused localizations (Christian Kußowski)
|
||||
- chore: Clean up pages build (Christian Kußowski)
|
||||
- chore: Display spaces filter chip when spaces present even without children (Christian Kußowski)
|
||||
- chore: Execute dart code linter in CI (Christian Kußowski)
|
||||
- chore: Exempt assignees from stale (Christian Kußowski)
|
||||
- chore: Fix oidc login on web (Christian Kußowski)
|
||||
- chore: Give issues and PRs more time for stale (Christian Kußowski)
|
||||
- chore: Hide homepage button if not preset (Christian Kußowski)
|
||||
- chore: Hide status list by default (Christian Kußowski)
|
||||
- chore: Implement pick SSO provider from dialog and add tchncs.de (Christian Kußowski)
|
||||
- chore: Introduce tool versions file (Christian Kußowski)
|
||||
- chore: Login with localhost (Christian Kußowski)
|
||||
- chore: Make banner light red (Christian Kußowski)
|
||||
- chore: Make key fingerprints in chat encryption page selectable (Christian Kußowski)
|
||||
- chore: make sendTimelineEventTimeout configurable (Christian Kußowski)
|
||||
- chore: Make unread bubble full round (Christian Kußowski)
|
||||
- chore: Move file cache to subdirectory (Christian Kußowski)
|
||||
- chore: Move show image viewer one step up (Christian Kußowski)
|
||||
- chore: Move website back to fluffychat.im (Christian Kußowski)
|
||||
- chore: Only show confirm dialog once (Christian Kußowski)
|
||||
- chore: Put oidc behind a feature flag until fixed (Christian Kußowski)
|
||||
- chore: Remove converser from recommended homeservers as it doesn't have open registration (Christian Kußowski)
|
||||
- chore: Remove frei.chat from homeserver list (Christian Kußowski)
|
||||
- chore: Remove web notification custom sound (Christian Kußowski)
|
||||
- chore: Replace duplicate check for stale bot (Christian Kußowski)
|
||||
- chore: Retry sign in tap in tests (Christian Kußowski)
|
||||
- chore: Run matrix notification in pull request target (Christian Kußowski)
|
||||
- chore: Sanitize hash param for oidc (Christian Kußowski)
|
||||
- chore: Set erase flag true on account deactivation (krille-chan)
|
||||
- chore: Set operations per run to 1000 (krille-chan)
|
||||
- chore: Skip matrix notify for events from myself (Christian Kußowski)
|
||||
- chore: Update locale config (Christian Kußowski)
|
||||
- chore: Update matrix ID localization (Christian Kußowski)
|
||||
- chore: Update recommended homeservers (Christian Kußowski)
|
||||
- chore: Update redirect android scheme (Christian Kußowski)
|
||||
- chore: Use fixed version of fcm shared isolate (Christian Kußowski)
|
||||
- fix: Add app id to TileLayer user agent (Vespe-r)
|
||||
- fix: Add missing @@locale (Krille-chan)
|
||||
- fix: Audioplayer on web buggy (Christian Kußowski)
|
||||
- fix: build failed on archlinux (ShootingStarDragons)
|
||||
- fix: Do not cancel notification on reply (Christian Kußowski)
|
||||
- fix: Do not display formatted body if body is just filename (Christian Kußowski)
|
||||
- fix: Do not route to backup on soft logout (Christian Kußowski)
|
||||
- fix: Edit space child button opens space details page and not space child details page (Christian Kußowski)
|
||||
- fix: Fix formatting of messages with newlines (Philip Fritzsche)
|
||||
- fix: get correct aspect ratio from VideoPlayerController (Matias)
|
||||
- fix: Join room by alias even if not found (Christian Kußowski)
|
||||
- fix: Open deep links (Christian Kußowski)
|
||||
- fix: Receipt row not auto updating (Christian Kußowski)
|
||||
- fix: Receipts disappear after reaction (Christian Kußowski)
|
||||
- fix: Reply voice message displays a broken html body (Christian Kußowski)
|
||||
- fix: Send reply to voice messages (Christian Kußowski)
|
||||
- fix: Set mimetype for video player on web (Christian Kußowski)
|
||||
- fix: Use correct own person for android notification replies (Christian Kußowski)
|
||||
- fix: Wrong placeholder in kab (Christian Kußowski)
|
||||
- refactor: Add Flutter lints (Christian Kußowski)
|
||||
- refactor: Add more linter rules (Christian Kußowski)
|
||||
- refactor: Add more stricter lints (Christian Kußowski)
|
||||
- refactor: Avoid redundant async (Christian Kußowski)
|
||||
- refactor: Avoid unnecessary bool comparison (Christian Kußowski)
|
||||
- refactor: Better UX for create space children (Christian Kußowski)
|
||||
- refactor: Disable custom image resizer for macOS and windows (Christian Kußowski)
|
||||
- refactor: Do show message bubble even for big emotes (Christian Kußowski)
|
||||
- refactor: Enable avoid-returning-widgets lint (Christian Kußowski)
|
||||
- refactor: Enable more strict lints (Christian Kußowski)
|
||||
- refactor: Enable rule avoid dynamic (Christian Kußowski)
|
||||
- refactor: Make file events more fail safe for failed to send (Christian Kußowski)
|
||||
- refactor: Remove animation dependency (Christian Kußowski)
|
||||
- refactor: Remove unused localizations (Christian Kußowski)
|
||||
- refactor: Remove unused translations (Christian Kußowski)
|
||||
- refactor: Use getCryptoIdentityState to check backup state (krille-chan)
|
||||
- refactor: Use more robust and performant way to detect single emoji messages (Christian Kußowski)
|
||||
- refactor: Use native uri data from bytes instead of html (Christian Kußowski)
|
||||
|
||||
## v2.4.0
|
||||
FluffyChat 2.4.0 adds a new improved GUI for managing stickers with tutorials how to
|
||||
easily add your own sticker packs.
|
||||
It also improves the search and image gallery in chats, especially encrypted chats.
|
||||
Besides that this update comes with a lot of fixes and improvements under the hood.
|
||||
|
||||
- feat: Create new sticker packs (krille-chan)
|
||||
- feat: Edit displayname and attribution for sticker packs (krille-chan)
|
||||
- feat: Improved search (Christian Kußowski)
|
||||
- feat: Set usage of custom emojis and stickers (krille-chan)
|
||||
- feat: Upload multiple stickers at once (krille-chan)
|
||||
- build: (deps): bump actions/checkout from 5 to 6 (dependabot[bot])
|
||||
- build: (deps): bump animations from 2.1.0 to 2.1.1 (dependabot[bot])
|
||||
- build: (deps): bump device_info_plus from 12.2.0 to 12.3.0 (dependabot[bot])
|
||||
- build: (deps): bump emoji_picker_flutter from 4.3.0 to 4.4.0 (dependabot[bot])
|
||||
- build: (deps): bump file_picker from 10.3.6 to 10.3.7 (dependabot[bot])
|
||||
- build: (deps): bump file_picker from 10.3.7 to 10.3.8 (dependabot[bot])
|
||||
- build: (deps): bump file_selector from 1.0.4 to 1.1.0 (dependabot[bot])
|
||||
- build: (deps): bump flutter_foreground_task from 9.1.0 to 9.2.0 (dependabot[bot])
|
||||
- build: (deps): bump flutter_webrtc from 1.2.0 to 1.2.1 (dependabot[bot])
|
||||
- build: (deps): bump go_router from 17.0.0 to 17.0.1 (dependabot[bot])
|
||||
- build: (deps): bump image from 4.5.4 to 4.6.0 (dependabot[bot])
|
||||
- build: (deps): bump image from 4.6.0 to 4.7.1 (dependabot[bot])
|
||||
- build: (deps): bump image from 4.7.1 to 4.7.2 (dependabot[bot])
|
||||
- build: (deps): bump matrix from 4.0.0 to 4.0.1 (dependabot[bot])
|
||||
- build: (deps): bump shared_preferences from 2.5.3 to 2.5.4 (dependabot[bot])
|
||||
- build: (deps): bump translations_cleaner from 0.0.5 to 0.1.0 (dependabot[bot])
|
||||
- build: (deps): bump universal_html from 2.2.4 to 2.3.0 (dependabot[bot])
|
||||
- build: Reenable shrink resources and minify in gradle (Christian Kußowski)
|
||||
- build: Upgrade to flutter 3.38.4 (Christian Kußowski)
|
||||
- build: Use matrix sdk vom pub.dev again (Christian Kußowski)
|
||||
- chore(translations): Translated using Weblate (Basque) (xabirequejo)
|
||||
- chore(translations): Translated using Weblate (Belarusian) (Alex Katon)
|
||||
- chore(translations): Translated using Weblate (Bengali) (Kom nake)
|
||||
- chore(translations): Translated using Weblate (Chinese (Simplified Han script)) (Creeper)
|
||||
- chore(translations): Translated using Weblate (Chinese (Simplified Han script)) (大王叫我来巡山)
|
||||
- chore(translations): Translated using Weblate (Croatian) (Milo Ivir)
|
||||
- chore(translations): Translated using Weblate (Czech) (arxari)
|
||||
- chore(translations): Translated using Weblate (Dutch) (Jelv)
|
||||
- chore(translations): Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- chore(translations): Translated using Weblate (Finnish) (Ricky Tigg)
|
||||
- chore(translations): Translated using Weblate (French) (hugues de keyzer)
|
||||
- chore(translations): Translated using Weblate (Galician) (josé m.)
|
||||
- chore(translations): Translated using Weblate (Georgian) (Nicholas Winterhalter)
|
||||
- chore(translations): Translated using Weblate (Georgian) (Temuri Doghonadze)
|
||||
- chore(translations): Translated using Weblate (German) (Bella)
|
||||
- chore(translations): Translated using Weblate (German) (nautilusx)
|
||||
- chore(translations): Translated using Weblate (Greek) (Rain4Cats)
|
||||
- chore(translations): Translated using Weblate (Irish) (Aindriú Mac Giolla Eoin)
|
||||
- chore(translations): Translated using Weblate (Italian) (Alessio Olivieri)
|
||||
- chore(translations): Translated using Weblate (Italian) (Claudio Maradonna)
|
||||
- chore(translations): Translated using Weblate (Latvian) (Edgars Andersons)
|
||||
- chore(translations): Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye)
|
||||
- chore(translations): Translated using Weblate (Portuguese (Brazil)) (LucasMZ)
|
||||
- chore(translations): Translated using Weblate (Russian) (BeMeritus)
|
||||
- chore(translations): Translated using Weblate (Russian) (Christian)
|
||||
- chore(translations): Translated using Weblate (Russian) (Дмитрий Михирев)
|
||||
- chore(translations): Translated using Weblate (Serbian) (Luka)
|
||||
- chore(translations): Translated using Weblate (Spanish) (Kimby)
|
||||
- chore(translations): Translated using Weblate (Ukrainian) (Andriy Kushnir)
|
||||
- chore(translations): Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- chore(translations): Translated using Weblate (Uzbek) (BeMeritus)
|
||||
- chore(translations): Translated using Weblate (Uzbek) (Maftuna Vohidjonovna)
|
||||
- chore: Allow all chars for emoji search (Christian Kußowski)
|
||||
- chore: Allow export of readonly sticker packs (Christian Kußowski)
|
||||
- chore: delete unrelated line (ShootingStarDragons)
|
||||
- chore: Display attribution for sticker packs (krille-chan)
|
||||
- chore: Escape title in check duplicates job (Christian Kußowski)
|
||||
- chore: ignore for now deprecated regex (Christian Kußowski)
|
||||
- chore: Improve room custom emote UX (krille-chan)
|
||||
- chore: Improve sticker editor UX (krille-chan)
|
||||
- chore: Improve text selection color for messages (Christian Kußowski)
|
||||
- chore: Improve via calculation (Christian Kußowski)
|
||||
- chore: Increase padding for code blocks (Christian Kußowski)
|
||||
- chore: Link how do I get stickers FAQ entry (Christian Kußowski)
|
||||
- chore: Localize emoji picker (Christian Kußowski)
|
||||
- chore: Make attribution url field clickable (Christian Kußowski)
|
||||
- chore: Make cross signing self sign mandatory for bootstrap (Christian Kußowski)
|
||||
- chore: make locale for emoji suggestions configureable (krille-chan)
|
||||
- chore: Make sticker previews in editor clickable (krille-chan)
|
||||
- chore: Make stickers smaller than normal image messages (Christian Kußowski)
|
||||
- chore: Override sqlcipher license (Christian Kußowski)
|
||||
- chore: Remove horizontal scrolling for code blocks (Christian Kußowski)
|
||||
- chore: remove the userId param (ShootingStarDragons)
|
||||
- chore: Replace copy action with pin event action in UI (Christian Kußowski)
|
||||
- chore: Request keys for last room messages after bootstrap (krille-chan)
|
||||
- chore: Simplify adaptive bottom sheet code (Christian Kußowski)
|
||||
- chore: Update privacy policy links (Christian Kußowski)
|
||||
- chore: Update start poll design (Christian Kußowski)
|
||||
- chore: Update user device keys before creating bootstrap (Christian Kußowski)
|
||||
- chore: Use license_checker from pub again (Christian Kußowski)
|
||||
- chore: Wait for secrets after bootstrap verification (Christian Kußowski)
|
||||
- Fix regression after new linter rules (Andriy Kushnir)
|
||||
- fix: Better wait for secrets after verification bootstrap (Christian Kußowski)
|
||||
- fix: Broken ruzzian plurals (Christian Kußowski)
|
||||
- fix: Do not auto load history in rooms with collapsed state only (Christian Kußowski)
|
||||
- fix: Do not display empty file description body (Christian Kußowski)
|
||||
- fix: Do not render html in unformatted messages (Christian Kußowski)
|
||||
- fix: Do not request hero users for rooms with name (Christian Kußowski)
|
||||
- fix: enable users without passwords to delete their accounts by using uia request in account deletion (ggurdin)
|
||||
- fix: Hide no fcm warning after dismissed (Christian Kußowski)
|
||||
- fix: jump cannot work properly when there are multi users (ShootingStarDragons)
|
||||
- fix: Make keyboard moving bottom sheet up (Christian Kußowski)
|
||||
- fix: No description for video and audio messages displayed (Christian Kußowski)
|
||||
- fix: Render not permitted html tags as text instead of hiding (Christian Kußowski)
|
||||
- fix: Scrolling in fragmented timeline (Christian Kußowski)
|
||||
- fix: spoiler formatting in reply (denalena)
|
||||
- fix: State problem when not changing emote name (krille-chan)
|
||||
- fix: Unlock app with leading 0 in pin is not possible (Christian Kußowski)
|
||||
- fix: when user has multi counts,notification not works well (ShootingStarDragons)
|
||||
- refactor: Adjust state event design (Christian Kußowski)
|
||||
- refactor: Always open Chat Backup as page right after login (Christian Kußowski)
|
||||
- refactor: Display all sticker packs in same editor with filterchips (krille-chan)
|
||||
- refactor: File selector just use default FileType and remove not working zip selector (Christian Kußowski)
|
||||
- refactor: Improved design and UX for sticker editor (krille-chan)
|
||||
- refactor: Remove native imaging and enable web worker (Christian Kußowski)
|
||||
- refactor: Remove unused feature tor browser detector (Christian Kußowski)
|
||||
- refactor: Remove unused html onfocus streams (Christian Kußowski)
|
||||
- refactor: Remove unused msix (Christian Kußowski)
|
||||
- refactor: Remove workaround for download files (Christian Kußowski)
|
||||
- refactor: Update flutter lints (Christian Kußowski)
|
||||
- refactor: Update to Dart 3.10 with . shorthands (Christian Kußowski)
|
||||
- refactor: Use localized emojis for suggestion input (krille-chan)
|
||||
- refactor: Use own highlight rendering with working scrollbar and text selection (Christian Kußowski)
|
||||
- chore: Update links to matrix spaces to avoid confusion (Andriy Kushnir)
|
||||
|
||||
## v2.3.0
|
||||
|
||||
FluffyChat v2.3.0 fixes a possible database corruption bug on Android, also fixes a
|
||||
major performance leak and introduces polls and threads.
|
||||
|
||||
- feat: Implement polls (Christian Kußowski)
|
||||
- feat: Implement threads (krille-chan)
|
||||
- fix: Database corruption because notification tab isolate starts too late (Christian Kußowski)
|
||||
- fix: Import sticker packs (Christian Kußowski)
|
||||
- refactor: Improved UIA support for OIDC and SSO (Christian Kußowski)
|
||||
- refactor: Invite users when upgrading private room (Christian Kußowski)
|
||||
- build: (deps): bump cross_file from 0.3.4+2 to 0.3.5 (dependabot[bot])
|
||||
- build: (deps): bump file_picker from 10.3.3 to 10.3.6 (dependabot[bot])
|
||||
- build: (deps): bump go_router from 16.3.0 to 17.0.0 (dependabot[bot])
|
||||
- build: (deps): bump http from 1.5.0 to 1.6.0 (dependabot[bot])
|
||||
- build: (deps): bump image_picker from 1.2.0 to 1.2.1 (dependabot[bot])
|
||||
- build: (deps): bump qr_code_scanner_plus from 2.0.13 to 2.0.14 (dependabot[bot])
|
||||
- build: (deps): bump video_player from 2.10.0 to 2.10.1 (dependabot[bot])
|
||||
- build: Switch back to stable web auth package (krille-chan)
|
||||
- build: Use matrix sdk 4.0.0 (Christian Kußowski)
|
||||
- build: Use secure storage from pub.dev again (krille-chan)
|
||||
- chore: Remove Notification actions when using UnifiedPush (Christian Kußowski)
|
||||
- chore(translations): Added translation using Weblate (Uzbek) (bahrom04)
|
||||
- chore(translations): Translated using Weblate (Basque) (xabirequejo)
|
||||
- chore(translations): Translated using Weblate (Belarusian) (Alex Katon)
|
||||
- chore(translations): Translated using Weblate (Chinese (Simplified Han script)) (大王叫我来巡山)
|
||||
- chore(translations): Translated using Weblate (Dutch) (Jelv)
|
||||
- chore(translations): Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- chore(translations): Translated using Weblate (Finnish) (Priit Jõerüüt)
|
||||
- chore(translations): Translated using Weblate (Finnish) (Ricky Tigg)
|
||||
- chore(translations): Translated using Weblate (French) (luneth)
|
||||
- chore(translations): Translated using Weblate (Galician) (josé m.)
|
||||
- chore(translations): Translated using Weblate (Irish) (Aindriú Mac Giolla Eoin)
|
||||
- chore(translations): Translated using Weblate (Latvian) (Edgars Andersons)
|
||||
- chore(translations): Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye)
|
||||
- chore(translations): Translated using Weblate (Uzbek) (bahrom04)
|
||||
- chore(translations): Translated using Weblate (Uzbek) (BeMeritus)
|
||||
|
||||
## v2.2.0
|
||||
|
||||
FluffyChat 2.2.0 introduces a new UX for spaces and adds support for restricted
|
||||
join rules.
|
||||
|
||||
The app also now has a new design for recording voice messages including a new
|
||||
pause button.
|
||||
|
||||
You also now see the progress when downloading files.
|
||||
|
||||
On web the performance for image compressing has been drastically improved. Also
|
||||
the config.json file loading has finally been fixed. Please be aware that the format
|
||||
has changed as the available configs are now generated automatically.
|
||||
|
||||
Did you know that you can set a lot of additional configs in the new config viewer
|
||||
inside the app? This now supports much more options but please use with care!
|
||||
|
||||
On Android FluffyChat now supports notification actions (reply and mark as read) and
|
||||
also now supports Android Auto integration. Please do not cause an accident when using
|
||||
the app while driving!
|
||||
|
||||
On iOS the notifications are now localized. Stay tuned for more improvements on iOS
|
||||
notifications in the next releases!
|
||||
|
||||
Besides that this release brings a ton of bug fixes and performance improvements and
|
||||
of course updated translations. Big thanks to all the volunteers who have helped on weblate!
|
||||
|
||||
- feat: Add donation buttons except for PlayStore&AppStore version (Christian Kußowski)
|
||||
- feat: Add iOS Notification Service Extension for localizable push notifications (Christian Kußowski)
|
||||
- feat: Add notification actions (krille-chan)
|
||||
- feat: Add support for restricted join rule (Christian Kußowski)
|
||||
- feat: Display progress for downloading content (Christian Kußowski)
|
||||
- feat: Display progress on redact events and clear archive dialogs (Christian Kußowski)
|
||||
- feat: Enable native imaging for web (Christian Kußowski)
|
||||
- feat: Forward notifications to Android Auto (Christian Kußowski)
|
||||
- feat: Nicer record voice message UI with pause function (Christian Kußowski)
|
||||
- feat: Notification actions on android (krille-chan)
|
||||
- design: Improved spaces UX (Christian Kußowski)
|
||||
- fix: Correctly pass through obscure text (Christian Kußowski)
|
||||
- fix: Create a subdirectory in the tmp directory (Inex Code)
|
||||
- fix: Cupertino text dialogs (Christian Kußowski)
|
||||
- fix: Null pointer crash in chat list item (Christian Kußowski)
|
||||
- chore(translations): Translated using Weblate (Arabic) (jamazi)
|
||||
- chore(translations): Translated using Weblate (Basque) (xabirequejo)
|
||||
- chore(translations): Translated using Weblate (Belarusian) (Alex Katon)
|
||||
- chore(translations): Translated using Weblate (Chinese (Simplified Han script)) (大王叫我来巡山)
|
||||
- chore(translations): Translated using Weblate (Croatian) (Milo Ivir)
|
||||
- chore(translations): Translated using Weblate (Czech) (Flibble)
|
||||
- chore(translations): Translated using Weblate (Dutch) (Jelv)
|
||||
- chore(translations): Translated using Weblate (Esperanto) (Anonymous)
|
||||
- chore(translations): Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- chore(translations): Translated using Weblate (Finnish) (Aminda Suomalainen)
|
||||
- chore(translations): Translated using Weblate (Galician) (josé m)
|
||||
- chore(translations): Translated using Weblate (German) (Alex Katon)
|
||||
- chore(translations): Translated using Weblate (German) (cheese1)
|
||||
- chore(translations): Translated using Weblate (German) (Christian)
|
||||
- chore(translations): Translated using Weblate (German) (Jana)
|
||||
- chore(translations): Translated using Weblate (Greek) (Λευτέρης Τ)
|
||||
- chore(translations): Translated using Weblate (Hebrew) (Anonymous)
|
||||
- chore(translations): Translated using Weblate (Hungarian) (Balázs Meskó)
|
||||
- chore(translations): Translated using Weblate (Indonesian) (Linerly)
|
||||
- chore(translations): Translated using Weblate (Irish) (Aindriú Mac Giolla Eoin)
|
||||
- chore(translations): Translated using Weblate (Japanese) (Allan Nordhøy)
|
||||
- chore(translations): Translated using Weblate (Korean) (loyedison92)
|
||||
- chore(translations): Translated using Weblate (Latvian) (Edgars Andersons)
|
||||
- chore(translations): Translated using Weblate (Latvian) (ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝))
|
||||
- chore(translations): Translated using Weblate (Lithuanian) (Anonymous)
|
||||
- chore(translations): Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye)
|
||||
- chore(translations): Translated using Weblate (Norwegian Bokmål) (sunniva)
|
||||
- chore(translations): Translated using Weblate (Polish) (Paweł Gronowski)
|
||||
- chore(translations): Translated using Weblate (Portuguese (Brazil)) (LucasMZ)
|
||||
- chore(translations): Translated using Weblate (Portuguese (Portugal)) (Anonymous)
|
||||
- chore(translations): Translated using Weblate (Romanian) (Anonymous)
|
||||
- chore(translations): Translated using Weblate (Russian) (Christian)
|
||||
- chore(translations): Translated using Weblate (Russian) (Дмитрий Михирев)
|
||||
- chore(translations): Translated using Weblate (Russian) (Жора Змейкин)
|
||||
- chore(translations): Translated using Weblate (Serbian) (Anonymous)
|
||||
- chore(translations): Translated using Weblate (Slovak) (Anonymous)
|
||||
- chore(translations): Translated using Weblate (Spanish) (Kimby)
|
||||
- chore(translations): Translated using Weblate (Spanish) (LucasMZ)
|
||||
- chore(translations): Translated using Weblate (Turkish) (Christian)
|
||||
- chore(translations): Translated using Weblate (Turkish) (Ufuk Karal)
|
||||
- chore(translations): Translated using Weblate (Vietnamese) (desperadohp)
|
||||
- chore: add a link to the platforms' different behaviors for the 24h format (kaanelloed)
|
||||
- chore: Add ActionsPadding in column mode (Christian Kußowski)
|
||||
- chore: Add close icon to snackbar in column mode (Christian Kußowski)
|
||||
- chore: Adjust chat details button design (Christian Kußowski)
|
||||
- chore: Adjust encryption page design (Christian Kußowski)
|
||||
- chore: Adjust input bar button design (Christian Kußowski)
|
||||
- chore: Adjust material dialog button design (krille-chan)
|
||||
- chore: Adjust padding for status msg list (Christian Kußowski)
|
||||
- chore: Adjust status header design (krille-chan)
|
||||
- chore: Better display rooms without known messages (Christian Kußowski)
|
||||
- chore: Better routing to space id (Christian Kußowski)
|
||||
- chore: Correctly remove knockRestricted from possible join rules (Christian Kußowski)
|
||||
- chore: Fix load config.json (Christian Kußowski)
|
||||
- chore: Go back to pub.dev matrix dep (Christian Kußowski)
|
||||
- chore: Hide restricted and knock restricted for unsupported room versions (Christian Kußowski)
|
||||
- chore: Hide topic if empty and cannot be changed (Christian Kußowski)
|
||||
- chore: Improve chat details icon color design (Christian Kußowski)
|
||||
- chore: Improve ignore list UX (Christian Kußowski)
|
||||
- chore: Leave invites and DM rooms when blocking a user (Christian Kußowski)
|
||||
- chore: Make privacy url not configurable (Christian Kußowski)
|
||||
- chore: Make progress indicators rounder (Christian Kußowski)
|
||||
- chore: Mention rebases (Christian Kußowski)
|
||||
- chore: Move emote settings button to chat popup menu (Christian Kußowski)
|
||||
- chore: Move encryption button to input row (Christian Kußowski)
|
||||
- chore: Revert "refactor: Make ChatListItem cache lasteventbody for better performance" (Christian Kußowski)
|
||||
- chore: Translate iOS notifications into german (Christian Kußowski)
|
||||
- chore: Try out refactored user device keys update method (Christian Kußowski)
|
||||
- chore: Update matrix dart sdk (Christian Kußowski)
|
||||
- chore: use time format based on system settings (kaanelloed)
|
||||
- ci: Build only for arm64 (Christian Kußowski)
|
||||
- refactor: Make ChatListItem cache lasteventbody for better performance (Christian Kußowski)
|
||||
- refactor: Remove unused directories (Christian Kußowski)
|
||||
- refactor: Rename models for matrix spec 1.16 (Christian Kußowski)
|
||||
- refactor: Replace flutter typeahead with autocomplete to fix (Christian Kußowski)
|
||||
- refactor: Use AppSettings enum based configuration everywhere and fix load from json on web (Christian Kußowski)
|
||||
- build: Flutter upgrade 3.35.5 (Christian Kußowski)
|
||||
- build: Matrix version 3.0.0 (Christian Kußowski)
|
||||
- build: Remove dependency for telephony (Christian Kußowski)
|
||||
- build: Remove openssl dependency (Christian Kußowski)
|
||||
- build: Use correct fcm_shared_isolate version (Christian Kußowski)
|
||||
- build: Use correct version of vodozemac for web build (Christian Kußowski)
|
||||
|
||||
## v2.1.1
|
||||
Bugfix release to trigger flatpak arm64 release again.
|
||||
|
||||
- build: (deps): bump actions/checkout from 4 to 5 (dependabot[bot])
|
||||
- build: (deps): bump app_links from 6.4.0 to 6.4.1 (dependabot[bot])
|
||||
- build: (deps): bump file_picker from 10.2.3 to 10.3.1 (dependabot[bot])
|
||||
- build: (deps): bump msix from 3.16.10 to 3.16.12 (dependabot[bot])
|
||||
- build: (deps): bump package_info_plus from 8.3.0 to 8.3.1 (dependabot[bot])
|
||||
- build: (deps): bump share_plus from 11.0.0 to 11.1.0 (dependabot[bot])
|
||||
- build: Also build linux on github runners (Christian Kußowski)
|
||||
- build: Update macos podfile (Christian Kußowski)
|
||||
- chore: Follow up subtitle font style (Christian Kußowski)
|
||||
- chore: Slightly adjust font sizes and design (Christian Kußowski)
|
||||
- chore(translations): Translated using Weblate (Chinese (Traditional Han script)) (miullu)
|
||||
- chore(translations): Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye)
|
||||
- chore(translations): Translated using Weblate (Polish) (Piotr Orzechowski)
|
||||
- feat: support xdp selector for linux (ShootingStarDragons)
|
||||
- fix: Follow up fix rectangle avatars (Christian Kußowski)
|
||||
- refactor: Remove broken push error reporter (Christian Kußowski)
|
||||
|
||||
## v2.1.0
|
||||
FluffyChat 2.1.0 brings support for room version 12 and a lot of bugfixes, updated translations and performance improvements. Also chat state events are now collapsed by default.
|
||||
|
||||
- feat: Collapse all state events by default (Christian Kußowski)
|
||||
- feat(linux/notify): support avatar icon (ShootingStarDragons)
|
||||
- build: (deps): bump archive from 3.6.1 to 4.0.7 (dependabot[bot])
|
||||
- build: (deps): bump chewie from 1.11.3 to 1.12.1 (dependabot[bot])
|
||||
- build: (deps): bump desktop_drop from 0.4.4 to 0.6.1 (dependabot[bot])
|
||||
- build: (deps): bump device_info_plus from 10.1.2 to 11.5.0 (dependabot[bot])
|
||||
- build: (deps): bump dynamic_color from 1.7.0 to 1.8.1 (dependabot[bot])
|
||||
- build: (deps): bump file_picker from 10.2.0 to 10.2.1 (dependabot[bot])
|
||||
- build: (deps): bump file_picker from 8.3.7 to 10.2.0 (dependabot[bot])
|
||||
- build: (deps): bump flutter_foreground_task from 6.5.0 to 9.1.0 (dependabot[bot])
|
||||
- build: (deps): bump flutter_local_notifications from 19.3.0 to 19.4.0 (dependabot[bot])
|
||||
- build: (deps): bump flutter_map from 6.2.1 to 8.1.1 (dependabot[bot])
|
||||
- build: (deps): bump flutter_map from 8.1.1 to 8.2.1 (dependabot[bot])
|
||||
- build: (deps): bump flutter_native_splash from 2.4.4 to 2.4.6 (dependabot[bot])
|
||||
- build: (deps): bump flutter_webrtc from 0.12.12+hotfix.1 to 1.0.0 (dependabot[bot])
|
||||
- build: (deps): bump geolocator from 13.0.4 to 14.0.2 (dependabot[bot])
|
||||
- build: (deps): bump go_router from 15.1.2 to 16.0.0 (dependabot[bot])
|
||||
- build: (deps): bump go_router from 16.0.0 to 16.1.0 (dependabot[bot])
|
||||
- build: (deps): bump just_audio from 0.9.46 to 0.10.4 (dependabot[bot])
|
||||
- build: (deps): bump matrix from 1.0.1 to 1.1.0 (dependabot[bot])
|
||||
- build: (deps): bump mime from 1.0.6 to 2.0.0 (dependabot[bot])
|
||||
- build: (deps): bump msix from 3.16.9 to 3.16.10 (dependabot[bot])
|
||||
- build: (deps): bump permission_handler from 11.4.0 to 12.0.1 (dependabot[bot])
|
||||
- build: (deps): bump pretty_qr_code from 3.4.0 to 3.5.0 (dependabot[bot])
|
||||
- build: (deps): bump share_plus from 10.1.4 to 11.0.0 (dependabot[bot])
|
||||
- build: (deps): bump sqflite_common_ffi from 2.3.5 to 2.3.6 (dependabot[bot])
|
||||
- build: (deps): bump sqlcipher_flutter_libs from 0.6.6 to 0.6.7 (dependabot[bot])
|
||||
- build: (deps): bump unifiedpush from 5.0.2 to 6.0.2 (dependabot[bot])
|
||||
- build: (deps): bump url_launcher from 6.3.1 to 6.3.2 (dependabot[bot])
|
||||
- build: Update Flutter 3.32.8 (Christian Kußowski)
|
||||
- build: Upgrade emoji picker flutter (Christian Kußowski)
|
||||
- build: Use gradle in kotlin (Christian Kußowski)
|
||||
- build: Use macos-latest for debug ios job (Christian Kußowski)
|
||||
- chore: Add CI workflow for thank you message after issue got completed (Christian Kußowski)
|
||||
- chore: Add dependabot to code owners for pubspec (Christian Kußowski)
|
||||
- chore: Add ISC as compatible license to aGPLv3 (Christian Kußowski)
|
||||
- chore: Better error handling for push notifications (Christian Kußowski)
|
||||
- chore: Bump Flutter version in pubspec.lock (Rafał Hirsch)
|
||||
- chore: do format (ShootingStarDragons)
|
||||
- chore: Fix snapcraft build (krille-chan)
|
||||
- chore: Nicer own reaction color design (Christian Kußowski)
|
||||
- chore: Remove double quotes from screenshot filenames (Christian Kußowski)
|
||||
- chore: Remove lifecyclestate logs (Christian Kußowski)
|
||||
- chore: Remove unused workflow (krille-chan)
|
||||
- chore: Set height for screenshots in readme (krille-chan)
|
||||
- chore: Set text message max length to 16384 but make it configurable (Christian Kußowski)
|
||||
- chore: Update height for screenshots in readme (krille-chan)
|
||||
- chore: Update screenshots in readme (krille-chan)
|
||||
- fix: Add flexible to file messages to prevent long name overflow (Kelrap)
|
||||
- fix: Avoid using MediaQuery.of() (imnotlxy)
|
||||
- fix: Config viewer not updating state (Christian Kußowski)
|
||||
- fix: Delete database correctly after corruption (krille-chan)
|
||||
- fix: Design glitches in sticker dialog (Christian Kußowski)
|
||||
- fix: limit characters and lines so redact message can't be too long (avashilling)
|
||||
- fix: LoadingSnackBar consistently remains visible until the upload is complete (JaWeee)
|
||||
- fix: notification clicked still cannot jump (ShootingStarDragons)
|
||||
- fix: open chat from notification (ShootingStarDragons)
|
||||
- fix: Open database crashes on start (krille-chan)
|
||||
- fix: Open external account management when trying to delete devices (Christian Kußowski)
|
||||
- fix: Use retry http client (Christian Kußowski)
|
||||
- fix: Workaround for reversed width and height of compressed videos sent from Android (Christian Kußowski)
|
||||
- refactor: Add support for Room version 12 via matrix dart sdk update
|
||||
- refactor: Better UX for accepting declining invite (krille-chan)
|
||||
- refactor: ignore bubble gradient when using system high contrast mode (Christian Kußowski)
|
||||
- refactor: Make notification avatars rounded (krille-chan)
|
||||
- refactor: Remove unused dependencies (krille-chan)
|
||||
- chore(translations): Translated using Weblate (Basque) (xabirequejo)
|
||||
- chore(translations): Translated using Weblate (Belarusian) (Alex Katon)
|
||||
- chore(translations): Translated using Weblate (German) (Christian)
|
||||
- chore(translations): Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye)
|
||||
- chore(translations): Translated using Weblate (Portuguese (Brazil)) (LucasMZ)
|
||||
- chore(translations): Translated using Weblate (Spanish) (Fuan200)
|
||||
- chore(translations): Translated using Weblate (Tamil) (தமிழ்நேரம்)
|
||||
- chore(translations): Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- Translated using Weblate (Arabic) (LucasMZ)
|
||||
- Translated using Weblate (Basque) (xabirequejo)
|
||||
- Translated using Weblate (Chinese (Simplified Han script)) (大王叫我来巡山)
|
||||
- Translated using Weblate (Chinese (Traditional Han script)) (miullu)
|
||||
- Translated using Weblate (Czech) (LucasMZ)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (English) (LucasMZ)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Galician) (josé m)
|
||||
- Translated using Weblate (German) (nautilusx)
|
||||
- Translated using Weblate (Hebrew) (LucasMZ)
|
||||
- Translated using Weblate (Hungarian) (LucasMZ)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Irish) (Aindriú Mac Giolla Eoin)
|
||||
- Translated using Weblate (Irish) (LucasMZ)
|
||||
- Translated using Weblate (Italian) (Angelo Schirinzi)
|
||||
- Translated using Weblate (Italian) (LucasMZ)
|
||||
- Translated using Weblate (Latvian) (Edgars Andersons)
|
||||
- Translated using Weblate (Latvian) (LucasMZ)
|
||||
- Translated using Weblate (Norwegian Bokmål) (Christian)
|
||||
- Translated using Weblate (Norwegian Bokmål) (Frank Paul Silye)
|
||||
- Translated using Weblate (Persian) (Alireza Rashidi)
|
||||
- Translated using Weblate (Polish) (Piotr Orzechowski)
|
||||
- Translated using Weblate (Portuguese (Brazil)) (LucasMZ)
|
||||
- Translated using Weblate (Portuguese) (Ana Elisa Ramos)
|
||||
- Translated using Weblate (Portuguese) (LucasMZ)
|
||||
- Translated using Weblate (Russian) (LucasMZ)
|
||||
- Translated using Weblate (Tamil) (தமிழ்நேரம்)
|
||||
- Translated using Weblate (Tamil) (LucasMZ)
|
||||
- Translated using Weblate (Telugu) (LucasMZ)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- Translated using Weblate (Ukrainian) (LucasMZ)
|
||||
- Translated using Weblate (Vietnamese) (LucasMZ)
|
||||
|
||||
## v2.0.0
|
||||
|
||||
This version migrates to Vodozemac and Matrix Dart SDK 1.0.0. This is a breaking
|
||||
change. The user should not notice the migration at all but downgrading from
|
||||
v2.0.0 to a previous version is not possible without losing the session.
|
||||
|
||||
- fix: Do not set read markers for sending events (Christian Kußowski)
|
||||
- fix: fix compile error related to MxcImage (gilice)
|
||||
- fix: Forward last version of events when forwarding (Christian Kußowski)
|
||||
- fix: Ban button displayed for already banned users (Christian Kußowski)
|
||||
- fix: Route back to room list after leaving a chat (Christian Kußowski)
|
||||
- build: Switch to matrix sdk 1.0.0 (Christian Kußowski)
|
||||
- build: Upgrade flutter to 3.32.2 (krille-chan)
|
||||
- build: Update to flutter 3.32.4 (Christian Kußowski)
|
||||
- chore: Add missing mounted check (Christian Kußowski)
|
||||
- chore: highlight select mode actions (Christian Kußowski)
|
||||
- refactor: sdk 1.0 (Christian Kußowski)
|
||||
- refactor: New message context menu (Christian Kußowski)
|
||||
- refactor: Nicer popupmenus (Christian Kußowski)
|
||||
- Translated using Weblate (Spanish) (Kimby)
|
||||
|
||||
## v1.27.0
|
||||
- feat: Add confirmation dialog before accepting invite (krille-chan)
|
||||
- feat: Add feature flag for refresh tokens (Christian Kußowski)
|
||||
- feat: add setting for whether to show space navigation rail on mobile (ggurdin)
|
||||
- feat: Background audio player (Christian Kußowski)
|
||||
- feat: Check markdown checkboxes in messages (krille-chan)
|
||||
- feat: Create lists with checkboxes via + menu (krille-chan)
|
||||
- feat: Limit height of text messages and expand if selected (krille-chan)
|
||||
- feat: Move videoplayer into multi image viewer (Christian Kußowski)
|
||||
- feat: Show all supported image-/video-files when sending images or videos (MoonlightWave-12)
|
||||
- feat: Show WebM-videos when choosing video-files for sending (MoonlightWave-12)
|
||||
- fix: Add missing mounted check to mxcImage (Christian Kußowski)
|
||||
- fix: App crash on page navigation with open popup menu (Christian Kußowski)
|
||||
- fix: App crashes on window resize in chat (krille-chan)
|
||||
- fix: Change `PNGs` to `PNG` for consistency in file-selector (MoonlightWave-12)
|
||||
- fix: Crash when going to settings in desktop mode (krille-chan)
|
||||
- Fix: Fix jagged avatar edges Use anti-alias Clipping allowing for round Avatar circles (martin)
|
||||
- fix: Join new room after room upgrade (krille-chan)
|
||||
- fix: Keep state of text input dialogs (Christian Kußowski)
|
||||
- fix: Localizations (krille-chan)
|
||||
- fix: No crash on logging out in client chooser button (Christian Kußowski)
|
||||
- fix: Show WebP-images with a file-extension written in lower-case (MoonlightWave-12)
|
||||
- build: Update matrix dart sdk 0.40.2 (Christian Kußowski)
|
||||
- build: Update record package (Christian Kußowski)
|
||||
- build: Update shared preferences android (krille-chan)
|
||||
- build: Upgrade to flutter 3.32.1 (Christian Kußowski)
|
||||
- build: Use workaround for flutter secure storage on linux (krille-chan)
|
||||
- chore: Crop shortcut file on android and cache it (krille-chan)
|
||||
- chore: Display loading dialog when preparing voice message (Christian Kußowski)
|
||||
- chore: Format lib/utils/file_selector.dart (MoonlightWave-12)
|
||||
- chore: Let users decide for the title in error reporter (Christian Kußowski)
|
||||
- chore: make space nav bar narrower on mobile and ensure space nav bar matches user's theme (ggurdin)
|
||||
- chore: Nicer checkboxes (Christian Kußowski)
|
||||
- chore: Preload server file config before upload files (Christian Kußowski)
|
||||
- chore: Remove custom errorwidgetbuilder (Christian Kußowski)
|
||||
- chore: Remove unused translations (Christian Kußowski)
|
||||
- chore: Simplify voiceMessage getter (Christian Kußowski)
|
||||
- chore: Update voice message localization (Christian Kußowski)
|
||||
- refactor: Always use HtmlMessage (krille-chan)
|
||||
- refactor: Reduce notification avatar size to 128 (krille-chan)
|
||||
- Added translation using Weblate (Cantonese (Traditional Han script)) (Mike Evans)
|
||||
- Added translation using Weblate (Danish) (Øjvind Fritjof Arnfred)
|
||||
- Added translation using Weblate (Yue (yue_HK)) (Mike Evans)
|
||||
- Translated using Weblate (Arabic) (abdelbasset jabrane)
|
||||
- Translated using Weblate (Basque) (xabirequejo)
|
||||
- Translated using Weblate (Cantonese (Traditional Han script)) (Mike Evans)
|
||||
- Translated using Weblate (Catalan) (Marc Pina Artigas)
|
||||
- Translated using Weblate (Chinese (Simplified Han script)) (大王叫我来巡山)
|
||||
- Translated using Weblate (Chinese (Simplified Han script)) (Mike Evans)
|
||||
- Translated using Weblate (Chinese (Traditional Han script)) (Mike Evans)
|
||||
- Translated using Weblate (Chinese (Traditional Han script)) (miullu)
|
||||
- Translated using Weblate (Danish) (Øjvind Fritjof Arnfred)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Finnish) (sevonj)
|
||||
- Translated using Weblate (Galician) (josé m)
|
||||
- Translated using Weblate (German) (Christian)
|
||||
- Translated using Weblate (German) (Jana)
|
||||
- Translated using Weblate (German) (JSchmerling)
|
||||
- Translated using Weblate (Hebrew) (DavidEl-Natan)
|
||||
- Translated using Weblate (Hungarian) (H Tamás)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Irish) (Aindriú Mac Giolla Eoin)
|
||||
- Translated using Weblate (Italian) (Angelo Schirinzi)
|
||||
- Translated using Weblate (Latvian) (ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝))
|
||||
- Translated using Weblate (Latvian) (Edgars Andersons)
|
||||
- Translated using Weblate (Polish) (Piotr Orzechowski)
|
||||
- Translated using Weblate (Portuguese (Brazil)) (Pedro Alves)
|
||||
- Translated using Weblate (Russian) (Yurt Page)
|
||||
- Translated using Weblate (Ukrainian) (Bezruchenko Simon)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
|
||||
## v1.26.1
|
||||
|
||||
Updates the Matrix Dart SDK to fix multiple issues where messages can be missing in the timeline.
|
||||
|
||||
- feat: Reenable archive feature after various fixes landed in sdk (krille-chan)
|
||||
- build: Update matrix dart sdk to 0.40.0 (Christian Kußowski)
|
||||
- chore: Adjust new chat page design (krille-chan)
|
||||
- chore: Display count of invited in members page (krille-chan)
|
||||
- chore: Do not load timeline while sync processing (Krille)
|
||||
- chore: Do not store event from push in database (Krille)
|
||||
- chore: Only show joined members in members list by default (Krille)
|
||||
- chore: Remove matrix notification workflow (Krille)
|
||||
- fix(docs): escape tag (Sophie L)
|
||||
- fix: Crash when opening settings in column mode from popup menu (krille-chan)
|
||||
- refactor: Display thread messages like replies as a thread fallback (Krille)
|
||||
|
||||
## v1.26.0
|
||||
|
||||
- feat: Add advanced configuration page (Krille)
|
||||
|
|
@ -30,7 +718,7 @@
|
|||
- chore: Use Cupertino Activity Indicator in ChatEventList (krille-chan)
|
||||
- chore: Use other join endpoint for room upgrades (Krille)
|
||||
- fix(macos): update dependencies to make the build work (Rafał Hirsch)
|
||||
- fix: Add missing <s> html tag to render (Krille)
|
||||
- fix: Add missing \<s> html tag to render (Krille)
|
||||
- fix: Consistent element padding between server picker and login view (xegim)
|
||||
- fix: Index of numbered lists are off (Krille)
|
||||
- fix: never use a transition on the shell route (Rafał Hirsch)
|
||||
|
|
|
|||
172
CONTRIBUTING.md
Normal file
172
CONTRIBUTING.md
Normal file
|
|
@ -0,0 +1,172 @@
|
|||
# Contributing to FluffyChat
|
||||
Contributions are always welcome. Yet we might lack manpower to review all of them in time.
|
||||
|
||||
To improve the process please make sure that you read the following guidelines carefully:
|
||||
|
||||
## Contributing Guidelines
|
||||
|
||||
1. Always create a Pull Request for any changes.
|
||||
2. Whenever possible please make sure that your Pull Request only contains **one** commit. Cases where multiple commits make sense are very rare.
|
||||
3. Do not add merge commits. Use rebases.
|
||||
4. Every Pull Request should change only one thing. For bigger changes it is often better to split them up in multiple Pull Requests.
|
||||
5. [Sign your commits](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits).
|
||||
6. Format the commit message as [Conventional Commits](https://www.conventionalcommits.org).
|
||||
7. Format (`flutter format lib`) and sort impots (`dart run import_sorter:main --no-comments`) in all code files.
|
||||
8. For bigger or complex changes (more than a couple of code lines) write an issue or refer to an existing issue and ask for approval from the maintainers (@krille-chan) **before** starting to implement it. This way you reduce the risk that your Pull Request get's declined.
|
||||
9. Prefer simple and easy to maintain solutions over complexity and fancy ones.
|
||||
|
||||
# Code Style
|
||||
|
||||
FluffyChat tries to be as minimal as possible even in the code style. We try to keep the code clean, simple and easy to read. The source code of the app is under `/lib` with the main entry point `/lib/main.dart`.
|
||||
|
||||
<!-- editorconfig-checker-disable -->
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
||||
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
||||
**Table of Contents**
|
||||
|
||||
- [Directory Structure:](#directory-structure)
|
||||
- [Separation of Controllers and Views](#separation-of-controllers-and-views)
|
||||
- [Formatting](#formatting)
|
||||
- [Code Analyzis](#code-analyzis)
|
||||
|
||||
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
<!-- editorconfig-checker-enable -->
|
||||
|
||||
### Directory Structure:
|
||||
|
||||
|
||||
- /lib
|
||||
- /config
|
||||
- app_config.dart
|
||||
- ...Constants, styles and other configurations
|
||||
- /utils
|
||||
- handy_function.dart
|
||||
- ...Helper functions and extensions
|
||||
- /pages
|
||||
- /chat
|
||||
- chat.dart
|
||||
- chat_view.dart
|
||||
- /chat_list
|
||||
- chat_list.dart
|
||||
- chat_list_view.dart
|
||||
- ...The pages of the app separated in Controllers and Views
|
||||
- /widgets
|
||||
- /layouts
|
||||
- ...Custom widgets created for this project
|
||||
- main.dart
|
||||
|
||||
|
||||
Most of the business model is in the Famedly Matrix Dart SDK. We try to not keep a model inside of the source code but extend it under `/utils`.
|
||||
|
||||
### Separation of Controllers and Views
|
||||
|
||||
We split views and controller logic with stateful widgets as controller where the build method just builds a stateless widget which receives the state as the only parameter. A common controller would look like this:
|
||||
|
||||
```dart
|
||||
// /lib/controller/enter_name_controller.dart
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class EnterName extends StatefulWidget {
|
||||
@override
|
||||
EnterNameController createState() => EnterNameController();
|
||||
}
|
||||
|
||||
class EnterNameController extends State<EnterName> {
|
||||
final TextEditingController textEditingController = TextEditingController();
|
||||
String name = 'Unknown';
|
||||
|
||||
/// Changes the name with the content in the textfield. If the textfield is
|
||||
/// empty, this breaks up and displays a SnackBar.
|
||||
void setNameAction() {
|
||||
if (textEditingController.text.isEmpty) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text('You have not entered your name'),
|
||||
),
|
||||
);
|
||||
return;
|
||||
}
|
||||
setState(() => name = textEditingController.text);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => EnterNameView(this);
|
||||
}
|
||||
```
|
||||
|
||||
So we have a controller for a `EnterName` view which as a `TextEditingController`, a state `name` and an action `void setNameAction()`. Actions must always be methods of a type, that we dont need to pass parameters in the corresponding view class and must have dartdoc comments.
|
||||
|
||||
The view class could look like this:
|
||||
|
||||
```dart
|
||||
// /lib/views/enter_name_view.dart
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class EnterNameView extends StatelessWidget {
|
||||
final EnterNameController controller;
|
||||
|
||||
const EnterNameView(this.controller, {Key key}) : super(key: key);
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text('Your name: ${controller.name}'),
|
||||
),
|
||||
body: Center(
|
||||
child: TextField(
|
||||
controller: controller.textEditingController,
|
||||
),
|
||||
),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: controller.setNameAction,
|
||||
child: Icon(Icons.save),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Views should just contain code which describes the view. All other parameters or logic should be in the controller. The job of the view class is just to take the current state and build the widget tree and pipe the callbacks back. If there is any calulation necessary which is not solveable as a simple if-else or switch statement, it should be done in an external helper function unter `/lib/utils/`.
|
||||
|
||||
All file names must be lower_snake_case. All views must have a `View` suffix and all controller must have a `Controller` suffix. Widgets may have a controller too but they should pass the callbacks back to the view where possible. Calling one line methods directly in the view is only recommended if there is no need to pass a parameter.
|
||||
|
||||
To perform an action on state initialization we use the initState method:
|
||||
```dart
|
||||
@override
|
||||
void initState() {
|
||||
// TODO: implement initState
|
||||
super.initState();
|
||||
}
|
||||
```
|
||||
|
||||
And the dispose method to perform an action on disposing:
|
||||
```dart
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
super.dispose();
|
||||
}
|
||||
```
|
||||
|
||||
To run code after the widget was created first we use the WidgetBindings in the initState:
|
||||
```dart
|
||||
@override
|
||||
void initState() {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
// Do something when build is finished
|
||||
});
|
||||
super.initState();
|
||||
}
|
||||
```
|
||||
|
||||
### Formatting
|
||||
|
||||
We do not allow code with wrong formatting. Please run `flutter format lib` if your IDE doesn't do this automatically.
|
||||
|
||||
### Code Analyzis
|
||||
|
||||
We do not allow codes with dart errors or warnings. We use the [flutter_lints](https://pub.dev/packages/flutter_lints) package for static code analysis with additional rules under `analysis_options.yaml`.
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
FROM ghcr.io/cirruslabs/flutter as builder
|
||||
RUN sudo apt update && sudo apt install curl wget jq -y
|
||||
RUN sudo apt update && sudo apt install curl wget jq build-essential -y
|
||||
|
||||
WORKDIR /tmp
|
||||
RUN wget https://github.com/mikefarah/yq/releases/download/v4.40.5/yq_linux_amd64.tar.gz
|
||||
|
|
@ -8,6 +8,9 @@ RUN mv yq_linux_amd64 /usr/bin/yq
|
|||
|
||||
COPY . /app
|
||||
WORKDIR /app
|
||||
RUN curl https://sh.rustup.rs -sSf | bash -s -- -y
|
||||
ENV PATH="/root/.cargo/bin:${PATH}"
|
||||
RUN rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
|
||||
RUN ./scripts/prepare-web.sh
|
||||
COPY config.* /app/
|
||||
RUN flutter pub get
|
||||
|
|
|
|||
17
PRIVACY.md
17
PRIVACY.md
|
|
@ -7,8 +7,9 @@ FluffyChat is available on Android, iOS, Linux and as a web version. Desktop ver
|
|||
* [Encryption](#encryption)
|
||||
* [App Permissions](#app-permissions)
|
||||
* [Push Notifications](#push-notifications)
|
||||
* [PlayStore Safety Standards](#playstore-safety)
|
||||
|
||||
## Matrix<a id="matrix"/>
|
||||
## <a id="matrix" href="#matrix">#</a> Matrix
|
||||
FluffyChat uses the Matrix protocol. This means that FluffyChat is just a client that can be connected to any compatible matrix server. The respective data protection agreement of the server selected by the user then applies.
|
||||
|
||||
For convenience, one or more servers are set as default that the FluffyChat developers consider trustworthy. The developers of FluffyChat do not guarantee their trustworthiness. Before the first communication, users are informed which server they are connecting to.
|
||||
|
|
@ -17,17 +18,17 @@ FluffyChat only communicates with the selected server and with [OpenStreetMap](h
|
|||
|
||||
More information is available at: [https://matrix.org](https://matrix.org)
|
||||
|
||||
## Database<a id="database"/>
|
||||
## <a id="database" href="#database">#</a> Database
|
||||
FluffyChat caches some data received from the server in a local sqflite database on the device of the user. On web indexedDB is used. FluffyChat always tries to encrypt the database by using SQLCipher and stores the encryption key in the [Secure Storage](https://pub.dev/packages/flutter_secure_storage) of the device.
|
||||
|
||||
More information is available at: [https://pub.dev/packages/sqflite](https://pub.dev/packages/sqflite) and [https://pub.dev/packages/sqlcipher_flutter_libs](https://pub.dev/packages/sqlcipher_flutter_libs)
|
||||
|
||||
## Encryption<a id="encryption"/>
|
||||
## <a id="encryption" href="#encryption">#</a> Encryption
|
||||
All communication of substantive content between Fluffychat and any server is done in secure way, using transport encryption to protect it.
|
||||
|
||||
FluffyChat also uses End-To-End-Encryption by using [libolm](https://gitlab.matrix.org/matrix-org/olm) and enables it by default for private chats.
|
||||
FluffyChat also uses End-To-End-Encryption by using [Vodozemac](https://github.com/matrix-org/vodozemac) and enables it by default for private chats.
|
||||
|
||||
## App Permissions<a id="app-permissions"/>
|
||||
## <a id="app-permissions" href="#app-permissions">#</a> App Permissions
|
||||
|
||||
The permissions are the same on Android and iOS but may differ in the name. This are the Android Permissions:
|
||||
|
||||
|
|
@ -50,7 +51,7 @@ The user is able to send files from the device's file system.
|
|||
#### Location
|
||||
FluffyChat makes it possible to share the current location via the chat. When the user shares their location, FluffyChat uses the device location service and sends the geo-data via Matrix.
|
||||
|
||||
## Push Notifications<a id="push-notifications"/>
|
||||
## <a id="push-notifications" href="#push-notifications">#</a> Push Notifications
|
||||
FluffyChat uses the Firebase Cloud Messaging service for push notifications on Android and iOS. This takes place in the following steps:
|
||||
1. The matrix server sends the push notification to the FluffyChat Push Gateway
|
||||
2. The FluffyChat Push Gateway forwards the message in a different format to Firebase Cloud Messaging
|
||||
|
|
@ -58,7 +59,7 @@ FluffyChat uses the Firebase Cloud Messaging service for push notifications on A
|
|||
4. The device receives the push notification from Firebase Cloud Messaging and displays it as a notification
|
||||
|
||||
The source code of the push gateway can be viewed here:
|
||||
[https://gitlab.com/famedly/services/famedly-push-gateway](https://gitlab.com/famedly/services/famedly-push-gateway)
|
||||
[https://github.com/krille-chan/fluffygate](https://github.com/krille-chan/fluffygate)
|
||||
|
||||
`event_id_only` is used as the format for the push notification. A typical push notification therefore only contains:
|
||||
- Event ID
|
||||
|
|
@ -94,7 +95,7 @@ A typical push notification could look like this:
|
|||
FluffyChat sets the `event_id_only` flag at the Matrix Server. This server is then responsible to send the correct data.
|
||||
|
||||
|
||||
# Explanation of FluffyChat's Compliance with Google Play Store's Safety Standards
|
||||
# <a id="playstore-safety" href="#playstore-safety">#</a> Explanation of FluffyChat's Compliance with Google Play Store's Safety Standards
|
||||
|
||||
FluffyChat is committed to promoting a safe and respectful environment for all users. As a Matrix client, FluffyChat connects users to various Matrix servers. Please note that FluffyChat does not host or manage any servers directly, and as such, we do not have the capability to enforce content moderation or deletion within the app itself.
|
||||
|
||||
|
|
|
|||
67
README.md
67
README.md
|
|
@ -1,11 +1,11 @@
|
|||

|
||||
|
||||
[FluffyChat](https://fluffychat.im) is an open source, nonprofit and cute [[matrix](https://matrix.org)] client written in [Flutter](https://flutter.dev). The goal of the app is to create an easy to use instant messenger which is open source and accessible for everyone.
|
||||
[FluffyChat](https://fluffy.chat) is an open source, nonprofit and cute [[matrix](https://matrix.org)] client written in [Flutter](https://flutter.dev). The goal of the app is to create an easy to use instant messenger which is open source and accessible for everyone.
|
||||
|
||||
### Links:
|
||||
|
||||
- 🌐 [[Weblate] Translate FluffyChat into your language](https://hosted.weblate.org/projects/fluffychat/)
|
||||
- 🌍 [[m] Join the community](https://matrix.to/#/#fluffychat:matrix.org)
|
||||
- 🌍 [[m] Join the community](https://matrix.to/#/#fluffy-space:matrix.org)
|
||||
- 📰 [[Mastodon] Get updates on social media](https://troet.cafe/@krille)
|
||||
- 🖥️ [[Famedly] Server hosting and professional support](https://famedly.com/kontakt)
|
||||
- 💝 [[Liberapay] Support FluffyChat development](https://de.liberapay.com/KrilleChritzelius)
|
||||
|
|
@ -14,7 +14,8 @@
|
|||
|
||||
### Screenshots:
|
||||
|
||||

|
||||
<img src="https://github.com/krille-chan/fluffychat-website/blob/main/src/assets/screenshots/mobile.png?raw=true" height="300">
|
||||
<img src="https://github.com/krille-chan/fluffychat-website/blob/main/src/assets/screenshots/desktop.png?raw=true" height="300">
|
||||
|
||||
# Features
|
||||
|
||||
|
|
@ -43,13 +44,67 @@
|
|||
|
||||
Please visit the website for installation instructions:
|
||||
|
||||
- https://fluffychat.im
|
||||
- https://fluffy.chat
|
||||
|
||||
# How to build
|
||||
|
||||
Please visit the [Wiki](https://github.com/krille-chan/fluffychat/wiki) for build instructions:
|
||||
1. To build FluffyChat you need [Flutter](https://flutter.dev) and [Rust](https://www.rust-lang.org/tools/install)
|
||||
|
||||
- https://github.com/krille-chan/fluffychat/wiki/How-To-Build
|
||||
2. Clone the repo:
|
||||
```
|
||||
git clone https://github.com/krille-chan/fluffychat.git
|
||||
cd fluffychat
|
||||
```
|
||||
3. Choose your target platform below and enable support for it.
|
||||
3.1 If you want, enable Googles Firebase Cloud Messaging:
|
||||
|
||||
`./scripts/add-firebase-messaging.sh`
|
||||
|
||||
4. Debug with: `flutter run`
|
||||
|
||||
### Android
|
||||
|
||||
* Build with: `flutter build apk`
|
||||
|
||||
### iOS / iPadOS
|
||||
|
||||
* Have a Mac with Xcode installed, and set up for Xcode-managed app signing
|
||||
* If you want automatic app installation to connected devices, make sure you have Apple Configurator installed, with the Automation Tools (`cfgutil`) enabled
|
||||
* Set a few environment variables
|
||||
* FLUFFYCHAT_NEW_TEAM: the Apple Developer team that your certificates should live under
|
||||
* FLUFFYCHAT_NEW_GROUP: the group you want App IDs and such to live under (ie: com.example.fluffychat)
|
||||
* FLUFFYCHAT_INSTALL_IPA: set to `1` if you want the IPA to be deployed to connected devices after building, otherwise unset
|
||||
* Run `./scripts/build-ios.sh`
|
||||
|
||||
### Web
|
||||
|
||||
* Build with:
|
||||
```bash
|
||||
./scripts/prepare-web.sh # To install Vodozemac
|
||||
flutter build web --release
|
||||
```
|
||||
|
||||
* Optionally configure by serving a `config.json` at the same path as fluffychat.
|
||||
An example can be found at `config.sample.json`. All values there are optional.
|
||||
**Please only the values, you really need**. If you e.g. only want
|
||||
to change the default homeserver, then only modify the `defaultHomeserver` key.
|
||||
|
||||
### Desktop (Linux, Windows, macOS)
|
||||
|
||||
* Enable Desktop support in Flutter: https://flutter.dev/desktop
|
||||
|
||||
#### Install custom dependencies (Linux)
|
||||
|
||||
```bash
|
||||
sudo apt install libjsoncpp1 libsecret-1-dev libsecret-1-0 librhash0 libwebkit2gtk-4.0-dev lld
|
||||
```
|
||||
|
||||
* Build with one of these:
|
||||
```bash
|
||||
flutter build linux --release
|
||||
flutter build windows --release
|
||||
flutter build macos --release
|
||||
```
|
||||
|
||||
|
||||
# Special thanks
|
||||
|
|
|
|||
15
SECURITY.md
Normal file
15
SECURITY.md
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
# Security Policy
|
||||
|
||||
If you believe you have discovered a security vulnerability in this project, **do not open a public issue**.
|
||||
|
||||
To report a security issue responsibly, please go to the Security tab or visit:
|
||||
|
||||
https://github.com/krille-chan/fluffychat/security/advisories/new
|
||||
|
||||
The following information can help us address the issue:
|
||||
|
||||
- Clear steps to reproduce the vulnerability
|
||||
- The software version you are using
|
||||
- The affected platforms
|
||||
|
||||
We appreciate your report and will respond as quickly as possible. Please note that this project is maintained by volunteers and is provided without guarantees.
|
||||
|
|
@ -2,7 +2,6 @@ include: package:flutter_lints/flutter.yaml
|
|||
|
||||
linter:
|
||||
rules:
|
||||
- camel_case_types
|
||||
- avoid_print
|
||||
- constant_identifier_names
|
||||
- prefer_final_locals
|
||||
|
|
@ -10,45 +9,68 @@ linter:
|
|||
- sort_pub_dependencies
|
||||
- require_trailing_commas
|
||||
- omit_local_variable_types
|
||||
- cancel_subscriptions
|
||||
- always_declare_return_types
|
||||
- avoid_void_async
|
||||
- no_adjacent_strings_in_list
|
||||
- test_types_in_equals
|
||||
- throw_in_finally
|
||||
- unnecessary_statements
|
||||
- avoid_bool_literals_in_conditional_expressions
|
||||
- prefer_single_quotes
|
||||
- prefer_const_declarations
|
||||
- unnecessary_lambdas
|
||||
- combinators_ordering
|
||||
- noop_primitive_operations
|
||||
- unnecessary_null_checks
|
||||
- unnecessary_null_in_if_null_operators
|
||||
- unnecessary_to_list_in_spreads
|
||||
- use_is_even_rather_than_modulo
|
||||
- use_super_parameters
|
||||
# Flutter specific:
|
||||
- use_colored_box
|
||||
|
||||
analyzer:
|
||||
plugins:
|
||||
- dart_code_linter
|
||||
errors:
|
||||
todo: ignore
|
||||
use_build_context_synchronously: ignore
|
||||
exclude:
|
||||
- lib/generated_plugin_registrant.dart
|
||||
- lib/l10n/*.dart
|
||||
|
||||
dart_code_metrics:
|
||||
metrics:
|
||||
cyclomatic-complexity: 20
|
||||
number-of-arguments: 4
|
||||
maximum-nesting-level: 5
|
||||
source-lines-of-code: 50
|
||||
maintainability-index: 40
|
||||
dart_code_linter:
|
||||
rules:
|
||||
- no-boolean-literal-compare
|
||||
- no-empty-block
|
||||
- prefer-conditional-expressions
|
||||
# Dart specific:
|
||||
- avoid-dynamic
|
||||
- avoid-redundant-async
|
||||
- avoid-unnecessary-type-assertions
|
||||
- avoid-unnecessary-type-casts
|
||||
- avoid-unrelated-type-assertions
|
||||
- no-equal-then-else
|
||||
- no-magic-number:
|
||||
severity: style
|
||||
- avoid-late-keyword:
|
||||
severity: style
|
||||
- avoid-non-null-assertion:
|
||||
severity: style
|
||||
- avoid-unused-parameters
|
||||
- binary-expression-operand-order
|
||||
- avoid-unnecessary-setstate
|
||||
- prefer-first
|
||||
- prefer-last
|
||||
- prefer-immediate-return
|
||||
- prefer-enums-by-name
|
||||
- avoid-unnecessary-conditionals
|
||||
# TODO:
|
||||
# - member-ordering
|
||||
# - avoid-global-state
|
||||
# - prefer-match-file-name
|
||||
# - avoid-banned-imports:
|
||||
# entries:
|
||||
# - paths: ['some/folder/.*\.dart', 'another/folder/.*\.dart']
|
||||
# deny: ['package:flutter/material.dart']
|
||||
# message: 'Do not import Flutter Material Design library, we should not depend on it!'
|
||||
# - no-magic-number:
|
||||
# allowed: [-1, 0, 1,2,4,6,8,12,16,32,40,56,64]
|
||||
# allow-only-once: true
|
||||
# Flutter specific:
|
||||
- prefer-media-query-direct-access
|
||||
- avoid-wrapping-in-padding
|
||||
- prefer-const-border-radius
|
||||
- prefer-single-widget-per-file:
|
||||
ignore-private-widgets: true
|
||||
- prefer-extracting-callbacks
|
||||
metrics-exclude:
|
||||
- test/**
|
||||
rules-exclude:
|
||||
- test/**
|
||||
anti-patterns:
|
||||
- long-method
|
||||
- long-parameter-list
|
||||
- prefer-correct-edge-insets-constructor
|
||||
- avoid-returning-widgets
|
||||
# TODO:
|
||||
# - prefer-single-widget-per-file:
|
||||
# ignore-private-widgets: true
|
||||
# - prefer-extracting-callbacks
|
||||
|
|
|
|||
|
|
@ -1,107 +0,0 @@
|
|||
plugins {
|
||||
id "com.android.application"
|
||||
id "kotlin-android"
|
||||
id "dev.flutter.flutter-gradle-plugin"
|
||||
//id "com.google.gms.google-services"
|
||||
}
|
||||
|
||||
def localProperties = new Properties()
|
||||
def localPropertiesFile = rootProject.file('local.properties')
|
||||
if (localPropertiesFile.exists()) {
|
||||
localPropertiesFile.withReader('UTF-8') { reader ->
|
||||
localProperties.load(reader)
|
||||
}
|
||||
}
|
||||
|
||||
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
|
||||
if (flutterVersionCode == null) {
|
||||
flutterVersionCode = '1'
|
||||
}
|
||||
|
||||
def flutterVersionName = localProperties.getProperty('flutter.versionName')
|
||||
if (flutterVersionName == null) {
|
||||
flutterVersionName = '1.0'
|
||||
}
|
||||
|
||||
def keystoreProperties = new Properties()
|
||||
def keystorePropertiesFile = rootProject.file('key.properties')
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk = 35
|
||||
namespace = "chat.fluffy.fluffychat"
|
||||
|
||||
sourceSets {
|
||||
main.java.srcDirs += 'src/main/kotlin'
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
disable 'InvalidPackage'
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId "chat.fluffy.fluffychat"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 35
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
multiDexEnabled true
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
release {
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
keyAlias keystoreProperties['keyAlias']
|
||||
keyPassword keystoreProperties['keyPassword']
|
||||
storeFile file(keystoreProperties['storeFile'])
|
||||
storePassword keystoreProperties['storePassword']
|
||||
}
|
||||
}
|
||||
}
|
||||
buildTypes {
|
||||
debug {
|
||||
signingConfig signingConfigs.debug
|
||||
versionNameSuffix "-debug"
|
||||
}
|
||||
release {
|
||||
minifyEnabled false
|
||||
shrinkResources false
|
||||
signingConfig signingConfigs.release
|
||||
}
|
||||
}
|
||||
// https://stackoverflow.com/a/77494454/8222484
|
||||
packagingOptions {
|
||||
pickFirst 'lib/x86/libc++_shared.so'
|
||||
pickFirst 'lib/x86_64/libc++_shared.so'
|
||||
pickFirst 'lib/armeabi-v7a/libc++_shared.so'
|
||||
pickFirst 'lib/arm64-v8a/libc++_shared.so'
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
targetCompatibility JavaVersion.VERSION_17
|
||||
coreLibraryDesugaringEnabled true
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
flutter {
|
||||
source '../..'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
//implementation 'com.google.firebase:firebase-messaging:19.0.1' // Workaround for https://github.com/microg/android_packages_apps_GmsCore/issues/313#issuecomment-617651698
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
|
||||
}
|
||||
|
||||
configurations.all {
|
||||
exclude group: 'com.google.android.gms'
|
||||
}
|
||||
95
android/app/build.gradle.kts
Normal file
95
android/app/build.gradle.kts
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
import java.util.Properties
|
||||
import java.io.FileInputStream
|
||||
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
id("kotlin-android")
|
||||
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
|
||||
id("dev.flutter.flutter-gradle-plugin")
|
||||
}
|
||||
|
||||
if (file("google-services.json").exists()) {
|
||||
apply(plugin = "com.google.gms.google-services")
|
||||
}
|
||||
|
||||
dependencies {
|
||||
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4") // For flutter_local_notifications // Workaround for: https://github.com/MaikuB/flutter_local_notifications/issues/2286
|
||||
implementation("androidx.core:core-ktx:1.17.0") // For Android Auto
|
||||
}
|
||||
|
||||
|
||||
// Workaround for https://pub.dev/packages/unifiedpush#the-build-fails-because-of-duplicate-classes
|
||||
configurations.all {
|
||||
// Use the latest version published: https://central.sonatype.com/artifact/com.google.crypto.tink/tink-android
|
||||
val tink = "com.google.crypto.tink:tink-android:1.17.0"
|
||||
// You can also use the library declaration catalog
|
||||
// val tink = libs.google.tink
|
||||
resolutionStrategy {
|
||||
force(tink)
|
||||
dependencySubstitution {
|
||||
substitute(module("com.google.crypto.tink:tink")).using(module(tink))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
android {
|
||||
namespace = "chat.fluffy.fluffychat"
|
||||
compileSdk = flutter.compileSdkVersion
|
||||
ndkVersion = flutter.ndkVersion
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_11
|
||||
targetCompatibility = JavaVersion.VERSION_11
|
||||
isCoreLibraryDesugaringEnabled = true
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_11.toString()
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
create("release") {
|
||||
keyAlias = "dummyAlias"
|
||||
keyPassword = "dummyPassword"
|
||||
storeFile = file("dummy.keystore")
|
||||
storePassword = "dummyStorePassword"
|
||||
}
|
||||
}
|
||||
|
||||
val keystoreProperties = Properties()
|
||||
val keystorePropertiesFile = rootProject.file("key.properties")
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
|
||||
signingConfigs.getByName("release").apply {
|
||||
keyAlias = keystoreProperties["keyAlias"] as String
|
||||
keyPassword = keystoreProperties["keyPassword"] as String
|
||||
storeFile = keystoreProperties["storeFile"]?.let { file(it) }
|
||||
storePassword = keystoreProperties["storePassword"] as String
|
||||
}
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "chat.fluffy.fluffychat"
|
||||
minSdk = flutter.minSdkVersion
|
||||
targetSdk = flutter.targetSdkVersion
|
||||
versionCode = flutter.versionCode
|
||||
versionName = flutter.versionName
|
||||
ndk { // Workaround for https://github.com/flutter/flutter/issues/162153#issuecomment-2612443642
|
||||
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86_64", "x86")
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
signingConfig = signingConfigs.getByName("release")
|
||||
isMinifyEnabled = true
|
||||
isShrinkResources = true
|
||||
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
flutter {
|
||||
source = "../.."
|
||||
}
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
{
|
||||
"project_info": {
|
||||
"project_number": "865731724731",
|
||||
"project_id": "fluffychat-ef3e8",
|
||||
"storage_bucket": "fluffychat-ef3e8.appspot.com"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:865731724731:android:ec427b3b1dcd4a1e64309e",
|
||||
"android_client_info": {
|
||||
"package_name": "chat.fluffy.fluffychat"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "865731724731-od6969v178ul9970elgacpt936v5t7qg.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyBLdZpGSPjcinikB4lAU6awW_h88NG17Sg"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "865731724731-od6969v178ul9970elgacpt936v5t7qg.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
},
|
||||
{
|
||||
"client_id": "865731724731-ofdr7e6m04murgb1bvchlj9oaos0q5i3.apps.googleusercontent.com",
|
||||
"client_type": 2,
|
||||
"ios_info": {
|
||||
"bundle_id": "im.fluffychat.app"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
||||
|
|
@ -17,14 +17,10 @@
|
|||
<uses-permission android:name="android.permission.BLUETOOTH" />
|
||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.BIND_TELECOM_CONNECTION_SERVICE"/>
|
||||
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE"
|
||||
android:maxSdkVersion="29" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
|
||||
|
||||
<uses-permission android:name="android.permission.CALL_PHONE" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<!-- To make app compatible with tablets -->
|
||||
<uses-feature android:name="android.hardware.camera" android:required="false"/>
|
||||
<uses-feature android:name="android.hardware.microphone" android:required="false" />
|
||||
|
||||
<uses-sdk
|
||||
tools:overrideLibrary="io.wazo.callkeep, net.touchcapture.qr.flutterqr, com.cloudwebrtc.webrtc, org.webrtc, com.it_nomads.fluttersecurestorage, com.pichillilorenzo.flutter_inappwebview, com.example.video_compress, com.otaliastudios.transcoder, com.otaliastudios.opengl, com.kineapps.flutter_file_dialog, com.llfbandit.record, com.pravera.flutter_foreground_task"/>
|
||||
|
|
@ -38,7 +34,7 @@
|
|||
>
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:launchMode="singleInstance"
|
||||
android:launchMode="singleTask"
|
||||
android:theme="@style/LaunchTheme"
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||
android:hardwareAccelerated="true"
|
||||
|
|
@ -110,7 +106,7 @@
|
|||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="im.fluffychat" android:host="login"/>
|
||||
<data android:scheme="im.fluffychat" android:path="/login"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
|
@ -125,29 +121,13 @@
|
|||
android:foregroundServiceType="camera|microphone|mediaProjection">
|
||||
</service>
|
||||
|
||||
<service android:name="io.wazo.callkeep.VoiceConnectionService"
|
||||
android:label="Wazo"
|
||||
android:foregroundServiceType="camera|microphone|mediaProjection"
|
||||
android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.telecom.ConnectionService" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
<!-- From flutter_local_notifications package for notification actions -->
|
||||
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ActionBroadcastReceiver" />
|
||||
|
||||
<receiver android:name="org.unifiedpush.flutter.connector.UnifiedPushReceiver"
|
||||
tools:replace="android:enabled"
|
||||
android:enabled="false">
|
||||
</receiver>
|
||||
|
||||
<receiver android:exported="false" android:enabled="true" android:name=".UnifiedPushReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="org.unifiedpush.flutter.connector.MESSAGE"/>
|
||||
<action android:name="org.unifiedpush.flutter.connector.UNREGISTERED"/>
|
||||
<action android:name="org.unifiedpush.flutter.connector.NEW_ENDPOINT"/>
|
||||
<action android:name="org.unifiedpush.flutter.connector.REGISTRATION_FAILED" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
<!-- To make notifications available in Android Auto -->
|
||||
<meta-data
|
||||
android:name="com.google.android.gms.car.application"
|
||||
android:resource="@xml/automotive_app_desc"/>
|
||||
|
||||
<!-- Don't delete the meta-data below.
|
||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
||||
|
|
|
|||
|
|
@ -4,13 +4,11 @@ import io.flutter.embedding.android.FlutterActivity
|
|||
import io.flutter.embedding.engine.FlutterEngine
|
||||
|
||||
import android.content.Context
|
||||
import androidx.multidex.MultiDex
|
||||
|
||||
class MainActivity : FlutterActivity() {
|
||||
|
||||
override fun attachBaseContext(base: Context) {
|
||||
super.attachBaseContext(base)
|
||||
MultiDex.install(this)
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,23 +0,0 @@
|
|||
package chat.fluffy.fluffychat
|
||||
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.embedding.engine.dart.DartExecutor
|
||||
import org.unifiedpush.flutter.connector.UnifiedPushReceiver
|
||||
|
||||
import android.content.Context
|
||||
|
||||
class UnifiedPushReceiver : UnifiedPushReceiver() {
|
||||
override fun getEngine(context: Context): FlutterEngine {
|
||||
var engine = MainActivity.engine
|
||||
if (engine == null) {
|
||||
engine = MainActivity.provideEngine(context)
|
||||
engine.localizationPlugin.sendLocalesToFlutter(
|
||||
context.resources.configuration
|
||||
)
|
||||
engine.dartExecutor.executeDartEntrypoint(
|
||||
DartExecutor.DartEntrypoint.createDefault()
|
||||
)
|
||||
}
|
||||
return engine
|
||||
}
|
||||
}
|
||||
3
android/app/src/main/res/xml/automotive_app_desc.xml
Normal file
3
android/app/src/main/res/xml/automotive_app_desc.xml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<automotiveApp>
|
||||
<uses name="notification" />
|
||||
</automotiveApp>
|
||||
|
|
@ -6,6 +6,7 @@
|
|||
<locale android:name="bo"/>
|
||||
<locale android:name="ca"/>
|
||||
<locale android:name="cs"/>
|
||||
<locale android:name="da"/>
|
||||
<locale android:name="de"/>
|
||||
<locale android:name="el"/>
|
||||
<locale android:name="en"/>
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
<locale android:name="it"/>
|
||||
<locale android:name="ja"/>
|
||||
<locale android:name="ka"/>
|
||||
<locale android:name="kab"/>
|
||||
<locale android:name="ko"/>
|
||||
<locale android:name="lt"/>
|
||||
<locale android:name="lv"/>
|
||||
|
|
@ -42,6 +44,7 @@
|
|||
<locale android:name="ru"/>
|
||||
<locale android:name="sk"/>
|
||||
<locale android:name="sl"/>
|
||||
<locale android:name="sq"/>
|
||||
<locale android:name="sr"/>
|
||||
<locale android:name="sv"/>
|
||||
<locale android:name="ta"/>
|
||||
|
|
@ -49,7 +52,9 @@
|
|||
<locale android:name="th"/>
|
||||
<locale android:name="tr"/>
|
||||
<locale android:name="uk"/>
|
||||
<locale android:name="uz"/>
|
||||
<locale android:name="vi"/>
|
||||
<locale android:name="yue"/>
|
||||
<locale android:name="zh"/>
|
||||
<locale android:name="zh"/>
|
||||
</locale-config>
|
||||
|
|
|
|||
|
|
@ -1,17 +0,0 @@
|
|||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
rootProject.buildDir = '../build'
|
||||
|
||||
subprojects {
|
||||
project.buildDir = "${rootProject.buildDir}/${project.name}"
|
||||
project.evaluationDependsOn(":app")
|
||||
}
|
||||
|
||||
tasks.register("clean", Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
||||
21
android/build.gradle.kts
Normal file
21
android/build.gradle.kts
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get()
|
||||
rootProject.layout.buildDirectory.value(newBuildDir)
|
||||
|
||||
subprojects {
|
||||
val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
|
||||
project.layout.buildDirectory.value(newSubprojectBuildDir)
|
||||
}
|
||||
subprojects {
|
||||
project.evaluationDependsOn(":app")
|
||||
}
|
||||
|
||||
tasks.register<Delete>("clean") {
|
||||
delete(rootProject.layout.buildDirectory)
|
||||
}
|
||||
|
|
@ -1,68 +0,0 @@
|
|||
FluffyChat 1.6.0 features a lot of bug fixes and improvements. The code base has been
|
||||
simplified and the drawer on the chat list page got a come-back. Some new features like
|
||||
the space hierarchy and session dump have been implemented.
|
||||
|
||||
- feat: Added monochrome entry for themed icon support in Android 13 (James Reilly)
|
||||
- feat: Display timeline of messages in android notification (Christian Pauly)
|
||||
- feat: Emoji related fixes (TheOneWithTheBraid)
|
||||
- feat: Implement deleting pushers in app (Christian Pauly)
|
||||
- feat: New material 3 design (Christian Pauly)
|
||||
- feat: Redesign bootsstrap and offer secure storage support (Christian Pauly)
|
||||
- feat: Send multiple images at once (Christian Pauly)
|
||||
- feat: implement session dump (TheOneWithTheBraid)
|
||||
- feat: implement space hierarchy (TheOneWithTheBraid)
|
||||
- feat: introduce extended integration tests (TheOneWithTheBraid)
|
||||
- feat: libhandy integration (TheOneWithTheBraid)
|
||||
- fix: Clearing push triggered when only one room got seen (Christian Pauly)
|
||||
- fix: Dont display loading dialog when adding reaction (Christian Pauly)
|
||||
- fix: Follow up for spaces hierarchy (TheOneWithTheBraid)
|
||||
- fix: Missing null checks in chat details view (Christian Pauly)
|
||||
- fix: Non FCM Android builds crash on start (Christian Pauly)
|
||||
- fix: Permission chooser dialog on iOS (Christian Pauly)
|
||||
- fix: Set avatar on only single action available (Christian Pauly)
|
||||
- fix: Sharing on iOS and iPad (Christian Pauly)
|
||||
- fix: Unread bubble is invisible in dark mode (Christian Pauly)
|
||||
- fix: appimage builds (TheOneWithTheBraid)
|
||||
- fix: only use custom http client on android (Jayesh Nirve)
|
||||
- fix: pass isrg cert to http client (Jayesh Nirve)
|
||||
- refactor: Chat view (Christian Pauly)
|
||||
- refactor: Encryption button (Christian Pauly)
|
||||
- refactor: Remove duplicated imports (Christian Pauly)
|
||||
- refactor: Remove legacy store (Christian Pauly)
|
||||
- refactor: Remove presence status feature (Christian Pauly)
|
||||
- refactor: Simplify MxcImage and replace CachedNetworkImage (Christian Pauly)
|
||||
- refactor: Switch to Hive Collections DB (Christian Pauly)
|
||||
- refactor: move start chat FAB to implementation file (TheOneWithTheBraid)
|
||||
- Translated using Weblate (Catalan) (Alfonso Montero López)
|
||||
- Translated using Weblate (Catalan) (Auri B.P)
|
||||
- Translated using Weblate (Chinese (Simplified)) (Eric)
|
||||
- Translated using Weblate (Croatian) (Milo Ivir)
|
||||
- Translated using Weblate (Dutch) (Jelv)
|
||||
- Translated using Weblate (English) (Raatty)
|
||||
- Translated using Weblate (Estonian) (Priit Jõerüüt)
|
||||
- Translated using Weblate (Finnish) (Aminda Suomalainen)
|
||||
- Translated using Weblate (Galician) (Xosé M)
|
||||
- Translated using Weblate (Indonesian) (Linerly)
|
||||
- Translated using Weblate (Persian) (Amir Hossein Maher)
|
||||
- Translated using Weblate (Polish) (Przemysław Romanik)
|
||||
- Translated using Weblate (Russian) (Nikita Epifanov)
|
||||
- Translated using Weblate (Turkish) (Oğuz Ersen)
|
||||
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
|
||||
- chore: Add border to avatars (Christian Pauly)
|
||||
- chore: Add fancy hero animations (Christian Pauly)
|
||||
- chore: Adjust appbar design (Christian Pauly)
|
||||
- chore: Adjust design (Christian Pauly)
|
||||
- chore: Adjust search bar design (Christian Pauly)
|
||||
- chore: Always display header elevation in chat (Christian Pauly)
|
||||
- chore: Design follow up fixes (Christian Pauly)
|
||||
- chore: Design follow up fixes (Christian Pauly)
|
||||
- chore: Disable integration tests without runners (Krille Fear)
|
||||
- chore: Enhance invitiation UX (Christian Pauly)
|
||||
- chore: Make push helper more fail safe (Christian Pauly)
|
||||
- chore: Make push helper more stable (Christian Pauly)
|
||||
- chore: Minor design improvements (Christian Pauly)
|
||||
- chore: Pinned events design (Christian Pauly)
|
||||
- chore: Remove permission handler dependency and increase compileSdkVersion (Christian Pauly)
|
||||
- chore: Switch to flutter 3.0.5 (Krille Fear)
|
||||
- chore: Update SDK (Christian Pauly)
|
||||
- chore: remove snapping sheet (TheOneWithTheBraid)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
FluffyChat 2.5.0 introduces a new homeserver picker for onboarding,
|
||||
better image compression performance and several smaller new features,
|
||||
design adjustments and bug fixes.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
#Mon Mar 17 08:36:03 CET 2025
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
|
|
|||
|
|
@ -1,26 +0,0 @@
|
|||
pluginManagement {
|
||||
def flutterSdkPath = {
|
||||
def properties = new Properties()
|
||||
file("local.properties").withInputStream { properties.load(it) }
|
||||
def flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
|
||||
return flutterSdkPath
|
||||
}()
|
||||
|
||||
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
|
||||
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||
id "com.android.application" version "8.7.3" apply false
|
||||
id "org.jetbrains.kotlin.android" version "2.1.10" apply false
|
||||
// id "com.google.gms.google-services" version "4.3.8" apply false
|
||||
}
|
||||
|
||||
include ":app"
|
||||
28
android/settings.gradle.kts
Normal file
28
android/settings.gradle.kts
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
pluginManagement {
|
||||
val flutterSdkPath = run {
|
||||
val properties = java.util.Properties()
|
||||
file("local.properties").inputStream().use { properties.load(it) }
|
||||
val flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||
require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
|
||||
flutterSdkPath
|
||||
}
|
||||
|
||||
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
|
||||
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
|
||||
id("com.android.application") version "8.9.1" apply false
|
||||
id("org.jetbrains.kotlin.android") version "2.1.0" apply false
|
||||
if (file("app/google-services.json").exists()) {
|
||||
id("com.google.gms.google-services") version "4.3.8" apply false
|
||||
}
|
||||
}
|
||||
|
||||
include(":app")
|
||||
3
appimage/.gitignore
vendored
3
appimage/.gitignore
vendored
|
|
@ -1,3 +0,0 @@
|
|||
FluffyChat.AppDir
|
||||
*.AppImage
|
||||
*.AppImage.zsync
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
exec ./fluffychat
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
[Desktop Entry]
|
||||
Type=Application
|
||||
Version=1.0
|
||||
Name=FluffyChat
|
||||
Comment=Matrix Client. Chat with your friends
|
||||
Exec=AppRun
|
||||
Icon=fluffychat
|
||||
Terminal=false
|
||||
Categories=Network;Chat;InstantMessaging;X-Matrix;
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
# FluffyChat AppImage
|
||||
|
||||
FluffyChat is provided as AppImage too. To Download, visit fluffychat.im.
|
||||
|
||||
## Building
|
||||
|
||||
- Ensure you install `appimagetool`
|
||||
|
||||
```shell
|
||||
flutter build linux
|
||||
|
||||
# copy binaries to appimage dir
|
||||
cp -r build/linux/{x64,arm64}/release/bundle appimage/FluffyChat.AppDir
|
||||
cd appimage
|
||||
|
||||
# prepare AppImage files
|
||||
cp FluffyChat.desktop FluffyChat.AppDir/
|
||||
mkdir -p FluffyChat.AppDir/usr/share/icons
|
||||
cp ../assets/logo.svg FluffyChat.AppDir/fluffychat.svg
|
||||
cp AppRun FluffyChat.AppDir
|
||||
|
||||
# build the AppImage
|
||||
appimagetool FluffyChat.AppDir
|
||||
```
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -1 +0,0 @@
|
|||
{}
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,832 +0,0 @@
|
|||
{
|
||||
"alias": "მეტსახელი",
|
||||
"@alias": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"appLockDescription": "პინკოდის გამოყენების გარეშე აპლიკაციის ბლოკირება",
|
||||
"@appLockDescription": {},
|
||||
"commandHint_hug": "მეგობრული ჩახუტვის გაგზავნა",
|
||||
"@commandHint_hug": {},
|
||||
"areYouSure": "დარწმუნებული ხართ?",
|
||||
"@areYouSure": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"areYouSureYouWantToLogout": "დარწმუნებული ხართ, რომ გამოსვლა გსურთ?",
|
||||
"@areYouSureYouWantToLogout": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"hugContent": "{senderName} მეგობრულად გეხუტება",
|
||||
"@hugContent": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"senderName": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"askSSSSSign": "სხვა მომხმარებლის დადასტურებლად, გთხოვთ, ჩაწეროთ თქვენი ან საიდუმლო ფრაზა, ან აღდგენის გასაღები.",
|
||||
"@askSSSSSign": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"autoplayImages": "ანიმირებული სტიკერებისა და ემოჯების ავტომატური ჩართვა",
|
||||
"@autoplayImages": {
|
||||
"type": "String",
|
||||
"placeholder": {}
|
||||
},
|
||||
"banFromChat": "ჩატიდან გაგდება და ბლოკირება",
|
||||
"@banFromChat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"banned": "დაბლოკილია",
|
||||
"@banned": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"badServerLoginTypesException": "ამ სერვერს აქვს შესვლის მეთოდების მხარდაჭერა:\n{serverVersions}\nმაგრამ ამ აპლიკაციას აქვს მხარდაჭერა მხოლოდ:\n{supportedVersions}",
|
||||
"@badServerLoginTypesException": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"serverVersions": {
|
||||
"type": "String"
|
||||
},
|
||||
"supportedVersions": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"sendOnEnter": "გაგზავნა enter-ის დაჭერისას",
|
||||
"@sendOnEnter": {},
|
||||
"bannedUser": "{username} დაბლოკა {targetName}",
|
||||
"@bannedUser": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
},
|
||||
"targetName": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"blockDevice": "მოწყობილების ბლოკირება",
|
||||
"@blockDevice": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"blocked": "დაბლოკილია",
|
||||
"@blocked": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"botMessages": "ბოტის შეტყობინებები",
|
||||
"@botMessages": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"cancel": "გაუქმება",
|
||||
"@cancel": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changedTheHistoryVisibilityTo": "{username} შეცვალა ისტორიის ხილვადობა: {rules}",
|
||||
"@changedTheHistoryVisibilityTo": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
},
|
||||
"rules": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheJoinRules": "{username} გაწევრიანების წესები შეცვალა",
|
||||
"@changedTheJoinRules": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheProfileAvatar": "{username} შეცვალა პროფილის ფოტო",
|
||||
"@changedTheProfileAvatar": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"chat": "ჩატი",
|
||||
"@chat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeYourAvatar": "პროფილის ფოტოს შეცვლა",
|
||||
"@changeYourAvatar": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"yourChatBackupHasBeenSetUp": "თქვენი ჩატის სარეზერვო საშუალება კონფიგურირებული იქნა.",
|
||||
"@yourChatBackupHasBeenSetUp": {},
|
||||
"channelCorruptedDecryptError": "დაშიფვრა დაზიანდა",
|
||||
"@channelCorruptedDecryptError": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatBackupDescription": "თქვენი ძველი შეტყობინებები დაცულია აღდგების გასაღებით. არ დაკარგოთ ის.",
|
||||
"@chatBackupDescription": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_discardsession": "სესიის გაუქმება",
|
||||
"@commandHint_discardsession": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /discardsession"
|
||||
},
|
||||
"commandHint_invite": "მოცემული მომხმარებლის მოწვევა ამ ოთახში",
|
||||
"@commandHint_invite": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /invite"
|
||||
},
|
||||
"commandHint_plain": "არაფორმატირებული ტექსტის გაგზავნა",
|
||||
"@commandHint_plain": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /plain"
|
||||
},
|
||||
"commandHint_send": "ტექსტის გაგზავნა",
|
||||
"@commandHint_send": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /send"
|
||||
},
|
||||
"commandMissing": "{command} არაა ბრძანება.",
|
||||
"@commandMissing": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"command": {
|
||||
"type": "String"
|
||||
}
|
||||
},
|
||||
"description": "State that {command} is not a valid /command."
|
||||
},
|
||||
"confirm": "დადასტურება",
|
||||
"@confirm": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"connect": "დაკავშირება",
|
||||
"@connect": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"countParticipants": "{count} მონაწილე",
|
||||
"@countParticipants": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"createGroup": "ჯგუფის შექმნა",
|
||||
"@createGroup": {},
|
||||
"deactivateAccountWarning": "ეს გააუქმებს თქვენს ანგარიშს. ამის გაუქმება შეუძლებელია. დარწმუნებული ხართ?",
|
||||
"@deactivateAccountWarning": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"devices": "მოწყობილებები",
|
||||
"@devices": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"darkTheme": "ბნელი",
|
||||
"@darkTheme": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatPermissions": "ჩატის უფლებები",
|
||||
"@chatPermissions": {},
|
||||
"dateAndTimeOfDay": "{date}, {timeOfDay}",
|
||||
"@dateAndTimeOfDay": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"date": {
|
||||
"type": "String"
|
||||
},
|
||||
"timeOfDay": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editRoomAliases": "ოთახის მეტსახელების შეცვლა",
|
||||
"@editRoomAliases": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteExists": "ეს ემოცია უკვე არსებობს!",
|
||||
"@emoteExists": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteInvalid": "ემოციის არასწორი მოკლე კოდი!",
|
||||
"@emoteInvalid": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"importNow": "იმპორტი",
|
||||
"@importNow": {},
|
||||
"importEmojis": "ემოჯის იმპორტი",
|
||||
"@importEmojis": {},
|
||||
"importFromZipFile": "იმპორტი .zip ფაილიდან",
|
||||
"@importFromZipFile": {},
|
||||
"exportEmotePack": "ემოციების .zip ფაილში ექსპორტი",
|
||||
"@exportEmotePack": {},
|
||||
"replace": "ჩანაცვლება",
|
||||
"@replace": {},
|
||||
"accept": "თანხმობა",
|
||||
"@accept": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"acceptedTheInvitation": "👍 {username} მიიღო მოწვევა",
|
||||
"@acceptedTheInvitation": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"account": "ანგარიში",
|
||||
"@account": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"addEmail": "ელ.ფოსტის დამატება",
|
||||
"@addEmail": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"confirmMatrixId": "გთხოვთ, დაადასტუროთ თქვენი Matrix ID ანგარიშის წაშლისათვის.",
|
||||
"@confirmMatrixId": {},
|
||||
"addChatDescription": "ჩატის აღწერილობის დამატება...",
|
||||
"@addChatDescription": {},
|
||||
"addToSpace": "სივრცეში დამატება",
|
||||
"@addToSpace": {},
|
||||
"admin": "ადმინი",
|
||||
"@admin": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"all": "ყველა",
|
||||
"@all": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"allChats": "ყველა ჩატი",
|
||||
"@allChats": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_cuddle": "ჩახუტების გაგზავნა",
|
||||
"@commandHint_cuddle": {},
|
||||
"answeredTheCall": "{senderName} უპასუხა ზარს",
|
||||
"@answeredTheCall": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"senderName": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"anyoneCanJoin": "ყველას შეუძლია გაწევრიანება",
|
||||
"@anyoneCanJoin": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"appLock": "აპლიკაციის ბლოკირება",
|
||||
"@appLock": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"archive": "არქივი",
|
||||
"@archive": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_googly": "გამოშტერილი თვალების გაგზავნა",
|
||||
"@commandHint_googly": {},
|
||||
"googlyEyesContent": "{senderName} გამოშტერილ თვალებს გიგზავნის",
|
||||
"@googlyEyesContent": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"senderName": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"cuddleContent": "{senderName} გეხუტება",
|
||||
"@cuddleContent": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"senderName": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"areGuestsAllowedToJoin": "შეუძლიათ თუ არა სტუმარ მომხმარებლებს გაწევრიანება",
|
||||
"@areGuestsAllowedToJoin": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"askVerificationRequest": "მიიღებთ {username} დადასტურების მოთხოვნას?",
|
||||
"@askVerificationRequest": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"sendTypingNotifications": "წერის შეტყობინების გაგზავნა",
|
||||
"@sendTypingNotifications": {},
|
||||
"cantOpenUri": "ვერ იხსნება ბმული {uri}",
|
||||
"@cantOpenUri": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"uri": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changeDeviceName": "მოწყობილების გადარქმევა",
|
||||
"@changeDeviceName": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changedTheChatAvatar": "{username} ჩატის ფოტო შეცვალა",
|
||||
"@changedTheChatAvatar": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheChatDescriptionTo": "{username} ჩატის ახალი აღწერილობა დააყენა: '{description}'",
|
||||
"@changedTheChatDescriptionTo": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
},
|
||||
"description": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheChatNameTo": "{username} ჩატი გადაარქვა: '{chatname}'",
|
||||
"@changedTheChatNameTo": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
},
|
||||
"chatname": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheChatPermissions": "{username} ჩატის უფლებები შეცვალა",
|
||||
"@changedTheChatPermissions": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheGuestAccessRules": "{username} შეცვალა სტუმრების წვდომის წესები",
|
||||
"@changedTheGuestAccessRules": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheGuestAccessRulesTo": "{username} შეცვალა სტუმრების წვდომის წესები: {rules}",
|
||||
"@changedTheGuestAccessRulesTo": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
},
|
||||
"rules": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheHistoryVisibility": "{username} შეცვალა ისტორიის ხილვადობა",
|
||||
"@changedTheHistoryVisibility": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheJoinRulesTo": "{username} გაწევრიანების წესები შეცვალა: {joinRules}",
|
||||
"@changedTheJoinRulesTo": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
},
|
||||
"joinRules": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheRoomAliases": "{username} ოთახის მეტსახელები შეცვალა",
|
||||
"@changedTheRoomAliases": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheRoomInvitationLink": "{username} მოწვევის ბმული შეცვალა",
|
||||
"@changedTheRoomInvitationLink": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changePassword": "პაროლის შეცვლა",
|
||||
"@changePassword": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheHomeserver": "სახლის სერვერის შეცვლა",
|
||||
"@changeTheHomeserver": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheme": "სტილის შეცვლა",
|
||||
"@changeTheme": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheNameOfTheGroup": "ჯგუფის გადარქმევა",
|
||||
"@changeTheNameOfTheGroup": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatBackup": "ჩატის სარეზერვო საშუალება",
|
||||
"@chatBackup": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatDetails": "ჩატის დეტალები",
|
||||
"@chatDetails": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatHasBeenAddedToThisSpace": "ჩატი დაემატა ამ სივრცეს",
|
||||
"@chatHasBeenAddedToThisSpace": {},
|
||||
"chats": "ჩატები",
|
||||
"@chats": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chooseAStrongPassword": "ძლიერი პაროლი აარჩიეთ",
|
||||
"@chooseAStrongPassword": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"clearArchive": "არქივის გაწმენდა",
|
||||
"@clearArchive": {},
|
||||
"close": "დახურვა",
|
||||
"@close": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"commandHint_markasgroup": "აღნიშვნა, როგორც ჯგუფის",
|
||||
"@commandHint_markasgroup": {},
|
||||
"commandHint_ban": "მოცემული მომხმარებლის ბლოკირება ამ ოთახში",
|
||||
"@commandHint_ban": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /ban"
|
||||
},
|
||||
"commandHint_clearcache": "ქეშის გაწმენდა",
|
||||
"@commandHint_clearcache": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /clearcache"
|
||||
},
|
||||
"commandHint_join": "მოცემულ ოთახში გაწევრიანება",
|
||||
"@commandHint_join": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /join"
|
||||
},
|
||||
"commandHint_kick": "მოცემული მომხმარებლის წაშლა ამ ოთახიდან",
|
||||
"@commandHint_kick": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /kick"
|
||||
},
|
||||
"commandHint_leave": "ამ ოთახიდან გასვლა",
|
||||
"@commandHint_leave": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /leave"
|
||||
},
|
||||
"commandHint_me": "აღწერეთ თქვენი თავი",
|
||||
"@commandHint_me": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /me"
|
||||
},
|
||||
"commandHint_unban": "ამ ოთახში მომხმარებლისგან ბლოკის მოხსნა",
|
||||
"@commandHint_unban": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /unban"
|
||||
},
|
||||
"commandInvalid": "არასწორი ბრძანება",
|
||||
"@commandInvalid": {
|
||||
"type": "String"
|
||||
},
|
||||
"compareEmojiMatch": "გთხოვთ, შეადაროთ ეს ემოჯი",
|
||||
"@compareEmojiMatch": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"compareNumbersMatch": "გთხოვთ, შეადაროთ ეს რიცხვები",
|
||||
"@compareNumbersMatch": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"configureChat": "ჩატის კონფიგურაცია",
|
||||
"@configureChat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"contactHasBeenInvitedToTheGroup": "კონტაქტი მოწვეული იქნა ჯგუფში",
|
||||
"@contactHasBeenInvitedToTheGroup": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"containsUserName": "შეიცავს სახელს",
|
||||
"@containsUserName": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"copiedToClipboard": "კოპირებულია ბუფერში",
|
||||
"@copiedToClipboard": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"copy": "კოპირება",
|
||||
"@copy": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"copyToClipboard": "კოპირება ბუფერში",
|
||||
"@copyToClipboard": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"couldNotDecryptMessage": "შეტყობინების გაშიფვრის შეცდომა: {error}",
|
||||
"@couldNotDecryptMessage": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"create": "შექმნა",
|
||||
"@create": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"createdTheChat": "💬 {username} შექმნა ჩატი",
|
||||
"@createdTheChat": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"createNewSpace": "ახალი სივრცე",
|
||||
"@createNewSpace": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"currentlyActive": "ახლა აქტიურია",
|
||||
"@currentlyActive": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"dateWithoutYear": "{day}-{month}",
|
||||
"@dateWithoutYear": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"month": {
|
||||
"type": "String"
|
||||
},
|
||||
"day": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dateWithYear": "{day}-{month}-{year}",
|
||||
"@dateWithYear": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"year": {
|
||||
"type": "String"
|
||||
},
|
||||
"month": {
|
||||
"type": "String"
|
||||
},
|
||||
"day": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"delete": "წაშლა",
|
||||
"@delete": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deleteAccount": "ანგარიშის წაშლა",
|
||||
"@deleteAccount": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deleteMessage": "შეტყობინების წაშლა",
|
||||
"@deleteMessage": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"device": "მოწყობილება",
|
||||
"@device": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deviceId": "მოწყობილების ID",
|
||||
"@deviceId": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"directChats": "პირდაპირი ჩატები",
|
||||
"@directChats": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"allRooms": "ყველა ჯგუფური ჩატები",
|
||||
"@allRooms": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"downloadFile": "ფაილის ჩატვირთვა",
|
||||
"@downloadFile": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"edit": "რედაქტირება",
|
||||
"@edit": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"editBlockedServers": "ბლოკირებული სერვერების რედაქტირება",
|
||||
"@editBlockedServers": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"editRoomAvatar": "ოთახის ფოტოს შეცვლა",
|
||||
"@editRoomAvatar": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteSettings": "ემოციების პარამეტრები",
|
||||
"@emoteSettings": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"globalChatId": "გლობალური ჩატის ID",
|
||||
"@globalChatId": {},
|
||||
"repeatPassword": "გაიმეორეთ პაროლი",
|
||||
"@repeatPassword": {},
|
||||
"notAnImage": "ფაილი არაა სურათი.",
|
||||
"@notAnImage": {},
|
||||
"remove": "წაშლა",
|
||||
"@remove": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"activatedEndToEndEncryption": "🔐 {username} გააქტიურა end to end დაშიფვრა",
|
||||
"@activatedEndToEndEncryption": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"supposedMxid": "ეს უნდა იყოს {mxid}",
|
||||
"@supposedMxid": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"mxid": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"about": "შესახებ",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changedTheDisplaynameTo": "{username} შეცვალა ნაჩვენები სახელი: '{displayname}'",
|
||||
"@changedTheDisplaynameTo": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
},
|
||||
"displayname": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"commandHint_create": "ცარიელი ჯგუფური ჩატის შექმნა\nგამოიყენეთ --no-encryption გაშიფვრის გასათიშად",
|
||||
"@commandHint_create": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /create"
|
||||
},
|
||||
"commandHint_dm": "პირდაპირი ჩატის დაწყება\nგამოიყენეთ --no-encryption გაშიფვრის გასათიშად",
|
||||
"@commandHint_dm": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /dm"
|
||||
},
|
||||
"commandHint_html": "HTML ფორმატირებული ტექსტის გაგზავნა",
|
||||
"@commandHint_html": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /html"
|
||||
},
|
||||
"commandHint_myroomavatar": "თქვენი ფოტოს დაყენება ამ ოთახისათვის(mxc-uri-ს დახმარებით)",
|
||||
"@commandHint_myroomavatar": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /myroomavatar"
|
||||
},
|
||||
"commandHint_myroomnick": "ამ ოთახისათვის ნაჩვენები სახელის დაყენება",
|
||||
"@commandHint_myroomnick": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /myroomnick"
|
||||
},
|
||||
"commandHint_op": "მოცემული მომხმარებლისათვის უფლებების დონის დაყენება (ჩვეულებრივ: 50)",
|
||||
"@commandHint_op": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /op"
|
||||
},
|
||||
"commandHint_react": "რეაქციის სახით პასუხის გაგზავნა",
|
||||
"@commandHint_react": {
|
||||
"type": "String",
|
||||
"description": "Usage hint for the command /react"
|
||||
},
|
||||
"containsDisplayName": "ნაჩვენებ სახელს შეიცავს",
|
||||
"@containsDisplayName": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"contentHasBeenReported": "ეს კონტენტი გაგზავნილ იქნა სერვერის ადმინისტრატორებთან",
|
||||
"@contentHasBeenReported": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"defaultPermissionLevel": "ნაგულისხმევი უფლების დონე",
|
||||
"@defaultPermissionLevel": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"displaynameHasBeenChanged": "ნაჩვენები სახელი შეიცვალა",
|
||||
"@displaynameHasBeenChanged": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"editDisplayname": "ნაჩვენები სახელის შეცვლა",
|
||||
"@editDisplayname": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,735 +0,0 @@
|
|||
{
|
||||
"@@last_modified": "2021-08-14 12:41:09.781172",
|
||||
"about": "Giới thiệu",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"accept": "Đồng ý",
|
||||
"@accept": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"acceptedTheInvitation": "{username} đã đồng ý lời mời",
|
||||
"@acceptedTheInvitation": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"account": "Tài khoản",
|
||||
"@account": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"activatedEndToEndEncryption": "{username} đã kích hoạt mã hóa đầu cuối 2 chiều",
|
||||
"@activatedEndToEndEncryption": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"admin": "Quản trị viên",
|
||||
"@admin": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"alias": "bí danh",
|
||||
"@alias": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"answeredTheCall": "{senderName} đã trả lời cuộc gọi",
|
||||
"@answeredTheCall": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"senderName": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"anyoneCanJoin": "Mọi người đều có thể gia nhập",
|
||||
"@anyoneCanJoin": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"archive": "Lưu trữ",
|
||||
"@archive": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"areGuestsAllowedToJoin": "Khách vãng lai có được tham gia không",
|
||||
"@areGuestsAllowedToJoin": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"areYouSure": "Bạn chắc chứ?",
|
||||
"@areYouSure": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"blockDevice": "Thiết bị bị chặn",
|
||||
"@blockDevice": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"verified": "Đã xác thực",
|
||||
"@verified": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"transferFromAnotherDevice": "Chuyển từ thiết bị khác",
|
||||
"@transferFromAnotherDevice": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"showPassword": "Hiển thị mật khẩu",
|
||||
"@showPassword": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"pleaseFollowInstructionsOnWeb": "Vui lòng làm theo hướng dẫn trên trang web và bấm tiếp",
|
||||
"@pleaseFollowInstructionsOnWeb": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"noEncryptionForPublicRooms": "Bạn chỉ có thể kích hoạt mã hoá khi phòng này không mở",
|
||||
"@noEncryptionForPublicRooms": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"next": "Tiếp",
|
||||
"@next": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"everythingReady": "Mọi thứ đã sẵn sàng!",
|
||||
"@everythingReady": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"emoteSettings": "Cài đặt biểu tượng cảm xúc",
|
||||
"@emoteSettings": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"editDisplayname": "Sửa tên hiển thị",
|
||||
"@editDisplayname": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"downloadFile": "Tải ảnh xuống",
|
||||
"@downloadFile": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"displaynameHasBeenChanged": "Tên hiển thị đã được thay đổi",
|
||||
"@displaynameHasBeenChanged": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"devices": "Các thiết bị",
|
||||
"@devices": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deviceId": "Mã xác định thiết bị",
|
||||
"@deviceId": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"device": "Thiết bị",
|
||||
"@device": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deleteMessage": "Xoá tin nhắn",
|
||||
"@deleteMessage": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deleteAccount": "Xoá tài khoản",
|
||||
"@deleteAccount": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"delete": "Xoá",
|
||||
"@delete": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"deactivateAccountWarning": "Việc này sẽ vô hiệu hoá tài khoản của bạn. Điều này không thể đảo ngược được! Bạn chắc là vẫn muốn tiếp tục chứ?",
|
||||
"@deactivateAccountWarning": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"dateWithYear": "{day}/{month}/{year}",
|
||||
"@dateWithYear": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"year": {
|
||||
"type": "String"
|
||||
},
|
||||
"month": {
|
||||
"type": "String"
|
||||
},
|
||||
"day": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dateWithoutYear": "{day}/{month}",
|
||||
"@dateWithoutYear": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"month": {
|
||||
"type": "String"
|
||||
},
|
||||
"day": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dateAndTimeOfDay": "{date}, {timeOfDay}",
|
||||
"@dateAndTimeOfDay": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"date": {
|
||||
"type": "String"
|
||||
},
|
||||
"timeOfDay": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"currentlyActive": "Đang hoạt động",
|
||||
"@currentlyActive": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"createdTheChat": "{username} đã tạo cuộc trò chuyện",
|
||||
"@createdTheChat": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"create": "Tạo",
|
||||
"@create": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"countParticipants": "{count} thành viên",
|
||||
"@countParticipants": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"couldNotDecryptMessage": "Không thể giải mã tin nhắn: {error}",
|
||||
"@couldNotDecryptMessage": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copy": "Sao chép",
|
||||
"@copy": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"contactHasBeenInvitedToTheGroup": "Liên hệ đã được mời vào nhóm",
|
||||
"@contactHasBeenInvitedToTheGroup": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"connect": "Kết nối",
|
||||
"@connect": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"confirm": "Xác nhận",
|
||||
"@confirm": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"compareNumbersMatch": "So sánh và đảm bảo các số sau đây giống trên máy còn lại",
|
||||
"@compareNumbersMatch": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"compareEmojiMatch": "So sánh và đảm bảo các biểu tượng cảm xúc sau đây giống với các biểu tượng trên máy còn lại",
|
||||
"@compareEmojiMatch": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"close": "Đóng",
|
||||
"@close": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chooseAStrongPassword": "Chọn một mật khẩu mạnh",
|
||||
"@chooseAStrongPassword": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatDetails": "Chi tiết cuộc trò chuyện",
|
||||
"@chatDetails": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatBackupDescription": "Bản sao lưu cuộc trò chuyện của bạn được bảo mật bằng một khoá bảo mật. Bạn đừng làm mất nó.",
|
||||
"@chatBackupDescription": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chatBackup": "Sao lưu cuộc trò chuyện",
|
||||
"@chatBackup": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"chat": "Chat",
|
||||
"@chat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheNameOfTheGroup": "Thay đổi tên nhóm",
|
||||
"@changeTheNameOfTheGroup": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changeTheHomeserver": "Thay đổi máy chủ nhà",
|
||||
"@changeTheHomeserver": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changePassword": "Thay đổi mật khẩu",
|
||||
"@changePassword": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"changedTheRoomInvitationLink": "{username} đã thay đổi đường dẫn mời",
|
||||
"@changedTheRoomInvitationLink": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheRoomAliases": "{username} đã đổi địa chỉ phòng chat",
|
||||
"@changedTheRoomAliases": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheProfileAvatar": "{username} đã thay đổi ảnh đại diện của mình",
|
||||
"@changedTheProfileAvatar": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheGuestAccessRulesTo": "{username} đã thay đổi quy tắc truy cập đối với khách thành: {rules}",
|
||||
"@changedTheGuestAccessRulesTo": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
},
|
||||
"rules": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheGuestAccessRules": "{username} đã thay đổi quy tắc truy cập đối với khách",
|
||||
"@changedTheGuestAccessRules": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheChatPermissions": "{username} đã thay đổi quyền trong phòng chat",
|
||||
"@changedTheChatPermissions": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheChatNameTo": "{username} đã thay đổi tên phòng chat thành: '{chatname}'",
|
||||
"@changedTheChatNameTo": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
},
|
||||
"chatname": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheChatDescriptionTo": "{username} đã thay đổi mô tả phòng chat thành: '{description}'",
|
||||
"@changedTheChatDescriptionTo": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
},
|
||||
"description": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changedTheChatAvatar": "{username} đã thay đổi ảnh phòng chat",
|
||||
"@changedTheChatAvatar": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"changeDeviceName": "Thay đổi tên thiết bị",
|
||||
"@changeDeviceName": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"cancel": "Hủy",
|
||||
"@cancel": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"blocked": "Đã chặn",
|
||||
"@blocked": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"bannedUser": "{username} đã cấm {targetName}",
|
||||
"@bannedUser": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
},
|
||||
"targetName": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"banned": "Đã bị cấm",
|
||||
"@banned": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"banFromChat": "Cấm khỏi cuộc trò chuyện",
|
||||
"@banFromChat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"badServerVersionsException": "Máy chủ nhà hỗ trợ Spec phiên bản:\n{serverVerions}\nNhưng ứng dụng này chỉ hỗ trợ {supportedVersions}",
|
||||
"@badServerVersionsException": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"serverVersions": {
|
||||
"type": "String"
|
||||
},
|
||||
"supportedVersions": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"badServerLoginTypesException": "Máy chủ nhà hỗ trợ kiểu đăng nhập:\n{serverVersions}\nNhưng ứng dụng này chỉ hỗ trợ:\n{supportedVersions}",
|
||||
"@badServerLoginTypesException": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"serverVersions": {
|
||||
"type": "String"
|
||||
},
|
||||
"supportedVersions": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"askVerificationRequest": "Bạn có đồng ý yêu cầu chứng thực từ {username} không?",
|
||||
"@askVerificationRequest": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"username": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"areYouSureYouWantToLogout": "Bạn có chắc bạn muốn đăng xuất không?",
|
||||
"@areYouSureYouWantToLogout": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"addEmail": "Thêm email",
|
||||
"@addEmail": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"notifications": "Thông báo",
|
||||
"@notifications": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"newGroup": "Nhóm mới",
|
||||
"@newGroup": {},
|
||||
"pleaseEnterANumber": "Hãy nhập số lớn hơn 0",
|
||||
"@pleaseEnterANumber": {},
|
||||
"newSpaceDescription": "Không gian cho phép bạn hợp nhất các cuộc trò chuyện của mình và xây dựng cộng đồng riêng tư hoặc công khai.",
|
||||
"@newSpaceDescription": {},
|
||||
"disableEncryptionWarning": "Vì lý do bảo mật, bạn không thể tắt tính năng mã hóa trong cuộc trò chuyện đã được bật tính năng này trước đó.",
|
||||
"@disableEncryptionWarning": {},
|
||||
"makeAdminDescription": "Khi bạn đặt người dùng này làm quản trị viên, bạn không thể hoàn tác việc này vì khi đó họ sẽ có quyền ngang bạn.",
|
||||
"@makeAdminDescription": {},
|
||||
"setColorTheme": "Chọn màu giao diện:",
|
||||
"@setColorTheme": {},
|
||||
"callingAccount": "Gọi tài khoản",
|
||||
"@callingAccount": {},
|
||||
"openLinkInBrowser": "Mở đường dẫn trong trình duyệt",
|
||||
"@openLinkInBrowser": {},
|
||||
"setTheme": "Chọn giao diện:",
|
||||
"@setTheme": {},
|
||||
"invitePrivateChat": "📨 Mời trò chuyện riêng tư",
|
||||
"@invitePrivateChat": {},
|
||||
"inviteGroupChat": "📨 Mời nhóm trò chuyện",
|
||||
"@inviteGroupChat": {},
|
||||
"addToSpace": "Thêm vào không gian",
|
||||
"@addToSpace": {},
|
||||
"importEmojis": "Nhập Biểu cảm",
|
||||
"@importEmojis": {},
|
||||
"importFromZipFile": "Nhập vào từ tệp .zip",
|
||||
"@importFromZipFile": {},
|
||||
"exportEmotePack": "Xuất gói biểu cảm bằng tệp .zip",
|
||||
"@exportEmotePack": {},
|
||||
"hideUnimportantStateEvents": "Ẩn các sự kiện không quan trọng",
|
||||
"@hideUnimportantStateEvents": {},
|
||||
"replace": "Thay thế",
|
||||
"@replace": {},
|
||||
"addChatDescription": "Thêm mô tả hội thoại...",
|
||||
"@addChatDescription": {},
|
||||
"report": "báo cáo",
|
||||
"@report": {},
|
||||
"remove": "Loại bỏ",
|
||||
"@remove": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"restricted": "Bị hạn chế",
|
||||
"@restricted": {},
|
||||
"newSpace": "Không gian mới",
|
||||
"@newSpace": {},
|
||||
"enterRoom": "Nhập phòng",
|
||||
"@enterRoom": {},
|
||||
"signInWithPassword": "Đăng nhập với mật khẩu",
|
||||
"@signInWithPassword": {},
|
||||
"all": "Tất cả",
|
||||
"@all": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"appLock": "Khoá ứng dụng",
|
||||
"@appLock": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"allChats": "Tất cả hội thoại",
|
||||
"@allChats": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"repeatPassword": "Nhập lại mật khẩu",
|
||||
"@repeatPassword": {},
|
||||
"confirmMatrixId": "Hãy xác nhận Matrix ID để xoá tài khoản.",
|
||||
"@confirmMatrixId": {},
|
||||
"supposedMxid": "Đây nên là {mxid}",
|
||||
"@supposedMxid": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"mxid": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noBackupWarning": "Cẩn thận! Nếu không bật sao lưu trò chuyện, bạn sẽ mất quyền truy cập vào tin nhắn được mã hóa của mình. Chúng tôi khuyên bạn nên bật sao lưu trò chuyện trước khi đăng xuất.",
|
||||
"@noBackupWarning": {},
|
||||
"doNotShowAgain": "Không hiện lại nữa",
|
||||
"@doNotShowAgain": {},
|
||||
"wasDirectChatDisplayName": "Hội thoại trống (từng là {oldDisplayName})",
|
||||
"@wasDirectChatDisplayName": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"oldDisplayName": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"reportErrorDescription": "😭 Ôi. Có lỗi xảy ra. Bạn có thể báo cáo lỗi tới nhà phát triển nếu muốn.",
|
||||
"@reportErrorDescription": {},
|
||||
"profileNotFound": "Không tìm thấy người dùng này tại máy chủ. Có thể do lỗi kết nối hoặc người dùng không tồn tại.",
|
||||
"@profileNotFound": {},
|
||||
"banUserDescription": "Người dùng sẽ bị cấm khỏi cuộc trò chuyện và không thể tham gia lại cho tới khi được gỡ cấm.",
|
||||
"@banUserDescription": {},
|
||||
"learnMore": "Tìm hiểu thêm",
|
||||
"@learnMore": {},
|
||||
"incomingMessages": "Tin nhắn đến",
|
||||
"@incomingMessages": {},
|
||||
"encryptThisChat": "Mã hóa cuộc trò chuyện này",
|
||||
"@encryptThisChat": {},
|
||||
"noOtherDevicesFound": "Không tìm thấy thiết bị khác",
|
||||
"@noOtherDevicesFound": {},
|
||||
"fileIsTooBigForServer": "Máy chủ báo cáo rằng tệp tin quá lớn để gửi.",
|
||||
"@fileIsTooBigForServer": {},
|
||||
"signInWith": "Đăng nhập với {provider}",
|
||||
"@signInWith": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"provider": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notAnImage": "Không phải tệp ảnh.",
|
||||
"@notAnImage": {},
|
||||
"importNow": "Nhập vào",
|
||||
"@importNow": {},
|
||||
"allSpaces": "Tất cả không gian",
|
||||
"@allSpaces": {},
|
||||
"enterSpace": "Nhập không gian",
|
||||
"@enterSpace": {},
|
||||
"pleaseTryAgainLaterOrChooseDifferentServer": "Hãy thử lại sau hoặc chọn 1 máy chủ khác.",
|
||||
"@pleaseTryAgainLaterOrChooseDifferentServer": {},
|
||||
"jumpToLastReadMessage": "Đi tới tin nhắn đã đọc mới nhất",
|
||||
"@jumpToLastReadMessage": {},
|
||||
"commandHint_ignore": "Phớt lờ matrix ID này",
|
||||
"@commandHint_ignore": {},
|
||||
"appLockDescription": "Khoá ứng dụng khi không dùng bằng mã pin",
|
||||
"@appLockDescription": {},
|
||||
"notifyMeFor": "Bật thông báo cho",
|
||||
"@notifyMeFor": {},
|
||||
"settings": "Cài đặt",
|
||||
"@settings": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"sendSticker": "Gửi nhãn dán",
|
||||
"@sendSticker": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"fileHasBeenSavedAt": "Tệp đã được lưu tại {path}",
|
||||
"@fileHasBeenSavedAt": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"path": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"readUpToHere": "Đọc tới đây",
|
||||
"@readUpToHere": {},
|
||||
"jump": "Đi tới",
|
||||
"@jump": {},
|
||||
"callingPermissions": "Quyền gọi điện",
|
||||
"@callingPermissions": {},
|
||||
"numChats": "{number} cuộc hội thoại",
|
||||
"@numChats": {
|
||||
"type": "number",
|
||||
"placeholders": {
|
||||
"number": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hidePresences": "Ẩn danh sách trạng thái?",
|
||||
"@hidePresences": {},
|
||||
"sorryThatsNotPossible": "Xin lỗi... không khả dụng",
|
||||
"@sorryThatsNotPossible": {},
|
||||
"reopenChat": "Mở lại cuộc trò chuyện",
|
||||
"@reopenChat": {},
|
||||
"wrongPinEntered": "Nhập sai mã pin! Thử lại sau {seconds} giây...",
|
||||
"@wrongPinEntered": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"archiveRoomDescription": "Cuộc trò chuyện sẽ được chuyển tới mục lưu trữ. Người dùng khác sẽ thấy được bạn đã rời khỏi cuộc trò chuyện.",
|
||||
"@archiveRoomDescription": {},
|
||||
"kickUserDescription": "Người dùng bị đuổi khỏi cuộc trò chuyện nhưng không bị cấm. Trong các cuộc trò chuyện công khai, người dùng có thể vào lại bất cứ lúc nào.",
|
||||
"@kickUserDescription": {},
|
||||
"unbanUserDescription": "Người dùng sẽ có thể vào lại cuộc trò chuyện nếu họ thử.",
|
||||
"@unbanUserDescription": {},
|
||||
"pushNotificationsNotAvailable": "Thông báo đẩy không khả dụng",
|
||||
"@pushNotificationsNotAvailable": {},
|
||||
"invite": "Mời",
|
||||
"@invite": {},
|
||||
"invalidInput": "Dữ liệu nhập không hợp lệ!",
|
||||
"@invalidInput": {},
|
||||
"removeDevicesDescription": "Bạn sẽ đăng xuất khỏi thiết bị này và không nhận được tin nhắn nữa.",
|
||||
"@removeDevicesDescription": {},
|
||||
"noUsersFoundWithQuery": "Không tìm thấy người dùng nào với \"{query}\". Hãy kiểm tra xem bạn có nhập nhầm không.",
|
||||
"@noUsersFoundWithQuery": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"query": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"commandHint_unignore": "Bỏ phớt lờ matrix ID này",
|
||||
"@commandHint_unignore": {},
|
||||
"discover": "Khám phá",
|
||||
"@discover": {},
|
||||
"stickers": "Nhãn dán",
|
||||
"@stickers": {},
|
||||
"roomUpgradeDescription": "Cuộc trò chuyện sẽ được tạo lại với phiên bản phòng mới. Tất cả những người tham gia sẽ được thông báo rằng họ cần chuyển sang cuộc trò chuyện mới. Bạn có thể tìm hiểu thêm về các phiên bản phòng tại https://spec.matrix.org/latest/rooms/",
|
||||
"@roomUpgradeDescription": {},
|
||||
"commandHint_hug": "Gửi một cái ôm",
|
||||
"@commandHint_hug": {},
|
||||
"aboutHomeserver": "Về {homeserver}",
|
||||
"@aboutHomeserver": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"homeserver": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"alwaysUse24HourFormat": "Không",
|
||||
"@alwaysUse24HourFormat": {
|
||||
"description": "Set to true to always display time of day in 24 hour format."
|
||||
},
|
||||
"hugContent": "{senderName} ôm bạn",
|
||||
"@hugContent": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
"senderName": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
1
assets/vodozemac/.gitignore
vendored
Normal file
1
assets/vodozemac/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
vodozemac_bindings_dart*
|
||||
|
|
@ -1,10 +1,31 @@
|
|||
{
|
||||
"application_name": "FluffyChat",
|
||||
"application_welcome_message": null,
|
||||
"default_homeserver": "matrix.org",
|
||||
"web_base_url": "https://fluffychat.im/web",
|
||||
"privacy_url": "https://fluffychat.im/en/privacy.html",
|
||||
"render_html": false,
|
||||
"hide_redacted_events": false,
|
||||
"hide_unknown_events": false
|
||||
"applicationName": "FluffyChat",
|
||||
"defaultHomeserver": "matrix.org",
|
||||
"presetHomeserver": "",
|
||||
"welcomeText": "",
|
||||
"privacyUrl": "https://github.com/krille-chan/fluffychat/blob/main/PRIVACY.md",
|
||||
"audioRecordingNumChannels": 1,
|
||||
"audioRecordingAutoGain": true,
|
||||
"audioRecordingEchoCancel": false,
|
||||
"audioRecordingNoiseSuppress": true,
|
||||
"audioRecordingBitRate": 64000,
|
||||
"audioRecordingSamplingRate": 44100,
|
||||
"renderHtml": true,
|
||||
"fontSizeFactor": 1,
|
||||
"hideRedactedEvents": false,
|
||||
"hideUnknownEvents": true,
|
||||
"separateChatTypes": false,
|
||||
"autoplayImages": true,
|
||||
"sendTypingNotifications": true,
|
||||
"sendPublicReadReceipts": true,
|
||||
"swipeRightToLeftToReply": true,
|
||||
"sendOnEnter": false,
|
||||
"showPresences": true,
|
||||
"displayNavigationRail": false,
|
||||
"experimentalVoip": false,
|
||||
"shareKeysWith": "all",
|
||||
"noEncryptionWarningShown": false,
|
||||
"displayChatDetailsColumn": false,
|
||||
"colorSchemeSeedInt": 4283835834,
|
||||
"enableSoftLogout": false
|
||||
}
|
||||
3
dart_dependency_validator.yaml
Normal file
3
dart_dependency_validator.yaml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
ignore:
|
||||
- handy_window
|
||||
- sqlcipher_flutter_libs
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
# im.fluffychat.Fluffychat
|
||||
8b25b37b-f160-4350-b4f6-9a04554e8f9e
|
||||
21
docs/LICENSE
21
docs/LICENSE
|
|
@ -1,21 +0,0 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2019 Tailwind Toolbox
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
91
docs/OFL.txt
91
docs/OFL.txt
|
|
@ -1,91 +0,0 @@
|
|||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 14 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 21 KiB |
BIN
docs/favicon.png
BIN
docs/favicon.png
Binary file not shown.
|
Before Width: | Height: | Size: 19 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB |
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue