/** * 穿搭照片生成服务 * 基于 ComfyUI 工作流的穿搭照片生成功能 */ import { invoke } from '@tauri-apps/api/core'; import { listen } from '@tauri-apps/api/event'; import type { OutfitPhotoGenerationRequest, OutfitPhotoGenerationResponse, GenerationHistoryQuery, GenerationHistoryResponse, ComfyUISettings, CloudUploadStatistics, WorkflowProgress, BatchGenerationProgress, WorkflowTemplate, GenerationPreset } from '../types/outfitPhotoGeneration'; export class OutfitPhotoGenerationService { /** * 创建穿搭照片生成任务 */ static async createGenerationTask(request: OutfitPhotoGenerationRequest): Promise { try { const taskId = await invoke('create_outfit_photo_generation_task', { request }); return taskId; } catch (error) { console.error('创建穿搭照片生成任务失败:', error); throw new Error(`创建生成任务失败: ${error}`); } } /** * 执行穿搭照片生成 */ static async executeGeneration( generationId: string, onProgress?: (progress: WorkflowProgress) => void ): Promise { try { // 监听进度事件 let progressUnlisten: (() => void) | null = null; if (onProgress) { progressUnlisten = await listen('outfit_generation_progress', (event) => { if (event.payload) { onProgress(event.payload); } }); } const response = await invoke('execute_outfit_photo_generation', { generationId }); // 清理进度监听器 if (progressUnlisten) { progressUnlisten(); } return response; } catch (error) { console.error('执行穿搭照片生成失败:', error); throw new Error(`生成失败: ${error}`); } } /** * 批量执行穿搭照片生成 */ static async executeBatchGeneration( requests: OutfitPhotoGenerationRequest[], onProgress?: (progress: BatchGenerationProgress) => void ): Promise { try { // 监听批量进度事件 let progressUnlisten: (() => void) | null = null; if (onProgress) { progressUnlisten = await listen('outfit_generation_batch_progress', (event) => { if (event.payload) { onProgress(event.payload); } }); } const responses = await invoke('execute_outfit_photo_generation_batch', { requests }); // 清理进度监听器 if (progressUnlisten) { progressUnlisten(); } return responses; } catch (error) { console.error('批量执行穿搭照片生成失败:', error); throw new Error(`批量生成失败: ${error}`); } } /** * 重试失败的穿搭照片生成 */ static async retryGeneration(generationId: string): Promise { try { const response = await invoke('retry_outfit_photo_generation', { generationId }); return response; } catch (error) { console.error('重试穿搭照片生成失败:', error); throw new Error(`重试失败: ${error}`); } } /** * 获取生成历史记录 */ static async getGenerationHistory(query: GenerationHistoryQuery): Promise { try { const response = await invoke('get_outfit_photo_generation_history', { query }); return response; } catch (error) { console.error('获取生成历史记录失败:', error); throw new Error(`获取历史记录失败: ${error}`); } } /** * 删除生成记录 */ static async deleteGeneration(generationId: string): Promise { try { await invoke('delete_outfit_photo_generation', { generationId }); } catch (error) { console.error('删除生成记录失败:', error); throw new Error(`删除记录失败: ${error}`); } } /** * 清理失败的生成记录 */ static async cleanupFailedGenerations(maxAgeHours: number): Promise { try { const cleanedCount = await invoke('cleanup_failed_outfit_generations', { maxAgeHours }); return cleanedCount; } catch (error) { console.error('清理失败记录失败:', error); throw new Error(`清理失败: ${error}`); } } /** * 获取 ComfyUI 设置 */ static async getComfyUISettings(): Promise { try { const settings = await invoke('get_comfyui_settings'); return settings; } catch (error) { console.error('获取 ComfyUI 设置失败:', error); throw new Error(`获取设置失败: ${error}`); } } /** * 更新 ComfyUI 设置 */ static async updateComfyUISettings(settings: ComfyUISettings): Promise { try { await invoke('update_comfyui_settings', { settings }); } catch (error) { console.error('更新 ComfyUI 设置失败:', error); throw new Error(`更新设置失败: ${error}`); } } /** * 测试 ComfyUI 连接 */ static async testComfyUIConnection(): Promise { try { const connected = await invoke('test_comfyui_connection'); return connected; } catch (error) { console.error('测试 ComfyUI 连接失败:', error); return false; } } /** * 获取云端上传统计 */ static async getCloudUploadStatistics(): Promise { try { const statistics = await invoke('get_cloud_upload_statistics'); return statistics; } catch (error) { console.error('获取云端上传统计失败:', error); throw new Error(`获取统计失败: ${error}`); } } /** * 测试云端上传连接 */ static async testCloudUploadConnection(): Promise { try { const connected = await invoke('test_cloud_upload_connection'); return connected; } catch (error) { console.error('测试云端上传连接失败:', error); return false; } } /** * 获取可用的工作流模板 */ static async getWorkflowTemplates(): Promise { try { const templates = await invoke('get_workflow_templates'); return templates; } catch (error) { console.error('获取工作流模板失败:', error); throw new Error(`获取模板失败: ${error}`); } } /** * 获取生成预设 */ static async getGenerationPresets(): Promise { try { const presets = await invoke('get_generation_presets'); return presets; } catch (error) { console.error('获取生成预设失败:', error); throw new Error(`获取预设失败: ${error}`); } } /** * 保存生成预设 */ static async saveGenerationPreset(preset: Omit): Promise { try { const presetId = await invoke('save_generation_preset', { preset }); return presetId; } catch (error) { console.error('保存生成预设失败:', error); throw new Error(`保存预设失败: ${error}`); } } /** * 删除生成预设 */ static async deleteGenerationPreset(presetId: string): Promise { try { await invoke('delete_generation_preset', { presetId }); } catch (error) { console.error('删除生成预设失败:', error); throw new Error(`删除预设失败: ${error}`); } } }