afterPrinted method
After a printed job: the first job in a language asks the printer (no paper) whether that is its language and corrects it when it is not. Returns the corrected printer, or null.
Implementation
Future<TargetPrinter?> afterPrinted(TargetPrinter printer) async {
final lang = printer.language.toLowerCase();
if (lang == PrinterLanguage.pdf) return null;
try {
if (lang == PrinterLanguage.xpp) return null;
final prefs = await SharedPreferences.getInstance();
final key = '$storageKey.checked';
final checked = _checked(prefs.getString(key));
if (checked[printer.name] == lang) return null;
final answer = await _printing.checkLanguage(printer);
final corrected = answer != null && languageFamily(answer.language) != languageFamily(lang);
checked[printer.name] = corrected ? answer.language : lang;
await prefs.setString(key, jsonEncode(checked));
await _setFact(printer.name, 'check', {
'result': corrected ? 'corrected' : (answer == null ? 'silent' : 'confirmed'),
'language': corrected ? answer.language : lang,
if (corrected) 'from': lang,
'at': DateTime.now().toUtc().toIso8601String(),
});
if (!corrected) return null;
await _setFact(printer.name, 'source', PrinterIdentity.sourceStatus);
final next = (byName(printer.name) ?? printer).copyWith(language: answer.language);
await save(next);
onLocalProtocolChange?.call({printer.name: answer.language}, {printer.name});
return next;
} catch (_) {
return null;
}
}