detect file changes

This commit is contained in:
codetypes committed 2024-11-21 09:38:31 +08:00
1 parent 298cedbbb3
commit cf1c33891f
4 files changed
+33 -12

No files matched your search

+13 -6
View File
@@ -152,7 +152,7 @@ export const Editor: FC<EditorProps> = ({ onUpdate: updateState, data: editor, .
filterFocus: true, filterFocus: true,
filterType: "content", filterType: "content",
placeholder: "", placeholder: "",
isFocused: false isFocused: false,
}); });
const onSearchChange = (option: FilterOption) => { const onSearchChange = (option: FilterOption) => {
@@ -327,7 +327,7 @@ export const Editor: FC<EditorProps> = ({ onUpdate: updateState, data: editor, .
} }
}; };
const reload = () => { const refresh = () => {
const rootData = findDataById("1"); const rootData = findDataById("1");
const rootNode = b3util.createNode(rootData); const rootNode = b3util.createNode(rootData);
editor.data = b3util.createTreeData(rootNode); editor.data = b3util.createTreeData(rootNode);
@@ -337,11 +337,13 @@ export const Editor: FC<EditorProps> = ({ onUpdate: updateState, data: editor, .
restoreViewport(); restoreViewport();
}; };
const reload = () => {};
const checkSubtree = () => { const checkSubtree = () => {
if (editor.graph) { if (editor.graph) {
const data = findDataById("1"); const data = findDataById("1");
if (b3util.isSubtreeUpdated(data)) { if (b3util.isSubtreeUpdated(data)) {
reload(); refresh();
pushHistory(); pushHistory();
onChange(); onChange();
} }
@@ -383,7 +385,7 @@ export const Editor: FC<EditorProps> = ({ onUpdate: updateState, data: editor, .
b3util.copyFromNode(data, newNode); b3util.copyFromNode(data, newNode);
data.size = b3util.calcTreeDataSize(data); data.size = b3util.calcTreeDataSize(data);
if (oldNode.path !== newNode.path) { if (oldNode.path !== newNode.path) {
reload(); refresh();
selectNode(null); selectNode(null);
selectNode(data.id); selectNode(data.id);
} else { } else {
@@ -623,6 +625,7 @@ export const Editor: FC<EditorProps> = ({ onUpdate: updateState, data: editor, .
export: editor.export, export: editor.export,
desc: editor.desc, desc: editor.desc,
} as TreeModel; } as TreeModel;
editor.modifiedTime = Date.now();
fs.writeFileSync(path, JSON.stringify(treeModel, null, 2)); fs.writeFileSync(path, JSON.stringify(treeModel, null, 2));
workspace.updateFileMeta(editor); workspace.updateFileMeta(editor);
editor.unsave = false; editor.unsave = false;
@@ -684,7 +687,7 @@ export const Editor: FC<EditorProps> = ({ onUpdate: updateState, data: editor, .
} as TreeModel; } as TreeModel;
fs.writeFileSync(subpath, JSON.stringify(subtreeModel, null, 2)); fs.writeFileSync(subpath, JSON.stringify(subtreeModel, null, 2));
data.path = workspace.relative(subpath); data.path = workspace.relative(subpath);
reload(); refresh();
pushHistory(); pushHistory();
onChange(); onChange();
}, 200); }, 200);
@@ -1006,6 +1009,10 @@ export const Editor: FC<EditorProps> = ({ onUpdate: updateState, data: editor, .
redo(); redo();
break; break;
} }
case "refresh": {
refresh();
break;
}
case "reload": { case "reload": {
reload(); reload();
break; break;
@@ -1274,7 +1281,7 @@ export const Editor: FC<EditorProps> = ({ onUpdate: updateState, data: editor, .
filterStr: "", filterStr: "",
filterType: "content", filterType: "content",
placeholder: "", placeholder: "",
isFocused: false isFocused: false,
}); });
keysRef.current?.focus(); keysRef.current?.focus();
}} }}
+1 -1
View File
@@ -694,7 +694,7 @@ export const Explorer: FC = () => {
console.log("editor move", editor.path === newPath, editor.path, newPath); console.log("editor move", editor.path === newPath, editor.path, newPath);
if (editor.path.startsWith(newPath)) { if (editor.path.startsWith(newPath)) {
console.log("editor reload", editor.path === newPath, editor.path, newPath); console.log("editor reload", editor.path === newPath, editor.path, newPath);
editor.dispatch("reload"); editor.dispatch("refresh");
} }
} }
}; };
-1
View File
@@ -133,7 +133,6 @@ export const Menu: FC<LayoutProps> = () => {
accelerator: "CmdOrCtrl+S", accelerator: "CmdOrCtrl+S",
enabled: enabled, enabled: enabled,
click: () => { click: () => {
console.log("save1");
workspace.save(); workspace.save();
}, },
}, },
+19 -4
View File
@@ -30,8 +30,9 @@ export type EditEvent =
| "jumpNode" | "jumpNode"
| "undo" | "undo"
| "redo" | "redo"
| "reload" | "refresh"
| "rename" | "rename"
| "reload"
| "updateTree" | "updateTree"
| "updateNode" | "updateNode"
| "searchNode" | "searchNode"
@@ -49,6 +50,7 @@ export class EditorStore {
dragSrcId?: string; dragSrcId?: string;
dragDstId?: string; dragDstId?: string;
unsave: boolean = false; unsave: boolean = false;
modifiedTime: number = Date.now();
historyStack: NodeModel[] = []; historyStack: NodeModel[] = [];
historyIndex: number = 0; historyIndex: number = 0;
selectedId?: string | null; selectedId?: string | null;
@@ -66,6 +68,7 @@ export class EditorStore {
const file = readJson(path) as TreeModel; const file = readJson(path) as TreeModel;
this.data = b3util.createTreeData(file.root); this.data = b3util.createTreeData(file.root);
this.modifiedTime = fs.statSync(path).mtimeMs;
this.desc = file.desc ?? ""; this.desc = file.desc ?? "";
this.export = file.export !== false; this.export = file.export !== false;
this.name = file.name || path.slice(0, -5); this.name = file.name || path.slice(0, -5);
@@ -393,6 +396,7 @@ export const useWorkspace = create<WorkspaceStore>((set, get) => ({
}, },
open: (path) => { open: (path) => {
path = fs.realpathSync(path);
const workspace = get(); const workspace = get();
let editor = workspace.editors.find((v) => v.path === path); let editor = workspace.editors.find((v) => v.path === path);
if (!editor) { if (!editor) {
@@ -488,8 +492,19 @@ export const useWorkspace = create<WorkspaceStore>((set, get) => ({
hasEvent = true; hasEvent = true;
} }
} }
if (event === "change" && filename === "node-config.b3-setting") { if (event === "change" && filename) {
workspace.loadNodeDefs(); if (filename === "node-config.b3-setting") {
workspace.loadNodeDefs();
} else {
const fullpath = fs.realpathSync(`${workspace.workdir}/${filename}`);
const editor = workspace.find(fullpath);
if (editor) {
console.log(filename, editor, editor.modifiedTime, fs.statSync(fullpath).mtimeMs);
if (editor.modifiedTime + 500 < fs.statSync(fullpath).mtimeMs) {
console.log("reload", filename);
}
}
}
} }
}); });
} catch (e) { } catch (e) {
@@ -550,7 +565,7 @@ export const useWorkspace = create<WorkspaceStore>((set, get) => ({
nodeDefs.set(v.name, v); nodeDefs.set(v.name, v);
} }
set({ nodeDefs }); set({ nodeDefs });
workspace.editing?.dispatch("reload"); workspace.editing?.dispatch("refresh");
}, },
// node edit // node edit