diff --git a/src/main/index.ts b/src/main/index.ts index 919e48c6..1678d207 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -10,6 +10,7 @@ import { PythonRPC } from "./services/python-rpc"; import { Aria2 } from "./services/aria2"; import { db, levelKeys } from "./level"; import { loadState } from "./main"; +import { sleep } from "./helpers"; const { autoUpdater } = updater; @@ -92,11 +93,15 @@ const handleDeepLinkPath = (uri?: string) => { const authorCode = url.searchParams.get("author"); if (themeName && authorCode) { - WindowManager.mainWindow?.webContents.send( - "import-theme", - themeName, - authorCode - ); + WindowManager.redirect(`settings?theme=true`); + + sleep(1000).then(() => { + WindowManager.mainWindow?.webContents.send( + "import-theme", + themeName, + authorCode + ); + }); } } } catch (error) { diff --git a/src/renderer/src/context/settings/settings.context.tsx b/src/renderer/src/context/settings/settings.context.tsx index c1031a0c..b93efa55 100644 --- a/src/renderer/src/context/settings/settings.context.tsx +++ b/src/renderer/src/context/settings/settings.context.tsx @@ -37,22 +37,33 @@ export function SettingsContextProvider({ }: Readonly) { const dispatch = useAppDispatch(); const [sourceUrl, setSourceUrl] = useState(null); + const [appearanceUrl, setAppearanceUrl] = useState(null); const [currentCategoryIndex, setCurrentCategoryIndex] = useState(0); const [blockedUsers, setBlockedUsers] = useState([]); const [searchParams] = useSearchParams(); const defaultSourceUrl = searchParams.get("urls"); - + const defaultAppearanceUrl = searchParams.get("theme"); useEffect(() => { if (sourceUrl) setCurrentCategoryIndex(2); }, [sourceUrl]); - + useEffect(() => { if (defaultSourceUrl) { setSourceUrl(defaultSourceUrl); } }, [defaultSourceUrl]); + + useEffect(() => { + if (appearanceUrl) setCurrentCategoryIndex(3); + }, [appearanceUrl]); + + useEffect(() => { + if (defaultAppearanceUrl) { + setAppearanceUrl(defaultAppearanceUrl); + } + }, [defaultAppearanceUrl]); const fetchBlockedUsers = useCallback(async () => { const blockedUsers = await window.electron.getBlockedUsers(12, 0); diff --git a/src/renderer/src/pages/settings/aparence/settings-appearance.tsx b/src/renderer/src/pages/settings/aparence/settings-appearance.tsx index 4a0ff317..7a11b46b 100644 --- a/src/renderer/src/pages/settings/aparence/settings-appearance.tsx +++ b/src/renderer/src/pages/settings/aparence/settings-appearance.tsx @@ -2,9 +2,16 @@ import { useEffect, useState } from "react"; import "./settings-appearance.scss"; import { ThemeActions, ThemeCard, ThemePlaceholder } from "./index"; import type { Theme } from "@types"; +import { ImportThemeModal } from "./modals/import-theme-modal"; export const SettingsAppearance = () => { const [themes, setThemes] = useState([]); + const [isImportThemeModalVisible, setIsImportThemeModalVisible] = + useState(false); + const [importTheme, setImportTheme] = useState<{ + theme: string; + author: string; + } | null>(null); const loadThemes = async () => { const themesList = await window.electron.getAllCustomThemes(); @@ -23,6 +30,15 @@ export const SettingsAppearance = () => { return () => unsubscribe(); }, []); + useEffect(() => { + const unsubscribe = window.electron.onImportTheme((theme, author) => { + setIsImportThemeModalVisible(true); + setImportTheme({ theme, author }); + }); + + return () => unsubscribe(); + }, []); + return (
@@ -46,6 +62,19 @@ export const SettingsAppearance = () => { )) )}
+ + {importTheme && ( + setIsImportThemeModalVisible(false)} + onThemeImported={() => { + setIsImportThemeModalVisible(false); + loadThemes(); + }} + themeName={importTheme.theme} + authorCode={importTheme.author} + /> + )} ); };