moved user presence status into global state
This commit is contained in:
@@ -15,6 +15,7 @@ export type UserStatus = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const friendsUserStatuses = writable<Record<string, UserStatus>>({});
|
export const friendsUserStatuses = writable<Record<string, UserStatus>>({});
|
||||||
|
export const currentUserStatus = writable<UserStatus | null>(null);
|
||||||
|
|
||||||
const subscription = createMultiListenerSubscription();
|
const subscription = createMultiListenerSubscription();
|
||||||
|
|
||||||
@@ -58,6 +59,14 @@ export async function initUserStatusListeners() {
|
|||||||
);
|
);
|
||||||
subscription.addUnlisten(unlistenStatus);
|
subscription.addUnlisten(unlistenStatus);
|
||||||
|
|
||||||
|
const unlistenUserStatusChanged = await listen<UserStatus>(
|
||||||
|
AppEvents.UserStatusChanged,
|
||||||
|
(event) => {
|
||||||
|
currentUserStatus.set(event.payload);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
subscription.addUnlisten(unlistenUserStatusChanged);
|
||||||
|
|
||||||
const unlistenFriendDisconnected = await listen<
|
const unlistenFriendDisconnected = await listen<
|
||||||
[{ userId: string }] | { userId: string } | string
|
[{ userId: string }] | { userId: string } | string
|
||||||
>(AppEvents.FriendDisconnected, (event) => {
|
>(AppEvents.FriendDisconnected, (event) => {
|
||||||
|
|||||||
@@ -7,38 +7,12 @@
|
|||||||
import { sceneInteractive } from "../../events/scene-interactive";
|
import { sceneInteractive } from "../../events/scene-interactive";
|
||||||
import {
|
import {
|
||||||
friendsUserStatuses,
|
friendsUserStatuses,
|
||||||
type UserStatus,
|
currentUserStatus,
|
||||||
} from "../../events/user-status";
|
} from "../../events/user-status";
|
||||||
import { invoke } from "@tauri-apps/api/core";
|
import { invoke } from "@tauri-apps/api/core";
|
||||||
import { listen } from "@tauri-apps/api/event";
|
|
||||||
import { AppEvents } from "../../types/bindings/AppEventsConstants";
|
|
||||||
import { onMount } from "svelte";
|
|
||||||
import type { PresenceStatus } from "../../types/bindings/PresenceStatus";
|
|
||||||
import DebugBar from "./components/debug-bar.svelte";
|
import DebugBar from "./components/debug-bar.svelte";
|
||||||
|
|
||||||
let innerWidth = $state(0);
|
|
||||||
let innerHeight = $state(0);
|
|
||||||
|
|
||||||
let isInteractive = $derived($sceneInteractive);
|
|
||||||
|
|
||||||
let presenceStatus: PresenceStatus | null = $state(null);
|
|
||||||
|
|
||||||
onMount(() => {
|
|
||||||
const unlisten = listen<UserStatus>(
|
|
||||||
AppEvents.UserStatusChanged,
|
|
||||||
(event) => {
|
|
||||||
presenceStatus = event.payload.presenceStatus;
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
return () => {
|
|
||||||
unlisten.then((u) => u());
|
|
||||||
};
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:window bind:innerWidth bind:innerHeight />
|
|
||||||
|
|
||||||
<div class="w-svw h-svh p-4 relative overflow-hidden">
|
<div class="w-svw h-svh p-4 relative overflow-hidden">
|
||||||
<button
|
<button
|
||||||
class="absolute inset-0 z-10 size-full"
|
class="absolute inset-0 z-10 size-full"
|
||||||
@@ -50,13 +24,11 @@
|
|||||||
});
|
});
|
||||||
}}> </button
|
}}> </button
|
||||||
>
|
>
|
||||||
<div
|
<div id="debug-bar">
|
||||||
id="debug-bar"
|
|
||||||
>
|
|
||||||
<DebugBar
|
<DebugBar
|
||||||
{isInteractive}
|
isInteractive={$sceneInteractive}
|
||||||
cursorPosition={$cursorPositionOnScreen}
|
cursorPosition={$cursorPositionOnScreen}
|
||||||
{presenceStatus}
|
presenceStatus={$currentUserStatus?.presenceStatus ?? null}
|
||||||
friendsCursorPositions={$friendsCursorPositions}
|
friendsCursorPositions={$friendsCursorPositions}
|
||||||
friends={$appData?.friends ?? []}
|
friends={$appData?.friends ?? []}
|
||||||
friendsUserStatuses={$friendsUserStatuses}
|
friendsUserStatuses={$friendsUserStatuses}
|
||||||
|
|||||||
Reference in New Issue
Block a user