include full appmetadata object in user status broadcasts

This commit is contained in:
2026-02-04 19:15:15 +08:00
parent 547baaceb8
commit 4152491ca4
5 changed files with 37 additions and 16 deletions

View File

@@ -1,8 +1,9 @@
import { listen, type UnlistenFn } from "@tauri-apps/api/event";
import { writable } from "svelte/store";
import type { AppMetadata } from "../types/bindings/AppMetadata";
export type FriendUserStatus = {
activeApp: string;
appMetadata: AppMetadata;
state: "idle" | "resting";
};
@@ -31,13 +32,20 @@ export async function initUserStatusListeners() {
const status = payload?.status as FriendUserStatus | undefined;
if (!userId || !status) return;
if (typeof status.activeApp !== "string" || status.activeApp.trim() === "") return;
if (!status.appMetadata) return;
// Validate that appMetadata has at least one valid name
const hasValidName =
(typeof status.appMetadata.localized === "string" && status.appMetadata.localized.trim() !== "") ||
(typeof status.appMetadata.unlocalized === "string" && status.appMetadata.unlocalized.trim() !== "");
if (!hasValidName) return;
if (status.state !== "idle" && status.state !== "resting") return;
friendsUserStatuses.update((current) => ({
...current,
[userId]: {
activeApp: status.activeApp,
appMetadata: status.appMetadata,
state: status.state,
},
}));

View File

@@ -106,8 +106,17 @@
)})
</span>
{#if status}
<span>
{status.state} in {status.activeApp}
<span class="flex items-center gap-1">
{status.state} in
{#if status.appMetadata.appIconB64}
<img
src={`data:image/png;base64,${status.appMetadata.appIconB64}`}
alt="Friend's active app icon"
class="size-4"
/>
{/if}
{status.appMetadata.localized ||
status.appMetadata.unlocalized}
</span>
{/if}
</div>