From a8bcf12763b2e91389580542176647c76023d981 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Fri, 21 Nov 2025 09:13:07 +0100 Subject: [PATCH 1/6] chore: Replace copy action with pin event action in UI --- lib/pages/chat/chat_view.dart | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index e61cb29d1..60f9d4a05 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -52,12 +52,11 @@ class ChatView extends StatelessWidget { onPressed: () => controller .enterThread(controller.selectedEvents.single.eventId), ), - if (controller.canPinSelectedEvents) - IconButton( - icon: const Icon(Icons.push_pin_outlined), - onPressed: controller.pinEvent, - tooltip: L10n.of(context).pinMessage, - ), + IconButton( + icon: const Icon(Icons.copy_outlined), + tooltip: L10n.of(context).copyToClipboard, + onPressed: controller.copyEventsAction, + ), if (controller.canRedactSelectedEvents) IconButton( icon: const Icon(Icons.delete_outlined), @@ -79,18 +78,19 @@ class ChatView extends StatelessWidget { } }, itemBuilder: (context) => [ - PopupMenuItem( - onTap: controller.copyEventsAction, - value: null, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - const Icon(Icons.copy_outlined), - const SizedBox(width: 12), - Text(L10n.of(context).copy), - ], + if (controller.canPinSelectedEvents) + PopupMenuItem( + onTap: controller.pinEvent, + value: null, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.push_pin_outlined), + const SizedBox(width: 12), + Text(L10n.of(context).pinMessage), + ], + ), ), - ), if (controller.canSaveSelectedEvent) PopupMenuItem( onTap: () => controller.saveSelectedEvent(context), From 205eb1bbc949c8a98d52bb8e7a0d8431b53e030e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Fri, 21 Nov 2025 09:14:29 +0100 Subject: [PATCH 2/6] chore: Allow export of readonly sticker packs --- lib/pages/settings_emotes/settings_emotes_view.dart | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/pages/settings_emotes/settings_emotes_view.dart b/lib/pages/settings_emotes/settings_emotes_view.dart index d2f1b47ba..9bbe409d7 100644 --- a/lib/pages/settings_emotes/settings_emotes_view.dart +++ b/lib/pages/settings_emotes/settings_emotes_view.dart @@ -71,12 +71,12 @@ class EmotesSettingsView extends StatelessWidget { break; } }, - enabled: !controller.readonly, itemBuilder: (context) => [ - PopupMenuItem( - value: PopupMenuEmojiActions.import, - child: Text(L10n.of(context).importFromZipFile), - ), + if (!controller.readonly) + PopupMenuItem( + value: PopupMenuEmojiActions.import, + child: Text(L10n.of(context).importFromZipFile), + ), if (imageKeys.isNotEmpty) PopupMenuItem( value: PopupMenuEmojiActions.export, From 7efc426c889e419262ba7f244451dc845c2c538b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Fri, 21 Nov 2025 09:17:59 +0100 Subject: [PATCH 3/6] chore: Make attribution url field clickable --- lib/pages/settings_emotes/settings_emotes_view.dart | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/pages/settings_emotes/settings_emotes_view.dart b/lib/pages/settings_emotes/settings_emotes_view.dart index 9bbe409d7..92a8b25c4 100644 --- a/lib/pages/settings_emotes/settings_emotes_view.dart +++ b/lib/pages/settings_emotes/settings_emotes_view.dart @@ -5,6 +5,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; import 'package:fluffychat/widgets/mxc_image_viewer.dart'; @@ -38,6 +39,9 @@ class EmotesSettingsView extends StatelessWidget { if (packKeys != null && packKeys.isEmpty) { packKeys.add(''); } + final attributionUrl = Uri.tryParse( + controller.packAttributionController.text, + ); return Scaffold( appBar: AppBar( @@ -175,10 +179,19 @@ class EmotesSettingsView extends StatelessWidget { maxLength: 256, controller: controller.packAttributionController, readOnly: controller.readonly, + keyboardType: TextInputType.url, onSubmitted: (_) => controller.submitAttributionAction(), decoration: InputDecoration( counter: const SizedBox.shrink(), labelText: L10n.of(context).attribution, + suffixIcon: attributionUrl == null + ? null + : IconButton( + icon: const Icon(Icons.link_outlined), + onPressed: () => + UrlLauncher(context, attributionUrl.toString()) + .launchUrl(), + ), ), ), ), From 32213e1c092aac023f857206b8fb2fa291fbbad4 Mon Sep 17 00:00:00 2001 From: BeMeritus Date: Thu, 20 Nov 2025 07:52:07 +0100 Subject: [PATCH 4/6] chore(translations): Translated using Weblate (Uzbek) Currently translated at 100.0% (811 of 811 strings) Translation: FluffyChat/Translations Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uz/ --- lib/l10n/intl_uz.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/intl_uz.arb b/lib/l10n/intl_uz.arb index 7737b4667..005da1acf 100644 --- a/lib/l10n/intl_uz.arb +++ b/lib/l10n/intl_uz.arb @@ -2168,7 +2168,7 @@ "type": "String", "placeholders": {} }, - "unknownEvent": "Noma’lum shifrlash algoritmi", + "unknownEvent": "Noma’lum hodisa ’{type}’", "@unknownEvent": { "type": "String", "placeholders": { From 5815dbde17cfa75b7c3516eb82602ad3dff8dc08 Mon Sep 17 00:00:00 2001 From: Maftuna Vohidjonovna Date: Thu, 20 Nov 2025 11:37:58 +0100 Subject: [PATCH 5/6] chore(translations): Translated using Weblate (Uzbek) Currently translated at 100.0% (811 of 811 strings) Translation: FluffyChat/Translations Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/uz/ --- lib/l10n/intl_uz.arb | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/l10n/intl_uz.arb b/lib/l10n/intl_uz.arb index 005da1acf..eacb617ec 100644 --- a/lib/l10n/intl_uz.arb +++ b/lib/l10n/intl_uz.arb @@ -2168,7 +2168,7 @@ "type": "String", "placeholders": {} }, - "unknownEvent": "Noma’lum hodisa ’{type}’", + "unknownEvent": "Noma’lum hodisa '{type}'", "@unknownEvent": { "type": "String", "placeholders": { @@ -2604,7 +2604,7 @@ "@shareKeysWithDescription": {}, "enterNewChat": "Yangi suhbatga kirish", "@enterNewChat": {}, - "removeFromSpaceDescription": "Chat maydondan olib tashlanadi, lekin hali ham chatlar ro‘yxatida chiqadi.", + "removeFromSpaceDescription": "Suhbat maydondan olib tashlanadi, lekin hali ham suhbatlarlar ro‘yxatida chiqadi.", "@removeFromSpaceDescription": {}, "countChats": "{chats} suhbatlar", "@countChats": { @@ -3467,5 +3467,12 @@ "yourGlobalUserIdIs": "Global foydalanuvchi ID raqamingiz: ", "@yourGlobalUserIdIs": {}, "notificationRuleTombstone": "Qabrtosh", - "@notificationRuleTombstone": {} + "@notificationRuleTombstone": {}, + "identity": "Shaxs", + "@identity": { + "type": "String", + "placeholders": {} + }, + "emojis": "Emojilar", + "@emojis": {} } From 5baa6fce86db2c2decd387db6879cf38f0c05fc7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Nov 2025 21:10:38 +0000 Subject: [PATCH 6/6] build: (deps): bump file_selector from 1.0.4 to 1.1.0 Bumps [file_selector](https://github.com/flutter/packages/tree/main/packages/file_selector) from 1.0.4 to 1.1.0. - [Commits](https://github.com/flutter/packages/commits/file_selector-v1.1.0/packages/file_selector) --- updated-dependencies: - dependency-name: file_selector dependency-version: 1.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pubspec.lock | 32 ++++++++++++++++---------------- pubspec.yaml | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index b55ddbb7b..106cfeead 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -397,10 +397,10 @@ packages: dependency: "direct main" description: name: file_selector - sha256: "5f1d15a7f17115038f433d1b0ea57513cc9e29a9d5338d166cb0bef3fa90a7a0" + sha256: bd15e43e9268db636b53eeaca9f56324d1622af30e5c34d6e267649758c84d9a url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.1.0" file_selector_android: dependency: transitive description: @@ -421,26 +421,26 @@ packages: dependency: transitive description: name: file_selector_linux - sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" + sha256: "2567f398e06ac72dcf2e98a0c95df2a9edd03c2c2e0cacd4780f20cdf56263a0" url: "https://pub.dev" source: hosted - version: "0.9.3+2" + version: "0.9.4" file_selector_macos: dependency: transitive description: name: file_selector_macos - sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" + sha256: "5e0bbe9c312416f1787a68259ea1505b52f258c587f12920422671807c4d618a" url: "https://pub.dev" source: hosted - version: "0.9.4+2" + version: "0.9.5" file_selector_platform_interface: dependency: transitive description: name: file_selector_platform_interface - sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85" url: "https://pub.dev" source: hosted - version: "2.6.2" + version: "2.7.0" file_selector_web: dependency: transitive description: @@ -1096,10 +1096,10 @@ packages: dependency: transitive description: name: meta - sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" mgrs_dart: dependency: transitive description: @@ -1821,26 +1821,26 @@ packages: dependency: transitive description: name: test - sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb" + sha256: "75906bf273541b676716d1ca7627a17e4c4070a3a16272b7a3dc7da3b9f3f6b7" url: "https://pub.dev" source: hosted - version: "1.26.2" + version: "1.26.3" test_api: dependency: transitive description: name: test_api - sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" + sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 url: "https://pub.dev" source: hosted - version: "0.7.6" + version: "0.7.7" test_core: dependency: transitive description: name: test_core - sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a" + sha256: "0cc24b5ff94b38d2ae73e1eb43cc302b77964fbf67abad1e296025b78deb53d0" url: "https://pub.dev" source: hosted - version: "0.6.11" + version: "0.6.12" timezone: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index e133ad76e..124cfc085 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -26,7 +26,7 @@ dependencies: dynamic_color: ^1.8.1 emoji_picker_flutter: ^4.3.0 file_picker: ^10.3.6 - file_selector: ^1.0.4 + file_selector: ^1.1.0 flutter: sdk: flutter flutter_foreground_task: ^9.1.0