重构:文件系统模块化架构,优化应用启动流程
This commit is contained in:
92
main.go
92
main.go
@@ -2,10 +2,13 @@ package main
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
|
||||
"go-desk/internal/filesystem"
|
||||
|
||||
"github.com/wailsapp/wails/v2"
|
||||
"github.com/wailsapp/wails/v2/pkg/menu"
|
||||
"github.com/wailsapp/wails/v2/pkg/options"
|
||||
"github.com/wailsapp/wails/v2/pkg/options/assetserver"
|
||||
)
|
||||
@@ -14,40 +17,27 @@ import (
|
||||
var assets embed.FS
|
||||
|
||||
func main() {
|
||||
// 🔒 初始化文件系统安全功能
|
||||
initFileSystemSecurity()
|
||||
|
||||
// 创建应用实例
|
||||
app := NewApp()
|
||||
|
||||
// 创建应用菜单
|
||||
appMenu := menu.NewMenu()
|
||||
|
||||
// 添加"视图"菜单
|
||||
viewMenu := appMenu.AddSubmenu("视图")
|
||||
viewMenu.AddText("重新加载", nil, func(_ *menu.CallbackData) {
|
||||
app.Reload()
|
||||
})
|
||||
viewMenu.AddSeparator()
|
||||
viewMenu.AddText("清理缓存", nil, func(_ *menu.CallbackData) {
|
||||
app.ClearCache()
|
||||
})
|
||||
|
||||
// 在 macOS 上添加默认的"编辑"菜单
|
||||
if runtime.GOOS == "darwin" {
|
||||
appMenu.Append(menu.EditMenu())
|
||||
}
|
||||
|
||||
// 创建应用配置
|
||||
// 创建应用配置(无边框窗口,自定义标题栏)
|
||||
err := wails.Run(&options.App{
|
||||
Title: "Go Desk - 数据库客户端",
|
||||
Title: "U-Desk",
|
||||
Width: 1400,
|
||||
Height: 900,
|
||||
MinWidth: 1000,
|
||||
MinHeight: 600,
|
||||
Menu: appMenu,
|
||||
Frameless: true, // 无边框窗口
|
||||
AssetServer: &assetserver.Options{
|
||||
Assets: assets,
|
||||
Assets: assets,
|
||||
Handler: filesystem.NewLocalFileHandler(),
|
||||
},
|
||||
BackgroundColour: &options.RGBA{R: 255, G: 255, B: 255, A: 1},
|
||||
OnStartup: app.Startup,
|
||||
OnShutdown: app.shutdown,
|
||||
Bind: []interface{}{
|
||||
app,
|
||||
},
|
||||
@@ -57,3 +47,59 @@ func main() {
|
||||
println("Error:", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// initFileSystemSecurity 初始化文件系统安全功能
|
||||
// 优化:并发执行初始化操作,不阻塞启动
|
||||
func initFileSystemSecurity() {
|
||||
// 获取用户数据目录
|
||||
userDataDir := getUserDataDir()
|
||||
|
||||
// 使用并发初始化文件系统安全功能
|
||||
go func() {
|
||||
// 初始化审计日志(记录到 logs 子目录)
|
||||
logDir := filepath.Join(userDataDir, "logs")
|
||||
if err := filesystem.InitAudit(logDir); err != nil {
|
||||
println("Warning: Failed to initialize audit log:", err.Error())
|
||||
}
|
||||
|
||||
// 初始化回收站
|
||||
recycleBinPath := filepath.Join(userDataDir, "recycle_bin")
|
||||
if err := filesystem.InitRecycleBin(recycleBinPath); err != nil {
|
||||
println("Warning: Failed to initialize recycle bin:", err.Error())
|
||||
}
|
||||
|
||||
// 初始化文件锁检查器
|
||||
filesystem.InitFileLockChecker()
|
||||
}()
|
||||
}
|
||||
|
||||
// getUserDataDir 获取用户数据目录
|
||||
func getUserDataDir() string {
|
||||
var basePath string
|
||||
|
||||
// 根据操作系统选择不同的基础路径
|
||||
switch runtime.GOOS {
|
||||
case "windows":
|
||||
// Windows: %APPDATA% 或 %LOCALAPPDATA%
|
||||
basePath = os.Getenv("LOCALAPPDATA")
|
||||
if basePath == "" {
|
||||
basePath = os.Getenv("APPDATA")
|
||||
}
|
||||
case "darwin":
|
||||
// macOS: ~/Library/Application Support
|
||||
homeDir, _ := os.UserHomeDir()
|
||||
basePath = filepath.Join(homeDir, "Library", "Application Support")
|
||||
default:
|
||||
// Linux: ~/.config
|
||||
homeDir, _ := os.UserHomeDir()
|
||||
basePath = filepath.Join(homeDir, ".config")
|
||||
}
|
||||
|
||||
// 确保基础路径存在
|
||||
if basePath == "" {
|
||||
basePath = "."
|
||||
}
|
||||
|
||||
// 返回应用特定的数据目录
|
||||
return filepath.Join(basePath, "u-desk")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user