saveEvents method
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;
}
});
}