Add support for jumping to event links (#103)
Fixes #78. Reviewed-on: #103
This commit is contained in:
parent
597112f5d3
commit
1c4bf99be2
16 changed files with 169 additions and 113 deletions
|
|
@ -9,8 +9,8 @@ class ContextualEventController(String? _) extends Notifier<int?> {
|
|||
@override
|
||||
bool updateShouldNotify(_, _) => true;
|
||||
|
||||
static final provider = NotifierProvider.family
|
||||
.autoDispose<ContextualEventController, int?, String?>(
|
||||
static final provider =
|
||||
NotifierProvider.family<ContextualEventController, int?, String?>(
|
||||
ContextualEventController.new,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,11 +16,28 @@ class EventController(final GetEventRequest request)
|
|||
(event) => event.eventId == request.eventId,
|
||||
);
|
||||
|
||||
return event ??
|
||||
await ref
|
||||
.watch(ClientController.provider.notifier)
|
||||
.getEvent(request)
|
||||
.onError((_, _) => null);
|
||||
if (event != null) return event;
|
||||
|
||||
final fetchedEvent = await ref
|
||||
.watch(ClientController.provider.notifier)
|
||||
.getEvent(request)
|
||||
.onError((_, _) => null);
|
||||
|
||||
if (fetchedEvent != null) {
|
||||
ref
|
||||
.watch(RoomsController.provider.notifier)
|
||||
.update(
|
||||
.new({
|
||||
request.roomId: .new(
|
||||
events: .new({fetchedEvent.rowId: fetchedEvent}),
|
||||
),
|
||||
}),
|
||||
);
|
||||
|
||||
return fetchedEvent;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
static final provider = AsyncNotifierProvider.family
|
||||
|
|
|
|||
|
|
@ -59,7 +59,6 @@ class GomuksListenerController extends AsyncNotifier<void> {
|
|||
.new({
|
||||
event.roomId: .new(events: .new({event.rowId: event})),
|
||||
}),
|
||||
.new(),
|
||||
);
|
||||
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@ class NotificationsController([final NotificationsRequest? request])
|
|||
),
|
||||
),
|
||||
}),
|
||||
.new(),
|
||||
);
|
||||
|
||||
return .new(mentions.map((event) => (event.rowId, event.roomId)));
|
||||
|
|
@ -79,7 +78,6 @@ class NotificationsController([final NotificationsRequest? request])
|
|||
),
|
||||
),
|
||||
}),
|
||||
.new(),
|
||||
);
|
||||
|
||||
return currentNotifications.addAll(
|
||||
|
|
|
|||
|
|
@ -77,7 +77,6 @@ class RoomChatController(final ChatParams info)
|
|||
),
|
||||
),
|
||||
}),
|
||||
.new(),
|
||||
);
|
||||
return .new(
|
||||
timeline: .new(events.map((element) => element.rowId)),
|
||||
|
|
@ -149,7 +148,6 @@ class RoomChatController(final ChatParams info)
|
|||
),
|
||||
),
|
||||
}),
|
||||
.new(),
|
||||
);
|
||||
} else {
|
||||
final paginationResponse = await client.paginateManual(
|
||||
|
|
@ -173,7 +171,6 @@ class RoomChatController(final ChatParams info)
|
|||
),
|
||||
),
|
||||
}),
|
||||
.new(),
|
||||
);
|
||||
|
||||
final eventRowIds = paginationResponse.events
|
||||
|
|
@ -274,7 +271,6 @@ class RoomChatController(final ChatParams info)
|
|||
clientSticky: .new({event.rowId}),
|
||||
),
|
||||
}),
|
||||
.new(),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,10 @@ class RoomsController extends Notifier<IMap<String, Room>> {
|
|||
.new(),
|
||||
);
|
||||
|
||||
void update(IMap<String, Room> rooms, ISet<String> leftRooms) {
|
||||
void update(
|
||||
IMap<String, Room> rooms, [
|
||||
ISet<String> leftRooms = const ISet.empty(),
|
||||
]) {
|
||||
final merged = rooms.entries.fold(state, (acc, entry) {
|
||||
final roomId = entry.key;
|
||||
final incoming = entry.value;
|
||||
|
|
|
|||
Loading…
Reference in a new issue