You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

119 lines
3.8 KiB

/**
* @file Electron Main Entry Point
* @author Matthew Raymer
*
* This file initializes the TimeSafari application for the Electron desktop platform.
* It provides the main entry point for the Electron renderer process and handles
* platform-specific initialization and configuration.
*
* Electron-Specific Features:
* - Desktop platform service initialization
* - Electron-specific error handling
* - Desktop UI optimizations
* - Native desktop integrations
*
* Integration Points:
* - Electron main process communication
* - Desktop file system access
* - Native OS integration
* - Platform-specific services
*
* Type Safety:
* - Uses ElectronPlatformService for desktop-specific functionality
* - Ensures type safety across Electron renderer and main processes
* - Maintains compatibility with Capacitor-Electron plugins
*
* @example
* // Electron renderer process initialization
* // Automatically detects Electron environment
* // Provides desktop-optimized user experience
*/
import { initializeApp } from "./main.common";
import { handleApiError } from "./services/api";
import { logger } from "./utils/logger";
// **CRITICAL**: Disable any existing service workers that might intercept API calls
// Service workers from web sessions can persist and cause issues in Electron
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
navigator.serviceWorker
?.getRegistrations()
.then(function (registrations) {
for (const registration of registrations) {
logger.debug(
"[Electron] Unregistering service worker:",
registration.scope,
);
registration.unregister();
}
if (registrations.length > 0) {
logger.log(
"[Electron] Cleaned up",
registrations.length,
"service worker registrations",
);
}
})
.catch((error) => {
logger.debug("[Electron] Service worker cleanup failed:", error);
});
logger.log("[Electron] Starting initialization");
logger.log("[Electron] Platform:", process.env.VITE_PLATFORM);
// Verify we're running in the correct platform environment
if (process.env.VITE_PLATFORM !== "electron") {
logger.warn(
"[Electron] Platform mismatch - expected 'electron', got:",
process.env.VITE_PLATFORM,
);
}
const app = initializeApp();
// Initialize API error handling for unhandled promise rejections
window.addEventListener("unhandledrejection", (event) => {
if (event.reason?.response) {
handleApiError(event.reason, event.reason.config?.url || "unknown");
}
});
// Electron-specific initialization
if (typeof window !== "undefined" && window.require) {
// We're in an Electron renderer process
logger.log("[Electron] Detected Electron renderer process");
// **CRITICAL FIX**: Disable any existing service worker that might be intercepting API calls
try {
if (navigator.serviceWorker?.getRegistrations) {
navigator.serviceWorker
.getRegistrations()
.then(function (registrations) {
for (const registration of registrations) {
logger.log(
"[Electron] Unregistering service worker:",
registration.scope,
);
registration.unregister();
}
})
.catch((error) => {
logger.log("[Electron] Failed to unregister service workers:", error);
});
}
} catch (error) {
logger.log("[Electron] Service worker cleanup not available:", error);
}
// Add any Electron-specific initialization here
// For example, IPC communication setup, desktop-specific features, etc.
}
logger.log("[Electron] Mounting app");
app.mount("#app");
logger.log("[Electron] App mounted");
// Add Electron-specific cleanup on beforeunload
window.addEventListener("beforeunload", () => {
logger.log("[Electron] App unloading");
});