import 'package:dio/dio.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:island/models/activitypub.dart'; import 'package:island/pods/network.dart'; final activityPubServiceProvider = Provider((ref) { final dio = ref.watch(apiClientProvider); return ActivityPubService(dio); }); class ActivityPubService { final Dio _client; ActivityPubService(this._client); Future followRemoteUser(String targetActorUri) async { final response = await _client.post( '/sphere/activitypub/follow', data: {'targetActorUri': targetActorUri}, ); final followResponse = SnActivityPubFollowResponse.fromJson(response.data); if (!followResponse.success) { throw Exception(followResponse.message); } } Future unfollowRemoteUser(String targetActorUri) async { final response = await _client.post( '/sphere/activitypub/unfollow', data: {'targetActorUri': targetActorUri}, ); final followResponse = SnActivityPubFollowResponse.fromJson(response.data); if (!followResponse.success) { throw Exception(followResponse.message); } } Future> getFollowing({int limit = 50}) async { final response = await _client.get( '/sphere/activitypub/following', queryParameters: {'limit': limit}, ); final users = (response.data as List) .map((json) => SnActivityPubUser.fromJson(json)) .toList(); return users; } Future> getFollowers({int limit = 50}) async { final response = await _client.get( '/sphere/activitypub/followers', queryParameters: {'limit': limit}, ); final users = (response.data as List) .map((json) => SnActivityPubUser.fromJson(json)) .toList(); return users; } Future> searchUsers( String query, { int limit = 20, }) async { final response = await _client.get( '/sphere/activitypub/search', queryParameters: {'query': query, 'limit': limit}, ); final users = (response.data as List) .map((json) => SnActivityPubActor.fromJson(json)) .toList(); return users; } }