delete method

  1. @override
Future<bool> delete(
  1. {ServiceOfJournal? serv,
  2. String? uuid}
)
override

Delete service serv (or find serv by uuid) from journal.

Also notify listeners and save. Note: since services are deleted by uuid double deletes is not a problem. (Async lock is not needed.)

Implementation

@override
Future<bool> delete({ServiceOfJournal? serv, String? uuid}) async {
  //
  // find service
  //
  serv ??= all.firstWhereOrNull((element) => element.uid == uuid);
  if (serv == null) {
    log.severe('Error: delete: not found by uuid');

    return false;
  }
  //
  // delete from DB if needed
  //
  var allowDelete = false;
  if ([ServiceState.finished, ServiceState.outDated].contains(serv.state)) {
    final (state, _) = await httpInterface.sendDelete(serv);
    if (state == ServiceState.removed) {
      allowDelete = true;
    }
  } else {
    allowDelete = true;
  }
  //
  // delete
  //
  if (allowDelete) {
    try {
      await hiveRepository.delete(serv);
      // ignore: avoid_catching_errors
    } on RangeError {
      log.info('RangeError double delete of service');
    }
  }
  return allowDelete;
}