import { Product } from "@/_models/Product"; import { executeSerial } from "@/_services/pluginService"; import { ModelManagementService } from "../../shared/coreService"; import { useEffect, useState } from "react"; import { getModelFiles } from "./useGetDownloadedModels"; import { modelDownloadStateAtom } from "@/_helpers/JotaiWrapper"; import { useAtomValue } from "jotai"; export default function useGetAvailableModels() { const downloadState = useAtomValue(modelDownloadStateAtom); const [allAvailableModels, setAllAvailableModels] = useState([]); const [availableModels, setAvailableModels] = useState([]); const [downloadedModels, setDownloadedModels] = useState([]); const getAvailableModelExceptDownloaded = async () => { const avails = await getAvailableModels(); const downloaded = await getModelFiles(); setAllAvailableModels(avails); const availableOrDownloadingModels: Product[] = avails; const successfullDownloadModels: Product[] = []; downloaded.forEach((item) => { if (item.fileName && downloadState[item.fileName] == null) { // if not downloading, consider as downloaded successfullDownloadModels.push(item); } else { availableOrDownloadingModels.push(item); } }); setAvailableModels(availableOrDownloadingModels); setDownloadedModels(successfullDownloadModels); }; useEffect(() => { getAvailableModelExceptDownloaded(); }, []); return { allAvailableModels, availableModels, downloadedModels, getAvailableModelExceptDownloaded, }; } export async function getAvailableModels(): Promise { const avails: Product[] = await executeSerial( ModelManagementService.GET_AVAILABLE_MODELS ); return avails ?? []; }