🎨 自动更新下载安装包时优先使用 GitHub Releases Fix https://github.com/siyuan-note/siyuan/issues/6435

This commit is contained in:
Liang Ding 2022-11-01 10:06:32 +08:00
parent 1fa2140bc3
commit b87a6cd57d
No known key found for this signature in database
GPG key ID: 136F30F901A2231D

View file

@ -62,12 +62,12 @@ func getNewVerInstallPkgPath() string {
return ""
}
downloadPkgURL, checksum, err := getUpdatePkg()
if nil != err || "" == downloadPkgURL || "" == checksum {
downloadPkgURLs, checksum, err := getUpdatePkg()
if nil != err || 1 > len(downloadPkgURLs) || "" == checksum {
return ""
}
pkg := path.Base(downloadPkgURL)
pkg := path.Base(downloadPkgURLs[0])
ret := filepath.Join(util.TempDir, "install", pkg)
localChecksum, _ := sha256Hash(ret)
if checksum != localChecksum {
@ -92,21 +92,32 @@ func checkDownloadInstallPkg() {
checkDownloadInstallPkgLock.Lock()
defer checkDownloadInstallPkgLock.Unlock()
downloadPkgURL, checksum, err := getUpdatePkg()
if nil != err || "" == downloadPkgURL || "" == checksum {
downloadPkgURLs, checksum, err := getUpdatePkg()
if nil != err || 1 > len(downloadPkgURLs) || "" == checksum {
return
}
downloadInstallPkg(downloadPkgURL, checksum)
msgId := util.PushMsg(Conf.Language(103), 60*1000*10)
succ := false
for _, downloadPkgURL := range downloadPkgURLs {
err = downloadInstallPkg(downloadPkgURL, checksum)
if nil == err {
succ = true
break
}
}
if !succ {
util.PushUpdateMsg(msgId, Conf.Language(104), 7000)
}
}
func getUpdatePkg() (downloadPkgURL, checksum string, err error) {
func getUpdatePkg() (downloadPkgURLs []string, checksum string, err error) {
result, err := util.GetRhyResult(false)
if nil != err {
return
}
installPkgSite := result["installPkg"].(string)
ver := result["ver"].(string)
if isVersionUpToDate(ver) {
return
@ -125,13 +136,20 @@ func getUpdatePkg() (downloadPkgURL, checksum string, err error) {
suffix = "linux.AppImage"
}
pkg := "siyuan-" + ver + "-" + suffix
downloadPkgURL = installPkgSite + "siyuan/" + pkg
url := "https://github.com/siyuan-note/siyuan/releases/download/v" + ver + "/" + pkg
downloadPkgURLs = append(downloadPkgURLs, url)
url = "https://ghproxy.com/" + url
downloadPkgURLs = append(downloadPkgURLs, url)
url = "https://release.b3log.org/siyuan/" + pkg
downloadPkgURLs = append(downloadPkgURLs, url)
checksums := result["checksums"].(map[string]interface{})
checksum = checksums[pkg].(string)
return
}
func downloadInstallPkg(pkgURL, checksum string) {
func downloadInstallPkg(pkgURL, checksum string) (err error) {
if "" == pkgURL || "" == checksum {
return
}
@ -145,22 +163,20 @@ func downloadInstallPkg(pkgURL, checksum string) {
}
}
err := os.MkdirAll(filepath.Join(util.TempDir, "install"), 0755)
err = os.MkdirAll(filepath.Join(util.TempDir, "install"), 0755)
if nil != err {
logging.LogErrorf("create temp install dir failed: %s", err)
return
}
logging.LogInfof("downloading install package [%s]", pkgURL)
msgId := util.PushMsg(Conf.Language(103), 60*1000*10)
client := req.C().SetTLSHandshakeTimeout(7 * time.Second).SetTimeout(10 * time.Minute)
callback := func(info req.DownloadInfo) {
//logging.LogDebugf("downloading install package [%s %.2f%%]", pkgURL, float64(info.DownloadedSize)/float64(info.Response.ContentLength)*100.0)
}
_, err = client.R().SetOutputFile(savePath).SetDownloadCallback(callback).Get(pkgURL)
if nil != err {
logging.LogErrorf("download install package failed: %s", err)
util.PushUpdateMsg(msgId, Conf.Language(104), 7000)
logging.LogErrorf("download install package [%s] failed: %s", pkgURL, err)
return
}
@ -170,6 +186,7 @@ func downloadInstallPkg(pkgURL, checksum string) {
return
}
logging.LogInfof("downloaded install package [%s] to [%s]", pkgURL, savePath)
return
}
func sha256Hash(filename string) (ret string, err error) {