package main import ( "cr-launcher/utils" "fmt" "math/rand" "os/exec" "time" "github.com/fatih/color" "github.com/vbauerster/mpb/v8" "github.com/vbauerster/mpb/v8/decor" ) func main() { // fmt.Println("xxxxxxxxxxxxx") // http 获取版本信息 // 比较远程版本与本地版本 // http下载文件,更新版本信息 // 解压 // err := utils.WriteConfig(&utils.Config{ // Version: "2.0.0", // Url: "http://www.baidu.com", // }) // fmt.Println(err) // fmt.Println(config) // fmt.Println(path.Base("http://www.dddfd.com/windows.zip")) version, err := utils.GetLatest("http://127.0.0.1:8085/cr/version/latest") config, _ := utils.ReadConfig() if config == nil { // fmt.Println(err) fmt.Println("配置文件错误") return } // 服务器最新版本有变动 更新 if version.Version != config.Version { // todo fmt.Println("更新") } // 运行应用程序 cmd := exec.Command("data/cr.exe") data, err := cmd.Output() if err != nil { fmt.Println(err) fmt.Println("启动失败") return } fmt.Println(data) fmt.Println("启动成功") fmt.Println(err) fmt.Println(config) // to support color in Windows following both options are required p := mpb.New( mpb.WithOutput(color.Output), mpb.WithAutoRefresh(), ) red, green := color.New(color.FgRed), color.New(color.FgGreen) fmt.Println("应用更新中...") task := "windows.zip" queue := make([]*mpb.Bar, 2) queue[0] = p.AddBar(rand.Int63n(201)+100, mpb.PrependDecorators( decor.Name(task, decor.WC{C: decor.DindentRight | decor.DextraSpace}), decor.Name("下载中:", decor.WCSyncSpaceR), decor.CountersNoUnit("%d / %d", decor.WCSyncWidth), ), mpb.AppendDecorators( decor.OnComplete(decor.Percentage(decor.WC{W: 5}), "done"), ), ) queue[1] = p.AddBar(rand.Int63n(101)+100, mpb.BarQueueAfter(queue[0]), // this bar is queued mpb.BarFillerClearOnComplete(), mpb.PrependDecorators( decor.Name(task, decor.WC{C: decor.DindentRight | decor.DextraSpace}), decor.OnCompleteMeta( decor.OnComplete( decor.Meta(decor.Name("安装中:", decor.WCSyncSpaceR), toMetaFunc(red)), "更新完成!", ), toMetaFunc(green), ), decor.OnComplete(decor.EwmaETA(decor.ET_STYLE_MMSS, 0, decor.WCSyncWidth), ""), ), mpb.AppendDecorators( decor.OnComplete(decor.Percentage(decor.WC{W: 5}), ""), ), ) go func() { for _, b := range queue { complete(b) } }() p.Wait() } func complete(bar *mpb.Bar) { max := 100 * time.Millisecond for !bar.Completed() { // start variable is solely for EWMA calculation // EWMA's unit of measure is an iteration's duration start := time.Now() time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) // we need to call EwmaIncrement to fulfill ewma decorator's contract bar.EwmaIncrInt64(rand.Int63n(5)+1, time.Since(start)) } } func toMetaFunc(c *color.Color) func(string) string { return func(s string) string { return c.Sprint(s) } }