From 1cef899e5c0e78dadbf49ea2712eb7ee85b6158f Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 16 Nov 2024 22:57:41 +0200 Subject: [PATCH] web/preferences: implement read receipt, typing notification and emoji pack options --- web/src/api/statestore/hooks.ts | 4 ++-- web/src/ui/composer/MessageComposer.tsx | 20 +++++++++++++------- web/src/ui/timeline/TimelineView.tsx | 3 ++- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/web/src/api/statestore/hooks.ts b/web/src/api/statestore/hooks.ts index ce6145f..46de365 100644 --- a/web/src/api/statestore/hooks.ts +++ b/web/src/api/statestore/hooks.ts @@ -83,9 +83,9 @@ export function useCustomEmojis( ss.emojiRoomsSub.subscribe, () => ss.getRoomEmojiPacks(), ) - const specialRoomPacks = useSyncExternalStore( + const specialRoomPacks = useSyncExternalStore>( room.stateSubs.getSubscriber("im.ponies.room_emotes"), - () => room.getAllEmojiPacks(), + () => room.preferences.show_room_emoji_packs ? room.getAllEmojiPacks() : {}, ) return useMemo(() => { const allPacksObject = { ...watchedRoomPacks, ...specialRoomPacks } diff --git a/web/src/ui/composer/MessageComposer.tsx b/web/src/ui/composer/MessageComposer.tsx index 0a3902e..e7a42d1 100644 --- a/web/src/ui/composer/MessageComposer.tsx +++ b/web/src/ui/composer/MessageComposer.tsx @@ -262,12 +262,16 @@ const MessageComposer = () => { const now = Date.now() if (evt.target.value !== "" && typingSentAt.current + 5_000 < now) { typingSentAt.current = now - client.rpc.setTyping(room.roomID, 10_000) - .catch(err => console.error("Failed to send typing notification:", err)) + if (room.preferences.send_typing_notifications) { + client.rpc.setTyping(room.roomID, 10_000) + .catch(err => console.error("Failed to send typing notification:", err)) + } } else if (evt.target.value === "" && typingSentAt.current > 0) { typingSentAt.current = 0 - client.rpc.setTyping(room.roomID, 0) - .catch(err => console.error("Failed to send stop typing notification:", err)) + if (room.preferences.send_typing_notifications) { + client.rpc.setTyping(room.roomID, 0) + .catch(err => console.error("Failed to send stop typing notification:", err)) + } } onComposerCaretChange(evt, evt.target.value) }) @@ -322,11 +326,13 @@ const MessageComposer = () => { return () => { if (typingSentAt.current > 0) { typingSentAt.current = 0 - client.rpc.setTyping(room.roomID, 0) - .catch(err => console.error("Failed to send stop typing notification due to room switch:", err)) + if (room.preferences.send_typing_notifications) { + client.rpc.setTyping(room.roomID, 0) + .catch(err => console.error("Failed to send stop typing notification due to room switch:", err)) + } } } - }, [client, room.roomID]) + }, [client, room]) useLayoutEffect(() => { if (!textInput.current) { return diff --git a/web/src/ui/timeline/TimelineView.tsx b/web/src/ui/timeline/TimelineView.tsx index a7c668e..c2592f4 100644 --- a/web/src/ui/timeline/TimelineView.tsx +++ b/web/src/ui/timeline/TimelineView.tsx @@ -79,7 +79,8 @@ const TimelineView = () => { && newestEvent.sender !== client.userID ) { room.readUpToRow = newestEvent.timeline_rowid - client.rpc.markRead(room.roomID, newestEvent.event_id, "m.read").then( + const receiptType = roomCtx.store.preferences.send_read_receipts ? "m.read" : "m.read.private" + client.rpc.markRead(room.roomID, newestEvent.event_id, receiptType).then( () => console.log("Marked read up to", newestEvent.event_id, newestEvent.timeline_rowid), err => console.error(`Failed to send read receipt for ${newestEvent.event_id}:`, err), )