feat: 添加版本号显示 优化代码
All checks were successful
构建上传工具 / build-tool (push) Successful in 1m40s

This commit is contained in:
2025-10-18 08:58:23 +08:00
parent ed220996a7
commit 19bee04ecb
2 changed files with 55 additions and 70 deletions

View File

@@ -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

121
main.go
View File

@@ -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 {