From 8a45fe70d0891637237f0ebbccc00c1f39ed4a9b Mon Sep 17 00:00:00 2001 From: icarus Date: Mon, 13 Oct 2025 13:22:49 +0800 Subject: [PATCH] refactor(video): update video handling and type definitions - Rename RetrieveVideoParams to RetrieveVideoContentParams for consistency - Move video list management to parent component - Add setVideo action and improve video state updates - Implement video status polling and thumbnail fetching --- src/renderer/src/aiCore/index_new.ts | 4 +- src/renderer/src/aiCore/legacy/index.ts | 4 +- src/renderer/src/hooks/video/useVideos.ts | 93 +++++++++++++++++++++- src/renderer/src/pages/video/VideoList.tsx | 10 +-- src/renderer/src/pages/video/VideoPage.tsx | 4 +- src/renderer/src/services/ApiService.ts | 4 +- src/renderer/src/store/video.ts | 32 ++++++-- 7 files changed, 128 insertions(+), 23 deletions(-) diff --git a/src/renderer/src/aiCore/index_new.ts b/src/renderer/src/aiCore/index_new.ts index 2131eebaae..2a07d92045 100644 --- a/src/renderer/src/aiCore/index_new.ts +++ b/src/renderer/src/aiCore/index_new.ts @@ -12,7 +12,7 @@ import { loggerService } from '@logger' import { getEnableDeveloperMode } from '@renderer/hooks/useSettings' import { addSpan, endSpan } from '@renderer/services/SpanManagerService' import { StartSpanParams } from '@renderer/trace/types/ModelSpanEntity' -import type { Assistant, GenerateImageParams, Model, Provider } from '@renderer/types' +import type { Assistant, GenerateImageParams, Model, Provider, RetrieveVideoContentParams } from '@renderer/types' import type { AiSdkModel, StreamTextParams } from '@renderer/types/aiCoreTypes' import { CreateVideoParams, @@ -524,7 +524,7 @@ export default class ModernAiProvider { /** * We manually implement this method before aisdk supports it well */ - public async retrieveVideoContent(params: RetrieveVideoParams): Promise { + public async retrieveVideoContent(params: RetrieveVideoContentParams): Promise { return this.legacyProvider.retrieveVideoContent(params) } diff --git a/src/renderer/src/aiCore/legacy/index.ts b/src/renderer/src/aiCore/legacy/index.ts index 206027f7cd..bbb4c7af8b 100644 --- a/src/renderer/src/aiCore/legacy/index.ts +++ b/src/renderer/src/aiCore/legacy/index.ts @@ -5,7 +5,7 @@ import { isDedicatedImageGenerationModel, isFunctionCallingModel } from '@render import { getProviderByModel } from '@renderer/services/AssistantService' import { withSpanResult } from '@renderer/services/SpanManagerService' import { StartSpanParams } from '@renderer/trace/types/ModelSpanEntity' -import type { GenerateImageParams, Model, Provider } from '@renderer/types' +import type { GenerateImageParams, Model, Provider, RetrieveVideoContentParams } from '@renderer/types' import type { RequestOptions, SdkModel } from '@renderer/types/sdk' import { CreateVideoParams, @@ -210,7 +210,7 @@ export default class AiProvider { } } - public async retrieveVideoContent(params: RetrieveVideoParams): Promise { + public async retrieveVideoContent(params: RetrieveVideoContentParams): Promise { if (this.apiClient instanceof OpenAIResponseAPIClient && params.type === 'openai') { const response = await this.apiClient.retrieveVideoContent(params) return { diff --git a/src/renderer/src/hooks/video/useVideos.ts b/src/renderer/src/hooks/video/useVideos.ts index a816a9f091..4326272789 100644 --- a/src/renderer/src/hooks/video/useVideos.ts +++ b/src/renderer/src/hooks/video/useVideos.ts @@ -1,7 +1,21 @@ +import { loggerService } from '@logger' +import { retrieveVideo, retrieveVideoContent } from '@renderer/services/ApiService' +import { getProviderById } from '@renderer/services/ProviderService' import { useAppDispatch, useAppSelector } from '@renderer/store' -import { addVideoAction, removeVideoAction, setVideosAction, updateVideoAction } from '@renderer/store/video' +import { + addVideoAction, + removeVideoAction, + setVideoAction, + setVideosAction, + updateVideoAction +} from '@renderer/store/video' +import { SystemProviderIds } from '@renderer/types' import { Video } from '@renderer/types/video' +import { video } from 'notion-helper' import { useCallback, useEffect } from 'react' +import useSWR from 'swr' + +const logger = loggerService.withContext('useVideo') export const useVideos = (providerId: string) => { const videos = useAppSelector((state) => state.video.videoMap[providerId]) @@ -17,12 +31,19 @@ export const useVideos = (providerId: string) => { ) const updateVideo = useCallback( - (update: Partial