diff --git a/app.go b/app.go index 67803c6..a0b3cc9 100644 --- a/app.go +++ b/app.go @@ -16,10 +16,9 @@ type App struct { logChan chan string uploaderCTX context.Context uploaderCancel context.CancelFunc + isRun bool } -var isRun = false - func NewApp() *App { return &App{} } @@ -40,8 +39,8 @@ func (a *App) startup(ctx context.Context) { a.uploaderCTX, a.uploaderCancel = context.WithCancel(a.ctx) if config.APPConfig.IsRunOnStart { time.Sleep(time.Second) - isRun = true 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() { - if isRun { + 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 isRun { + if a.isRun { a.uploaderCancel() } + a.isRun = false + uploader.AddLog(&a.logChan, "上传程序已退出") } diff --git a/internal/config/config.go b/internal/config/config.go index b16c876..223362d 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -18,6 +18,15 @@ type Config struct { 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() { // 设置默认配置 defaultConfig := Config{ @@ -28,12 +37,12 @@ func InitConfig() { IsRunOnStart: false, CheckDir: "", } - viper.SetDefault("url", defaultConfig.Url) - viper.SetDefault("token", defaultConfig.Token) - viper.SetDefault("thread-count", defaultConfig.ThreadCount) - viper.SetDefault("handle-file-count", defaultConfig.HandleFileCount) - viper.SetDefault("is-run-on-start", defaultConfig.IsRunOnStart) - viper.SetDefault("looking-path", defaultConfig.CheckDir) + viper.SetDefault(Url, defaultConfig.Url) + viper.SetDefault(Token, defaultConfig.Token) + viper.SetDefault(ThreadCount, defaultConfig.ThreadCount) + viper.SetDefault(HandleFileCount, defaultConfig.HandleFileCount) + viper.SetDefault(IsRunOnStart, defaultConfig.IsRunOnStart) + viper.SetDefault(CheckDir, defaultConfig.CheckDir) //设置配置文件名和路径 ./config.toml viper.AddConfigPath(".") diff --git a/internal/uploader/uploader.go b/internal/uploader/uploader.go index 90d544c..0ec4af2 100644 --- a/internal/uploader/uploader.go +++ b/internal/uploader/uploader.go @@ -33,17 +33,23 @@ type Progress struct { } func StartLooking(ctx context.Context, logChan *chan string, lookingPath string) { + //推送上传进度 go func() { for { - time.Sleep(500 * time.Millisecond) + select { + case <-ctx.Done(): + return + default: + time.Sleep(500 * time.Millisecond) - var pg []Progress - progress.Range(func(key, value any) bool { - p := value.(Progress) - pg = append(pg, p) - return true - }) - runtime.EventsEmit(ctx, "progress", pg) + var pg []Progress + progress.Range(func(key, value any) bool { + p := value.(Progress) + pg = append(pg, p) + return true + }) + runtime.EventsEmit(ctx, "progress", pg) + } } }() @@ -52,7 +58,6 @@ func StartLooking(ctx context.Context, logChan *chan string, lookingPath string) select { case <-time.After(time.Minute): case <-ctx.Done(): - AddLog(logChan, "上传程序已退出") return } }