|
1 | | -const { app, BrowserWindow, ipcMain, dialog, Menu, Tray, nativeImage } = require('electron') |
2 | 1 | const path = require('path') |
3 | 2 | const fs = require('fs') |
4 | 3 |
|
| 4 | +// Get Electron modules - only available when running inside Electron |
| 5 | +const electron = require('electron') |
| 6 | + |
| 7 | +// Validate that we're running in Electron, not just loading the path |
| 8 | +if (typeof electron === 'string' || !electron.app) { |
| 9 | + console.error('This file must be run within Electron, not Node.js directly') |
| 10 | + console.error('Use: npx electron . or npm run electron:dev') |
| 11 | + process.exit(1) |
| 12 | +} |
| 13 | + |
| 14 | +const { app, BrowserWindow, dialog, Menu, Tray, nativeImage } = electron |
| 15 | + |
5 | 16 | let mainWindow = null |
6 | 17 | let tray = null |
7 | 18 |
|
8 | 19 | // Enable live reload for development |
9 | | -// Check if running in development mode |
10 | | -const isDev = process.env.NODE_ENV === 'development' && !app.isPackaged |
| 20 | +// Check if running in development mode - use environment variable or check for dist folder |
| 21 | +const isDev = process.env.NODE_ENV === 'development' || !require('fs').existsSync(path.join(__dirname, '../dist/index.html')) |
11 | 22 |
|
12 | 23 | function createWindow() { |
13 | 24 | mainWindow = new BrowserWindow({ |
@@ -174,49 +185,54 @@ async function openVideoFile() { |
174 | 185 | } |
175 | 186 | } |
176 | 187 |
|
177 | | -// IPC Handlers |
178 | | -ipcMain.handle('select-video-file', async () => { |
179 | | - const result = await dialog.showOpenDialog(mainWindow, { |
180 | | - properties: ['openFile'], |
181 | | - filters: [ |
182 | | - { name: 'Videos', extensions: ['mp4', 'webm', 'mov', 'avi', 'mkv', 'm4v'] }, |
183 | | - { name: 'All Files', extensions: ['*'] }, |
184 | | - ], |
185 | | - }) |
| 188 | +// Setup IPC Handlers |
| 189 | +function setupIPCHandlers() { |
| 190 | + const { ipcMain: ipc } = require('electron') |
186 | 191 |
|
187 | | - if (!result.canceled && result.filePaths.length > 0) { |
188 | | - return result.filePaths[0] |
189 | | - } |
190 | | - return null |
191 | | -}) |
| 192 | + ipc.handle('select-video-file', async () => { |
| 193 | + const result = await dialog.showOpenDialog(mainWindow, { |
| 194 | + properties: ['openFile'], |
| 195 | + filters: [ |
| 196 | + { name: 'Videos', extensions: ['mp4', 'webm', 'mov', 'avi', 'mkv', 'm4v'] }, |
| 197 | + { name: 'All Files', extensions: ['*'] }, |
| 198 | + ], |
| 199 | + }) |
192 | 200 |
|
193 | | -ipcMain.handle('save-transcript', async (event, transcript) => { |
194 | | - const result = await dialog.showSaveDialog(mainWindow, { |
195 | | - defaultPath: `transcript-${Date.now()}.json`, |
196 | | - filters: [ |
197 | | - { name: 'JSON', extensions: ['json'] }, |
198 | | - { name: 'Text', extensions: ['txt'] }, |
199 | | - { name: 'All Files', extensions: ['*'] }, |
200 | | - ], |
| 201 | + if (!result.canceled && result.filePaths.length > 0) { |
| 202 | + return result.filePaths[0] |
| 203 | + } |
| 204 | + return null |
201 | 205 | }) |
202 | 206 |
|
203 | | - if (!result.canceled && result.filePath) { |
204 | | - try { |
205 | | - fs.writeFileSync(result.filePath, JSON.stringify(transcript, null, 2)) |
206 | | - return { success: true, path: result.filePath } |
207 | | - } catch (error) { |
208 | | - return { success: false, error: error.message } |
| 207 | + ipc.handle('save-transcript', async (event, transcript) => { |
| 208 | + const result = await dialog.showSaveDialog(mainWindow, { |
| 209 | + defaultPath: `transcript-${Date.now()}.json`, |
| 210 | + filters: [ |
| 211 | + { name: 'JSON', extensions: ['json'] }, |
| 212 | + { name: 'Text', extensions: ['txt'] }, |
| 213 | + { name: 'All Files', extensions: ['*'] }, |
| 214 | + ], |
| 215 | + }) |
| 216 | + |
| 217 | + if (!result.canceled && result.filePath) { |
| 218 | + try { |
| 219 | + fs.writeFileSync(result.filePath, JSON.stringify(transcript, null, 2)) |
| 220 | + return { success: true, path: result.filePath } |
| 221 | + } catch (error) { |
| 222 | + return { success: false, error: error.message } |
| 223 | + } |
209 | 224 | } |
210 | | - } |
211 | | - return { success: false, error: 'Cancelled' } |
212 | | -}) |
| 225 | + return { success: false, error: 'Cancelled' } |
| 226 | + }) |
213 | 227 |
|
214 | | -ipcMain.handle('get-app-version', () => { |
215 | | - return app.getVersion() |
216 | | -}) |
| 228 | + ipc.handle('get-app-version', () => { |
| 229 | + return app.getVersion() |
| 230 | + }) |
| 231 | +} |
217 | 232 |
|
218 | 233 | // App lifecycle |
219 | 234 | app.whenReady().then(() => { |
| 235 | + setupIPCHandlers() |
220 | 236 | createWindow() |
221 | 237 | createTray() |
222 | 238 |
|
|
0 commit comments