fix: xREL badges – stabile ID-String dependency, kein cancelled-Flag Race
This commit is contained in:
@@ -265,25 +265,24 @@ function KinoGrid({ onOpenModal }) {
|
|||||||
.finally(() => setLoading(false));
|
.finally(() => setLoading(false));
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// xREL-Badges: eigener Effect, startet wenn movies gefüllt sind
|
// xREL-Badges: startet einmalig wenn Filme geladen, ID-String als stable dependency
|
||||||
|
const movieIds = movies.map(m => m.id).join(',');
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!movies.length) return;
|
if (!movieIds) return;
|
||||||
let cancelled = false;
|
|
||||||
const moviesMeta = movies.map(m => ({ id: m.id, title: m.title, original_title: m.original_title }));
|
const moviesMeta = movies.map(m => ({ id: m.id, title: m.title, original_title: m.original_title }));
|
||||||
|
let active = true;
|
||||||
(async () => {
|
(async () => {
|
||||||
for (let i = 0; i < moviesMeta.length; i += 1) {
|
for (const m of moviesMeta) {
|
||||||
if (cancelled) break;
|
if (!active) break;
|
||||||
try {
|
try {
|
||||||
const chunk = moviesMeta.slice(i, i + 1);
|
const result = await api('/tools/media/xrel-check', { method:'POST', body:{ movies: [m] } });
|
||||||
const result = await api('/tools/media/xrel-check', { method:'POST', body:{ movies: chunk } });
|
if (!active) break;
|
||||||
if (cancelled) break;
|
if (result[m.id]) setXrelIds(prev => new Set([...prev, m.id]));
|
||||||
const hits = Object.entries(result).filter(([,v]) => v).map(([k]) => Number(k));
|
|
||||||
if (hits.length > 0) setXrelIds(prev => new Set([...prev, ...hits]));
|
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
return () => { cancelled = true; };
|
return () => { active = false; };
|
||||||
}, [movies]);
|
}, [movieIds]);
|
||||||
|
|
||||||
const onToggle = async (movie, isFav) => {
|
const onToggle = async (movie, isFav) => {
|
||||||
try { await toggleFav(movie, isFav); } catch (e) { alert(e.message); }
|
try { await toggleFav(movie, isFav); } catch (e) { alert(e.message); }
|
||||||
@@ -334,25 +333,24 @@ function DemnächstGrid({ onOpenModal }) {
|
|||||||
.finally(() => setLoading(false));
|
.finally(() => setLoading(false));
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
const groupIds = Object.values(groups).flat().map(m => m.id).join(',');
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
if (!groupIds) return;
|
||||||
const allMovies = Object.values(groups).flat();
|
const allMovies = Object.values(groups).flat();
|
||||||
if (!allMovies.length) return;
|
|
||||||
let cancelled = false;
|
|
||||||
const moviesMeta = allMovies.map(m => ({ id: m.id, title: m.title, original_title: m.original_title }));
|
const moviesMeta = allMovies.map(m => ({ id: m.id, title: m.title, original_title: m.original_title }));
|
||||||
|
let active = true;
|
||||||
(async () => {
|
(async () => {
|
||||||
for (let i = 0; i < moviesMeta.length; i += 1) {
|
for (const m of moviesMeta) {
|
||||||
if (cancelled) break;
|
if (!active) break;
|
||||||
try {
|
try {
|
||||||
const chunk = moviesMeta.slice(i, i + 1);
|
const result = await api('/tools/media/xrel-check', { method:'POST', body:{ movies: [m] } });
|
||||||
const result = await api('/tools/media/xrel-check', { method:'POST', body:{ movies: chunk } });
|
if (!active) break;
|
||||||
if (cancelled) break;
|
if (result[m.id]) setXrelIds(prev => new Set([...prev, m.id]));
|
||||||
const hits = Object.entries(result).filter(([,v]) => v).map(([k]) => Number(k));
|
|
||||||
if (hits.length > 0) setXrelIds(prev => new Set([...prev, ...hits]));
|
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
return () => { cancelled = true; };
|
return () => { active = false; };
|
||||||
}, [groups]);
|
}, [groupIds]);
|
||||||
|
|
||||||
const onToggle = async (movie, isFav) => {
|
const onToggle = async (movie, isFav) => {
|
||||||
try { await toggleFav(movie, isFav); } catch (e) { alert(e.message); }
|
try { await toggleFav(movie, isFav); } catch (e) { alert(e.message); }
|
||||||
|
|||||||
Reference in New Issue
Block a user