diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index a8f965d74..54dcc76d2 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -507,9 +507,6 @@ "useDefault": "Open with default program", "previous": "Previous", "next": "Next", - "lockFile0": "Unable to access data", - "lockFile1": "The data file has been locked by another program", - "lockFile2": "If the problem still occurs frequently in subsequent use, please report it via GitHub Issues", "kernelFault0": "Kernel connection interrupted...", "kernelFault1": "Please check if the network connection and kernel process is normal", "kernelFault2": "If the problem still occurs after restarting, please report it via GitHub Issues", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index d7acfc047..6000987df 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -507,9 +507,6 @@ "useDefault": "Abrir con el programa por defecto", "previous": "Anterior", "next": "Siguiente", - "lockFile0": "No se puede acceder a los datos", - "lockFile1": "El archivo de datos ha sido bloqueado por otro programa", - "lockFile2": "Si el problema sigue ocurriendo con frecuencia en el uso posterior, infórmelo a través de Problemas en GitHub", "kernelFault0": "Conexión del kernel interrumpida...", "kernelFault1": "Verifique si la conexión de red y los procesos del kernel son normales", "kernelFault2": "Si el problema sigue produciéndose después de reiniciar, comuníquelo a través de Problemas en GitHub", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 2880d944a..697058ded 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -507,9 +507,6 @@ "useDefault": "Ouvrir avec le programme par défaut", "previous": "Précédent", "next": "Prochain", - "lockFile0": "Impossible d'accéder aux données", - "lockFile1": "Le fichier de données a été verrouillé par un autre programme", - "lockFile2": "Si le problème se produit encore fréquemment lors d'une utilisation ultérieure, veuillez le signaler via GitHub Issues", "kernelFault0": "Connexion au noyau interrompue...", "kernelFault1": "Veuillez vérifier si la connexion réseau et les processus du noyau sont normaux", "kernelFault2": "Si le problème persiste après le redémarrage, veuillez le signaler via GitHub Issues", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index c4780ecc5..540e1eeb8 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -507,9 +507,6 @@ "useDefault": "使用預設程式打開", "previous": "上一個", "next": "下一個", - "lockFile0": "無法存取資料", - "lockFile1": "資料檔案已被其他程式鎖定", - "lockFile2": "如果後續使用仍然頻繁出現該問題,請通過這裡回饋", "kernelFault0": "kernel連接中斷...", "kernelFault1": "請檢查網絡連接和內核進程是否正常", "kernelFault2": "如果重啟後仍然出現該問題,請通過這裡回饋", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 38881655a..ba05194e6 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -507,9 +507,6 @@ "useDefault": "使用默认程序打开", "previous": "上一个", "next": "下一个", - "lockFile0": "无法存取数据", - "lockFile1": "数据文件已被其他程序锁定", - "lockFile2": "如果后续使用仍然频繁出现该问题,请通过这里反馈", "kernelFault0": "内核连接中断...", "kernelFault1": "请检查网络连接和内核进程是否正常", "kernelFault2": "如果重启后仍然出现该问题,请通过这里反馈", diff --git a/app/src/block/Panel.ts b/app/src/block/Panel.ts index 44fdf3674..44fe70728 100644 --- a/app/src/block/Panel.ts +++ b/app/src/block/Panel.ts @@ -10,7 +10,6 @@ import {openNewWindowById} from "../window/openNewWindow"; /// #endif import {disabledProtyle} from "../protyle/util/onGet"; import {fetchPost} from "../util/fetch"; -import {lockFile} from "../dialog/processSystem"; import {showMessage} from "../dialog/message"; export class BlockPanel { @@ -245,11 +244,6 @@ export class BlockPanel { private initProtyle(editorElement: HTMLElement) { const index = parseInt(editorElement.getAttribute("data-index")); fetchPost("api/block/getBlockInfo", {id: this.nodeIds[index]}, (response) => { - if (response.code === 2) { - // 文件被锁定 - lockFile(response.data); - return false; - } if (response.code === 3) { showMessage(response.msg); return; diff --git a/app/src/dialog/processSystem.ts b/app/src/dialog/processSystem.ts index 1197fb377..f7e86f0cc 100644 --- a/app/src/dialog/processSystem.ts +++ b/app/src/dialog/processSystem.ts @@ -1,7 +1,6 @@ import {Constants} from "../constants"; import {fetchPost} from "../util/fetch"; /// #if !MOBILE -import {getAllModels} from "../layout/getAll"; import {exportLayout} from "../layout/util"; /// #endif /// #if !BROWSER @@ -29,47 +28,6 @@ export const lockScreen = () => { /// #endif }; -export const lockFile = (id: string) => { - const html = `
-
-
🔒 ${window.siyuan.languages.lockFile0} v${Constants.SIYUAN_VERSION}
-
-

${window.siyuan.languages.lockFile1}

-

${window.siyuan.languages.lockFile2}

-
-
- -
- -
-
`; - let logElement = document.getElementById("errorLog"); - if (logElement) { - logElement.innerHTML = html; - } else { - document.body.insertAdjacentHTML("beforeend", `
${html}
`); - logElement = document.getElementById("errorLog"); - } - logElement.querySelector(".b3-button--cancel").addEventListener("click", () => { - /// #if !MOBILE - getAllModels().editor.find((item) => { - if (item.editor.protyle.block.rootID === id) { - item.parent.parent.removeTab(item.parent.id, false, false); - return true; - } - }); - logElement.remove(); - /// #endif - }); - logElement.querySelector(".b3-button--text").addEventListener("click", () => { - fetchPost("/api/filetree/lockFile", {id}, (response) => { - if (response.code === 0) { - window.location.reload(); - } - }); - }); -}; - export const kernelError = () => { let iosReStart = ""; if (window.siyuan.config.system.container === "ios" && window.webkit?.messageHandlers) { @@ -162,10 +120,6 @@ export const exitSiYuan = () => { }; export const transactionError = (data: { code: number, data: string }) => { - if (data.code === 1) { - lockFile(data.data); - return; - } if (document.getElementById("transactionError")) { return; } diff --git a/app/src/editor/util.ts b/app/src/editor/util.ts index b1cb3417b..41319684f 100644 --- a/app/src/editor/util.ts +++ b/app/src/editor/util.ts @@ -19,7 +19,7 @@ import {pushBack} from "../util/backForward"; import {Asset} from "../asset"; import {Layout} from "../layout"; import {hasClosestBlock, hasClosestByAttribute, hasClosestByClassName,} from "../protyle/util/hasClosest"; -import {lockFile, setTitle} from "../dialog/processSystem"; +import {setTitle} from "../dialog/processSystem"; import {zoomOut} from "../menus/protyle"; import {countBlockWord, countSelectWord} from "../layout/status"; import {showMessage} from "../dialog/message"; @@ -34,11 +34,6 @@ export const openFileById = (options: { removeCurrentTab?: boolean }) => { fetchPost("/api/block/getBlockInfo", {id: options.id}, (data) => { - if (data.code === 2) { - // 文件被锁定 - lockFile(data.data); - return; - } if (data.code === 3) { showMessage(data.msg); return; diff --git a/app/src/mobile/editor.ts b/app/src/mobile/editor.ts index d73863ec4..575f2d5ce 100644 --- a/app/src/mobile/editor.ts +++ b/app/src/mobile/editor.ts @@ -7,7 +7,6 @@ import {disabledProtyle, onGet} from "../protyle/util/onGet"; import {addLoading} from "../protyle/ui/initUI"; import {focusBlock} from "../protyle/util/selection"; import {scrollCenter} from "../util/highlightById"; -import {lockFile} from "../dialog/processSystem"; import {hasClosestByAttribute} from "../protyle/util/hasClosest"; import {setEditMode} from "../protyle/util/setEditMode"; import {hideElements} from "../protyle/ui/hideElements"; @@ -40,11 +39,6 @@ export const openMobileFileById = (id: string, action = [Constants.CB_GET_HL]) = } fetchPost("/api/block/getBlockInfo", {id}, (data) => { - if (data.code === 2) { - // 文件被锁定 - lockFile(data.data); - return; - } if (data.code === 3) { showMessage(data.msg); return; diff --git a/app/src/protyle/export/index.ts b/app/src/protyle/export/index.ts index 03177e724..f6226d9df 100644 --- a/app/src/protyle/export/index.ts +++ b/app/src/protyle/export/index.ts @@ -11,7 +11,6 @@ import {confirmDialog} from "../../dialog/confirmDialog"; import {getThemeMode, setInlineStyle} from "../../util/assets"; import {fetchPost} from "../../util/fetch"; import {Dialog} from "../../dialog"; -import {lockFile} from "../../dialog/processSystem"; import {pathPosix} from "../../util/pathName"; import {replaceLocalPath} from "../../editor/rename"; import {setStorageVal} from "../util/compatibility"; @@ -464,11 +463,6 @@ const getExportPath = (option: { type: string, id: string }, removeAssets?: bool fetchPost("/api/block/getBlockInfo", { id: option.id }, (response) => { - if (response.code === 2) { - // 文件被锁定 - lockFile(response.data); - return; - } if (response.code === 3) { showMessage(response.msg); return; diff --git a/app/src/protyle/util/onGet.ts b/app/src/protyle/util/onGet.ts index 20da2f73f..c5b1a86c0 100644 --- a/app/src/protyle/util/onGet.ts +++ b/app/src/protyle/util/onGet.ts @@ -1,4 +1,4 @@ -import {lockFile, setTitle} from "../../dialog/processSystem"; +import {setTitle} from "../../dialog/processSystem"; import {Constants} from "../../constants"; import {hideElements} from "../ui/hideElements"; import {genEmptyElement} from "../../block/util"; @@ -36,12 +36,6 @@ export const onGet = (data: IWebSocketData, protyle: IProtyle, action: string[] } protyle.notebookId = data.data.box; protyle.path = data.data.path; - if (data.code === 2) { - // 文件被锁定 - protyle.block.rootID = data.data; - lockFile(data.data); - return; - } if (data.data.eof) { if (action.includes(Constants.CB_GET_BEFORE)) { diff --git a/app/src/protyle/wysiwyg/transaction.ts b/app/src/protyle/wysiwyg/transaction.ts index bd41ff9d6..23b2c0ff5 100644 --- a/app/src/protyle/wysiwyg/transaction.ts +++ b/app/src/protyle/wysiwyg/transaction.ts @@ -6,7 +6,6 @@ import {blockRender} from "../markdown/blockRender"; import {processRender} from "../util/processCode"; import {highlightRender} from "../markdown/highlightRender"; import {hasClosestBlock, hasClosestByAttribute} from "../util/hasClosest"; -import {lockFile} from "../../dialog/processSystem"; import {setFold} from "../../menus/protyle"; import {onGet} from "../util/onGet"; /// #if !MOBILE @@ -69,10 +68,7 @@ const promiseTransaction = () => { } else { promiseTransaction(); } - if (response.code === 1) { - lockFile(protyle.block.rootID); - return; - } + countBlockWord([], protyle.block.rootID, true); /// #if MOBILE if ((0 !== window.siyuan.config.sync.provider || (0 === window.siyuan.config.sync.provider && !needSubscribe(""))) && diff --git a/app/src/util/backForward.ts b/app/src/util/backForward.ts index 7436f1c3a..82ba8a4ad 100644 --- a/app/src/util/backForward.ts +++ b/app/src/util/backForward.ts @@ -10,7 +10,6 @@ import {Tab} from "../layout/Tab"; import {Editor} from "../editor"; import {onGet} from "../protyle/util/onGet"; import {scrollCenter} from "./highlightById"; -import {lockFile} from "../dialog/processSystem"; import {zoomOut} from "../menus/protyle"; import {showMessage} from "../dialog/message"; import {saveScroll} from "../protyle/scroll/saveScroll"; @@ -39,11 +38,6 @@ const focusStack = async (stack: IBackStack) => { } if (wnd) { const info = await fetchSyncPost("/api/block/getBlockInfo", {id: stack.id}); - if (info.code === 2) { - // 文件被锁定 - lockFile(info.data); - return false; - } if (info.code === 3) { showMessage(info.msg); return; diff --git a/app/src/window/openNewWindow.ts b/app/src/window/openNewWindow.ts index dfcba7a08..9e42e5755 100644 --- a/app/src/window/openNewWindow.ts +++ b/app/src/window/openNewWindow.ts @@ -6,7 +6,6 @@ import {getCurrentWindow} from "@electron/remote"; import {Constants} from "../constants"; import {Tab} from "../layout/Tab"; import {fetchPost} from "../util/fetch"; -import {lockFile} from "../dialog/processSystem"; import {showMessage} from "../dialog/message"; export const openNewWindow = (tab: Tab) => { @@ -23,11 +22,6 @@ export const openNewWindow = (tab: Tab) => { export const openNewWindowById = (id: string) => { fetchPost("api/block/getBlockInfo", {id}, (response) => { - if (response.code === 2) { - // 文件被锁定 - lockFile(response.data); - return false; - } if (response.code === 3) { showMessage(response.msg); return; diff --git a/kernel/api/block.go b/kernel/api/block.go index 8c818315f..9570529b4 100644 --- a/kernel/api/block.go +++ b/kernel/api/block.go @@ -194,12 +194,6 @@ func checkBlockExist(c *gin.Context) { id := arg["id"].(string) b, err := model.GetBlock(id, nil) - // TODO 文件被锁的情况已经在 filelock 中做了退出进程处理,不会走到应用层,所以 code 为 2 的情况应该移除 - //if errors.Is(err, filelock.ErrUnableAccessFile) { - // ret.Code = 2 - // ret.Data = id - // return - //} if errors.Is(err, model.ErrIndexing) { ret.Code = 0 ret.Data = false @@ -405,11 +399,6 @@ func getBlockInfo(c *gin.Context) { id := arg["id"].(string) tree, err := model.LoadTreeByID(id) - //if errors.Is(err, filelock.ErrUnableAccessFile) { - // ret.Code = 2 - // ret.Data = id - // return - //} if errors.Is(err, model.ErrIndexing) { ret.Code = 3 ret.Msg = model.Conf.Language(56) @@ -438,11 +427,6 @@ func getBlockInfo(c *gin.Context) { } root, err := model.GetBlock(block.RootID, tree) - //if errors.Is(err, filelock.ErrUnableAccessFile) { - // ret.Code = 2 - // ret.Data = id - // return - //} if errors.Is(err, model.ErrIndexing) { ret.Code = 3 ret.Data = model.Conf.Language(56) diff --git a/kernel/api/filetree.go b/kernel/api/filetree.go index 4dbf1f7af..c4116dd94 100644 --- a/kernel/api/filetree.go +++ b/kernel/api/filetree.go @@ -501,24 +501,6 @@ func createDocWithMd(c *gin.Context) { pushCreate(box, p, id, arg) } -func lockFile(c *gin.Context) { - ret := gulu.Ret.NewResult() - defer c.JSON(http.StatusOK, ret) - - arg, ok := util.JsonArg(c, ret) - if !ok { - return - } - - id := arg["id"].(string) - locked := model.TryAccessFileByBlockID(id) - if !locked { - ret.Code = -1 - ret.Msg = fmt.Sprintf(model.Conf.Language(75)) - ret.Data = map[string]interface{}{"closeTimeout": 5000} - } -} - func getDocCreateSavePath(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) @@ -689,11 +671,6 @@ func getDoc(c *gin.Context) { } blockCount, content, parentID, parent2ID, rootID, typ, eof, scroll, boxID, docPath, isBacklinkExpand, err := model.GetDoc(startID, endID, id, index, keyword, mode, size, isBacklink) - //if errors.Is(err, filelock.ErrUnableAccessFile) { - // ret.Code = 2 - // ret.Data = id - // return - //} if model.ErrBlockNotFound == err { ret.Code = 3 return diff --git a/kernel/api/router.go b/kernel/api/router.go index b1bbb7feb..dffd6c0ee 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -89,7 +89,6 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/filetree/getDocCreateSavePath", model.CheckAuth, getDocCreateSavePath) ginServer.Handle("POST", "/api/filetree/getRefCreateSavePath", model.CheckAuth, getRefCreateSavePath) ginServer.Handle("POST", "/api/filetree/changeSort", model.CheckAuth, model.CheckReadonly, changeSort) - ginServer.Handle("POST", "/api/filetree/lockFile", model.CheckAuth, lockFile) ginServer.Handle("POST", "/api/filetree/createDocWithMd", model.CheckAuth, model.CheckReadonly, createDocWithMd) ginServer.Handle("POST", "/api/filetree/createDailyNote", model.CheckAuth, model.CheckReadonly, createDailyNote) ginServer.Handle("POST", "/api/filetree/createDoc", model.CheckAuth, model.CheckReadonly, createDoc) diff --git a/kernel/model/box.go b/kernel/model/box.go index 2464c06ec..f8c3b0923 100644 --- a/kernel/model/box.go +++ b/kernel/model/box.go @@ -527,19 +527,6 @@ func (box *Box) UpdateHistoryGenerated() { boxLatestHistoryTime[box.ID] = time.Now() } -func TryAccessFileByBlockID(id string) (ok bool) { - bt := treenode.GetBlockTree(id) - if nil == bt { - return - } - p := filepath.Join(util.DataDir, bt.BoxID, bt.Path) - - if !gulu.File.IsExist(p) { - return false - } - return true -} - func getBoxesByPaths(paths []string) (ret map[string]*Box) { ret = map[string]*Box{} for _, p := range paths {