afterPrinted method

Future<TargetPrinter?> afterPrinted(
  1. TargetPrinter printer
)

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;
  }
}