diff --git a/electron/ipc/handlers.ts b/electron/ipc/handlers.ts index 2d74ebc..2ef34c1 100644 --- a/electron/ipc/handlers.ts +++ b/electron/ipc/handlers.ts @@ -59,7 +59,11 @@ export function registerIpcHandlers( ipcMain.handle('store-recorded-video', async (_, videoData: ArrayBuffer, fileName: string) => { try { const videoPath = path.join(RECORDINGS_DIR, fileName) + console.log('[STORE-VIDEO] Saving to:', videoPath) + console.log('[STORE-VIDEO] RECORDINGS_DIR:', RECORDINGS_DIR) + console.log('[STORE-VIDEO] Platform:', process.platform) await fs.writeFile(videoPath, Buffer.from(videoData)) + console.log('[STORE-VIDEO] Success! File size:', Buffer.from(videoData).length, 'bytes') return { success: true, @@ -67,7 +71,7 @@ export function registerIpcHandlers( message: 'Video stored successfully' } } catch (error) { - console.error('Failed to store video:', error) + console.error('[STORE-VIDEO] Failed to store video:', error) return { success: false, message: 'Failed to store video', @@ -80,19 +84,26 @@ export function registerIpcHandlers( ipcMain.handle('get-recorded-video-path', async () => { try { + console.log('[GET-VIDEO] RECORDINGS_DIR:', RECORDINGS_DIR) + console.log('[GET-VIDEO] Platform:', process.platform) const files = await fs.readdir(RECORDINGS_DIR) + console.log('[GET-VIDEO] All files:', files) const videoFiles = files.filter(file => file.endsWith('.webm')) + console.log('[GET-VIDEO] Video files:', videoFiles) if (videoFiles.length === 0) { + console.log('[GET-VIDEO] No video files found') return { success: false, message: 'No recorded video found' } } const latestVideo = videoFiles.sort().reverse()[0] const videoPath = path.join(RECORDINGS_DIR, latestVideo) + console.log('[GET-VIDEO] Latest video path:', videoPath) + console.log('[GET-VIDEO] Path separators:', videoPath.includes('\\') ? 'backslash' : 'forward slash') return { success: true, path: videoPath } } catch (error) { - console.error('Failed to get video path:', error) + console.error('[GET-VIDEO] Failed to get video path:', error) return { success: false, message: 'Failed to get video path', error: String(error) } } }) diff --git a/electron/main.ts b/electron/main.ts index c126494..95ca4aa 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -34,9 +34,13 @@ async function cleanupOldRecordings() { async function ensureRecordingsDir() { try { await fs.mkdir(RECORDINGS_DIR, { recursive: true }) - console.log('Recordings directory ready:', RECORDINGS_DIR) + console.log('='.repeat(60)) + console.log('[STARTUP] Platform:', process.platform) + console.log('[STARTUP] RECORDINGS_DIR:', RECORDINGS_DIR) + console.log('[STARTUP] User Data Path:', app.getPath('userData')) + console.log('='.repeat(60)) } catch (error) { - console.error('Failed to create recordings directory:', error) + console.error('[STARTUP] Failed to create recordings directory:', error) } } diff --git a/src/components/video-editor/VideoEditor.tsx b/src/components/video-editor/VideoEditor.tsx index 25b7571..a3c6501 100644 --- a/src/components/video-editor/VideoEditor.tsx +++ b/src/components/video-editor/VideoEditor.tsx @@ -47,16 +47,43 @@ export default function VideoEditor() { const nextZoomIdRef = useRef(1); const exporterRef = useRef(null); + // Helper to convert file path to proper file:// URL + const toFileUrl = (filePath: string): string => { + console.log('[VIDEO-EDITOR] Converting path to URL:', filePath); + // Normalize path separators to forward slashes + const normalized = filePath.replace(/\\/g, '/'); + console.log('[VIDEO-EDITOR] Normalized path:', normalized); + + // Check if it's a Windows absolute path (e.g., C:/Users/...) + if (normalized.match(/^[a-zA-Z]:/)) { + const fileUrl = `file:///${normalized}`; + console.log('[VIDEO-EDITOR] Windows file URL:', fileUrl); + return fileUrl; + } + + // Unix-style absolute path + const fileUrl = `file://${normalized}`; + console.log('[VIDEO-EDITOR] Unix file URL:', fileUrl); + return fileUrl; + }; + useEffect(() => { async function loadVideo() { try { + console.log('[VIDEO-EDITOR] Loading video...'); const result = await window.electronAPI.getRecordedVideoPath(); + console.log('[VIDEO-EDITOR] getRecordedVideoPath result:', result); + if (result.success && result.path) { - setVideoPath(`file://${result.path}`); + const videoUrl = toFileUrl(result.path); + console.log('[VIDEO-EDITOR] Setting video path:', videoUrl); + setVideoPath(videoUrl); } else { + console.error('[VIDEO-EDITOR] Failed to get video path:', result.message); setError(result.message || 'Failed to load video'); } } catch (err) { + console.error('[VIDEO-EDITOR] Error loading video:', err); setError('Error loading video: ' + String(err)); } finally { setLoading(false);