refactor(app): 重构应用状态管理和配置常量定义

- 将全局变量 isRun 移动到 App 结构体内部作为实例字段
- 在 config.go 中定义配置键名为常量,提高代码可维护性
- 使用结构体实例字段替代全局变量管理上传状态
- 修改 StartLooking 函数中的上下文取消处理逻辑
- 移除上传程序退出日志的重复记录
This commit is contained in:
2026-04-27 21:43:37 +08:00
parent 987f0236a9
commit d4cc335fbf
3 changed files with 36 additions and 20 deletions
+7 -5
View File
@@ -16,10 +16,9 @@ type App struct {
logChan chan string logChan chan string
uploaderCTX context.Context uploaderCTX context.Context
uploaderCancel context.CancelFunc uploaderCancel context.CancelFunc
isRun bool
} }
var isRun = false
func NewApp() *App { func NewApp() *App {
return &App{} return &App{}
} }
@@ -40,8 +39,8 @@ func (a *App) startup(ctx context.Context) {
a.uploaderCTX, a.uploaderCancel = context.WithCancel(a.ctx) a.uploaderCTX, a.uploaderCancel = context.WithCancel(a.ctx)
if config.APPConfig.IsRunOnStart { if config.APPConfig.IsRunOnStart {
time.Sleep(time.Second) time.Sleep(time.Second)
isRun = true
go uploader.StartLooking(a.uploaderCTX, &a.logChan, config.APPConfig.CheckDir) go uploader.StartLooking(a.uploaderCTX, &a.logChan, config.APPConfig.CheckDir)
a.isRun = true
} }
} }
@@ -62,15 +61,18 @@ func (a *App) WriteConfig(key string, value any) {
} }
func (a *App) StartUpload() { func (a *App) StartUpload() {
if isRun { if a.isRun {
return return
} }
a.uploaderCTX, a.uploaderCancel = context.WithCancel(a.ctx) a.uploaderCTX, a.uploaderCancel = context.WithCancel(a.ctx)
go uploader.StartLooking(a.uploaderCTX, &a.logChan, config.APPConfig.CheckDir) go uploader.StartLooking(a.uploaderCTX, &a.logChan, config.APPConfig.CheckDir)
a.isRun = true
} }
func (a *App) StopUpload() { func (a *App) StopUpload() {
if isRun { if a.isRun {
a.uploaderCancel() a.uploaderCancel()
} }
a.isRun = false
uploader.AddLog(&a.logChan, "上传程序已退出")
} }
+15 -6
View File
@@ -18,6 +18,15 @@ type Config struct {
var APPConfig Config var APPConfig Config
const (
Url = "url"
Token = "token"
ThreadCount = "thread-count"
HandleFileCount = "handle-file-count"
IsRunOnStart = "is-run-on-start"
CheckDir = "check-dir"
)
func InitConfig() { func InitConfig() {
// 设置默认配置 // 设置默认配置
defaultConfig := Config{ defaultConfig := Config{
@@ -28,12 +37,12 @@ func InitConfig() {
IsRunOnStart: false, IsRunOnStart: false,
CheckDir: "", CheckDir: "",
} }
viper.SetDefault("url", defaultConfig.Url) viper.SetDefault(Url, defaultConfig.Url)
viper.SetDefault("token", defaultConfig.Token) viper.SetDefault(Token, defaultConfig.Token)
viper.SetDefault("thread-count", defaultConfig.ThreadCount) viper.SetDefault(ThreadCount, defaultConfig.ThreadCount)
viper.SetDefault("handle-file-count", defaultConfig.HandleFileCount) viper.SetDefault(HandleFileCount, defaultConfig.HandleFileCount)
viper.SetDefault("is-run-on-start", defaultConfig.IsRunOnStart) viper.SetDefault(IsRunOnStart, defaultConfig.IsRunOnStart)
viper.SetDefault("looking-path", defaultConfig.CheckDir) viper.SetDefault(CheckDir, defaultConfig.CheckDir)
//设置配置文件名和路径 ./config.toml //设置配置文件名和路径 ./config.toml
viper.AddConfigPath(".") viper.AddConfigPath(".")
+6 -1
View File
@@ -33,8 +33,13 @@ type Progress struct {
} }
func StartLooking(ctx context.Context, logChan *chan string, lookingPath string) { func StartLooking(ctx context.Context, logChan *chan string, lookingPath string) {
//推送上传进度
go func() { go func() {
for { for {
select {
case <-ctx.Done():
return
default:
time.Sleep(500 * time.Millisecond) time.Sleep(500 * time.Millisecond)
var pg []Progress var pg []Progress
@@ -45,6 +50,7 @@ func StartLooking(ctx context.Context, logChan *chan string, lookingPath string)
}) })
runtime.EventsEmit(ctx, "progress", pg) runtime.EventsEmit(ctx, "progress", pg)
} }
}
}() }()
for { for {
@@ -52,7 +58,6 @@ func StartLooking(ctx context.Context, logChan *chan string, lookingPath string)
select { select {
case <-time.After(time.Minute): case <-time.After(time.Minute):
case <-ctx.Done(): case <-ctx.Done():
AddLog(logChan, "上传程序已退出")
return return
} }
} }