/** * @param Folder $folders * @param DbStorage $dbStorage * @return bool */ function _synchronizeFolderWithOpenDbConnection(&$folder, &$dbStorage) { $result = true; if ($folder->SyncType == FOLDERSYNC_DontSync || $folder->SyncType == FOLDERSYNC_DirectMode) { return true; } //get uids from pop3 server $pop3Uids =& $this->_getPop3Uids(true); //get uids from DB $dbUids =& $dbStorage->SelectReadsRecords(); $dbUids = array_keys($dbUids); //get only new messages from pop3 server $newUids = array_diff($pop3Uids, $dbUids); //get deletd uids from pop3 server $uidsToDelete = array_diff($dbUids, $pop3Uids); //get Array sizes all messages on pop3 server $pop3Sizes =& $this->_getPop3Sizes(true); //get size all messages in DB $mailBoxesSize = $dbStorage->SelectMailboxesSize(); if ($this->DownloadedMessagesHandler != null) { ShowDownloadedMessageNumber($folder->Name, count($newUids)); call_user_func($this->DownloadedMessagesHandler); } foreach ($newUids as $newUid) { //get id message from uid pop3 server $index = $this->_getMessageIndexFromUid($pop3Uids, $newUid); $indexArray = array($index); $mailBoxesSize += $pop3Sizes[$index]; if (!$this->_settings->EnableMailboxSizeLimit || $this->Account->MailboxLimit > $mailBoxesSize) { //Check sync mode if ($folder->SyncType == FOLDERSYNC_NewEntireMessages || $folder->SyncType == FOLDERSYNC_AllEntireMessages) { //Entire Message $mailMessageCollection =& $this->LoadMessages($indexArray, false, $folder); } elseif ($folder->SyncType == FOLDERSYNC_NewHeadersOnly || $folder->SyncType == FOLDERSYNC_AllHeadersOnly) { //Entire Header $mailMessageCollection =& $this->_loadMessageHeaders($indexArray, false, $folder); } //Apply filters and save message in DB if (!$this->ApplyFilters($mailMessageCollection, $dbStorage, $folder)) { return false; //$result = false; //break; } //Check mailmode to delete from server if ($this->Account->MailMode == MAILMODE_DeleteMessagesFromServer) { //Delete received messages from server $this->_pop3Mail->delete_mail($index); } //Save uid to reads table $dbStorage->InsertReadsRecords(array($newUid)); } else { $result = false; setGlobalError(ErrorGetMailLimit); break; } } //delete from DB if (count($uidsToDelete) > 0) { if ($folder->SyncType == FOLDERSYNC_AllHeadersOnly || $folder->SyncType == FOLDERSYNC_AllEntireMessages) { $result &= $dbStorage->DeleteMessages($uidsToDelete, true, $folder); } } if (($this->Account->MailMode == MAILMODE_KeepMessagesOnServer || $this->Account->MailMode == MAILMODE_KeepMessagesOnServerAndDeleteMessageWhenItsRemovedFromTrash) && $this->Account->MailsOnServerDays > 0) { $expiredUids =& $dbStorage->SelectExpiredMessageUids(); $result &= $this->DeleteMessages($expiredUids, true, $folder); } if (!empty($uidsToDelete)) { $result &= $dbStorage->DeleteReadsRecordsByUids($uidsToDelete); } $result &= $dbStorage->UpdateMailboxSize(); return $result; }