From 2d1d68bc7e1683bca869fcd1eca517ef209097d8 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Thu, 14 Oct 2010 06:37:32 -0400
Subject: [PATCH] - Display IMAP errors for LIST/THREAD/SEARCH commands, fixes #1486905

---
 CHANGELOG                               |    1 +
 program/steps/mail/list.inc             |   15 +++++++++++----
 program/steps/mail/search.inc           |    5 +++++
 program/localization/en_US/messages.inc |    1 +
 program/localization/pl_PL/messages.inc |    1 +
 program/include/rcube_imap_generic.php  |    2 +-
 6 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 0a17e1a..19290c7 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -29,6 +29,7 @@
 - Add SASL proxy authentication for SMTP (#1486693)
 - Improve displaying of UI messages (#1486977)
 - Fix double e-mail filed in identity form (#1487054)
+- Display IMAP errors for LIST/THREAD/SEARCH commands (#1486905)
 
 RELEASE 0.4.2
 -------------
diff --git a/program/include/rcube_imap_generic.php b/program/include/rcube_imap_generic.php
index 0ad582f..ee5638e 100644
--- a/program/include/rcube_imap_generic.php
+++ b/program/include/rcube_imap_generic.php
@@ -278,7 +278,7 @@
             $str = trim($matches[2]);
 
 		    if ($res == 'OK') {
-			    return self::ERROR_OK;
+			    return $this->errornum = self::ERROR_OK;
 		    } else if ($res == 'NO') {
                 $this->errornum = self::ERROR_NO;
 		    } else if ($res == 'BAD') {
diff --git a/program/localization/en_US/messages.inc b/program/localization/en_US/messages.inc
index 26fa36a..6474c9d 100644
--- a/program/localization/en_US/messages.inc
+++ b/program/localization/en_US/messages.inc
@@ -23,6 +23,7 @@
 $messages['sessionerror'] = 'Your session is invalid or expired';
 $messages['imaperror'] = 'Connection to IMAP server failed';
 $messages['servererror'] = 'Server Error!';
+$messages['servererrormsg'] = 'Server Error: $msg';
 $messages['invalidrequest'] = 'Invalid request! No data was saved.';
 $messages['nomessagesfound'] = 'No messages found in this mailbox';
 $messages['loggedout'] = 'You have successfully terminated the session. Good bye!';
diff --git a/program/localization/pl_PL/messages.inc b/program/localization/pl_PL/messages.inc
index 91b3c90..83c5664 100644
--- a/program/localization/pl_PL/messages.inc
+++ b/program/localization/pl_PL/messages.inc
@@ -28,6 +28,7 @@
 $messages['sessionerror'] = 'Błąd sesji bądź sesja wygasła!';
 $messages['imaperror'] = 'Błąd połączenia z serwerem!';
 $messages['servererror'] = 'Błąd serwera!';
+$messages['servererrormsg'] = 'Błąd serwera: $msg';
 $messages['invalidrequest'] = 'Błędne żądanie! Nie zapisano danych.';
 $messages['nomessagesfound'] = 'Brak wiadomości w skrzynce.';
 $messages['loggedout'] = 'Użytkownik wylogował się poprawnie.';
diff --git a/program/steps/mail/list.inc b/program/steps/mail/list.inc
index f5fc44b..6353be7 100644
--- a/program/steps/mail/list.inc
+++ b/program/steps/mail/list.inc
@@ -103,10 +103,17 @@
   if ($search_request)
     $OUTPUT->show_message('searchsuccessful', 'confirmation', array('nr' => $count));
 }
-else if ($search_request)
-  $OUTPUT->show_message('searchnomatch', 'notice');
-else
-  $OUTPUT->show_message('nomessagesfound', 'notice');
+else {
+  // handle IMAP errors (e.g. #1486905)
+  if ($err_code = $IMAP->get_error_code()) {
+    $err_str = $IMAP->get_error_str();
+    $OUTPUT->show_message('servererrormsg', 'error', array('msg' => $err_str));
+  }
+  else if ($search_request)
+    $OUTPUT->show_message('searchnomatch', 'notice');
+  else
+    $OUTPUT->show_message('nomessagesfound', 'notice');
+}
 
 // send response
 $OUTPUT->send();
diff --git a/program/steps/mail/search.inc b/program/steps/mail/search.inc
index db46ce4..90d1c37 100644
--- a/program/steps/mail/search.inc
+++ b/program/steps/mail/search.inc
@@ -122,6 +122,11 @@
   if ($search_str)
     $OUTPUT->show_message('searchsuccessful', 'confirmation', array('nr' => $IMAP->messagecount(NULL, 'ALL')));
 }
+// handle IMAP errors (e.g. #1486905)
+else  if ($err_code = $IMAP->get_error_code()) {
+  $err_str = $IMAP->get_error_str();
+  $OUTPUT->show_message('servererrormsg', 'error', array('msg' => $err_str));
+}
 else {
   $OUTPUT->show_message('searchnomatch', 'notice');
 }

--
Gitblit v1.9.1