From 68136594436f10a155a15ed1ac920cea65b98b69 Mon Sep 17 00:00:00 2001 From: Azeufack Noupeu Willy Date: Thu, 20 Nov 2025 14:31:26 +0100 Subject: [PATCH] feat(main): add pipeline orchestrator for auto-transcription --- electron/main/main.js | 59 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/electron/main/main.js b/electron/main/main.js index 3861ad3..06d5a96 100644 --- a/electron/main/main.js +++ b/electron/main/main.js @@ -2,6 +2,9 @@ import { app, BrowserWindow, ipcMain, dialog } from 'electron'; import { exec } from 'child_process'; import path from 'path'; import { fileURLToPath } from 'url'; +// Import audio events and transcription module +import { audioEvents } from '../../services/modules/extraction/ffmpegExtractor.js'; +import { transcribe } from '../../services/modules/transcription-remote/assembly.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -22,7 +25,61 @@ function createWindow() { mainWindow.loadFile('main/index.html'); } -app.whenReady().then(createWindow); +// Setup pipeline orchestrator +function setupOrchestrator() { + console.log('🎯 [Pipeline] Orchestrator ready. Listening for audio_ready events...'); + + audioEvents.on('audio_ready', async (data) => { + const { audioPath, sessionId } = data; + + console.log(`✅ [Pipeline] Audio ready: ${sessionId}`); + + // AC6: Send status to UI - Audio bereit + mainWindow.webContents.send('pipeline-status', { + sessionId, + status: 'audio_ready', + message: 'Audio bereit' + }); + + try { + // AC4: Status transcription_started + console.log(`🚀 [Pipeline] Starting transcription: ${sessionId}`); + mainWindow.webContents.send('pipeline-status', { + sessionId, + status: 'transcription_started', + message: 'Transkription gestartet' + }); + + // AC2: Auto-start transcription (S2-02b) + await transcribe(audioPath, sessionId); + + // AC6: Status transcription_completed + console.log(`✅ [Pipeline] Transcription completed: ${sessionId}`); + mainWindow.webContents.send('pipeline-status', { + sessionId, + status: 'transcription_completed', + message: 'Transkription abgeschlossen' + }); + + } catch (error) { + // AC5: Error logging + failed_transcription_start + console.error(`❌ [Pipeline] Transcription failed: ${sessionId}`); + console.error(` Error:`, error.message); + + mainWindow.webContents.send('pipeline-status', { + sessionId, + status: 'failed_transcription_start', + message: 'Fehler beim Transkriptionsstart', + error: error.message + }); + } + }); +} + +app.whenReady().then(() => { + createWindow(); + setupOrchestrator(); +}); // Kommunikation vom Renderer (Frontend) ipcMain.handle('convert-video', async (event, filePath) => {