onCommandResult method
void
onCommandResult(
- ImapResponse imapResponse
Processes the command result response from the server.
Implementation
void onCommandResult(ImapResponse imapResponse) {
final line = imapResponse.parseText;
final spaceIndex = line.indexOf(' ');
if (spaceIndex != -1) {
final commandId = line.substring(0, spaceIndex);
final task = _tasks.remove(commandId);
if (task != null) {
if (task == _currentCommandTask) {
_currentCommandTask = null;
}
imapResponse.parseText = line.substring(spaceIndex + 1);
final Response<dynamic> response;
try {
response = task.parse(imapResponse);
} catch (e, s) {
// a parser must never leave the caller hanging: fail the command
logApp('Unable to parse response for ${task.command.logText}: $e $s');
if (!task.completer.isCompleted) {
task.completer.completeError(
ImapException(this, 'unable to parse response: $e', details: e),
s,
);
}
return;
}
try {
if (!task.completer.isCompleted) {
if (response.isOkStatus) {
task.completer.complete(response.result);
} else {
task.completer.completeError(
ImapException(this, response.details),
);
}
}
} catch (e, s) {
print('Unable to complete task ${task.command.logText}: $e $s');
print('response: ${imapResponse.parseText}');
print('result: ${response.result}');
try {
task.completer.completeError(ImapException(this, response.details));
} on Exception {
// ignore
}
}
} else {
log('ERROR: no task found for command [$commandId]');
}
} else {
log('unexpected SERVER response: [$imapResponse]');
}
}