mirror of
https://github.com/webadderallorg/Recordly.git
synced 2026-10-05 03:57:45 +00:00
fix: Icons that were deprecated (mostly added Icon at the end of each ones.) I also removed "as" Microphone as Mic everywhere... Let's use normal icon names
91 lines
2.7 KiB
TypeScript
91 lines
2.7 KiB
TypeScript
import { useCallback, useState } from "react";
|
|
import type { ProjectLibraryEntry } from "@/components/video-editor/ProjectBrowserDialog";
|
|
import type { DesktopSource } from "../popovers/launchPopoverTypes";
|
|
|
|
export function useLaunchWindowActions({
|
|
closeAllPopovers,
|
|
}: {
|
|
closeAllPopovers: () => void;
|
|
}) {
|
|
const [selectedSource, setSelectedSource] = useState("Screen");
|
|
const [hasSelectedSource, setHasSelectedSource] = useState(false);
|
|
const [projectLibraryEntries, setProjectLibraryEntries] = useState<ProjectLibraryEntry[]>([]);
|
|
const [projectBrowserOpen, setProjectBrowserOpen] = useState(false);
|
|
|
|
const handleSourceSelect = useCallback(async (source: DesktopSource) => {
|
|
await window.electronAPI.selectSource(source);
|
|
setSelectedSource(source.name);
|
|
setHasSelectedSource(true);
|
|
window.electronAPI.showSourceHighlight?.({
|
|
...source,
|
|
name: source.appName ? `${source.appName} — ${source.name}` : source.name,
|
|
appName: source.appName,
|
|
});
|
|
}, []);
|
|
|
|
const openVideoFile = useCallback(async () => {
|
|
const result = await window.electronAPI.openVideoFilePicker();
|
|
if (result.canceled) return;
|
|
if (result.success && result.path) {
|
|
await window.electronAPI.setCurrentVideoPath(result.path);
|
|
await window.electronAPI.switchToEditor();
|
|
}
|
|
}, []);
|
|
|
|
const refreshProjectLibrary = useCallback(async () => {
|
|
try {
|
|
const result = await window.electronAPI.listProjectFiles();
|
|
if (!result.success) return;
|
|
setProjectLibraryEntries(result.entries);
|
|
} catch (error) {
|
|
console.error("Failed to load project library:", error);
|
|
}
|
|
}, []);
|
|
|
|
const openProjectBrowser = useCallback(async () => {
|
|
if (projectBrowserOpen) {
|
|
setProjectBrowserOpen(false);
|
|
return;
|
|
}
|
|
closeAllPopovers();
|
|
await refreshProjectLibrary();
|
|
setProjectBrowserOpen(true);
|
|
}, [closeAllPopovers, projectBrowserOpen, refreshProjectLibrary]);
|
|
|
|
const openProjectFromLibrary = useCallback(async (projectPath: string) => {
|
|
try {
|
|
const result = await window.electronAPI.openProjectFileAtPath(projectPath);
|
|
if (result.canceled || !result.success) {
|
|
return;
|
|
}
|
|
setProjectBrowserOpen(false);
|
|
await window.electronAPI.switchToEditor();
|
|
} catch (error) {
|
|
console.error("Failed to open project from library:", error);
|
|
}
|
|
}, []);
|
|
|
|
const syncSelectedSource = useCallback((source: { name?: string } | null | undefined) => {
|
|
if (source?.name) {
|
|
setSelectedSource(source.name);
|
|
setHasSelectedSource(true);
|
|
return;
|
|
}
|
|
setSelectedSource("Screen");
|
|
setHasSelectedSource(false);
|
|
}, []);
|
|
|
|
return {
|
|
selectedSource,
|
|
hasSelectedSource,
|
|
projectLibraryEntries,
|
|
projectBrowserOpen,
|
|
setProjectBrowserOpen,
|
|
handleSourceSelect,
|
|
openVideoFile,
|
|
openProjectBrowser,
|
|
openProjectFromLibrary,
|
|
syncSelectedSource,
|
|
};
|
|
}
|