import 'package:flutter/foundation.dart'; import 'package:logging/logging.dart'; import 'package:result_monad/result_monad.dart'; import '../friendica_client/paging_data.dart'; import '../globals.dart'; import '../models/direct_message_thread.dart'; import '../models/exec_error.dart'; import 'auth_service.dart'; class DirectMessageService extends ChangeNotifier { static final _logger = Logger('$DirectMessageService'); final _threads = {}; List get threads { if (_threads.isEmpty) { updateThreads(); } return _threads.values.toList(); } Result getThreadByParentUri(String uri) { if (_threads.containsKey(uri)) { return Result.ok(_threads[uri]!); } return buildErrorResult( type: ErrorType.notFound, message: 'Thread ID not found: $uri'); } Future updateThreads() async { await getIt() .currentClient .andThenAsync((client) => client.getDirectMessages(PagingData())) .match( onSuccess: (update) { final newThreads = DirectMessageThread.createThreads(update); _threads.clear(); for (final t in newThreads) { //TODO do merge operation _threads[t.parentUri] = t; } _logger.fine( 'Updated ${update.length} direct messages, across ${newThreads.length} threads'); notifyListeners(); }, onError: (error) { _logger.severe('Error getting direct messages: $error'); }, ); notifyListeners(); } }