返回 oh-my-ppt
useCancelStyleSwitch.ts
根目录 / src / renderer / src / components / session-detail / hooks / useCancelStyleSwitch.ts
1 import { useT } from '@renderer/i18n'
2 import { ipc } from '@renderer/lib/ipc'
3 import {
4 hydrateStyleSwitchJob,
5 isStyleSwitchJobActive,
6 useGenerateStore,
7 useToastStore
8 } from '@renderer/store'
9
10 export function useCancelStyleSwitch(sessionId: string): () => Promise<void> {
11 const t = useT()
12 const toastError = useToastStore((state) => state.error)
13
14 return async (): Promise<void> => {
15 const job = useGenerateStore.getState().styleSwitchJobs[sessionId]
16 if (!isStyleSwitchJobActive(job) || job?.status === 'cancelling') return
17
18 useGenerateStore.getState().updateStyleSwitchJob(sessionId, { status: 'cancelling' })
19 try {
20 const result = await ipc.cancelStyleSwitch(sessionId)
21 if (!result.success) {
22 try {
23 hydrateStyleSwitchJob(sessionId, await ipc.getStyleSwitchState(sessionId))
24 } catch {
25 useGenerateStore.getState().clearStyleSwitchJob(sessionId)
26 }
27 }
28 } catch (error) {
29 try {
30 hydrateStyleSwitchJob(sessionId, await ipc.getStyleSwitchState(sessionId))
31 } catch {
32 useGenerateStore.getState().clearStyleSwitchJob(sessionId)
33 }
34 toastError(
35 error instanceof Error ? error.message : t('sessionDetail.styleSwitchCancelFailed')
36 )
37 }
38 }
39 }
40
40 lines TYPESCRIPT