feat: LCEOnline instead of LCELive

This commit is contained in:
neoapps-dev 2026-07-10 18:56:22 +03:00
parent fdb95d0d8f
commit 7edcfd33b0
3 changed files with 29 additions and 20 deletions

View file

@ -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<string[]>([]);
const [incomingReqs, setIncomingReqs] = useState<string[]>([]);
const [outgoingReqs, setOutgoingReqs] = useState<string[]>([]);
const [invites, setInvites] = useState<Array<{ from: string; sessionid: string }>>([]);
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(() => {

View file

@ -2,30 +2,40 @@ import { useState, useEffect, useRef } from "react";
import { lceOnlineService } from "../services/LceOnlineService";
export function useLceOnlineNotifications() {
const [friendRequestMessage, setFriendRequestMessage] = useState<string | null>(null);
const [invites, setInvites] = useState<Array<{ from: string; sessionid: string }>>([]);
const seenRequests = useRef<Set<string>>(new Set());
useEffect(() => {
let pollInterval: ReturnType<typeof setInterval>;
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,
};
}

View file

@ -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" && <SkinsView key="skins-view" />}