From 3536577bcbc908dbfd26d8b74696ce3da30bf48b Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Mon, 13 Jul 2009 07:22:28 -0400
Subject: [PATCH] - improve responsiveness by flushing template output asap, also set the \Seen flag after message page display

---
 program/steps/mail/show.inc |   42 ++++++++++++++++++++++++++----------------
 1 files changed, 26 insertions(+), 16 deletions(-)

diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc
index 2395ac6..a644a94 100644
--- a/program/steps/mail/show.inc
+++ b/program/steps/mail/show.inc
@@ -25,21 +25,21 @@
 if ($_GET['_uid']) {
   $MESSAGE = new rcube_message(get_input_value('_uid', RCUBE_INPUT_GET));
 
-  // set message charset as default
-  if (!empty($MESSAGE->headers->charset))
-    $IMAP->set_charset($MESSAGE->headers->charset);
-
-  // go back to list if message not found (wrong UID)
+  // if message not found (wrong UID)...
   if (empty($MESSAGE->headers)) {
     $OUTPUT->show_message('messageopenerror', 'error');
-    if ($RCMAIL->action=='preview' && $OUTPUT->template_exists('messagepreview'))
-        $OUTPUT->send('messagepreview');
+    // ... display error or preview page
+    if ($RCMAIL->action=='preview' && $OUTPUT->template_exists('messageerror'))
+      $OUTPUT->send('messageerror');
+    else if ($RCMAIL->action=='preview' && $OUTPUT->template_exists('messagepreview'))
+      $OUTPUT->send('messagepreview');
+    // ... go back to the list
     else {
       rcmail_overwrite_action('');
       return;
     }
   }
-    
+
   $mbox_name = $IMAP->get_mailbox_name();
   
   // show images?
@@ -60,6 +60,10 @@
     send_nocacheing_headers();
   else if (empty($CONFIG['devel_mode']))
     send_modified_header($_SESSION['login_time'], $etag, !$MESSAGE->headers->seen);
+
+  // set message charset as default
+  if (!empty($MESSAGE->headers->charset))
+    $IMAP->set_charset($MESSAGE->headers->charset);
 
   $OUTPUT->set_pagetitle($MESSAGE->subject);
   
@@ -139,11 +143,9 @@
       $OUTPUT->set_env('last_uid', $last);
     }
 
-  // mark message as read
-  if (!$MESSAGE->headers->seen) {
-    $IMAP->set_flag($MESSAGE->uid, 'SEEN');
-    $RCMAIL->plugins->exec_hook('message_read', array('uid' => $MESSAGE->uid, 'mailbox' => $IMAP->mailbox, 'message' => $MESSAGE));
-  }
+  if (!$MESSAGE->headers->seen)
+    $RCMAIL->plugins->exec_hook('message_read', array('uid' => $MESSAGE->uid,
+	'mailbox' => $IMAP->mailbox, 'message' => $MESSAGE));
 }
 
 
@@ -219,9 +221,17 @@
 
 
 if ($RCMAIL->action=='print' && $OUTPUT->template_exists('printmessage'))
-  $OUTPUT->send('printmessage');
+  $OUTPUT->send('printmessage', false);
 else if ($RCMAIL->action=='preview' && $OUTPUT->template_exists('messagepreview'))
-  $OUTPUT->send('messagepreview');
+  $OUTPUT->send('messagepreview', false);
 else
-  $OUTPUT->send('message');
+  $OUTPUT->send('message', false);
+
+
+// mark message as read
+if ($MESSAGE && $MESSAGE->headers && !$MESSAGE->headers->seen)
+  $IMAP->set_flag($MESSAGE->uid, 'SEEN');
+
+exit;
+
 ?>

--
Gitblit v1.9.1