@@ -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