import { useEffect } from "react"; import { Card } from "@/components/ui/card"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { useSettingsPageStatesStore } from "@/services/store"; import { Label } from "@/components/ui/label"; import { Button } from "@/components/ui/button"; import { toast } from "sonner"; import { ArrowDownToLine, ArrowRight, EthernetPort, Loader2, Radio, RotateCw } from "lucide-react"; import { useSettings } from "@/helpers/use-settings"; import { z } from "zod"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod" import { Form, FormControl, FormField, FormItem, FormMessage } from "@/components/ui/form"; import { invoke } from "@tauri-apps/api/core"; import { SlidingButton } from "@/components/custom/slidingButton"; import clsx from "clsx"; import { NumberInput } from "@/components/custom/numberInput"; const websocketPortSchema = z.object({ port: z.coerce.number({ error: (issue) => issue.input === undefined || issue.input === null || issue.input === "" ? "Websocket Port is required" : "Websocket Port must be a valid number" }).int({ message: "Websocket Port must be an integer" }).min(50000, { message: "Websocket Port must be at least 50000" }).max(60000, { message: "Websocket Port must be at most 60000" }), }); function ExtInstallSettings() { const openLink = async (url: string, app: string | null) => { try { await invoke('open_file_with_app', { filePath: url, appName: app }).then(() => { toast.info("Opening link", { description: `Opening link with ${app ? app : 'default app'}.`, }) }); } catch (e) { console.error(e); toast.error("Failed to open link", { description: "An error occurred while trying to open the link.", }) } } return (

NeoDLP Extension

Integrate NeoDLP with your favourite browser

Get Now
} onClick={() => openLink('https://chromewebstore.google.com/detail/neo-downloader-plus/mehopeailfjmiloiiohgicphlcgpompf', 'chrome')} > Get Chrome Extension from Chrome Web Store Get Now
} onClick={() => openLink('https://addons.mozilla.org/en-US/firefox/addon/neo-downloader-plus', 'firefox')} > Get Firefox Extension from Mozilla Addons Store

* These links opens with coresponding browsers only. Make sure the browser is installed before clicking the link

); } function ExtPortSettings() { const formResetTrigger = useSettingsPageStatesStore(state => state.formResetTrigger); const acknowledgeFormReset = useSettingsPageStatesStore(state => state.acknowledgeFormReset); const websocketPort = useSettingsPageStatesStore(state => state.settings.websocket_port); const isChangingWebSocketPort = useSettingsPageStatesStore(state => state.isChangingWebSocketPort); const setIsChangingWebSocketPort = useSettingsPageStatesStore(state => state.setIsChangingWebSocketPort); const isRestartingWebSocketServer = useSettingsPageStatesStore(state => state.isRestartingWebSocketServer); const { saveSettingsKey } = useSettings(); interface Config { port: number; } const websocketPortForm = useForm>({ resolver: zodResolver(websocketPortSchema), defaultValues: { port: websocketPort, }, mode: "onChange", }); const watchedPort = websocketPortForm.watch("port"); const { errors: websocketPortFormErrors } = websocketPortForm.formState; async function handleWebsocketPortSubmit(values: z.infer) { setIsChangingWebSocketPort(true); try { // const port = parseInt(values.port, 10); const updatedConfig: Config = await invoke("update_config", { newConfig: { port: values.port, } }); saveSettingsKey('websocket_port', updatedConfig.port); toast.success("Websocket port updated", { description: `Websocket port changed to ${values.port}`, }); } catch (error) { console.error("Error changing websocket port:", error); toast.error("Failed to change websocket port", { description: "An error occurred while trying to change the websocket port. Please try again.", }); } finally { setIsChangingWebSocketPort(false); } } useEffect(() => { if (formResetTrigger > 0) { websocketPortForm.reset(); acknowledgeFormReset(); } }, [formResetTrigger]); return (

Websocket Port

Change extension websocket server port

( )} />
); } export function ExtensionSettings() { const activeSubExtTab = useSettingsPageStatesStore(state => state.activeSubExtTab); const setActiveSubExtTab = useSettingsPageStatesStore(state => state.setActiveSubExtTab); const isChangingWebSocketPort = useSettingsPageStatesStore(state => state.isChangingWebSocketPort); const isRestartingWebSocketServer = useSettingsPageStatesStore(state => state.isRestartingWebSocketServer); const setIsRestartingWebSocketServer = useSettingsPageStatesStore(state => state.setIsRestartingWebSocketServer); const tabsList = [ { key: "install", label: "Install", icon: ArrowDownToLine, component: }, { key: "port", label: "Port", icon: EthernetPort, component: }, ]; return ( <>

Extension Websocket Server

{isChangingWebSocketPort || isRestartingWebSocketServer ? ( <>
Restarting... ) : ( <>
Running )}
{tabsList.map((tab) => ( {tab.label} ))}
{tabsList.map((tab) => ( {tab.component} ))}
); }