import React, { useState, useEffect, useMemo } from "react"; import { Form, Button } from "react-bootstrap"; import { mutateMetadataGenerate } from "src/core/StashService"; import { ModalComponent } from "../Shared/Modal"; import { Icon } from "src/components/Shared/Icon"; import { useToast } from "src/hooks/Toast"; import * as GQL from "src/core/generated-graphql"; import { FormattedMessage, useIntl } from "react-intl"; import { ConfigurationContext } from "src/hooks/Config"; import { Manual } from "../Help/Manual"; import { withoutTypename } from "src/utils/data"; import { GenerateOptions } from "../Settings/Tasks/GenerateOptions"; import { SettingSection } from "../Settings/SettingSection"; import { faCogs, faQuestionCircle } from "@fortawesome/free-solid-svg-icons"; interface ISceneGenerateDialog { selectedIds?: string[]; onClose: () => void; } export const GenerateDialog: React.FC = ({ selectedIds, onClose, }) => { const { configuration } = React.useContext(ConfigurationContext); function getDefaultOptions(): GQL.GenerateMetadataInput { return { sprites: true, phashes: true, previews: true, markers: true, previewOptions: { previewSegments: 0, previewSegmentDuration: 0, previewPreset: GQL.PreviewPreset.Slow, }, }; } const [options, setOptions] = useState( getDefaultOptions() ); const [configRead, setConfigRead] = useState(false); const [showManual, setShowManual] = useState(false); const [animation, setAnimation] = useState(true); const intl = useIntl(); const Toast = useToast(); useEffect(() => { if (configRead) { return; } // combine the defaults with the system preview generation settings if (configuration?.defaults.generate) { const { generate } = configuration.defaults; setOptions(withoutTypename(generate)); setConfigRead(true); } if (configuration?.general) { const { general } = configuration; setOptions((existing) => ({ ...existing, previewOptions: { ...existing.previewOptions, previewSegments: general.previewSegments ?? existing.previewOptions?.previewSegments, previewSegmentDuration: general.previewSegmentDuration ?? existing.previewOptions?.previewSegmentDuration, previewExcludeStart: general.previewExcludeStart ?? existing.previewOptions?.previewExcludeStart, previewExcludeEnd: general.previewExcludeEnd ?? existing.previewOptions?.previewExcludeEnd, previewPreset: general.previewPreset ?? existing.previewOptions?.previewPreset, }, })); setConfigRead(true); } }, [configuration, configRead]); const selectionStatus = useMemo(() => { if (selectedIds) { return ( . ); } const message = ( . ); return (
{message}
); }, [selectedIds, intl]); async function onGenerate() { try { await mutateMetadataGenerate({ ...options, sceneIDs: selectedIds, }); Toast.success({ content: intl.formatMessage( { id: "config.tasks.added_job_to_queue" }, { operation_name: intl.formatMessage({ id: "actions.generate" }) } ), }); } catch (e) { Toast.error(e); } finally { onClose(); } } function onShowManual() { setAnimation(false); setShowManual(true); } if (showManual) { return ( setShowManual(false)} defaultActiveTab="Tasks.md" /> ); } return ( onClose(), text: intl.formatMessage({ id: "actions.cancel" }), variant: "secondary", }} leftFooterButtons={ } >
{selectionStatus}
); }; export default GenerateDialog;