import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; import 'package:paperless_mobile/core/logic/timeout_client.dart'; import 'package:paperless_mobile/core/model/error_message.dart'; import 'package:paperless_mobile/core/type/types.dart'; import 'package:paperless_mobile/di_initializer.dart'; import 'package:http/http.dart'; import 'package:path_provider/path_provider.dart'; const requestTimeout = Duration(seconds: 5); Future getSingleResult( String url, T Function(JSON) fromJson, ErrorCode errorCode, { int minRequiredApiVersion = 1, }) async { final httpClient = getIt(instanceName: "timeoutClient"); final response = await httpClient.get( Uri.parse(url), headers: {'accept': 'application/json; version=$minRequiredApiVersion'}, ); if (response.statusCode == 200) { return fromJson(jsonDecode(utf8.decode(response.bodyBytes)) as JSON); } return Future.error(errorCode); } Future> getCollection( String url, T Function(JSON) fromJson, ErrorCode errorCode, { int minRequiredApiVersion = 1, }) async { final httpClient = getIt(instanceName: "timeoutClient"); final response = await httpClient.get( Uri.parse(url), headers: {'accept': 'application/json; version=$minRequiredApiVersion'}, ); if (response.statusCode == 200) { final JSON body = jsonDecode(utf8.decode(response.bodyBytes)); if (body.containsKey('count')) { if (body['count'] == 0) { return []; } else { return body['results'] .cast() .map((result) => fromJson(result)) .toList(); } } } return Future.error(errorCode); } class FileUtils { static Future saveToFile( Uint8List bytes, String filename, { StorageDirectory directoryType = StorageDirectory.documents, }) async { final dir = (await getExternalStorageDirectories(type: directoryType)); File file = File("$dir/$filename"); file.writeAsBytesSync(bytes); return file; } }