fetchCurrentPresence method

Future<CachedPresence> fetchCurrentPresence(
  1. String userId, {
  2. bool fetchOnlyFromCached = false,
})

The newest presence of this user if there is any. Fetches it from the database first and then from the server if necessary or returns offline.

Implementation

Future<CachedPresence> fetchCurrentPresence(
  String userId, {
  bool fetchOnlyFromCached = false,
}) async {
  // ignore: deprecated_member_use_from_same_package
  final cachedPresence = presences[userId];
  if (cachedPresence != null) {
    return cachedPresence;
  }

  final dbPresence = await database?.getPresence(userId);
  // ignore: deprecated_member_use_from_same_package
  if (dbPresence != null) return presences[userId] = dbPresence;

  if (fetchOnlyFromCached) return CachedPresence.neverSeen(userId);

  try {
    final result = await getPresence(userId);
    final presence = CachedPresence.fromPresenceResponse(result, userId);
    await database?.storePresence(userId, presence);
    // ignore: deprecated_member_use_from_same_package
    return presences[userId] = presence;
  } catch (e) {
    final presence = CachedPresence.neverSeen(userId);
    await database?.storePresence(userId, presence);
    // ignore: deprecated_member_use_from_same_package
    return presences[userId] = presence;
  }
}