12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 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<List<Creator>> 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<dynamic> list => list,
- Map<String,dynamic> 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<List<Post>> 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},
- options: Options(
- validateStatus: (status) => true,
- ), // Accept all status codes
- );
- final parsedData = switch(response.data) {
- String s => jsonDecode(s),
- List<dynamic> list => list,
- Map<String,dynamic> map => [map],
- _ => throw FormatException('Unprocessable data')
- };
- if (parsedData is Map<String,dynamic> && (parsedData).containsKey("error"))
- {
- return List<Post>.empty();
- }
- 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}');
- }
- }
- }
|