From b20bca7df2eba09a79a1050d2ff36ef799332a08 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Tue, 28 Apr 2009 15:30:03 -0400
Subject: [PATCH] - Fix fatal error after last commit in rcube_imap (#1485825)

---
 program/include/rcube_imap.php |   30 ++++++++++++++++++++----------
 1 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 6226c28..323979b 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -1124,15 +1124,8 @@
       // set message charset from message headers
       if ($headers->charset)
         $this->struct_charset = $headers->charset;
-      // ... or from first part headers
-      else if (is_array($structure[2]) && $structure[2][0] == 'charset')
-        $this->struct_charset = $structure[2][1];
-      else if (is_array($structure[0][2]) && $structure[0][2][0] == 'charset')
-        $this->struct_charset = $structure[0][2][1];
-      else if (is_array($structure[0][0][2]) && $structure[0][0][2][0] == 'charset')
-        $this->struct_charset = $structure[0][0][2][1];
       else
-        $this->struct_charset = null;
+        $this->struct_charset = $this->_structure_charset($structure);
 
       $struct = &$this->_structure_part($structure);
       $struct->headers = get_object_vars($headers);
@@ -1390,8 +1383,25 @@
       $part->filename = rcube_charset_convert(urldecode($filename_encoded), $filename_charset);
       }
     }
-     
-  
+
+
+  /**
+   * Get charset name from message structure (first part)
+   *
+   * @access private
+   * @param  array  Message structure
+   * @return string Charset name
+   */
+  function _structure_charset($structure)
+    {
+      while (is_array($structure)) {
+	if (is_array($structure[2]) && $structure[2][0] == 'charset')
+	  return $structure[2][1];
+	$structure = $structure[0];
+	}
+    } 
+
+
   /**
    * Fetch message body of a specific message from the server
    *

--
Gitblit v1.9.1