From 4314c88d5c60a49c48a5b76c6ee3b5aab7d92ca1 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Wed, 9 Sep 2026 15:19:10 -0400 Subject: [PATCH 1/4] fallback to empty profile if fetch fails --- gomuks | 2 +- lib/controllers/client.dart | 10 ++++++++-- lib/models/profile_response.dart | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/gomuks b/gomuks index 9444dd2..0e06c7b 160000 --- a/gomuks +++ b/gomuks @@ -1 +1 @@ -Subproject commit 9444dd293664c300c6e710bb6cddcd9c6cab365d +Subproject commit 0e06c7b74f96d3e29a8101893ca1921d13a90573 diff --git a/lib/controllers/client.dart b/lib/controllers/client.dart index b7d1eb4..af44d2f 100644 --- a/lib/controllers/client.dart +++ b/lib/controllers/client.dart @@ -2,6 +2,7 @@ import "dart:ffi"; import "dart:io"; import "dart:isolate"; import "dart:math"; + import "package:fast_immutable_collections/fast_immutable_collections.dart"; import "package:ffi/ffi.dart"; import "package:flutter/foundation.dart"; @@ -261,8 +262,13 @@ class ClientController extends AsyncNotifier { Future paginate(PaginateRequest request) async => .fromJson(await _sendCommand("paginate", request.toJson())); - Future getProfile(String userId) async => - .fromJson(await _sendCommand("get_profile", {"user_id": userId})); + Future getProfile(String userId) async { + try { + return .fromJson(await _sendCommand("get_profile", {"user_id": userId})); + } catch (_) { + return ProfileResponse(profile: .new(id: userId)); + } + } Future reportEvent(ReportRequest request) => _sendCommand("report_event", request.toJson()); diff --git a/lib/models/profile_response.dart b/lib/models/profile_response.dart index 8984bcf..fcaaf2e 100644 --- a/lib/models/profile_response.dart +++ b/lib/models/profile_response.dart @@ -9,7 +9,7 @@ part "profile_response.g.dart"; @JsonSerializable() class const ProfileResponse({ @JsonKey(fromJson: Profile.fromJson) required final Profile profile, - required final Bio? bio, + final Bio? bio, }) with _$ProfileResponse { Map toJson() => _$ProfileResponseToJson(this); From 0201f71e5dcf9c5c1dbeca8a7a325f669a11f8ec Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Wed, 9 Sep 2026 15:26:04 -0400 Subject: [PATCH 2/4] allow banning left users --- lib/widgets/user_bottom_sheet.dart | 43 +++++++++++++++--------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/lib/widgets/user_bottom_sheet.dart b/lib/widgets/user_bottom_sheet.dart index a725613..feeb5a1 100644 --- a/lib/widgets/user_bottom_sheet.dart +++ b/lib/widgets/user_bottom_sheet.dart @@ -200,36 +200,35 @@ final class const UserBottomSheet( ), if (ref.watch( - PowerLevelController.provider( - .membershipAction( - action: .kick, - roomId: roomId!, - targetUser: userId, - ), - ), - ) && - member.status == .join || - member.status == .invite) + PowerLevelController.provider( + .membershipAction( + action: .kick, + roomId: roomId!, + targetUser: userId, + ), + ), + )) Padding( padding: .only(top: 4), child: Row( mainAxisSize: MainAxisSize.max, spacing: 8, children: [ - M3EButton.icon( - onPressed: () => showMembershipDialog(.kick), - shape: .square, - icon: Icon(Icons.sports_martial_arts), - label: Text("Kick"), - decoration: .new( - backgroundColor: WidgetStatePropertyAll( - theme.colorScheme.error, - ), - foregroundColor: WidgetStatePropertyAll( - theme.colorScheme.onError, + if (member.status == .join || member.status == .invite) + M3EButton.icon( + onPressed: () => showMembershipDialog(.kick), + shape: .square, + icon: Icon(Icons.sports_martial_arts), + label: Text("Kick"), + decoration: .new( + backgroundColor: WidgetStatePropertyAll( + theme.colorScheme.error, + ), + foregroundColor: WidgetStatePropertyAll( + theme.colorScheme.onError, + ), ), ), - ), M3EButton.icon( onPressed: () => showMembershipDialog(.ban), From da352cd035e0097ad6856f312fa4949467dccc11 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Wed, 9 Sep 2026 15:37:41 -0400 Subject: [PATCH 3/4] cap max length of embeds --- lib/widgets/url_preview.dart | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/widgets/url_preview.dart b/lib/widgets/url_preview.dart index 37a2733..5eda427 100644 --- a/lib/widgets/url_preview.dart +++ b/lib/widgets/url_preview.dart @@ -31,9 +31,15 @@ class const UrlPreview(final Uri link, {super.key}) extends ConsumerWidget { Text( preview.title!, style: Theme.of(context).textTheme.titleLarge, + maxLines: 3, + overflow: .ellipsis, ), if (preview.description != null) ...[ - Text(preview.description!), + Text( + preview.description!, + maxLines: 20, + overflow: .ellipsis, + ), SizedBox(height: 4), ], if (preview.imageUrl != null) From 0a667fda0bc99c8d725c4d4c0175caab6bcb6eee Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Wed, 9 Sep 2026 15:44:25 -0400 Subject: [PATCH 4/4] update gomuks vendorHash --- linux/nix/pkg/gomuks.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/nix/pkg/gomuks.nix b/linux/nix/pkg/gomuks.nix index ffa9d7c..0516f31 100644 --- a/linux/nix/pkg/gomuks.nix +++ b/linux/nix/pkg/gomuks.nix @@ -17,7 +17,7 @@ buildGoModule ( src = "${src}/gomuks"; - vendorHash = "sha256-C03ss88QAnmZu+XxoHhc1M/261xFl8hR/pzLbU37Qe8="; + vendorHash = "sha256-9CS/lAVT8gLWACLomwcEa8YNlAXvBOskPPx4zERg0wQ="; buildPhase = '' runHook preBuild