removeEvents method

  1. @override
Future<void> removeEvents({
  1. List<String>? ids,
  2. List<String>? pubKeys,
  3. List<int>? kinds,
  4. Map<String, List<String>>? tags,
  5. int? since,
  6. int? until,
})
override

Remove events from cache with flexible filtering.

If all parameters are empty, implementations should return early instead of deleting everything by accident.

Implementation

@override
Future<void> removeEvents({
  List<String>? ids,
  List<String>? pubKeys,
  List<int>? kinds,
  Map<String, List<String>>? tags,
  int? since,
  int? until,
}) async {
  // If all parameters are empty, return early (don't delete everything)
  if ((ids == null || ids.isEmpty) &&
      (pubKeys == null || pubKeys.isEmpty) &&
      (kinds == null || kinds.isEmpty) &&
      (tags == null || tags.isEmpty) &&
      since == null &&
      until == null) {
    return;
  }

  final rawEventsToRemove = await _loadEventsInternal(
    ids: ids,
    pubKeys: pubKeys,
    kinds: kinds,
    tags: tags,
    since: since,
    until: until,
    applyVisibilityRules: false,
  );
  final eventIdsToRemove = rawEventsToRemove
      .map((event) => event.id)
      .toList();
  final eventIdSet = eventIdsToRemove.toSet();
  events.removeWhere((key, value) => eventIdSet.contains(key));
  _removeEventSidecarsByIds(eventIdsToRemove);
  await _refreshDerivedStateForPubKeys(
    rawEventsToRemove.map((event) => event.pubKey).toSet(),
  );
}