Compare commits

..
Author SHA1 Message Date
129f0794f2
add wip deregistering 2026-08-26 16:27:43 -04:00
0122feae1d
smarter notif logic 2026-08-26 11:55:20 -04:00
74207e405b
include avatars on notifs 2026-08-26 00:46:57 -04:00
2beb6dcb9b
send notifications natively 2026-08-26 00:25:47 -04:00
11d83ee067
override webcrypto deps 2026-08-25 20:18:47 -04:00
02704e97ef
pass pushes to gomuks 2026-08-25 19:51:43 -04:00
adf3da8d77
working registration 2026-08-25 17:30:55 -04:00
5ed6e5e083
slight cleanup
`onNewEndpoint` is still not getting called for some reason (help appreciated)
2026-08-23 22:13:38 -04:00
7218eb5195
add UnifiedPushAllowedController 2026-08-23 14:26:51 -04:00
fe871217b2
support for registering pushers 2026-08-23 14:09:53 -04:00
5 changed files with 27 additions and 37 deletions

2
gomuks

@ -1 +1 @@
Subproject commit 0e06c7b74f96d3e29a8101893ca1921d13a90573
Subproject commit 6c8b2781e02f27b64f37735cba6634784f117b88

View file

@ -281,13 +281,8 @@ class ClientController extends AsyncNotifier<int> {
Future<Paginate> paginate(PaginateRequest request) async =>
.fromJson(await _sendCommand("paginate", request.toJson()));
Future<ProfileResponse> getProfile(String userId) async {
try {
return .fromJson(await _sendCommand("get_profile", {"user_id": userId}));
} catch (_) {
return ProfileResponse(profile: .new(id: userId));
}
}
Future<ProfileResponse> getProfile(String userId) async =>
.fromJson(await _sendCommand("get_profile", {"user_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,
final Bio? bio,
required final Bio? bio,
}) with _$ProfileResponse {
Map<String, Object?> toJson() => _$ProfileResponseToJson(this);

View file

@ -31,15 +31,9 @@ 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!,
maxLines: 20,
overflow: .ellipsis,
),
Text(preview.description!),
SizedBox(height: 4),
],
if (preview.imageUrl != null)

View file

@ -200,35 +200,36 @@ final class const UserBottomSheet(
),
if (ref.watch(
PowerLevelController.provider(
.membershipAction(
action: .kick,
roomId: roomId!,
targetUser: userId,
),
),
))
PowerLevelController.provider(
.membershipAction(
action: .kick,
roomId: roomId!,
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,
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(.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),