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

rework logic in PinnedEventsController, make

`SetStateEvent.content` a `Content`
This commit is contained in:
Henry Hiles 2026-07-14 15:39:57 -04:00
commit 29d565fda5
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
2 changed files with 28 additions and 34 deletions

View file

@ -42,53 +42,46 @@ class PinnedEventsController extends AsyncNotifier<IList<Event>> {
}
Future<void> addPin(Event event) async {
final client = ref.read(ClientController.provider.notifier);
final current = await future;
if (current.any((ev) => ev.eventId == event.eventId)) {
return;
}
final updatedPinnedIds = [
...current.map((ev) => ev.eventId),
event.eventId,
];
await client.setState(
return setPinned(
.new(
roomId: roomId,
type: EventType.pinnedEvents.type,
stateKey:
"", //The empty string stands for m.room.pinned_events according to matrix spec.
content: {"pinned": updatedPinnedIds},
pinnedEvents: .new(
current
.map((element) => element.eventId)
.toIList()
.add(event.eventId),
),
),
);
}
Future<void> removePin(Event event) async {
final client = ref.read(ClientController.provider.notifier);
final current = await future;
if (!current.any((ev) => ev.eventId == event.eventId)) {
return;
}
final updatedPinnedIds = [
...current
.where((ev) => ev.eventId != event.eventId)
.map((ev) => ev.eventId),
];
await client.setState(
return setPinned(
.new(
roomId: roomId,
type: EventType.pinnedEvents.type,
stateKey: "", //The empty string stands for m.room.pinned_events according to matrix spec.
content: {"pinned": updatedPinnedIds},
pinnedEvents: .new(
current
.map((element) => element.eventId)
.toIList()
.remove(event.eventId),
),
),
);
}
Future<void> setPinned(PinnedEventsContent content) => ref
.read(ClientController.provider.notifier)
.setState(
.new(
roomId: roomId,
type: EventType.pinnedEvents.type,
stateKey: "",
content: content,
),
);
static final provider = AsyncNotifierProvider.family
.autoDispose<PinnedEventsController, IList<Event>, String>(
PinnedEventsController.new,

View file

@ -1,4 +1,5 @@
import "package:freezed_annotation/freezed_annotation.dart";
import "package:nexus/models/content/content.dart";
part "set_state_request.freezed.dart";
part "set_state_request.g.dart";
@ -8,10 +9,10 @@ abstract class SetStateRequest with _$SetStateRequest {
required String roomId,
required String type,
required String stateKey,
required Map<String, dynamic> content,
required Content content,
@Default(0) int delayMs,
}) = _SetStateRequest;
factory SetStateRequest.fromJson(Map<String, Object?> json) =>
_$SetStateRequestFromJson(json);
}
}