import 'dart:convert'; import 'dart:io'; import 'package:http/http.dart' as http; import '../../../model/endpoint_data.dart'; import '../../errors/server_exception.dart'; import '../nextcloud_ocs.dart'; import 'autocomplete_response.dart'; class AutocompleteApi { /// Searches sharees (users by default). Pass [shareTypes] to widen the search /// — e.g. `[0, 1]` for both users and groups (0 = user, 1 = group). Future find( String query, { List shareTypes = const [0], }) async { // NextcloudOcs.uri serialises every query value via `toString()`, which // would turn the `shareTypes[]` list into `"[0, 1]"`. Build the Uri here so // Dart encodes the list as repeated `shareTypes[]=0&shareTypes[]=1` params. final endpoint = EndpointData().nextcloud(); final uri = Uri.https( endpoint.domain, '${endpoint.path}/ocs/v2.php/core/autocomplete/get', { 'format': 'json', 'search': query, 'itemType': ' ', 'itemId': ' ', 'shareTypes[]': shareTypes.map((t) => t.toString()).toList(), 'limit': '10', }, ); final response = await http.get(uri, headers: NextcloudOcs.headers()); if (response.statusCode != HttpStatus.ok) { throw ServerException( statusCode: response.statusCode, technicalDetails: 'core/autocomplete/get: ${response.body}', ); } final decoded = jsonDecode(response.body) as Map; return AutocompleteResponse.fromJson( decoded['ocs'] as Map, ); } }