diff --git a/src-tauri/gen/schemas/capabilities.json b/src-tauri/gen/schemas/capabilities.json index c8b8edd..1f051ca 100644 --- a/src-tauri/gen/schemas/capabilities.json +++ b/src-tauri/gen/schemas/capabilities.json @@ -1 +1 @@ -{"default":{"identifier":"default","description":"Default capabilities for the main Wraith window","local":true,"windows":["main","tool-*"],"permissions":["core:default","core:event:default","core:window:default","shell:allow-open"]}} \ No newline at end of file +{"default":{"identifier":"default","description":"Default capabilities for the main Wraith window","local":true,"windows":["main","tool-*"],"permissions":["core:default","core:event:default","core:window:default","core:window:allow-create","core:webview:default","core:webview:allow-create-webview-window","shell:allow-open"]}} \ No newline at end of file diff --git a/src/components/tools/FileEditor.vue b/src/components/tools/FileEditor.vue new file mode 100644 index 0000000..2464e94 --- /dev/null +++ b/src/components/tools/FileEditor.vue @@ -0,0 +1,107 @@ + + + diff --git a/src/components/tools/ToolWindow.vue b/src/components/tools/ToolWindow.vue index 51a2882..c2f50ce 100644 --- a/src/components/tools/ToolWindow.vue +++ b/src/components/tools/ToolWindow.vue @@ -9,6 +9,7 @@ +
@@ -27,6 +28,7 @@ import DnsLookup from "./DnsLookup.vue"; import WhoisTool from "./WhoisTool.vue"; import BandwidthTest from "./BandwidthTest.vue"; import SubnetCalc from "./SubnetCalc.vue"; +import FileEditor from "./FileEditor.vue"; import SshKeyGen from "./SshKeyGen.vue"; import PasswordGen from "./PasswordGen.vue"; diff --git a/src/layouts/MainLayout.vue b/src/layouts/MainLayout.vue index 0fdc056..2e9c8f4 100644 --- a/src/layouts/MainLayout.vue +++ b/src/layouts/MainLayout.vue @@ -235,15 +235,6 @@ - - -
@@ -384,9 +375,20 @@ function handleThemeSelect(theme: ThemeDefinition): void { async function handleOpenFile(entry: FileEntry): Promise { if (!activeSessionId.value) return; try { - const content = await invoke("sftp_read_file", { sessionId: activeSessionId.value, path: entry.path }); - editorFile.value = { path: entry.path, content, sessionId: activeSessionId.value }; - } catch (err) { console.error("Failed to open SFTP file:", err); } + const { WebviewWindow } = await import("@tauri-apps/api/webviewWindow"); + const fileName = entry.path.split("/").pop() || entry.path; + const label = `editor-${Date.now()}`; + const sessionId = activeSessionId.value; + + new WebviewWindow(label, { + title: `${fileName} — Wraith Editor`, + width: 800, + height: 600, + resizable: true, + center: true, + url: `index.html#/tool/editor?sessionId=${sessionId}&path=${encodeURIComponent(entry.path)}`, + }); + } catch (err) { console.error("Failed to open editor:", err); } } async function handleQuickConnect(): Promise {