decode method
Implementation
@override
Future<RemoteAttachmentContent> decode(EncodedContent encodedContent) async {
final url = utf8.decode(encodedContent.content);
final contentDigest = encodedContent.parameters['contentDigest'];
final secretHex = encodedContent.parameters['secret'];
final saltHex = encodedContent.parameters['salt'];
final nonceHex = encodedContent.parameters['nonce'];
final scheme = encodedContent.parameters['scheme'];
final contentLengthStr = encodedContent.parameters['contentLength'];
final filename = encodedContent.parameters['filename'];
if (contentDigest == null || secretHex == null || saltHex == null || nonceHex == null || scheme == null || contentLengthStr == null || filename == null) {
throw Exception('Missing required parameters for remote attachment');
}
// Accept http and https — LAN servers use http, production uses https
final normalizedScheme = scheme.replaceAll('://', '');
if (normalizedScheme != 'https' && normalizedScheme != 'http') {
throw Exception('Invalid scheme for remote attachment: "$scheme". '
'Must be http or https.');
}
final description = encodedContent.parameters['description'];
return RemoteAttachmentContent(
url: url,
contentDigest: contentDigest,
secret: hexToBytes(secretHex),
salt: hexToBytes(saltHex),
nonce: hexToBytes(nonceHex),
scheme: normalizedScheme,
contentLength: int.parse(contentLengthStr),
filename: filename,
description: description,
);
}