diff --git a/client/package.json b/client/package.json index e4fc5df..a70e888 100644 --- a/client/package.json +++ b/client/package.json @@ -1,7 +1,7 @@ { "name": "client", "version": "0.1.0", - "private": true, + "private": false, "dependencies": { "@heroicons/react": "^2.0.18", "@types/jest": "^27.5.2", diff --git a/client/src/components/Forms/NewThreadCard.tsx b/client/src/components/Forms/NewThreadCard.tsx deleted file mode 100644 index 0489304..0000000 --- a/client/src/components/Forms/NewThreadCard.tsx +++ /dev/null @@ -1,211 +0,0 @@ -import CardContainer from "../Modals/CardContainer"; -import { - ArrowUpTrayIcon, - CpuChipIcon, - ArrowPathIcon, -} from "@heroicons/react/24/outline"; -import { XCircleIcon } from "@heroicons/react/24/solid"; -import { useState, useEffect, useMemo } from "react"; -import { generatePrivateKey, getPublicKey, finishEvent } from "nostr-tools"; -import { publish } from "../../utils/relays"; -import FileUpload from "../../utils/FileUpload"; -import { renderMedia } from "../../utils/FileUpload"; - -const NewThreadCard: React.FC = () => { - const [comment, setComment] = useState(""); - const [file, setFile] = useState(""); - const [sk, setSk] = useState(generatePrivateKey()); - const [difficulty, setDifficulty] = useState( - localStorage.getItem("difficulty") || "21" - ); - const [uploadingFile, setUploadingFile] = useState(false); - const [messageFromWorker, setMessageFromWorker] = useState(null); - const [doingWorkProp, setDoingWorkProp] = useState(false); - const [doingWorkProgress, setDoingWorkProgress] = useState(0); - - // Initialize the worker outside of any effects - const numCores = navigator.hardwareConcurrency || 4; - - const workers = useMemo( - () => Array(numCores).fill(null).map(() => new Worker(new URL("../../powWorker", import.meta.url))), - [] - ); - - - useEffect(() => { - workers.forEach((worker) => { - worker.onmessage = (event) => { - if (event.data.status === 'progress') { - console.log(`Worker progress: Checked ${event.data.currentNonce} nonces.`); - setDoingWorkProgress(event.data.currentNonce); - } else if (event.data.found) { - setMessageFromWorker(event.data.event); - // Terminate all workers once a solution is found - workers.forEach(w => w.terminate()); - } - }; - }); - - const handleDifficultyChange = (event: Event) => { - const customEvent = event as CustomEvent; - const { difficulty, filterDifficulty } = customEvent.detail; - setDifficulty(difficulty); - }; - - window.addEventListener("difficultyChanged", handleDifficultyChange); - - return () => { - window.removeEventListener("difficultyChanged", handleDifficultyChange); - }; - }, []); - - const handleSubmit = async (event: React.FormEvent) => { - event.preventDefault(); - - workers.forEach((worker, index) => { - worker.postMessage({ - unsigned: { - kind: 1, - tags: [], - content: comment + " " + file, - created_at: Math.floor(Date.now() / 1000), - pubkey: getPublicKey(sk), - }, - difficulty, - nonceStart: index, // Each worker starts from its index - nonceStep: numCores // Each worker increments by the total number of workers - }); - }); - }; - - - useEffect(() => { - setDoingWorkProp(false); - if (messageFromWorker) { - try { - const signedEvent = finishEvent(messageFromWorker, sk); - publish(signedEvent); - - setComment(""); - setFile(""); - setSk(generatePrivateKey()); - setMessageFromWorker(null); - - } catch (error) { - setComment(error + " " + comment); - } - } - }, [messageFromWorker]); - - async function attachFile(file_input: File | null) { - setUploadingFile(true); // start loading - try { - if (file_input) { - const rx = await FileUpload(file_input); - setUploadingFile(false); // stop loading - if (rx.url) { - setFile(rx.url); - } else if (rx?.error) { - setFile(rx.error); - } - } - } catch (error: unknown) { - setUploadingFile(false); // stop loading - if (error instanceof Error) { - setFile(error?.message); - } - } - } - - return ( -
{ - handleSubmit(event); - setDoingWorkProp(true); - }} - > - - -
-