feat: v0.3.0 版本 - SSH终端、SFTP、端口转发功能实现

核心功能:
- SSH终端: 密码/密钥认证、XTerm.js终端、多主题配色、IP高亮
- SFTP管理: 双栏文件管理、上传下载、传输队列
- 端口转发: 本地/远程转发、SOCKS5动态代理、规则管理

架构改进:
- 拆分大型组件 (SFTPView/TabBar/Sidebar)
- 添加统一日志和错误处理
- 修复React严格模式下的终端黑屏问题

UI更新:
- 新增端口转发视图
- 更新UI预览文档
- 左侧栏右键菜单支持SFTP快捷打开
This commit is contained in:
Logan.Li committed 2026-04-06 01:20:47 +08:00
1 parent cf1c054381
commit 484d850abd
105 files changed
+25330 -64

No files matched your search

+74
View File
@@ -0,0 +1,74 @@
/**
* Session IPC Handlers
* 处理会话的 CRUD 操作
*/
import { ipcMain, IpcMainInvokeEvent } from 'electron'
import type { DatabaseService } from '../services/database-service'
// IPC channel names
export const SESSION_CHANNELS = {
CREATE: 'session:create',
GET_ALL: 'session:getAll',
GET_BY_ID: 'session:getById',
UPDATE: 'session:update',
DELETE: 'session:delete',
} as const
export interface SessionIPCOptions {
dbService: DatabaseService
}
export function registerSessionIPCHandlers(options: SessionIPCOptions): void {
const { dbService } = options
// Create session
ipcMain.handle(SESSION_CHANNELS.CREATE, async (_event: IpcMainInvokeEvent, session) => {
try {
const result = dbService.createSession(session)
return { success: true, session: result }
} catch (error: any) {
return { success: false, error: error.message }
}
})
// Get all sessions
ipcMain.handle(SESSION_CHANNELS.GET_ALL, async () => {
try {
const sessions = dbService.getAllSessions()
return { success: true, sessions }
} catch (error: any) {
return { success: false, error: error.message }
}
})
// Get session by ID
ipcMain.handle(SESSION_CHANNELS.GET_BY_ID, async (_event: IpcMainInvokeEvent, id: string) => {
try {
const session = dbService.getSessionById(id)
return { success: true, session }
} catch (error: any) {
return { success: false, error: error.message }
}
})
// Update session
ipcMain.handle(SESSION_CHANNELS.UPDATE, async (_event: IpcMainInvokeEvent, id: string, updates: any) => {
try {
const result = dbService.updateSession(id, updates)
return { success: true, session: result }
} catch (error: any) {
return { success: false, error: error.message }
}
})
// Delete session
ipcMain.handle(SESSION_CHANNELS.DELETE, async (_event: IpcMainInvokeEvent, id: string) => {
try {
dbService.deleteSession(id)
return { success: true }
} catch (error: any) {
return { success: false, error: error.message }
}
})
}