publishUserAvatarMetadata method

Future<Result<AvatarError, bool>> publishUserAvatarMetadata(
  1. UserAvatarMetadata metadata,
  2. bool public
)

Publish avatar metadata metadata to the User Avatar's metadata node. If public is true, then the node will be set to an 'open' access model. If public is false, then the node will be set to an 'roster' access model.

Implementation

Future<Result<AvatarError, bool>> publishUserAvatarMetadata(
  UserAvatarMetadata metadata,
  bool public,
) async {
  final pubsub = _getPubSubManager();
  final result = await pubsub.publish(
    getAttributes().getFullJID().toBare(),
    userAvatarMetadataXmlns,
    XMLNode.xmlns(
      tag: 'metadata',
      xmlns: userAvatarMetadataXmlns,
      children: [
        XMLNode(
          tag: 'info',
          attributes: <String, String>{
            'bytes': metadata.length.toString(),
            'height': metadata.height.toString(),
            'width': metadata.width.toString(),
            'type': metadata.type,
            'id': metadata.id,
          },
        ),
      ],
    ),
    id: metadata.id,
    options: PubSubPublishOptions(
      accessModel: public ? 'open' : 'roster',
    ),
  );

  if (result.isType<PubSubError>()) return Result(UnknownAvatarError());
  return const Result(true);
}