import { useEffect, useState } from "react"; import { BsmProgressBar } from "renderer/components/progress-bar/bsm-progress-bar.component"; import { BsmImage } from "renderer/components/shared/bsm-image.component"; import TitleBar from "renderer/components/title-bar/title-bar.component"; import { useTranslation } from "renderer/hooks/use-translation.hook"; import { NotificationService } from "renderer/services/notification.service"; import { ProgressBarService } from "renderer/services/progress-bar.service"; import { ModelSaberService } from "renderer/services/thrird-partys/model-saber.service"; import { MSModel } from "shared/models/models/model-saber.model"; import defaultImage from "../../../../assets/images/default-version-img.jpg"; import { ModelsDownloaderService } from "renderer/services/models-management/models-downloader.service"; import { useService } from "renderer/hooks/use-service.hook"; import { useWindowArgs } from "renderer/hooks/use-window-args.hook"; import { useWindowControls } from "renderer/hooks/use-window-controls.hook"; export default function OneClickDownloadModel() { const modelSaber = useService(ModelSaberService); const progress = useService(ProgressBarService); const modelDownloader = useService(ModelsDownloaderService); const notification = useService(NotificationService); const { close: closeWindow } = useWindowControls(); const { modelId } = useWindowArgs("modelId"); const [model, setModel] = useState(null); const t = useTranslation(); const cover = model ? model.thumbnail : null; const title = model ? model.name : null; useEffect(() => { const promise = (async () => { const model = await modelSaber.getModelById(modelId); if (!model) { throw new Error("Failed to get model from ModelSaber"); } setModel(() => model); progress.open(); const res = await modelDownloader.oneClickInstallModel(model); if (!res) { throw new Error("Failed to download model"); } })(); promise.catch(() => { notification.notifySystem({ title: t("notifications.types.error"), body: t("notifications.models.one-click-install.error") }); }); promise.then(() => { notification.notifySystem({ title: "OneClick", body: t("notifications.models.one-click-install.success") }); }); promise.finally(() => { closeWindow(); }); }, []); return (
{cover && }

{title}

); }