/** * Loads emails from an email server and save them into the database * * @param EmailFolder $folder * @param SearchQuery $searchQuery */ protected function loadEmails(EmailFolder $folder, SearchQuery $searchQuery) { $this->log->notice(sprintf('Query: "%s".', $searchQuery->convertToSearchString())); $folder->setSynchronizedAt(new \DateTime('now', new \DateTimeZone('UTC'))); $emails = $this->manager->getEmails($searchQuery); $needFolderFlush = true; $count = 0; $batch = array(); foreach ($emails as $email) { $count++; $batch[] = $email; if ($count === self::DB_BATCH_SIZE) { $this->saveEmails($batch, $folder); $needFolderFlush = false; $count = 0; $batch = array(); } } if ($count > 0) { $this->saveEmails($batch, $folder); $needFolderFlush = false; } if ($needFolderFlush) { $this->em->flush(); } }