mirror of
https://github.com/jamiepine/voicebox.git
synced 2026-09-15 12:50:42 -07:00
- Changed the server URL from 'http://localhost:8000' to 'http://127.0.0.1:17493' in the server store and connection form. - Enhanced server startup logging to display the dynamically assigned server URL. - Updated server management logic in main.rs to reflect the new port configuration and improve orphaned process handling.
121 lines
4.0 KiB
TypeScript
121 lines
4.0 KiB
TypeScript
import { zodResolver } from '@hookform/resolvers/zod';
|
|
import { useForm } from 'react-hook-form';
|
|
import { useEffect } from 'react';
|
|
import * as z from 'zod';
|
|
import { Button } from '@/components/ui/button';
|
|
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
|
import {
|
|
Form,
|
|
FormControl,
|
|
FormDescription,
|
|
FormField,
|
|
FormItem,
|
|
FormLabel,
|
|
FormMessage,
|
|
} from '@/components/ui/form';
|
|
import { Input } from '@/components/ui/input';
|
|
import { Checkbox } from '@/components/ui/checkbox';
|
|
import { useToast } from '@/components/ui/use-toast';
|
|
import { useServerStore } from '@/stores/serverStore';
|
|
import { setKeepServerRunning } from '@/lib/tauri';
|
|
|
|
const connectionSchema = z.object({
|
|
serverUrl: z.string().url('Please enter a valid URL'),
|
|
});
|
|
|
|
type ConnectionFormValues = z.infer<typeof connectionSchema>;
|
|
|
|
export function ConnectionForm() {
|
|
const serverUrl = useServerStore((state) => state.serverUrl);
|
|
const setServerUrl = useServerStore((state) => state.setServerUrl);
|
|
const keepServerRunningOnClose = useServerStore((state) => state.keepServerRunningOnClose);
|
|
const setKeepServerRunningOnClose = useServerStore((state) => state.setKeepServerRunningOnClose);
|
|
const { toast } = useToast();
|
|
|
|
const form = useForm<ConnectionFormValues>({
|
|
resolver: zodResolver(connectionSchema),
|
|
defaultValues: {
|
|
serverUrl: serverUrl,
|
|
},
|
|
});
|
|
|
|
// Sync form with store when serverUrl changes externally
|
|
useEffect(() => {
|
|
form.reset({ serverUrl });
|
|
}, [serverUrl, form]);
|
|
|
|
const { isDirty } = form.formState;
|
|
|
|
function onSubmit(data: ConnectionFormValues) {
|
|
setServerUrl(data.serverUrl);
|
|
form.reset(data); // Reset form state after successful submission
|
|
toast({
|
|
title: 'Server URL updated',
|
|
description: `Connected to ${data.serverUrl}`,
|
|
});
|
|
}
|
|
|
|
return (
|
|
<Card>
|
|
<CardHeader>
|
|
<CardTitle>Server Connection</CardTitle>
|
|
</CardHeader>
|
|
<CardContent>
|
|
<Form {...form}>
|
|
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-4">
|
|
<FormField
|
|
control={form.control}
|
|
name="serverUrl"
|
|
render={({ field }) => (
|
|
<FormItem>
|
|
<FormLabel>Server URL</FormLabel>
|
|
<FormControl>
|
|
<Input placeholder="http://127.0.0.1:17493" {...field} />
|
|
</FormControl>
|
|
<FormDescription>Enter the URL of your voicebox backend server</FormDescription>
|
|
<FormMessage />
|
|
</FormItem>
|
|
)}
|
|
/>
|
|
|
|
{isDirty && <Button type="submit">Update Connection</Button>}
|
|
</form>
|
|
</Form>
|
|
|
|
<div className="mt-6 pt-6 border-t">
|
|
<div className="flex items-start space-x-3">
|
|
<Checkbox
|
|
id="keepServerRunning"
|
|
checked={keepServerRunningOnClose}
|
|
onCheckedChange={(checked: boolean) => {
|
|
setKeepServerRunningOnClose(checked);
|
|
setKeepServerRunning(checked).catch((error) => {
|
|
console.error('Failed to sync setting to Rust:', error);
|
|
});
|
|
toast({
|
|
title: 'Setting updated',
|
|
description: checked
|
|
? 'Server will continue running when app closes'
|
|
: 'Server will stop when app closes',
|
|
});
|
|
}}
|
|
/>
|
|
<div className="space-y-1">
|
|
<label
|
|
htmlFor="keepServerRunning"
|
|
className="text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 cursor-pointer"
|
|
>
|
|
Keep server running when app closes
|
|
</label>
|
|
<p className="text-sm text-muted-foreground">
|
|
When enabled, the server will continue running in the background after closing the
|
|
app. Disabled by default.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</CardContent>
|
|
</Card>
|
|
);
|
|
}
|