From d311d809d650e4cab6a5bf0aeb92b97631672c64 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 28 May 2010 05:38:41 -0400
Subject: [PATCH] - Fix forwarding of messages with winmail attachments - Remove some redundant code for winmail handling in get.inc, move tnef_decode() to rcube_message - Fix handling of uuencoded attachments in message body (#1485839) - Extend rc_mime_content_type() to work with string buffer

---
 program/include/rcube_imap.php |   71 ++++++++++-------------------------
 1 files changed, 21 insertions(+), 50 deletions(-)

diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 768e833..97662e4 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -472,7 +472,6 @@
             // get message count and store in cache
             if ($mode == 'UNSEEN')
                 $search_str .= " UNSEEN";
-
             // get message count using SEARCH
             // not very performant but more precise (using UNDELETED)
             // disable THREADS for this request
@@ -2034,7 +2033,7 @@
             return true;
 
         // convert charset (if text or message part)
-        if ($o_part->ctype_primary=='text' || $o_part->ctype_primary=='message') {
+        if ($o_part->ctype_primary == 'text' || $o_part->ctype_primary == 'message') {
             // assume default if no charset specified
             if (empty($o_part->charset) || strtolower($o_part->charset) == 'us-ascii')
                 $o_part->charset = $this->default_charset;
@@ -2512,7 +2511,7 @@
      * --------------------------------*/
 
     /**
-     * Public method for mailbox listing.
+     * Public method for listing subscribed folders
      *
      * Converts mailbox name with root dir first
      *
@@ -2552,16 +2551,16 @@
      */
     private function _list_mailboxes($root='', $filter='*')
     {
-        $a_defaults = $a_out = array();
-
         // get cached folder list
         $a_mboxes = $this->get_cache('mailboxes');
         if (is_array($a_mboxes))
             return $a_mboxes;
 
+        $a_defaults = $a_out = array();
+
         // Give plugins a chance to provide a list of mailboxes
         $data = rcmail::get_instance()->plugins->exec_hook('list_mailboxes',
-            array('root'=>$root,'filter'=>$filter));
+            array('root' => $root, 'filter' => $filter, 'mode' => 'LSUB'));
 
         if (isset($data['folders'])) {
             $a_folders = $data['folders'];
@@ -2585,17 +2584,26 @@
      * Get a list of all folders available on the IMAP server
      *
      * @param string IMAP root dir
+     * @param string Optional filter for mailbox listing
      * @return array Indexed array with folder names
      */
-    function list_unsubscribed($root='')
+    function list_unsubscribed($root='', $filter='*')
     {
-        static $a_folders;
+        // Give plugins a chance to provide a list of mailboxes
+        $data = rcmail::get_instance()->plugins->exec_hook('list_mailboxes',
+            array('root' => $root, 'filter' => $filter, 'mode' => 'LIST'));
 
-        if (is_array($a_folders))
-            return $a_folders;
-
-        // retrieve list of folders from IMAP server
-        $a_mboxes = $this->conn->listMailboxes($this->mod_mailbox($root), '*');
+        if (isset($data['folders'])) {
+            $a_mboxes = $data['folders'];
+        }
+        else {
+            // retrieve list of folders from IMAP server
+            $a_mboxes = $this->conn->listMailboxes($this->mod_mailbox($root), $filter);
+        }
+        
+        $a_folders = array();
+        if (!is_array($a_mboxes))
+            $a_mboxes = array();
 
         // modify names with root dir
         foreach ($a_mboxes as $idx => $mbox_name) {
@@ -3370,43 +3378,6 @@
         }
 
         return $out;
-    }
-
-
-    /**
-     * Decode a Microsoft Outlook TNEF part (winmail.dat)
-     *
-     * @param object rcube_message_part Message part to decode
-     * @param string UID of the message
-     * @return array List of rcube_message_parts extracted from windmail.dat
-     */
-    function tnef_decode(&$part, $uid)
-    {
-        if (!isset($part->body))
-            $part->body = $this->get_message_part($uid, $part->mime_id, $part);
-
-        require_once('lib/tnef_decoder.inc');
-
-        $pid = 0;
-        $tnef_parts = array();
-        $tnef_arr = tnef_decode($part->body);
-
-        foreach ($tnef_arr as $winatt) {
-            $tpart = new rcube_message_part;
-            $tpart->filename = $winatt["name"];
-            $tpart->encoding = 'stream';
-            $tpart->ctype_primary = $winatt["type0"];
-            $tpart->ctype_secondary = $winatt["type1"];
-            $tpart->mimetype = strtolower($winatt["type0"] . "/" . $winatt["type1"]);
-            $tpart->mime_id = "winmail." . $part->mime_id . ".$pid";
-            $tpart->size = $winatt["size"];
-            $tpart->body = $winatt['stream'];
-
-            $tnef_parts[] = $tpart;
-            $pid++;
-        }
-
-        return $tnef_parts;
     }
 
 

--
Gitblit v1.9.1