Files
OllaHub/hooks/use-operating-system.ts
2026-02-22 14:06:01 -03:00

67 lines
1.6 KiB
TypeScript

import { useState, useEffect } from 'react';
import { invoke } from '@tauri-apps/api/core';
import type { OS } from '@/lib/download-utils';
export function useOperatingSystem() {
const [os, setOs] = useState<OS | null>(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
const detectOS = async () => {
try {
const detectedOS = await invoke<string>('get_operating_system');
// Mapear para o tipo OS
if (detectedOS === 'windows' || detectedOS === 'mac' || detectedOS === 'linux') {
setOs(detectedOS as OS);
} else {
// Fallback: tentar detectar via user agent
const userAgent = navigator.userAgent.toLowerCase();
if (userAgent.includes('win')) {
setOs('windows');
} else if (userAgent.includes('mac')) {
setOs('mac');
} else if (userAgent.includes('linux')) {
setOs('linux');
} else {
setOs('windows'); // Default fallback
}
}
} catch (error) {
console.error('Failed to detect OS:', error);
// Fallback: detectar via user agent
const userAgent = navigator.userAgent.toLowerCase();
if (userAgent.includes('win')) {
setOs('windows');
} else if (userAgent.includes('mac')) {
setOs('mac');
} else if (userAgent.includes('linux')) {
setOs('linux');
} else {
setOs('windows'); // Default fallback
}
} finally {
setLoading(false);
}
};
detectOS();
}, []);
return { os, loading };
}