From 464a0fba9d8376962fa216b4fd9e023a3182f7fa Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Tue, 16 Oct 2012 11:57:05 -0400
Subject: [PATCH] Display connection errors in UI. Stack error messages in popup (Larry skin)

---
 program/steps/mail/func.inc |    3 +++
 skins/larry/ui.js           |   17 ++++++++++++-----
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index e3866aa..c212025 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -68,6 +68,9 @@
 
 // set main env variables, labels and page title
 if (empty($RCMAIL->action) || $RCMAIL->action == 'list') {
+  // connect to storage server and trigger error on failure
+  $RCMAIL->storage_connect();
+
   $mbox_name = $RCMAIL->storage->get_folder();
 
   if (empty($RCMAIL->action)) {
diff --git a/skins/larry/ui.js b/skins/larry/ui.js
index 9b5d830..42d5237 100644
--- a/skins/larry/ui.js
+++ b/skins/larry/ui.js
@@ -288,14 +288,21 @@
   {
     // show a popup dialog on errors
     if (p.type == 'error' && rcmail.env.task != 'login') {
+      if (me.message_timer) {
+        window.clearTimeout(me.message_timer);
+      }
       if (!me.messagedialog) {
-        me.messagedialog = $('<div>').addClass('popupdialog');
+        me.messagedialog = $('<div>').addClass('popupdialog').hide();
       }
 
-      var pos = $(p.object).offset();
+      var msg = p.message,
+        pos = $(p.object).offset();
       pos.top -= (rcmail.env.task == 'login' ? 20 : 160);
-      me.messagedialog.dialog('close');
-      me.messagedialog.html(p.message)
+
+      if (me.messagedialog.is(':visible'))
+        msg = me.messagedialog.html() + '<p>' + p.message + '</p>';
+
+      me.messagedialog.html(msg)
         .dialog({
           resizable: false,
           closeOnEscape: true,
@@ -310,7 +317,7 @@
           minHeight: 90
         }).show();
 
-      window.setTimeout(function(){ me.messagedialog.dialog('close'); }, Math.max(2000, p.timeout / 2));
+      me.message_timer = window.setTimeout(function(){ me.messagedialog.dialog('close'); }, Math.max(2000, p.timeout / 2));
     }
   }
 

--
Gitblit v1.9.1