deleteDocument method
Delete a document from your own store
path Document path (e.g., "profile", "avatar")
ifMatch Optional: ETag for conditional delete (prevents accidental deletion of updated documents)
toServer Optional: specify which server to use
Returns true if document was deleted, false if not found or error occurred
Implementation
Future<bool> deleteDocument({
required String path,
String? ifMatch,
PeerId? toServer,
}) async {
final serverId = toServer ?? await _serverSelector.selectServer(config.preferredServers);
if (serverId == null) {
_logger.warning('No S&F server available for document DELETE');
return false;
}
try {
final context = Context();
final stream = await host.newStream(
serverId,
['/ricochet/store/doc/1.0.0'],
context,
).timeout(config.connectionTimeout);
final response = await DocumentHandler.deleteDocument(
stream,
ownerPeerId: host.id, // Can only DELETE own documents
path: path,
ifMatch: ifMatch,
).timeout(config.messageTimeout);
await stream.close();
if (response.status == 204) {
_logger.info('Deleted document: doc/$path');
return true;
} else if (response.status == 404) {
_logger.info('Document not found for deletion: doc/$path');
return false;
} else {
_logger.warning('DELETE document failed with status ${response.status}: ${response.error}');
return false;
}
} on TimeoutException {
_logger.warning('DELETE document timed out');
return false;
} catch (e) {
_logger.warning('Failed to DELETE document: $e');
return false;
}
}