scroll
This commit is contained in:
+23
-5
@@ -1021,6 +1021,8 @@
|
|||||||
// Suspend periodic refresh while media playback or recording is active
|
// Suspend periodic refresh while media playback or recording is active
|
||||||
this._suspendAutoRefresh = false;
|
this._suspendAutoRefresh = false;
|
||||||
this._pendingReloadAfterMedia = false;
|
this._pendingReloadAfterMedia = false;
|
||||||
|
// Flag to request a reload after user stops scrolling
|
||||||
|
this._pendingReloadAfterScroll = false;
|
||||||
// Removed: automatic "Nuevos mensajes" indicator — we always reload full conversation now
|
// Removed: automatic "Nuevos mensajes" indicator — we always reload full conversation now
|
||||||
// this._lastRenderMessageCount = 0;
|
// this._lastRenderMessageCount = 0;
|
||||||
|
|
||||||
@@ -1841,12 +1843,18 @@
|
|||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
if (this.currentUserId) {
|
if (this.currentUserId) {
|
||||||
try {
|
try {
|
||||||
|
if (this._userScrolling) {
|
||||||
|
console.debug('Periodic load skipped: user is scrolling; scheduling reload after inactivity');
|
||||||
|
this._pendingReloadAfterScroll = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (typeof this.isMediaActive === 'function' && this.isMediaActive()) {
|
if (typeof this.isMediaActive === 'function' && this.isMediaActive()) {
|
||||||
console.debug('Periodic load skipped: media active or recording in progress; scheduling reload after media ends');
|
console.debug('Periodic load skipped: media active or recording in progress; scheduling reload after media ends');
|
||||||
this._pendingReloadAfterMedia = true;
|
this._pendingReloadAfterMedia = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch (e) { console.warn('isMediaActive check failed', e); }
|
} catch (e) { console.warn('Periodic checks failed', e); }
|
||||||
// full reload forces scroll-to-bottom
|
// full reload forces scroll-to-bottom
|
||||||
this.loadMessages(this.currentUserId, true).catch(err => console.warn('Periodic loadMessages failed', err));
|
this.loadMessages(this.currentUserId, true).catch(err => console.warn('Periodic loadMessages failed', err));
|
||||||
}
|
}
|
||||||
@@ -2440,7 +2448,14 @@
|
|||||||
try {
|
try {
|
||||||
this._userScrolling = true;
|
this._userScrolling = true;
|
||||||
if (this._userScrollTimer) clearTimeout(this._userScrollTimer);
|
if (this._userScrollTimer) clearTimeout(this._userScrollTimer);
|
||||||
this._userScrollTimer = setTimeout(() => { this._userScrolling = false; this._userScrollTimer = null; }, 1500);
|
this._userScrollTimer = setTimeout(() => {
|
||||||
|
this._userScrolling = false;
|
||||||
|
this._userScrollTimer = null;
|
||||||
|
if (this._pendingReloadAfterScroll && this.currentUserId) {
|
||||||
|
this._pendingReloadAfterScroll = false;
|
||||||
|
try { this.loadMessages(this.currentUserId, true).catch(e => console.warn('reload after scroll failed', e)); } catch(e) { console.warn('reload after scroll schedule failed', e); }
|
||||||
|
}
|
||||||
|
}, 1500);
|
||||||
} catch(e) { /* ignore */ }
|
} catch(e) { /* ignore */ }
|
||||||
|
|
||||||
if (chatContainer.scrollTop <= 60 && this.hasMoreMessages && !this.loadingMessages && this.currentUserId == userId) {
|
if (chatContainer.scrollTop <= 60 && this.hasMoreMessages && !this.loadingMessages && this.currentUserId == userId) {
|
||||||
@@ -3280,8 +3295,9 @@
|
|||||||
// Resume auto-refresh and trigger a reload if one was pending
|
// Resume auto-refresh and trigger a reload if one was pending
|
||||||
try {
|
try {
|
||||||
this._suspendAutoRefresh = false;
|
this._suspendAutoRefresh = false;
|
||||||
if (this._pendingReloadAfterMedia && this.currentUserId) {
|
if ((this._pendingReloadAfterMedia || this._pendingReloadAfterScroll) && this.currentUserId) {
|
||||||
this._pendingReloadAfterMedia = false;
|
this._pendingReloadAfterMedia = false;
|
||||||
|
this._pendingReloadAfterScroll = false;
|
||||||
await this.loadMessages(this.currentUserId, true);
|
await this.loadMessages(this.currentUserId, true);
|
||||||
}
|
}
|
||||||
} catch (e) { console.warn('Failed to resume reload after recording', e); }
|
} catch (e) { console.warn('Failed to resume reload after recording', e); }
|
||||||
@@ -3328,8 +3344,9 @@
|
|||||||
// Ensure we resume periodic reloads and trigger pending reload
|
// Ensure we resume periodic reloads and trigger pending reload
|
||||||
try {
|
try {
|
||||||
this._suspendAutoRefresh = false;
|
this._suspendAutoRefresh = false;
|
||||||
if (this._pendingReloadAfterMedia && this.currentUserId) {
|
if ((this._pendingReloadAfterMedia || this._pendingReloadAfterScroll) && this.currentUserId) {
|
||||||
this._pendingReloadAfterMedia = false;
|
this._pendingReloadAfterMedia = false;
|
||||||
|
this._pendingReloadAfterScroll = false;
|
||||||
this.loadMessages(this.currentUserId, true).catch(e => console.warn('Reload after stopRecording failed', e));
|
this.loadMessages(this.currentUserId, true).catch(e => console.warn('Reload after stopRecording failed', e));
|
||||||
}
|
}
|
||||||
} catch (e) { console.warn('stopRecording resume failed', e); }
|
} catch (e) { console.warn('stopRecording resume failed', e); }
|
||||||
@@ -3358,8 +3375,9 @@
|
|||||||
// Resume auto-refresh if it was suspended and trigger pending reload
|
// Resume auto-refresh if it was suspended and trigger pending reload
|
||||||
try {
|
try {
|
||||||
this._suspendAutoRefresh = false;
|
this._suspendAutoRefresh = false;
|
||||||
if (this._pendingReloadAfterMedia && this.currentUserId) {
|
if ((this._pendingReloadAfterMedia || this._pendingReloadAfterScroll) && this.currentUserId) {
|
||||||
this._pendingReloadAfterMedia = false;
|
this._pendingReloadAfterMedia = false;
|
||||||
|
this._pendingReloadAfterScroll = false;
|
||||||
this.loadMessages(this.currentUserId, true).catch(e => console.warn('Reload after cancelRecording failed', e));
|
this.loadMessages(this.currentUserId, true).catch(e => console.warn('Reload after cancelRecording failed', e));
|
||||||
}
|
}
|
||||||
} catch (e) { console.warn('cancelRecording resume failed', e); }
|
} catch (e) { console.warn('cancelRecording resume failed', e); }
|
||||||
|
|||||||
Reference in New Issue
Block a user