diff --git a/src/components/views/LceOnlineView.tsx b/src/components/views/LceOnlineView.tsx index 14da6d6..fe6e313 100644 --- a/src/components/views/LceOnlineView.tsx +++ b/src/components/views/LceOnlineView.tsx @@ -7,10 +7,12 @@ import { TauriService } from "../../services/TauriService"; interface LceOnlineViewProps { addFriendTarget?: string | null; onClearAddFriendTarget?: () => void; + invites?: Array<{ from: string; sessionid: string }>; } const LceOnlineView = memo(function LceOnlineView({ addFriendTarget, onClearAddFriendTarget, + invites: invitesProp, }: LceOnlineViewProps) { const { setActiveView } = useUI(); const { animationsEnabled } = useConfig(); @@ -24,7 +26,7 @@ const LceOnlineView = memo(function LceOnlineView({ const [friends, setFriends] = useState([]); const [incomingReqs, setIncomingReqs] = useState([]); const [outgoingReqs, setOutgoingReqs] = useState([]); - const [invites, setInvites] = useState>([]); + const invites = invitesProp ?? []; const [isHosting, setIsHosting] = useState(false); const [isAddingFriend, setIsAddingFriend] = useState(false); const [addFriendUsername, setAddFriendUsername] = useState(""); @@ -49,12 +51,6 @@ const LceOnlineView = memo(function LceOnlineView({ } catch (e: unknown) { console.error(e); } - try { - const invitesData = await lceOnlineService.getInvites(); - setInvites(invitesData); - } catch { - setInvites([]); - } }; useEffect(() => { diff --git a/src/hooks/useLceOnlineNotifications.ts b/src/hooks/useLceOnlineNotifications.ts index b54fc60..0549009 100644 --- a/src/hooks/useLceOnlineNotifications.ts +++ b/src/hooks/useLceOnlineNotifications.ts @@ -2,30 +2,40 @@ import { useState, useEffect, useRef } from "react"; import { lceOnlineService } from "../services/LceOnlineService"; export function useLceOnlineNotifications() { const [friendRequestMessage, setFriendRequestMessage] = useState(null); + const [invites, setInvites] = useState>([]); const seenRequests = useRef>(new Set()); useEffect(() => { let pollInterval: ReturnType; + const poll = async () => { + if (!lceOnlineService.signedIn) return; + try { + const lists = await lceOnlineService.getSocialLists(); + lists.requests.forEach((r: string) => { + if (!seenRequests.current.has(r)) { + seenRequests.current.add(r); + setFriendRequestMessage(`New request from ${r}`); + } + }); + } catch (e) { } + try { + const invitesData = await lceOnlineService.getInvites(); + setInvites(invitesData); + } catch { } + }; + const init = async () => { if (lceOnlineService.signedIn) { try { const lists = await lceOnlineService.getSocialLists(); lists.requests.forEach((r: string) => seenRequests.current.add(r)); } catch (e) { } - } - - pollInterval = setInterval(async () => { - if (!lceOnlineService.signedIn) return; try { - const lists = await lceOnlineService.getSocialLists(); - lists.requests.forEach((r: string) => { - if (!seenRequests.current.has(r)) { - seenRequests.current.add(r); - setFriendRequestMessage(`New request from ${r}`); - } - }); - } catch (e) { } - }, 10000); + const invitesData = await lceOnlineService.getInvites(); + setInvites(invitesData); + } catch { } + } + pollInterval = setInterval(poll, 10000); }; init(); @@ -37,5 +47,6 @@ export function useLceOnlineNotifications() { return { friendRequestMessage, clearFriendRequestMessage: () => setFriendRequestMessage(null), + invites, }; } diff --git a/src/pages/App.tsx b/src/pages/App.tsx index b501e3f..f2e5218 100644 --- a/src/pages/App.tsx +++ b/src/pages/App.tsx @@ -71,6 +71,7 @@ export default function App() { const { friendRequestMessage, clearFriendRequestMessage, + invites, } = notifications; const [showSetup, setShowSetup] = useState(false); const [isSetupChecked, setIsSetupChecked] = useState(false); @@ -617,6 +618,7 @@ export default function App() { key="lceonline-view" addFriendTarget={addFriendTarget} onClearAddFriendTarget={() => setAddFriendTarget(null)} + invites={invites} /> )} {activeView === "skins" && }