From 19bee04ecb69a5048542e9806d8932604a4717bc Mon Sep 17 00:00:00 2001 From: YGXB_net Date: Sat, 18 Oct 2025 08:58:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=E6=98=BE=E7=A4=BA=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/build_tool.yaml | 2 +- main.go | 123 ++++++++++++++----------------- 2 files changed, 55 insertions(+), 70 deletions(-) diff --git a/.gitea/workflows/build_tool.yaml b/.gitea/workflows/build_tool.yaml index 6fe968a..1530343 100644 --- a/.gitea/workflows/build_tool.yaml +++ b/.gitea/workflows/build_tool.yaml @@ -42,7 +42,7 @@ jobs: go env -w GOARCH=amd64 go env -w GOOS=windows go mod tidy - go build -ldflags="-s -w -H windowsgui" -o 上传工具.exe + go build -ldflags="-s -w -H windowsgui -X 'main.version=$(TZ=Asia/Shanghai date +"%m%d%H%M")'" -o 上传工具.exe - name: 上传构建文件 uses: actions/upload-artifact@v3 diff --git a/main.go b/main.go index 43b4dae..d617315 100644 --- a/main.go +++ b/main.go @@ -23,41 +23,55 @@ import ( "golang.org/x/sync/errgroup" ) -var isRun = false -var logText = widget.NewMultiLineEntry() -var ctx, cancel = context.WithCancel(context.Background()) +var ( + version = "dev" + isRun = false + logText = widget.NewMultiLineEntry() + ctx, cancel = context.WithCancel(context.Background()) +) func main() { + //初始化配置 config.InitConfig() - myApp := app.New() - myWindow := myApp.NewWindow("抖音数据上传工具") - myWindow.Resize(fyne.NewSize(930, 600)) + a := app.New() + newWindow := a.NewWindow("抖音数据上传工具 - 版本" + version) + newWindow.Resize(fyne.NewSize(930, 600)) logText.Scroll = container.ScrollVerticalOnly - // 创建界面组件 + // URL输入组件 urlEntry := widget.NewEntry() urlEntry.SetPlaceHolder("http://127.0.0.1:8080") urlEntry.Text = config.APPConfig.Url urlEntry.OnChanged = func(s string) { config.WriteConfig("url", urlEntry.Text) } - + //Token输入组件 tokenEntry := widget.NewEntry() tokenEntry.SetPlaceHolder("请输入Token") tokenEntry.Text = config.APPConfig.Token tokenEntry.OnChanged = func(s string) { config.WriteConfig("token", tokenEntry.Text) } - + //目录选择输入组件 selectedDirLabel := widget.NewEntry() selectedDirLabel.SetPlaceHolder("未选择目录(默认为程序运行目录)") selectedDirLabel.Text = config.APPConfig.LookingPath selectedDirLabel.OnChanged = func(s string) { config.WriteConfig("looking-path", selectedDirLabel.Text) } - + //目录选择按钮 + selectDirBtn := widget.NewButton("选择检测目录", func() { + // 调用CGO实现的Windows原生对话框 + selectedPath := folder.OpenFolderDialog() + if selectedPath == "" { + return + } + selectedDirLabel.SetText(selectedPath) + config.WriteConfig("looking-path", selectedPath) + }) + //上传线程数输入组件 threadCountLabel := widget.NewEntry() threadCountLabel.SetPlaceHolder("10") threadCountLabel.Text = strconv.Itoa(config.APPConfig.ThreadCount) @@ -68,7 +82,7 @@ func main() { } config.WriteConfig("thread-count", i) } - + //同时处理文件数输入组件 handleFileCountLabel := widget.NewEntry() handleFileCountLabel.SetPlaceHolder("50") handleFileCountLabel.Text = strconv.Itoa(config.APPConfig.HandleFileCount) @@ -80,24 +94,13 @@ func main() { config.WriteConfig("handle-file-count", i) } + //是否启动程序时启动上传程序组件 isRunOnStartWidget := widget.NewCheck("启动程序时启动上传程序", func(b bool) { config.WriteConfig("is-run-on-start", b) }) isRunOnStartWidget.Checked = config.APPConfig.IsRunOnStart - - // 使用Windows原生目录选择按钮 - selectDirBtn := widget.NewButton("选择检测目录", func() { - // 调用CGO实现的Windows原生对话框 - selectedPath := folder.OpenFolderDialog() - if selectedPath == "" { - return - } - selectedDirLabel.SetText(selectedPath) - config.WriteConfig("looking-path", selectedPath) - }) - - // 开始运行按钮 - startBtn := widget.NewButton("开始运行", func() { + //开始运行按钮 + startRun := func() { s := "===============================" AddLog(s) @@ -114,32 +117,14 @@ func main() { isRun = true go StartLooking(ctx, config.APPConfig.LookingPath) - }) - + } + startBtn := widget.NewButton("开始运行", startRun) + //停止运行按钮 stopBtn := widget.NewButton("停止运行", func() { cancel() ctx, cancel = context.WithCancel(context.Background()) isRun = false }) - - // 按钮状态同步 - go func() { - for { - if isRun && (!startBtn.Disabled() || stopBtn.Disabled()) { - fyne.Do(func() { - startBtn.Disable() - stopBtn.Enable() - }) - } else if !isRun && (startBtn.Disabled() || !stopBtn.Disabled()) { - fyne.Do(func() { - startBtn.Enable() - stopBtn.Disable() - }) - } - time.Sleep(100 * time.Microsecond) - } - }() - // 清除日志按钮 clearLogBtn := widget.NewButton("清除日志", func() { logText.SetText("") @@ -188,36 +173,39 @@ func main() { nil, nil, nil, container.NewScroll(logText), ) - // 使用HSplit容器创建可调整大小的左右分割布局 splitContainer := container.NewHSplit(leftPanel, rightPanel) splitContainer.SetOffset(0.35) // 左侧占35%宽度 + // 按钮状态同步 + go func() { + for { + if isRun && (!startBtn.Disabled() || stopBtn.Disabled()) { + fyne.Do(func() { + startBtn.Disable() + stopBtn.Enable() + }) + } else if !isRun && (startBtn.Disabled() || !stopBtn.Disabled()) { + fyne.Do(func() { + startBtn.Enable() + stopBtn.Disable() + }) + } + time.Sleep(100 * time.Microsecond) + } + }() + + //在程序启动时运行上传程序 go func() { if !config.APPConfig.IsRunOnStart { return } time.Sleep(time.Second) - s := "===============================" - - AddLog(s) - if strings.TrimSpace(tokenEntry.Text) == "" { - AddLog("错误:请输入Token") - return - } - AddLog(fmt.Sprintf("服务器地址:%s", config.APPConfig.Url)) - AddLog(fmt.Sprintf("Token:%s", config.APPConfig.Token)) - AddLog(fmt.Sprintf("检测目录:%s", config.APPConfig.LookingPath)) - AddLog(fmt.Sprintf("同时处理文件数:%v", config.APPConfig.HandleFileCount)) - AddLog(fmt.Sprintf("单文件上传线程:%v", config.APPConfig.ThreadCount)) - AddLog(s) - - isRun = true - go StartLooking(ctx, config.APPConfig.LookingPath) + startRun() }() - myWindow.SetContent(splitContainer) - myWindow.ShowAndRun() + newWindow.SetContent(splitContainer) + newWindow.ShowAndRun() } func AddLog(message string) { @@ -228,10 +216,7 @@ func AddLog(message string) { }) } -// // 上传数据代码 -// - var httpClient = &http.Client{ Transport: &http.Transport{ MaxIdleConns: 200, @@ -338,7 +323,7 @@ func StartLooking(ctx context.Context, lookingPath string) { AddLog("所有任务执行完成!") } - AddLog(fmt.Sprintf("上传完成,耗时:%s", time.Since(start))) + AddLog(fmt.Sprintf("上传完成,耗时:%s", time.Since(start).String())) } for {