mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-01-31 06:42:03 +00:00
- Introduced useOSDetection hook to determine the user's operating system. - Updated FileBrowserDialog to utilize the OS detection for displaying the correct keyboard shortcut (⌘ or Ctrl) based on the detected OS.
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import { useMemo } from 'react';
|
|
|
|
export type OperatingSystem = 'mac' | 'windows' | 'linux' | 'unknown';
|
|
|
|
export interface OSDetectionResult {
|
|
readonly os: OperatingSystem;
|
|
readonly isMac: boolean;
|
|
readonly isWindows: boolean;
|
|
readonly isLinux: boolean;
|
|
}
|
|
|
|
function detectOS(): OperatingSystem {
|
|
// Check Electron's process.platform first (most reliable in Electron apps)
|
|
if (typeof process !== 'undefined' && process.platform) {
|
|
if (process.platform === 'darwin') return 'mac';
|
|
if (process.platform === 'win32') return 'windows';
|
|
if (process.platform === 'linux') return 'linux';
|
|
}
|
|
|
|
if (typeof navigator === 'undefined') {
|
|
return 'unknown';
|
|
}
|
|
|
|
// Fallback: use modern userAgentData API with fallback to navigator.platform
|
|
const nav = navigator as Navigator & { userAgentData?: { platform: string } };
|
|
const platform = (nav.userAgentData?.platform ?? navigator.platform ?? '').toLowerCase();
|
|
|
|
if (platform.includes('mac')) return 'mac';
|
|
if (platform.includes('win')) return 'windows';
|
|
if (platform.includes('linux') || platform.includes('x11')) return 'linux';
|
|
return 'unknown';
|
|
}
|
|
|
|
/**
|
|
* Hook to detect the user's operating system.
|
|
* Returns OS information and convenience boolean flags.
|
|
*/
|
|
export function useOSDetection(): OSDetectionResult {
|
|
return useMemo(() => {
|
|
const os = detectOS();
|
|
return {
|
|
os,
|
|
isMac: os === 'mac',
|
|
isWindows: os === 'windows',
|
|
isLinux: os === 'linux',
|
|
};
|
|
}, []);
|
|
}
|