MCPcopy Create free account
hub / github.com/Sethispr/image-compressor / useOptimizer

Function useOptimizer

hooks/useOptimizer.tsx:75–420  ·  view source on GitHub ↗
(settings: OptimizerConfiguration)

Source from the content-addressed store, hash-verified

73};
74
75export const useOptimizer = (settings: OptimizerConfiguration) => {
76 const [jobs, setJobs] = useState<ImageJob[]>([]);
77 const [activeJobCount, setActiveJobCount] = useState(0);
78 const [isRestoring, setIsRestoring] = useState(true);
79
80 const resourceManager = useRef(new ResourceManager());
81
82 const activeCountRef = useRef(0);
83 const settingsRef = useRef(settings);
84
85 useEffect(() => {
86 activeCountRef.current = activeJobCount;
87 }, [activeJobCount]);
88 useEffect(() => {
89 settingsRef.current = settings;
90 }, [settings]);
91
92 useEffect(() => {
93 if (settings.disableStorage) {
94 setIsRestoring(false);
95 return;
96 }
97
98 const restoreSession = async () => {
99 try {
100 const persistedJobs = await getAllJobsFromDb();
101
102 if (persistedJobs.length > 0) {
103 const hydratedJobs = persistedJobs.map(job => ({
104 ...job,
105 previewUrl: resourceManager.current.allocateView(job.id, job.file),
106 }));
107 setJobs(hydratedJobs);
108 }
109 } catch (e) {
110 console.error('Failed to restore session', e);
111 } finally {
112 setIsRestoring(false);
113 }
114 };
115 void restoreSession();
116
117 return () => resourceManager.current.garbageCollect();
118 }, [settings.disableStorage]);
119
120 useEffect(() => {
121 if (settings.disableStorage) {
122 void clearDb();
123 }
124 }, [settings.disableStorage]);
125
126 useEffect(() => {
127 const handleBeforeUnload = (e: BeforeUnloadEvent) => {
128 if (activeJobCount > 0) {
129 e.preventDefault();
130 e.returnValue = '';
131 return '';
132 }

Callers 1

AppFunction · 0.90

Calls 11

clearDbFunction · 0.90
validateAndSanitizeFileFunction · 0.90
saveJobToDbFunction · 0.90
deleteJobFromDbFunction · 0.90
cancelAllWorkersFunction · 0.90
processImageInWorkerFunction · 0.90
restoreSessionFunction · 0.85
garbageCollectMethod · 0.80
allocateViewMethod · 0.80
freeMethod · 0.80

Tested by

no test coverage detected