import React, { useState, useEffect } from "react"; import { Form, Button, Collapse } from "react-bootstrap"; import { mutateMetadataGenerate, useConfiguration, } from "src/core/StashService"; import { Modal, Icon } from "src/components/Shared"; import { useToast } from "src/hooks"; import * as GQL from "src/core/generated-graphql"; import { useIntl } from "react-intl"; interface ISceneGenerateDialogProps { selectedIds: string[]; onClose: () => void; } export const SceneGenerateDialog: React.FC = ( props: ISceneGenerateDialogProps ) => { const { data, error, loading } = useConfiguration(); const [sprites, setSprites] = useState(true); const [phashes, setPhashes] = useState(true); const [previews, setPreviews] = useState(true); const [markers, setMarkers] = useState(true); const [transcodes, setTranscodes] = useState(false); const [overwrite, setOverwrite] = useState(true); const [imagePreviews, setImagePreviews] = useState(false); const [previewSegments, setPreviewSegments] = useState(0); const [previewSegmentDuration, setPreviewSegmentDuration] = useState( 0 ); const [previewExcludeStart, setPreviewExcludeStart] = useState< string | undefined >(undefined); const [previewExcludeEnd, setPreviewExcludeEnd] = useState< string | undefined >(undefined); const [previewPreset, setPreviewPreset] = useState( GQL.PreviewPreset.Slow ); const [markerImagePreviews, setMarkerImagePreviews] = useState(false); const [markerScreenshots, setMarkerScreenshots] = useState(false); const [previewOptionsOpen, setPreviewOptionsOpen] = useState(false); const intl = useIntl(); const Toast = useToast(); useEffect(() => { if (!data?.configuration) return; const conf = data.configuration; if (conf.general) { setPreviewSegments(conf.general.previewSegments); setPreviewSegmentDuration(conf.general.previewSegmentDuration); setPreviewExcludeStart(conf.general.previewExcludeStart); setPreviewExcludeEnd(conf.general.previewExcludeEnd); setPreviewPreset(conf.general.previewPreset); } }, [data]); async function onGenerate() { try { await mutateMetadataGenerate({ sprites, phashes, previews, imagePreviews: previews && imagePreviews, markers, markerImagePreviews: markers && markerImagePreviews, markerScreenshots: markers && markerScreenshots, transcodes, overwrite, sceneIDs: props.selectedIds, previewOptions: { previewPreset: (previewPreset as GQL.PreviewPreset) ?? undefined, previewSegments, previewSegmentDuration, previewExcludeStart, previewExcludeEnd, }, }); Toast.success({ content: "Started generating" }); } catch (e) { Toast.error(e); } finally { props.onClose(); } } if (error) { Toast.error(error); props.onClose(); } if (loading) { return <>; } return ( props.onClose(), text: intl.formatMessage({ id: "actions.cancel" }), variant: "secondary", }} >
setPreviews(!previews)} />
setImagePreviews(!imagePreviews)} className="ml-2 flex-grow" />
{intl.formatMessage({ id: "dialogs.scene_gen.preview_preset_head", })}
) => setPreviewPreset(e.currentTarget.value) } > {Object.keys(GQL.PreviewPreset).map((p) => ( ))} {intl.formatMessage({ id: "dialogs.scene_gen.preview_preset_desc", })}
{intl.formatMessage({ id: "dialogs.scene_gen.preview_seg_count_head", })}
) => setPreviewSegments( Number.parseInt(e.currentTarget.value, 10) ) } /> {intl.formatMessage({ id: "dialogs.scene_gen.preview_seg_count_desc", })}
{intl.formatMessage({ id: "dialogs.scene_gen.preview_seg_duration_head", })}
) => setPreviewSegmentDuration( Number.parseFloat(e.currentTarget.value) ) } /> {intl.formatMessage({ id: "dialogs.scene_gen.preview_seg_duration_desc", })}
{intl.formatMessage({ id: "dialogs.scene_gen.preview_exclude_start_time_head", })}
) => setPreviewExcludeStart(e.currentTarget.value) } /> {intl.formatMessage({ id: "dialogs.scene_gen.preview_exclude_start_time_desc", })}
{intl.formatMessage({ id: "dialogs.scene_gen.preview_exclude_end_time_head", })}
) => setPreviewExcludeEnd(e.currentTarget.value) } /> {intl.formatMessage({ id: "dialogs.scene_gen.preview_exclude_end_time_desc", })}
setSprites(!sprites)} /> setMarkers(!markers)} />
setMarkerImagePreviews(!markerImagePreviews)} className="ml-2 flex-grow" /> setMarkerScreenshots(!markerScreenshots)} className="ml-2 flex-grow" />
setTranscodes(!transcodes)} /> setPhashes(!phashes)} />
setOverwrite(!overwrite)} />
); };