mirror of
https://github.com/jamiepine/voicebox.git
synced 2026-09-16 21:30:39 -07:00
- Rearranged imports for consistency across components. - Enhanced the ModelManagement component to include detailed logging for download actions and errors. - Updated the ModelProgress component to connect to SSE only when actively downloading, preventing connection exhaustion. - Added a downloading state to the model status to indicate ongoing downloads. - Improved toast notifications for model downloads with completion and error callbacks. - Refactored the useModelDownloadToast hook to support new callbacks for download completion and error handling. - Updated backend model status to reflect downloading state during active downloads.
53 lines
1.8 KiB
TypeScript
53 lines
1.8 KiB
TypeScript
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
import { usePlatform } from '@/platform/PlatformContext';
|
|
import type { UpdateStatus } from '@/platform/types';
|
|
|
|
// Re-export UpdateStatus for backwards compatibility
|
|
export type { UpdateStatus };
|
|
|
|
export function useAutoUpdater(checkOnMount = false) {
|
|
const platform = usePlatform();
|
|
const [status, setStatus] = useState<UpdateStatus>(platform.updater.getStatus());
|
|
const hasCheckedRef = useRef(false);
|
|
|
|
// Subscribe to updater status changes
|
|
useEffect(() => {
|
|
const unsubscribe = platform.updater.subscribe((newStatus) => {
|
|
setStatus(newStatus);
|
|
});
|
|
return unsubscribe;
|
|
// Empty dependency array - platform is stable from context
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [platform.updater.subscribe]);
|
|
|
|
const checkForUpdates = useCallback(async () => {
|
|
await platform.updater.checkForUpdates();
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [platform.updater.checkForUpdates]);
|
|
|
|
const downloadAndInstall = useCallback(async () => {
|
|
await platform.updater.downloadAndInstall();
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [platform.updater.downloadAndInstall]);
|
|
|
|
const restartAndInstall = useCallback(async () => {
|
|
await platform.updater.restartAndInstall();
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [platform.updater.restartAndInstall]);
|
|
|
|
useEffect(() => {
|
|
if (checkOnMount && platform.metadata.isTauri && !hasCheckedRef.current) {
|
|
hasCheckedRef.current = true;
|
|
checkForUpdates();
|
|
}
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [platform.metadata.isTauricheckOnMountcheckForUpdates]);
|
|
|
|
return {
|
|
status,
|
|
checkForUpdates,
|
|
downloadAndInstall,
|
|
restartAndInstall,
|
|
};
|
|
}
|