Skip to content

Commit d8c3b6e

Browse files
committed
Greatly increased IDLE performance
1 parent 37ce711 commit d8c3b6e

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) princip
66

77
## [UNRELEASED]
88
### Fixed
9-
- NaN
9+
- Greatly increased IDLE performance
1010

1111
### Added
1212
- Read an overview of the information in the headers of a given message or sequence
@@ -16,6 +16,7 @@ Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) princip
1616

1717
### Affected Classes
1818
- [Client::class](src/Client.php)
19+
- [Query::class](src/Query/Query.php)
1920

2021
## [1.6.0] - 2020-09-04
2122
### Fixed

src/IMAP/Query/Query.php

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -260,29 +260,35 @@ public function paginate($per_page = 5, $page = null, $page_name = 'imap_page'){
260260
* Create an idle like instance to catch incoming messages
261261
* @param callable|null $callback
262262
* @param int $timeout
263-
* @throws GetMessagesFailedException
263+
*
264264
* @throws \Webklex\IMAP\Exceptions\ConnectionFailedException
265+
* @throws \Webklex\IMAP\Exceptions\InvalidMessageDateException
265266
*/
266267
public function idle(callable $callback = null, $timeout = 10){
267268
$known_messages = [];
268-
$this->get()->each(function($message) use(&$known_messages){
269-
/** @var Message $message */
270-
$known_messages[] = $message->getToken();
269+
$this->getClient()->overview()->each(function($message) use(&$known_messages){
270+
/** @var object $message */
271+
$known_messages[] = $message->uid;
271272
});
272273
while ($this->getClient()->isConnected()){
273274
$this->getClient()->expunge();
274-
$this->get()->each(function($message) use(&$known_messages, $callback){
275-
/** @var \Webklex\IMAP\Message $message */
276-
$token = $message->getToken();
277-
if(in_array($token, $known_messages)){
278-
return;
275+
$new_messages = [];
276+
$this->getClient()->overview()->each(function($message) use(&$new_messages, &$known_messages){
277+
/** @var object $message */
278+
if (in_array($message->uid, $known_messages) == false) {
279+
$new_messages[] = $message;
280+
$known_messages[] = $message->uid;
279281
}
280-
$known_messages[] = $token;
282+
});
283+
284+
foreach($new_messages as $msg) {
285+
$message = new Message($msg->uid, $msg->msgno, $this->getClient());
281286
MessageNewEvent::dispatch($message);
282287
if ($callback){
283288
$callback($message);
284289
}
285-
});
290+
}
291+
286292
sleep($timeout);
287293
}
288294
}

0 commit comments

Comments
 (0)