requestLocationAcknowledgment method

Future<bool> requestLocationAcknowledgment(
  1. LocationNotificationModel originalLocationNotificationModel,
  2. bool isAccepted, {
  3. int? minutes,
  4. bool? isSharing,
})

Sends a 'requestlocationacknowledged' key to originalLocationNotificationModel.receiver with isAccepted as isAccepted and duration of minutes minute

Implementation

Future<bool> requestLocationAcknowledgment(
    LocationNotificationModel originalLocationNotificationModel,
    bool isAccepted,
    {int? minutes,
    bool? isSharing}) async {
  try {
    var locationNotificationModel = LocationNotificationModel.fromJson(
        jsonDecode(
            LocationNotificationModel.convertLocationNotificationToJson(
                originalLocationNotificationModel)));

    var atkeyMicrosecondId = locationNotificationModel.key!
        .split('requestlocation-')[1]
        .split('@')[0];
    AtKey atKey;

    atKey = newAtKey(
      60000,
      'requestlocationacknowledged-$atkeyMicrosecondId',
      locationNotificationModel.receiver,
    );

    locationNotificationModel
      ..isAccepted = isAccepted
      ..isExited = !isAccepted
      ..lat = isAccepted ? 12 : 0
      ..long = isAccepted ? 12 : 0;

    if (isSharing != null) locationNotificationModel.isSharing = isSharing;

    if (isAccepted && (minutes != null)) {
      locationNotificationModel.from = DateTime.now();
      locationNotificationModel.to =
          DateTime.now().add(Duration(minutes: minutes));
    }

    var result = await AtLocationNotificationListener().atClientInstance!.put(
          atKey,
          LocationNotificationModel.convertLocationNotificationToJson(
              locationNotificationModel),
          isDedicated: MixedConstants.isDedicated,
        );
    print('requestLocationAcknowledgment $result');

    if (result) {
      if (MixedConstants.isDedicated) {
        await SyncSecondary().callSyncSecondary(SyncOperation.syncSecondary);
      }
      KeyStreamService().updatePendingStatus(locationNotificationModel);
    }

    if ((result) && (!isSharing!)) {
      KeyStreamService().removeData(atKey.key);
    }

    return result;
  } catch (e) {
    return false;
  }
}