getAndClearEvents method

Future<String?> getAndClearEvents()

Implementation

Future<String?> getAndClearEvents() async {
  return await _lock.synchronized(() async {
    try {
      final String? existing = Prefs.getString(_eventsKey);

      if (existing == null || existing.isEmpty) {
        return null;
      }

      List<String> lines = existing.split(EventSizeUtil.DELIMITER);
      int extractCount = EventSizeUtil.getMaxEventsUnderSizeLimit(lines);
      if (extractCount <= 0) return null;

      List<String> batch = lines.sublist(0, extractCount);
      List<String> remaining = lines.sublist(extractCount);

      if (remaining.isEmpty) {
        await Prefs.remove(_eventsKey);
      } else {
        await Prefs.setString(
            _eventsKey, remaining.join(EventSizeUtil.DELIMITER));
      }

      return batch.join(EventSizeUtil.DELIMITER);
    } catch (e, st) {
      dbLogger.severe('EventStorageHandler: getAndClearEvents Exception', e, st);
      return null;
    }
  });
}