fix(polling): reduce frequency, add max attempts, prevent unnecessary re-renders

This commit is contained in:
4NK IA 2025-09-17 16:14:16 +00:00
parent 2d52564455
commit 57d4d9cf5a
3 changed files with 35 additions and 35 deletions

View File

@ -300,13 +300,13 @@ async function listFolderResults(folderHash) {
for (const file of uploadFiles) {
console.log(`[FOLDER] Traitement du fichier: ${file}`)
// Ignorer les fichiers de métadonnées
if (file === 'folder.json' || file.endsWith('.meta')) {
console.log(`[FOLDER] Fichier de métadonnées ignoré: ${file}`)
continue
}
// Extraire le hash du nom de fichier (format: hash.extension)
const fileHash = path.basename(file, path.extname(file))
console.log(`[FOLDER] Hash extrait: ${fileHash}`)

View File

@ -79,10 +79,22 @@ export default function App() {
(folderHash: string) => {
console.log('🔄 [APP] Démarrage du polling pour le dossier:', folderHash)
let pollCount = 0
const maxPolls = 30 // Maximum 30 tentatives (4 minutes à 8s d'intervalle)
const interval = setInterval(() => {
console.log('🔄 [APP] Polling - Vérification des résultats...')
pollCount++
console.log(`🔄 [APP] Polling #${pollCount} - Vérification des résultats...`)
if (pollCount >= maxPolls) {
console.log('⏹️ [APP] Arrêt du polling - limite de tentatives atteinte')
clearInterval(interval)
dispatch(stopPolling())
return
}
dispatch(loadFolderResults(folderHash))
}, 8000) // Polling un peu moins fréquent
}, 12000) // Polling moins fréquent (12s)
dispatch(setPollingInterval(interval))
},
@ -100,8 +112,10 @@ export default function App() {
// Ne démarrer le polling que si on n'a encore jamais chargé ce dossier
// et seulement quand le backend indique des pending
if (hasPending && currentFolderHash && !pollingInterval) {
console.log('🔄 [APP] Démarrage du polling - fichiers en cours détectés')
startPolling(currentFolderHash)
} else if (!hasPending && pollingInterval) {
console.log('⏹️ [APP] Arrêt du polling - tous les fichiers traités')
stopPollingCallback()
}
}, [hasPending, currentFolderHash, pollingInterval, startPolling, stopPollingCallback])

View File

@ -396,14 +396,10 @@ const documentSlice = createSlice({
state.hasPending = action.payload.hasPending || false
// Convertir les résultats en documents pour la compatibilité
const newDocuments: any[] = []
if (action.payload.results && action.payload.results.length > 0) {
const completedDocs = action.payload.results.map((result) => {
console.log(`[STORE] Mapping résultat:`, {
fileHash: result.fileHash,
fileName: result.document?.fileName,
mimeType: result.document?.mimeType,
})
return {
id: result.fileHash,
name: result.document.fileName,
@ -414,30 +410,12 @@ const documentSlice = createSlice({
previewUrl: `/api/folders/${action.payload.folderHash}/files/${result.fileHash}`,
}
})
newDocuments.push(...completedDocs)
}
// Ajouter des placeholders pour les fichiers en cours (pending)
const pendingItems = (action.payload.pending || []).map((p: any) => {
console.log(`[STORE] Mapping pending:`, {
fileHash: p.fileHash,
timestamp: p.timestamp,
})
return {
id: p.fileHash,
name: p.fileHash,
mimeType: 'application/octet-stream',
size: 0,
uploadDate: new Date(p.timestamp),
status: 'processing' as const,
previewUrl: '',
}
})
state.documents = [...completedDocs, ...pendingItems]
console.log(`[STORE] Documents finaux avec pending: ${completedDocs.length} completed + ${pendingItems.length} pending = ${state.documents.length} total`)
} else {
console.log(`[STORE] Aucun résultat à mapper`)
// Même s'il n'y a pas encore de résultats, afficher les pending en placeholders
const pendingItems = (action.payload.pending || []).map((p: any) => ({
// Ajouter des placeholders pour les fichiers en cours (pending)
if (action.payload.pending && action.payload.pending.length > 0) {
const pendingItems = action.payload.pending.map((p: any) => ({
id: p.fileHash,
name: p.fileHash,
mimeType: 'application/octet-stream',
@ -446,8 +424,16 @@ const documentSlice = createSlice({
status: 'processing' as const,
previewUrl: '',
}))
state.documents = pendingItems
console.log(`[STORE] Documents pending uniquement: ${pendingItems.length} fichiers`)
newDocuments.push(...pendingItems)
}
// Ne mettre à jour que si les documents ont vraiment changé
const documentsChanged = JSON.stringify(state.documents) !== JSON.stringify(newDocuments)
if (documentsChanged) {
state.documents = newDocuments
console.log(`[STORE] Documents mis à jour: ${action.payload.results?.length || 0} completed + ${action.payload.pending?.length || 0} pending = ${newDocuments.length} total`)
} else {
console.log(`[STORE] Documents inchangés, pas de re-render`)
}
console.log(