fix usenet sorting chaos

This commit is contained in:
zefie
2025-08-04 16:15:31 -04:00
parent 0204f05ad0
commit fe0e9550da

View File

@@ -465,36 +465,48 @@ class WTVNews {
else message_relations[res.messageId] = [{ "messageId": messageId, "index": k }]; else message_relations[res.messageId] = [{ "messageId": messageId, "index": k }];
} else { } else {
// see if its related to a relation // see if its related to a relation
var found = false;
if (Object.keys(message_relations).length > 0) { if (Object.keys(message_relations).length > 0) {
var found = false;
Object.keys(message_relations).forEach((j) => { Object.keys(message_relations).forEach((j) => {
if (found) return;
if (message_relations[j].length > 0) { if (message_relations[j].length > 0) {
Object.keys(message_relations[j]).forEach((h) => { Object.keys(message_relations[j]).forEach((h) => {
if (found) return; if (found) return;
if (message_relations[j][h].messageId == ref) { if (message_relations[j][h].messageId == ref) {
var searchref = messages[message_relations[j][h].index].headers.REFERENCES || null; var searchref = messages[message_relations[j][h].index].headers.REFERENCES || null;
var mainref = null; var mainref = j; // j is already the main reference messageId
while (searchref !== null) { while (searchref !== null) {
var searchart = messages.find(e => e.messageId == searchref); var searchart = messages.find(e => e.messageId == searchref);
var searchref = searchart.headers.REFERENCES || null; if (searchart) {
mainref = searchart.messageId;
searchref = searchart.headers.REFERENCES || null;
} else {
break;
}
} }
mainref = searchart.messageId;
message_relations[mainref].push({ "messageId": messageId, "index": k }); message_relations[mainref].push({ "messageId": messageId, "index": k });
found = true; found = true;
} else {
// no relation, missing reference, add as root
message_id_roots.push({ "messageId": messageId, "index": k });
} }
}); });
} }
}) })
} else { }
message_id_roots.push({ "messageId": messageId, "index": k });
// If not found in relations, add as root (but check for duplicates first)
if (!found) {
var existingRoot = message_id_roots.find(e => e.messageId == messageId);
if (!existingRoot) {
message_id_roots.push({ "messageId": messageId, "index": k });
}
} }
} }
} }
else { else {
message_id_roots.push({ "messageId": messageId, "index": k }); // Check for duplicates before adding as root
var existingRoot = message_id_roots.find(e => e.messageId == messageId);
if (!existingRoot) {
message_id_roots.push({ "messageId": messageId, "index": k });
}
} }
}); });
@@ -510,13 +522,15 @@ class WTVNews {
Object.keys(message_roots_sorted).forEach((k) => { Object.keys(message_roots_sorted).forEach((k) => {
sorted.push(message_roots_sorted[k]); sorted.push(message_roots_sorted[k]);
if (message_relations[message_id_roots[k].messageId]) { // Use the correct messageId from the sorted root article
var rootMessageId = message_roots_sorted[k].article.messageId;
if (message_relations[rootMessageId]) {
var relations = []; var relations = [];
Object.keys(message_relations[message_roots_sorted[k].article.messageId]).forEach((j) => { Object.keys(message_relations[rootMessageId]).forEach((j) => {
// sort relations by date // sort relations by date
var article = messages[message_relations[message_roots_sorted[k].article.messageId][j].index]; var article = messages[message_relations[rootMessageId][j].index];
var article_date = Date.parse(article.headers.DATE); var article_date = Date.parse(article.headers.DATE);
relations.push({ "article": article, "relation": message_roots_sorted[k].article.messageId || null, "date": article_date }) relations.push({ "article": article, "relation": rootMessageId || null, "date": article_date })
}); });
relations.sort((a, b) => { return (a.date - b.date) }); relations.sort((a, b) => { return (a.date - b.date) });
Object.keys(relations).forEach((j) => { Object.keys(relations).forEach((j) => {