private async Task <bool> PublishAvatarAsync() { SoftwareBitmap img = null; if (MODEL.Image is not null) { img = await MODEL.Image?.GetSoftwareBitmapAsync(); } if (img is null) { return(await PublishMetadataAsync(null)); } byte[] imgData = await ImageUtils.ToByteArrayAsync(img, string.Equals(MODEL.Image.type, ImageUtils.IANA_MEDIA_TYPE_GIF)); string imgHashBase16 = ImageUtils.HashImage(imgData); AvatarDataPubSubItem avatar = new AvatarDataPubSubItem(Convert.ToBase64String(imgData), imgHashBase16); if (!await PublishAvatarAsync(avatar)) { return(false); } AvatarMetadataDataPubSubItem metadata = new AvatarMetadataDataPubSubItem(imgHashBase16, new AvatarInfo((uint)imgData.Length, (ushort)img.PixelHeight, (ushort)img.PixelWidth, imgHashBase16, MODEL.Image.type)); return(await PublishMetadataAsync(metadata)); }
private async Task <bool> PublishMetadataAsync(AvatarMetadataDataPubSubItem metadata) { MessageResponseHelperResult <IQMessage> result = await MODEL.Client.xmppClient.PUB_SUB_COMMAND_HELPER.publishAvatarMetadataAsync(metadata); if (result.STATE == MessageResponseHelperResultState.SUCCESS) { if (result.RESULT is IQErrorMessage errorMsg) { Logger.Error($"Failed to publish avatar metadata: {errorMsg.ERROR_OBJ}"); return(false); } Logger.Info("Successfully published avatar metadata."); return(true); } Logger.Error($"Failed to publish avatar metadata: {result.STATE}"); return(false); }
/// <summary> /// Sends a <see cref="PublishAvatarMetadataMessage"/> to publish the given avatar metadata. /// https://xmpp.org/extensions/xep-0084.html#process-pubmeta /// </summary> /// <param name="metadata">The avatar metadata to publish.</param> /// <returns>Returns a <see cref="MessageResponseHelper{IQMessage}"/> listening for <see cref="PublishAvatarMetadataMessage"/> answers.</returns> public Task <MessageResponseHelperResult <IQMessage> > publishAvatarMetadataAsync(AvatarMetadataDataPubSubItem metadata) { AsyncMessageResponseHelper <IQMessage> helper = new AsyncMessageResponseHelper <IQMessage>(CONNECTION); PublishAvatarMetadataMessage msg = new PublishAvatarMetadataMessage(CONNECTION.account.getFullJid(), metadata); return(helper.startAsync(msg)); }