getFeedEntries method
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;
}
}