add mark as read for rooms/DMs, fixes #24

This commit is contained in:
Henry Hiles 2026-05-09 11:10:52 -04:00
commit 469a625c40
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
2 changed files with 56 additions and 49 deletions

View file

@ -7,7 +7,7 @@ import "package:nexus/controllers/via_controller.dart";
import "package:nexus/models/room.dart";
class RoomMenu extends ConsumerWidget {
final Room room;
final Room? room;
final IList<Room> children;
const RoomMenu(this.room, {this.children = const IList.empty(), super.key});
@ -20,7 +20,7 @@ class RoomMenu extends ConsumerWidget {
itemBuilder: (_) => [
PopupMenuItem(
onTap: () async {
await client.markRead(room);
if (room != null) await client.markRead(room!);
await Future.wait(children.map((child) => client.markRead(child)));
},
child: ListTile(
@ -28,17 +28,22 @@ class RoomMenu extends ConsumerWidget {
title: Text("Mark as Read"),
),
),
if (room != null) ...[
PopupMenuItem(
onTap: () async {
final vias = ref.watch(ViaController.provider(room));
final vias = ref.watch(ViaController.provider(room!));
await Clipboard.setData(
ClipboardData(
text: "matrix:roomid/${room.metadata?.id.substring(1)}$vias)",
text:
"matrix:roomid/${room!.metadata?.id.substring(1)}$vias)",
),
);
},
child: ListTile(leading: Icon(Icons.link), title: Text("Copy Link")),
child: ListTile(
leading: Icon(Icons.link),
title: Text("Copy Link"),
),
),
PopupMenuItem(
onTap: () => showDialog(
@ -46,7 +51,7 @@ class RoomMenu extends ConsumerWidget {
builder: (context) => AlertDialog(
title: Text("Leave Room"),
content: Text(
"Are you sure you want to leave \"${room.metadata?.name ?? "Unnamed Room"}\"?",
"Are you sure you want to leave \"${room!.metadata?.name ?? "Unnamed Room"}\"?",
),
actions: [
TextButton(
@ -56,13 +61,14 @@ class RoomMenu extends ConsumerWidget {
TextButton(
onPressed: () async {
Navigator.of(context).pop();
final snackbar = ScaffoldMessenger.of(context).showSnackBar(
final snackbar = ScaffoldMessenger.of(context)
.showSnackBar(
SnackBar(
content: Text("Leaving room..."),
duration: Duration(days: 1),
),
);
await client.leaveRoom(room);
await client.leaveRoom(room!);
snackbar.close();
},
child: Text("Leave"),
@ -75,6 +81,8 @@ class RoomMenu extends ConsumerWidget {
title: Text("Leave", style: TextStyle(color: danger)),
),
),
],
// PopupMenuItem(
// onTap: () => showDialog(
// context: context,

View file

@ -140,9 +140,8 @@ class Sidebar extends HookConsumerWidget {
),
backgroundColor: Colors.transparent,
actions: [
if (selectedSpace.room != null)
RoomMenu(
selectedSpace.room!,
selectedSpace.room,
children: selectedSpace.children,
),
],