init
Some checks failed
Build and Release / build (push) Has been cancelled

This commit is contained in:
2026-02-21 01:48:48 +01:00
commit 64fe49e58e
47 changed files with 13695 additions and 0 deletions

View File

@@ -0,0 +1,175 @@
import React, { createContext, useContext, useState, useEffect } from 'react';
export interface Account {
_id: string;
steamId: string;
personaName: string;
loginName?: string;
steamLoginSecure?: string;
loginConfig?: any;
sessionUpdatedAt?: string;
autoCheckCooldown: boolean;
avatar: string;
localAvatar?: string;
profileUrl: string;
status: string;
vacBanned: boolean;
gameBans: number;
lastBanCheck: string;
lastScrapeTime?: string;
cooldownExpiresAt?: string;
authError?: boolean;
notes?: string;
}
export interface ServerConfig {
url: string;
token?: string;
serverSteamId?: string;
enabled: boolean;
}
interface AccountsContextType {
accounts: Account[];
serverConfig: ServerConfig | null;
isLoading: boolean;
isSyncing: boolean;
addAccount: (data: { identifier: string }) => Promise<void>;
updateAccount: (id: string, data: Partial<Account>) => Promise<void>;
deleteAccount: (id: string) => Promise<void>;
switchAccount: (loginName: string) => Promise<void>;
openSteamLogin: (steamId: string) => Promise<void>;
shareAccountWithUser: (steamId: string, targetSteamId: string) => Promise<any>;
// Server Methods
updateServerConfig: (config: Partial<ServerConfig>) => Promise<void>;
loginToServer: () => Promise<void>;
syncNow: () => Promise<void>;
getCommunityAccounts: () => Promise<any[]>;
getServerUsers: () => Promise<any[]>;
refreshAccounts: (showLoading?: boolean) => Promise<void>;
}
const AccountsContext = createContext<AccountsContextType | undefined>(undefined);
export const AccountsProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const [accounts, setAccounts] = useState<Account[]>([]);
const [serverConfig, setServerConfig] = useState<ServerConfig | null>(null);
const [isLoading, setIsLoading] = useState(true);
const [isSyncing, setIsSyncing] = useState(false);
const refreshAccounts = async (showLoading = false) => {
if (showLoading) setIsLoading(true);
try {
const api = (window as any).electronAPI;
if (!api) {
console.warn("[useAccounts] electronAPI not found in window");
return;
}
console.log("[useAccounts] Fetching data from main process...");
const accData = await api.getAccounts();
const configData = await api.getServerConfig();
setAccounts(Array.isArray(accData) ? accData : []);
setServerConfig(configData || null);
} catch (error) {
console.error("[useAccounts] Error loading accounts:", error);
} finally {
setIsLoading(false);
}
};
useEffect(() => {
refreshAccounts(true);
const api = (window as any).electronAPI;
if (api?.onAccountsUpdated) {
const cleanup = api.onAccountsUpdated((updatedAccounts: Account[]) => {
setAccounts(Array.isArray(updatedAccounts) ? updatedAccounts : []);
});
return typeof cleanup === 'function' ? cleanup : undefined;
}
}, []);
const syncNow = async () => {
setIsSyncing(true);
try {
await (window as any).electronAPI.syncNow();
await refreshAccounts();
} catch (e) {
console.error("[useAccounts] Sync failed", e);
} finally {
setIsSyncing(false);
}
};
const addAccount = async (data: { identifier: string }) => {
await (window as any).electronAPI.addAccount(data);
await refreshAccounts();
await syncNow();
};
const updateAccount = async (id: string, data: Partial<Account>) => {
await (window as any).electronAPI.updateAccount(id, data);
await refreshAccounts();
};
const deleteAccount = async (id: string) => {
if (!window.confirm("Are you sure you want to remove this account?")) return;
await (window as any).electronAPI.deleteAccount(id);
await refreshAccounts();
};
const switchAccount = async (loginName: string) => {
if (!loginName) return;
await (window as any).electronAPI.switchAccount(loginName);
};
const openSteamLogin = async (steamId: string) => {
await (window as any).electronAPI.openSteamLogin(steamId);
await syncNow();
};
const shareAccountWithUser = async (steamId: string, targetSteamId: string) => {
const res = await (window as any).electronAPI.shareAccountWithUser(steamId, targetSteamId);
await syncNow();
return res;
};
const updateServerConfig = async (config: Partial<ServerConfig>) => {
const updated = await (window as any).electronAPI.updateServerConfig(config);
setServerConfig(updated);
};
const loginToServer = async () => {
await (window as any).electronAPI.loginToServer();
await refreshAccounts();
await syncNow();
};
const getCommunityAccounts = async () => {
return await (window as any).electronAPI.getCommunityAccounts();
};
const getServerUsers = async () => {
return await (window as any).electronAPI.getServerUsers();
};
return (
<AccountsContext.Provider value={{
accounts, serverConfig, isLoading, isSyncing, addAccount, updateAccount, deleteAccount,
switchAccount, openSteamLogin, updateServerConfig, loginToServer,
getCommunityAccounts, getServerUsers, shareAccountWithUser, syncNow, refreshAccounts
}}>
{children}
</AccountsContext.Provider>
);
};
export const useAccounts = () => {
const context = useContext(AccountsContext);
if (context === undefined) {
throw new Error('useAccounts must be used within an AccountsProvider');
}
return context;
};