restoreQueue method
Restore the queue from persistent storage. Returns true
if successful.
Implementation
Future<bool> restoreQueue() async {
bool success = true;
try {
final snapshots = await Persistence().getUserTasks();
// now create new AppTaskExecutors, initialize them, and add them to the queue
for (var snapshot in snapshots) {
AppTaskExecutor executor = AppTaskExecutor();
// find the deployment
SmartphoneDeployment? deployment;
if (snapshot.studyDeploymentId != null &&
snapshot.deviceRoleName != null) {
deployment = SmartPhoneClientManager()
.lookupStudyRuntime(
snapshot.studyDeploymentId!,
snapshot.deviceRoleName!,
)
?.deployment;
}
if (deployment == null) {
warning(
'$runtimeType - Could not find deployment information based on snapshot: $snapshot');
} else {
executor.initialize(snapshot.task, deployment);
// now put the restored task back on the queue
if (_userTaskFactories[executor.task.type] == null) {
warning(
'$runtimeType - Could not enqueue AppTask. Could not find a factory for creating '
"a UserTask for type '${executor.task.type}'");
} else {
UserTask userTask =
_userTaskFactories[executor.task.type]!.create(executor);
userTask.id = snapshot.id;
userTask.state = snapshot.state;
userTask.enqueued = snapshot.enqueued;
userTask.triggerTime = snapshot.triggerTime;
_userTaskMap[userTask.id] = userTask;
debug(
'$runtimeType - Enqueued UserTask from loaded task queue: $userTask');
}
}
}
} catch (exception) {
success = false;
warning('$runtimeType - Failed to load task queue - $exception');
}
return success;
}