diff --git a/exec/load/msgutils.js b/exec/load/msgutils.js index 6d12b5f4aca16c64fbb5fb7d871d33dc2d4f570f..6dc1de5ce98ceda373f151d707269a45864defe2 100644 --- a/exec/load/msgutils.js +++ b/exec/load/msgutils.js @@ -363,7 +363,9 @@ function expand_body(body, sys_misc, mode) function getMessageThreads(sub, max) { var threads = { thread : {}, dates : [], order : [] }; var subjects = {}; + var threadedMessages = []; var header; + var tbHeader; var md5subject; var msgBase = new MsgBase(sub); msgBase.open(); @@ -391,22 +393,50 @@ function getMessageThreads(sub, max) { ) continue; md5subject = md5_calc(header.subject.toUpperCase().replace(/\s*RE:\s*/g, ''), hex=true); - if(header.thread_id !== header.number && threads.thread.hasOwnProperty(header.thread_id)) { + if(header.thread_id === 0 && threadedMessages.indexOf(header.thread_back) >= 0) { + if(threads.thread.hasOwnProperty(header.thread_back)) { + // This is a reply to the first message in a thread + threads.thread[header.thread_back].newest = header.when_written_time; + threads.dates[threads.thread[header.thread_back].dateIndex] = header.when_written_time; + threads.thread[header.thread_back].messages.push(header); + threadedMessages.push(header.number); + } else { + tbHeader = msgBase.get_msg_header(header.thread_back); + if(tbHeader !== null) { + // Heh - yeah, this part still sucks + outer: + for(var t in threads.thread) { + for(var mm in threads.thread[t].messages) { + if(threads.thread[t].messages[mm].number != tbHeader.number) + continue; + threads.thread[t].newest = header.when_written_time; + threads.dates[threads.thread[t].dateIndex] = header.when_written_time; + threads.thread[t].messages.push(header); + threadedMessages.push(header.number); + break outer; + } + } + } + } + } else if(header.thread_id !== header.number && threads.thread.hasOwnProperty(header.thread_id)) { threads.thread[header.thread_id].newest = header.when_written_time; threads.dates[threads.thread[header.thread_id].dateIndex] = header.when_written_time; threads.thread[header.thread_id].messages.push(header); + threadedMessages.push(header.number); } else if(subjects.hasOwnProperty(md5subject)) { threads.thread[subjects[md5subject]].newest = header.when_written_time; threads.dates[threads.thread[subjects[md5subject]].dateIndex] = header.when_written_time; threads.thread[subjects[md5subject]].messages.push(header); + threadedMessages.push(header.number); } else { threads.dates.push(header.when_written_time); - threads.thread[header.thread_id] = { + threads.thread[((header.thread_id === 0)?header.number:header.thread_id)] = { newest : header.when_written_time, dateIndex : threads.dates.length - 1, messages : [header] } - subjects[md5subject] = header.thread_id; + subjects[md5subject] = ((header.thread_id === 0)?header.number:header.thread_id); + threadedMessages.push(header.number); } } msgBase.close();