saveEvents method

Future<int> saveEvents(
  1. String? events
)

Implementation

Future<int> saveEvents(String? events) async {
  return await _lock.synchronized(() async {
    try {
      final String? existing = Prefs.getString(_eventsKey);
      List<String> storedEvents = [];
      List<String> newEvents = [];
      List<String> allEvents = [];

      if (existing != null && existing.isNotEmpty) {
        storedEvents = existing.split(EventSizeUtil.DELIMITER);
      }

      if (events != null && events.isNotEmpty) {
        newEvents = events.split(EventSizeUtil.DELIMITER);
        if (newEvents.length > 1) {
          newEvents.sort((a, b) => JsonUtil.extractTs(b).compareTo(JsonUtil.extractTs(a)));
        }
      }

      String latestStored = storedEvents.isNotEmpty ? storedEvents.first : '';
      String oldestToAppend = newEvents.isNotEmpty ? newEvents.last : '';

      allEvents = [...newEvents, ...storedEvents];

      bool shouldSort = JsonUtil.extractTs(latestStored) >= JsonUtil.extractTs(oldestToAppend);

      if (shouldSort) {
        allEvents.sort((a, b) => JsonUtil.extractTs(b).compareTo(JsonUtil.extractTs(a)));
      }

      if (allEvents.length > maxEventsStored) {
        allEvents = allEvents.sublist(0, maxEventsStored);
      }

      final updatedString = allEvents.join(EventSizeUtil.DELIMITER);
      await Prefs.setString(_eventsKey, updatedString);
      return allEvents.length;
    } catch (e, st) {
      dbLogger.severe('EventStorageHandler: saveEvents Exception', e, st);
      return 0;
    }
  });
}