kemono_client.dart 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import 'dart:convert';
  2. import 'package:dio/dio.dart';
  3. import 'package:veloe_kemono_party_flutter/models/creator.dart';
  4. import 'package:veloe_kemono_party_flutter/models/post.dart';
  5. class KemonoClient {
  6. KemonoClient(String sourceUrl) :_dio = Dio(BaseOptions(baseUrl: sourceUrl));
  7. final Dio _dio;
  8. String sourceUrl() => _dio.options.baseUrl;
  9. Future<List<Creator>> getCreators() async {
  10. try {
  11. final response = await _dio.get('/api/v1/creators.txt');
  12. if (response.statusCode != 200) {
  13. throw DioException(
  14. requestOptions: response.requestOptions,
  15. response: response,
  16. error: 'Unexpected status code: ${response.statusCode}'
  17. );
  18. }
  19. final parsedData = switch(response.data) {
  20. String s => jsonDecode(s),
  21. List<dynamic> list => list,
  22. Map<String,dynamic> map => [map],
  23. _ => throw FormatException('Unprocessable data')
  24. };
  25. return (parsedData as List).map((x) => Creator.fromJson(x,_dio.options.baseUrl)).toList();
  26. } on DioException catch (e) {
  27. throw Exception('Network error: ${e.message}');
  28. } on FormatException catch (e) {
  29. throw Exception('Data format error: ${e.message}');
  30. }
  31. }
  32. Future<List<Post>> getPosts(String creatorId, String service, int start, String query) async {
  33. try {
  34. final response = await _dio.get(
  35. '/api/v1/$service/user/$creatorId',
  36. queryParameters: query.isEmpty ? {'o': start} : {'o':start, 'q': query},
  37. );
  38. final parsedData = switch(response.data) {
  39. String s => jsonDecode(s),
  40. List<dynamic> list => list,
  41. Map<String,dynamic> map => [map],
  42. _ => throw FormatException('Unprocessable data')
  43. };
  44. return (parsedData as List).map((x) => Post.fromJson(x,_dio.options.baseUrl)).toList();
  45. } on DioException catch (e) {
  46. throw Exception('Posts load failed: ${e.message}');
  47. } on Exception {
  48. throw Exception('Oops something go wrong}');
  49. }
  50. }
  51. }