Files
dypid-client/app.go
T
ygxbnet 75de353af6
构建上传工具 / build-tool (push) Successful in 1m20s
refactor(uploader): 优化文件上传处理逻辑和资源管理
- 简化响应体关闭逻辑,移除不必要的nil检查
- 调整后台状态推送频率,从500ms改为250ms
- 修复前端事件监听器注册顺序
- 移除未使用的进度变量
- 优化goroutine中的任务执行逻辑
- 改进文件路径显示,统一使用文件名而非完整路径
- 添加waitgroup等待确保资源正确释放
2026-04-28 01:07:43 +08:00

87 lines
1.8 KiB
Go

package main
import (
"context"
"dypid-client/internal/config"
"dypid-client/internal/uploader"
"fmt"
"time"
"github.com/wailsapp/wails/v2/pkg/runtime"
)
// App struct
type App struct {
ctx context.Context
logChan chan string
uploaderCTX context.Context
uploaderCancel context.CancelFunc
isRun bool
}
func NewApp() *App {
return &App{}
}
// startup 程序初始化
func (a *App) startup(ctx context.Context) {
a.ctx = ctx
// 后台 goroutine 持续推送日志
a.logChan = make(chan string, 100)
go func() {
for log := range a.logChan {
runtime.EventsEmit(a.ctx, "log", log)
time.Sleep(time.Millisecond)
}
}()
// 后台 goroutine 持续推送运行状态
go func() {
for {
time.Sleep(250 * time.Millisecond)
runtime.EventsEmit(a.ctx, "is-run", a.isRun)
}
}()
//在程序启动时运行上传程序
if config.APPConfig.IsRunOnStart {
time.Sleep(time.Second)
a.uploaderCTX, a.uploaderCancel = context.WithCancel(a.ctx)
go uploader.StartLooking(a.uploaderCTX, &a.logChan, config.APPConfig.CheckDir)
a.isRun = true
}
}
// SelectPath 打开选择路径弹框
func (a *App) SelectPath() string {
dialog, _ := runtime.OpenDirectoryDialog(a.ctx, runtime.OpenDialogOptions{})
fmt.Println("选择路径:", dialog)
return dialog
}
func (a *App) GetConfig() config.Config {
return config.APPConfig
}
func (a *App) WriteConfig(key string, value any) {
config.WriteConfig(key, value)
}
func (a *App) StartUpload() {
if a.isRun {
return
}
a.uploaderCTX, a.uploaderCancel = context.WithCancel(a.ctx)
go uploader.StartLooking(a.uploaderCTX, &a.logChan, config.APPConfig.CheckDir)
a.isRun = true
}
func (a *App) StopUpload() {
if a.isRun {
a.uploaderCancel()
}
a.isRun = false
uploader.AddLog(&a.logChan, "上传程序已退出")
}