From 3b204373e930a27a462e03c5982498416089e8e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Fri, 13 Mar 2026 12:30:41 +0100 Subject: [PATCH 1/4] chore: Make banner light red --- lib/pages/chat_list/chat_list.dart | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 207050277..5b11ab6dc 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -408,10 +408,13 @@ class ChatListController extends State if (DateTime.now().difference(lastSeenSupportBanner) >= Duration(days: 6 * 7)) { + final theme = Theme.of(context); final messenger = ScaffoldMessenger.of(context); messenger.showMaterialBanner( MaterialBanner( + backgroundColor: theme.colorScheme.errorContainer, leading: CloseButton( + color: theme.colorScheme.onErrorContainer, onPressed: () async { final okCancelResult = await showOkCancelAlertDialog( context: context, @@ -436,7 +439,10 @@ class ChatListController extends State ), content: Padding( padding: const EdgeInsets.symmetric(vertical: 8.0), - child: Text(L10n.of(context).fluffyChatSupportBannerMessage), + child: Text( + L10n.of(context).fluffyChatSupportBannerMessage, + style: TextStyle(color: theme.colorScheme.onErrorContainer), + ), ), actions: [ TextButton( @@ -446,7 +452,10 @@ class ChatListController extends State 'https://fluffychat.im/faq/#how_can_i_support_fluffychat', ); }, - child: Text(L10n.of(context).support), + child: Text( + L10n.of(context).support, + style: TextStyle(color: theme.colorScheme.onErrorContainer), + ), ), ], ), From 06827038d8a74a6bebdc1fa095e3f9a4d94d89fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Fri, 13 Mar 2026 12:31:06 +0100 Subject: [PATCH 2/4] chore: Introduce tool versions file --- .github/workflows/integrate.yaml | 12 ++++++------ .github/workflows/main_deploy.yaml | 4 ++-- .github/workflows/release.yaml | 8 ++++---- .tool_versions.yaml | 2 ++ pubspec.lock | 2 +- pubspec.yaml | 1 - 6 files changed, 15 insertions(+), 14 deletions(-) create mode 100644 .tool_versions.yaml diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index fb84067dd..d528928db 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -14,7 +14,7 @@ jobs: - run: git diff --exit-code - uses: subosito/flutter-action@v2 with: - flutter-version-file: pubspec.yaml + flutter-version-file: .tool_versions.yaml cache: true - name: Check for unused translations run: flutter pub run translations_cleaner list-unused-terms -a @@ -52,7 +52,7 @@ jobs: - uses: ./.github/actions/free_up_space - uses: subosito/flutter-action@v2 with: - flutter-version-file: pubspec.yaml + flutter-version-file: .tool_versions.yaml cache: true - uses: moonrepo/setup-rust@v1 with: @@ -80,7 +80,7 @@ jobs: - uses: actions/checkout@v6 - uses: subosito/flutter-action@v2 with: - flutter-version-file: pubspec.yaml + flutter-version-file: .tool_versions.yaml cache: true - uses: moonrepo/setup-rust@v1 - run: rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu @@ -104,7 +104,7 @@ jobs: - uses: actions/checkout@v6 - name: Install dependencies run: sudo apt-get update && sudo apt-get install git wget curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libwebkit2gtk-4.1-dev -y - - run: echo "FLUTTER_VERSION=$(yq '.environment.flutter' < pubspec.yaml)" >> $GITHUB_ENV + - run: echo "FLUTTER_VERSION=$(yq '.environment.flutter' < .tool_versions.yaml)" >> $GITHUB_ENV - name: Install Flutter run: | git clone --branch ${{ env.FLUTTER_VERSION }} https://github.com/flutter/flutter.git @@ -120,7 +120,7 @@ jobs: - uses: actions/checkout@v6 - uses: subosito/flutter-action@v2 with: - flutter-version-file: pubspec.yaml + flutter-version-file: .tool_versions.yaml cache: true - name: Use Xcode 16.4 run: sudo xcode-select --switch /Applications/Xcode_16.4.app @@ -194,7 +194,7 @@ jobs: echo "Generated AVD snapshot for caching." - uses: subosito/flutter-action@v2 with: - flutter-version-file: pubspec.yaml + flutter-version-file: .tool_versions.yaml cache: true - uses: remarkablemark/setup-maestro-cli@v1 - name: Load integration test env diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index d01adfc8b..a6ccda28d 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@v6 - uses: subosito/flutter-action@v2 with: - flutter-version-file: pubspec.yaml + flutter-version-file: .tool_versions.yaml - uses: moonrepo/setup-rust@v1 - run: rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu - name: Prepare web @@ -41,7 +41,7 @@ jobs: - uses: actions/checkout@v6 - uses: subosito/flutter-action@v2 with: - flutter-version-file: pubspec.yaml + flutter-version-file: .tool_versions.yaml cache: true - name: Set up Ruby uses: ruby/setup-ruby@v1 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 82c421d69..5170c0d04 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,7 +20,7 @@ jobs: - uses: actions/checkout@v6 - uses: subosito/flutter-action@v2 with: - flutter-version-file: pubspec.yaml + flutter-version-file: .tool_versions.yaml cache: true - uses: moonrepo/setup-rust@v1 - run: rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu @@ -80,7 +80,7 @@ jobs: - uses: actions/checkout@v6 - uses: subosito/flutter-action@v2 with: - flutter-version-file: pubspec.yaml + flutter-version-file: .tool_versions.yaml cache: true - name: Add Firebase Messaging run: | @@ -115,7 +115,7 @@ jobs: - uses: actions/checkout@v6 - name: Install dependencies run: sudo apt-get update && sudo apt-get install curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libwebkit2gtk-4.1-dev -y - - run: echo "FLUTTER_VERSION=$(yq '.environment.flutter' < pubspec.yaml)" >> $GITHUB_ENV + - run: echo "FLUTTER_VERSION=$(yq '.environment.flutter' < .tool_versions.yaml)" >> $GITHUB_ENV - name: Install Flutter run: | git clone --branch ${{ env.FLUTTER_VERSION }} https://github.com/flutter/flutter.git @@ -141,7 +141,7 @@ jobs: - uses: actions/checkout@v6 - uses: subosito/flutter-action@v2 with: - flutter-version-file: pubspec.yaml + flutter-version-file: .tool_versions.yaml cache: true - name: Set up Ruby uses: ruby/setup-ruby@v1 diff --git a/.tool_versions.yaml b/.tool_versions.yaml new file mode 100644 index 000000000..65c367461 --- /dev/null +++ b/.tool_versions.yaml @@ -0,0 +1,2 @@ +environment: + flutter: 3.41.4 \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index ad35a381c..ea5bca89e 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -2268,4 +2268,4 @@ packages: version: "3.1.3" sdks: dart: ">=3.11.1 <4.0.0" - flutter: "3.41.4" + flutter: ">=3.38.4" diff --git a/pubspec.yaml b/pubspec.yaml index 543a90978..8318eb408 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -8,7 +8,6 @@ version: 2.4.0+3546 environment: sdk: ">=3.11.1 <4.0.0" - flutter: "3.41.4" dependencies: archive: ^4.0.7 From de96b27e292b0feb5aa2e1af05d05ae058c13681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Fri, 13 Mar 2026 16:14:39 +0100 Subject: [PATCH 3/4] build: Update matrix dart sdk to 6.2.0 --- pubspec.lock | 4 ++-- pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index ea5bca89e..5e86af6cc 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1080,10 +1080,10 @@ packages: dependency: "direct main" description: name: matrix - sha256: c0214ee99a73957d3c02d54a60afcf9acee577b0924749085d6fdf556e8eba42 + sha256: "5bb38e98212bc4c3244c762a1af787f7239a38d2cfdf44488258283ff899f77c" url: "https://pub.dev" source: hosted - version: "6.1.1" + version: "6.2.0" meta: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 8318eb408..f62b73730 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -51,7 +51,7 @@ dependencies: just_audio: ^0.10.5 latlong2: ^0.9.1 linkify: ^5.0.0 - matrix: ^6.1.1 + matrix: ^6.2.0 mime: ^2.0.0 native_imaging: ^0.4.0 opus_caf_converter_dart: ^1.0.1 From f961b2243576d8e3d2bf942ea51f240e8d6e52f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Fri, 13 Mar 2026 16:20:07 +0100 Subject: [PATCH 4/4] feat: Implement low priority for rooms --- lib/l10n/intl_en.arb | 4 +++- lib/pages/chat_list/chat_list.dart | 26 +++++++++++++++++++++++++ lib/pages/chat_list/chat_list_item.dart | 11 +++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index ce95fcd55..1ce086ee1 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -2787,5 +2787,7 @@ "fluffyChatSupportBannerMessage": "FluffyChat needs YOUR help!\n❤️❤️❤️\nFluffyChat will always be free, but development and hosting still cost money.\nThe future of the project depends on support from people like you.", "skipSupportingFluffyChat": "Skip supporting FluffyChat", "iDoNotWantToSupport": "I do not want to support", - "iAlreadySupportFluffyChat": "I already support FluffyChat" + "iAlreadySupportFluffyChat": "I already support FluffyChat", + "setLowPriority": "Set low priority", + "unsetLowPriority": "Unset low priority" } diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 5b11ab6dc..317a15aaa 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -595,6 +595,25 @@ class ChatListController extends State ], ), ), + PopupMenuItem( + value: ChatContextAction.lowPriority, + child: Row( + mainAxisSize: .min, + children: [ + Icon( + room.isLowPriority + ? Icons.low_priority + : Icons.low_priority_outlined, + ), + const SizedBox(width: 12), + Text( + room.isLowPriority + ? L10n.of(context).unsetLowPriority + : L10n.of(context).setLowPriority, + ), + ], + ), + ), if (spacesWithPowerLevels.isNotEmpty) PopupMenuItem( value: ChatContextAction.addToSpace, @@ -728,6 +747,12 @@ class ChatListController extends State context: context, future: () => space.setSpaceChild(room.id), ); + case ChatContextAction.lowPriority: + await showFutureLoadingDialog( + context: context, + future: () => room.setLowPriority(!room.isLowPriority), + ); + return; } } @@ -937,6 +962,7 @@ enum ChatContextAction { open, goToSpace, favorite, + lowPriority, markUnread, mute, leave, diff --git a/lib/pages/chat_list/chat_list_item.dart b/lib/pages/chat_list/chat_list_item.dart index b30828127..abe0cb87c 100644 --- a/lib/pages/chat_list/chat_list_item.dart +++ b/lib/pages/chat_list/chat_list_item.dart @@ -191,6 +191,17 @@ class ChatListItem extends StatelessWidget { padding: EdgeInsets.only(left: 4.0), child: Icon(Icons.notifications_off_outlined, size: 16), ), + if (room.isLowPriority) + Padding( + padding: EdgeInsets.only( + right: hasNotifications ? 4.0 : 0.0, + ), + child: Icon( + Icons.low_priority, + size: 16, + color: theme.colorScheme.primary, + ), + ), if (room.isFavourite) Padding( padding: EdgeInsets.only(