Compare commits

..

459 Commits
v1.7.3 ... main

Author SHA1 Message Date
Krille-chan
b4fcb5b0d9 chore: Use correct versions of adaptive_dialog 2023-07-14 08:02:47 +00:00
Krille
1911004d05
refactor: Update dependencies 2023-07-13 19:46:16 +09:00
Raatty
5d67564445
Added translation using Weblate (Greek) 2023-07-09 09:42:27 +02:00
Krille
be04c5a46e
design: Adjust open url dialog design a little bit 2023-07-07 12:10:07 +09:00
Farooq Karimi Zadeh
bd7a4c9dfb
Translated using Weblate (Persian)
Currently translated at 100.0% (549 of 549 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fa/
2023-07-06 10:52:33 +02:00
Krille
10ee57722e
chore: Enable webrtc for linux again 2023-06-30 19:15:45 +09:00
Malin Errenst
ff5f7ab50e Merge branch 'malin/group-notification-channels' into 'main'
feat: Added grouping to message notification channels

See merge request famedly/fluffychat!1134
2023-06-30 07:55:24 +00:00
Krille
277885a61e
chore: Streamline background gradients 2023-06-29 16:56:15 +09:00
Malin Errenst
6633ebc376
feat: Added grouping to message notification channels 2023-06-29 09:36:08 +02:00
Krille-chan
b2d9986cd3 Merge branch 'braid/cute-events' into 'main'
fix: overflow in cute events

See merge request famedly/fluffychat!1132
2023-06-29 07:13:55 +00:00
Krille-chan
a0b9bb277f Merge branch 'braid/url-launch-copy' into 'main'
feat: add button to copy url in open dialog

See merge request famedly/fluffychat!1133
2023-06-29 07:13:30 +00:00
TheOneWithTheBraid
d381705cdd
feat: add button to copy url in open dialog
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-06-27 14:09:00 +02:00
3820d4264a
Translated using Weblate (Finnish)
Currently translated at 100.0% (549 of 549 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fi/
2023-06-26 14:50:25 +02:00
Milo Ivir
cf4e2d3fad
Translated using Weblate (Croatian)
Currently translated at 100.0% (549 of 549 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/hr/
2023-06-26 14:50:24 +02:00
josé m
002dc87577
Translated using Weblate (Galician)
Currently translated at 100.0% (549 of 549 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/gl/
2023-06-22 07:51:05 +02:00
The one with the braid
922e7ad0ff fix: overflow in cute events
Signed-off-by: The one with the braid <the-one@with-the-braid.cf>
2023-06-21 16:08:20 +02:00
Oğuz Ersen
5d7be8a672
Translated using Weblate (Turkish)
Currently translated at 100.0% (549 of 549 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2023-06-20 19:50:49 +02:00
Krille-chan
431b357cfa Merge branch 'braid/allow-aarch64-failure' into 'main'
fix: allow aarch64 upload failure

See merge request famedly/fluffychat!1131
2023-06-19 10:35:58 +00:00
TheOneWithTheBraid
2938acf152 fix: allow aarch64 upload failure
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-06-19 12:27:07 +02:00
Krille
4127f70e4d
build: Change wakelock hotfix 2023-06-19 10:48:10 +02:00
xabirequejo
c07221cc12
Translated using Weblate (Basque)
Currently translated at 97.6% (536 of 549 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/eu/
2023-06-17 20:51:13 +02:00
Rex_sa
33b2f95e3f
Translated using Weblate (Arabic)
Currently translated at 100.0% (549 of 549 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/ar/
2023-06-16 11:52:28 +02:00
Ihor Hordiichuk
2a5cd9b218
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (549 of 549 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2023-06-15 10:51:43 +02:00
Linerly
a15fed034d
Translated using Weblate (Indonesian)
Currently translated at 100.0% (549 of 549 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2023-06-13 14:47:59 +02:00
Riley
b9641ac021
Translated using Weblate (Romanian)
Currently translated at 100.0% (549 of 549 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/ro/
2023-06-13 14:47:59 +02:00
josé m
2145bd8846
Translated using Weblate (Galician)
Currently translated at 100.0% (549 of 549 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/gl/
2023-06-13 14:47:58 +02:00
Priit Jõerüüt
672b97b310
Translated using Weblate (Estonian)
Currently translated at 100.0% (549 of 549 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/
2023-06-13 14:47:58 +02:00
Umoya NgoLwesihlanu
974da6ec90
Translated using Weblate (Arabic)
Currently translated at 100.0% (549 of 549 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/ar/
2023-06-13 14:47:57 +02:00
Krille
f19bbcd010
refactor: More reliable request history/future timeline mechanism 2023-06-13 08:41:49 +02:00
Krille
a1468c92c8 Merge branch 'braid/allow-windows-failure' into 'main'
fix: allow windows upload job failure

See merge request famedly/fluffychat!1129
2023-06-12 05:19:41 +00:00
TheOneWithTheBraid
6dd125a087 fix: allow windows upload job failure
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-06-11 19:46:11 +02:00
Krille
842ecc4235
feat: New simplified login process with more prominent SSO and nicer layout 2023-06-11 18:04:31 +02:00
Krille
db66793d28
docs: Update mastodon link 2023-06-11 10:56:23 +02:00
Krille
324da027e9
builds: Bump version 2023-06-10 08:19:17 +02:00
DarkCoder15
f2f45e53a8
Translated using Weblate (Russian)
Currently translated at 99.2% (542 of 546 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/ru/
2023-06-07 16:55:20 +02:00
Krille
cacab45fe3
chore: Follow up scrolldownbutton style 2023-06-04 11:14:06 +02:00
Krille
908d428220
design: Replace anime images with neutral cupertino icons 2023-06-03 18:27:26 +02:00
Krille
8a6d726b8c Merge branch 'braid/emoji-placeholder' into 'main'
fix: custom emote placeholder

See merge request famedly/fluffychat!1127
2023-06-03 16:05:59 +00:00
Krille
40275d3d14
fix: Scroll up and scroll down buttons in chat list 2023-06-03 17:59:48 +02:00
Krille
5039f1ba3b
refactor: Use AnimatedSize for FAB 2023-06-03 17:49:13 +02:00
Krille
299aac134d
feat: Display progress value for initial sync 2023-06-03 17:28:32 +02:00
TheOneWithTheBraid
044171c002 fix: custom emote placeholder
- place emote loading spinner in the position as the emote itself
- add key to preview in order to ensure proper states aligned

Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-06-02 18:39:47 +02:00
Krille
ec9155d8f0
chore: Update dependencies 2023-06-02 09:49:32 +02:00
Krille
221fe3edcc
builds: Update flutter table html 2023-06-01 13:01:58 +02:00
Krille
e166f17cae
refactor: Update flutter_html 2023-06-01 11:03:40 +02:00
Krille
640fe0d476
builds: Update flutter_html 2023-06-01 11:00:14 +02:00
Krille
3942de3222
fix: User pills 2023-05-31 15:52:51 +02:00
Krille
b00111381a
feat: Allow ruby tags in html 2023-05-31 13:05:06 +02:00
Krille
715dca561f
fix: Remove wrong rendered linebreak in html 2023-05-31 10:19:13 +02:00
Krille
44d7f61788
fix: Try to reload timeline on IOException 2023-05-31 09:22:50 +02:00
Krille
518739e29f
builds: Remove workaround for building linux arm64 2023-05-31 08:03:23 +02:00
Krille
06e6e9c5b1
chore: Follow up linkify inside html 2023-05-30 13:39:36 +02:00
Krille
17cfff153b Merge branch 'braid/macos' into 'main'
feat: update macOS build files

See merge request famedly/fluffychat!1121
2023-05-30 05:51:48 +00:00
Krille
9f224b9839 Merge branch 'braid/ci-fixes' into 'main'
fix: broken CI artifact uploads

See merge request famedly/fluffychat!1125
2023-05-30 05:51:28 +00:00
TheOneWithTheBraid
56e1bb6bfd fix: broken CI artifact uploads
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-05-29 19:19:28 +02:00
lauren n. liberda
6529ce0d0f
Translated using Weblate (Polish)
Currently translated at 99.2% (542 of 546 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/pl/
2023-05-28 11:48:20 +02:00
Rex_sa
81c7f7decd
Translated using Weblate (Arabic)
Currently translated at 100.0% (546 of 546 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/ar/
2023-05-27 10:48:20 +02:00
Krille
85868cc0bd
chore: Follow up linkify in html message 2023-05-26 09:11:04 +02:00
Milo Ivir
1d0c842bad
Translated using Weblate (Croatian)
Currently translated at 100.0% (546 of 546 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/hr/
2023-05-24 22:48:59 +02:00
Krille
02bcc98037
chore: Disable linux webrtc 2023-05-24 21:02:13 +02:00
Krille
1a1c166ab0
chore: Enhance room pills 2023-05-24 08:23:06 +02:00
Krille
692d6042c5
chore: Ask for storage persistence 2023-05-23 15:21:38 +02:00
Krille
fa2ed930eb Revert "chore: Upgrade to Flutter 3.10.1"
This reverts commit d300cdb58f6a8be620471c53c7dd5920ba3f5c29
2023-05-23 13:02:28 +00:00
Krille
9785b0023c Revert "refactor: Update dependencies"
This reverts commit 2bb0dce7a15d4831eb30c39fc7ba5d863cbcd55e
2023-05-23 13:02:15 +00:00
Malin Errenst
313c94a4f1 Merge branch 'malin/flutter-3-10-1' into 'main'
chore: Upgrade to Flutter 3.10.1

See merge request famedly/fluffychat!1122
2023-05-23 07:44:51 +00:00
Krille
2bb0dce7a1
refactor: Update dependencies 2023-05-23 08:40:56 +02:00
Krille
b1785d4b8a
builds: Update file_picker to 5.3.0 2023-05-23 08:34:24 +02:00
Krille
3f15fa365f
chore: Follow up missing cache key 2023-05-23 08:32:27 +02:00
Krille
a56ebb245e
chore: do not humanize links 2023-05-23 08:22:34 +02:00
Malin Errenst
d300cdb58f
chore: Upgrade to Flutter 3.10.1 2023-05-22 21:33:14 +02:00
Krille
d88a1cd2d6
chore: Follow up img tag 2023-05-22 17:05:54 +02:00
Krille
3070b38d2e
chore: Follow up update matrix sdk 2023-05-22 16:30:04 +02:00
Krille
38db3b35aa
chore: Follow up html messages mxc images 2023-05-22 16:26:43 +02:00
Linerly
c4447adf8c
Translated using Weblate (Indonesian)
Currently translated at 100.0% (546 of 546 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2023-05-21 16:49:01 +02:00
Riley
0b91d3cecc
Translated using Weblate (Romanian)
Currently translated at 100.0% (546 of 546 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/ro/
2023-05-21 16:49:01 +02:00
Eric
3b3d20f250
Translated using Weblate (Chinese (Simplified))
Currently translated at 97.6% (533 of 546 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/zh_Hans/
2023-05-21 16:48:59 +02:00
Ihor Hordiichuk
0376e7f4b8
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (546 of 546 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2023-05-21 16:48:59 +02:00
josé m
77f43fbde0
Translated using Weblate (Galician)
Currently translated at 100.0% (546 of 546 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/gl/
2023-05-21 16:48:59 +02:00
Priit Jõerüüt
e203508c42
Translated using Weblate (Estonian)
Currently translated at 100.0% (546 of 546 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/
2023-05-21 16:48:58 +02:00
José Muñoz
8b6745763a
Translated using Weblate (Spanish)
Currently translated at 77.1% (421 of 546 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/es/
2023-05-21 16:48:58 +02:00
Krille
8c4b2ade88
fix: Do not unnecessary request all members in public rooms 2023-05-20 08:21:33 +02:00
TheOneWithTheBraid
4e5f2ff05f fix: path of libolm
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-05-19 18:38:32 +02:00
TheOneWithTheBraid
fd1b62fc8d chore: update macOS icons and add build script
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-05-19 18:11:19 +02:00
Krille
f53d17eab7
chore: Readd support for html tables 2023-05-19 17:30:25 +02:00
TheOneWithTheBraid
c3b3f762eb feat: set display information correctly
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-05-19 14:11:27 +02:00
TheOneWithTheBraid
d288603c07 feat: clean up macOS build metadata
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-05-19 14:03:18 +02:00
TheOneWithTheBraid
e61682ef46 feat: update macOS build information for macOS Ventura
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-05-19 13:46:50 +02:00
TheOneWithTheBraid
3b228bb58b feat: update macOS build files
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-05-19 13:24:08 +02:00
Krille
b62c41ce57
chore: Follow up html styling 2023-05-19 08:14:48 +02:00
Krille
a4397e9cec
builds: Do not allow failure for linux x86 2023-05-18 11:02:32 +02:00
Krille
981d69706c
builds: Do not use verbose mode on building linux 2023-05-18 11:01:59 +02:00
Krille
0a4683d8a6
chore: Update flutter webrtc 2023-05-18 10:48:27 +02:00
Krille
43f6284ada
chore: Allow failure in build linux for now 2023-05-17 15:21:01 +02:00
Krille
8cf6297560
chore: Disable img for now in html messages 2023-05-17 15:20:40 +02:00
Krille
1f42d7dff0
chore: Add missing blockquote style 2023-05-17 13:25:39 +02:00
Krille
abbf18e1dc Merge branch 'krille/reimplement-flutter-matrix-html' into 'main'
refactor: Reimplement flutter matrix html locally

See merge request famedly/fluffychat!1119
2023-05-17 10:55:34 +00:00
Krille
102f3bba8e
refactor: Reimplement flutter matrix html locally 2023-05-17 12:26:59 +02:00
Krille
8faba7bdf2
chore: Remove macos_ui dependency 2023-05-16 19:21:37 +02:00
Krille
d41d21f8e1
chore: Remove webrtc override 2023-05-16 19:12:20 +02:00
Krille
298cd6245c Merge branch 'fail-on-curl-failures-during-build' into 'main'
change release curl calls to use --fail-with-body

Closes #1193

See merge request famedly/fluffychat!1110
2023-05-16 17:03:16 +00:00
Tim Flink
8bd88c4845 chore: change release curl calls to use --fail-with-body 2023-05-16 17:03:15 +00:00
Krille
e3bf76d8e2 Merge branch 'braid/update-fonts' into 'main'
chore: Update Roboto and Noto Emoji

See merge request famedly/fluffychat!1107
2023-05-16 16:56:09 +00:00
The one with the Braid
3445d5be21 refactor: Update Roboto and Noto Emoji 2023-05-16 16:56:09 +00:00
Krille
a838ba3000 Merge branch 'filenametolong' into 'main'
filename is too long and over the widget

See merge request famedly/fluffychat!1103
2023-05-16 16:55:19 +00:00
Skying
15b655413d fix: Too long file name cause a render overflow 2023-05-16 16:55:19 +00:00
Krille
2418c61498
chore: Follow up clean up 2023-05-16 18:51:01 +02:00
Krille
dfacbf9e32 Merge branch 'group-notif' into 'main'
Add Group Notifications

Closes #1175

See merge request famedly/fluffychat!1116
2023-05-16 16:50:20 +00:00
fbievan
85f5b69d6e feat: Add toggle to mute notifications from chat groups 2023-05-16 16:50:20 +00:00
Krille
08797da53d
feat: Implement new error reporting tool when critical features break like playing audio or video messages or opening a chat 2023-05-16 18:45:39 +02:00
Krille
d3bd2c3a08
builds: Change minsdkversion of Android from 16 to 19 2023-05-16 10:44:25 +02:00
Krille
1086c0e5cd Merge branch 'malin/improve-date-localization' into 'main'
Improve date localization

See merge request famedly/fluffychat!1118
2023-05-16 08:37:46 +00:00
Malin Errenst
60df0761a5
chore: Clean unused translations 2023-05-16 10:25:52 +02:00
Malin Errenst
650d878649
refactor: Use DateTime for weekday localization 2023-05-16 10:25:52 +02:00
Krille
06f399c76d
chore: Update dep ref 2023-05-16 09:35:27 +02:00
Krille
7c5b60474f
chore: Follow up update flutter matrix html 2023-05-16 09:12:13 +02:00
Krille
d81f92f2e2
builds: Linux with flutter 3.10 2023-05-15 19:14:03 +02:00
Krille
1a8038e51d
chore: Minor code clean up 2023-05-15 18:55:27 +02:00
Krille
54a6ce8391 Merge branch 'dart3' into 'main'
migrate to dart 3.0/flutter 3.10

Closes #1203

See merge request famedly/fluffychat!1114
2023-05-15 16:52:03 +00:00
lauren n. liberda
b1c38d766f builds: migrate to dart 3.0/flutter 3.10 2023-05-15 16:52:03 +00:00
Krille
f44e24aec1 Merge branch 'vrouter-context' into 'main'
fix "Unhandled Exception: VRouter.of(context) was called with a context which...

Closes #1163

See merge request famedly/fluffychat!1117
2023-05-15 16:37:51 +00:00
Lauren N. Liberda
325dcf901a
fix "Unhandled Exception: VRouter.of(context) was called with a context which does not contain a VRouter."
fixes #1163
2023-05-14 19:17:47 +02:00
Krille
77e1da8318
chore: Disable webrtc on linux again 2023-05-11 18:15:47 +02:00
Krille
b0a58d8524
perf: Use valuenotifier to not rebuild chatlist 2023-05-10 13:01:35 +02:00
Krille
623c3bfc2e
fix: Scroll down button 2023-05-09 15:14:35 +02:00
Krille
5cd6cf79a2
build: Remove dependency overwrite for ffi 2023-05-09 14:51:25 +02:00
Krille
e1d54fa992
build: Update dependencies 2023-05-09 14:47:05 +02:00
Krille
b1c481c4d1
fix: Broken arb file 2023-05-09 13:37:51 +02:00
Krille
64821e4ec5 Merge branch 'main' into 'main'
fix: Quick account switching

Closes #1186

See merge request famedly/fluffychat!1111
2023-05-08 13:26:59 +00:00
Krille
88585fb192
fix: Scrolldown button 2023-05-08 15:25:36 +02:00
JHansen
25f5d5f4fd Fix read reciepts 2023-05-08 12:02:15 +00:00
JHansen
d0d33ce2c8 Fix Quick account switching 2023-05-08 04:56:40 +00:00
Mæve Rey
32d8791fe9
Added translation using Weblate (Toki Pona) 2023-05-07 16:23:08 +02:00
Linerly
e76f42a706
Translated using Weblate (Indonesian)
Currently translated at 100.0% (559 of 559 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2023-05-07 15:48:59 +02:00
josé m
32f4e471cf
Translated using Weblate (Galician)
Currently translated at 100.0% (559 of 559 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/gl/
2023-05-06 05:50:56 +02:00
Krille
dd86a0fb00
chore: Bump version 2023-05-05 09:59:04 +02:00
Krille
a603597b20
fix: Chats do not load 2023-05-05 07:54:19 +02:00
Jelv
23b14e8730
Translated using Weblate (Dutch)
Currently translated at 100.0% (559 of 559 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/nl/
2023-05-04 18:50:33 +02:00
Ihor Hordiichuk
c4a7650e39
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (559 of 559 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2023-05-04 18:50:33 +02:00
Oğuz Ersen
c4bb5fa523
Translated using Weblate (Turkish)
Currently translated at 100.0% (559 of 559 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2023-05-04 18:50:32 +02:00
Eryk Michalak
fa684d265d
Translated using Weblate (Polish)
Currently translated at 100.0% (559 of 559 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/pl/
2023-05-04 18:50:32 +02:00
Milo Ivir
3eeaad17f0
Translated using Weblate (Croatian)
Currently translated at 100.0% (559 of 559 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/hr/
2023-05-04 18:50:31 +02:00
josé m
8d2697ffc6
Translated using Weblate (Galician)
Currently translated at 99.8% (558 of 559 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/gl/
2023-05-04 18:50:31 +02:00
Priit Jõerüüt
150ba308e9
Translated using Weblate (Estonian)
Currently translated at 100.0% (559 of 559 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/
2023-05-04 18:50:30 +02:00
Krille
ce18cfdf2a
feat: Permission dialog before open link in browser 2023-05-02 14:09:46 +02:00
MohammadSaleh Kamyab
17bccc0dea
Translated using Weblate (Persian)
Currently translated at 100.0% (558 of 558 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fa/
2023-04-21 17:52:20 +02:00
Milo Ivir
f8b7a6fef5
Translated using Weblate (Croatian)
Currently translated at 100.0% (558 of 558 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/hr/
2023-04-21 17:52:20 +02:00
Priit Jõerüüt
a68f7e8936
Translated using Weblate (Estonian)
Currently translated at 100.0% (558 of 558 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/
2023-04-21 17:52:19 +02:00
Krille
74ef50af49
chore: Update appleid 2023-04-20 08:43:22 +02:00
Krille
70698cf4ec
chore: Bump version 2023-04-20 08:38:39 +02:00
Krille
9bed679568
chore: Follow up file download type fix 2023-04-19 15:51:53 +02:00
Krille
99595caee5
chore: Disable integration tests until fixed 2023-04-19 08:49:56 +02:00
Krille
b39018e454
chore: Update to flutter 3.7.11 2023-04-18 07:19:44 +02:00
Linerly
08bed5d668
Translated using Weblate (Indonesian)
Currently translated at 100.0% (558 of 558 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2023-04-18 03:58:58 +02:00
Jelv
b78868397c
Translated using Weblate (Dutch)
Currently translated at 100.0% (558 of 558 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/nl/
2023-04-18 03:58:58 +02:00
Eryk Michalak
cbb4553fc0
Translated using Weblate (Polish)
Currently translated at 100.0% (558 of 558 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/pl/
2023-04-18 03:58:57 +02:00
Ihor Hordiichuk
3ddd661fb5
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (558 of 558 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2023-04-15 07:52:52 +02:00
Oğuz Ersen
4e8f2c3040
Translated using Weblate (Turkish)
Currently translated at 100.0% (558 of 558 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2023-04-15 07:52:52 +02:00
Krille
52ee4b923a
chore: Bump version 2023-04-14 14:27:45 +02:00
Krille
166fcce8ba
style: Make emptypage logo bigger 2023-04-14 14:24:18 +02:00
Krille
92072904e6
chore: Load chat at last read marker 2023-04-14 14:23:58 +02:00
Krille
9ace2fe07b
chore: Follow up push android priority and channels 2023-04-12 09:32:18 +02:00
Krille
8913b42803
fix: Set fcm priority to max on android 2023-04-12 09:18:20 +02:00
Krille
253a3afbdd Merge branch 'krille/update-flutter-3-7-10' into 'main'
chore: Update flutter to 3.7.10 and switch to self hosted cirruslabs image

See merge request famedly/fluffychat!1108
2023-04-12 06:38:20 +00:00
Krille
af2907b946
chore: Update flutter to 3.7.10 and switch to self hosted cirruslabs image 2023-04-12 08:37:59 +02:00
Jelv
02a0c4760a
Translated using Weblate (Dutch)
Currently translated at 99.1% (552 of 557 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/nl/
2023-04-11 06:42:12 +02:00
josé m
e9899fce8e
Translated using Weblate (Galician)
Currently translated at 100.0% (557 of 557 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/gl/
2023-04-03 07:38:07 +02:00
Krille
63a9f9ca90
chore: Follow up jump to event 2023-04-02 09:33:27 +02:00
Kristoffer Grundström
b5364e1619
Translated using Weblate (Swedish)
Currently translated at 100.0% (557 of 557 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/sv/
2023-04-01 00:39:58 +02:00
Krille
742dcb8f41
chore: ScrollToEventId duration for jump in timeline 2023-03-31 12:18:24 +02:00
Siavash
dda90c85a4
Translated using Weblate (Persian)
Currently translated at 100.0% (557 of 557 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fa/
2023-03-30 12:37:13 +02:00
Siavash
16455da39f
Translated using Weblate (Persian)
Currently translated at 99.6% (555 of 557 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fa/
2023-03-29 11:17:52 +02:00
Parsa
b69e3969cb
Translated using Weblate (Persian)
Currently translated at 99.6% (555 of 557 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fa/
2023-03-29 11:17:51 +02:00
Anne Onyme 017
14c904b214
Translated using Weblate (French)
Currently translated at 100.0% (557 of 557 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fr/
2023-03-29 11:17:50 +02:00
Krille
0d12c31393
chore: Follow up sso for desktop 2023-03-26 11:20:54 +02:00
Krille
d6b3482ce2
chore: Downgrade flutter to 3.7.7 2023-03-26 10:58:52 +02:00
Krille
f4eb6318cc Merge branch 'flutterwebauto2' into 'main'
feat: change to flutterwebauth2

See merge request famedly/fluffychat!1100
2023-03-26 08:57:01 +00:00
Linerly
c8b421d43e
Translated using Weblate (Indonesian)
Currently translated at 100.0% (557 of 557 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2023-03-26 09:37:00 +02:00
Parsa
87280a0e21
Translated using Weblate (Persian)
Currently translated at 66.7% (372 of 557 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fa/
2023-03-26 09:36:59 +02:00
Ihor Hordiichuk
96d3f83933
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (557 of 557 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2023-03-26 09:36:59 +02:00
Oğuz Ersen
bb3eddb021
Translated using Weblate (Turkish)
Currently translated at 100.0% (557 of 557 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2023-03-26 09:36:58 +02:00
Priit Jõerüüt
59c403603b
Translated using Weblate (Estonian)
Currently translated at 100.0% (557 of 557 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/
2023-03-26 09:36:58 +02:00
Krille
fd7d732762
chore: Update flutter version 2023-03-25 15:53:54 +01:00
Krille
fc8fe60613
chore: Follow up jump to unread message 2023-03-25 15:23:14 +01:00
Krille
2acf49a12b
refactor: Not nullable room in ChatPage 2023-03-25 15:06:12 +01:00
Krille
2f6799470c
refactor: Client in ChatPage 2023-03-25 14:58:51 +01:00
Krille
507cd1f17e
refactor: Use correct Matrix instance 2023-03-25 14:57:27 +01:00
Linerly
f1a8716832
Translated using Weblate (Indonesian)
Currently translated at 100.0% (556 of 556 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2023-03-24 08:31:42 +01:00
Parsa
f99aad5a18
Translated using Weblate (Persian)
Currently translated at 60.7% (338 of 556 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fa/
2023-03-24 08:31:42 +01:00
Ihor Hordiichuk
caa816beec
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (556 of 556 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2023-03-24 08:31:42 +01:00
Oğuz Ersen
605ba186d6
Translated using Weblate (Turkish)
Currently translated at 100.0% (556 of 556 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2023-03-24 08:31:42 +01:00
josé m
8fa14659be
Translated using Weblate (Galician)
Currently translated at 100.0% (556 of 556 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/gl/
2023-03-24 08:31:42 +01:00
Priit Jõerüüt
e1fe8c2ed5
Translated using Weblate (Estonian)
Currently translated at 100.0% (556 of 556 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/
2023-03-24 08:31:42 +01:00
Krille
2e73051b81
feat: Add read marker 2023-03-24 08:31:28 +01:00
Krille
1a61ed5d85 Merge branch 'main' into 'main'
treewide: Container -> SizedBox.shrink()

See merge request famedly/fluffychat!1093
2023-03-24 07:30:58 +00:00
noob_tea
9ad8550449 treewide: Container -> SizedBox.shrink()
This helps performance without any user-facing changes,
since SizedBox is constant while Container isn't
2023-03-22 20:30:59 +01:00
Krille
8422c2bf3c
chore: Follow up lastreadeventisvisible marker 2023-03-22 15:06:40 +01:00
Linerly
bf2e6b2787
Translated using Weblate (Indonesian)
Currently translated at 100.0% (555 of 555 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2023-03-22 13:57:42 +01:00
Siavash
9e01d51520
Translated using Weblate (Persian)
Currently translated at 40.3% (224 of 555 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fa/
2023-03-22 13:57:42 +01:00
Eric
07b92bf876
Translated using Weblate (Chinese (Simplified))
Currently translated at 98.5% (547 of 555 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/zh_Hans/
2023-03-22 13:57:42 +01:00
Ihor Hordiichuk
4863c4a8f3
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (555 of 555 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2023-03-22 13:57:42 +01:00
Oğuz Ersen
9def8de5a8
Translated using Weblate (Turkish)
Currently translated at 100.0% (555 of 555 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2023-03-22 13:57:42 +01:00
josé m
f08968800e
Translated using Weblate (Galician)
Currently translated at 100.0% (555 of 555 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/gl/
2023-03-22 13:57:42 +01:00
Priit Jõerüüt
d8dee5905d
Translated using Weblate (Estonian)
Currently translated at 100.0% (555 of 555 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/
2023-03-22 13:57:42 +01:00
Krille
c2768ae40a
feat: Jump to last read event 2023-03-22 13:16:00 +01:00
Krille
a4a852ede8
feat: Use fragmented timeline to jump to event 2023-03-22 09:16:07 +01:00
Krille
ede1e289ce
chore: Follow up new sliverappbar in chatlist 2023-03-22 08:54:36 +01:00
Krille
d211dd4aeb
chore: Follow up styling 2023-03-20 07:56:49 +01:00
Krille
20c1dbd00a
style: Use SliverList for chatlist 2023-03-19 19:59:50 +01:00
ShootingStarDragons
fa02384808 feat: change to flutterwebauth2 2023-03-19 23:18:31 +08:00
Krille
dd4f2fcc35
chore: Finish arm64 linux workaround 2023-03-19 14:02:49 +01:00
Krille
1b2708f4b0
chore: Final try workaround arm64 linux 2023-03-19 10:06:27 +01:00
Krille
7c9e2bfe3c
chore: Workaround adjustments 2023-03-19 09:35:18 +01:00
Krille
13365488b4
chore: Try again workaround linux arm64 build 2023-03-19 09:33:20 +01:00
Krille
02f564f7ed
chore: Remove workaround for linux arm 2023-03-19 09:06:49 +01:00
Krille
0222e6ecd5
chore: Follow up android download dir 2023-03-19 09:04:08 +01:00
Krille
df91290a18
chore: Follow up download android 2023-03-19 09:01:14 +01:00
Krille
57618417a1
chore: Maybe fix arm64 2023-03-19 08:38:28 +01:00
Krille
5e3c47a433 Merge branch 'krille/clean-up-ci' into 'main'
refactor: CI scripts and old workarounds for build scripts

See merge request famedly/fluffychat!1101
2023-03-19 07:33:17 +00:00
Krille
b30622c1b9
refactor: CI scripts and old workarounds for build scripts 2023-03-19 08:17:16 +01:00
Krille
eb651212e6
CI: Use external runners only for integration tests 2023-03-19 07:35:16 +01:00
Krille
78aa686699
chore: Follow up fix google services patch 2023-03-19 07:28:44 +01:00
Krille
156217c3ae
refactor: Switch to file_picker package and get rid of some dependency overrides 2023-03-18 17:02:12 +01:00
Krille
644ef388de
chore: Follow up redesign listtiles in user bottom sheet 2023-03-18 15:26:17 +01:00
Krille
71eac7078e style: Move chats to top 2023-03-15 21:07:36 +01:00
Krille
511dd41d30 fix: Join public room 2023-03-15 19:39:05 +01:00
Krille
f24b3ee09b style: Minor adjustments for modal bottom sheets 2023-03-15 19:31:14 +01:00
Christian Kußowski
3b6321383e chore: Update matrix sdk to 0.18.0 2023-03-15 09:44:51 +01:00
Oğuz Ersen
8888fd5884
Translated using Weblate (Turkish)
Currently translated at 100.0% (554 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2023-03-12 21:07:57 +01:00
Luna
0accfe4a26
Translated using Weblate (Polish)
Currently translated at 99.2% (550 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/pl/
2023-03-12 21:07:56 +01:00
Christian Kußowski
535081b483 chore: Follow up qr code width 2023-03-12 17:39:04 +01:00
Christian Kußowski
0f10dfaf91 chore: Update build number 2023-03-12 17:21:17 +01:00
Krille
f0ac88c9ee Merge branch 'nico/fix-emote-rooms-without-default' into 'main'
fix: type error in emote pack list in rooms with only non-default packs

Closes #1138

See merge request famedly/fluffychat!1098
2023-03-11 16:54:38 +00:00
Krille
f4d13e86b6 chore: disable webrtc on linux again 2023-03-11 17:47:52 +01:00
Nicolas Werner
303ccbe965
fix: type error in emote pack list in rooms with only non-default packs
If a room has emote packs, but none of them have an empty state key, we
insert 'null' to also add a default pack people can easily edit.
However, in that case we initialized the Map<String, Event?> variable
with a Map<String, Event>. As such assigning null will throw. Converting
manually with Map.of fixes that.

fixes #1138
2023-03-11 15:05:08 +01:00
Christian
ade164d824
Translated using Weblate (Polish)
Currently translated at 83.3% (462 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/pl/
2023-03-11 07:04:09 +01:00
Luna
e40c86c7e6
Translated using Weblate (Polish)
Currently translated at 83.3% (462 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/pl/
2023-03-11 06:43:50 +01:00
Very Able
a87946a34b
Translated using Weblate (German)
Currently translated at 100.0% (554 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/de/
2023-03-11 06:43:50 +01:00
Krille
863c5f1c13 Merge branch 'eighthave-main-patch-71793' into 'main'
docs: let f-droid.org show the right language to the user

See merge request famedly/fluffychat!1092
2023-03-11 05:43:44 +00:00
Krille
6d21b54c62 Merge branch 'no-key-typo-fix' into 'main'
Fix typo (loose->lose)

See merge request famedly/fluffychat!1094
2023-03-11 05:42:54 +00:00
Krille
c984a272b3 Merge branch 'malin/flutter-3-7-7' into 'main'
chore: Update to Flutter 3.7.7

See merge request famedly/fluffychat!1096
2023-03-11 05:41:49 +00:00
Malin Errenst
6cf0903af3 chore: Update to Flutter 3.7.7 2023-03-10 11:35:50 +01:00
Krille
16a533cf40 refactor: Remove unused dependency 2023-03-09 20:34:32 +01:00
Krille
3e8d14a53f chore: Switch back to main webrtc 2023-03-09 20:32:59 +01:00
Anonimas
1925578a86
Translated using Weblate (Lithuanian)
Currently translated at 96.0% (532 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/lt/
2023-03-07 23:32:43 +01:00
Christian Kußowski
fc62ff3eaa chore: update to flutter 3.7.6 2023-03-07 11:15:52 +01:00
Vivianne Langdon
15dbe4433d Fix typo 2023-03-05 20:14:04 +00:00
Christian Pauly
a8d6dadf84 chore: Update to Flutter 3.7.5 2023-03-03 14:35:37 +01:00
Hans-Christoph Steiner
ee2b55ca78 let f-droid.org show the right language to the user
The old URL forces the page language to German e,g, `de`.  Removing the locale makes f-droid.org show the language that the browser is using.
2023-03-02 10:56:06 +00:00
Christian Pauly
090b026b92 chore: Fix formatting 2023-03-02 11:54:20 +01:00
Krille
e461cb1f53 Merge branch 'malin/addRequireTrailingCommasRule' into 'main'
refactor: Added and applied require_trailing_commas linter rule

See merge request famedly/fluffychat!1091
2023-03-02 10:28:45 +00:00
Malin Errenst
5212d7ce4d refactor: Added and applied require_trailing_commas linter rule 2023-03-02 11:21:40 +01:00
MohammadSaleh Kamyab
ed9e58d0bf
Translated using Weblate (Persian)
Currently translated at 40.0% (222 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fa/
2023-02-27 14:49:21 +01:00
Krille
2b2c230fcf style: Adjust new chat page 2023-02-26 21:13:56 +01:00
Krille
ecf5adcdea chore: Bump version 2023-02-25 15:28:02 +01:00
Krille
6851d34d35 chore: Lookup l10n in pushhelper if null 2023-02-25 15:26:17 +01:00
Krille
006f2f527f Merge branch 'notification_error' into 'main'
Default hardcoded message when l10n is not available

Closes #1146

See merge request famedly/fluffychat!1090
2023-02-25 14:22:08 +00:00
Linerly
1cb20c9ec5
Translated using Weblate (Indonesian)
Currently translated at 100.0% (554 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2023-02-25 14:37:56 +01:00
Farooq Karimi Zadeh
ec49c5a541
Translated using Weblate (Persian)
Currently translated at 40.0% (222 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fa/
2023-02-25 14:37:56 +01:00
Ihor Hordiichuk
7bbd898131
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (554 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2023-02-25 14:37:55 +01:00
Oğuz Ersen
031da77da6
Translated using Weblate (Turkish)
Currently translated at 100.0% (554 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2023-02-25 14:37:55 +01:00
josé m
bfd76fdb79
Translated using Weblate (Galician)
Currently translated at 100.0% (554 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/gl/
2023-02-25 14:37:55 +01:00
Priit Jõerüüt
0c28169043
Translated using Weblate (Estonian)
Currently translated at 100.0% (554 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/
2023-02-25 14:37:54 +01:00
fabienli
fc1b49cf69 Default hardcoded message when l10n is not available 2023-02-25 08:13:50 +01:00
Wphaoka
2b701cf56c
Added translation using Weblate (Thai) 2023-02-24 11:25:27 +01:00
xabirequejo
8b386142cf
Translated using Weblate (Basque)
Currently translated at 96.9% (537 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/eu/
2023-02-23 07:59:45 +01:00
Christian Pauly
cd7e27a6e0 style: Adjust key verification dialog 2023-02-22 15:21:38 +01:00
Christian Pauly
9ab3332824 chore: Follow up formatting 2023-02-21 15:08:01 +01:00
Krille
a60e1435c2 Merge branch 'fix_url_launch_mode' into 'main'
utils/url_launcher: force opening http(s) links in external browser

Closes #519

See merge request famedly/fluffychat!1089
2023-02-21 10:43:49 +00:00
Joaquim Homrighausen
d56ca697ea
Translated using Weblate (Swedish)
Currently translated at 100.0% (554 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/sv/
2023-02-21 11:38:35 +01:00
Marcus Hoffmann
9eaaef1048 utils/url_launcher: force opening http(s) links in external browser
The (mobile) platform implementations for url_launcher default to
opening any http(s) link inside a webview instead of the platform
browser. This seems to be a longer-time problem for iOS
(https://gitlab.com/famedly/fluffychat/-/issues/519) but very recently
started to affect Android as well.

Force url_launcher to always use an external application (the browser,
most likely, but possibly other apps might handle those links as well)
as opening links from a messaging app in a webview provides terrible UX.

(For instance a link might lead to some webpage where you start to fill
in some info but then you need to ask someone via the messanger but
can't go back without closing the webview and losing all state. Or if
you happen to re-launch FluffyChat via the home-screen than it goes back
to the home view and the webview state is completely lost as well.)
2023-02-18 21:42:09 +01:00
josé m
a95cd85eb0
Translated using Weblate (Galician)
Currently translated at 100.0% (554 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/gl/
2023-02-17 20:39:34 +01:00
Krille
32f347ee6f chore: Update matrix package to 0.17.0 2023-02-17 18:28:18 +01:00
Krille
d9645480ac chore: Follow up chat encryption desgin 2023-02-17 16:34:01 +01:00
Christian Pauly
73174003a9 style: Encryption page adjustments 2023-02-17 13:01:44 +01:00
Christian Pauly
3c17d812b3 style: Bootstrap design adjustments 2023-02-17 09:34:23 +01:00
Christian Pauly
e08f601bfd style: Use robotomono to display device keys 2023-02-17 08:45:49 +01:00
Nathan Freitas
799bec5ad9
Added translation using Weblate (Tibetan) 2023-02-15 17:12:44 +01:00
Christian Pauly
a602dc08d5 chore: Follow up fix audioplayer on android 2023-02-15 15:46:14 +01:00
Christian Pauly
a48e42dfcf refactor: Remove syncstatus verbose logs 2023-02-15 15:27:23 +01:00
Linerly
9384ef0503
Translated using Weblate (Indonesian)
Currently translated at 100.0% (554 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2023-02-15 11:37:10 +01:00
Jelv
d8d9df4e50
Translated using Weblate (Dutch)
Currently translated at 100.0% (554 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/nl/
2023-02-15 11:37:10 +01:00
Ihor Hordiichuk
db2c768029
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (554 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2023-02-15 11:37:09 +01:00
Oğuz Ersen
3353eef728
Translated using Weblate (Turkish)
Currently translated at 100.0% (554 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2023-02-15 11:37:09 +01:00
Priit Jõerüüt
fba6f60500
Translated using Weblate (Estonian)
Currently translated at 100.0% (554 of 554 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/
2023-02-15 11:37:09 +01:00
Krille
10fcf2bac4 chore: Follow up audioplayer on linux 2023-02-14 17:21:06 +01:00
Krille
1cbfb592e9 refactor: Store cached files in tmp directory so OS will clear file cache from time to time 2023-02-14 17:19:28 +01:00
Krille
dfc933115f chore: Disable stable for web until script is fixed 2023-02-14 17:03:26 +01:00
Christian Pauly
2d0e7a491e style: Link underline color 2023-02-14 14:05:18 +01:00
Christian Pauly
e49408e5b0 refactor: Do only instantiate AudioPlayer() object when in use 2023-02-14 12:54:57 +01:00
Christian Pauly
69e0c48c8e feat: Enable audioplayer for web and linux 2023-02-14 09:15:47 +01:00
Suguru Hirahara
4345ab9772
Translated using Weblate (Japanese)
Currently translated at 96.2% (532 of 553 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/ja/
2023-02-13 15:38:22 +01:00
Christian Pauly
a76ea48d84 fix: Display error when user tries to send too large file 2023-02-13 15:38:08 +01:00
Jelv
78a5206ba7
Translated using Weblate (Dutch)
Currently translated at 100.0% (553 of 553 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/nl/
2023-02-10 11:35:41 +01:00
Suguru Hirahara
ac11341677
Translated using Weblate (Japanese)
Currently translated at 64.9% (359 of 553 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/ja/
2023-02-09 06:37:52 +01:00
Anne Onyme 017
446fa75a90
Translated using Weblate (French)
Currently translated at 100.0% (553 of 553 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fr/
2023-02-09 06:37:51 +01:00
Priit Jõerüüt
d52bba3523
Translated using Weblate (Estonian)
Currently translated at 100.0% (553 of 553 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/
2023-02-09 06:37:51 +01:00
Christian Pauly
55c8475eba chore: Follow up settings page design 2023-02-07 13:52:14 +01:00
Christian Pauly
80b5a2b3d4 style: Use emojis on web as well 2023-02-07 12:24:22 +01:00
Linerly
da91c2bd9f
Translated using Weblate (Indonesian)
Currently translated at 100.0% (553 of 553 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2023-02-06 14:34:12 +01:00
Ihor Hordiichuk
116b4ca361
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (553 of 553 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2023-02-06 14:34:11 +01:00
Oğuz Ersen
5fc4230f9b
Translated using Weblate (Turkish)
Currently translated at 100.0% (553 of 553 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2023-02-06 14:34:10 +01:00
Krille
cf88eb1fd7 style: Make invite page more pretty 2023-02-05 13:08:58 +01:00
Krille
cef5fbe3c8 style: Enhance user device settings design 2023-02-05 10:41:28 +01:00
Krille
2ccc30879b chore: Display warning when logout without backup 2023-02-05 10:34:50 +01:00
Krille
c670dc2700 chore: Follow up style adjustments 2023-02-05 10:22:24 +01:00
Krille
d3240fd261 chore: Follow up remove hero animation 2023-02-05 10:09:31 +01:00
9cfffdfa66 docs/qr-stable.svg: update the QR code 2023-02-05 06:39:40 +00:00
Krille
564d1180ed chore: Follow up formatting 2023-02-05 07:39:03 +01:00
Krille
ca03042ff8 chore: Downgrade flutter CI version 2023-02-04 22:00:12 +01:00
Krille
50dc19b0de chore: Follow up settings page 2023-02-04 21:59:53 +01:00
Krille
72767f0716 style: Enhanced chat details design 2023-02-04 19:10:27 +01:00
Krille
59d3793060 chore: Follow up secrity settings design 2023-02-04 18:52:04 +01:00
Krille
a090346046 style: Give chat list list tiles rounded corners 2023-02-04 18:50:15 +01:00
Krille
ede5fdc348 style: New settings design 2023-02-04 18:32:56 +01:00
Krille
90482009fc style: Make adaptive bottom sheets scrollable by default 2023-02-04 17:00:05 +01:00
Krille
4c91ea6002 style: Nicer chips in encryption settings and icons showing device status 2023-02-04 16:56:42 +01:00
Krille
92fa8e1ca5 chore: Update to Flutter 3.7.1 2023-02-04 14:11:12 +00:00
machiav3lli
3442e44a07 Fix: The stable repo fingerprint (TODO the qr-code should be updated) 2023-02-04 01:14:39 +00:00
q234rty
2cab1fb03b Fix file picker on Linux 2023-02-03 08:39:25 +00:00
Christian Pauly
13a3321bab refactor: Use dynamic color package instead of system theme 2023-02-03 09:27:25 +01:00
Christian Pauly
0f69a1fefb chore: Follow up dividercolor 2023-02-03 08:06:38 +01:00
Christian Pauly
ab5aea4caf fix: Set room visibility on group creation 2023-02-03 08:05:44 +01:00
Krille
8eba2b2a1f docs: Add link back to mastodon profile 2023-02-02 18:38:46 +01:00
Christian Pauly
44ea0a9da5 ci: Allow buildwindows to fail 2023-02-02 12:20:22 +01:00
Christian Pauly
538715843b ci: Workaround for failing linux build 2023-02-02 10:38:23 +01:00
Christian Pauly
0c07b2967a chore: Update changelog 2023-02-02 10:15:19 +01:00
Christian Pauly
0262d776d5 fix: Notification settings 2023-02-02 09:57:56 +01:00
Christian Pauly
9bad93c2df design: Adjust design to new material 3 capabilities of Flutter 3.7 2023-02-02 09:57:53 +01:00
Gabriel Rodríguez
5c10e96a7b fix: avatar color 2023-02-02 08:56:15 +00:00
Gabriel Rodríguez
a309cb78ac fix: display name contrast in dark mode 2023-02-02 08:56:15 +00:00
William Desportes
918acb9beb
Translated using Weblate (French)
Currently translated at 100.0% (551 of 551 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fr/
2023-01-31 09:40:14 +01:00
guluszem
ecd549cd9e
Translated using Weblate (Hungarian)
Currently translated at 71.1% (392 of 551 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/hu/
2023-01-30 18:41:01 +01:00
guluszem
bd41fa3873
Translated using Weblate (German)
Currently translated at 100.0% (551 of 551 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/de/
2023-01-30 18:41:00 +01:00
Krille
b493f18e54 chore: Bump version 2023-01-29 08:57:08 +01:00
Youngbin Han
215e78f3d5
Translated using Weblate (Korean)
Currently translated at 82.5% (455 of 551 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/ko/
2023-01-27 16:47:21 +01:00
Christian Pauly
ad9e34a49e fix: Shared preferences package for flutter 3.7 2023-01-27 14:11:49 +01:00
Christian Pauly
8503bbd33c refactor: Migrate to Flutter 3.7.0 2023-01-26 13:18:42 +01:00
grreby
426ca2480f
Translated using Weblate (Czech)
Currently translated at 86.5% (477 of 551 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/cs/
2023-01-23 20:52:36 +01:00
grreby
1d1710302a
Translated using Weblate (Czech)
Currently translated at 84.2% (464 of 551 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/cs/
2023-01-22 19:23:58 +01:00
Krille
972df73dd9 chore: Update Matrix SDK and refactor 2023-01-20 16:59:50 +01:00
Vri 🌈
ce889e2c23
Translated using Weblate (German)
Currently translated at 99.8% (550 of 551 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/de/
2023-01-20 14:57:02 +01:00
Wiktor
1eca7c9b07
Translated using Weblate (Polish)
Currently translated at 67.1% (370 of 551 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/pl/
2023-01-18 13:47:31 +01:00
josé m
85d3a11030
Translated using Weblate (Galician)
Currently translated at 100.0% (551 of 551 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/gl/
2023-01-16 07:47:59 +01:00
Krille
bf084f1ccc chore: Remove unused dependency 2023-01-15 10:06:02 +01:00
Krille
4afb9a4790 chore: Follow up leave abandoned DM room 2023-01-15 10:05:54 +01:00
TheOneWithTheBraid
ddb7cc841b chore: add integration tests for spaces
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-01-14 10:46:18 +01:00
Krille
a1f60b7ff9 fix: Archive 2023-01-13 10:38:39 +00:00
Krille
8632154832 style: Redesign public room bottomsheets 2023-01-13 10:38:39 +00:00
Krille
1f71227221 Merge branch 'braid/less-tests' into 'main'
refactor: disable some redundant tests

See merge request famedly/fluffychat!1075
2023-01-13 09:45:09 +00:00
TheOneWithTheBraid
3d9e94f08d refactor: disable some redundant tests
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-01-13 10:26:43 +01:00
Christian
b76f270e24
Deleted translation using Weblate (Yue (yue_HK)) 2023-01-08 11:37:34 +01:00
Krille
8f9e1a9142 Merge branch 'krille/nicer-modal-bottom-sheet' into 'main'
style: New modal bottom sheets

See merge request famedly/fluffychat!1071
2023-01-08 10:35:31 +00:00
Krille
fbb68686ea style: New modal bottom sheets 2023-01-08 11:07:31 +01:00
Priit Jõerüüt
9eee50dbae
Translated using Weblate (Estonian)
Currently translated at 100.0% (551 of 551 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/
2023-01-08 00:08:00 +01:00
Raatty
3be35991b5
Added translation using Weblate (Yue (yue_HK)) 2023-01-08 00:00:41 +01:00
Linerly
1aa0ea2cea
Translated using Weblate (Indonesian)
Currently translated at 100.0% (551 of 551 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2023-01-07 19:49:08 +01:00
Jelv
a7dd62c721
Translated using Weblate (Dutch)
Currently translated at 100.0% (551 of 551 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/nl/
2023-01-07 19:49:08 +01:00
Ihor Hordiichuk
1542a4b66c
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (551 of 551 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2023-01-07 19:49:07 +01:00
Oğuz Ersen
d39bcbafde
Translated using Weblate (Turkish)
Currently translated at 100.0% (551 of 551 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2023-01-07 19:49:07 +01:00
Krille
8513d74cc1 refactor: Same animations everywhere in app 2023-01-07 09:22:31 +01:00
Krille
22abd54176 style: Animate in out search results 2023-01-07 09:14:14 +01:00
josé m
ba885ca69e
Translated using Weblate (Galician)
Currently translated at 100.0% (550 of 550 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/gl/
2023-01-06 08:54:29 +01:00
Christian Pauly
754b919531 feat: Nicer design for abandonded DM rooms 2023-01-06 08:54:17 +01:00
Christian Pauly
8fd2d3918c chore: Fix google services patch 2023-01-06 08:47:03 +01:00
Krille
d000f6e5a7 chore: Update dependencies 2023-01-05 18:21:13 +01:00
Linerly
66858cdf12
Translated using Weblate (Indonesian)
Currently translated at 100.0% (550 of 550 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2023-01-04 23:48:23 +01:00
Ihor Hordiichuk
4fb1a76060
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (550 of 550 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2023-01-04 23:48:23 +01:00
Oğuz Ersen
de23cb0f5b
Translated using Weblate (Turkish)
Currently translated at 100.0% (550 of 550 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2023-01-04 23:48:23 +01:00
Priit Jõerüüt
cf7053f338
Translated using Weblate (Estonian)
Currently translated at 100.0% (550 of 550 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/
2023-01-04 23:48:22 +01:00
The one with the Braid
20e26b3747 Merge branch 'braid/integration-tests' into 'main'
chore: add integration tests

See merge request famedly/fluffychat!1062
2023-01-03 19:17:06 +00:00
TheOneWithTheBraid
ed075a35b6 chore: add integration tests
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-01-03 19:59:56 +01:00
Krille
6b3252b6ad docs: Update website 2023-01-03 19:13:03 +01:00
Krille
5e5132c290 chore: Change invite link textfield label 2023-01-03 18:33:58 +01:00
Krille
b4df8c129d design: More clear chat background and rounded popup menu 2023-01-03 18:29:03 +01:00
Krille
37bf943ac7 chore: Follow up dark mode color 2023-01-03 18:01:53 +01:00
Krille
264f36ea59 design: Nicer navigationrail 2023-01-03 18:00:56 +01:00
Krille
b894a4542a chore: Update flutter_map 2023-01-03 17:31:03 +01:00
Krille
6e9e3d05d2 chore: Remove unused translations 2023-01-03 17:23:09 +01:00
Krille
d0b32e44ce Merge branch 'main' into 'main'
feat: Bring back disabling the header bar on Linux desktop

See merge request famedly/fluffychat!1064
2023-01-03 16:19:52 +00:00
Christian
caa3823c26
Translated using Weblate (German)
Currently translated at 100.0% (649 of 649 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/de/
2023-01-03 12:49:18 +01:00
Michal Bedáň
df33df35da
Translated using Weblate (Czech)
Currently translated at 85.6% (556 of 649 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/cs/
2023-01-03 12:49:18 +01:00
Krille
63abbf403a Merge branch 'braid/web-build-job-permissions' into 'main'
fix: permission of web builds

See merge request famedly/fluffychat!1067
2023-01-03 07:54:41 +00:00
TheOneWithTheBraid
6ff4f480ac fix: permission of web builds
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2023-01-03 07:40:13 +01:00
Krille
fd152baa28 refactor: Stories header with futurebuilder 2023-01-02 17:12:24 +01:00
Krille
09a74bf3ee docs: More minimalistic website 2023-01-01 18:44:00 +01:00
Krille
5df709e12b docs: Remove twitter link 2023-01-01 12:10:38 +00:00
Ihor Hordiichuk
cba5fa2daf
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (649 of 649 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2022-12-31 22:51:01 +01:00
Oğuz Ersen
cab78f3571
Translated using Weblate (Turkish)
Currently translated at 100.0% (649 of 649 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2022-12-31 22:51:01 +01:00
q234rty
4cd501d00c feat: Bring back disabling the header bar on Linux desktop
(cherry picked from commit 5ca4b66157cc7a2ace9140260d52d224616ce924)
2022-12-31 22:43:36 +08:00
Krille
edfd8f36ab chore: Revert push channel changes 2022-12-31 15:14:38 +01:00
Krille
7635104505 Revert "fix: Android push notification follow-up"
This reverts commit b24a7d9510c221c7ee685f3e68a213dc83ca8618
2022-12-31 14:13:09 +00:00
Krille
835d97f439 chore: Follow up draft fix 2022-12-30 18:24:34 +01:00
Krille
c9f4904d99 refactor: Remove dart from folder name 2022-12-30 17:54:50 +01:00
Linerly
bd5a6e5578
Translated using Weblate (Indonesian)
Currently translated at 100.0% (649 of 649 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2022-12-30 17:50:29 +01:00
Christian
29ec1735e9
Translated using Weblate (German)
Currently translated at 100.0% (649 of 649 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/de/
2022-12-30 17:50:29 +01:00
Krille
7436cb4aa8 chore: Minor lable fixes 2022-12-30 17:45:58 +01:00
Krille
ee3351f643 chore: Follow up fix 2022-12-30 16:27:44 +01:00
Krille
fff3dc9946 refactor: New private chat 2022-12-30 14:37:13 +01:00
Krille Fear
1e1e591d27 feat: Store drafts 2022-12-30 13:32:52 +01:00
Krille Fear
abb99df271 chore: Bump version 2022-12-30 13:12:20 +01:00
Krille Fear
6616314d77 fix: Hide google services warning after marked 2022-12-30 13:09:21 +01:00
Krille Fear
3cb7842a7b chore: Make audio player dialog not dismissable 2022-12-30 12:53:42 +01:00
Krille Fear
77aca413fb chore: Remove deprecated share button 2022-12-30 12:52:29 +01:00
Krille Fear
04f34a4301 chore: Remove deprecated share button 2022-12-30 12:49:17 +01:00
Krille Fear
d3e3252de8 chore: Disable audio player on linux 2022-12-30 12:36:20 +01:00
Krille Fear
ca203608fa feat: Add audio message support to linux 2022-12-30 10:51:26 +01:00
Krille Fear
e9d02336e1 fix: File event design 2022-12-30 10:40:53 +01:00
Krille Fear
b3ad9a3a70 chore: Minor design adjustments 2022-12-30 09:12:27 +01:00
Krille Fear
d2f472e86c fix: Content banner 2022-12-30 09:04:46 +01:00
Krille Fear
338331d6e1 fix: Correct redacted by username 2022-12-30 09:01:43 +01:00
Krille Fear
b65357576c fix: Encryption button is orange in public rooms 2022-12-30 09:00:01 +01:00
Krille Fear
99b0ee194c chore: Nicer new chat design 2022-12-30 08:59:00 +01:00
Krille Fear
d930b569fc chore: Adjust onboarding design 2022-12-29 20:38:13 +01:00
Krille Fear
7da70ebeba fix: Do not setup push on every app resume 2022-12-29 10:35:02 +01:00
Krille Fear
54303ef635 chore: Follow up fix search bar 2022-12-29 10:33:13 +01:00
Krille Fear
05285b46d8 chore: Follow up fix chat list 2022-12-29 10:26:01 +01:00
Krille Fear
220dda715a chore: Remove broken arb file 2022-12-29 10:08:50 +01:00
Raatty
a702a12c71
Added translation using Weblate (Yue (yue_HK)) 2022-12-28 23:47:12 +01:00
Linerly
17f8eda6e4
Translated using Weblate (Indonesian)
Currently translated at 100.0% (647 of 647 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2022-12-28 08:41:47 +01:00
Mike Evans
139d1f01ca
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (647 of 647 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/zh_Hans/
2022-12-28 08:41:47 +01:00
Ihor Hordiichuk
7b3cfe875f
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (647 of 647 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2022-12-28 08:41:47 +01:00
Oğuz Ersen
3b455d7801
Translated using Weblate (Turkish)
Currently translated at 100.0% (647 of 647 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2022-12-28 08:41:47 +01:00
Anne Onyme 017
ed68fc55fc
Translated using Weblate (French)
Currently translated at 100.0% (647 of 647 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/fr/
2022-12-28 08:41:47 +01:00
Priit Jõerüüt
108c620326
Translated using Weblate (Estonian)
Currently translated at 100.0% (647 of 647 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/et/
2022-12-28 08:41:47 +01:00
The one with the Braid
accd4b9a23 Merge branch 'braid/room-list-fixes' into 'main'
fix: minor issues in room list

See merge request famedly/fluffychat!1056
2022-12-28 07:41:40 +00:00
TheOneWithTheBraid
0a4f7c9d26 fix: minor issues in room list
- allow to discard focus of search field
- properly circle the search field's progress indicator
- always keep search sections visible in order to workaround annoying
  behavior: When quickly searching for a chat and one is fast at
clicking on a room, it often happens that server side results just drop
in at this moment and one clicks at the wrong item -> with a static
height as now set, this no longer happens.

Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2022-12-28 08:35:06 +01:00
Krille
2512630172 Merge branch 'braid/android-push-follow-up' into 'main'
fix: Android push notification follow-up

See merge request famedly/fluffychat!1061
2022-12-28 07:35:02 +00:00
The one with the Braid
30b17beaa7 Merge branch 'braid/windows-olm' into 'main'
feat: include olm to Windows builds

See merge request famedly/fluffychat!1007
2022-12-28 07:16:47 +00:00
TheOneWithTheBraid
e368227780 feat: include olm to Windows builds
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2022-12-28 08:08:58 +01:00
Krille
f9e4b9356a Merge branch 'braid/matrix-version-bump' into 'main'
chore: bump matrix sdk

See merge request famedly/fluffychat!1060
2022-12-28 06:50:42 +00:00
TheOneWithTheBraid
b24a7d9510 fix: Android push notification follow-up
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2022-12-27 20:25:45 +01:00
TheOneWithTheBraid
6084d36ed2 chore: bump matrix sdk
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2022-12-27 14:38:22 +01:00
Krille
781a02cea7 Merge branch 'braid/cute-events' into 'main'
chore: improve cute events rendering

See merge request famedly/fluffychat!1054
2022-12-27 12:16:57 +00:00
Krille Fear
fbb9f40f01 chore: Remove workaround of record package 2022-12-27 13:15:46 +01:00
Krille Fear
c19946c184 chore: Follow up root navigator fix 2022-12-26 20:21:18 +01:00
Krille Fear
2ba6e15e59 chore: Update dependencies 2022-12-26 19:22:36 +01:00
Krille Fear
0052b6d42f chore: Use correct mono font 2022-12-26 19:20:52 +01:00
Krille Fear
94b19cf6a6 chore: Nicer verification dialog 2022-12-26 18:30:18 +01:00
Linerly
b1699cfa16
Translated using Weblate (Indonesian)
Currently translated at 100.0% (642 of 642 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/id/
2022-12-26 18:07:07 +01:00
Ihor Hordiichuk
c7dcceb7dd
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (642 of 642 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uk/
2022-12-26 18:07:07 +01:00
Oğuz Ersen
496bb0dbd4
Translated using Weblate (Turkish)
Currently translated at 100.0% (642 of 642 strings)

Translation: FluffyChat/Translations
Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/tr/
2022-12-26 18:07:07 +01:00
Krille
1294479974 Merge branch 'krille/nicer-encryption-page' into 'main'
design: New encryption page

See merge request famedly/fluffychat!1059
2022-12-26 17:07:00 +00:00
Krille Fear
ca7bf8bd0d design: New encryption page 2022-12-26 17:59:43 +01:00
Krille Fear
8f89d539d0 chore: follow up fix 2022-12-26 16:03:14 +01:00
Krille Fear
7cdeb98671 chore: Update sdk 2022-12-25 13:20:52 +01:00
Krille Fear
bb74754851 chore: Follow up start chat label 2022-12-25 11:04:22 +01:00
Krille Fear
4680a1c507 chore: Follow up homeserver picker input 2022-12-25 10:50:41 +01:00
Krille Fear
51a5e7f9cc chore: Add new start chat image 2022-12-25 10:45:13 +01:00
TheOneWithTheBraid
c4f601f651 chore: improve cute events rendering
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2022-12-24 19:28:09 +01:00
Krille Fear
f6c2fa8588 chore: Add gradient to chat background 2022-12-24 12:07:41 +01:00
Krille Fear
576d46eb4c feat: Use Android system accent color 2022-12-24 11:48:48 +01:00
Krille Fear
b21ab55451 fix: Libhandy windows 2022-12-24 09:37:12 +01:00
Krille
56b3297610 Merge branch 'braid/homeserver-appbar' into 'main'
fix: homeserver error text not visible in app bar

See merge request famedly/fluffychat!1042
2022-12-23 14:12:47 +00:00
Krille Fear
43b408fe5e chore: Fix import sorting 2022-12-23 15:10:26 +01:00
Krille
12cc876b83 Merge branch 'improve-story' into 'main'
fix: Improve story page appearance

See merge request famedly/fluffychat!1051
2022-12-23 14:08:59 +00:00
Krille
1d53fccfe6 Merge branch 'fix-adaptive-icon' into 'main'
fix: Monochromatic icon rendering for Android 13+

See merge request famedly/fluffychat!1050
2022-12-23 14:07:53 +00:00
Reinhart Previano Koentjoro
857eea428e fix: Improve story page appearance 2022-12-23 11:58:40 +07:00
Reinhart Previano Koentjoro
715e98cae2 fix: Monochromatic icon rendering for Android 13+ 2022-12-23 10:54:40 +07:00
TheOneWithTheBraid
bb9410accb fix: homeserver error text not visible in app bar
Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
2022-12-02 10:12:44 +01:00
307 changed files with 62725 additions and 74691 deletions

3
.gitignore vendored
View File

@ -10,7 +10,6 @@
.buildlog/
.history
.svn/
lib/generated_plugin_registrant.dart
prime
# libolm package
@ -38,7 +37,6 @@ prime
/build/
# Web related
lib/generated_plugin_registrant.dart
docs/build/
docs/.jekyll-cache/
docs/_site/
@ -62,3 +60,4 @@ ios/Podfile.lock
/linux/out
/macos/out
.vs
olm

View File

@ -1,7 +1,7 @@
variables:
FLUTTER_VERSION: 3.3.9
FLUTTER_VERSION: 3.10.0
image: cirrusci/flutter:${FLUTTER_VERSION}
image: ghcr.io/cirruslabs/flutter:${FLUTTER_VERSION}
.shared_windows_runners:
tags:
@ -16,20 +16,22 @@ stages:
code_analyze:
stage: test
script: [./scripts/code_analyze.sh]
script:
- flutter pub get
- dart run import_sorter:main --no-comments --exit-if-changed
- dart format lib/ test/ --set-exit-if-changed
- flutter analyze
- git apply ./scripts/enable-android-google-services.patch
- flutter pub get
- flutter analyze
- flutter pub run dart_code_metrics:metrics lib -r gitlab > code-quality-report.json || true
artifacts:
reports:
codequality: code-quality-report.json
tags:
- docker
- famedly
widget_test:
stage: test
script: [flutter test]
tags:
- docker
- famedly
# the basic integration test configuration testing FLOSS builds on Synapse
.integration_test:
@ -49,15 +51,13 @@ widget_test:
FF_NETWORK_PER_BUILD: "true"
# Tell docker CLI how to talk to Docker daemon.
DOCKER_HOST: tcp://docker:2375/
# Use the overlayfs driver for improved performance.
DOCKER_DRIVER: overlay2
# Use the btrfs driver for improved performance.
DOCKER_DRIVER: btrfs
# Disable TLS since we're running inside local network.
DOCKER_TLS_CERTDIR: ""
HOMESERVER: "docker"
HOMESERVER: docker
before_script:
# start AVD and keep running in background
- scripts/integration-start-avd.sh &
- scripts/integration-prepare-alpine.sh
- scripts/integration-prepare-host.sh
# create test user environment variables
- source scripts/integration-create-environment-variables.sh
# create Synapse instance
@ -65,31 +65,57 @@ widget_test:
# properly set the homeserver IP and create test users
- scripts/integration-prepare-homeserver.sh
script:
# start AVD and keep running in background
- scripts/integration-start-avd.sh &
- flutter pub get
- flutter test integration_test
timeout: 20m
- scrcpy --no-display --record video.mkv &
- flutter test integration_test --dart-define=HOMESERVER=$HOMESERVER --dart-define=USER1_NAME=$USER1_NAME --dart-define=USER2_NAME=$USER2_NAME --dart-define=USER1_PW=$USER1_PW --dart-define=USER2_PW=$USER2_PW || ( sleep 10 && exit 1 )
after_script:
- ffmpeg -i video.mkv -vf scale=iw/2:-2 -crf 40 -b:v 2000k -preset fast video.mp4 || true
timeout: 30m
retry: 2
only:
- tags
artifacts:
when: always
paths:
- video.mp4
tags:
- docker
- famedly
# integration tests for Linux builds
### disabled because of Linux headless issues
.integration_test_linux:
extends: .integration_test
parallel:
matrix:
- HOMESERVER_IMPLEMENTATION:
- conduit
script:
- apk add cmake ninja gtk+3.0-dev clang pkgconf xz-dev libsecret-dev jsoncpp-dev
- apt-get update
- apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev libsecret-1-dev libjsoncpp-dev
- flutter pub get
- flutter test integration_test -d linux
- flutter test integration_test -d linux --dart-define=HOMESERVER=$HOMESERVER --dart-define=USER1_NAME=$USER1_NAME --dart-define=USER2_NAME=$USER2_NAME --dart-define=USER1_PW=$USER1_PW --dart-define=USER2_PW=$USER2_PW || ( sleep 10 && exit 1 )
after_script: []
artifacts:
# extending the default tests to test the Google-flavored builds
.integration_test_proprietary:
extends: .integration_test
parallel:
matrix:
- HOMESERVER_IMPLEMENTATION:
- conduit
script:
# start AVD and keep running in background
- scripts/integration-start-avd.sh &
- git apply ./scripts/enable-android-google-services.patch
- flutter pub get
- flutter test integration_test
- scrcpy --no-display --record video.mkv &
- flutter test integration_test --dart-define=HOMESERVER=$HOMESERVER --dart-define=USER1_NAME=$USER1_NAME --dart-define=USER2_NAME=$USER2_NAME --dart-define=USER1_PW=$USER1_PW --dart-define=USER2_PW=$USER2_PW || ( sleep 10 && exit 1 )
.release_mode_launches:
release_mode_launches:
parallel:
matrix:
- FLAVOR:
@ -99,15 +125,17 @@ widget_test:
stage: test
before_script:
- |
if [ "$FLAVOR" == "proprietary" ]; then
git apply ./scripts/enable-android-google-services.patch
fi
if [ "$FLAVOR" == "proprietary" ]; then
git apply ./scripts/enable-android-google-services.patch
fi
script:
# start AVD and keep running in background
- scripts/integration-start-avd.sh &
# generate temporary release build configuration and ensure app launches
- scripts/integration-check-release-build.sh
timeout: 20m
only:
- tags
tags:
- docker
- famedly
@ -116,20 +144,46 @@ build_web:
stage: build
before_script:
[sudo apt update && sudo apt install curl -y, ./scripts/prepare-web.sh]
script: [./scripts/build-web.sh]
script:
- flutter build web --release --verbose --source-maps
artifacts:
paths:
- build/web/
tags:
- docker
- famedly
# yes, we *do* build a Windows DLL on Linux. More reliable.
build_olm_windows:
image: archlinux:latest
stage: test
before_script:
- pacman-key --init
- pacman --noconfirm -Sy mingw-w64 cmake git base-devel
script:
- ./scripts/build-olm-windows.sh
- mv olm/build/libolm.dll .
artifacts:
paths:
- libolm.dll
allow_failure: true
only:
- main
- tags
build_windows:
extends:
- .shared_windows_runners
stage: build
before_script: [./scripts/prepare-windows.ps1]
script: [./scripts/build-windows.ps1]
stage: test
before_script:
- ./scripts/prepare-windows.ps1
# workarounding artifacts download being broken
- $response = Invoke-WebRequest -Uri "$CI_API_V4_URL/projects/$CI_PROJECT_ID/pipelines/$CI_PIPELINE_ID/jobs" -UseBasicParsing
- $jobs = $response | ConvertFrom-Json
- $job = $jobs | where { $_.name -eq "build_olm_windows" }
- $jobId = $job.id
- Invoke-WebRequest -Uri "$CI_API_V4_URL/projects/$CI_PROJECT_ID/jobs/$jobId/artifacts/libolm.dll" -UseBasicParsing -OutFile libolm.dll
script:
- ./scripts/build-windows.ps1
- Copy-Item -Path "libolm.dll" -Destination "build/windows/runner/Release"
- ./scripts/package-windows.ps1
artifacts:
paths:
- build/windows/runner/Release
@ -140,28 +194,28 @@ build_windows:
build_android_debug:
stage: build
script: [./scripts/build-android-debug.sh]
script: [flutter build apk --debug]
artifacts:
when: on_success
paths:
- build/app/outputs/apk/debug/app-debug.apk
except:
- main
- tags
tags:
- docker
- famedly
except:
- main
- tags
build_android_apk:
stage: build
before_script:
- git apply ./scripts/enable-android-google-services.patch
- ./scripts/prepare-android-release.sh
script: [./scripts/build-android-apk.sh]
script: [flutter build apk --release]
artifacts:
when: on_success
paths:
- build/android/app-release.apk
- build/app/outputs/apk/release/app-release.apk
tags:
- docker
- famedly
@ -201,9 +255,6 @@ fdroid_repo:
needs:
- "build_android_apk"
resource_group: playstore_release
tags:
- docker
- famedly
allow_failure: true
only:
- main
@ -223,12 +274,7 @@ pages:
- cd ..
- mv docs public
- mv repo public || true
- mv build/web/ public/nightly
# ensure the nightly deployment knows its location
- sed -i "s/href=\"\/web\/\"/href=\"\/nightly\/\"/g" public/nightly/index.html
- rm -rf build
- ./scripts/download-web-stable.sh
- mv stable public/web
- mv build/web/ public/web
artifacts:
paths:
- public
@ -237,11 +283,11 @@ pages:
build_linux_x86:
stage: build
image: registry.gitlab.com/famedly/company/frontend/flutter-dockerimages/flutter-linux/stable:${FLUTTER_VERSION}
before_script:
[
sudo apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install keyboard-configuration -y && 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 -y,
]
script: [./scripts/build-linux.sh]
- 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 -y
script: [flutter build linux --release]
tags:
- docker
- famedly
@ -252,8 +298,9 @@ build_linux_x86:
build_linux_arm64:
stage: build
before_script: [flutter upgrade]
script: [./scripts/build-linux.sh]
before_script:
- flutter upgrade $FLUTTER_VERSION --force
script: [flutter build linux --release]
tags: [docker_arm64]
only:
- main
@ -267,8 +314,6 @@ build_linux_arm64:
update_dependencies:
stage: build
needs: []
tags:
- docker
only:
- schedules
variables:
@ -293,9 +338,6 @@ update_dependencies:
.release:
stage: deploy
image: curlimages/curl:latest
tags:
- docker
- famedly
rules:
- if: '$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/'
- if: '$CI_COMMIT_TAG =~ /^rc\d+\.\d+\.\d+-\d+$/'
@ -308,28 +350,29 @@ upload_android:
extends: .release
script:
- |
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file build/android/app-release.apk ${PACKAGE_REGISTRY_URL}/fluffychat.apk
curl --fail-with-body --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file build/app/outputs/apk/release/app-release.apk ${PACKAGE_REGISTRY_URL}/fluffychat.apk
upload_web:
extends: .release
script:
- tar czf package.tar.gz -C build/web/ .
- |
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/fluffychat-web.tar.gz
curl --fail-with-body --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/fluffychat-web.tar.gz
upload_linux_x86:
extends: .release
script:
- tar czf package.tar.gz -C build/linux/x64/release/bundle/ .
- |
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/fluffychat-linux-x86.tar.gz
curl --fail-with-body --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/fluffychat-linux-x86.tar.gz
upload_linux_arm64:
extends: .release
script:
- tar czf package.tar.gz -C build/linux/arm64/release/bundle/ .
- |
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/fluffychat-linux-arm64.tar.gz
curl --fail-with-body --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/fluffychat-linux-arm64.tar.gz
allow_failure: true
upload_windows:
extends: .release
@ -339,8 +382,9 @@ upload_windows:
- mv build/windows/runner/Release/fluffychat.msix fluffychat.msix
- cd build/windows/runner/Release; zip -r ../../../../package.zip . ; cd -
- |
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.zip ${PACKAGE_REGISTRY_URL}/fluffychat-windows.zip
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file fluffychat.msix ${PACKAGE_REGISTRY_URL}/fluffychat-windows.msix
curl --fail-with-body --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.zip ${PACKAGE_REGISTRY_URL}/fluffychat-windows.zip
curl --fail-with-body --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file fluffychat.msix ${PACKAGE_REGISTRY_URL}/fluffychat-windows.msix
allow_failure: true
deploy_playstore:
stage: deploy

View File

@ -4,7 +4,7 @@
# This file should be version controlled.
version:
revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2
channel: stable
project_type: app
@ -13,26 +13,11 @@ project_type: app
migration:
platforms:
- platform: root
create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
- platform: android
create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
- platform: ios
create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
- platform: linux
create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
create_revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2
base_revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2
- platform: macos
create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
- platform: web
create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
- platform: windows
create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849
create_revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2
base_revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2
# User provided section

View File

@ -1,3 +1,229 @@
## v1.12.0
- Added translation using Weblate (Toki Pona) (Mæve Rey)
- Translated using Weblate (Arabic) (Rex_sa)
- Translated using Weblate (Chinese (Simplified)) (Eric)
- Translated using Weblate (Croatian) (Milo Ivir)
- Translated using Weblate (Estonian) (Priit Jõerüüt)
- Translated using Weblate (Galician) (josé m)
- Translated using Weblate (Indonesian) (Linerly)
- Translated using Weblate (Polish) (lauren n. liberda)
- Translated using Weblate (Romanian) (Riley)
- Translated using Weblate (Russian) (DarkCoder15)
- Translated using Weblate (Spanish) (José Muñoz)
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
- build: Remove dependency overwrite for ffi (Krille)
- build: Update dependencies (Krille)
- builds: Change minsdkversion of Android from 16 to 19 (Krille)
- builds: Do not allow failure for linux x86 (Krille)
- builds: Do not use verbose mode on building linux (Krille)
- builds: Linux with flutter 3.10 (Krille)
- builds: Remove workaround for building linux arm64 (Krille)
- builds: Update file_picker to 5.3.0 (Krille)
- builds: Update flutter table html (Krille)
- builds: Update flutter_html (Krille)
- builds: migrate to dart 3.0/flutter 3.10 (lauren n. liberda)
- chore: Add missing blockquote style (Krille)
- chore: Allow failure in build linux for now (Krille)
- chore: Ask for storage persistence (Krille)
- chore: Clean unused translations (Malin Errenst)
- chore: Enhance room pills (Krille)
- chore: Minor code clean up (Krille)
- chore: Update flutter webrtc (Krille)
- chore: Upgrade to Flutter 3.10.1 (Malin Errenst)
- chore: change release curl calls to use --fail-with-body (Tim Flink)
- chore: update macOS icons and add build script (TheOneWithTheBraid)
- design: Replace anime images with neutral cupertino icons (Krille)
- feat: Add toggle to mute notifications from chat groups (fbievan)
- feat: Allow ruby tags in html (Krille)
- feat: Display progress value for initial sync (Krille)
- feat: Implement new error reporting tool when critical features break like playing audio or video messages or opening a chat (Krille)
- feat: clean up macOS build metadata (TheOneWithTheBraid)
- feat: set display information correctly (TheOneWithTheBraid)
- feat: update macOS build files (TheOneWithTheBraid)
- feat: update macOS build information for macOS Ventura (TheOneWithTheBraid)
- fix "Unhandled Exception: VRouter.of(context) was called with a context which does not contain a VRouter." (Lauren N. Liberda)
- fix: Broken arb file (Krille)
- fix: Do not unnecessary request all members in public rooms (Krille)
- fix: Remove wrong rendered linebreak in html (Krille)
- fix: Scroll down button (Krille)
- fix: Scroll up and scroll down buttons in chat list (Krille)
- fix: Scrolldown button (Krille)
- fix: Too long file name cause a render overflow (Skying)
- fix: Try to reload timeline on IOException (Krille)
- fix: User pills (Krille)
- fix: broken CI artifact uploads (TheOneWithTheBraid)
- fix: custom emote placeholder (TheOneWithTheBraid)
- fix: path of libolm (TheOneWithTheBraid)
- fix: Quick account switching (JHansen)
- fix: read reciepts (JHansen)
- perf: Use valuenotifier to not rebuild chatlist (Krille)
- refactor: Reimplement flutter matrix html locally (Krille)
- refactor: Update Roboto and Noto Emoji (The one with the Braid)
- refactor: Use AnimatedSize for FAB (Krille)
- refactor: Use DateTime for weekday localization (Malin Errenst)
## v1.11.2
- Translated using Weblate (Croatian) (Milo Ivir)
- Translated using Weblate (Dutch) (Jelv)
- Translated using Weblate (Estonian) (Priit Jõerüüt)
- Translated using Weblate (Galician) (josé m)
- Translated using Weblate (Polish) (Eryk Michalak)
- Translated using Weblate (Turkish) (Oğuz Ersen)
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
- feat: Permission dialog before open link in browser (Krille)
- fix: Chats do not load (Krille)
## v1.11.1 - 2023-04-20
- fix: Download files on web and iOS with correct mimetype
## v1.11.0 - 2023-04-14
- feat: Add visual read marker (Krille)
- feat: Jump to last read event (Krille)
- feat: Use fragmented timeline to jump to event (Krille)
- feat: change to flutterwebauth2 (ShootingStarDragons)
- fix: Join public room (Krille)
- fix: Set fcm priority to max on android (Krille)
- refactor: CI scripts and old workarounds for build scripts (Krille)
- refactor: Client in ChatPage (Krille)
- refactor: Not nullable room in ChatPage (Krille)
- refactor: Switch to file_picker package and get rid of some dependency overrides (Krille)
- refactor: Use correct Matrix instance (Krille)
- style: Make emptypage logo bigger (Krille)
- style: Minor adjustments for modal bottom sheets (Krille)
- style: Move chats to top (Krille)
- style: Use SliverList for chatlist (Krille)
- refactor: Container -> SizedBox.shrink() (noob_tea)
- Translated using Weblate (Chinese (Simplified)) (Eric)
- Translated using Weblate (Dutch) (Jelv)
- Translated using Weblate (Estonian) (Priit Jõerüüt)
- Translated using Weblate (French) (Anne Onyme 017)
- Translated using Weblate (Galician) (josé m)
- Translated using Weblate (Indonesian) (Linerly)
- Translated using Weblate (Persian) (Parsa)
- Translated using Weblate (Persian) (Siavash)
- Translated using Weblate (Polish) (Luna)
- Translated using Weblate (Swedish) (Kristoffer Grundström)
- Translated using Weblate (Turkish) (Oğuz Ersen)
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
## v1.10.0 - 2023-02-25
- Added translation using Weblate (Thai) (Wphaoka)
- Added translation using Weblate (Tibetan) (Nathan Freitas)
- Default hardcoded message when l10n is not available (fabienli)
- Fix: The stable repo fingerprint (TODO the qr-code should be updated) (machiav3lli)
- Translated using Weblate (Basque) (xabirequejo)
- Translated using Weblate (Dutch) (Jelv)
- Translated using Weblate (Estonian) (Priit Jõerüüt)
- Translated using Weblate (French) (Anne Onyme 017)
- Translated using Weblate (Galician) (josé m)
- Translated using Weblate (Galician) (josé m)
- Translated using Weblate (Indonesian) (Linerly)
- Translated using Weblate (Japanese) (Suguru Hirahara)
- Translated using Weblate (Persian) (Farooq Karimi Zadeh)
- Translated using Weblate (Swedish) (Joaquim Homrighausen)
- Translated using Weblate (Turkish) (Oğuz Ersen)
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
- chore: Disable stable for web until script is fixed (Krille)
- chore: Display warning when logout without backup (Krille)
- chore: Downgrade flutter CI version (Krille)
- chore: Follow up audioplayer on linux (Krille)
- chore: Follow up chat encryption desgin (Krille)
- chore: Follow up fix audioplayer on android (Christian Pauly)
- chore: Follow up formatting (Christian Pauly)
- chore: Follow up formatting (Krille)
- chore: Follow up remove hero animation (Krille)
- chore: Follow up secrity settings design (Krille)
- chore: Follow up settings page (Krille)
- chore: Follow up settings page design (Christian Pauly)
- chore: Follow up style adjustments (Krille)
- chore: Lookup l10n in pushhelper if null (Krille)
- chore: Update matrix package to 0.17.0 (Krille)
- chore: Update to Flutter 3.7.1 (Krille)
- docs/qr-stable.svg: update the QR code (Aminda Suomalainen)
- feat: Enable audioplayer for web and linux (Christian Pauly)
- fix: Display error when user tries to send too large file (Christian Pauly)
- refactor: Do only instantiate AudioPlayer() object when in use (Christian Pauly)
- refactor: Remove syncstatus verbose logs (Christian Pauly)
- refactor: Store cached files in tmp directory so OS will clear file cache from time to time (Krille)
- style: Adjust key verification dialog (Christian Pauly)
- style: Bootstrap design adjustments (Christian Pauly)
- style: Encryption page adjustments (Christian Pauly)
- style: Enhance user device settings design (Krille)
- style: Enhanced chat details design (Krille)
- style: Give chat list list tiles rounded corners (Krille)
- style: Link underline color (Christian Pauly)
- style: Make adaptive bottom sheets scrollable by default (Krille)
- style: Make invite page more pretty (Krille)
- style: New settings design (Krille)
- style: Nicer chips in encryption settings and icons showing device status (Krille)
- style: Use emojis on web as well (Christian Pauly)
- style: Use robotomono to display device keys (Christian Pauly)
- utils/url_launcher: force opening http(s) links in external browser (Marcus Hoffmann)
## v1.9.0 - 2023-01-29
- Translated using Weblate (Czech) (Michal Bedáň)
- Translated using Weblate (Czech) (grreby)
- Translated using Weblate (Dutch) (Jelv)
- Translated using Weblate (Estonian) (Priit Jõerüüt)
- Translated using Weblate (Galician) (josé m)
- Translated using Weblate (German) (Christian)
- Translated using Weblate (German) (Vri 🌈)
- Translated using Weblate (Indonesian) (Linerly)
- Translated using Weblate (Korean) (Youngbin Han)
- Translated using Weblate (Polish) (Wiktor)
- Translated using Weblate (Turkish) (Oğuz Ersen)
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
- chore: Change invite link textfield label (Krille)
- chore: Remove unused dependency (Krille)
- chore: Remove unused translations (Krille)
- chore: Update Matrix SDK and refactor (Krille)
- chore: Update dependencies (Krille)
- chore: Update flutter_map (Krille)
- chore: add integration tests (TheOneWithTheBraid)
- chore: add integration tests for spaces (TheOneWithTheBraid)
- design: More clear chat background and rounded popup menu (Krille)
- design: Nicer navigationrail (Krille)
- design: Upgrade to Flutter 3.7
- feat: Bring back disabling the header bar on Linux desktop (q234rty)
- feat: Nicer design for abandonded DM rooms (Christian Pauly)
- fix: Archive (Krille)
- fix: Shared preferences package for flutter 3.7 (Christian Pauly)
- fix: permission of web builds (TheOneWithTheBraid)
- fix: Notification Settings (Krille)
- refactor: Migrate to Flutter 3.7.0 (Christian Pauly)
- refactor: Same animations everywhere in app (Krille)
- refactor: Stories header with futurebuilder (Krille)
- refactor: disable some redundant tests (TheOneWithTheBraid)
- style: Animate in out search results (Krille)
- style: New modal bottom sheets (Krille)
- style: Redesign public room bottomsheets (Krille)
## v1.8.0 2022-12-30
- Added translation using Weblate (Yue (yue_HK)) (Raatty)
- Translated using Weblate (Chinese (Simplified)) (Mike Evans)
- Translated using Weblate (Estonian) (Priit Jõerüüt)
- Translated using Weblate (French) (Anne Onyme 017)
- Translated using Weblate (Indonesian) (Linerly)
- Translated using Weblate (Turkish) (Oğuz Ersen)
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)
- design: New encryption page (Krille Fear)
- feat: Add audio message support to linux (Krille Fear)
- feat: Use Android system accent color (Krille Fear)
- feat: include olm to Windows builds (TheOneWithTheBraid)
- feat: Store drafts (Krille)
- fix: Android push notification follow-up (TheOneWithTheBraid)
- fix: Content banner (Krille Fear)
- fix: Correct redacted by username (Krille Fear)
- fix: Do not setup push on every app resume (Krille Fear)
- fix: Encryption button is orange in public rooms (Krille Fear)
- fix: File event design (Krille Fear)
- fix: Hide google services warning after marked (Krille Fear)
- fix: Improve story page appearance (Reinhart Previano Koentjoro)
- fix: Libhandy windows (Krille Fear)
- fix: Monochromatic icon rendering for Android 13+ (Reinhart Previano Koentjoro)
- fix: homeserver error text not visible in app bar (TheOneWithTheBraid)
- fix: minor issues in room list (TheOneWithTheBraid)
## v1.7.2 2022-12-19
Update dependencies and translations.

View File

@ -1,4 +1,4 @@
FROM cirrusci/flutter as builder
FROM ghcr.io/cirruslabs/flutter as builder
RUN sudo apt update && sudo apt install curl -y
COPY . /app
WORKDIR /app

View File

@ -8,6 +8,7 @@ linter:
- prefer_final_locals
- prefer_final_in_for_each
- sort_pub_dependencies
- require_trailing_commas
analyzer:
errors:

View File

@ -44,7 +44,7 @@ android {
defaultConfig {
applicationId "chat.fluffy.fluffychat"
minSdkVersion 16
minSdkVersion 19
targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName

View File

@ -93,8 +93,9 @@
</intent-filter>
</activity>
<activity android:name="com.linusu.flutter_web_auth.CallbackActivity"
android:exported="true">
<activity
android:name="com.linusu.flutter_web_auth_2.CallbackActivity"
android:exported="true">
<intent-filter android:label="flutter_web_auth">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />

File diff suppressed because one or more lines are too long

View File

@ -2,5 +2,5 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
<monochrome android:drawable="@drawable/ic_launcher_foreground"/>
<monochrome android:drawable="@drawable/ic_launcher_monochrome"/>
</adaptive-icon>

View File

@ -1,5 +1,5 @@
buildscript {
ext.kotlin_version = '1.6.10'
ext.kotlin_version = '1.8.0'
repositories {
google()
mavenCentral()
@ -27,6 +27,6 @@ subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
tasks.register("clean", Delete) {
delete rootProject.buildDir
}

View File

@ -5,12 +5,17 @@
<testcase classname="fastlane.lanes" name="0: update_fastlane" time="0.000202">
<testcase classname="fastlane.lanes" name="0: update_fastlane" time="1.455419">
</testcase>
<testcase classname="fastlane.lanes" name="1: default_platform" time="7.9e-05">
<testcase classname="fastlane.lanes" name="1: default_platform" time="0.000127">
</testcase>
<testcase classname="fastlane.lanes" name="2: google_play_track_version_codes" time="2.638619">
</testcase>

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 44 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,30 +1,25 @@
{
"@@last_modified": "2021-08-14 12:41:10.154280",
"about": "সম্পর্কে",
"@about": {
"type": "text",
"placeholders": {}
},
"accept": "স্বীকার করি",
"@accept": {
"type": "text",
"placeholders": {}
},
"acceptedTheInvitation": "{username} আমন্ত্রণ গ্রহণ করেছে",
"@acceptedTheInvitation": {
"type": "text",
"placeholders": {
"username": {}
"@@last_modified": "2021-08-14 12:41:10.154280",
"about": "সম্পর্কে",
"@about": {
"type": "text",
"placeholders": {}
},
"accept": "স্বীকার করি",
"@accept": {
"type": "text",
"placeholders": {}
},
"acceptedTheInvitation": "{username} আমন্ত্রণ গ্রহণ করেছে",
"@acceptedTheInvitation": {
"type": "text",
"placeholders": {
"username": {}
}
},
"account": "অ্যাকাউন্ট",
"@account": {
"type": "text",
"placeholders": {}
}
},
"account": "অ্যাকাউন্ট",
"@account": {
"type": "text",
"placeholders": {}
},
"accountInformation": "অ্যাকাউন্ট তথ্য",
"@accountInformation": {
"type": "text",
"placeholders": {}
}
}

1
assets/l10n/intl_bo.arb Normal file
View File

@ -0,0 +1 @@
{}

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
assets/l10n/intl_el.arb Normal file
View File

@ -0,0 +1 @@
{}

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

View File

@ -1 +1 @@
{}
{}

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

View File

@ -1,155 +1,120 @@
{
"@@last_modified": "2021-08-14 12:41:09.940318",
"copiedToClipboard": "Copiada para a área de transferência",
"@copiedToClipboard": {
"type": "text",
"placeholders": {}
},
"login": "Iniciar sessão",
"@login": {
"type": "text",
"placeholders": {}
},
"monday": "segunda-feira",
"@monday": {
"type": "text",
"placeholders": {}
},
"saturday": "sábado",
"@saturday": {
"type": "text",
"placeholders": {}
},
"wednesday": "quarta-feira",
"@wednesday": {
"type": "text",
"placeholders": {}
},
"about": "Sobre",
"@about": {
"type": "text",
"placeholders": {}
},
"admin": "Admin",
"@admin": {
"type": "text",
"placeholders": {}
},
"areYouSure": "Tens a certeza?",
"@areYouSure": {
"type": "text",
"placeholders": {}
},
"notifications": "Notificações",
"@notifications": {
"type": "text",
"placeholders": {}
},
"account": "Conta",
"@account": {
"type": "text",
"placeholders": {}
},
"cancel": "Cancelar",
"@cancel": {
"type": "text",
"placeholders": {}
},
"delete": "Eliminar",
"@delete": {
"type": "text",
"placeholders": {}
},
"dateAndTimeOfDay": "{date}, {timeOfDay}",
"@dateAndTimeOfDay": {
"type": "text",
"placeholders": {
"date": {},
"timeOfDay": {}
"@@last_modified": "2021-08-14 12:41:09.940318",
"copiedToClipboard": "Copiada para a área de transferência",
"@copiedToClipboard": {
"type": "text",
"placeholders": {}
},
"login": "Iniciar sessão",
"@login": {
"type": "text",
"placeholders": {}
},
"about": "Sobre",
"@about": {
"type": "text",
"placeholders": {}
},
"admin": "Admin",
"@admin": {
"type": "text",
"placeholders": {}
},
"areYouSure": "Tens a certeza?",
"@areYouSure": {
"type": "text",
"placeholders": {}
},
"notifications": "Notificações",
"@notifications": {
"type": "text",
"placeholders": {}
},
"account": "Conta",
"@account": {
"type": "text",
"placeholders": {}
},
"cancel": "Cancelar",
"@cancel": {
"type": "text",
"placeholders": {}
},
"delete": "Eliminar",
"@delete": {
"type": "text",
"placeholders": {}
},
"dateAndTimeOfDay": "{date}, {timeOfDay}",
"@dateAndTimeOfDay": {
"type": "text",
"placeholders": {
"date": {},
"timeOfDay": {}
}
},
"dateWithYear": "{day}-{month}-{year}",
"@dateWithYear": {
"type": "text",
"placeholders": {
"year": {},
"month": {},
"day": {}
}
},
"help": "Ajuda",
"@help": {
"type": "text",
"placeholders": {}
},
"messages": "Mensagens",
"@messages": {
"type": "text",
"placeholders": {}
},
"reason": "Razão",
"@reason": {
"type": "text",
"placeholders": {}
},
"privacy": "Privacidade",
"@privacy": {
"type": "text",
"placeholders": {}
},
"openCamera": "Abrir câmara",
"@openCamera": {
"type": "text",
"placeholders": {}
},
"settings": "Configurações",
"@settings": {
"type": "text",
"placeholders": {}
},
"logout": "Terminar sessão",
"@logout": {
"type": "text",
"placeholders": {}
},
"search": "Pesquisar",
"@search": {
"type": "text",
"placeholders": {}
},
"users": "Utilizadores",
"@users": {},
"close": "Fechar",
"@close": {
"type": "text",
"placeholders": {}
},
"dateWithoutYear": "{day}-{month}",
"@dateWithoutYear": {
"type": "text",
"placeholders": {
"month": {},
"day": {}
}
}
},
"dateWithYear": "{day}-{month}-{year}",
"@dateWithYear": {
"type": "text",
"placeholders": {
"year": {},
"month": {},
"day": {}
}
},
"help": "Ajuda",
"@help": {
"type": "text",
"placeholders": {}
},
"messages": "Mensagens",
"@messages": {
"type": "text",
"placeholders": {}
},
"reason": "Razão",
"@reason": {
"type": "text",
"placeholders": {}
},
"privacy": "Privacidade",
"@privacy": {
"type": "text",
"placeholders": {}
},
"openCamera": "Abrir câmara",
"@openCamera": {
"type": "text",
"placeholders": {}
},
"settings": "Configurações",
"@settings": {
"type": "text",
"placeholders": {}
},
"tuesday": "terça-feira",
"@tuesday": {
"type": "text",
"placeholders": {}
},
"logout": "Terminar sessão",
"@logout": {
"type": "text",
"placeholders": {}
},
"search": "Pesquisar",
"@search": {
"type": "text",
"placeholders": {}
},
"sunday": "domingo",
"@sunday": {
"type": "text",
"placeholders": {}
},
"users": "Utilizadores",
"@users": {},
"close": "Fechar",
"@close": {
"type": "text",
"placeholders": {}
},
"dateWithoutYear": "{day}-{month}",
"@dateWithoutYear": {
"type": "text",
"placeholders": {
"month": {},
"day": {}
}
},
"friday": "sexta-feira",
"@friday": {
"type": "text",
"placeholders": {}
},
"thursday": "quinta-feira",
"@thursday": {
"type": "text",
"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

View File

@ -1,374 +0,0 @@
{
"@@last_modified": "2021-08-14 12:41:09.895217",
"about": "පිළිබඳව",
"@about": {
"type": "text",
"placeholders": {}
},
"accept": "පිළිගන්න",
"@accept": {
"type": "text",
"placeholders": {}
},
"account": "ගිණුම",
"@account": {
"type": "text",
"placeholders": {}
},
"accountInformation": "ගිණුමේ තොරතුරු",
"@accountInformation": {
"type": "text",
"placeholders": {}
},
"addEmail": "වි-තැපෑල එකතු කරන්න",
"@addEmail": {
"type": "text",
"placeholders": {}
},
"admin": "පරිපාලක",
"@admin": {
"type": "text",
"placeholders": {}
},
"allChats": "සියලුම සංවාද",
"@allChats": {
"type": "text",
"placeholders": {}
},
"alreadyHaveAnAccount": "දැනටමත් ගිණුමක් තිබේද?",
"@alreadyHaveAnAccount": {
"type": "text",
"placeholders": {}
},
"anyoneCanJoin": "ඕනෑම කෙනෙකුට එක්විය හැකිය",
"@anyoneCanJoin": {
"type": "text",
"placeholders": {}
},
"archive": "සංරක්ෂිතය",
"@archive": {
"type": "text",
"placeholders": {}
},
"archivedRoom": "සංරක්ෂිත කාමරය",
"@archivedRoom": {
"type": "text",
"placeholders": {}
},
"areGuestsAllowedToJoin": "ආගන්තුක පරිශීලකයින්ට එක්වීමට අවසර තිබේද",
"@areGuestsAllowedToJoin": {
"type": "text",
"placeholders": {}
},
"areYouSure": "ඔබට විශ්වාසද?",
"@areYouSure": {
"type": "text",
"placeholders": {}
},
"areYouSureYouWantToLogout": "ඔබට නික්මීමට අවශ්‍ය බව විශ්වාසද?",
"@areYouSureYouWantToLogout": {
"type": "text",
"placeholders": {}
},
"audioPlayerPlay": "ධාවනය",
"@audioPlayerPlay": {
"type": "text",
"placeholders": {}
},
"blockDevice": "උපාංගය අවහිර කරන්න",
"@blockDevice": {
"type": "text",
"placeholders": {}
},
"cachedKeys": "යතුරු නිහිතගතයි",
"@cachedKeys": {
"type": "text",
"placeholders": {}
},
"cancel": "අවලංගු කරන්න",
"@cancel": {
"type": "text",
"placeholders": {}
},
"changeDeviceName": "උපාංගයේ නම වෙනස් කරන්න",
"@changeDeviceName": {
"type": "text",
"placeholders": {}
},
"changePassword": "මුරපදය වෙනස් කරන්න",
"@changePassword": {
"type": "text",
"placeholders": {}
},
"chat": "සංවාදය",
"@chat": {
"type": "text",
"placeholders": {}
},
"chatBackup": "සංවාද උපස්ථය",
"@chatBackup": {
"type": "text",
"placeholders": {}
},
"chatDetails": "සංවාදයේ විස්තර",
"@chatDetails": {
"type": "text",
"placeholders": {}
},
"chats": "සංවාද",
"@chats": {
"type": "text",
"placeholders": {}
},
"chooseAStrongPassword": "ශක්තිමත් මුරපදයක් තෝරන්න",
"@chooseAStrongPassword": {
"type": "text",
"placeholders": {}
},
"chooseAUsername": "පරිශීලක නාමයක් තෝරන්න",
"@chooseAUsername": {
"type": "text",
"placeholders": {}
},
"clearArchive": "සංරක්ෂිතය හිස් කරන්න",
"@clearArchive": {},
"close": "වසන්න",
"@close": {
"type": "text",
"placeholders": {}
},
"commandHint_join": "දී ඇති කාමරයට එක්වන්න",
"@commandHint_join": {
"type": "text",
"description": "Usage hint for the command /join"
},
"commandHint_leave": "මෙම කාමරය හැරයන්න",
"@commandHint_leave": {
"type": "text",
"description": "Usage hint for the command /leave"
},
"commandInvalid": "විධානය වලංගු නොවේ",
"@commandInvalid": {
"type": "text"
},
"commandMissing": "{{command} විධානයක් නොවේ.",
"@commandMissing": {
"type": "text",
"placeholders": {
"command": {}
},
"description": "State that {command} is not a valid /command."
},
"compareEmojiMatch": "සසඳා බලා පහත දැක්වෙන ඉමොජි අනෙක් උපාංගයට නිසැකවම ගැලපෙන බවට වග බලා ගන්න:",
"@compareEmojiMatch": {
"type": "text",
"placeholders": {}
},
"compareNumbersMatch": "සංසන්දනය කර පහත දැක්වෙන අංක අනෙක් උපාංගට නිසැකව ගැලපෙන බවට වග බලා ගන්න:",
"@compareNumbersMatch": {
"type": "text",
"placeholders": {}
},
"confirm": "තහවුරු කරන්න",
"@confirm": {
"type": "text",
"placeholders": {}
},
"connect": "සබඳින්න",
"@connect": {
"type": "text",
"placeholders": {}
},
"connectionAttemptFailed": "සබැඳීමේ උත්සාහය අසාර්ථකයි",
"@connectionAttemptFailed": {
"type": "text",
"placeholders": {}
},
"contactHasBeenInvitedToTheGroup": "සමූහය වෙත සබඳතාවයකට ආරාධනා කර ඇත",
"@contactHasBeenInvitedToTheGroup": {
"type": "text",
"placeholders": {}
},
"copy": "පිටපත්",
"@copy": {
"type": "text",
"placeholders": {}
},
"create": "සාදන්න",
"@create": {
"type": "text",
"placeholders": {}
},
"createAccountNow": "දැන් ගිණුමක් සාදන්න",
"@createAccountNow": {
"type": "text",
"placeholders": {}
},
"createNewGroup": "නව සමූහයක් සාදන්න",
"@createNewGroup": {
"type": "text",
"placeholders": {}
},
"donate": "පරිත්‍යාග",
"@donate": {
"type": "text",
"placeholders": {}
},
"encryption": "සංකේතාංකනය",
"@encryption": {
"type": "text",
"placeholders": {}
},
"everythingReady": "සියල්ල සූදානම්!",
"@everythingReady": {
"type": "text",
"placeholders": {}
},
"fontSize": "මුද්‍රණඅකුරේ ප්‍රමාණය",
"@fontSize": {
"type": "text",
"placeholders": {}
},
"goToTheNewRoom": "නව කාමරයට යන්න",
"@goToTheNewRoom": {
"type": "text",
"placeholders": {}
},
"joinRoom": "කාමරයට එක්වන්න",
"@joinRoom": {
"type": "text",
"placeholders": {}
},
"keysCached": "යතුරු නිහිතගත යි",
"@keysCached": {
"type": "text",
"placeholders": {}
},
"next": "ඊලඟ",
"@next": {
"type": "text",
"placeholders": {}
},
"noPublicRoomsFound": "ප්‍රසිද්ධ කාමර හමු නොවිණි…",
"@noPublicRoomsFound": {
"type": "text",
"placeholders": {}
},
"people": "මිනිසුන්",
"@people": {
"type": "text",
"placeholders": {}
},
"publicGroups": "ප්‍රසිද්ධ සමූහ",
"@publicGroups": {
"type": "text",
"placeholders": {}
},
"removeDevice": "උපාංගය ඉවත්කරන්න",
"@removeDevice": {
"type": "text",
"placeholders": {}
},
"roomVersion": "කාමරයේ අනුවාදය",
"@roomVersion": {
"type": "text",
"placeholders": {}
},
"savedFileAs": "ලෙස ගොනුව සුරකින්න {filename}",
"@savedFileAs": {
"type": "text",
"placeholders": {
"filename": {}
}
},
"saveFile": "ගොනුව සුරකින්න",
"@saveFile": {
"type": "text",
"placeholders": {}
},
"saveFileToFolder": "ගොනුව මෙම බහාලුමට සුරකින්න",
"@saveFileToFolder": {
"type": "text",
"placeholders": {}
},
"securityKey": "ආරක්ෂක යතුර",
"@securityKey": {
"type": "text",
"placeholders": {}
},
"securityKeyLost": "ආරක්ෂක යතුර නැතිවුනාද?",
"@securityKeyLost": {
"type": "text",
"placeholders": {}
},
"send": "යවන්න",
"@send": {
"type": "text",
"placeholders": {}
},
"showPassword": "මුරපදය පෙන්වන්න",
"@showPassword": {
"type": "text",
"placeholders": {}
},
"sunday": "ඉරිදා",
"@sunday": {
"type": "text",
"placeholders": {}
},
"username": "පරිශීලක නාමය",
"@username": {
"type": "text",
"placeholders": {}
},
"videoCall": "දෘශ්‍ය ඇමතුම",
"@videoCall": {
"type": "text",
"placeholders": {}
},
"wallpaper": "බිතුපත",
"@wallpaper": {
"type": "text",
"placeholders": {}
},
"warning": "අවවාදයයි!",
"@warning": {
"type": "text",
"placeholders": {}
},
"wednesday": "බදාදා",
"@wednesday": {
"type": "text",
"placeholders": {}
},
"writeAMessage": "පණිවිඩයක් ලියන්න…",
"@writeAMessage": {
"type": "text",
"placeholders": {}
},
"yes": "ඔව්",
"@yes": {
"type": "text",
"placeholders": {}
},
"you": "ඔබ",
"@you": {
"type": "text",
"placeholders": {}
},
"yourOwnUsername": "ඔබට හිමි පරිශීලකනාමය",
"@yourOwnUsername": {
"type": "text",
"placeholders": {}
},
"zoomIn": "විශාලනය",
"@zoomIn": {
"type": "text",
"placeholders": {}
},
"zoomOut": "කුඩාලනය",
"@zoomOut": {
"type": "text",
"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

View File

@ -1,20 +1,20 @@
{
"@@last_modified": "2021-08-14 12:41:09.826673",
"acceptedTheInvitation": "{username} அழைப்பை ஏற்றுக்கொண்டார்",
"@acceptedTheInvitation": {
"type": "text",
"placeholders": {
"username": {}
"@@last_modified": "2021-08-14 12:41:09.826673",
"acceptedTheInvitation": "{username} அழைப்பை ஏற்றுக்கொண்டார்",
"@acceptedTheInvitation": {
"type": "text",
"placeholders": {
"username": {}
}
},
"accept": "ஏற்றுக்கொள்",
"@accept": {
"type": "text",
"placeholders": {}
},
"about": "பற்றி",
"@about": {
"type": "text",
"placeholders": {}
}
},
"accept": "ஏற்றுக்கொள்",
"@accept": {
"type": "text",
"placeholders": {}
},
"about": "பற்றி",
"@about": {
"type": "text",
"placeholders": {}
}
}
}

1
assets/l10n/intl_th.arb Normal file
View File

@ -0,0 +1 @@
{}

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

View File

@ -7,11 +7,9 @@ are also published on it.
Easiest way to add the Repository is to either **scan the QR-Code** or if you are on your phone **directly click it**.
{::nomarkdown}
<a href="fdroidrepos://fluffychat.im/repo/stable/repo/?fingerprint=8E2637AEF6697CC6DD486AF044A6EE45B1A742AE3EF56566E748CDE8BC65C1FB" >
<a href="fdroidrepos://fluffychat.im/repo/stable/repo/?fingerprint=5EDB5C4395B2F2D9BA682F6A1D275170CCE5365A6FA27D2220EA8D52A6D95F07" >
<img src="qr-stable.svg" width="300" height="300"/>
</a>
{:/}
### If the QR-Code doesn't work:
@ -24,11 +22,11 @@ If this still isn't working follow the next steps:
2. Go to the `Settings` Tab in the Bottom bar
3. Click the `Repositories` Action
4. Click on the plus sign at the top.
5. Fill in `https://fluffychat.im/repo/stable/repo/` into the top field and `8E2637AEF6697CC6DD486AF044A6EE45B1A742AE3EF56566E748CDE8BC65C1FB` in the bottom field.
5. Fill in `https://fluffychat.im/repo/stable/repo/` into the top field and `5EDB5C4395B2F2D9BA682F6A1D275170CCE5365A6FA27D2220EA8D52A6D95F07` in the bottom field.
## What is the fingerprint?
The fingerprint of the Repository is: `8E2637AEF6697CC6DD486AF044A6EE45B1A742AE3EF56566E748CDE8BC65C1FB`
The fingerprint of the Repository is: `5EDB5C4395B2F2D9BA682F6A1D275170CCE5365A6FA27D2220EA8D52A6D95F07`
# Nightly Repository
@ -36,11 +34,9 @@ The fingerprint of the Repository is: `8E2637AEF6697CC6DD486AF044A6EE45B1A742AE3
Easiest way to add the Repository is to either **scan the QR-Code** or if you are on your phone **directly click** it.
{::nomarkdown}
<a href="fdroidrepos://fluffychat.im/repo/nightly/repo/?fingerprint=21A469657300576478B623DF99D8EB889A80BCD939ACA60A4074741BEAEC397D" >
<img src="qr-nightly.svg" width="300" height="300"/>
</a>
{:/}
### If the QR-Code doesn't work:

View File

@ -1,565 +1,119 @@
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>FluffyChat - Official Website</title>
<meta name="description" content="A cute and secure chatclient for the matrix protocol">
<meta name="keywords"
content="Fluffychat, Matrix, Web, Android, iOS, Desktop, Chat, Client, Chatclient, Matrix.org, Secure, E2EE, End to End, Encryption, End to End Encryption, F-Droid, Foss, FOSS, OpenSource, Free, Community, Open">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "MobileApplication",
"name": "Fluffychat",
"applicationCategory": "CommunicationApplication",
"countriesNotSupported": "fr",
"operatingSystem": "ANDROID",
"releaseNotes": "https://gitlab.com/famedly/fluffychat/-/blob/main/CHANGELOG.md",
"screenshot": "https://gitlab.com/famedly/fluffychat/-/raw/main/docs/screenshots/mobile.png",
"softwareHelp": "https://gitlab.com/famedly/fluffychat/-/wikis/FAQ",
"author": {
"@type": "Person",
"callSign": "KrilleFear"
},
"license": "https://gitlab.com/famedly/fluffychat/-/blob/main/LICENSE",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"ratingCount": "133"
},
"installUrl": "https://play.google.com/store/apps/details?id=chat.fluffy.fluffychat"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "MobileApplication",
"name": "Fluffychat",
"applicationCategory": "CommunicationApplication",
"countriesNotSupported": "fr",
"operatingSystem": "ANDROID",
"releaseNotes": "https://gitlab.com/famedly/fluffychat/-/blob/main/CHANGELOG.md",
"screenshot": "https://gitlab.com/famedly/fluffychat/-/raw/main/docs/screenshots/mobile.png",
"softwareHelp": "https://gitlab.com/famedly/fluffychat/-/wikis/FAQ",
"author": {
"@type": "Person",
"callSign": "KrilleFear"
},
"license": "https://gitlab.com/famedly/fluffychat/-/blob/main/LICENSE",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"ratingCount": "133"
},
"installUrl": "https://f-droid.org/de/packages/chat.fluffy.fluffychat/"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "MobileApplication",
"name": "Fluffychat",
"applicationCategory": "CommunicationApplication",
"countriesNotSupported": "fr",
"operatingSystem": "IOS",
"releaseNotes": "https://gitlab.com/famedly/fluffychat/-/blob/main/CHANGELOG.md",
"screenshot": "https://gitlab.com/famedly/fluffychat/-/raw/main/docs/screenshots/mobile.png",
"softwareHelp": "https://gitlab.com/famedly/fluffychat/-/wikis/FAQ",
"author": {
"@type": "Person",
"callSign": "KrilleFear"
},
"license": "https://gitlab.com/famedly/fluffychat/-/blob/main/LICENSE",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.4",
"ratingCount": "28"
},
"installUrl": "https://apps.apple.com/app/fluffychat/id1551469600"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebApplication",
"name": "Fluffychat",
"applicationCategory": "CommunicationApplication",
"countriesNotSupported": "fr",
"operatingSystem": "WEB",
"releaseNotes": "https://gitlab.com/famedly/fluffychat/-/blob/main/CHANGELOG.md",
"screenshot": "https://gitlab.com/famedly/fluffychat/-/raw/main/docs/screenshots/mobile.png",
"softwareHelp": "https://gitlab.com/famedly/fluffychat/-/wikis/FAQ",
"author": {
"@type": "Person",
"callSign": "KrilleFear"
},
"license": "https://gitlab.com/famedly/fluffychat/-/blob/main/LICENSE",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"ratingCount": "133"
},
"url": "https://fluffychat.im/web",
"downloadUrl": "https://fluffychat.im/web",
"installUrl": "https://fluffychat.im/web"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Fluffychat",
"applicationCategory": "CommunicationApplication",
"countriesNotSupported": "fr",
"operatingSystem": "LINUX",
"releaseNotes": "https://gitlab.com/famedly/fluffychat/-/blob/main/CHANGELOG.md",
"screenshot": "https://gitlab.com/famedly/fluffychat/-/raw/main/docs/screenshots/mobile.png",
"softwareHelp": "https://gitlab.com/famedly/fluffychat/-/wikis/FAQ",
"author": {
"@type": "Person",
"callSign": "KrilleFear"
},
"license": "https://gitlab.com/famedly/fluffychat/-/blob/main/LICENSE",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"ratingCount": "133"
},
"downloadUrl": "https://snapcraft.io/fluffychat",
"installUrl": "https://snapcraft.io/fluffychat"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Fluffychat",
"applicationCategory": "CommunicationApplication",
"countriesNotSupported": "fr",
"operatingSystem": "LINUX",
"releaseNotes": "https://gitlab.com/famedly/fluffychat/-/blob/main/CHANGELOG.md",
"screenshot": "https://gitlab.com/famedly/fluffychat/-/raw/main/docs/screenshots/mobile.png",
"softwareHelp": "https://gitlab.com/famedly/fluffychat/-/wikis/FAQ",
"author": {
"@type": "Person",
"callSign": "KrilleFear"
},
"license": "https://gitlab.com/famedly/fluffychat/-/blob/main/LICENSE",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"ratingCount": "133"
},
"downloadUrl": "https://flathub.org/apps/details/im.fluffychat.Fluffychat",
"installUrl": "https://flathub.org/apps/details/im.fluffychat.Fluffychat"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "FluffyChat - Official Website",
"url": "https://fluffychat.im",
"description": "A cute and secure chatclient for the matrix protocol",
"thumbnailUrl": "https://fluffychat.im/favicon.png",
"inLanguage": "de-de"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"description": "Breadcrumbs list",
"name": "Breadcrumbs",
"itemListElement": [
{
"@type": "ListItem",
"item": {
"@id": "https://fluffychat.im",
"name": "Homepage"
},
"position": 1
}
]
}
</script>
<link rel="icon" type="image/png" href="favicon.png">
<link rel="stylesheet" href="tailwind.css">
<!-- Animation CSS-->
<meta charset="utf-8">
<title>FluffyChat Official Website</title>
<meta name="identifier-url" content="https://fluffychat.im" />
<meta name="title" content="FluffyChat Official Website" />
<meta name="description" content="The cutest messenger in the Matrix network" />
<meta name="abstract" content="FluffyChat is the cutest messenger in the Matrix network" />
<meta name="keywords" content="FluffyChat, Matrix, Flutter, App" />
<meta name="author" content="Krille Fear" />
<meta name="revisit-after" content="15" />
<meta name="language" content="EN" />
<meta name="robots" content="All" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.png">
<link href="tailwind.css" rel="stylesheet">
<style>
@font-face {
font-family: Zen Kurenaido;
src: url(ZenKurenaido-Regular.ttf);
}
/* ----------------------------------------------
* Generated by Animista
* w: http://animista.net, t: @cssanimista
* ---------------------------------------------- */
.slide-in-bottom {
-webkit-animation: slide-in-bottom .5s cubic-bezier(.25, .46, .45, .94) both;
animation: slide-in-bottom .5s cubic-bezier(.25, .46, .45, .94) both
}
.slide-in-bottom-h1 {
-webkit-animation: slide-in-bottom .5s cubic-bezier(.25, .46, .45, .94) .5s both;
animation: slide-in-bottom .5s cubic-bezier(.25, .46, .45, .94) .5s both
}
.slide-in-bottom-subtitle {
-webkit-animation: slide-in-bottom .5s cubic-bezier(.25, .46, .45, .94) .75s both;
animation: slide-in-bottom .5s cubic-bezier(.25, .46, .45, .94) .75s both
}
.fade-in {
-webkit-animation: fade-in 1.2s cubic-bezier(.39, .575, .565, 1.000) 1s both;
animation: fade-in 1.2s cubic-bezier(.39, .575, .565, 1.000) 1s both
}
.bounce-top-icons {
-webkit-animation: bounce-top .9s 1s both;
animation: bounce-top .9s 1s both
}
@-webkit-keyframes slide-in-bottom {
0% {
-webkit-transform: translateY(1000px);
transform: translateY(1000px);
opacity: 0
}
100% {
-webkit-transform: translateY(0);
transform: translateY(0);
opacity: 1
}
}
@keyframes slide-in-bottom {
0% {
-webkit-transform: translateY(1000px);
transform: translateY(1000px);
opacity: 0
}
100% {
-webkit-transform: translateY(0);
transform: translateY(0);
opacity: 1
}
}
@-webkit-keyframes bounce-top {
0% {
-webkit-transform: translateY(-45px);
transform: translateY(-45px);
-webkit-animation-timing-function: ease-in;
animation-timing-function: ease-in;
opacity: 1
}
24% {
opacity: 1
}
40% {
-webkit-transform: translateY(-24px);
transform: translateY(-24px);
-webkit-animation-timing-function: ease-in;
animation-timing-function: ease-in
}
65% {
-webkit-transform: translateY(-12px);
transform: translateY(-12px);
-webkit-animation-timing-function: ease-in;
animation-timing-function: ease-in
}
82% {
-webkit-transform: translateY(-6px);
transform: translateY(-6px);
-webkit-animation-timing-function: ease-in;
animation-timing-function: ease-in
}
93% {
-webkit-transform: translateY(-4px);
transform: translateY(-4px);
-webkit-animation-timing-function: ease-in;
animation-timing-function: ease-in
}
25%,
55%,
75%,
87% {
-webkit-transform: translateY(0);
transform: translateY(0);
-webkit-animation-timing-function: ease-out;
animation-timing-function: ease-out
}
100% {
-webkit-transform: translateY(0);
transform: translateY(0);
-webkit-animation-timing-function: ease-out;
animation-timing-function: ease-out;
opacity: 1
}
}
@keyframes bounce-top {
0% {
-webkit-transform: translateY(-45px);
transform: translateY(-45px);
-webkit-animation-timing-function: ease-in;
animation-timing-function: ease-in;
opacity: 1
}
24% {
opacity: 1
}
40% {
-webkit-transform: translateY(-24px);
transform: translateY(-24px);
-webkit-animation-timing-function: ease-in;
animation-timing-function: ease-in
}
65% {
-webkit-transform: translateY(-12px);
transform: translateY(-12px);
-webkit-animation-timing-function: ease-in;
animation-timing-function: ease-in
}
82% {
-webkit-transform: translateY(-6px);
transform: translateY(-6px);
-webkit-animation-timing-function: ease-in;
animation-timing-function: ease-in
}
93% {
-webkit-transform: translateY(-4px);
transform: translateY(-4px);
-webkit-animation-timing-function: ease-in;
animation-timing-function: ease-in
}
25%,
55%,
75%,
87% {
-webkit-transform: translateY(0);
transform: translateY(0);
-webkit-animation-timing-function: ease-out;
animation-timing-function: ease-out
}
100% {
-webkit-transform: translateY(0);
transform: translateY(0);
-webkit-animation-timing-function: ease-out;
animation-timing-function: ease-out;
opacity: 1
}
}
@-webkit-keyframes fade-in {
0% {
opacity: 0
}
100% {
opacity: 1
}
}
@keyframes fade-in {
0% {
opacity: 0
}
100% {
opacity: 1
}
}
</style>
</head>
<body
class="flex flex-col items-center justify-center min-h-screen w-screen bg-gradient-to-t from-purple-200 to-blue-50 dark:from-gray-800 dark:to-slate-900 p-4"
style="font-family: 'Zen Kurenaido', sans-serif;">
<img src="favicon.png" class="h-10" />
<h1 class="flex text-4xl items-center mb-4">
<span style="color: #5625BA">Fluffy</span>
<span style="color: #41a2bc">Chat</span>
</h1>
<img src="screenshots/screenshots.png" class="sm:max-w-lg max-w-screen mb-8" />
<body class="leading-normal tracking-normal text-gray-900" style="font-family: 'Zen Kurenaido', sans-serif;">
<div class="h-screen pb-14 bg-right bg-cover" style="background-image:url('bg.svg');">
<!--Nav-->
<div class="w-full container mx-auto p-6">
<div class="w-full flex items-center justify-between">
<a class="flex items-center no-underline hover:no-underline font-bold text-2xl lg:text-4xl" href="#">
<img src="favicon.png" class="h-8 fill-current text-indigo-600 pr-2" /> <span
style="color: #5625BA">Fluffy</span><span style="color: #41a2bc">Chat</span>
</a>
<div class="flex w-1/2 justify-end content-center">
<a class="inline-block text-blue-300 no-underline hover:text-indigo-800 hover:text-underline text-center h-10 p-2 md:h-auto md:p-4"
href="https://matrix.to/#/#fluffychat:matrix.org">
<svg class="fill-current h-6" enable-background="new -91 49.217 56.693 56.693" id="Layer_1"
version="1.1" viewBox="-91 49.217 56.693 56.693" xml:space="preserve"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<path
d="M-38.3289,79.8244c-0.7526-2.2362-3.1756-3.4388-5.4117-2.6861l-4.5351,1.5264l-3.0737-9.1321l4.4169-1.4866 c2.2362-0.7526,3.4388-3.1756,2.6861-5.4117c-0.7526-2.2362-3.1756-3.4388-5.4117-2.6861l-4.4168,1.4866l-1.4877-4.4201 c-0.7527-2.2362-3.1756-3.4388-5.4117-2.6861v0c-2.2362,0.7526-3.4388,3.1756-2.6861,5.4117l1.4877,4.4201l-9.3246,3.1385 l-1.4697-4.3666c-0.7527-2.2362-3.1756-3.4388-5.4117-2.6861c-2.2362,0.7527-3.4388,3.1756-2.6861,5.4117l1.4697,4.3666 l-4.445,1.4961c-2.2362,0.7527-3.4388,3.1756-2.6861,5.4117v0c0.7526,2.2362,3.1756,3.4388,5.4117,2.6861l4.445-1.4961 l3.0737,9.1321l-4.3268,1.4563c-2.2362,0.7527-3.4388,3.1756-2.6861,5.4117c0.7526,2.2362,3.1756,3.4388,5.4117,2.6861 l4.3268-1.4563l1.5778,4.6877c0.7527,2.2362,3.1756,3.4388,5.4117,2.6861c2.2362-0.7527,3.4388-3.1756,2.6861-5.4117l-1.5778-4.6877 l9.3246-3.1385l1.5598,4.6342c0.7527,2.2362,3.1756,3.4388,5.4117,2.6861c2.2362-0.7527,3.4388-3.1756,2.6861-5.4117l-1.5598-4.6342 l4.5351-1.5264C-38.7789,84.4835-37.5762,82.0606-38.3289,79.8244z M-65.6982,84.5288l-3.0737-9.1321l9.3246-3.1385l3.0737,9.1321 L-65.6982,84.5288z" />
</svg>
</a>
<a class="inline-block text-blue-300 no-underline hover:text-indigo-800 hover:text-underline text-center h-10 p-2 md:h-auto md:p-4"
href="https://twitter.com/KrilleFear">
<svg class="fill-current h-6" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<path
d="M30.063 7.313c-.813 1.125-1.75 2.125-2.875 2.938v.75c0 1.563-.188 3.125-.688 4.625a15.088 15.088 0 0 1-2.063 4.438c-.875 1.438-2 2.688-3.25 3.813a15.015 15.015 0 0 1-4.625 2.563c-1.813.688-3.75 1-5.75 1-3.25 0-6.188-.875-8.875-2.625.438.063.875.125 1.375.125 2.688 0 5.063-.875 7.188-2.5-1.25 0-2.375-.375-3.375-1.125s-1.688-1.688-2.063-2.875c.438.063.813.125 1.125.125.5 0 1-.063 1.5-.25-1.313-.25-2.438-.938-3.313-1.938a5.673 5.673 0 0 1-1.313-3.688v-.063c.813.438 1.688.688 2.625.688a5.228 5.228 0 0 1-1.875-2c-.5-.875-.688-1.813-.688-2.75 0-1.063.25-2.063.75-2.938 1.438 1.75 3.188 3.188 5.25 4.25s4.313 1.688 6.688 1.813a5.579 5.579 0 0 1 1.5-5.438c1.125-1.125 2.5-1.688 4.125-1.688s3.063.625 4.188 1.813a11.48 11.48 0 0 0 3.688-1.375c-.438 1.375-1.313 2.438-2.563 3.188 1.125-.125 2.188-.438 3.313-.875z">
</path>
</svg>
</a>
<a class="inline-block text-blue-300 no-underline hover:text-indigo-800 hover:text-underline text-center h-10 p-2 md:h-auto md:p-4"
href="https://metalhead.club/@krille">
<svg class="fill-current h-6" viewBox="0 0 1000 1000" version="1.1"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
<clipPath id="_clip1">
<rect x="33.6" y="-0.035" width="932.844" height="1000" />
</clipPath>
<g clip-path="url(#_clip1)">
<path
d="M946.586,599.455c-13.713,70.541 -122.816,147.742 -248.121,162.703c-65.341,7.796 -129.674,14.962 -198.275,11.815c-112.191,-5.139 -200.716,-26.776 -200.716,-26.776c0,10.92 0.673,21.319 2.02,31.044c14.586,110.711 109.787,117.344 199.967,120.436c91.021,3.114 172.068,-22.44 172.068,-22.44l3.74,82.281c0,0 -63.666,34.185 -177.079,40.473c-62.539,3.437 -140.192,-1.573 -230.636,-25.511c-196.158,-51.916 -229.893,-260.996 -235.055,-473.143c-1.573,-62.987 -0.603,-122.381 -0.603,-172.056c0,-216.931 142.142,-280.516 142.142,-280.516c71.672,-32.914 194.655,-46.755 322.508,-47.8l3.142,0c127.853,1.045 250.917,14.886 322.583,47.8c0,0 142.138,63.585 142.138,280.516c0,0 1.783,160.053 -19.823,271.174"
style="fill-rule:nonzero;" />
<path
d="M798.748,345.11l0,262.667l-104.07,0l0,-254.946c0,-53.743 -22.614,-81.021 -67.847,-81.021c-50.012,0 -75.077,32.359 -75.077,96.343l0,139.547l-103.457,0l0,-139.547c0,-63.984 -25.07,-96.343 -75.082,-96.343c-45.233,0 -67.847,27.278 -67.847,81.021l0,254.946l-104.07,0l0,-262.667c0,-53.683 13.669,-96.343 41.127,-127.904c28.314,-31.561 65.395,-47.741 111.425,-47.741c53.256,0 93.585,20.468 120.251,61.41l25.922,43.451l25.927,-43.451c26.66,-40.942 66.99,-61.41 120.251,-61.41c46.025,0 83.106,16.18 111.425,47.741c27.453,31.561 41.122,74.221 41.122,127.904"
style="fill:#fff;fill-rule:nonzero;" />
</g>
</svg>
</a>
<a class="inline-block text-blue-300 no-underline hover:text-indigo-800 hover:text-underline text-center h-10 p-2 md:h-auto md:p-4"
href="https://ko-fi.com/krille">
<img class="w-10 hover:animate-bounce" src="Kofi_pixel_logo.png"/>
</a>
</div>
</div>
</div>
<!--Main-->
<div class="container pt-8 px-6 mx-auto flex flex-wrap flex-col md:flex-row items-center">
<!--Left Col-->
<div class="flex flex-col w-full xl:w-2/5 justify-center lg:items-start overflow-y-hidden">
<h1
class="my-4 text-3xl md:text-5xl text-purple-800 font-bold leading-tight text-center md:text-left slide-in-bottom-h1">
Open. Nonprofit. Cute.</h1>
<p class="leading-normal text-base md:text-2xl mb-8 text-center md:text-left slide-in-bottom-subtitle">
Easy to use (<a class="underline hover:text-blue-700 transition-all"
href="https://matrix.org">matrix</a>) messenger. Secure and decentralized.</p>
<p class="text-blue-700 font-bold pb-4 text-center md:text-left fade-in">Mobile app:</p>
<div class="w-full flex justify-center md:justify-start pb-24 lg:pb-0 fade-in">
<a href="https://apps.apple.com/app/fluffychat/id1551469600"><img src="appstore-badge.png"
class="max-h-12 pr-2 mb-2 bounce-top-icons inline"></a>
<a href="https://play.google.com/store/apps/details?id=chat.fluffy.fluffychat"><img
src="google-play-badge.png" class="max-h-12 pr-2 mb-2 bounce-top-icons inline">
</a><a href="https://f-droid.org/de/packages/chat.fluffy.fluffychat/"><img src="fdroid_button.png"
class="max-h-12 pr-2 mb-2 bounce-top-icons inline">
</a>
</div>
<p class="text-blue-700 font-bold py-4 text-center md:text-left fade-in">Desktop app:</p>
<div class="w-full flex justify-center md:justify-start pb-24 lg:pb-0 fade-in">
<a href="https://fluffychat.im/web">
<img src="browser-badge.png" class="max-h-12 pr-2 mb-2 bounce-top-icons inline"></a>
<a href="https://snapcraft.io/fluffychat"><img
src="https://snapcraft.io/static/images/badges/en/snap-store-black.svg"
class="max-h-12 pr-2 mb-2 bounce-top-icons inline"></a>
<a href="https://flathub.org/apps/details/im.fluffychat.Fluffychat"><img src="flathub-badge-en.png"
class="max-h-12 pr-2 mb-2 bounce-top-icons inline"></a>
</div>
</div>
<!--Right Col-->
<div class="w-full xl:w-3/5 py-6 relative">
<img class="w-full mx-auto slide-in-bottom" src="screenshots/screenshots.png">
</div>
<!--Footer-->
<div class="w-full pt-16 pb-6 text-sm text-center md:text-left fade-in">
<a class="text-gray-500 no-underline hover:text-purple-800"
href="https://gitlab.com/famedly/fluffychat">Source code</a>
-
<a class="text-gray-500 no-underline hover:text-purple-800"
href="https://gitlab.com/famedly/fluffychat/-/blob/main/PRIVACY.md">Privacy</a>
-
<a class="text-gray-500 no-underline hover:text-purple-800"
href="https://gitlab.com/famedly/fluffychat/-/blob/main/CHANGELOG.md">Changelog</a>
-
<a class="text-gray-500 no-underline hover:text-purple-800"
href="https://hosted.weblate.org/projects/fluffychat/">Translations</a>
-
<a class="text-gray-500 no-underline hover:text-purple-800"
href="https://gitlab.com/famedly/fluffychat/-/blob/main/docs/fdroid_repo.md">FluffyChat F-Droid repository</a>
-
<a class="text-gray-500 no-underline hover:text-purple-800"
href="https://liberapay.com/KrilleChritzelius/donate">Donate</a>
-
<a class="text-gray-500 no-underline hover:text-purple-800"
href="https://keys.mailvelope.com/pks/lookup?op=get&search=christian-pauly%40posteo.de">Contact</a>
-
<a class="text-gray-500 no-underline hover:text-purple-800" href="https://krillefear.gitlab.io">Created
by Krille Fear</a>
</div>
</div>
<div class="max-w-lg mb-8 flex justify-center flex-wrap">
<a href="https://apps.apple.com/app/fluffychat/id1551469600"><img src="appstore-badge.png"
class="w-36 pr-2 mb-2 inline hover:scale-105 transition-transform"></a>
<a href="https://play.google.com/store/apps/details?id=chat.fluffy.fluffychat"><img src="google-play-badge.png"
class="w-36 pr-2 mb-2 hover:scale-105 transition-transform inline">
</a><a href="https://f-droid.org/packages/chat.fluffy.fluffychat/"><img src="fdroid_button.png"
class="w-36 pr-2 mb-2 hover:scale-105 transition-transform inline">
</a>
<a href="https://fluffychat.im/web">
<img src="browser-badge.png" class="w-36 pr-2 mb-2 hover:scale-105 transition-transform inline"></a>
<a href="https://snapcraft.io/fluffychat"><img
src="https://snapcraft.io/static/images/badges/en/snap-store-black.svg"
class="w-36 pr-2 mb-2 hover:scale-105 transition-transform inline"></a>
<a href="https://flathub.org/apps/details/im.fluffychat.Fluffychat"><img src="flathub-badge-en.png"
class="w-36 pr-2 mb-2 hover:scale-105 transition-transform inline"></a>
</div>
<div class="flex mb-8 justify-center content-center">
<a rel="me"
class="inline-block text-indigo-500 no-underline hover:text-indigo-900 hover:scale-105 transition-all text-center h-auto p-4"
rel="me" href="https://mastodon.art/@krille">
<svg class="fill-current h-6" viewBox="0 0 1000 1000" version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
<clipPath id="_clip1">
<rect x="33.6" y="-0.035" width="932.844" height="1000" />
</clipPath>
<g clip-path="url(#_clip1)">
<path
d="M946.586,599.455c-13.713,70.541 -122.816,147.742 -248.121,162.703c-65.341,7.796 -129.674,14.962 -198.275,11.815c-112.191,-5.139 -200.716,-26.776 -200.716,-26.776c0,10.92 0.673,21.319 2.02,31.044c14.586,110.711 109.787,117.344 199.967,120.436c91.021,3.114 172.068,-22.44 172.068,-22.44l3.74,82.281c0,0 -63.666,34.185 -177.079,40.473c-62.539,3.437 -140.192,-1.573 -230.636,-25.511c-196.158,-51.916 -229.893,-260.996 -235.055,-473.143c-1.573,-62.987 -0.603,-122.381 -0.603,-172.056c0,-216.931 142.142,-280.516 142.142,-280.516c71.672,-32.914 194.655,-46.755 322.508,-47.8l3.142,0c127.853,1.045 250.917,14.886 322.583,47.8c0,0 142.138,63.585 142.138,280.516c0,0 1.783,160.053 -19.823,271.174"
style="fill-rule:nonzero;" />
<path
d="M798.748,345.11l0,262.667l-104.07,0l0,-254.946c0,-53.743 -22.614,-81.021 -67.847,-81.021c-50.012,0 -75.077,32.359 -75.077,96.343l0,139.547l-103.457,0l0,-139.547c0,-63.984 -25.07,-96.343 -75.082,-96.343c-45.233,0 -67.847,27.278 -67.847,81.021l0,254.946l-104.07,0l0,-262.667c0,-53.683 13.669,-96.343 41.127,-127.904c28.314,-31.561 65.395,-47.741 111.425,-47.741c53.256,0 93.585,20.468 120.251,61.41l25.922,43.451l25.927,-43.451c26.66,-40.942 66.99,-61.41 120.251,-61.41c46.025,0 83.106,16.18 111.425,47.741c27.453,31.561 41.122,74.221 41.122,127.904"
style="fill:#fff;fill-rule:nonzero;" />
</g>
</svg>
</a>
<a class="inline-block text-indigo-500 no-underline hover:text-indigo-900 hover:scale-105 transition-all text-center h-auto p-4"
href="https://matrix.to/#/#fluffychat:matrix.org">
<svg class="fill-current h-6" enable-background="new -91 49.217 56.693 56.693" id="Layer_1" version="1.1"
viewBox="-91 49.217 56.693 56.693" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<path
d="M-38.3289,79.8244c-0.7526-2.2362-3.1756-3.4388-5.4117-2.6861l-4.5351,1.5264l-3.0737-9.1321l4.4169-1.4866 c2.2362-0.7526,3.4388-3.1756,2.6861-5.4117c-0.7526-2.2362-3.1756-3.4388-5.4117-2.6861l-4.4168,1.4866l-1.4877-4.4201 c-0.7527-2.2362-3.1756-3.4388-5.4117-2.6861v0c-2.2362,0.7526-3.4388,3.1756-2.6861,5.4117l1.4877,4.4201l-9.3246,3.1385 l-1.4697-4.3666c-0.7527-2.2362-3.1756-3.4388-5.4117-2.6861c-2.2362,0.7527-3.4388,3.1756-2.6861,5.4117l1.4697,4.3666 l-4.445,1.4961c-2.2362,0.7527-3.4388,3.1756-2.6861,5.4117v0c0.7526,2.2362,3.1756,3.4388,5.4117,2.6861l4.445-1.4961 l3.0737,9.1321l-4.3268,1.4563c-2.2362,0.7527-3.4388,3.1756-2.6861,5.4117c0.7526,2.2362,3.1756,3.4388,5.4117,2.6861 l4.3268-1.4563l1.5778,4.6877c0.7527,2.2362,3.1756,3.4388,5.4117,2.6861c2.2362-0.7527,3.4388-3.1756,2.6861-5.4117l-1.5778-4.6877 l9.3246-3.1385l1.5598,4.6342c0.7527,2.2362,3.1756,3.4388,5.4117,2.6861c2.2362-0.7527,3.4388-3.1756,2.6861-5.4117l-1.5598-4.6342 l4.5351-1.5264C-38.7789,84.4835-37.5762,82.0606-38.3289,79.8244z M-65.6982,84.5288l-3.0737-9.1321l9.3246-3.1385l3.0737,9.1321 L-65.6982,84.5288z" />
</svg>
</a>
<a class="inline-block no-underline hover:scale-105 transition-all text-center h-auto p-4"
href="https://ko-fi.com/krille">
<img src="kofi_button_dark.png" class="h-6 fill-current" />
</a>
</div>
<!--Footer-->
<div class="w-full text-sm text-center max-w-lg">
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800"
href="https://gitlab.com/famedly/fluffychat">Source
code</a>
-
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800"
href="https://gitlab.com/famedly/fluffychat/-/blob/main/PRIVACY.md">Privacy</a>
-
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800"
href="https://gitlab.com/famedly/fluffychat/-/blob/main/CHANGELOG.md">Changelog</a>
-
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800"
href="https://hosted.weblate.org/projects/fluffychat/">Translations</a>
-
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800"
href="https://gitlab.com/famedly/fluffychat/-/blob/main/docs/fdroid_repo.md">FluffyChat F-Droid
repository</a>
-
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800"
href="https://keys.mailvelope.com/pks/lookup?op=get&search=christian-pauly%40posteo.de">Contact</a>
-
<a class="text-slate-700 dark:text-slate-200 no-underline hover:text-purple-800"
href="https://krillefear.gitlab.io">Created
by Krille Fear</a>
</div>
</body>
</html>
</html>

BIN
docs/kofi_button_dark.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,49 +1,193 @@
import 'dart:developer';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/pages/chat/chat_view.dart';
import 'package:fluffychat/pages/chat_list/chat_list_body.dart';
import 'package:fluffychat/pages/chat_list/search_title.dart';
import 'package:fluffychat/pages/invitation_selection/invitation_selection_view.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:integration_test/integration_test.dart';
import 'package:fluffychat/main.dart' as app;
import 'package:shared_preferences/shared_preferences.dart';
import 'extensions/default_flows.dart';
import 'extensions/wait_for.dart';
import 'users.dart';
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
group('Integration Test', () {
testWidgets('Test if the app starts', (WidgetTester tester) async {
app.main();
await tester.pumpAndSettle();
group(
'Integration Test',
() {
setUpAll(
() async {
// this random dialog popping up is super hard to cover in tests
SharedPreferences.setMockInitialValues({
SettingKeys.showNoGoogle: false,
});
try {
Hive.deleteFromDisk();
Hive.initFlutter();
} catch (_) {}
},
);
await Future.delayed(const Duration(seconds: 10));
testWidgets(
'Start app, login and logout',
(WidgetTester tester) async {
app.main();
await tester.ensureAppStartedHomescreen();
await tester.ensureLoggedOut();
},
);
await tester.pumpAndSettle();
testWidgets(
'Login again',
(WidgetTester tester) async {
app.main();
await tester.ensureAppStartedHomescreen();
},
);
expect(find.text('Connect'), findsOneWidget);
testWidgets(
'Start chat and send message',
(WidgetTester tester) async {
app.main();
await tester.ensureAppStartedHomescreen();
await tester.waitFor(find.byType(TextField));
await tester.enterText(find.byType(TextField), Users.user2.name);
await tester.pumpAndSettle();
final input = find.byType(TextField);
await tester.scrollUntilVisible(
find.text('Chats').first,
500,
scrollable: find
.descendant(
of: find.byType(ChatListViewBody),
matching: find.byType(Scrollable),
)
.first,
);
await tester.pumpAndSettle();
await tester.tap(find.text('Chats'));
await tester.pumpAndSettle();
await tester.waitFor(find.byType(SearchTitle));
await tester.pumpAndSettle();
expect(input, findsOneWidget);
await tester.scrollUntilVisible(
find.text(Users.user2.name).first,
500,
scrollable: find
.descendant(
of: find.byType(ChatListViewBody),
matching: find.byType(Scrollable),
)
.first,
);
await tester.pumpAndSettle();
await tester.tap(find.text(Users.user2.name).first);
await tester.enterText(input, homeserver);
await tester.testTextInput.receiveAction(TextInputAction.done);
await tester.pumpAndSettle();
try {
await tester.waitFor(
find.byType(ChatView),
timeout: const Duration(seconds: 5),
);
} catch (_) {
// in case the homeserver sends the username as search result
if (find.byIcon(Icons.send_outlined).evaluate().isNotEmpty) {
await tester.tap(find.byIcon(Icons.send_outlined));
await tester.pumpAndSettle();
}
}
// in case registration is allowed
try {
await tester.tap(find.text('Login'));
await tester.waitFor(find.byType(ChatView));
await tester.enterText(find.byType(TextField).last, 'Test');
await tester.pumpAndSettle();
try {
await tester.waitFor(find.byIcon(Icons.send_outlined));
await tester.tap(find.byIcon(Icons.send_outlined));
} catch (_) {
await tester.testTextInput.receiveAction(TextInputAction.done);
}
await tester.pumpAndSettle();
await tester.waitFor(find.text('Test'));
await tester.pumpAndSettle();
},
);
testWidgets('Spaces', (tester) async {
app.main();
await tester.ensureAppStartedHomescreen();
await tester.waitFor(find.byTooltip('Show menu'));
await tester.tap(find.byTooltip('Show menu'));
await tester.pumpAndSettle();
} catch (e) {
log('Registration is not allowed. Proceeding with login...');
}
await tester.pumpAndSettle();
final inputs = find.byType(TextField);
await tester.waitFor(find.byIcon(Icons.workspaces_outlined));
await tester.tap(find.byIcon(Icons.workspaces_outlined));
await tester.pumpAndSettle();
await tester.enterText(inputs.first, Users.user1.name);
await tester.enterText(inputs.last, Users.user1.password);
await tester.testTextInput.receiveAction(TextInputAction.done);
});
});
await tester.waitFor(find.byType(TextField));
await tester.enterText(find.byType(TextField).last, 'Test Space');
await tester.pumpAndSettle();
await tester.testTextInput.receiveAction(TextInputAction.done);
await tester.pumpAndSettle();
await tester.waitFor(find.text('Invite contact'));
await tester.tap(find.text('Invite contact'));
await tester.pumpAndSettle();
await tester.waitFor(
find.descendant(
of: find.byType(InvitationSelectionView),
matching: find.byType(TextField),
),
);
await tester.enterText(
find.descendant(
of: find.byType(InvitationSelectionView),
matching: find.byType(TextField),
),
Users.user2.name,
);
await Future.delayed(const Duration(milliseconds: 250));
await tester.testTextInput.receiveAction(TextInputAction.done);
await Future.delayed(const Duration(milliseconds: 1000));
await tester.pumpAndSettle();
await tester.tap(
find
.descendant(
of: find.descendant(
of: find.byType(InvitationSelectionView),
matching: find.byType(ListTile),
),
matching: find.text(Users.user2.name),
)
.last,
);
await tester.pumpAndSettle();
await tester.waitFor(find.maybeUppercaseText('Yes'));
await tester.tap(find.maybeUppercaseText('Yes'));
await tester.pumpAndSettle();
await tester.tap(find.byTooltip('Back'));
await tester.pumpAndSettle();
await tester.waitFor(find.text('Load 2 more participants'));
await tester.tap(find.text('Load 2 more participants'));
await tester.pumpAndSettle();
expect(find.text(Users.user2.name), findsOneWidget);
});
},
);
}

View File

@ -0,0 +1,171 @@
import 'dart:developer';
import 'package:fluffychat/pages/chat_list/chat_list_body.dart';
import 'package:fluffychat/pages/homeserver_picker/homeserver_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import '../users.dart';
import 'wait_for.dart';
extension DefaultFlowExtensions on WidgetTester {
Future<void> login() async {
final tester = this;
await tester.pumpAndSettle();
await tester.waitFor(find.text('Let\'s start'));
expect(find.text('Let\'s start'), findsOneWidget);
final input = find.byType(TextField);
expect(input, findsOneWidget);
// getting the placeholder in place
await tester.tap(find.byIcon(Icons.search));
await tester.pumpAndSettle();
await tester.enterText(input, homeserver);
await tester.pumpAndSettle();
await tester.testTextInput.receiveAction(TextInputAction.done);
await tester.pumpAndSettle();
// in case registration is allowed
// try {
await Future.delayed(const Duration(milliseconds: 50));
await tester.scrollUntilVisible(
find.text('Login'),
500,
scrollable: find.descendant(
of: find.byKey(const Key('ConnectPageListView')),
matching: find.byType(Scrollable).first,
),
);
await tester.pumpAndSettle();
await tester.tap(find.text('Login'));
await tester.pumpAndSettle();
/*} catch (e) {
log('Registration is not allowed. Proceeding with login...');
}*/
await tester.pumpAndSettle();
await Future.delayed(const Duration(milliseconds: 50));
final inputs = find.byType(TextField);
await tester.enterText(inputs.first, Users.user1.name);
await tester.enterText(inputs.last, Users.user1.password);
await tester.pumpAndSettle();
await tester.testTextInput.receiveAction(TextInputAction.done);
try {
// pumpAndSettle does not work in here as setState is called
// asynchronously
await tester.waitFor(
find.byType(LinearProgressIndicator),
timeout: const Duration(milliseconds: 1500),
skipPumpAndSettle: true,
);
} catch (_) {
// in case the input action does not work on the desired platform
if (find.text('Login').evaluate().isNotEmpty) {
await tester.tap(find.text('Login'));
}
}
try {
await tester.pumpAndSettle();
} catch (_) {
// may fail because of ongoing animation below dialog
}
await tester.waitFor(
find.byType(ChatListViewBody),
skipPumpAndSettle: true,
);
}
/// ensure PushProvider check passes
Future<void> acceptPushWarning() async {
final tester = this;
final matcher = find.maybeUppercaseText('Do not show again');
try {
await tester.waitFor(matcher, timeout: const Duration(seconds: 5));
// the FCM push error dialog to be handled...
await tester.tap(matcher);
await tester.pumpAndSettle();
} catch (_) {}
}
Future<void> ensureLoggedOut() async {
final tester = this;
await tester.pumpAndSettle();
if (find.byType(ChatListViewBody).evaluate().isNotEmpty) {
await tester.tap(find.byTooltip('Show menu'));
await tester.pumpAndSettle();
await tester.tap(find.text('Settings'));
await tester.pumpAndSettle();
await tester.scrollUntilVisible(
find.text('Account'),
500,
scrollable: find.descendant(
of: find.byKey(const Key('SettingsListViewContent')),
matching: find.byType(Scrollable),
),
);
await tester.pumpAndSettle();
await tester.tap(find.text('Logout'));
await tester.pumpAndSettle();
await tester.tap(find.maybeUppercaseText('Yes'));
await tester.pumpAndSettle();
}
}
Future<void> ensureAppStartedHomescreen({
Duration timeout = const Duration(seconds: 20),
}) async {
final tester = this;
await tester.pumpAndSettle();
final homeserverPickerFinder = find.byType(HomeserverPicker);
final chatListFinder = find.byType(ChatListViewBody);
final end = DateTime.now().add(timeout);
log(
'Waiting for HomeserverPicker or ChatListViewBody...',
name: 'Test Runner',
);
do {
if (DateTime.now().isAfter(end)) {
throw Exception(
'Timed out waiting for HomeserverPicker or ChatListViewBody',
);
}
await pumpAndSettle();
await Future.delayed(const Duration(milliseconds: 100));
} while (homeserverPickerFinder.evaluate().isEmpty &&
chatListFinder.evaluate().isEmpty);
if (homeserverPickerFinder.evaluate().isNotEmpty) {
log(
'Found HomeserverPicker, performing login.',
name: 'Test Runner',
);
await tester.login();
} else {
log(
'Found ChatListViewBody, skipping login.',
name: 'Test Runner',
);
}
await tester.acceptPushWarning();
}
}

View File

@ -0,0 +1,49 @@
import 'package:flutter_test/flutter_test.dart';
/// Workaround for https://github.com/flutter/flutter/issues/88765
extension WaitForExtension on WidgetTester {
Future<void> waitFor(
Finder finder, {
Duration timeout = const Duration(seconds: 20),
bool skipPumpAndSettle = false,
}) async {
final end = DateTime.now().add(timeout);
do {
if (DateTime.now().isAfter(end)) {
throw Exception('Timed out waiting for $finder');
}
if (!skipPumpAndSettle) {
await pumpAndSettle();
}
await Future.delayed(const Duration(milliseconds: 100));
} while (finder.evaluate().isEmpty);
}
}
extension MaybeUppercaseFinder on CommonFinders {
/// On Android some button labels are in uppercase while on iOS they
/// are not. This method tries both.
Finder maybeUppercaseText(
String text, {
bool findRichText = false,
bool skipOffstage = true,
}) {
try {
final finder = find.text(
text.toUpperCase(),
findRichText: findRichText,
skipOffstage: skipOffstage,
);
expect(finder, findsOneWidget);
return finder;
} catch (_) {
return find.text(
text,
findRichText: findRichText,
skipOffstage: skipOffstage,
);
}
}
}

View File

@ -1,15 +1,25 @@
import 'dart:io';
abstract class Users {
const Users._();
static final user1 = User(
Platform.environment['USER1_NAME'] ?? 'alice',
Platform.environment['USER1_PW'] ?? 'AliceInWonderland',
static const user1 = User(
String.fromEnvironment(
'USER1_NAME',
defaultValue: 'alice',
),
String.fromEnvironment(
'USER1_PW',
defaultValue: 'AliceInWonderland',
),
);
static final user2 = User(
Platform.environment['USER2_NAME'] ?? 'bob',
Platform.environment['USER2_PW'] ?? 'JoWirSchaffenDas',
static const user2 = User(
String.fromEnvironment(
'USER2_NAME',
defaultValue: 'bob',
),
String.fromEnvironment(
'USER2_PW',
defaultValue: 'JoWirSchaffenDas',
),
);
}
@ -20,5 +30,7 @@ class User {
const User(this.name, this.password);
}
final homeserver =
'http://${Platform.environment['HOMESERVER'] ?? 'localhost'}';
const homeserver = 'http://${const String.fromEnvironment(
'HOMESERVER',
defaultValue: 'localhost',
)}';

View File

@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 51;
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
@ -286,10 +286,12 @@
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
);
name = "Thin Binary";
outputPaths = (
@ -322,6 +324,7 @@
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);

View File

@ -110,5 +110,7 @@
</dict>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict>
</plist>

View File

@ -1,5 +1,5 @@
app_identifier("im.fluffychat.app") # The bundle identifier of your app
apple_id("christian.pauly@wtal.de") # Your Apple email address
apple_id("christian-kussowski@posteo.de") # Your Apple email address
itc_team_id("122628977") # App Store Connect Team ID
team_id("4NXF6Z997G") # Developer Portal Team ID

View File

@ -16,7 +16,7 @@ abstract class AppConfig {
static const double messageFontSize = 15.75;
static const bool allowOtherHomeservers = true;
static const bool enableRegistration = true;
static const Color primaryColor = Color.fromARGB(255, 135, 103, 172);
static const Color primaryColor = Color(0xFF5625BA);
static const Color primaryColorLight = Color(0xFFCCBDEA);
static const Color secondaryColor = Color(0xFF41a2bc);
static String _privacyUrl =
@ -24,6 +24,8 @@ abstract class AppConfig {
static String get privacyUrl => _privacyUrl;
static const String enablePushTutorial =
'https://gitlab.com/famedly/fluffychat/-/wikis/Push-Notifications-without-Google-Services';
static const String encryptionTutorial =
'https://gitlab.com/famedly/fluffychat/-/wikis/How-to-use-end-to-end-encryption-in-FluffyChat';
static const String appId = 'im.fluffychat.FluffyChat';
static const String appOpenUrlScheme = 'im.fluffychat';
static String _webBaseUrl = 'https://fluffychat.im/web';
@ -31,6 +33,11 @@ abstract class AppConfig {
static const String sourceCodeUrl = 'https://gitlab.com/famedly/fluffychat';
static const String supportUrl =
'https://gitlab.com/famedly/fluffychat/issues';
static final Uri newIssueUrl = Uri(
scheme: 'https',
host: 'gitlab.com',
path: '/famedly/fluffychat/-/issues/new',
);
static const bool enableSentry = true;
static const String sentryDns =
'https://8591d0d863b646feb4f3dda7e5dcab38@o256755.ingest.sentry.io/5243143';
@ -68,8 +75,9 @@ abstract class AppConfig {
colorSchemeSeed = Color(json['chat_color']);
} catch (e) {
Logs().w(
'Invalid color in config.json! Please make sure to define the color in this format: "0xffdd0000"',
e);
'Invalid color in config.json! Please make sure to define the color in this format: "0xffdd0000"',
e,
);
}
}
if (json['application_name'] is String) {

View File

@ -9,7 +9,6 @@ import 'package:fluffychat/pages/chat_details/chat_details.dart';
import 'package:fluffychat/pages/chat_encryption_settings/chat_encryption_settings.dart';
import 'package:fluffychat/pages/chat_list/chat_list.dart';
import 'package:fluffychat/pages/chat_permissions_settings/chat_permissions_settings.dart';
import 'package:fluffychat/pages/connect/connect_page.dart';
import 'package:fluffychat/pages/device_settings/device_settings.dart';
import 'package:fluffychat/pages/homeserver_picker/homeserver_picker.dart';
import 'package:fluffychat/pages/invitation_selection/invitation_selection.dart';
@ -19,7 +18,6 @@ import 'package:fluffychat/pages/new_private_chat/new_private_chat.dart';
import 'package:fluffychat/pages/new_space/new_space.dart';
import 'package:fluffychat/pages/settings/settings.dart';
import 'package:fluffychat/pages/settings_3pid/settings_3pid.dart';
import 'package:fluffychat/pages/settings_account/settings_account.dart';
import 'package:fluffychat/pages/settings_chat/settings_chat.dart';
import 'package:fluffychat/pages/settings_emotes/settings_emotes.dart';
import 'package:fluffychat/pages/settings_ignore_list/settings_ignore_list.dart';
@ -28,7 +26,6 @@ import 'package:fluffychat/pages/settings_notifications/settings_notifications.d
import 'package:fluffychat/pages/settings_security/settings_security.dart';
import 'package:fluffychat/pages/settings_stories/settings_stories.dart';
import 'package:fluffychat/pages/settings_style/settings_style.dart';
import 'package:fluffychat/pages/sign_up/signup.dart';
import 'package:fluffychat/pages/story/story_page.dart';
import 'package:fluffychat/widgets/layouts/empty_page.dart';
import 'package:fluffychat/widgets/layouts/loading_view.dart';
@ -71,21 +68,25 @@ class AppRoutes {
widget: const ChatDetails(),
stackedRoutes: _chatDetailsRoutes,
),
VWidget(path: ':roomid', widget: const Chat(), stackedRoutes: [
VWidget(
path: 'encryption',
widget: const ChatEncryptionSettings(),
),
VWidget(
path: 'invite',
widget: const InvitationSelection(),
),
VWidget(
path: 'details',
widget: const ChatDetails(),
stackedRoutes: _chatDetailsRoutes,
),
]),
VWidget(
path: ':roomid',
widget: const ChatPage(),
stackedRoutes: [
VWidget(
path: 'encryption',
widget: const ChatEncryptionSettings(),
),
VWidget(
path: 'invite',
widget: const InvitationSelection(),
),
VWidget(
path: 'details',
widget: const ChatDetails(),
stackedRoutes: _chatDetailsRoutes,
),
],
),
VWidget(
path: '/settings',
widget: const Settings(),
@ -94,6 +95,13 @@ class AppRoutes {
VWidget(
path: '/archive',
widget: const Archive(),
stackedRoutes: [
VWidget(
path: ':roomid',
widget: const ChatPage(),
buildTransition: _dynamicTransition,
),
],
),
VWidget(
path: '/newprivatechat',
@ -164,14 +172,14 @@ class AppRoutes {
VNester(
path: ':roomid',
widgetBuilder: (child) => SideViewLayout(
mainView: const Chat(),
mainView: const ChatPage(),
sideView: child,
),
buildTransition: _fadeTransition,
nestedRoutes: [
VWidget(
path: '',
widget: const Chat(),
widget: const ChatPage(),
buildTransition: _fadeTransition,
),
VWidget(
@ -220,13 +228,25 @@ class AppRoutes {
),
],
),
VWidget(
VNester(
path: '/archive',
widget: const TwoColumnLayout(
mainView: Archive(),
sideView: EmptyPage(),
widgetBuilder: (child) => TwoColumnLayout(
mainView: const Archive(),
sideView: child,
),
buildTransition: _fadeTransition,
nestedRoutes: [
VWidget(
path: '',
widget: const EmptyPage(),
buildTransition: _dynamicTransition,
),
VWidget(
path: ':roomid',
widget: const ChatPage(),
buildTransition: _dynamicTransition,
),
],
),
],
),
@ -244,22 +264,6 @@ class AppRoutes {
widget: const Login(),
buildTransition: _fadeTransition,
),
VWidget(
path: 'connect',
widget: const ConnectPage(),
buildTransition: _fadeTransition,
stackedRoutes: [
VWidget(
path: 'login',
widget: const Login(),
buildTransition: _fadeTransition,
),
VWidget(
path: 'signup',
widget: const SignupPage(),
buildTransition: _fadeTransition,
),
]),
VWidget(
path: 'logs',
widget: const LogViewer(),
@ -326,37 +330,14 @@ class AppRoutes {
],
),
VWidget(
path: 'account',
widget: const SettingsAccount(),
buildTransition: _dynamicTransition,
path: 'addaccount',
widget: const HomeserverPicker(),
buildTransition: _fadeTransition,
stackedRoutes: [
VWidget(
path: 'add',
widget: const HomeserverPicker(),
path: 'login',
widget: const Login(),
buildTransition: _fadeTransition,
stackedRoutes: [
VWidget(
path: 'login',
widget: const Login(),
buildTransition: _fadeTransition,
),
VWidget(
path: 'connect',
widget: const ConnectPage(),
buildTransition: _fadeTransition,
stackedRoutes: [
VWidget(
path: 'login',
widget: const Login(),
buildTransition: _fadeTransition,
),
VWidget(
path: 'signup',
widget: const SignupPage(),
buildTransition: _fadeTransition,
),
]),
],
),
],
),

View File

@ -8,7 +8,6 @@ abstract class SettingKeys {
static const String showDirectChatsInSpaces =
'chat.fluffy.showDirectChatsInSpaces';
static const String separateChatTypes = 'chat.fluffy.separateChatTypes';
static const String chatColor = 'chat.fluffy.chat_color';
static const String sentry = 'sentry';
static const String theme = 'theme';
static const String amoledEnabled = 'amoled_enabled';

View File

@ -9,7 +9,10 @@ import 'app_config.dart';
abstract class FluffyThemes {
static const double columnWidth = 360.0;
static bool isColumnModeByWidth(double width) => width > columnWidth * 2 + 64;
static const double navRailWidth = 64.0;
static bool isColumnModeByWidth(double width) =>
width > columnWidth * 2 + navRailWidth;
static bool isColumnMode(BuildContext context) =>
isColumnModeByWidth(MediaQuery.of(context).size.width);
@ -23,31 +26,47 @@ abstract class FluffyThemes {
);
static var fallbackTextTheme = const TextTheme(
bodyText1: fallbackTextStyle,
bodyText2: fallbackTextStyle,
button: fallbackTextStyle,
caption: fallbackTextStyle,
overline: fallbackTextStyle,
headline1: fallbackTextStyle,
headline2: fallbackTextStyle,
headline3: fallbackTextStyle,
headline4: fallbackTextStyle,
headline5: fallbackTextStyle,
headline6: fallbackTextStyle,
subtitle1: fallbackTextStyle,
subtitle2: fallbackTextStyle,
bodyLarge: fallbackTextStyle,
bodyMedium: fallbackTextStyle,
labelLarge: fallbackTextStyle,
bodySmall: fallbackTextStyle,
labelSmall: fallbackTextStyle,
displayLarge: fallbackTextStyle,
displayMedium: fallbackTextStyle,
displaySmall: fallbackTextStyle,
headlineMedium: fallbackTextStyle,
headlineSmall: fallbackTextStyle,
titleLarge: fallbackTextStyle,
titleMedium: fallbackTextStyle,
titleSmall: fallbackTextStyle,
);
static ThemeData buildTheme(Brightness brightness,
[ColorScheme? colorScheme]) =>
static LinearGradient backgroundGradient(
BuildContext context,
int alpha,
) {
final colorScheme = Theme.of(context).colorScheme;
return LinearGradient(
begin: Alignment.topCenter,
colors: [
colorScheme.primaryContainer.withAlpha(alpha),
colorScheme.secondaryContainer.withAlpha(alpha),
colorScheme.tertiaryContainer.withAlpha(alpha),
colorScheme.primaryContainer.withAlpha(alpha),
],
);
}
static const Duration animationDuration = Duration(milliseconds: 250);
static const Curve animationCurve = Curves.easeInOut;
static ThemeData buildTheme(Brightness brightness, [Color? seed]) =>
ThemeData(
visualDensity: VisualDensity.standard,
useMaterial3: true,
brightness: brightness,
colorSchemeSeed: AppConfig.colorSchemeSeed ??
colorScheme?.primary ??
AppConfig.chatColor,
textTheme: PlatformInfos.isDesktop
colorSchemeSeed: seed ?? AppConfig.colorSchemeSeed,
textTheme: PlatformInfos.isDesktop || PlatformInfos.isWeb
? brightness == Brightness.light
? Typography.material2018().black.merge(fallbackTextTheme)
: Typography.material2018().white.merge(fallbackTextTheme)
@ -58,8 +77,16 @@ abstract class FluffyThemes {
dividerColor: brightness == Brightness.light
? Colors.blueGrey.shade50
: Colors.blueGrey.shade900,
inputDecorationTheme: const InputDecorationTheme(
border: InputBorder.none,
popupMenuTheme: PopupMenuThemeData(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppConfig.borderRadius),
),
),
inputDecorationTheme: InputDecorationTheme(
border: UnderlineInputBorder(
borderSide: BorderSide.none,
borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2),
),
filled: true,
),
appBarTheme: AppBarTheme(
@ -72,10 +99,32 @@ abstract class FluffyThemes {
statusBarBrightness: brightness,
),
),
textButtonTheme: TextButtonThemeData(
style: TextButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2),
),
),
),
outlinedButtonTheme: OutlinedButtonThemeData(
style: OutlinedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2),
),
),
),
dialogTheme: DialogTheme(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2),
),
),
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
padding: const EdgeInsets.all(16),
textStyle: const TextStyle(fontSize: 16),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppConfig.borderRadius),
),
),
),
);

View File

@ -3,7 +3,8 @@ import 'dart:math';
import 'package:flutter/material.dart';
import 'package:file_picker_cross/file_picker_cross.dart';
import 'package:collection/collection.dart';
import 'package:file_picker/file_picker.dart';
import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:image_picker/image_picker.dart';
import 'package:matrix/matrix.dart';
@ -12,12 +13,12 @@ import 'package:vrouter/vrouter.dart';
import 'package:fluffychat/pages/add_story/add_story_view.dart';
import 'package:fluffychat/pages/add_story/invite_story_page.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions.dart/matrix_file_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart';
import 'package:fluffychat/utils/resize_image.dart';
import 'package:fluffychat/utils/story_theme_data.dart';
import 'package:fluffychat/utils/string_color.dart';
import 'package:fluffychat/widgets/matrix.dart';
import '../../utils/matrix_sdk_extensions.dart/client_stories_extension.dart';
import '../../utils/matrix_sdk_extensions/client_stories_extension.dart';
class AddStoryPage extends StatefulWidget {
const AddStoryPage({Key? key}) : super(key: key);
@ -68,14 +69,15 @@ class AddStoryController extends State<AddStoryPage> {
}
void importMedia() async {
final picked = await FilePickerCross.importFromStorage(
type: FileTypeCross.image,
final picked = await FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
);
final fileName = picked.fileName;
if (fileName == null) return;
final file = picked?.files.firstOrNull;
if (file == null) return;
final matrixFile = MatrixImageFile(
bytes: picked.toUint8List(),
name: fileName,
bytes: file.bytes!,
name: file.name,
);
setState(() {
image = matrixFile;
@ -88,14 +90,15 @@ class AddStoryController extends State<AddStoryPage> {
);
if (picked == null) return;
final matrixFile = await showFutureLoadingDialog(
context: context,
future: () async {
final bytes = await picked.readAsBytes();
return MatrixImageFile(
bytes: bytes,
name: picked.name,
);
});
context: context,
future: () async {
final bytes = await picked.readAsBytes();
return MatrixImageFile(
bytes: bytes,
name: picked.name,
);
},
);
setState(() {
image = matrixFile.result;

View File

@ -6,7 +6,7 @@ import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:matrix/matrix.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions.dart/client_stories_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/client_stories_extension.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/matrix.dart';
@ -92,34 +92,39 @@ class InviteStoryPageState extends State<InviteStoryPage> {
const Divider(height: 1),
Expanded(
child: FutureBuilder<List<User>>(
future: loadContacts,
builder: (context, snapshot) {
final contacts = snapshot.data;
if (contacts == null) {
final error = snapshot.error;
if (error != null) {
return Center(
child: Text(error.toLocalizedString(context)));
}
return const Center(
child: CircularProgressIndicator.adaptive());
future: loadContacts,
builder: (context, snapshot) {
final contacts = snapshot.data;
if (contacts == null) {
final error = snapshot.error;
if (error != null) {
return Center(
child: Text(error.toLocalizedString(context)),
);
}
_undecided = contacts.map((u) => u.id).toSet();
return ListView.builder(
itemCount: contacts.length,
itemBuilder: (context, i) => SwitchListTile.adaptive(
value: _invite.contains(contacts[i].id),
onChanged: (b) => setState(() => b
? _invite.add(contacts[i].id)
: _invite.remove(contacts[i].id)),
secondary: Avatar(
mxContent: contacts[i].avatarUrl,
name: contacts[i].calcDisplayname(),
),
title: Text(contacts[i].calcDisplayname()),
),
return const Center(
child: CircularProgressIndicator.adaptive(),
);
}),
}
_undecided = contacts.map((u) => u.id).toSet();
return ListView.builder(
itemCount: contacts.length,
itemBuilder: (context, i) => SwitchListTile.adaptive(
value: _invite.contains(contacts[i].id),
onChanged: (b) => setState(
() => b
? _invite.add(contacts[i].id)
: _invite.remove(contacts[i].id),
),
secondary: Avatar(
mxContent: contacts[i].avatarUrl,
name: contacts[i].calcDisplayname(),
),
title: Text(contacts[i].calcDisplayname()),
),
);
},
),
),
],
),

View File

@ -21,11 +21,9 @@ class ArchiveController extends State<Archive> {
Future<List<Room>> getArchive(BuildContext context) async {
final archive = this.archive;
if (archive != null) return archive;
return await Matrix.of(context).client.loadArchive();
return this.archive = await Matrix.of(context).client.loadArchive();
}
void forgetAction(int i) => setState(() => archive?.removeAt(i));
void forgetAllAction() async {
final archive = this.archive;
if (archive == null) return;
@ -44,7 +42,7 @@ class ArchiveController extends State<Archive> {
context: context,
future: () async {
while (archive.isNotEmpty) {
Logs().v('Forget room ${archive.last.displayname}');
Logs().v('Forget room ${archive.last.getLocalizedDisplayname()}');
await archive.last.forget();
archive.removeLast();
}

View File

@ -21,10 +21,14 @@ class ArchiveView extends StatelessWidget {
leading: const BackButton(),
title: Text(L10n.of(context)!.archive),
actions: [
if (snapshot.hasData && archive != null && archive!.isNotEmpty)
TextButton(
onPressed: controller.forgetAllAction,
child: Text(L10n.of(context)!.clearArchive),
if (snapshot.data?.isNotEmpty ?? false)
Padding(
padding: const EdgeInsets.all(8.0),
child: TextButton.icon(
onPressed: controller.forgetAllAction,
label: Text(L10n.of(context)!.clearArchive),
icon: const Icon(Icons.cleaning_services_outlined),
),
)
],
),
@ -32,25 +36,27 @@ class ArchiveView extends StatelessWidget {
builder: (BuildContext context) {
if (snapshot.hasError) {
return Center(
child: Text(
L10n.of(context)!.oopsSomethingWentWrong,
textAlign: TextAlign.center,
));
child: Text(
L10n.of(context)!.oopsSomethingWentWrong,
textAlign: TextAlign.center,
),
);
}
if (!snapshot.hasData) {
return const Center(
child: CircularProgressIndicator.adaptive(strokeWidth: 2));
child: CircularProgressIndicator.adaptive(strokeWidth: 2),
);
} else {
archive = snapshot.data;
if (archive == null || archive!.isEmpty) {
return const Center(
child: Icon(Icons.archive_outlined, size: 80));
child: Icon(Icons.archive_outlined, size: 80),
);
}
return ListView.builder(
itemCount: archive!.length,
itemBuilder: (BuildContext context, int i) => ChatListItem(
archive![i],
onForget: controller.forgetAction,
),
);
}

View File

@ -125,9 +125,12 @@ class BootstrapDialogState extends State<BootstrapDialog> {
children: [
ListTile(
contentPadding: const EdgeInsets.symmetric(horizontal: 8.0),
trailing: Icon(
Icons.info_outlined,
color: Theme.of(context).colorScheme.primary,
trailing: CircleAvatar(
backgroundColor: Colors.transparent,
child: Icon(
Icons.info_outlined,
color: Theme.of(context).colorScheme.primary,
),
),
subtitle: Text(L10n.of(context)!.chatBackupDescription),
),
@ -136,10 +139,15 @@ class BootstrapDialogState extends State<BootstrapDialog> {
thickness: 1,
),
TextField(
minLines: 4,
minLines: 2,
maxLines: 4,
readOnly: true,
style: const TextStyle(fontFamily: 'RobotoMono'),
controller: TextEditingController(text: key),
decoration: const InputDecoration(
contentPadding: EdgeInsets.all(16),
suffixIcon: Icon(Icons.key_outlined),
),
),
const SizedBox(height: 16),
if (_supportsSecureStorage)
@ -233,12 +241,13 @@ class BootstrapDialogState extends State<BootstrapDialog> {
icon: const Icon(Icons.close),
onPressed: Navigator.of(context).pop,
),
title: Text(L10n.of(context)!.unlockOldMessages),
title: Text(L10n.of(context)!.chatBackup),
),
body: Center(
child: ConstrainedBox(
constraints: const BoxConstraints(
maxWidth: FluffyThemes.columnWidth * 1.5),
maxWidth: FluffyThemes.columnWidth * 1.5,
),
child: ListView(
padding: const EdgeInsets.all(16.0),
children: [
@ -250,74 +259,85 @@ class BootstrapDialogState extends State<BootstrapDialog> {
color: Theme.of(context).colorScheme.primary,
),
subtitle: Text(
L10n.of(context)!.pleaseEnterRecoveryKeyDescription),
L10n.of(context)!.pleaseEnterRecoveryKeyDescription,
),
),
const Divider(height: 32),
TextField(
minLines: 1,
maxLines: 1,
maxLines: 2,
autocorrect: false,
readOnly: _recoveryKeyInputLoading,
autofillHints: _recoveryKeyInputLoading
? null
: [AutofillHints.password],
controller: _recoveryKeyTextEditingController,
style: const TextStyle(fontFamily: 'RobotoMono'),
decoration: InputDecoration(
hintText: 'Abc123 Def456',
labelText: L10n.of(context)!.recoveryKey,
contentPadding: const EdgeInsets.all(16),
hintStyle: TextStyle(
fontFamily:
Theme.of(context).textTheme.bodyLarge?.fontFamily,
),
hintText: L10n.of(context)!.recoveryKey,
errorText: _recoveryKeyInputError,
),
),
const SizedBox(height: 16),
ElevatedButton.icon(
style: ElevatedButton.styleFrom(
foregroundColor:
Theme.of(context).colorScheme.onPrimary,
backgroundColor: Theme.of(context).primaryColor,
),
icon: _recoveryKeyInputLoading
? const CircularProgressIndicator.adaptive()
: const Icon(Icons.lock_open_outlined),
label: Text(L10n.of(context)!.unlockOldMessages),
onPressed: _recoveryKeyInputLoading
? null
: () async {
setState(() {
_recoveryKeyInputError = null;
_recoveryKeyInputLoading = true;
});
try {
final key =
_recoveryKeyTextEditingController.text;
await bootstrap.newSsssKey!.unlock(
keyOrPassphrase: key,
);
Logs().d('SSSS unlocked');
await bootstrap
.client.encryption!.crossSigning
.selfSign(
keyOrPassphrase: key,
);
Logs().d('Successful elfsigned');
await bootstrap.openExistingSsss();
} catch (e, s) {
Logs().w('Unable to unlock SSSS', e, s);
setState(() => _recoveryKeyInputError =
L10n.of(context)!.oopsSomethingWentWrong);
} finally {
setState(
() => _recoveryKeyInputLoading = false);
}
}),
const SizedBox(height: 16),
Row(children: [
const Expanded(child: Divider()),
Padding(
padding: const EdgeInsets.all(12.0),
child: Text(L10n.of(context)!.or),
style: ElevatedButton.styleFrom(
foregroundColor:
Theme.of(context).colorScheme.onPrimary,
backgroundColor: Theme.of(context).primaryColor,
),
const Expanded(child: Divider()),
]),
icon: _recoveryKeyInputLoading
? const CircularProgressIndicator.adaptive()
: const Icon(Icons.lock_open_outlined),
label: Text(L10n.of(context)!.unlockOldMessages),
onPressed: _recoveryKeyInputLoading
? null
: () async {
setState(() {
_recoveryKeyInputError = null;
_recoveryKeyInputLoading = true;
});
try {
final key =
_recoveryKeyTextEditingController.text;
await bootstrap.newSsssKey!.unlock(
keyOrPassphrase: key,
);
Logs().d('SSSS unlocked');
await bootstrap.client.encryption!.crossSigning
.selfSign(
keyOrPassphrase: key,
);
Logs().d('Successful elfsigned');
await bootstrap.openExistingSsss();
} catch (e, s) {
Logs().w('Unable to unlock SSSS', e, s);
setState(
() => _recoveryKeyInputError =
L10n.of(context)!.oopsSomethingWentWrong,
);
} finally {
setState(
() => _recoveryKeyInputLoading = false,
);
}
},
),
const SizedBox(height: 16),
Row(
children: [
const Expanded(child: Divider()),
Padding(
padding: const EdgeInsets.all(12.0),
child: Text(L10n.of(context)!.or),
),
const Expanded(child: Divider()),
],
),
const SizedBox(height: 16),
ElevatedButton.icon(
icon: const Icon(Icons.cast_connected_outlined),
@ -394,11 +414,13 @@ class BootstrapDialogState extends State<BootstrapDialog> {
case BootstrapState.error:
titleText = L10n.of(context)!.oopsSomethingWentWrong;
body = const Icon(Icons.error_outline, color: Colors.red, size: 40);
buttons.add(AdaptiveFlatButton(
label: L10n.of(context)!.close,
onPressed: () =>
Navigator.of(context, rootNavigator: false).pop<bool>(false),
));
buttons.add(
AdaptiveFlatButton(
label: L10n.of(context)!.close,
onPressed: () =>
Navigator.of(context, rootNavigator: false).pop<bool>(false),
),
);
break;
case BootstrapState.done:
titleText = L10n.of(context)!.everythingReady;
@ -409,11 +431,13 @@ class BootstrapDialogState extends State<BootstrapDialog> {
Text(L10n.of(context)!.yourChatBackupHasBeenSetUp),
],
);
buttons.add(AdaptiveFlatButton(
label: L10n.of(context)!.close,
onPressed: () =>
Navigator.of(context, rootNavigator: false).pop<bool>(false),
));
buttons.add(
AdaptiveFlatButton(
label: L10n.of(context)!.close,
onPressed: () =>
Navigator.of(context, rootNavigator: false).pop<bool>(false),
),
);
break;
}
}

View File

@ -75,7 +75,8 @@ class AddWidgetTileState extends State<AddWidgetTile> {
Navigator.of(context).pop();
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(L10n.of(context)!.errorAddingWidget)));
SnackBar(content: Text(L10n.of(context)!.errorAddingWidget)),
);
}
}

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