import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:veloe_kemono_party_flutter/models/creator.dart'; import 'package:veloe_kemono_party_flutter/models/post.dart'; class KemonoClient { KemonoClient(String sourceUrl) :_dio = Dio(BaseOptions(baseUrl: sourceUrl, headers: { 'Accept': 'text/css', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'en-US,en;q=0.5', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', 'Pragma': 'no-cache', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0' })); final Dio _dio; String sourceUrl() => _dio.options.baseUrl; Future> getCreators() async { try { final response = await _dio.get('/api/v1/creators'); if (response.statusCode != 200) { throw DioException( requestOptions: response.requestOptions, response: response, error: 'Unexpected status code: ${response.statusCode}' ); } final parsedData = switch(response.data) { String s => jsonDecode(s), List list => list, Map map => [map], _ => throw FormatException('Unprocessable data') }; return (parsedData as List).map((x) => Creator.fromJson(x,_dio.options.baseUrl)).toList(); } on DioException catch (e) { throw Exception('Network error: ${e.message} ${e.response?.data as String}'); } on FormatException catch (e) { throw Exception('Data format error: ${e.message}'); } } Future> getPosts(String creatorId, String service, int start, String query) async { try { final response = await _dio.get( '/api/v1/$service/user/$creatorId/posts', queryParameters: query.isEmpty ? {'o': start} : {'o':start, 'q': query}, ); final parsedData = switch(response.data) { String s => jsonDecode(s), List list => list, Map map => [map], _ => throw FormatException('Unprocessable data') }; return (parsedData as List).map((x) => Post.fromJson(x,_dio.options.baseUrl)).toList(); } on DioException catch (e) { throw Exception('Posts load failed: ${e.message} ${e.stackTrace}'); } on Exception { throw Exception('Oops something go wrong}'); } } }