Discussions : la liste montre la nouvelle dès le premier message

Repris d'AJEAN 0.17.6. La discussion est enregistrée au début du tour
(StartTurn persiste), mais la liste ne se rafraîchissait qu'à la fin de
la réponse. Elle se recharge maintenant à l'arrivée du message, groupée
quand plusieurs événements se suivent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Opus 5.5 committed 2026-10-02 23:25:32 +02:00
1 parent 2bbf0ba76d
commit 5e36b1cf82
2 files changed
+24

No files matched your search

+12
View File
@@ -7412,6 +7412,15 @@ function feedBlock(el, full){ if(REPLAYING) scheduleRender(el, full); else smoot
// bulle d'outil) doit voir le texte complet.
function settleBlocks(){ smoothSnap(); flushRender(); }
// Rafraîchissement groupé de la liste des discussions (plusieurs événements
// rapprochés = un seul appel).
let histRefreshTimer=null;
function histRefreshSoon(){
if(typeof loadConversations!=='function') return;
clearTimeout(histRefreshTimer);
histRefreshTimer=setTimeout(()=>{ histRefreshTimer=null; loadConversations(); }, 400);
}
// Traite UN événement du flux — même sémantique que l'ancien switch inline, mais
// piloté par le serveur et rejouable à l'identique.
function handleDelta(d){
@@ -7467,6 +7476,9 @@ function handleDelta(d){
// bulle de réponse du tour.
T.model = d.model || '';
if(!REPLAYING) queueTake(d.user); // message en file désormais pris en compte
// Le serveur a déjà enregistré la discussion (StartTurn persiste) : la liste
// la montre dès le premier message, sans attendre la fin de la réponse.
if(!REPLAYING) histRefreshSoon();
let el=PENDING;
if(!confirmPending(d.user)) el=addMsg('user', d.user);
// Pièces jointes du tour : rendues DANS la bulle. La bulle en attente en
+12
View File
@@ -437,6 +437,15 @@ function feedBlock(el, full){ if(REPLAYING) scheduleRender(el, full); else smoot
// bulle d'outil) doit voir le texte complet.
function settleBlocks(){ smoothSnap(); flushRender(); }
// Rafraîchissement groupé de la liste des discussions (plusieurs événements
// rapprochés = un seul appel).
let histRefreshTimer=null;
function histRefreshSoon(){
if(typeof loadConversations!=='function') return;
clearTimeout(histRefreshTimer);
histRefreshTimer=setTimeout(()=>{ histRefreshTimer=null; loadConversations(); }, 400);
}
// Traite UN événement du flux — même sémantique que l'ancien switch inline, mais
// piloté par le serveur et rejouable à l'identique.
function handleDelta(d){
@@ -492,6 +501,9 @@ function handleDelta(d){
// bulle de réponse du tour.
T.model = d.model || '';
if(!REPLAYING) queueTake(d.user); // message en file désormais pris en compte
// Le serveur a déjà enregistré la discussion (StartTurn persiste) : la liste
// la montre dès le premier message, sans attendre la fin de la réponse.
if(!REPLAYING) histRefreshSoon();
let el=PENDING;
if(!confirmPending(d.user)) el=addMsg('user', d.user);
// Pièces jointes du tour : rendues DANS la bulle. La bulle en attente en