From bbce9f5a2e000b445a4b6bd72dd40dec5f9ddeb8 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 3 Jun 2014 12:17:39 +0200 Subject: Fix so message list and counters are updated when a message is opened in new window (#1489919) --- CHANGELOG | 1 + program/js/app.js | 34 ++++++++++++++++++++++++++-------- program/steps/mail/show.inc | 7 ++++--- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index b24fd48c7..297972ec5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -11,6 +11,7 @@ CHANGELOG Roundcube Webmail - Fix unintentional line-height style modification in HTML messages (#1489917) - Fix broken normalize_string(), add support for ISO-8859-2 (#1489918) - Support csv contacts import in German localization (#1489920) +- Fix so message list and counters are updated when a message is opened in new window (#1489919) RELEASE 1.0.1 ------------- 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); -- cgit v1.2.3