From 1ecc7e7d5820857941d3786d805b251c5b986225 Mon Sep 17 00:00:00 2001 From: deuce <> Date: Mon, 30 Sep 2013 23:51:04 +0000 Subject: [PATCH] Speed 'er up. --- exec/load/msgutils.js | 116 ++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 67 deletions(-) diff --git a/exec/load/msgutils.js b/exec/load/msgutils.js index c623c4d939..a4562ba431 100644 --- a/exec/load/msgutils.js +++ b/exec/load/msgutils.js @@ -369,6 +369,10 @@ function getMessageThreads(sub, max) { var tbHeader; var md5subject; var msgBase = new MsgBase(sub); + var header_num={}; + var all_headers=[]; + var m; + msgBase.open(); if(!msgBase.is_open) return false; @@ -376,8 +380,14 @@ function getMessageThreads(sub, max) { max = msgBase.first_msg; else max = msgBase.last_msg - max; - for(var m = max; m <= msgBase.last_msg; m++) { - header = msgBase.get_msg_header(m); + if(js.global.get_all_msg_headers !== undefined) + all_headers=msgBase.get_all_msg_headers(); + else { + for(m=max; m <= msgBase.last_msg; m++) + all_headers.push(msgBase.get_msg_header(m)); + } + for(m in all_headers) { + header = all_headers[m]; if( header === null || @@ -393,81 +403,60 @@ function getMessageThreads(sub, max) { ) ) continue; + header_num[header.number]=header; md5subject = md5_calc(header.subject.toUpperCase().replace(/\s*RE:\s*/g, ''), hex=true); 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 + header.ec_thread = threads.thread[header.thread_back]; 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( - { - number : header.number, - to : header.to, - from : header.from, - subject : header.subject, - thread_id : header.thread_id, - thread_back : header.thread_back, - when_written_time : 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); + tbHeader = header_num[header.thread_back]; + if(tbHeader == null) { + tbHeader = msgBase.get_msg_header(header.thread_back); + if(tbHeader != null) + header_num[tbHeader.number]=tbHeader; + } 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( - { - number : header.number, - to : header.to, - from : header.from, - subject : header.subject, - thread_id : header.thread_id, - thread_back : header.thread_back, - when_written_time : header.when_written_time - } - ); - threadedMessages.push(header.number); - break outer; + if(tbHeader.ec_thread !== undefined) { + tbHeader.ec_thread.newest = header.when_written_time; + threads.dates[tbHeader.ec_thread.dateIndex] = header.when_written_time; + tbHeader.ec_thread.messages.push(header); + threadedMessages.push(header.number); + header.ec_thread=tbHeader.ec_thread; + } + else { + // 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; + header.ec_thread = threads.thread[t]; + 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)) { + header.ec_thread = threads.thread[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( - { - number : header.number, - to : header.to, - from : header.from, - subject : header.subject, - thread_id : header.thread_id, - thread_back : header.thread_back, - when_written_time : header.when_written_time - } - ); + threads.thread[header.thread_id].messages.push(header); threadedMessages.push(header.number); } else if(subjects.hasOwnProperty(md5subject)) { + header.ec_thread = threads.thread[subjects[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( - { - number : header.number, - to : header.to, - from : header.from, - subject : header.subject, - thread_id : header.thread_id, - thread_back : header.thread_back, - when_written_time : header.when_written_time - } - ); + threads.thread[subjects[md5subject]].messages.push(header); threadedMessages.push(header.number); } else { threads.dates.push(header.when_written_time); @@ -475,17 +464,10 @@ function getMessageThreads(sub, max) { newest : header.when_written_time, dateIndex : threads.dates.length - 1, messages : [ - { - number : header.number, - to : header.to, - from : header.from, - subject : header.subject, - thread_id : header.thread_id, - thread_back : header.thread_back, - when_written_time : header.when_written_time - } + header ] } + header.ec_thread = threads.thread[((header.thread_id === 0)?header.number:header.thread_id)]; subjects[md5subject] = ((header.thread_id === 0)?header.number:header.thread_id); threadedMessages.push(header.number); } @@ -503,4 +485,4 @@ function getMessageThreads(sub, max) { } log(LOG_INFO, "Messages threaded in " + (system.timer - stime) + " seconds."); return threads; -} \ No newline at end of file +} -- GitLab