From 9c0d5741cd62cd214f68d6eccfb499afa5fae72b Mon Sep 17 00:00:00 2001 From: nexy7574 Date: Sun, 22 Dec 2024 00:30:38 +0000 Subject: [PATCH] Mock setting presence and status This is not the final design, I am waiting for my mautrix-go PR to be merged. --- pkg/hicli/json-commands.go | 4 ++++ web/src/api/rpc.ts | 4 ++++ web/src/ui/rightpanel/RightPanel.css | 5 +++++ web/src/ui/rightpanel/UserInfo.tsx | 22 ++++++++++++++++++++++ 4 files changed, 35 insertions(+) diff --git a/pkg/hicli/json-commands.go b/pkg/hicli/json-commands.go index b719234..5e43bf8 100644 --- a/pkg/hicli/json-commands.go +++ b/pkg/hicli/json-commands.go @@ -90,6 +90,10 @@ func (h *HiClient) handleJSONCommand(ctx context.Context, req *JSONCommand) (any return unmarshalAndCall(req.Data, func(params *getProfileParams) (*mautrix.RespPresence, error) { return h.Client.GetPresence(ctx, params.UserID) }) + case "set_presence": + return unmarshalAndCall(req.Data, func(params *mautrix.ReqPresence) (bool, error) { + return true, h.Client.SetPresence(ctx, params) + }) case "get_mutual_rooms": return unmarshalAndCall(req.Data, func(params *getProfileParams) ([]id.RoomID, error) { return h.GetMutualRooms(ctx, params.UserID) diff --git a/web/src/api/rpc.ts b/web/src/api/rpc.ts index 2dd3f09..749a3ad 100644 --- a/web/src/api/rpc.ts +++ b/web/src/api/rpc.ts @@ -185,6 +185,10 @@ export default abstract class RPCClient { return this.request("get_presence", { user_id }) } + setPresence(presence: Presence): Promise { + return this.request("set_presence", { presence }) + } + getMutualRooms(user_id: UserID): Promise { return this.request("get_mutual_rooms", { user_id }) } diff --git a/web/src/ui/rightpanel/RightPanel.css b/web/src/ui/rightpanel/RightPanel.css index 91a9b2e..ea50f99 100644 --- a/web/src/ui/rightpanel/RightPanel.css +++ b/web/src/ui/rightpanel/RightPanel.css @@ -97,6 +97,11 @@ div.right-panel-content.user { word-wrap: break-word; } + div.presencesetter { + display: grid; + grid-template-columns: repeat(3, 1fr); + } + div.userid, div.displayname { /* Ensure names aren't too long */ display: -webkit-box; diff --git a/web/src/ui/rightpanel/UserInfo.tsx b/web/src/ui/rightpanel/UserInfo.tsx index 75f3975..10801b9 100644 --- a/web/src/ui/rightpanel/UserInfo.tsx +++ b/web/src/ui/rightpanel/UserInfo.tsx @@ -67,6 +67,14 @@ const UserInfo = ({ userID }: UserInfoProps) => { ) }, [roomCtx, userID, client]) + const sendNewPresence = (newPresence: Presence) => { + console.log("Setting new presence", newPresence) + client.rpc.setPresence(newPresence).then( + () => setPresence(newPresence), + err => setErrors((errors && [...errors, `${err}`] || [`${err}`])), + ) + } + const displayname = member?.displayname || globalProfile?.displayname || getLocalpart(userID) return <>
@@ -101,6 +109,20 @@ const UserInfo = ({ userID }: UserInfoProps) => { }
+ {userID === client.userID && <> +

Set presence

+
+ + + +
+
+
{e.preventDefault(); sendNewPresence({...(presence || {"presence": "offline"}), "status_msg": ((e.target as HTMLFormElement).children[0] as HTMLInputElement).value})}}> + +
+
+
+ } {errors?.length ? <>