Watch
1
0
Fork
You've already forked nexus
0
forked from Nexus/nexus

Compare commits

...
Author SHA1 Message Date
da352cd035
cap max length of embeds 2026-09-09 15:37:41 -04:00
0201f71e5d
allow banning left users 2026-09-09 15:26:04 -04:00
4314c88d5c
fallback to empty profile if fetch fails 2026-09-09 15:25:10 -04:00
5 changed files with 38 additions and 27 deletions

2
gomuks

@ -1 +1 @@
Subproject commit 9444dd293664c300c6e710bb6cddcd9c6cab365d
Subproject commit 0e06c7b74f96d3e29a8101893ca1921d13a90573

View file

@ -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<int> {
Future<Paginate> paginate(PaginateRequest request) async =>
.fromJson(await _sendCommand("paginate", request.toJson()));
Future<ProfileResponse> getProfile(String userId) async =>
.fromJson(await _sendCommand("get_profile", {"user_id": userId}));
Future<ProfileResponse> getProfile(String userId) async {
try {
return .fromJson(await _sendCommand("get_profile", {"user_id": userId}));
} catch (_) {
return ProfileResponse(profile: .new(id: userId));
}
}
Future<void> reportEvent(ReportRequest request) =>
_sendCommand("report_event", request.toJson());

View file

@ -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<String, Object?> toJson() => _$ProfileResponseToJson(this);

View file

@ -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)

View file

@ -207,15 +207,14 @@ final class const UserBottomSheet(
targetUser: userId,
),
),
) &&
member.status == .join ||
member.status == .invite)
))
Padding(
padding: .only(top: 4),
child: Row(
mainAxisSize: MainAxisSize.max,
spacing: 8,
children: [
if (member.status == .join || member.status == .invite)
M3EButton.icon(
onPressed: () => showMembershipDialog(.kick),
shape: .square,