relatica/lib/services/interactions_manager.dart
2023-01-31 14:39:06 -05:00

68 lines
2 KiB
Dart

import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
import 'package:result_monad/result_monad.dart';
import '../globals.dart';
import '../models/connection.dart';
import '../models/exec_error.dart';
import 'auth_service.dart';
class InteractionsManager extends ChangeNotifier {
static final _logger = Logger('$InteractionsManager');
final _likesByStatusId = <String, List<Connection>>{};
final _resharesByStatusId = <String, List<Connection>>{};
List<Connection> getLikes(String statusId) {
if (!_likesByStatusId.containsKey(statusId)) {
updateLikesForStatus(statusId);
return [];
}
return _likesByStatusId[statusId]!;
}
List<Connection> getReshares(String statusId) {
if (!_resharesByStatusId.containsKey(statusId)) {
updateResharesForStatus(statusId);
return [];
}
return _resharesByStatusId[statusId]!;
}
FutureResult<List<Connection>, ExecError> updateLikesForStatus(
String statusId) async {
final auth = getIt<AuthService>();
final clientResult = auth.currentClient;
if (clientResult.isFailure) {
_logger.severe('Error getting Friendica client: ${clientResult.error}');
return clientResult.errorCast();
}
final client = clientResult.value;
final likesResult = await client.getLikes(statusId);
if (likesResult.isSuccess) {
_likesByStatusId[statusId] = likesResult.value;
notifyListeners();
}
return likesResult;
}
FutureResult<List<Connection>, ExecError> updateResharesForStatus(
String statusId) async {
final auth = getIt<AuthService>();
final clientResult = auth.currentClient;
if (clientResult.isFailure) {
_logger.severe('Error getting Friendica client: ${clientResult.error}');
return clientResult.errorCast();
}
final client = clientResult.value;
final resharesResult = await client.getReshares(statusId);
if (resharesResult.isSuccess) {
_resharesByStatusId[statusId] = resharesResult.value;
notifyListeners();
}
return resharesResult;
}
}