mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-19 00:03:32 +00:00
69 lines
2 KiB
Dart
69 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;
|
||
|
}
|
||
|
}
|