diff --git a/main.js b/main.js index ef6550b..5cf8f90 100644 --- a/main.js +++ b/main.js @@ -154,13 +154,22 @@ async function downloadAndInstall(downloadUrl, version) { if (process.platform === 'linux') { fs.chmodSync(tmpPath, 0o755); const stablePath = path.join(require('os').homedir(), '.local', 'bin', 'farm-tracker.AppImage'); - const target = fs.existsSync(stablePath) ? stablePath : process.env.APPIMAGE; - if (target) { - fs.copyFileSync(tmpPath, target); + try { + fs.mkdirSync(path.dirname(stablePath), { recursive: true }); + fs.copyFileSync(tmpPath, stablePath); + fs.chmodSync(stablePath, 0o755); fs.unlinkSync(tmpPath); - app.relaunch({ execPath: target }); - } else { - app.relaunch({ execPath: tmpPath }); + app.relaunch({ execPath: stablePath }); + } catch (_) { + // fallback: remplace l'AppImage courant si la copie vers bin/ échoue + const fallback = process.env.APPIMAGE; + if (fallback) { + fs.copyFileSync(tmpPath, fallback); + fs.unlinkSync(tmpPath); + app.relaunch({ execPath: fallback }); + } else { + app.relaunch({ execPath: tmpPath }); + } } app.exit(0); } else if (process.platform === 'win32') { @@ -251,7 +260,21 @@ function createWindow() { mainWindow.loadFile(path.join(__dirname, 'renderer', 'index.html')); } +function selfInstallLinux() { + if (process.platform !== 'linux' || !app.isPackaged) return; + const appImagePath = process.env.APPIMAGE; + if (!appImagePath) return; + const stablePath = path.join(require('os').homedir(), '.local', 'bin', 'farm-tracker.AppImage'); + if (appImagePath === stablePath) return; + try { + fs.mkdirSync(path.dirname(stablePath), { recursive: true }); + fs.copyFileSync(appImagePath, stablePath); + fs.chmodSync(stablePath, 0o755); + } catch (_) {} +} + app.whenReady().then(() => { + selfInstallLinux(); createWindow(); setTimeout(() => checkForUpdates(false), 5000); }); diff --git a/package.json b/package.json index 3098872..c188317 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "farm-tracker", - "version": "1.0.3", + "version": "1.0.5", "description": "Suivi de loot Minecraft en direct, avec sauvegarde automatique des stats et des chances de drop.", "main": "main.js", "scripts": {