fetchAssignments method
Fetch model assignments from backend
Implementation
Future<List<ModelInfo>> fetchAssignments({bool forceRefresh = false}) async {
try {
final lib = PlatformLoader.loadCommons();
final fetchFn = lib.lookupFunction<
Int32 Function(Int32, Pointer<Pointer<Pointer<RacModelInfoStruct>>>, Pointer<IntPtr>),
int Function(int, Pointer<Pointer<Pointer<RacModelInfoStruct>>>,
Pointer<IntPtr>)>('rac_model_assignment_fetch');
final outModelsPtr = calloc<Pointer<Pointer<RacModelInfoStruct>>>();
final outCountPtr = calloc<IntPtr>();
try {
final result = fetchFn(forceRefresh ? 1 : 0, outModelsPtr, outCountPtr);
if (result != RacResultCode.success) {
_logger.warning('Fetch assignments failed', metadata: {'code': result});
return [];
}
final count = outCountPtr.value;
if (count == 0) return [];
final models = <ModelInfo>[];
final modelsArray = outModelsPtr.value;
for (var i = 0; i < count; i++) {
final modelPtr = modelsArray[i];
if (modelPtr != nullptr) {
models.add(_structToModelInfo(modelPtr));
}
}
// Free the array
final freeFn = lib.lookupFunction<
Void Function(Pointer<Pointer<RacModelInfoStruct>>, IntPtr),
void Function(Pointer<Pointer<RacModelInfoStruct>>,
int)>('rac_model_info_array_free');
freeFn(modelsArray, count);
return models;
} finally {
calloc.free(outModelsPtr);
calloc.free(outCountPtr);
}
} catch (e) {
_logger.debug('rac_model_assignment_fetch error: $e');
return [];
}
}