listContacts method
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;
}