mirror of https://github.com/VERT-sh/VERT.git
170 lines
5.0 KiB
Svelte
170 lines
5.0 KiB
Svelte
<script lang="ts">
|
|
import Panel from "$lib/components/visual/Panel.svelte";
|
|
import { GITHUB_URL_VERTD } from "$lib/consts";
|
|
import { ServerIcon } from "lucide-svelte";
|
|
import type { ISettings } from "./index.svelte";
|
|
import clsx from "clsx";
|
|
import Dropdown from "$lib/components/functional/Dropdown.svelte";
|
|
import { vertdLoaded } from "$lib/store/index.svelte";
|
|
import { m } from "$lib/paraglide/messages";
|
|
import { link } from "$lib/store/index.svelte";
|
|
//import { converters } from "$lib/converters";
|
|
|
|
let vertdCommit = $state<string | null>(null);
|
|
let abortController: AbortController | null = null;
|
|
|
|
const { settings = $bindable() }: { settings: ISettings } = $props();
|
|
|
|
$effect(() => {
|
|
if (settings.vertdURL) {
|
|
if (abortController) abortController.abort();
|
|
abortController = new AbortController();
|
|
const { signal } = abortController;
|
|
|
|
vertdCommit = "loading";
|
|
fetch(`${settings.vertdURL}/api/version`, { signal })
|
|
.then((res) => {
|
|
if (!res.ok) throw new Error("bad response");
|
|
vertdLoaded.set(false);
|
|
return res.json();
|
|
})
|
|
.then((data) => {
|
|
vertdCommit = data.data;
|
|
vertdLoaded.set(true);
|
|
})
|
|
.catch((err) => {
|
|
if (err.name !== "AbortError") {
|
|
vertdCommit = null;
|
|
vertdLoaded.set(false);
|
|
// const converter = converters.find((c) => c.name === "vertd");
|
|
// if (converter) converter.status = "not-ready";
|
|
}
|
|
});
|
|
} else {
|
|
if (abortController) abortController.abort();
|
|
vertdCommit = null;
|
|
vertdLoaded.set(false);
|
|
// const converter = converters.find((c) => c.name === "vertd");
|
|
// if (converter) converter.status = "not-ready";
|
|
}
|
|
|
|
return () => {
|
|
if (abortController) abortController.abort();
|
|
};
|
|
});
|
|
</script>
|
|
|
|
<Panel class="flex flex-col gap-8 p-6">
|
|
<div class="flex flex-col gap-3">
|
|
<h2 class="text-2xl font-bold">
|
|
<ServerIcon
|
|
size="40"
|
|
class="inline-block -mt-1 mr-2 bg-accent-red p-2 rounded-full overflow-visible"
|
|
color="black"
|
|
/>
|
|
{m["settings.vertd.title"]()}
|
|
</h2>
|
|
<p
|
|
class={clsx("text-sm font-normal", {
|
|
"text-failure": vertdCommit === null,
|
|
"text-green-700 dynadark:text-green-300": vertdCommit !== null,
|
|
"!text-muted": vertdCommit === "loading",
|
|
})}
|
|
>
|
|
{m["settings.vertd.status"]()}
|
|
{vertdCommit
|
|
? vertdCommit === "loading"
|
|
? m["settings.vertd.loading"]()
|
|
: m["settings.vertd.available"]({ commitId: vertdCommit })
|
|
: m["settings.vertd.unavailable"]()}
|
|
</p>
|
|
<div class="flex flex-col gap-8">
|
|
<div class="flex flex-col gap-4">
|
|
<p class="text-sm text-muted font-normal">
|
|
{@html m["settings.vertd.description"]()}
|
|
</p>
|
|
<p class="text-sm text-muted font-normal">
|
|
{@html link(
|
|
"vertd_link",
|
|
m["settings.vertd.hosting_info"](),
|
|
GITHUB_URL_VERTD,
|
|
)}
|
|
</p>
|
|
<div class="flex flex-col gap-2">
|
|
<p class="text-base font-bold">
|
|
{m["settings.vertd.instance_url"]()}
|
|
</p>
|
|
<input
|
|
type="text"
|
|
placeholder={m["settings.vertd.url_placeholder"]()}
|
|
bind:value={settings.vertdURL}
|
|
/>
|
|
</div>
|
|
<div class="flex flex-col gap-4">
|
|
<div class="flex flex-col gap-2">
|
|
<p class="text-base font-bold">
|
|
{m["settings.vertd.conversion_speed"]()}
|
|
</p>
|
|
<p class="text-sm text-muted font-normal">
|
|
{m["settings.vertd.speed_description"]()}
|
|
</p>
|
|
</div>
|
|
<Dropdown
|
|
options={[
|
|
m["settings.vertd.speeds.very_slow"](),
|
|
m["settings.vertd.speeds.slower"](),
|
|
m["settings.vertd.speeds.slow"](),
|
|
m["settings.vertd.speeds.medium"](),
|
|
m["settings.vertd.speeds.fast"](),
|
|
m["settings.vertd.speeds.ultra_fast"](),
|
|
]}
|
|
settingsStyle
|
|
selected={(() => {
|
|
switch (settings.vertdSpeed) {
|
|
case "verySlow":
|
|
return m[
|
|
"settings.vertd.speeds.very_slow"
|
|
]();
|
|
case "slower":
|
|
return m["settings.vertd.speeds.slower"]();
|
|
case "slow":
|
|
return m["settings.vertd.speeds.slow"]();
|
|
case "medium":
|
|
return m["settings.vertd.speeds.medium"]();
|
|
case "fast":
|
|
return m["settings.vertd.speeds.fast"]();
|
|
case "ultraFast":
|
|
return m[
|
|
"settings.vertd.speeds.ultra_fast"
|
|
]();
|
|
}
|
|
})()}
|
|
onselect={(selected) => {
|
|
switch (selected) {
|
|
case m["settings.vertd.speeds.very_slow"]():
|
|
settings.vertdSpeed = "verySlow";
|
|
break;
|
|
case m["settings.vertd.speeds.slower"]():
|
|
settings.vertdSpeed = "slower";
|
|
break;
|
|
case m["settings.vertd.speeds.slow"]():
|
|
settings.vertdSpeed = "slow";
|
|
break;
|
|
case m["settings.vertd.speeds.medium"]():
|
|
settings.vertdSpeed = "medium";
|
|
break;
|
|
case m["settings.vertd.speeds.fast"]():
|
|
settings.vertdSpeed = "fast";
|
|
break;
|
|
case m["settings.vertd.speeds.ultra_fast"]():
|
|
settings.vertdSpeed = "ultraFast";
|
|
break;
|
|
}
|
|
}}
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</Panel>
|