first cut at autostart and also cleanup

This commit is contained in:
Michael Neale
2025-10-30 16:02:30 +11:00
parent 573fd1083d
commit 7dc91d5935
3 changed files with 49 additions and 2 deletions
+14
View File
@@ -1769,6 +1769,10 @@ async function appMain() {
app.dock?.hide();
}
// Setup tunnel cleanup on app quit
const { setupTunnelCleanup } = await import('./utils/tunnel');
setupTunnelCleanup(app);
// Parse command line arguments
const { dirPath } = parseArgs();
@@ -2193,6 +2197,16 @@ async function appMain() {
app.whenReady().then(async () => {
try {
await appMain();
// Auto-start tunnel if it was running when app closed (with delay to ensure window is loaded)
setTimeout(async () => {
try {
const { autoStartTunnel } = await import('./utils/tunnel');
await autoStartTunnel();
} catch (error) {
log.error('Failed to auto-start tunnel:', error);
}
}, 10000); // 10 second delay
} catch (error) {
dialog.showErrorBox('Goose Error', `Failed to create main window: ${error}`);
app.quit();
+1
View File
@@ -20,6 +20,7 @@ export interface Settings {
tunnelSecret?: string;
tunnelAgentId?: string;
tunnelMode?: TunnelMode;
tunnelAutoStart?: boolean;
}
// Constants
+34 -2
View File
@@ -225,6 +225,12 @@ export async function startTunnel(): Promise<TunnelInfo> {
currentTunnelInfo = startLapstoneTunnel(port, secret, goosedProcess.pid || 0);
currentState = 'running';
log.info('Lapstone tunnel started successfully:', currentTunnelInfo);
// Save auto-start setting when tunnel starts
const settings = loadSettings();
settings.tunnelAutoStart = true;
saveSettings(settings);
return currentTunnelInfo;
}
@@ -280,6 +286,12 @@ export async function startTunnel(): Promise<TunnelInfo> {
currentState = 'running';
log.info('Tunnel started successfully:', currentTunnelInfo);
// Save auto-start setting when tunnel starts
const settings = loadSettings();
settings.tunnelAutoStart = true;
saveSettings(settings);
return currentTunnelInfo;
} catch (error) {
currentState = 'error';
@@ -293,7 +305,7 @@ export async function startTunnel(): Promise<TunnelInfo> {
}
}
export function stopTunnel(): void {
export function stopTunnel(clearAutoStart: boolean = true): void {
// Stop Lapstone tunnel if active
stopLapstoneTunnel();
@@ -326,6 +338,13 @@ export function stopTunnel(): void {
currentState = 'idle';
currentTunnelInfo = null;
// Only clear auto-start setting when manually stopping (not on app quit)
if (clearAutoStart) {
const settings = loadSettings();
settings.tunnelAutoStart = false;
saveSettings(settings);
}
// Clean up output file
if (outputFilePath && fs.existsSync(outputFilePath)) {
try {
@@ -348,6 +367,19 @@ export function getTunnelStatus(): { state: TunnelState; info: TunnelInfo | null
export function setupTunnelCleanup(electronApp: App): void {
electronApp.on('will-quit', () => {
log.info('App quitting, stopping tunnel if running');
stopTunnel();
stopTunnel(false); // Don't clear auto-start flag on quit
});
}
// Auto-start tunnel if it was running when app closed
export async function autoStartTunnel(): Promise<void> {
const settings = loadSettings();
if (settings.tunnelAutoStart) {
log.info('Auto-starting tunnel from previous session');
try {
await startTunnel();
} catch (error) {
log.error('Failed to auto-start tunnel:', error);
}
}
}