summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Machniak <alec@alec.pl>2012-08-29 11:05:02 +0200
committerAleksander Machniak <alec@alec.pl>2012-08-29 11:05:02 +0200
commit10562d8a7760eae6b6cb22aa336605e09c7a8bce (patch)
tree1b892bd2bcf6c2805248e70796b813ac1d12c498
parent764641d4a38e0a9856cced092ac7c294a2956dcf (diff)
Keep current folder context when fetching message parts,
to make sure that proper folder is used in case when current folder has been changed in meantime.
-rw-r--r--program/include/rcube_message.php26
-rw-r--r--program/include/rcube_storage.php2
2 files changed, 20 insertions, 8 deletions
diff --git a/program/include/rcube_message.php b/program/include/rcube_message.php
index f550b574e..6af1d0133 100644
--- a/program/include/rcube_message.php
+++ b/program/include/rcube_message.php
@@ -52,7 +52,8 @@ class rcube_message
private $opt = array();
private $parse_alternative = false;
- public $uid = null;
+ public $uid;
+ public $folder;
public $headers;
public $parts = array();
public $mime_parts = array();
@@ -68,17 +69,22 @@ class rcube_message
*
* Provide a uid, and parse message structure.
*
- * @param string $uid The message UID.
+ * @param string $uid The message UID.
+ * @param string $folder Folder name
*
* @see self::$app, self::$storage, self::$opt, self::$parts
*/
- function __construct($uid)
+ function __construct($uid, $folder = null)
{
$this->uid = $uid;
$this->app = rcube::get_instance();
$this->storage = $this->app->get_storage();
+ $this->folder = strlen($folder) ? $folder : $this->storage->get_folder();
$this->storage->set_options(array('all_headers' => true));
+ // Set current folder
+ $this->storage->set_folder($this->folder);
+
$this->headers = $this->storage->get_message($uid);
if (!$this->headers)
@@ -179,10 +185,12 @@ class rcube_message
}
return $fp ? true : $part->body;
}
+
// get from IMAP
+ $this->storage->set_folder($this->folder);
+
return $this->storage->get_message_part($this->uid, $mime_id, $part, NULL, $fp, $skip_charset_conv);
- } else
- return null;
+ }
}
@@ -637,8 +645,10 @@ class rcube_message
function tnef_decode(&$part)
{
// @TODO: attachment may be huge, hadle it via file
- if (!isset($part->body))
+ if (!isset($part->body)) {
+ $this->storage->set_folder($this->folder);
$part->body = $this->storage->get_message_part($this->uid, $part->mime_id, $part);
+ }
$parts = array();
$tnef = new tnef_decoder;
@@ -673,8 +683,10 @@ class rcube_message
function uu_decode(&$part)
{
// @TODO: messages may be huge, hadle body via file
- if (!isset($part->body))
+ if (!isset($part->body)) {
+ $this->storage->set_folder($this->folder);
$part->body = $this->storage->get_message_part($this->uid, $part->mime_id, $part);
+ }
$parts = array();
// FIXME: line length is max.65?
diff --git a/program/include/rcube_storage.php b/program/include/rcube_storage.php
index 768a26d73..f83e24041 100644
--- a/program/include/rcube_storage.php
+++ b/program/include/rcube_storage.php
@@ -195,7 +195,7 @@ abstract class rcube_storage
*/
public function set_folder($folder)
{
- if ($this->folder == $folder) {
+ if ($this->folder === $folder) {
return;
}