listContacts method

  1. @override
Future<List<AtContact>> listContacts()

fetch all contacts in the list returns the list of AtContact

Implementation

@override
Future<List<AtContact>> listContacts() async {
  Set contactSet = <String>{};
  var contactList = <AtContact>[];
  var atSign = this.atSign.replaceFirst('@', '');
  var appNamespace = atClient!.preference!.namespace != null
      ? '.${atClient!.preference!.namespace}'
      : '';
  var subRegex = _regexType == RegexType.appSpecific
      ? '$atSign.${AppConstants.LIBRARY_NAMESPACE}$appNamespace'
      : '$atSign.${AppConstants.LIBRARY_NAMESPACE}.*';
  var regex =
  '${AppConstants.CONTACT_KEY_PREFIX}.*.(${AppConstants.CONTACT_KEY_SUFFIX}.$atSign|$subRegex)@$atSign'
      .toLowerCase();
  var scanList = await atClient!.getAtKeys(regex: regex);
  scanList.retainWhere((scanKeys) =>
  !scanKeys.key!.contains(AppConstants.GROUPS_LIST_KEY_PREFIX));
  if (scanList.isEmpty) {
    return contactList;
  }
  for (var key in scanList) {
    var atsign = reduceKey(key.key!);
    var atKey = _formAtKeyFromScanKeys(key);
    var contact;
    try {
      contact = await get(atsign, getAtKey: atKey);
    } on Exception catch (e) {
      logger.severe('Invalid atsign contact found @$key : $e');
    }
    if (contact != null) {
      var isUnique = contactSet.add(contact.atSign);
      if (isUnique) {
        contactList.add(contact);
      }
    }
  }
  contactSet.clear();
  return contactList;
}