clientService = $clientService; $this->url = $url; } public function getId(): string { return Application::APP_ID; } public function getName(): string { return 'Radio'; } public function getOrder(string $route, array $routeParameters): int { if (strpos($route, 'files' . '.') === 0) { return 25; } elseif (strpos($route, Application::APP_ID . '.') === 0) { return -1; } return 4; } public function search(IUser $user, ISearchQuery $query): SearchResult { $term = $query->getTerm(); $url = "https://de1.api.radio-browser.info/json/stations/byname/" . $term . "?limit=20"; $client = $this->clientService->newClient(); try { $response = $client->get($url); } catch (Exception $e) { $this->logger->error("Could not search for radio stations: " . $e->getMessage()); throw $e; } $body = $response->getBody(); $parsed = json_decode($body, true); $result = array_map(function (array $result) use ($term) { return new SearchResultEntry( $result['favicon'], $result['name'], str_replace(",",", ",$result['tags']), $this->url->linkToRouteAbsolute('radio.page.index') . 'search/'.$term.'#/search/'.$term, 'icon-radio' ); }, $parsed); // $result = [new SearchResultEntry( // '', // 'SRF Virus', // 'alternative, youth', // $this->url->linkToRouteAbsolute('radio.page.index') . 'search/' . urlencode($query->getTerm()), // FIXME: urlencode working? // 'icon-notes-trans' // )]; return SearchResult::complete( $this->getName(), $result ); } }