Contact me: hankecnc@gmail.com

Watch Directory 不适用于 Windows 应用程序 #754

推推 grbl 3年前 (2023-02-03) 406次浏览
关闭
MitchBradley 打开了这个问题 2022 年 3 月 31 日 · 3 条评论 · 由#755修复
关闭

Watch Directory 不适用于 Windows 应用程序#754

MitchBradley 打开了这个问题 2022 年 3 月 31 日 · 3 条评论 · 由#755修复

注释

Watch Directory 不适用于 Windows 应用程序 #754

首先,该文档没有说明如何在使用 Windows Electron 应用程序时设置监视目录。我知道有两种设置方法,但对于应用程序针对的典型“安装并单击”用户而言,这两种方法都不够友好:

  • 您可以编辑启动应用程序的快捷方式以将“–watch-directory <path>”添加到目标值。教普通用户查找和编辑快捷方式非常乏味。
  • 您可以编辑 %userprofile%.cncrc 以添加“watchDirectory”:“C:/Users/USER/path”条目。这也很难解释并且容易出错,因为人们通常不知道他们的主目录位于何处,使用的编辑器会弄乱纯文本,在条目中出现标点符号错误,在 JSON 行末尾弄错逗号,或者用 / vs \ 犯错误。

但是即使你成功设置了 watch 目录,它也不起作用。如果你浏览 watch 目录,你会得到一个空的文件列表。问题是 src/server/services/monitor/index.js 中的这段代码:

    if (!root || pattern.indexOf(root) !== 0) {
        return [];
    }

测试pattern.indexOf(root) !-- 0失败,因为pattern包含 \ 分隔符,而root有 / 分隔符,所以它们不匹配。

它可以通过这个补丁修复:

diff --git a/src/server/services/monitor/index.js b/src/server/services/monitor/index.js
index 084442ce..b8fc0d3e 100644
--- a/src/server/services/monitor/index.js
+++ b/src/server/services/monitor/index.js
@@ -14,7 +14,7 @@ const stop = () => {
 };
 
 const getFiles = (searchPath) => {
-    const root = monitor.root;
+    const root = path.normalize(monitor.root);
     const files = Object.keys(monitor.files);
     const pattern = path.join(root, searchPath, '*');
 
Watch Directory 不适用于 Windows 应用程序 #754
贡献者作者

对于等不及新版本发布的人来说,这里有一种给 Electron 应用程序打补丁的方法:

使用像记事本这样的纯文本编辑器,编辑文件 C:\Users\YOURNAME\AppData/Local/Programs/cncjs-app/resources/app/server/index.js 。

搜索行

  var root = monitor.root;

并将其替换为

  var root = external_path_default.a.normalize(monitor.root);

重新启动 CNCjs 后,它应该能够浏览 watch 目录,假设您已经使用上面显示的两种方法之一对其进行了设置。

Watch Directory 不适用于 Windows 应用程序 #754
贡献者作者

理想情况下,设置窗格将提供一种设置监视目录的方法,这将缓解文档问题,但这是一项并非完全微不足道的编码任务。