Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        /// <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));
        }