From 1b4954e20b0d1f2053a47d6083dec41bc5741212 Mon Sep 17 00:00:00 2001 From: 4gray <4gray@users.noreply.github.com> Date: Mon, 24 Nov 2025 15:36:29 +0000 Subject: [PATCH] feat(epg): update worker path handling for production environment --- .../src/app/events/epg.events.ts | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/apps/electron-backend/src/app/events/epg.events.ts b/apps/electron-backend/src/app/events/epg.events.ts index 554e3e0c0..4008183c7 100644 --- a/apps/electron-backend/src/app/events/epg.events.ts +++ b/apps/electron-backend/src/app/events/epg.events.ts @@ -1,7 +1,8 @@ -import { ipcMain } from 'electron'; +import { app, ipcMain } from 'electron'; import * as path from 'path'; import { EpgChannelWithPrograms, EpgData, EpgProgram } from 'shared-interfaces'; import { Worker } from 'worker_threads'; +import { pathToFileURL } from 'url'; /** * EPG Events Handler @@ -97,23 +98,24 @@ export default class EpgEvents { } return new Promise((resolve, reject) => { - let workerPath = path.join( - __dirname, + // Get the proper worker path following Electron's recommended approach + // https://www.electronjs.org/docs/latest/tutorial/multithreading + const workerPath = path.join( + app.getAppPath().replace('app.asar', 'app.asar.unpacked'), + 'electron-backend', 'workers', 'epg-parser.worker.js' ); - // Handle asar unpacked files in production - if (workerPath.includes('app.asar')) { - workerPath = workerPath.replace('app.asar', 'app.asar.unpacked'); - } - console.log(this.loggerLabel, 'Creating worker for:', url); console.log(this.loggerLabel, 'Worker path:', workerPath); + console.log(this.loggerLabel, 'App path:', app.getAppPath()); let worker: Worker; try { - worker = new Worker(workerPath); + // Worker threads require file:// URLs in packaged apps + const workerURL = pathToFileURL(workerPath).href; + worker = new Worker(workerURL); console.log(this.loggerLabel, 'Worker created successfully'); } catch (error) { console.error(