scanAndGet method
Returns AtFollowsValue
after scan with regex
, fetching data for that key.
Implementation
Future<AtFollowsValue> scanAndGet(String regex) async {
var scanKey = await AtClientManager.getInstance()
.atClient
.getAtKeys(regex: regex)
.timeout(Duration(seconds: AppConstants.responseTimeLimit),
onTimeout: () => _onTimeOut());
int index = scanKey.length - 1;
for (int i = 0; i < scanKey.length; i++) {
if (scanKey[i].key.endsWith("self.at_follows") &&
scanKey[i].namespace == "wavi" &&
scanKey[i].sharedWith == null) {
index = i;
}
}
AtFollowsValue value =
scanKey.isNotEmpty ? await this.get(scanKey[index]) : AtFollowsValue();
//scanKey.isNotEmpty ? await this.get(scanKey[0]) : AtFollowsValue();
//migrates to newnamespace
if (scanKey.isNotEmpty &&
_isOldKey(scanKey[0].key) &&
value.value != null) {
var newKey = AtKey()..metadata = scanKey[0].metadata;
newKey.key = scanKey[0].key.contains('following')
? AppConstants.followingKey
: AppConstants.followersKey;
await this.put(newKey, value.value);
value = await this.get(newKey);
if (value.value != null) {
await this.delete(scanKey[0]);
}
}
return value;
}