mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-02-23 15:34:06 +01:00
🎨 Improve desktop auto-update https://github.com/siyuan-note/siyuan/issues/16461 (#16764)
This commit is contained in:
parent
bea194e89d
commit
7464a6f951
19 changed files with 102 additions and 124 deletions
|
|
@ -272,9 +272,6 @@ func refreshCheckDownloadInstallPkg() {
|
|||
|
||||
time.Sleep(3 * time.Minute)
|
||||
checkDownloadInstallPkg()
|
||||
if "" != getNewVerInstallPkgPath() {
|
||||
util.PushMsg(Conf.Language(62), 15*1000)
|
||||
}
|
||||
}
|
||||
|
||||
func refreshAnnouncement() {
|
||||
|
|
|
|||
|
|
@ -711,6 +711,7 @@ func Close(force, setCurrentWorkspace bool, execInstallPkg int) (exitCode int) {
|
|||
|
||||
util.IsExiting.Store(true)
|
||||
waitSecondForExecInstallPkg := false
|
||||
newVerInstallPkgPath := getNewVerInstallPkgPath()
|
||||
if !skipNewVerInstallPkg() && "" != newVerInstallPkgPath {
|
||||
if 2 == execInstallPkg || (force && 0 == execInstallPkg) { // 执行新版本安装
|
||||
waitSecondForExecInstallPkg = true
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ import (
|
|||
"path"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
|
@ -35,6 +34,7 @@ import (
|
|||
"github.com/imroc/req/v3"
|
||||
"github.com/siyuan-note/logging"
|
||||
"github.com/siyuan-note/siyuan/kernel/util"
|
||||
"golang.org/x/mod/semver"
|
||||
)
|
||||
|
||||
func execNewVerInstallPkg(newVerInstallPkgPath string) {
|
||||
|
|
@ -45,6 +45,9 @@ func execNewVerInstallPkg(newVerInstallPkgPath string) {
|
|||
} else if gulu.OS.IsDarwin() {
|
||||
exec.Command("chmod", "+x", newVerInstallPkgPath).CombinedOutput()
|
||||
cmd = exec.Command("open", newVerInstallPkgPath)
|
||||
} else {
|
||||
logging.LogErrorf("unsupported platform for auto-installing package")
|
||||
return
|
||||
}
|
||||
gulu.CmdAttr(cmd)
|
||||
cmdErr := cmd.Run()
|
||||
|
|
@ -54,28 +57,23 @@ func execNewVerInstallPkg(newVerInstallPkgPath string) {
|
|||
}
|
||||
}
|
||||
|
||||
var newVerInstallPkgPath string
|
||||
|
||||
func getNewVerInstallPkgPath() string {
|
||||
if skipNewVerInstallPkg() {
|
||||
newVerInstallPkgPath = ""
|
||||
return ""
|
||||
}
|
||||
|
||||
downloadPkgURLs, checksum, err := getUpdatePkg()
|
||||
if err != nil || 1 > len(downloadPkgURLs) || "" == checksum {
|
||||
newVerInstallPkgPath = ""
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
pkg := path.Base(downloadPkgURLs[0])
|
||||
newVerInstallPkgPath = filepath.Join(util.TempDir, "install", pkg)
|
||||
localChecksum, _ := sha256Hash(newVerInstallPkgPath)
|
||||
pkgPath := filepath.Join(util.TempDir, "install", pkg)
|
||||
localChecksum, _ := sha256Hash(pkgPath)
|
||||
if checksum != localChecksum {
|
||||
newVerInstallPkgPath = ""
|
||||
return ""
|
||||
}
|
||||
return newVerInstallPkgPath
|
||||
return pkgPath
|
||||
}
|
||||
|
||||
var checkDownloadInstallPkgLock = sync.Mutex{}
|
||||
|
|
@ -93,22 +91,30 @@ func checkDownloadInstallPkg() {
|
|||
defer checkDownloadInstallPkgLock.Unlock()
|
||||
|
||||
downloadPkgURLs, checksum, err := getUpdatePkg()
|
||||
if err != nil || 1 > len(downloadPkgURLs) || "" == checksum {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
msgId := util.PushMsg(Conf.Language(103), 1000*7)
|
||||
succ := false
|
||||
existingPkgPath := getNewVerInstallPkgPath()
|
||||
if "" != existingPkgPath {
|
||||
// 存在经过 sha256Hash 检查的安装包
|
||||
util.PushUpdateMsg("update-pkg-ready", Conf.Language(62), 15*1000)
|
||||
return
|
||||
}
|
||||
|
||||
util.PushUpdateMsg("update-pkg-downloading", Conf.Language(103), 1000*7)
|
||||
success := false
|
||||
for _, downloadPkgURL := range downloadPkgURLs {
|
||||
err = downloadInstallPkg(downloadPkgURL, checksum)
|
||||
if err == nil {
|
||||
succ = true
|
||||
success = true
|
||||
break
|
||||
|
||||
}
|
||||
}
|
||||
if !succ {
|
||||
util.PushUpdateMsg(msgId, Conf.Language(104), 7000)
|
||||
if success {
|
||||
util.PushUpdateMsg("update-pkg-ready", Conf.Language(62), 15*1000)
|
||||
} else {
|
||||
util.PushUpdateMsg("update-pkg-downloading", Conf.Language(104), 7000)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -121,6 +127,7 @@ func getUpdatePkg() (downloadPkgURLs []string, checksum string, err error) {
|
|||
|
||||
ver := result["ver"].(string)
|
||||
if isVersionUpToDate(ver) {
|
||||
err = fmt.Errorf("version is up to date")
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -158,6 +165,11 @@ func getUpdatePkg() (downloadPkgURLs []string, checksum string, err error) {
|
|||
|
||||
checksums := result["checksums"].(map[string]interface{})
|
||||
checksum = checksums[pkg].(string)
|
||||
|
||||
if "" == checksum {
|
||||
err = fmt.Errorf("checksum is empty")
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -277,88 +289,42 @@ func CheckUpdate(showMsg bool) {
|
|||
releaseLang = releaseLangArg.(string)
|
||||
}
|
||||
|
||||
var msg string
|
||||
var timeout int
|
||||
if isVersionUpToDate(ver) {
|
||||
msg = Conf.Language(10)
|
||||
timeout = 3000
|
||||
util.PushUpdateMsg("update-notify", Conf.Language(10), 3000)
|
||||
} else {
|
||||
msg = fmt.Sprintf(Conf.Language(9), "<a href=\""+releaseLang+"\">"+releaseLang+"</a>")
|
||||
showMsg = true
|
||||
timeout = 15000
|
||||
}
|
||||
if showMsg {
|
||||
util.PushMsg(msg, timeout)
|
||||
go func() {
|
||||
defer logging.Recover()
|
||||
checkDownloadInstallPkg()
|
||||
if "" != getNewVerInstallPkgPath() {
|
||||
util.PushMsg(Conf.Language(62), 15*1000)
|
||||
}
|
||||
}()
|
||||
util.PushUpdateMsg("update-notify", fmt.Sprintf(Conf.Language(9), "<a href=\""+releaseLang+"\">"+releaseLang+"</a>"), 15000)
|
||||
}
|
||||
go func() {
|
||||
defer logging.Recover()
|
||||
checkDownloadInstallPkg()
|
||||
}()
|
||||
}
|
||||
|
||||
func isVersionUpToDate(releaseVer string) bool {
|
||||
return ver2num(releaseVer) <= ver2num(util.Ver)
|
||||
return semver.Compare("v"+releaseVer, "v"+util.Ver) <= 0
|
||||
}
|
||||
|
||||
// skipInstallPkgPlatformCached 缓存平台相关判断,-1 未初始化,0 表示不跳过,1 表示跳过
|
||||
var skipInstallPkgPlatformCached = -1
|
||||
|
||||
func skipNewVerInstallPkg() bool {
|
||||
if !gulu.OS.IsWindows() && !gulu.OS.IsDarwin() {
|
||||
return true
|
||||
}
|
||||
if util.ISMicrosoftStore || util.ContainerStd != util.Container {
|
||||
return true
|
||||
}
|
||||
if !Conf.System.DownloadInstallPkg {
|
||||
return true
|
||||
}
|
||||
if gulu.OS.IsWindows() {
|
||||
plat := strings.ToLower(Conf.System.OSPlatform)
|
||||
// Windows 7, 8 and Server 2012 are no longer supported https://github.com/siyuan-note/siyuan/issues/7347
|
||||
if strings.Contains(plat, " 7 ") || strings.Contains(plat, " 8 ") || strings.Contains(plat, "2012") {
|
||||
return true
|
||||
if skipInstallPkgPlatformCached == -1 {
|
||||
skipInstallPkgPlatformCached = 0
|
||||
if !gulu.OS.IsWindows() && !gulu.OS.IsDarwin() {
|
||||
skipInstallPkgPlatformCached = 1
|
||||
} else if util.ISMicrosoftStore || util.ContainerStd != util.Container {
|
||||
skipInstallPkgPlatformCached = 1
|
||||
} else if gulu.OS.IsWindows() {
|
||||
plat := strings.ToLower(Conf.System.OSPlatform)
|
||||
// Windows 7, 8 and Server 2012 are no longer supported https://github.com/siyuan-note/siyuan/issues/7347
|
||||
if strings.Contains(plat, " 7 ") || strings.Contains(plat, " 8 ") || strings.Contains(plat, "2012") {
|
||||
skipInstallPkgPlatformCached = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if skipInstallPkgPlatformCached == 1 || !Conf.System.DownloadInstallPkg {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func ver2num(a string) int {
|
||||
var version string
|
||||
var suffixpos int
|
||||
var suffixStr string
|
||||
var suffix string
|
||||
a = strings.Trim(a, " ")
|
||||
if strings.Contains(a, "alpha") {
|
||||
suffixpos = strings.Index(a, "-alpha")
|
||||
version = a[0:suffixpos]
|
||||
suffixStr = a[suffixpos+6 : len(a)]
|
||||
suffix = "0" + fmt.Sprintf("%03s", suffixStr)
|
||||
} else if strings.Contains(a, "beta") {
|
||||
suffixpos = strings.Index(a, "-beta")
|
||||
version = a[0:suffixpos]
|
||||
suffixStr = a[suffixpos+5 : len(a)]
|
||||
suffix = "1" + fmt.Sprintf("%03s", suffixStr)
|
||||
} else {
|
||||
version = a
|
||||
suffix = "5000"
|
||||
}
|
||||
split := strings.Split(version, ".")
|
||||
var verArr []string
|
||||
|
||||
verArr = append(verArr, "1")
|
||||
var tmp string
|
||||
for i := 0; i < 3; i++ {
|
||||
if i < len(split) {
|
||||
tmp = split[i]
|
||||
} else {
|
||||
tmp = "0"
|
||||
}
|
||||
verArr = append(verArr, fmt.Sprintf("%04s", tmp))
|
||||
}
|
||||
verArr = append(verArr, suffix)
|
||||
|
||||
ver := strings.Join(verArr, "")
|
||||
verNum, _ := strconv.Atoi(ver)
|
||||
return verNum
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue