From 747b1e20a91ced22c43b46980fb69c4c9a20b832 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9A=E5=95=A6b=E6=A2=A6?= <1715109585@qq.com> Date: Thu, 9 Nov 2023 09:47:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E4=BC=98=E5=8C=96=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=9B=B4=E6=96=B0=E6=A8=A1=E5=9D=97=E4=BD=BF=E5=85=B6?= =?UTF-8?q?=E6=9B=B4=E5=8A=A0=E5=A5=BD=E7=94=A8copy=E5=8D=B3=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...64\346\226\260\346\250\241\345\235\227.go" | 59 +++++++++---------- ...6\226\260\346\250\241\345\235\227_test.go" | 34 +++++++---- 2 files changed, 53 insertions(+), 40 deletions(-) diff --git "a/GoEasyDesigner/mymodel/\350\207\252\345\212\250\346\233\264\346\226\260\346\250\241\345\235\227.go" "b/GoEasyDesigner/mymodel/\350\207\252\345\212\250\346\233\264\346\226\260\346\250\241\345\235\227.go" index c9c374c..6d0ff2b 100644 --- "a/GoEasyDesigner/mymodel/\350\207\252\345\212\250\346\233\264\346\226\260\346\250\241\345\235\227.go" +++ "b/GoEasyDesigner/mymodel/\350\207\252\345\212\250\346\233\264\346\226\260\346\250\241\345\235\227.go" @@ -17,6 +17,10 @@ import ( "time" ) +var 应用名称 = "GoEasyDesigner" +var owner = "duolabmeng6" // GitHub 仓库的所有者 +var repo = "GoEasyDesigner" // GitHub 仓库的名称 + type GithubJSONData []struct { URL string `json:"url"` AssetsURL string `json:"assets_url"` @@ -98,30 +102,30 @@ type ReleaseInfo struct { ReleaseTime string `json:"发布时间"` } -func E获取Github仓库Releases版本和更新内容(owner, repo string) *ReleaseInfo { +func E获取Github仓库Releases版本和更新内容() *ReleaseInfo { //owner := "duolabmeng6" // GitHub 仓库的所有者 //repo := "GoEasyDesigner" // GitHub 仓库的名称 - url := fmt.Sprintf("https://api.github.com/repos/%s/%s/releases", owner, repo) - resp, err := http.Get(url) - if err != nil { - fmt.Println("请求失败:", err) - - resp, err = http.Get("https://go.kenhong.com/releases_latest.json") - if err != nil && resp.StatusCode != http.StatusOK { - fmt.Println("请求失败2:", err) - return nil + var urls []string + _url := fmt.Sprintf("https://api.github.com/repos/%s/%s/releases", owner, repo) + urls = append(urls, _url) + _url = fmt.Sprintf("https://go.kenhong.com/releases_latest.json") + urls = append(urls, _url) + // 访问urls中的内容 如果第一个访问失败了 就继续下一个 + var resp *http.Response + var err error + for _, url := range urls { + resp, err = http.Get(url) + if err == nil { + if resp.StatusCode != http.StatusOK { + fmt.Println("请求失败:", resp.Status, url) + continue + } + break } - //return nil + fmt.Println("请求失败:", err) } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - fmt.Println("请求失败:", resp.Status, url) - - return nil - } - body, err := io.ReadAll(resp.Body) if err != nil { fmt.Println("读取响应失败:", err) @@ -286,14 +290,14 @@ func E更新自己MacOS应用(资源压缩包 string, 应用名称 string) (bool //println("资源压缩包", 资源压缩包) //println("应用名称", 应用名称) - //MacOs应用路径 := 取自身MacOs应用路径() + MacOs应用路径 := 取自身MacOs应用路径() //fmt.Println("MacOs应用路径", MacOs应用路径) - MacOs应用路径 := "/Users/ll/Downloads/" + 应用名称 + //MacOs应用路径 := "/Users/ll/Downloads/" + 应用名称 if MacOs应用路径 != "" { app目录父目录 := MacOs应用路径[:strings.LastIndex(MacOs应用路径, "/")] fmt.Printf("资源压缩包 %s app目录父目录%s MacOs应用路径%s \r\n", 资源压缩包, app目录父目录, MacOs应用路径) if MacOs应用路径 != "" { - 解压结果 := zip解压2(资源压缩包, app目录父目录, []string{应用名称 + "/Contents/"}) + 解压结果 := zip解压(资源压缩包, app目录父目录, []string{应用名称 + "/Contents/"}) println("解压结果", 解压结果) // 解压完成后删除压缩包 //os.Remove(资源压缩包) @@ -318,7 +322,7 @@ func E更新自己MacOS应用(资源压缩包 string, 应用名称 string) (bool return false, "应用路径为空" } -func zip解压2(压缩包的路径 string, 解压目录 string, 允许解压路径前缀 []string) bool { +func zip解压(压缩包的路径 string, 解压目录 string, 允许解压路径前缀 []string) bool { // 保持权限和软连接解压 // 允许解压路径前缀 例如 ["my_app.app/Contents/"] 不填则全部解压 @@ -474,12 +478,9 @@ func E更新自己Window应用(exe资源文件路径 string) (bool, string) { } func E检查更新_Mac() { - 应用名称 := "GoEasyDesigner" - owner := "duolabmeng6" // GitHub 仓库的所有者 - repo := "GoEasyDesigner" // GitHub 仓库的名称 下载文件夹路径 := E取用户下载文件夹路径() - info := E获取Github仓库Releases版本和更新内容(owner, repo) + info := E获取Github仓库Releases版本和更新内容() println(info.MacDownloadURL) println(下载文件夹路径) if info.Version == Version { @@ -531,11 +532,9 @@ func E检查更新_Mac() { } func E检查更新_window() { - 应用名称 := "GoEasyDesigner" - owner := "duolabmeng6" // GitHub 仓库的所有者 - repo := "GoEasyDesigner" // GitHub 仓库的名称 + 下载文件夹路径 := E取用户下载文件夹路径() - info := E获取Github仓库Releases版本和更新内容(owner, repo) + info := E获取Github仓库Releases版本和更新内容() if info == nil { zenity.Info("网络原因无法获取更新信息") return diff --git "a/GoEasyDesigner/mymodel/\350\207\252\345\212\250\346\233\264\346\226\260\346\250\241\345\235\227_test.go" "b/GoEasyDesigner/mymodel/\350\207\252\345\212\250\346\233\264\346\226\260\346\250\241\345\235\227_test.go" index fdc1e1b..74cf1c9 100644 --- "a/GoEasyDesigner/mymodel/\350\207\252\345\212\250\346\233\264\346\226\260\346\250\241\345\235\227_test.go" +++ "b/GoEasyDesigner/mymodel/\350\207\252\345\212\250\346\233\264\346\226\260\346\250\241\345\235\227_test.go" @@ -6,13 +6,20 @@ import ( "github.com/ncruces/zenity" "os/user" "path/filepath" + "runtime" "testing" ) +func Test简单(t *testing.T) { + if E是否为macOS系统() { + E检查更新_Mac() + } + if E是否为window系统() { + E检查更新_window() + } +} func TestE获取Github仓库Releases版本和更新内容(t *testing.T) { - owner := "duolabmeng6" // GitHub 仓库的所有者 - repo := "GoEasyDesigner" // GitHub 仓库的名称 - info := E获取Github仓库Releases版本和更新内容(owner, repo) + info := E获取Github仓库Releases版本和更新内容() ecore.E调试输出(info) } @@ -46,8 +53,6 @@ func Test解压缩(t *testing.T) { E更新自己MacOS应用(压缩包的路径, "GoEasyDesigner.app") } func Test更新流程MacOS(t *testing.T) { - owner := "duolabmeng6" // GitHub 仓库的所有者 - repo := "GoEasyDesigner" // GitHub 仓库的名称 usr, err := user.Current() if err != nil { panic(err) @@ -55,7 +60,7 @@ func Test更新流程MacOS(t *testing.T) { 下载文件夹路径 := filepath.Join(usr.HomeDir, "Downloads") println(下载文件夹路径) - info := E获取Github仓库Releases版本和更新内容(owner, repo) + info := E获取Github仓库Releases版本和更新内容() err = E下载带进度回调(info.MacDownloadURL, 下载文件夹路径+"/mactest.zip", func(进度 float64) { // 进度回调函数 @@ -97,12 +102,9 @@ func Test更新流程Window(t *testing.T) { } func Test整个流程(t *testing.T) { - 应用名称 := "GoEasyDesigner" - owner := "duolabmeng6" // GitHub 仓库的所有者 - repo := "GoEasyDesigner" // GitHub 仓库的名称 下载文件夹路径 := E取用户下载文件夹路径() - info := E获取Github仓库Releases版本和更新内容(owner, repo) + info := E获取Github仓库Releases版本和更新内容() println(info.MacDownloadURL) println(下载文件夹路径) if info.Version == Version { @@ -152,3 +154,15 @@ func Test整个流程(t *testing.T) { flag, s := E更新自己MacOS应用(下载文件夹路径+"/"+应用名称+"_MacOS.zip", 应用名称+".app") println(flag, s) } + +func E是否为window系统() bool { + return runtime.GOOS == "windows" +} + +func E是否为macOS系统() bool { + return runtime.GOOS == "darwin" +} + +func E是否为UbuntuLinux系统() bool { + return runtime.GOOS == "linux" +}