private static function handleEntity($imageSrcs, $returnAll, $config)
{
$guzzle = new \GuzzleHttp\Client();
$results = [];
$requests = function ($urls) use($guzzle, $config, &$results) {
foreach ($urls as $key => $url) {
$file = tempnam(sys_get_temp_dir(), 'goose');
$results[] = (object) ['url' => $url, 'file' => $file];
(yield $key => function ($options) use($guzzle, $url, $file) {
$options['sink'] = $file;
return $guzzle->sendAsync(new \GuzzleHttp\Psr7\Request('GET', $url), $options);
});
}
};
$pool = new \GuzzleHttp\Pool($guzzle, $requests($imageSrcs), ['concurrency' => 25, 'fulfilled' => function ($response, $index) use(&$results, $returnAll) {
if (!$returnAll && $response->getStatusCode() != 200) {
unset($results[$index]);
}
}, 'rejected' => function ($reason, $index) use(&$results, $returnAll) {
if ($returnAll) {
$results[$index]->file = null;
} else {
unset($results[$index]);
}
}, 'options' => $config->get('browser')]);
$pool->promise()->wait();
if (empty($results)) {
return null;
}
return $results;
}