// Change can be a change or an add
if ($type == 'change') {
+ /* If we are a change and don't already have a mod time, stat the
+ * message. This would only happen when exporting a server side
+ * change. We need the mod time to track the version of the message
+ * on the PIM.
+ */
+ if (!isset($change['mod'])) {
+ $change = $this->_backend->statMessage($this->_collection['id'], $change['id']);
+ }
for($i = 0; $i < count($this->_stateCache); $i++) {
if($this->_stateCache[$i]['id'] == $change['id']) {
$this->_stateCache[$i] = $change;
switch($change['type']) {
case 'change':
$truncsize = self::_getTruncSize($this->_truncation);
- // Note: because 'parseMessage' and 'statMessage' are two seperate
- // calls, we have a chance that the message has changed between both
- // calls. This may cause our algorithm to 'double see' changes.
- $stat = $this->_backend->statMessage($this->_folderId, $change['id']);
if (!$message = $this->_backend->getMessage($this->_folderId, $change['id'], $truncsize)) {
return false;
}
// copy the flag to the message
$message->flags = (isset($change['flags'])) ? $change['flags'] : 0;
-
- if ($stat && $message) {
- if ($flags & Horde_ActiveSync::BACKEND_DISCARD_DATA || $this->_exporter->messageChange($change['id'], $message) == true) {
- $this->_stateMachine->updateState('change', $stat);
- }
+ if ($flags & Horde_ActiveSync::BACKEND_DISCARD_DATA || $this->_exporter->messageChange($change['id'], $message) == true) {
+ $this->_stateMachine->updateState('change', $change);
}
break;