filter(function ($result) use ($filter) { if (false === $this->validateFilterItems($result, $filter)) { return false; } if (false === $this->validateSize($result, $filter)) { return false; } return true; }); if ($matches->count() > 0) { return Map::from($matches)->usort(fn($a, $b) => $a->seeders <=> $b->seeders)->last(); } return null; } private function validateFilterItems(TorrentioResult $result, UserPreferences $filter): bool { if (array_intersect($filter->language, $result->languages) === []) { return false; } $valid = true; if (null !== $filter->resolution && !in_array($result->resolution, $filter->resolution)) { $valid = false; } if (null !== $filter->codec && in_array($result->codec, $filter->codec)) { $valid = false; } if (null !== $filter->quality && in_array($result->quality, $filter->quality)) { $valid = false; } if (null !== $filter->provider && in_array($result->provider, $filter->provider)) { $valid = false; } return $valid; } private function validateSize(TorrentioResult $result, UserPreferences $filter): bool { $sizeLow = 000; $sizeHigh = 4096; if (str_contains($result->size, 'GB')) { $size = (int) trim(str_replace('GB', '', $result->size)) * 1024; } else { $size = (int) trim(str_replace('MB', '', $result->size)); } if ($size > $sizeLow && $size < $sizeHigh) { return true; } return false; } }