import { DarkIcon, LightIcon, SystemModeIcon } from "@lume/icons"; import { useStorage } from "@lume/storage"; import { cn } from "@lume/utils"; import * as Switch from "@radix-ui/react-switch"; import { invoke } from "@tauri-apps/api/core"; import { getCurrent } from "@tauri-apps/api/window"; import { disable, enable, isEnabled } from "@tauri-apps/plugin-autostart"; import { isPermissionGranted, requestPermission, } from "@tauri-apps/plugin-notification"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; export function GeneralSettingScreen() { const storage = useStorage(); const [t] = useTranslation(); const [apiKey, setAPIKey] = useState(""); const [settings, setSettings] = useState({ ...storage.settings, notification: false, autolaunch: false, appearance: "system", }); const changeTheme = async (theme: "light" | "dark" | "auto") => { await invoke("plugin:theme|set_theme", { theme }); // update state setSettings((prev) => ({ ...prev, appearance: theme })); }; const toggleLowPower = async () => { await storage.createSetting("lowPower", String(+!settings.lowPower)); setSettings((state) => ({ ...state, lowPower: !settings.lowPower })); }; const toggleAutolaunch = async () => { if (!settings.autolaunch) { await enable(); // update state setSettings((prev) => ({ ...prev, autolaunch: true })); } else { await disable(); // update state setSettings((prev) => ({ ...prev, autolaunch: false })); } }; const toggleMedia = async () => { await storage.createSetting("media", String(+!settings.media)); storage.settings.media = !settings.media; // update state setSettings((prev) => ({ ...prev, media: !settings.media })); }; const toggleHashtag = async () => { await storage.createSetting("hashtag", String(+!settings.hashtag)); storage.settings.hashtag = !settings.hashtag; // update state setSettings((prev) => ({ ...prev, hashtag: !settings.hashtag })); }; const toggleAutoupdate = async () => { await storage.createSetting("autoupdate", String(+!settings.autoupdate)); storage.settings.autoupdate = !settings.autoupdate; // update state setSettings((prev) => ({ ...prev, autoupdate: !settings.autoupdate })); }; const toggleNofitication = async () => { if (settings.notification) return; await requestPermission(); // update state setSettings((prev) => ({ ...prev, notification: !settings.notification })); }; const toggleTranslation = async () => { await storage.createSetting("translation", String(+!settings.translation)); storage.settings.translation = !settings.translation; // update state setSettings((prev) => ({ ...prev, translation: !settings.translation })); }; const saveApi = async () => { await storage.createSetting("translateApiKey", apiKey); }; useEffect(() => { async function loadSettings() { const theme = await getCurrent().theme(); setSettings((prev) => ({ ...prev, appearance: theme })); const autostart = await isEnabled(); setSettings((prev) => ({ ...prev, autolaunch: autostart })); const permissionGranted = await isPermissionGranted(); setSettings((prev) => ({ ...prev, notification: permissionGranted })); } loadSettings(); }, []); return (