Private
Public Access
1
0

重构:文件系统模块化架构,优化应用启动流程

This commit is contained in:
2026-01-28 00:28:54 +08:00
parent 4a9b25a505
commit 8c577f70e7
123 changed files with 32030 additions and 967 deletions

92
main.go
View File

@@ -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")
}