diff options
author | Aleksander Machniak <alec@alec.pl> | 2014-06-03 12:17:39 +0200 |
---|---|---|
committer | Aleksander Machniak <alec@alec.pl> | 2014-06-03 12:30:43 +0200 |
commit | bbce9f5a2e000b445a4b6bd72dd40dec5f9ddeb8 (patch) | |
tree | 1de61ab2f0911a34972bbe801bb0331fdfa4c568 /program | |
parent | 04089eed1cffb4fb9fe9455a8c56ed6fa2155395 (diff) |
Fix so message list and counters are updated when a message is opened in new window (#1489919)
Diffstat (limited to 'program')
-rw-r--r-- | program/js/app.js | 34 | ||||
-rw-r--r-- | program/steps/mail/show.inc | 7 |
2 files changed, 30 insertions, 11 deletions
diff --git a/program/js/app.js b/program/js/app.js index d56088d41..68faab1a9 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -2064,20 +2064,38 @@ function rcube_webmail() this.location_href(this.env.comm_path+url, target, true); // mark as read and change mbox unread counter - if (preview && this.message_list && this.message_list.rows[id] && this.message_list.rows[id].unread && this.env.preview_pane_mark_read >= 0) { + if (preview && this.message_list && this.message_list.rows[id] && this.message_list.rows[id].unread && this.env.preview_pane_mark_read > 0) { this.preview_read_timer = setTimeout(function() { - ref.set_message(id, 'unread', false); - if (ref.env.unread_counts[ref.env.mailbox]) { - ref.env.unread_counts[ref.env.mailbox] -= 1; - ref.set_unread_count(ref.env.mailbox, ref.env.unread_counts[ref.env.mailbox], ref.env.mailbox == 'INBOX'); - } - if (ref.env.preview_pane_mark_read > 0) - ref.http_post('mark', {_uid: id, _flag: 'read', _quiet: 1}); + ref.set_unread_message(id, ref.env.mailbox); + ref.http_post('mark', {_uid: id, _flag: 'read', _quiet: 1}); }, this.env.preview_pane_mark_read * 1000); } } }; + // update message status and unread counter after marking a message as read + this.set_unread_message = function(id, folder) + { + var self = this; + + // find window with messages list + if (!self.message_list) + self = self.opener(); + + if (!self && window.parent) + self = parent.rcmail; + + if (!self || !self.message_list) + return; + + self.set_message(id, 'unread', false); + + if (self.env.unread_counts[folder] > 0) { + self.env.unread_counts[folder] -= 1; + self.set_unread_count(folder, self.env.unread_counts[folder], folder == 'INBOX'); + } + }; + this.show_contentframe = function(show) { var frame, win, name = this.env.contentframe; diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc index 9498d1dc5..1616eb62c 100644 --- a/program/steps/mail/show.inc +++ b/program/steps/mail/show.inc @@ -148,11 +148,14 @@ if ($uid) { if (empty($MESSAGE->headers->flags['SEEN']) && ($RCMAIL->action == 'show' || ($RCMAIL->action == 'preview' && intval($RCMAIL->config->get('preview_pane_mark_read')) == 0)) ) { + $RCMAIL->output->command('set_unread_message', $MESSAGE->uid, $mbox_name); $RCMAIL->plugins->exec_hook('message_read', array( 'uid' => $MESSAGE->uid, 'mailbox' => $mbox_name, 'message' => $MESSAGE, )); + + $set_seen_flag = true; } } @@ -174,9 +177,7 @@ else // mark message as read -if ($MESSAGE && $MESSAGE->headers && empty($MESSAGE->headers->flags['SEEN']) && - ($RCMAIL->action == 'show' || ($RCMAIL->action == 'preview' && intval($RCMAIL->config->get('preview_pane_mark_read')) == 0)) -) { +if (!empty($set_seen_flag)) { if ($RCMAIL->storage->set_flag($MESSAGE->uid, 'SEEN')) { if ($count = rcmail_get_unseen_count($mbox_name)) { rcmail_set_unseen_count($mbox_name, $count - 1); |