From bba25299f8d1569f560fc66f82837c95145ee121 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Thu, 22 Sep 2011 03:49:33 -0400
Subject: [PATCH] - Fix bug where after delete message rows can be added to the list of another folder (#1487752)

---
 program/js/app.js |   64 ++++++++++++++++++++++---------
 1 files changed, 45 insertions(+), 19 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index 52b3f60..a9fbe98 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -1641,6 +1641,10 @@
     if (!this.gui_objects.messagelist || !this.message_list)
       return false;
 
+    // Prevent from adding messages from different folder (#1487752)
+    if (flags.mbox != this.env.mailbox && !flags.skip_mbox_check)
+      return false;
+
     if (!this.env.messages[uid])
       this.env.messages[uid] = {};
 
@@ -2091,8 +2095,12 @@
   };
 
   // Initializes threads indicators/expanders after list update
-  this.init_threads = function(roots)
+  this.init_threads = function(roots, mbox)
   {
+    // #1487752
+    if (mbox && mbox != this.env.mailbox)
+      return false;
+
     for (var n=0, len=roots.length; n<len; n++)
       this.add_tree_icons(roots[n]);
     this.expand_threads();
@@ -3619,6 +3627,8 @@
     if (q == this.ksearch_value)
       return;
 
+    this.ksearch_destroy();
+
     if (q.length && q.length < min) {
       if (!this.ksearch_info) {
         this.ksearch_info = this.display_message(
@@ -3629,7 +3639,6 @@
 
     var old_value = this.ksearch_value;
     this.ksearch_value = q;
-    this.ksearch_destroy();
 
     // ...string is empty
     if (!q.length)
@@ -3671,7 +3680,9 @@
       return;
 
     // display search results
-    var p, ul, li, text, init, s_val = this.ksearch_value,
+    var ul, li, text, init,
+      value = this.ksearch_value,
+      data = this.ksearch_data,
       maxlen = this.env.autocomplete_max ? this.env.autocomplete_max : 15;
 
     // create results pane if not present
@@ -3704,7 +3715,7 @@
       for (i=0; i < results.length && maxlen > 0; i++) {
         text = typeof results[i] === 'object' ? results[i].name : results[i];
         li = document.createElement('LI');
-        li.innerHTML = text.replace(new RegExp('('+RegExp.escape(s_val)+')', 'ig'), '##$1%%').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/##([^%]+)%%/g, '<b>$1</b>');
+        li.innerHTML = text.replace(new RegExp('('+RegExp.escape(value)+')', 'ig'), '##$1%%').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/##([^%]+)%%/g, '<b>$1</b>');
         li.onmouseover = function(){ ref.ksearch_select(this); };
         li.onmouseup = function(){ ref.ksearch_click(this) };
         li._rcm_id = this.env.contacts.length + i;
@@ -3726,20 +3737,24 @@
       this.env.contacts = this.env.contacts.concat(results);
 
     // run next parallel search
-    if (this.ksearch_data.id == reqid) {
-      if (maxlen > 0 && this.ksearch_data.sources.length) {
-        var lock, xhr, props = this.ksearch_data, source = props.sources.shift();
+    if (data.id == reqid) {
+      if (maxlen > 0 && data.sources.length) {
+        var lock, xhr, source = data.sources.shift();
         if (source) {
           lock = this.display_message(this.get_label('searching'), 'loading');
-          xhr = this.http_post(props.action, '_search='+urlencode(s_val)+'&_id='+reqid
+          xhr = this.http_post(data.action, '_search='+urlencode(value)+'&_id='+reqid
             +'&_source='+urlencode(source), lock);
 
           this.ksearch_data.locks.push(lock);
           this.ksearch_data.requests.push(xhr);
         }
       }
-      else if (!maxlen && !this.ksearch_msg)
-        this.ksearch_msg = this.display_message(this.get_label('autocompletemore'));
+      else if (!maxlen) {
+        if (!this.ksearch_msg)
+          this.ksearch_msg = this.display_message(this.get_label('autocompletemore'));
+        // abort pending searches
+        this.ksearch_abort();
+      }
     }
   };
 
@@ -3772,16 +3787,10 @@
     this.ksearch_destroy();
   };
 
-  // Aborts pending autocomplete requests
+  // Clears autocomplete data/requests
   this.ksearch_destroy = function()
   {
-    var i, len, ac = this.ksearch_data;
-
-    if (!ac)
-      return;
-
-    for (i=0, len=ac.locks.length; i<len; i++)
-      this.abort_request({request: ac.requests[i], lock: ac.locks[i]});
+    this.ksearch_abort();
 
     if (this.ksearch_info)
       this.hide_message(this.ksearch_info);
@@ -3793,6 +3802,19 @@
     this.ksearch_info = null;
     this.ksearch_msg = null;
   }
+
+  // Aborts pending autocomplete requests
+  this.ksearch_abort = function()
+  {
+    var i, len, ac = this.ksearch_data;
+
+    if (!ac)
+      return;
+
+    for (i=0, len=ac.locks.length; i<len; i++)
+      this.abort_request({request: ac.requests[i], lock: ac.locks[i]});
+  };
+
 
   /*********************************************************/
   /*********         address book methods          *********/
@@ -5449,8 +5471,12 @@
   };
 
   // replace content of row count display
-  this.set_rowcount = function(text)
+  this.set_rowcount = function(text, mbox)
   {
+    // #1487752
+    if (mbox && mbox != this.env.mailbox)
+      return false;
+
     $(this.gui_objects.countdisplay).html(text);
 
     // update page navigation buttons

--
Gitblit v1.9.1