From: Michael J. Rubinsky Date: Wed, 31 Mar 2010 19:43:47 +0000 (-0400) Subject: ...and rename the file appropriately X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=9b62fb9623ff86eb5b9d452bd7320594585f3ef7;p=horde.git ...and rename the file appropriately --- diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/Exporter.php b/framework/ActiveSync/lib/Horde/ActiveSync/Exporter.php deleted file mode 100644 index 8a77e2a28..000000000 --- a/framework/ActiveSync/lib/Horde/ActiveSync/Exporter.php +++ /dev/null @@ -1,268 +0,0 @@ - - * @package Horde_ActiveSync - * - */ -/*********************************************** -* File : diffbackend.php -* Project : Z-Push -* Descr : We do a standard differential -* change detection by sorting both -* lists of items by their unique id, -* and then traversing both arrays -* of items at once. Changes can be -* detected by comparing items at -* the same position in both arrays. -* -* Created : 01.10.2007 -* -* � Zarafa Deutschland GmbH, www.zarafaserver.de -* This file is distributed under GPL v2. -* Consult LICENSE file for details -************************************************/ - -/** - * This class handles preparing the diff data for sending back to the PIM. Takes - * the data from the Importer, syncronizes it and tracks the state. - * - * @author Michael J. Rubinsky - * @package Horde_ActiveSync - */ -class Horde_ActiveSync_Sync -{ - /** - * Local copy of changes to push to PIM - * - * @var array - */ - protected $_changes; - - /** - * Tracks the number of changes that have been sent. - * - * @var int - */ - protected $_step = 0; - - /** - * Server specific folder id - * - * @var string - */ - protected $_folderId; - - /** - * The collection type for this folder - * - * @var string - */ - protected $_collection; - - /** - * The backend driver - * - * @var Horde_ActiveSync_Driver_Base - */ - protected $_backend; - - /** - * Any flags - * ??? - * @var - */ - protected $_flags; - - /** - * The statemachine - * - * @var Horde_ActiveSynce_StateMachine_Base - */ - protected $_state; - - /** - * The current syncKey for this request - * - * @var string - */ - protected $_syncKey; - - /** - * The change streamer - * - * @var Horde_ActiveSync_Streamer - */ - protected $_streamer; - - protected $_logger; - - /** - * Const'r - * - * @param $backend - */ - public function __construct(Horde_ActiveSync_Driver_Base $backend) - { - $this->_backend = $backend; - } - - public function init(Horde_ActiveSync_State_Base &$stateMachine, - $streamer, - $collection = array()) - { - $this->_stateMachine = &$stateMachine; - $this->_streamer = $streamer; - $this->_folderId = !empty($collection['id']) ? $collection['id'] : false; - $this->_changes = $stateMachine->getChanges(); - $this->_syncKey = $collection['synckey']; - $this->_truncation = !empty($collection['truncation']) ? $collection['truncation'] : 0; - } - - public function setLogger($logger) - { - $this->_logger = $logger; - } - - /** - * Sends the next change in the set and updates the stateMachine if - * successful - * - * @return mixed A progress array or false if no more changes - */ - public function syncronize($flags = 0) - { - $progress = array(); - - if ($this->_folderId == false) { - //@TODO: Folder changes not implemented?? - if ($this->_step < count($this->_changes)) { - $change = $this->_changes[$this->_step]; - - switch($change['type']) { - case 'change': - $folder = $this->_backend->getFolder($change['id']); - $stat = $this->_backend->StatFolder($change['id']); - if (!$folder) { - return; - } - - if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->FolderChange($folder)) { - $this->_stateMachine->updateState('change', $stat); - } - break; - case 'delete': - if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->FolderDeletion($change['id'])) { - $this->_stateMachine->updateState('delete', $change); - } - break; - } - - $this->_step++; - - $progress = array(); - $progress['steps'] = count($this->_changes); - $progress['progress'] = $this->_step; - - return $progress; - } else { - return false; - } - } else { - if ($this->_step < count($this->_changes)) { - $change = $this->_changes[$this->_step]; - - 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 & BACKEND_DISCARD_DATA || $this->_streamer->messageChange($change['id'], $message) == true) { - $this->_stateMachine->updateState('change', $stat); - } - } - break; - - case 'delete': - if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->messageDeletion($change['id']) == true) { - $this->_stateMachine->updateState('delete', $change); - } - break; - - case 'flags': - if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->messageReadFlag($change['id'], $change['flags']) == true) { - $this->_stateMachine->updateState('flags', $change); - } - break; - - case 'move': - if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->messageMove($change['id'], $change['parent']) == true) { - $this->_stateMachine->updateState('move', $change); - } - break; - } - - $this->_step++; - - $progress = array(); - $progress['steps'] = count($this->_changes); - $progress['progress'] = $this->_step; - - return $progress; - } else { - return false; - } - } - } - - public function getChangeCount() - { - return $this->_stateMachine->getChangeCount(); - } - - /** - * - * @param $truncation - * @return unknown_type - */ - private static function _getTruncSize($truncation) - { - switch($truncation) { - case SYNC_TRUNCATION_HEADERS: - return 0; - case SYNC_TRUNCATION_512B: - return 512; - case SYNC_TRUNCATION_1K: - return 1024; - case SYNC_TRUNCATION_5K: - return 5 * 1024; - case SYNC_TRUNCATION_SEVEN: - case SYNC_TRUNCATION_ALL: - return 1024 * 1024; // We'll limit to 1MB anyway - default: - return 1024; // Default to 1Kb - } - } - -} diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/Sync.php b/framework/ActiveSync/lib/Horde/ActiveSync/Sync.php new file mode 100644 index 000000000..8a77e2a28 --- /dev/null +++ b/framework/ActiveSync/lib/Horde/ActiveSync/Sync.php @@ -0,0 +1,268 @@ + + * @package Horde_ActiveSync + * + */ +/*********************************************** +* File : diffbackend.php +* Project : Z-Push +* Descr : We do a standard differential +* change detection by sorting both +* lists of items by their unique id, +* and then traversing both arrays +* of items at once. Changes can be +* detected by comparing items at +* the same position in both arrays. +* +* Created : 01.10.2007 +* +* � Zarafa Deutschland GmbH, www.zarafaserver.de +* This file is distributed under GPL v2. +* Consult LICENSE file for details +************************************************/ + +/** + * This class handles preparing the diff data for sending back to the PIM. Takes + * the data from the Importer, syncronizes it and tracks the state. + * + * @author Michael J. Rubinsky + * @package Horde_ActiveSync + */ +class Horde_ActiveSync_Sync +{ + /** + * Local copy of changes to push to PIM + * + * @var array + */ + protected $_changes; + + /** + * Tracks the number of changes that have been sent. + * + * @var int + */ + protected $_step = 0; + + /** + * Server specific folder id + * + * @var string + */ + protected $_folderId; + + /** + * The collection type for this folder + * + * @var string + */ + protected $_collection; + + /** + * The backend driver + * + * @var Horde_ActiveSync_Driver_Base + */ + protected $_backend; + + /** + * Any flags + * ??? + * @var + */ + protected $_flags; + + /** + * The statemachine + * + * @var Horde_ActiveSynce_StateMachine_Base + */ + protected $_state; + + /** + * The current syncKey for this request + * + * @var string + */ + protected $_syncKey; + + /** + * The change streamer + * + * @var Horde_ActiveSync_Streamer + */ + protected $_streamer; + + protected $_logger; + + /** + * Const'r + * + * @param $backend + */ + public function __construct(Horde_ActiveSync_Driver_Base $backend) + { + $this->_backend = $backend; + } + + public function init(Horde_ActiveSync_State_Base &$stateMachine, + $streamer, + $collection = array()) + { + $this->_stateMachine = &$stateMachine; + $this->_streamer = $streamer; + $this->_folderId = !empty($collection['id']) ? $collection['id'] : false; + $this->_changes = $stateMachine->getChanges(); + $this->_syncKey = $collection['synckey']; + $this->_truncation = !empty($collection['truncation']) ? $collection['truncation'] : 0; + } + + public function setLogger($logger) + { + $this->_logger = $logger; + } + + /** + * Sends the next change in the set and updates the stateMachine if + * successful + * + * @return mixed A progress array or false if no more changes + */ + public function syncronize($flags = 0) + { + $progress = array(); + + if ($this->_folderId == false) { + //@TODO: Folder changes not implemented?? + if ($this->_step < count($this->_changes)) { + $change = $this->_changes[$this->_step]; + + switch($change['type']) { + case 'change': + $folder = $this->_backend->getFolder($change['id']); + $stat = $this->_backend->StatFolder($change['id']); + if (!$folder) { + return; + } + + if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->FolderChange($folder)) { + $this->_stateMachine->updateState('change', $stat); + } + break; + case 'delete': + if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->FolderDeletion($change['id'])) { + $this->_stateMachine->updateState('delete', $change); + } + break; + } + + $this->_step++; + + $progress = array(); + $progress['steps'] = count($this->_changes); + $progress['progress'] = $this->_step; + + return $progress; + } else { + return false; + } + } else { + if ($this->_step < count($this->_changes)) { + $change = $this->_changes[$this->_step]; + + 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 & BACKEND_DISCARD_DATA || $this->_streamer->messageChange($change['id'], $message) == true) { + $this->_stateMachine->updateState('change', $stat); + } + } + break; + + case 'delete': + if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->messageDeletion($change['id']) == true) { + $this->_stateMachine->updateState('delete', $change); + } + break; + + case 'flags': + if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->messageReadFlag($change['id'], $change['flags']) == true) { + $this->_stateMachine->updateState('flags', $change); + } + break; + + case 'move': + if ($flags & BACKEND_DISCARD_DATA || $this->_streamer->messageMove($change['id'], $change['parent']) == true) { + $this->_stateMachine->updateState('move', $change); + } + break; + } + + $this->_step++; + + $progress = array(); + $progress['steps'] = count($this->_changes); + $progress['progress'] = $this->_step; + + return $progress; + } else { + return false; + } + } + } + + public function getChangeCount() + { + return $this->_stateMachine->getChangeCount(); + } + + /** + * + * @param $truncation + * @return unknown_type + */ + private static function _getTruncSize($truncation) + { + switch($truncation) { + case SYNC_TRUNCATION_HEADERS: + return 0; + case SYNC_TRUNCATION_512B: + return 512; + case SYNC_TRUNCATION_1K: + return 1024; + case SYNC_TRUNCATION_5K: + return 5 * 1024; + case SYNC_TRUNCATION_SEVEN: + case SYNC_TRUNCATION_ALL: + return 1024 * 1024; // We'll limit to 1MB anyway + default: + return 1024; // Default to 1Kb + } + } + +}