writeEntries method

  1. @override
  2. @nonVirtual
Future<List<StoredLogEntry>> writeEntries(
  1. List<LogEntry> entries
)
override

Converts entries to stored form, saves them (onWriteEntries) and sends LogEntriesAdded to changes; changes the store reported while saving (reportChange) follow it. Throws StateError after close.

Implementation

@override
@nonVirtual
Future<List<StoredLogEntry>> writeEntries(List<LogEntry> entries) async {
  _checkOpen();
  final detached = [for (final entry in entries) entry.withoutLiveObjects()];
  _writesInProgress++;
  _changesDuringWrite ??= [];
  try {
    final stored = await onWriteEntries(detached);
    assert(
      stored.length == detached.length,
      '$name.onWriteEntries returned ${stored.length} entries for ${detached.length} written',
    );
    _emit(LogEntriesAdded(stored));
    return stored;
  } finally {
    // Also after a failed write: otherwise deferred changes would wait for the next write.
    _writesInProgress--;
    if (_writesInProgress == 0) {
      final deferred = _changesDuringWrite!;
      _changesDuringWrite = null;
      deferred.forEach(_emit);
    }
  }
}