parent
8d944831f5
commit
b71a7f0bd6
10 changed files with 519 additions and 98 deletions
|
|
@ -28,6 +28,7 @@ import "package:nexus/models/requests/get_event_context.dart";
|
|||
import "package:nexus/models/requests/get_mentions.dart";
|
||||
import "package:nexus/models/requests/get_related_events.dart";
|
||||
import "package:nexus/models/requests/get_room_state.dart";
|
||||
import "package:nexus/models/requests/get_space_hierarchy.dart";
|
||||
import "package:nexus/models/requests/join_room.dart";
|
||||
import "package:nexus/models/profile_response.dart";
|
||||
import "package:nexus/models/requests/oauth/exchange_token.dart";
|
||||
|
|
@ -47,6 +48,7 @@ import "package:nexus/models/requests/upload_media.dart";
|
|||
import "package:nexus/models/room.dart";
|
||||
import "package:nexus/models/room_metadata.dart";
|
||||
import "package:nexus/models/room_summary.dart";
|
||||
import "package:nexus/models/space_hierarchy.dart";
|
||||
import "package:nexus/models/spec_versions_response.dart";
|
||||
import "package:nexus/src/third_party/gomuks.g.dart";
|
||||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||
|
|
@ -194,6 +196,11 @@ class ClientController extends AsyncNotifier<int> {
|
|||
Future<String> createRoom(CreateRoomRequest request) async =>
|
||||
(await _sendCommand("create_room", request.toJson()))["room_id"];
|
||||
|
||||
Future<SpaceHierarchy> getSpaceHierarchy(
|
||||
GetSpaceHierarchyRequest request,
|
||||
) async =>
|
||||
.fromJson(await _sendCommand("get_space_hierarchy", request.toJson()));
|
||||
|
||||
Future<RoomSummary> getRoomSummary(JoinRoomRequest request) async =>
|
||||
.fromJson(await _sendCommand("get_room_summary", request.toJson()));
|
||||
|
||||
|
|
|
|||
34
lib/controllers/space_hierarchy.dart
Normal file
34
lib/controllers/space_hierarchy.dart
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
import "package:hooks_riverpod/hooks_riverpod.dart";
|
||||
import "package:nexus/controllers/client.dart";
|
||||
import "package:nexus/models/space_hierarchy.dart";
|
||||
|
||||
class SpaceHierarchyController(final String spaceId)
|
||||
extends AsyncNotifier<SpaceHierarchy> {
|
||||
@override
|
||||
Future<SpaceHierarchy> build() => ref
|
||||
.read(ClientController.provider.notifier)
|
||||
.getSpaceHierarchy(.new(roomId: spaceId, maxDepth: 1));
|
||||
|
||||
Future<void> loadMore() async {
|
||||
final current = await future;
|
||||
if (current.nextBatch == null) return;
|
||||
|
||||
final next = await ref
|
||||
.read(ClientController.provider.notifier)
|
||||
.getSpaceHierarchy(
|
||||
.new(roomId: spaceId, maxDepth: 1, from: current.nextBatch),
|
||||
);
|
||||
|
||||
state = AsyncData(
|
||||
current.copyWith(
|
||||
rooms: current.rooms.addAll(next.rooms),
|
||||
nextBatch: next.nextBatch,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
static final provider = AsyncNotifierProvider.family
|
||||
.autoDispose<SpaceHierarchyController, SpaceHierarchy, String>(
|
||||
SpaceHierarchyController.new,
|
||||
);
|
||||
}
|
||||
Loading…
Reference in a new issue