mirror of
https://github.com/tulir/gomuks.git
synced 2025-04-20 10:33:41 -05:00
Mock setting presence and status
This is not the final design, I am waiting for my mautrix-go PR to be merged.
This commit is contained in:
parent
1f8a45f866
commit
9c0d5741cd
4 changed files with 35 additions and 0 deletions
|
@ -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 unmarshalAndCall(req.Data, func(params *getProfileParams) (*mautrix.RespPresence, error) {
|
||||||
return h.Client.GetPresence(ctx, params.UserID)
|
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":
|
case "get_mutual_rooms":
|
||||||
return unmarshalAndCall(req.Data, func(params *getProfileParams) ([]id.RoomID, error) {
|
return unmarshalAndCall(req.Data, func(params *getProfileParams) ([]id.RoomID, error) {
|
||||||
return h.GetMutualRooms(ctx, params.UserID)
|
return h.GetMutualRooms(ctx, params.UserID)
|
||||||
|
|
|
@ -185,6 +185,10 @@ export default abstract class RPCClient {
|
||||||
return this.request("get_presence", { user_id })
|
return this.request("get_presence", { user_id })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setPresence(presence: Presence): Promise<boolean> {
|
||||||
|
return this.request("set_presence", { presence })
|
||||||
|
}
|
||||||
|
|
||||||
getMutualRooms(user_id: UserID): Promise<RoomID[]> {
|
getMutualRooms(user_id: UserID): Promise<RoomID[]> {
|
||||||
return this.request("get_mutual_rooms", { user_id })
|
return this.request("get_mutual_rooms", { user_id })
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,6 +97,11 @@ div.right-panel-content.user {
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.presencesetter {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
div.userid, div.displayname {
|
div.userid, div.displayname {
|
||||||
/* Ensure names aren't too long */
|
/* Ensure names aren't too long */
|
||||||
display: -webkit-box;
|
display: -webkit-box;
|
||||||
|
|
|
@ -67,6 +67,14 @@ const UserInfo = ({ userID }: UserInfoProps) => {
|
||||||
)
|
)
|
||||||
}, [roomCtx, userID, client])
|
}, [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)
|
const displayname = member?.displayname || globalProfile?.displayname || getLocalpart(userID)
|
||||||
return <>
|
return <>
|
||||||
<div className="avatar-container">
|
<div className="avatar-container">
|
||||||
|
@ -101,6 +109,20 @@ const UserInfo = ({ userID }: UserInfoProps) => {
|
||||||
</>}
|
</>}
|
||||||
<DeviceList client={client} room={roomCtx?.store} userID={userID}/>
|
<DeviceList client={client} room={roomCtx?.store} userID={userID}/>
|
||||||
<hr/>
|
<hr/>
|
||||||
|
{userID === client.userID && <>
|
||||||
|
<h3>Set presence</h3>
|
||||||
|
<div className="presencesetter">
|
||||||
|
<button title="Set presence to online" onClick={() => sendNewPresence({...(presence || {}), "presence": "online"})} type="button">{PresenceEmojis["online"]}</button>
|
||||||
|
<button title="Set presence to unavailable" onClick={() => sendNewPresence({...(presence || {}), "presence": "unavailable"})} type="button">{PresenceEmojis["unavailable"]}</button>
|
||||||
|
<button title="Set presence to offline" onClick={() => sendNewPresence({...(presence || {}), "presence": "offline"})} type="button">{PresenceEmojis["offline"]}</button>
|
||||||
|
</div>
|
||||||
|
<div className="statussetter">
|
||||||
|
<form onSubmit={(e) => {e.preventDefault(); sendNewPresence({...(presence || {"presence": "offline"}), "status_msg": ((e.target as HTMLFormElement).children[0] as HTMLInputElement).value})}}>
|
||||||
|
<input type="text" placeholder="Status message" defaultValue={presence?.status_msg || ""}/><button title="Set status message" onClick={() => alert("Set status message")} type="submit">Set</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<hr/>
|
||||||
|
</>}
|
||||||
{errors?.length ? <>
|
{errors?.length ? <>
|
||||||
<UserInfoError errors={errors}/>
|
<UserInfoError errors={errors}/>
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
Loading…
Add table
Reference in a new issue