query method
Read a potentially multi-level deep path from the graph
@param path The path to read @param cb The callback to invoke with results @returns a cleanup function to after done with query
Implementation
VoidCallback query(List<String> path, TTOnCb cb) {
List<String> lastSouls = [];
TTValue currentValue;
updateQuery(TTNode? _, [dynamic __, dynamic ___]) {
PathData getPathDateList = getPathData(path, _graph);
List<String> souls = getPathDateList.souls;
TTValue value = getPathDateList.value;
bool complete = getPathDateList.complete;
final diffSetsList = diffSets(lastSouls, souls);
List<String> added = diffSetsList[0];
List<String> removed = diffSetsList[1];
if ((complete && currentValue == null) ||
(value != null && value != currentValue)) {
currentValue = value;
cb(value, path[path.length - 1]);
}
for (final soul in added) {
_requestSoul(soul, updateQuery);
}
for (final soul in removed) {
_unlistenSoul(soul, updateQuery);
}
lastSouls = souls;
}
updateQuery(null);
return () {
for (final soul in lastSouls) {
_unlistenSoul(soul, updateQuery);
}
};
}