This commit is contained in:
Hachi-R 2025-02-16 01:28:01 -03:00
parent d7d88ecb8c
commit bf3905f19e
5 changed files with 87 additions and 80 deletions

View file

@ -4,7 +4,7 @@ import { WindowManager } from "@main/services";
const importTheme = async (
_event: Electron.IpcMainInvokeEvent,
theme: string,
author: string,
author: string
) => {
WindowManager.mainWindow?.webContents.send("import-theme", theme, author);
};

View file

@ -92,7 +92,11 @@ const handleDeepLinkPath = (uri?: string) => {
const authorCode = url.searchParams.get("author");
if (themeName && authorCode) {
WindowManager.mainWindow?.webContents.send("import-theme", themeName, authorCode);
WindowManager.mainWindow?.webContents.send(
"import-theme",
themeName,
authorCode
);
}
}
} catch (error) {

View file

@ -361,8 +361,11 @@ contextBridge.exposeInMainWorld("electron", {
ipcRenderer.invoke("getCustomThemeById", themeId),
getActiveCustomTheme: () => ipcRenderer.invoke("getActiveCustomTheme"),
onImportTheme: (cb: (theme: string, author: string) => void) => {
const listener = (_event: Electron.IpcRendererEvent, theme: string, author: string) =>
cb(theme, author);
const listener = (
_event: Electron.IpcRendererEvent,
theme: string,
author: string
) => cb(theme, author);
ipcRenderer.on("import-theme", listener);
return () => ipcRenderer.removeListener("import-theme", listener);
},

View file

@ -39,13 +39,13 @@ export interface AppProps {
export function App() {
const contentRef = useRef<HTMLDivElement>(null);
const { updateLibrary, library } = useLibrary();
const [isImportThemeModalVisible, setIsImportThemeModalVisible] = useState(false);
const [isImportThemeModalVisible, setIsImportThemeModalVisible] =
useState(false);
const [importTheme, setImportTheme] = useState<{
theme: string;
author: string;
} | null>(null);
const { t } = useTranslation("app");
const { updateRepacks } = useRepacks();

View file

@ -7,86 +7,86 @@ import { injectCustomCss, removeCustomCss } from "@renderer/helpers";
import { useToast } from "@renderer/hooks";
interface ImportThemeModalProps {
visible: boolean;
onClose: () => void;
onThemeImported: () => void;
themeName: string;
authorCode: string;
visible: boolean;
onClose: () => void;
onThemeImported: () => void;
themeName: string;
authorCode: string;
}
export const ImportThemeModal = ({
visible,
onClose,
onThemeImported,
themeName,
authorCode,
visible,
onClose,
onThemeImported,
themeName,
authorCode,
}: ImportThemeModalProps) => {
const { t } = useTranslation("settings");
const { showSuccessToast, showErrorToast } = useToast();
const { t } = useTranslation("settings");
const { showSuccessToast, showErrorToast } = useToast();
const handleImportTheme = async () => {
const theme: Theme = {
id: crypto.randomUUID(),
name: themeName,
isActive: false,
author: authorCode,
authorName: "spectre",
code: `https://hydrathemes.shop/themes/${themeName}.css`,
createdAt: new Date(),
updatedAt: new Date(),
};
try {
await window.electron.addCustomTheme(theme);
const currentTheme = await window.electron.getCustomThemeById(theme.id);
if (!currentTheme) return;
const activeTheme = await window.electron.getActiveCustomTheme();
if (activeTheme) {
removeCustomCss();
await window.electron.updateCustomTheme(activeTheme.id, {
...activeTheme,
isActive: false,
});
}
if (currentTheme.code) {
injectCustomCss(currentTheme.code);
}
await window.electron.updateCustomTheme(currentTheme.id, {
...currentTheme,
isActive: true,
});
onThemeImported();
showSuccessToast(t("theme_imported"));
onClose();
} catch (error) {
console.error(error);
showErrorToast(t("error_importing_theme"));
onClose();
}
const handleImportTheme = async () => {
const theme: Theme = {
id: crypto.randomUUID(),
name: themeName,
isActive: false,
author: authorCode,
authorName: "spectre",
code: `https://hydrathemes.shop/themes/${themeName}.css`,
createdAt: new Date(),
updatedAt: new Date(),
};
return (
<Modal
visible={visible}
title={t("import_theme")}
description={t("import_theme_description")}
onClose={onClose}
>
<div className="delete-all-themes-modal__container">
<Button theme="outline" onClick={handleImportTheme}>
{t("import_theme")}
</Button>
try {
await window.electron.addCustomTheme(theme);
<Button theme="primary" onClick={onClose}>
{t("cancel")}
</Button>
</div>
</Modal>
);
const currentTheme = await window.electron.getCustomThemeById(theme.id);
if (!currentTheme) return;
const activeTheme = await window.electron.getActiveCustomTheme();
if (activeTheme) {
removeCustomCss();
await window.electron.updateCustomTheme(activeTheme.id, {
...activeTheme,
isActive: false,
});
}
if (currentTheme.code) {
injectCustomCss(currentTheme.code);
}
await window.electron.updateCustomTheme(currentTheme.id, {
...currentTheme,
isActive: true,
});
onThemeImported();
showSuccessToast(t("theme_imported"));
onClose();
} catch (error) {
console.error(error);
showErrorToast(t("error_importing_theme"));
onClose();
}
};
return (
<Modal
visible={visible}
title={t("import_theme")}
description={t("import_theme_description")}
onClose={onClose}
>
<div className="delete-all-themes-modal__container">
<Button theme="outline" onClick={handleImportTheme}>
{t("import_theme")}
</Button>
<Button theme="primary" onClick={onClose}>
{t("cancel")}
</Button>
</div>
</Modal>
);
};