/** * 账号管理 IPC 处理器 * 提供平台账号的增删改查功能 */ import { ipcMain } from 'electron'; import { Log } from '../log/main'; import DbMain from '../db/main'; import { PlatformAccount } from './types'; /** * 支持的平台列表 */ const SUPPORTED_PLATFORMS = [ { key: 'douyin', name: '抖音' }, { key: 'kuaishou', name: '快手' }, { key: 'shipin', name: '视频号' }, { key: 'xiaohongshu', name: '小红书' }, ]; /** * 获取支持的平台列表 */ ipcMain.handle('account:getSupportedPlatforms', async () => { return { success: true, data: SUPPORTED_PLATFORMS }; }); /** * 获取所有账号列表 */ ipcMain.handle('account:list', async (event, params?: { platform?: string }) => { try { let sql = 'SELECT * FROM platform_accounts'; const sqlParams: any[] = []; if (params?.platform) { sql += ' WHERE platform = ?'; sqlParams.push(params.platform); } sql += ' ORDER BY updatedAt DESC'; const accounts = await DbMain.select(sql, sqlParams); // 不返回 cookies 原文(太长),只返回是否有 cookies const safeAccounts = accounts.map((a: any) => ({ ...a, hasCookies: !!a.cookies && a.cookies.length > 10, cookies: undefined, // 移除 cookies 原文 tokens: undefined, // 移除 tokens 原文 })); return { success: true, data: safeAccounts }; } catch (error: any) { Log.error('account:list error', error); return { success: false, message: error.message }; } }); /** * 添加新账号 */ ipcMain.handle('account:add', async (event, params: { platform: string; nickname?: string }) => { try { const { platform, nickname } = params; // 验证平台 if (!SUPPORTED_PLATFORMS.find(p => p.key === platform)) { return { success: false, message: `不支持的平台: ${platform}` }; } const now = Date.now(); const accountId = await DbMain.insert( `INSERT INTO platform_accounts (platform, nickname, loginStatus, createdAt, updatedAt) VALUES (?, ?, ?, ?, ?)`, [platform, nickname || '未登录', 'pending', now, now] ); Log.info(`新账号已创建: platform=${platform}, id=${accountId}`); return { success: true, data: { id: accountId, platform, nickname: nickname || '未登录', loginStatus: 'pending' } }; } catch (error: any) { Log.error('account:add error', error); return { success: false, message: error.message }; } }); /** * 删除账号 */ ipcMain.handle('account:delete', async (event, params: { accountId: number }) => { try { const { accountId } = params; const account = await DbMain.first( 'SELECT * FROM platform_accounts WHERE id = ?', [accountId] ); if (!account) { return { success: false, message: '账号不存在' }; } await DbMain.execute('DELETE FROM platform_accounts WHERE id = ?', [accountId]); Log.info(`账号已删除: id=${accountId}, platform=${account.platform}`); return { success: true, message: '账号已删除' }; } catch (error: any) { Log.error('account:delete error', error); return { success: false, message: error.message }; } }); /** * 更新账号信息 */ ipcMain.handle('account:update', async (event, params: { accountId: number; nickname?: string }) => { try { const { accountId, nickname } = params; const now = Date.now(); const updates: string[] = ['updatedAt = ?']; const values: any[] = [now]; if (nickname !== undefined) { updates.push('nickname = ?'); values.push(nickname); } values.push(accountId); await DbMain.execute( `UPDATE platform_accounts SET ${updates.join(', ')} WHERE id = ?`, values ); return { success: true, message: '账号已更新' }; } catch (error: any) { Log.error('account:update error', error); return { success: false, message: error.message }; } }); /** * 获取单个账号详情 */ ipcMain.handle('account:get', async (event, params: { accountId: number }) => { try { const account = await DbMain.first( 'SELECT * FROM platform_accounts WHERE id = ?', [params.accountId] ); if (!account) { return { success: false, message: '账号不存在' }; } return { success: true, data: { ...account, hasCookies: !!account.cookies && account.cookies.length > 10, cookies: undefined, tokens: undefined, } }; } catch (error: any) { Log.error('account:get error', error); return { success: false, message: error.message }; } });