コード例 #1
0
        public void DownloadAvatar(Jid userId, string avatarId, string avatarType, RequestAvatarCallback finished)
        {
            PubSubIq dataiq = new PubSubIq(IqType.get, userId, Program.Jabber.conn.MyJID);

            dataiq.PubSub.Items = new Items("urn:xmpp:avatar:data");
            dataiq.PubSub.Items.AddItem(new Item(avatarId));
            Program.Jabber.conn.IqGrabber.SendIq(dataiq, (IqCB)((object sender_3, IQ result2, object unused_4) => {
                if (result2.Type != IqType.result)
                {
                    finished(false, null); return;
                }

                Element data = result2.SelectSingleElement("data", true);

                byte[] imageBytes = Convert.FromBase64String(data.Value);

                Image img;
                switch (avatarType)
                {
                case "image/webp":
                    var dec = new Imazen.WebP.SimpleDecoder();
                    img = dec.DecodeFromBytes(imageBytes, imageBytes.Length);
                    break;

                default:
                    img = Image.FromStream(new MemoryStream(imageBytes));
                    break;
                }
                string fileName = GetAvatarFilename(userId);

                img.Save(fileName, ImageFormat.Png);
                finished(true, fileName);
            }));
        }
コード例 #2
0
        public void RequestAvatar(Jid userId, RequestAvatarCallback finished)
        {
            if (dontRequestIds.Contains(userId.ToString()))
            {
                return;
            }

            dontRequestIds.Add(userId.ToString());
            PubSubIq metaiq = new PubSubIq(IqType.get, userId, Program.Jabber.conn.MyJID);

            metaiq.PubSub.Items = new Items("urn:xmpp:avatar:metadata");
            Program.Jabber.conn.IqGrabber.SendIq(metaiq, (IqCB)((object unused_1, IQ result, object unused_2) => {
                if (result.Type != IqType.result)
                {
                    finished(false, null); return;
                }
                Element info = result.SelectSingleElement("info", true);
                if (info == null || !info.HasAttribute("id") || !info.HasAttribute("type"))
                {
                    finished(false, null); return;
                }

                this.DownloadAvatar(userId, info.GetAttribute("id"), info.GetAttribute("type"), finished);
            }));
        }