fix(polling): reduce frequency, add max attempts, prevent unnecessary re-renders
This commit is contained in:
parent
2d52564455
commit
57d4d9cf5a
@ -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}`)
|
||||
|
||||
18
src/App.tsx
18
src/App.tsx
@ -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])
|
||||
|
||||
@ -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(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user