feat(log): 实现日志文件持久化和全局进度条
- 新增日志文件保存和加载功能 - 实现全局进度条组件 - 优化初始化界面布局 - 更新设置界面,增加系统日志查看按钮
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { app, BrowserWindow, ipcMain, dialog } from 'electron'
|
||||
import * as path from 'path'
|
||||
import * as fs from 'fs'
|
||||
import { getAppRoot, checkEnvironment } from './services/environmentService'
|
||||
import { setMainWindow as setDownloadMainWindow } from './services/downloadService'
|
||||
import { setMainWindow as setPythonMainWindow, downloadPython, installDependencies, startBackend } from './services/pythonService'
|
||||
@@ -108,6 +109,44 @@ ipcMain.handle('update-backend', async (event, repoUrl = 'https://github.com/DLm
|
||||
return cloneBackend(appRoot, repoUrl) // 使用相同的逻辑,会自动判断是pull还是clone
|
||||
})
|
||||
|
||||
// 日志文件操作
|
||||
ipcMain.handle('save-logs-to-file', async (event, logs: string) => {
|
||||
try {
|
||||
const appRoot = getAppRoot()
|
||||
const logsDir = path.join(appRoot, 'logs')
|
||||
|
||||
// 确保logs目录存在
|
||||
if (!fs.existsSync(logsDir)) {
|
||||
fs.mkdirSync(logsDir, { recursive: true })
|
||||
}
|
||||
|
||||
const logFilePath = path.join(logsDir, 'app.log')
|
||||
fs.writeFileSync(logFilePath, logs, 'utf8')
|
||||
console.log(`日志已保存到: ${logFilePath}`)
|
||||
} catch (error) {
|
||||
console.error('保存日志文件失败:', error)
|
||||
throw error
|
||||
}
|
||||
})
|
||||
|
||||
ipcMain.handle('load-logs-from-file', async () => {
|
||||
try {
|
||||
const appRoot = getAppRoot()
|
||||
const logFilePath = path.join(appRoot, 'logs', 'app.log')
|
||||
|
||||
if (fs.existsSync(logFilePath)) {
|
||||
const logs = fs.readFileSync(logFilePath, 'utf8')
|
||||
console.log(`从文件加载日志: ${logFilePath}`)
|
||||
return logs
|
||||
}
|
||||
|
||||
return null
|
||||
} catch (error) {
|
||||
console.error('加载日志文件失败:', error)
|
||||
return null
|
||||
}
|
||||
})
|
||||
|
||||
// 应用生命周期
|
||||
app.whenReady().then(createWindow)
|
||||
|
||||
|
||||
@@ -19,6 +19,10 @@ contextBridge.exposeInMainWorld('electronAPI', {
|
||||
updateBackend: (repoUrl?: string) => ipcRenderer.invoke('update-backend', repoUrl),
|
||||
startBackend: () => ipcRenderer.invoke('start-backend'),
|
||||
|
||||
// 日志文件操作
|
||||
saveLogsToFile: (logs: string) => ipcRenderer.invoke('save-logs-to-file', logs),
|
||||
loadLogsFromFile: () => ipcRenderer.invoke('load-logs-from-file'),
|
||||
|
||||
// 监听下载进度
|
||||
onDownloadProgress: (callback: (progress: any) => void) => {
|
||||
ipcRenderer.on('download-progress', (_, progress) => callback(progress))
|
||||
|
||||
Reference in New Issue
Block a user