setDocumentVisibility method

Future<DocumentFrameResponse?> setDocumentVisibility({
  1. required String path,
  2. required DocumentVisibility visibility,
  3. PeerId? toServer,
})

Set who may read one of your own documents.

Returns the server's response, whose DocumentFrameResponse.visibility is the document's visibility afterwards (404 if there is no such document), or null if the request could not be made.

Implementation

Future<DocumentFrameResponse?> setDocumentVisibility({
  required String path,
  required DocumentVisibility visibility,
  PeerId? toServer,
}) async {
  final serverId = toServer ?? await _serverSelector.selectServer(config.preferredServers);
  if (serverId == null) {
    _logger.warning('No S&F server available for document storage');
    return null;
  }

  try {
    final context = Context();
    final stream = await host.newStream(
      serverId,
      ['/ricochet/store/doc/1.0.0'],
      context,
    ).timeout(config.connectionTimeout);

    final response = await DocumentHandler.setDocumentVisibility(
      stream,
      ownerPeerId: host.id,
      path: path,
      visibility: visibility,
    ).timeout(config.messageTimeout);

    await stream.close();

    _logger.info('ACCESS set ${host.id.toBase58().substring(0, 12)}.../doc/$path ${visibility.name}: ${response.status}');

    return response;
  } on TimeoutException {
    _logger.warning('Document ACCESS timed out');
    return null;
  } catch (e) {
    _logger.warning('Failed to set document visibility: $e');
    return null;
  }
}