feat: system messages, group DM welcome header, and dm_owner_updated event
- Render system messages (member_added, member_removed, owner_changed) inline in MessageList with icon + human-readable text; system messages never group with adjacent user messages - Rewrite WelcomeHeader to branch on ownerId: group DMs show overlapping avatars, group name, creator attribution, federated privacy note, and a Leave Group button - Add dm_owner_updated ServerEvent; broadcast from dm.ts leave handler and federation processOwnershipTransferEvent so all clients update ownerId in real-time - Add updateDmOwner action to spaceStore and handle dm_owner_updated in useWebSocket - Add leaveGroup alias to API client dm namespace
This commit is contained in:
@@ -1214,6 +1214,15 @@ export async function dmRoutes(app: FastifyInstance): Promise<void> {
|
||||
.where(eq(schema.dmChannels.id, id))
|
||||
.run();
|
||||
|
||||
// Broadcast ownership change via dedicated event
|
||||
for (const member of remainingMembers) {
|
||||
connectionManager.sendToUser(member.userId, {
|
||||
type: 'dm_owner_updated',
|
||||
dmChannelId: id,
|
||||
newOwnerId: nextOwner.userId,
|
||||
});
|
||||
}
|
||||
|
||||
// Query new owner user outside federation block so it's available for system message
|
||||
const newOwnerUser = db.select().from(schema.users).where(eq(schema.users.id, nextOwner.userId)).get();
|
||||
|
||||
|
||||
@@ -1972,6 +1972,12 @@ function processOwnershipTransferEvent(
|
||||
.where(eq(schema.dmChannels.id, channel.id))
|
||||
.run();
|
||||
|
||||
connectionManager.sendToDmMembers(channel.id, {
|
||||
type: 'dm_owner_updated',
|
||||
dmChannelId: channel.id,
|
||||
newOwnerId: newOwnerLocal?.id ?? channel.ownerId!,
|
||||
});
|
||||
|
||||
const prevOwnerLocal = event.ownership.previousOwner
|
||||
? resolveLocalUser(event.ownership.previousOwner.homeUserId, db)
|
||||
: null;
|
||||
|
||||
Reference in New Issue
Block a user