diff options
author | Aleksander Machniak <alec@alec.pl> | 2012-12-11 14:43:15 +0100 |
---|---|---|
committer | Aleksander Machniak <alec@alec.pl> | 2012-12-11 14:43:15 +0100 |
commit | 463ce6848da1d699031ea0cbd892e00a62fac979 (patch) | |
tree | 757bb6de043400017b947939f7012bc0759692fd /program | |
parent | 25bf00ecbc2cab20ce66845513980b83b03f7c49 (diff) |
Fix bug where all messages in a folder were copied on copy action,
if search was active and user choose select-all feature. Code improvements.
Diffstat (limited to 'program')
-rw-r--r-- | program/js/app.js | 110 |
1 files changed, 55 insertions, 55 deletions
diff --git a/program/js/app.js b/program/js/app.js index 4db7fa0c8..f599f7a64 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -2553,27 +2553,18 @@ function rcube_webmail() if (mbox && typeof mbox === 'object') mbox = mbox.id; - // exit if current or no mailbox specified or if selection is empty - if (!mbox || mbox == this.env.mailbox || (!this.env.uid && (!this.message_list || !this.message_list.get_selection().length))) + // exit if current or no mailbox specified + if (!mbox || mbox == this.env.mailbox) return; - var a_uids = [], n, selection, - lock = this.display_message(this.get_label('copyingmessage'), 'loading'), - post_data = {_mbox: this.env.mailbox, _target_mbox: mbox, _from: (this.env.action ? this.env.action : '')}; + var post_data = this.selection_post_data({_target_mbox: mbox}); - if (this.env.uid) - a_uids[0] = this.env.uid; - else { - selection = this.message_list.get_selection(); - for (n in selection) { - a_uids.push(selection[n]); - } - } - - post_data._uid = this.uids_to_list(a_uids); + // exit if selection is empty + if (!post_data._uid) + return; // send request to server - this.http_post('copy', post_data, lock); + this.http_post('copy', post_data, this.display_message(this.get_label('copyingmessage'), 'loading')); }; // move selected messages to the specified mailbox @@ -2582,12 +2573,15 @@ function rcube_webmail() if (mbox && typeof mbox === 'object') mbox = mbox.id; - // exit if current or no mailbox specified or if selection is empty - if (!mbox || mbox == this.env.mailbox || (!this.env.uid && (!this.message_list || !this.message_list.get_selection().length))) + // exit if current or no mailbox specified + if (!mbox || mbox == this.env.mailbox) return; - var lock = false, - add_post = {_target_mbox: mbox, _from: (this.env.action ? this.env.action : '')}; + var lock = false, post_data = this.selection_post_data({_target_mbox: mbox}); + + // exit if selection is empty + if (!post_data._uid) + return; // show wait message if (this.env.action == 'show') @@ -2598,7 +2592,7 @@ function rcube_webmail() // Hide message command buttons until a message is selected this.enable_command(this.env.message_commands, false); - this._with_selected_messages('moveto', lock, add_post); + this._with_selected_messages('moveto', post_data, lock); }; // delete selected messages from the current mailbox @@ -2606,7 +2600,7 @@ function rcube_webmail() { var uid, i, len, trash = this.env.trash_mailbox, list = this.message_list, - selection = list ? $.merge([], list.get_selection()) : []; + selection = list.get_selection(); // exit if no mailbox specified or if selection is empty if (!this.env.uid && !selection.length) @@ -2625,7 +2619,6 @@ function rcube_webmail() return false; } // if there isn't a defined trash mailbox or we are in it - // @TODO: we should check if defined trash mailbox exists else if (!trash || this.env.mailbox == trash) this.permanently_remove_messages(); // we're in Junk folder and delete_junk is enabled @@ -2648,32 +2641,29 @@ function rcube_webmail() // delete the selected messages permanently this.permanently_remove_messages = function() { - // exit if no mailbox specified or if selection is empty - if (!this.env.uid && (!this.message_list || !this.message_list.get_selection().length)) + var post_data = this.selection_post_data(); + + // exit if selection is empty + if (!post_data._uid) return; this.show_contentframe(false); - this._with_selected_messages('delete', false, {_from: this.env.action ? this.env.action : ''}); + this._with_selected_messages('delete', post_data); }; // Send a specifc moveto/delete request with UIDs of all selected messages // @private - this._with_selected_messages = function(action, lock, post_data) + this._with_selected_messages = function(action, post_data, lock) { - var a_uids = [], count = 0, msg, lock; + var count = 0, msg; - if (typeof(post_data) != 'object') - post_data = {}; - - if (this.env.uid) - a_uids[0] = this.env.uid; - else { + // update the list (remove rows, clear selection) + if (this.message_list) { var n, id, root, roots = [], selection = this.message_list.get_selection(); for (n=0, len=selection.length; n<len; n++) { id = selection[n]; - a_uids.push(id); if (this.env.threading) { count += this.update_thread(id); @@ -2693,10 +2683,6 @@ function rcube_webmail() } } - // also send search request to get the right messages - if (this.env.search_request) - post_data._search = this.env.search_request; - if (this.env.display_next && this.env.next_uid) post_data._next_uid = this.env.next_uid; @@ -2706,9 +2692,6 @@ function rcube_webmail() else if (count > 0) this.delete_excessive_thread_rows(); - post_data._uid = this.uids_to_list(a_uids); - post_data._mbox = this.env.mailbox; - if (!lock) { msg = action == 'moveto' ? 'movingmessage' : 'deletingmessage'; lock = this.display_message(this.get_label(msg), 'loading'); @@ -2718,22 +2701,39 @@ function rcube_webmail() this.http_post(action, post_data, lock); }; + // build post data for message delete/move/copy requests + this.selection_post_data = function(data) + { + var a_uids = this.env.uid ? this.env.uid : this.message_list.get_selection(); + + if (typeof(data) != 'object') + data = {}; + + data._uid = this.uids_to_list(a_uids); + data._mbox = this.env.mailbox; + + if (this.env.action) + data._from = this.env.action; + + // also send search request to get the right messages + if (this.env.search_request) + data._search = this.env.search_request; + + return data; + }; + // set a specific flag to one or more messages this.mark_message = function(flag, uid) { - var a_uids = [], r_uids = [], len, n, id, selection, + var a_uids = [], r_uids = [], len, n, id, list = this.message_list; if (uid) a_uids[0] = uid; else if (this.env.uid) a_uids[0] = this.env.uid; - else if (list) { - selection = list.get_selection(); - for (n=0, len=selection.length; n<len; n++) { - a_uids.push(selection[n]); - } - } + else if (list) + a_uids = list.get_selection(); if (!list) r_uids = a_uids; @@ -2741,12 +2741,12 @@ function rcube_webmail() list.focus(); for (n=0, len=a_uids.length; n<len; n++) { id = a_uids[n]; - if ((flag=='read' && list.rows[id].unread) - || (flag=='unread' && !list.rows[id].unread) - || (flag=='delete' && !list.rows[id].deleted) - || (flag=='undelete' && list.rows[id].deleted) - || (flag=='flagged' && !list.rows[id].flagged) - || (flag=='unflagged' && list.rows[id].flagged)) + if ((flag == 'read' && list.rows[id].unread) + || (flag == 'unread' && !list.rows[id].unread) + || (flag == 'delete' && !list.rows[id].deleted) + || (flag == 'undelete' && list.rows[id].deleted) + || (flag == 'flagged' && !list.rows[id].flagged) + || (flag == 'unflagged' && list.rows[id].flagged)) { r_uids.push(id); } |