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

add support for creating rooms

Fixes #81
This commit is contained in:
Henry Hiles 2026-10-15 19:49:04 -04:00
commit ed84410039
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
13 changed files with 540 additions and 66 deletions

View file

@ -3,6 +3,7 @@ import "package:material_ui/material_ui.dart";
import "package:nexus/controllers/client.dart";
import "package:nexus/controllers/sidebar_page.dart";
import "package:nexus/helpers/extensions/focus_room.dart";
import "package:nexus/helpers/extensions/with_progress_snackbar.dart";
import "package:nexus/models/requests/join_room.dart";
extension JoinRoom on BuildContext {
@ -16,56 +17,27 @@ extension JoinRoom on BuildContext {
}) async {
final container = ProviderScope.containerOf(this);
final messenger = ScaffoldMessenger.of(this);
final colorScheme = Theme.of(this).colorScheme;
final joining = messenger.showSnackBar(
.new(content: Text("Joining $name..."), duration: const .new(days: 1)),
final roomId = await withProgressSnackbar(
"Joining $name...",
() =>
container.read(ClientController.provider.notifier).joinRoom(request),
);
if (roomId == null) return null;
messenger.showSnackBar(
.new(
content: Text("Joined $name."),
action: .new(
label: "Open",
onPressed: () async {
await container.focusRoom(roomId);
container.read(SidebarPageController.provider.notifier).set(.rooms);
},
),
),
);
try {
final roomId = await container
.read(ClientController.provider.notifier)
.joinRoom(request);
joining.close();
messenger.showSnackBar(
.new(
content: Text("Joined $name."),
action: .new(
label: "Open",
onPressed: () async {
if (await container.focusRoom(roomId)) {
container
.read(SidebarPageController.provider.notifier)
.set(.rooms);
} else {
messenger.showSnackBar(
.new(
content: Text(
"$name hasn't finished syncing yet, try again in a moment.",
),
),
);
}
},
),
),
);
return roomId;
} catch (error) {
joining.close();
messenger.showSnackBar(
.new(
backgroundColor: colorScheme.errorContainer,
content: Text(
error.toString(),
style: .new(color: colorScheme.onErrorContainer),
),
),
);
return null;
}
return roomId;
}
}