@@ -8,6 +8,7 @@ const defaultPort = 3024;
88const viteDevPort = defaultPort ; // Using same port for consistency
99const { shell } = require ( 'electron' ) ;
1010const { exec } = require ( 'child_process' ) ;
11+ const https = require ( 'https' ) ;
1112const config = 'easyedit.json' ;
1213const configPath = path . join ( app . getPath ( 'userData' ) , config ) ;
1314
@@ -373,6 +374,57 @@ ipcMain.handle('open-external', async (_event, url) => {
373374 }
374375} ) ;
375376
377+ // Provide version info to renderer processes in packaged apps where fetch('/package.json') is unavailable
378+ ipcMain . handle ( 'get-version-info' , async ( ) => {
379+ const result = { version : 'unknown' , latest : 'unknown' } ;
380+ try {
381+ // Read package.json from app directory
382+ const pkgPath = path . join ( __dirname , 'package.json' ) ;
383+ if ( fs . existsSync ( pkgPath ) ) {
384+ try {
385+ const pkgRaw = fs . readFileSync ( pkgPath , 'utf8' ) ;
386+ const pkg = JSON . parse ( pkgRaw ) ;
387+ result . version = pkg . version || 'unknown' ;
388+ } catch ( e ) {
389+ // ignore
390+ }
391+ }
392+
393+ // Try local latest.json first
394+ const localLatest = path . join ( __dirname , 'release' , 'latest.json' ) ;
395+ if ( fs . existsSync ( localLatest ) ) {
396+ try {
397+ const latestRaw = fs . readFileSync ( localLatest , 'utf8' ) ;
398+ const latest = JSON . parse ( latestRaw ) ;
399+ result . latest = latest . version || 'unknown' ;
400+ return result ;
401+ } catch ( e ) {
402+ // ignore and try network
403+ }
404+ }
405+
406+ // Fetch remote latest.json from GitHub raw
407+ const ghUrl = 'https://raw.githubusercontent.com/gcclinux/EasyEdit/refs/heads/main/release/latest.json' ;
408+ result . latest = await new Promise ( ( resolve ) => {
409+ https . get ( ghUrl , ( res ) => {
410+ let data = '' ;
411+ res . on ( 'data' , ( chunk ) => { data += chunk ; } ) ;
412+ res . on ( 'end' , ( ) => {
413+ try {
414+ const json = JSON . parse ( data ) ;
415+ resolve ( json . version || 'unknown' ) ;
416+ } catch ( e ) {
417+ resolve ( 'unknown' ) ;
418+ }
419+ } ) ;
420+ } ) . on ( 'error' , ( ) => resolve ( 'unknown' ) ) ;
421+ } ) ;
422+ } catch ( err ) {
423+ console . error ( 'get-version-info failed:' , err ) ;
424+ }
425+ return result ;
426+ } ) ;
427+
376428// function createMenuTemplate() {
377429// const menuTemplate = [
378430// {
0 commit comments