getFeedEntries method

Future<FeedEntriesResult?> getFeedEntries({
  1. required PeerId ownerPeerId,
  2. required String path,
  3. int? fromSequence,
  4. int? toSequence,
  5. int? limit,
  6. String? entryType,
  7. PeerId? fromServer,
})

Get feed entries (range query)

Implementation

Future<FeedEntriesResult?> getFeedEntries({
  required PeerId ownerPeerId,
  required String path,
  int? fromSequence,
  int? toSequence,
  int? limit,
  String? entryType,
  PeerId? fromServer,
}) async {
  final serverId = fromServer ?? await _serverSelector.selectServer(config.preferredServers);
  if (serverId == null) {
    _logger.warning('No S&F server available for feed entries retrieval');
    return null;
  }

  try {
    final context = Context();
    final stream = await host.newStream(
      serverId,
      [FeedHandler.protocolId],
      context,
    ).timeout(config.connectionTimeout);

    final response = await FeedHandler.getFeedEntries(
      stream,
      ownerPeerId: ownerPeerId,
      path: path,
      fromSequence: fromSequence,
      toSequence: toSequence,
      limit: limit,
      entryType: entryType,
    ).timeout(config.messageTimeout);

    await stream.close();

    if (!response.isSuccess) {
      _logger.warning('GET feed entries $path: ${response.status}');
      return null;
    }

    final body = jsonDecode(utf8.decode(response.body!)) as Map<String, dynamic>;
    final entriesList = body['entries'] as List<dynamic>? ?? [];
    final entries = entriesList.map((e) {
      final entry = e as Map<String, dynamic>;
      return FeedEntry(
        sequence: entry['seq'] as int,
        entryType: entry['type'] as String?,
        content: Uint8List.fromList(
          base64Decode(entry['content'] as String? ?? ''),
        ),
        contentHash: entry['hash'] as String? ?? '',
        createdAt: entry['createdAt'] as int? ?? 0,
        createdBy: entry['createdBy'] as String?,
      );
    }).toList();

    return FeedEntriesResult(
      entries: entries,
      hasMore: response.hasMore ?? false,
      nextSequence: response.nextSequence,
    );
  } on TimeoutException {
    _logger.warning('GET feed entries timed out');
    return null;
  } catch (e) {
    _logger.warning('Failed to GET feed entries: $e');
    return null;
  }
}