mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-16 22:50:13 +01:00
🎨 桌面端自动下载更新安装包 https://github.com/siyuan-note/siyuan/issues/5837
This commit is contained in:
parent
8f6ffd4dcd
commit
313143304b
7 changed files with 83 additions and 20 deletions
|
|
@ -83,7 +83,7 @@ export const kernelError = () => {
|
|||
|
||||
export const exitSiYuan = () => {
|
||||
fetchPost("/api/system/exit", {force: false}, (response) => {
|
||||
if (response.code === 1) {
|
||||
if (response.code === 1) { // 同步执行失败
|
||||
const msgId = showMessage(response.msg, response.data.closeTimeout, "error");
|
||||
const buttonElement = document.querySelector(`#message [data-id="${msgId}"] button`);
|
||||
if (buttonElement) {
|
||||
|
|
@ -100,7 +100,20 @@ export const exitSiYuan = () => {
|
|||
});
|
||||
});
|
||||
}
|
||||
} else {
|
||||
} else if (response.code === 2) { // 提示新安装包
|
||||
const msgId = showMessage(response.msg, response.data.closeTimeout, "info");
|
||||
const buttonElement = document.querySelector(`#message [data-id="${msgId}"] button`);
|
||||
if (buttonElement) {
|
||||
buttonElement.addEventListener("click", () => {
|
||||
fetchPost("/api/system/exit", {force: true}, () => {
|
||||
/// #if !BROWSER
|
||||
ipcRenderer.send(Constants.SIYUAN_CONFIG_CLOSETRAY);
|
||||
ipcRenderer.send(Constants.SIYUAN_QUIT);
|
||||
/// #endif
|
||||
});
|
||||
});
|
||||
}
|
||||
} else { // 正常退出
|
||||
/// #if !BROWSER
|
||||
ipcRenderer.send(Constants.SIYUAN_CONFIG_CLOSETRAY);
|
||||
ipcRenderer.send(Constants.SIYUAN_QUIT);
|
||||
|
|
|
|||
|
|
@ -348,11 +348,21 @@ func exit(c *gin.Context) {
|
|||
force = forceArg.(bool)
|
||||
}
|
||||
|
||||
err := model.Close(force)
|
||||
if nil != err {
|
||||
ret.Code = 1
|
||||
ret.Msg = err.Error() + "<div class=\"fn__space\"></div><button class=\"b3-button b3-button--white\">" + model.Conf.Language(97) + "</button>"
|
||||
execInstallPkgArg := arg["execInstallPkgArg"] // 0:默认检查新版本,1:不执行新版本安装,2:执行新版本安装
|
||||
execInstallPkg := 0
|
||||
if nil != execInstallPkgArg {
|
||||
execInstallPkg = int(execInstallPkgArg.(float64))
|
||||
}
|
||||
|
||||
exitCode := model.Close(force, execInstallPkg)
|
||||
ret.Code = exitCode
|
||||
switch exitCode {
|
||||
case 0:
|
||||
case 1: // 同步执行失败
|
||||
ret.Msg = model.Conf.Language(96) + "<div class=\"fn__space\"></div><button class=\"b3-button b3-button--white\">" + model.Conf.Language(97) + "</button>"
|
||||
ret.Data = map[string]interface{}{"closeTimeout": 0}
|
||||
case 2: // 提示新安装包
|
||||
ret.Msg = model.Conf.Language(61)
|
||||
ret.Data = map[string]interface{}{"closeTimeout": 0}
|
||||
return
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ package model
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"sort"
|
||||
|
|
@ -345,7 +345,15 @@ func loadLangs() (ret []*conf.Lang) {
|
|||
|
||||
var exitLock = sync.Mutex{}
|
||||
|
||||
func Close(force bool) (err error) {
|
||||
// Close 退出内核进程.
|
||||
//
|
||||
// force:是否不执行同步过程而直接退出
|
||||
// execInstallPkg:是否执行新版本安装包
|
||||
//
|
||||
// 0:默认按照设置项 System.DownloadInstallPkg 检查并推送提示
|
||||
// 1:执行安装
|
||||
// 2:不执行安装
|
||||
func Close(force bool, execInstallPkg int) (exitCode int) {
|
||||
exitLock.Lock()
|
||||
defer exitLock.Unlock()
|
||||
|
||||
|
|
@ -355,7 +363,7 @@ func Close(force bool) (err error) {
|
|||
if !force {
|
||||
SyncData(false, true, false)
|
||||
if 0 != ExitSyncSucc {
|
||||
err = errors.New(Conf.Language(96))
|
||||
exitCode = 1
|
||||
return
|
||||
}
|
||||
}
|
||||
|
|
@ -366,13 +374,35 @@ func Close(force bool) (err error) {
|
|||
// return true
|
||||
//})
|
||||
|
||||
newVerInstallPkgPath := ""
|
||||
if Conf.System.DownloadInstallPkg && 0 == execInstallPkg {
|
||||
newVerInstallPkgPath = GetNewVerInstallPkgPath()
|
||||
if "" != newVerInstallPkgPath {
|
||||
exitCode = 2
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if 2 == execInstallPkg && "" != newVerInstallPkgPath { // 执行新版本安装
|
||||
logging.LogInfof("install new version [%s]", newVerInstallPkgPath)
|
||||
cmd := exec.Command(newVerInstallPkgPath)
|
||||
util.CmdAttr(cmd)
|
||||
data, cmdErr := cmd.CombinedOutput()
|
||||
if nil != cmdErr {
|
||||
logging.LogErrorf("exec install new version failed: %s", cmdErr)
|
||||
return
|
||||
}
|
||||
logging.LogDebugf("exec install new version output [%s]", data)
|
||||
}
|
||||
|
||||
Conf.Close()
|
||||
sql.CloseDatabase()
|
||||
util.WebSocketServer.Close()
|
||||
clearWorkspaceTemp()
|
||||
logging.LogInfof("exited kernel")
|
||||
|
||||
go func() {
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
logging.LogInfof("exited kernel")
|
||||
util.WebSocketServer.Close()
|
||||
os.Exit(util.ExitCodeOk)
|
||||
}()
|
||||
return
|
||||
|
|
|
|||
|
|
@ -240,7 +240,7 @@ func AutoRefreshCheck() {
|
|||
|
||||
time.Sleep(3 * time.Minute)
|
||||
checkDownloadInstallPkg()
|
||||
if isExistUpdateInstallPkg() {
|
||||
if "" != GetNewVerInstallPkgPath() {
|
||||
util.PushMsg(Conf.Language(61), 0)
|
||||
}
|
||||
}()
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ func HookResident() {
|
|||
for range time.Tick(time.Second * 30) {
|
||||
if 0 == util.CountSessions() {
|
||||
logging.LogInfof("no active session, exit kernel process now")
|
||||
Close(false)
|
||||
Close(false, 2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -44,5 +44,5 @@ func HandleSignal() {
|
|||
signal.Notify(c, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM)
|
||||
s := <-c
|
||||
logging.LogInfof("received os signal [%s], exit kernel process now", s)
|
||||
Close(false)
|
||||
Close(false, 2)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,16 +34,23 @@ import (
|
|||
"github.com/siyuan-note/siyuan/kernel/util"
|
||||
)
|
||||
|
||||
func isExistUpdateInstallPkg() bool {
|
||||
func GetNewVerInstallPkgPath() string {
|
||||
if !Conf.System.DownloadInstallPkg {
|
||||
return ""
|
||||
}
|
||||
|
||||
downloadPkgURL, checksum, err := getUpdatePkg()
|
||||
if nil != err {
|
||||
return false
|
||||
return ""
|
||||
}
|
||||
|
||||
pkg := path.Base(downloadPkgURL)
|
||||
savePath := filepath.Join(util.TempDir, "install", pkg)
|
||||
localChecksum, _ := sha256Hash(savePath)
|
||||
return checksum == localChecksum
|
||||
ret := filepath.Join(util.TempDir, "install", pkg)
|
||||
localChecksum, _ := sha256Hash(ret)
|
||||
if checksum != localChecksum {
|
||||
return ""
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
var checkDownloadInstallPkgLock = sync.Mutex{}
|
||||
|
|
|
|||
|
|
@ -1086,10 +1086,13 @@ func batchUpdateHPath(tx *sql.Tx, boxID, rootID, oldHPath, newHPath string) (err
|
|||
func CloseDatabase() {
|
||||
if err := db.Close(); nil != err {
|
||||
logging.LogErrorf("close database failed: %s", err)
|
||||
return
|
||||
}
|
||||
if err := historyDB.Close(); nil != err {
|
||||
logging.LogErrorf("close history database failed: %s", err)
|
||||
return
|
||||
}
|
||||
logging.LogInfof("closed database")
|
||||
}
|
||||
|
||||
func queryRow(query string, args ...interface{}) *sql.Row {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue