diff --git a/src/lib/utils/app-config.ts b/src/lib/utils/app-config.ts new file mode 100644 index 0000000..1bc21ce --- /dev/null +++ b/src/lib/utils/app-config.ts @@ -0,0 +1,48 @@ +import { invoke } from '@tauri-apps/api/core'; + +export type ProxyKind = 'Http' | 'Socks5'; + +export type ProxyConfig = { + enabled: boolean; + kind: ProxyKind; + host: string | null; + port: number | null; + username: string | null; + password: string | null; +}; + +export type AppConfig = { + proxy?: Partial | null; +} & Record; + +export async function loadAppConfig() { + return invoke('load_app_config'); +} + +export async function saveAppConfig(config: AppConfig) { + await invoke('save_app_config', { config }); +} + +export function getProxyConfig(config: AppConfig): ProxyConfig { + const proxy = config.proxy ?? {}; + + return { + enabled: proxy.enabled === true, + kind: proxy.kind === 'Socks5' ? 'Socks5' : 'Http', + host: typeof proxy.host === 'string' ? proxy.host : null, + port: typeof proxy.port === 'number' && Number.isInteger(proxy.port) ? proxy.port : null, + username: typeof proxy.username === 'string' ? proxy.username : null, + password: typeof proxy.password === 'string' ? proxy.password : null, + }; +} + +export async function updateProxyConfig(updater: (current: ProxyConfig) => ProxyConfig) { + const currentConfig = await loadAppConfig(); + const nextProxyConfig = updater(getProxyConfig(currentConfig)); + await saveAppConfig({ + ...currentConfig, + proxy: nextProxyConfig, + }); + + return nextProxyConfig; +} diff --git a/src/routes/settings/proxy/+page.svelte b/src/routes/settings/proxy/+page.svelte index e69de29..3aa49ae 100644 --- a/src/routes/settings/proxy/+page.svelte +++ b/src/routes/settings/proxy/+page.svelte @@ -0,0 +1,19 @@ + + +
+ + + + + + +
diff --git a/src/routes/settings/proxy/EnableProxy.svelte b/src/routes/settings/proxy/EnableProxy.svelte new file mode 100644 index 0000000..a5bc40e --- /dev/null +++ b/src/routes/settings/proxy/EnableProxy.svelte @@ -0,0 +1,51 @@ + + +
+
 
+ +
diff --git a/src/routes/settings/proxy/ProtocolSelect.svelte b/src/routes/settings/proxy/ProtocolSelect.svelte new file mode 100644 index 0000000..8160da6 --- /dev/null +++ b/src/routes/settings/proxy/ProtocolSelect.svelte @@ -0,0 +1,77 @@ + + + diff --git a/src/routes/settings/proxy/ProxyHost.svelte b/src/routes/settings/proxy/ProxyHost.svelte new file mode 100644 index 0000000..3da1b88 --- /dev/null +++ b/src/routes/settings/proxy/ProxyHost.svelte @@ -0,0 +1,67 @@ + + + diff --git a/src/routes/settings/proxy/ProxyPassword.svelte b/src/routes/settings/proxy/ProxyPassword.svelte new file mode 100644 index 0000000..9ac90b2 --- /dev/null +++ b/src/routes/settings/proxy/ProxyPassword.svelte @@ -0,0 +1,67 @@ + + + diff --git a/src/routes/settings/proxy/ProxyPort.svelte b/src/routes/settings/proxy/ProxyPort.svelte new file mode 100644 index 0000000..e8b7ef1 --- /dev/null +++ b/src/routes/settings/proxy/ProxyPort.svelte @@ -0,0 +1,85 @@ + + + diff --git a/src/routes/settings/proxy/ProxyUsername.svelte b/src/routes/settings/proxy/ProxyUsername.svelte new file mode 100644 index 0000000..145e195 --- /dev/null +++ b/src/routes/settings/proxy/ProxyUsername.svelte @@ -0,0 +1,67 @@ + + +