Update conversations.php
This commit is contained in:
+19
-7
@@ -1870,19 +1870,31 @@
|
|||||||
this.conversations = messages.concat(this.conversations);
|
this.conversations = messages.concat(this.conversations);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dedupe messages by message_id (keep the last occurrence)
|
// Improved dedupe: use message_id, id, and fallback composite key (direction|type|media|created_sec)
|
||||||
try {
|
try {
|
||||||
const seen = new Map();
|
const seen = new Map();
|
||||||
|
const duplicates = [];
|
||||||
for (let i = this.conversations.length - 1; i >= 0; i--) {
|
for (let i = this.conversations.length - 1; i >= 0; i--) {
|
||||||
const m = this.conversations[i];
|
const m = this.conversations[i];
|
||||||
if (m && m.message_id) {
|
if (!m) continue;
|
||||||
if (seen.has(m.message_id)) {
|
const mid = m.message_id || m.id || null;
|
||||||
this.conversations.splice(i, 1);
|
let key = null;
|
||||||
} else {
|
if (mid) key = String(mid);
|
||||||
seen.set(m.message_id, true);
|
else {
|
||||||
}
|
const partMedia = m.media_url || m.media_url_external || m.local_file || m.local_thumb || m.content || '';
|
||||||
|
const ts = m.created_at ? String(Math.floor(new Date(m.created_at).getTime() / 1000)) : '';
|
||||||
|
key = `${m.direction||'?'}|${m.message_type||m.media_type||'text'}|${partMedia}|${ts}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (seen.has(key)) {
|
||||||
|
// remove duplicate occurrence (keep the last one)
|
||||||
|
duplicates.push({index:i, key});
|
||||||
|
this.conversations.splice(i, 1);
|
||||||
|
} else {
|
||||||
|
seen.set(key, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (duplicates.length) console.debug('Dedupe removed duplicates (indices):', duplicates);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.warn('Dedupe failed', e);
|
console.warn('Dedupe failed', e);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user