2025-12-07 19:32:53 +02:00
|
|
|
import { useCallback, useEffect, useState } from 'react';
|
2026-04-27 15:45:14 +03:00
|
|
|
import { isDesktopShell, requestDirectoryAccess, startAccessingDirectory, stopAccessingDirectory } from '@/lib/desktop';
|
2025-12-07 19:32:53 +02:00
|
|
|
|
|
|
|
|
export const useFileSystemAccess = () => {
|
|
|
|
|
const [isDesktop, setIsDesktop] = useState(false);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
2026-04-27 15:45:14 +03:00
|
|
|
setIsDesktop(isDesktopShell());
|
2025-12-07 19:32:53 +02:00
|
|
|
}, []);
|
|
|
|
|
|
2026-01-06 21:31:04 +02:00
|
|
|
const requestAccess = useCallback(async (directoryPath: string): Promise<{ success: boolean; path?: string; projectId?: string; error?: string }> => {
|
2025-12-07 19:32:53 +02:00
|
|
|
if (!isDesktop) {
|
|
|
|
|
return { success: true, path: directoryPath };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return await requestDirectoryAccess(directoryPath);
|
|
|
|
|
}, [isDesktop]);
|
|
|
|
|
|
|
|
|
|
const startAccessing = useCallback(async (directoryPath: string): Promise<{ success: boolean; error?: string }> => {
|
|
|
|
|
if (!isDesktop) {
|
|
|
|
|
return { success: true };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return await startAccessingDirectory(directoryPath);
|
|
|
|
|
}, [isDesktop]);
|
|
|
|
|
|
|
|
|
|
const stopAccessing = useCallback(async (directoryPath: string): Promise<{ success: boolean; error?: string }> => {
|
|
|
|
|
if (!isDesktop) {
|
|
|
|
|
return { success: true };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return await stopAccessingDirectory(directoryPath);
|
|
|
|
|
}, [isDesktop]);
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
isDesktop,
|
|
|
|
|
requestAccess,
|
|
|
|
|
startAccessing,
|
|
|
|
|
stopAccessing
|
|
|
|
|
};
|
2026-02-05 01:59:49 +02:00
|
|
|
};
|