diff --git a/kernel/api/notebook.go b/kernel/api/notebook.go index c75112b07..ef8d81f5b 100644 --- a/kernel/api/notebook.go +++ b/kernel/api/notebook.go @@ -155,7 +155,8 @@ func openNotebook(c *gin.Context) { } notebook := arg["notebook"].(string) - util.PushMsg(model.Conf.Language(45), 1000*60*15) + msgId := util.PushMsg(model.Conf.Language(45), 1000*60*15) + defer util.PushClearMsg(msgId) existed, err := model.Mount(notebook) if nil != err { ret.Code = -1 diff --git a/kernel/model/file.go b/kernel/model/file.go index cc9647314..b49465ea8 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -837,8 +837,8 @@ func renameWriteJSONQueue(tree *parse.Tree, oldHPath string) (err error) { } func DuplicateDoc(rootID string) (err error) { - util.PushMsg(Conf.Language(116), 30000) - defer util.PushClearMsg() + msgId := util.PushMsg(Conf.Language(116), 30000) + defer util.PushClearMsg(msgId) WaitForWritingFiles() tree, err := loadTreeByBlockID(rootID) diff --git a/kernel/model/sync.go b/kernel/model/sync.go index 1c2842a25..d8de3feb2 100644 --- a/kernel/model/sync.go +++ b/kernel/model/sync.go @@ -248,7 +248,7 @@ func SyncData(boot, exit, byHand bool) { wroteFiles, transferSize, err := ossUpload(localSyncDirPath, "sync/"+Conf.Sync.CloudName, device, boot, removedSyncList, upsertedSyncList) if nil != err { - util.PushClearMsg() + util.PushClearProgress() IncWorkspaceDataVer() // 上传失败的话提升本地版本,以备下次上传 msg := fmt.Sprintf(Conf.Language(80), formatErrorMsg(err)) @@ -263,7 +263,7 @@ func SyncData(boot, exit, byHand bool) { return } - util.PushClearMsg() + util.PushClearProgress() elapsed := time.Now().Sub(start).Seconds() stat := fmt.Sprintf(Conf.Language(130), wroteFiles, humanize.Bytes(transferSize)) + fmt.Sprintf(Conf.Language(132), elapsed) util.LogInfof("sync [cloud=%d, local=%d, wroteFiles=%d, transferSize=%s] uploaded in [%.2fs]", cloudSyncVer, syncConf.SyncVer, wroteFiles, humanize.Bytes(transferSize), elapsed) @@ -293,7 +293,7 @@ func SyncData(boot, exit, byHand bool) { var tmpTransferSize uint64 err = ossDownload0(util.TempDir+"/sync", "sync/"+Conf.Sync.CloudName, "/"+pathJSON, &tmpFetchedFiles, &tmpTransferSize, boot || exit) if nil != err { - util.PushClearMsg() + util.PushClearProgress() msg := fmt.Sprintf(Conf.Language(80), formatErrorMsg(err)) Conf.Sync.Stat = msg util.PushErrMsg(msg, 7000) @@ -314,7 +314,7 @@ func SyncData(boot, exit, byHand bool) { } data, err = encryption.AESGCMDecryptBinBytes(data, Conf.E2EEPasswd) if nil != err { - util.PushClearMsg() + util.PushClearProgress() msg := Conf.Language(28) Conf.Sync.Stat = msg util.PushErrMsg(fmt.Sprintf(Conf.Language(80), msg), 7000) @@ -331,7 +331,7 @@ func SyncData(boot, exit, byHand bool) { // 解密验证成功后将其移动到 sync/ 文件夹下 if err = os.Rename(tmpPathJSON, filepath.Join(localSyncDirPath, pathJSON)); nil != err { - util.PushClearMsg() + util.PushClearProgress() msg := fmt.Sprintf(Conf.Language(80), formatErrorMsg(err)) Conf.Sync.Stat = msg util.PushErrMsg(msg, 7000) @@ -347,7 +347,7 @@ func SyncData(boot, exit, byHand bool) { fetchedFilesCount, transferSize, downloadedFiles, err := ossDownload(localSyncDirPath, "sync/"+Conf.Sync.CloudName, boot || exit) if nil != err { - util.PushClearMsg() + util.PushClearProgress() msg := fmt.Sprintf(Conf.Language(80), formatErrorMsg(err)) Conf.Sync.Stat = msg util.PushErrMsg(msg, 7000) @@ -366,7 +366,7 @@ func SyncData(boot, exit, byHand bool) { syncDownloadErrCount++ return } - util.PushClearMsg() + util.PushClearProgress() // 恢复 var upsertFiles, removeFiles []string diff --git a/kernel/util/websocket.go b/kernel/util/websocket.go index e78ee7227..dab7fe9d1 100644 --- a/kernel/util/websocket.go +++ b/kernel/util/websocket.go @@ -19,6 +19,7 @@ package util import ( "sync" + "github.com/88250/gulu" "github.com/88250/melody" ) @@ -126,19 +127,14 @@ func PushTxErr(msg string, code int, data interface{}) { BroadcastByType("main", "txerr", code, msg, data) } -func PushMsg(msg string, timeout int) { - evt := NewCmdResult("msg", 0, PushModeBroadcast, 0) - evt.Msg = msg - evt.Data = map[string]interface{}{"closeTimeout": timeout} - PushEvent(evt) +func PushMsg(msg string, timeout int) string { + ret := gulu.Rand.String(7) + BroadcastByType("main", "msg", 0, msg, map[string]interface{}{"id": ret, "closeTimeout": timeout}) + return ret } func PushErrMsg(msg string, timeout int) { - evt := NewCmdResult("msg", 0, PushModeBroadcast, 0) - evt.Code = -1 - evt.Msg = msg - evt.Data = map[string]interface{}{"closeTimeout": timeout} - PushEvent(evt) + BroadcastByType("main", "msg", -1, msg, map[string]interface{}{"closeTimeout": timeout}) } const ( @@ -156,20 +152,20 @@ func PushEndlessProgress(msg string) { } func PushProgress(code, current, total int, msg string) { - evt := NewCmdResult("progress", 0, PushModeBroadcast, 0) - evt.Msg = msg - evt.Code = code - evt.Data = map[string]interface{}{ + BroadcastByType("main", "progress", code, msg, map[string]interface{}{ "current": current, "total": total, - } - PushEvent(evt) + }) } -// PushClearMsg 会清空消息提示以及进度遮罩。 -func PushClearMsg() { - evt := NewCmdResult("cmsg", 0, PushModeBroadcast, 0) - PushEvent(evt) +// PushClearMsg 会清空指定消息。 +func PushClearMsg(msgId string) { + BroadcastByType("main", "cmsg", 0, "", map[string]interface{}{"id": msgId}) +} + +// PushClearProgress 取消进度遮罩。 +func PushClearProgress() { + BroadcastByType("main", "cprogress", 0, "", nil) } func PushDownloadProgress(id string, percent float32) {