From 9400a1b2eede87a2d953b0c754f9c2c96cfb34f8 Mon Sep 17 00:00:00 2001 From: Wojciech Kwolek Date: Sat, 8 Jun 2024 05:29:15 +0200 Subject: initial commit --- src/index.tsx | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/index.tsx (limited to 'src/index.tsx') diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..b300f20 --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,62 @@ +import { ActionPanel, List, Action, closeMainWindow } from "@raycast/api"; +import { connect, Socket } from "net"; +import { showFailureToast } from "@raycast/utils"; +import { useState, useEffect, useRef } from "react"; + +export default function Command({ arguments: { host, port } }: { arguments: { host: string, port: string } }) { + const [elements, setElements] = useState(); + const socket = useRef(); + + useEffect(() => { + const showErr = (err: ErrorEvent) => { + showFailureToast(err.message, { title: "Couldn't connect to the script" }); + setElements([]); + }; + + const s = connect({ host, port: parseInt(port) }) + socket.current = s + s.on('error', showErr); + + let buf: string = ''; + + s.on('data', data => { + buf += data; + + const firstLineEnding = buf.indexOf('\n'); + if (firstLineEnding == -1) return; + + const amount = parseInt(buf.slice(0, firstLineEnding)); + + const lines = buf.slice(firstLineEnding + 1).trim().split("\n"); + if (lines.length != amount) return; + + setElements(lines.map(s => s.trim()).filter(s => s.length != 0)); + }) + + s.on('close', () => closeMainWindow()); + + return () => { + if (socket.current != null) socket.current.end(); + } + }, [host, port]) + + + return ( + + {elements?.map((item, idx) => + { + const s = socket.current; + if (s == null) { + showFailureToast('Socket disconnected') + closeMainWindow(); + return; + } + s.write(item + '\n') + s.end() + }} /> + + } />)} + + ); +} -- cgit v1.2.3