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); })); }
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); })); }
public void TestBuildPubSubIq2() { var pIq = new PubSubIq { Type = Matrix.Xmpp.IqType.Set, From = "[email protected]/elsinore", To = "pubsub.shakespeare.lit", Id = "create2" }; pIq.PubSub.Create = new Matrix.Xmpp.PubSub.Create(); pIq.PubSub.Configure = new Matrix.Xmpp.PubSub.Configure(); pIq.ShouldBe(Resource.Get("Xmpp.PubSub.publish_iq2.xml")); }
public void TestBuildPubSubIq1() { PubSubIq pIq = new PubSubIq { Type = Matrix.Xmpp.IqType.Result, From = "pubsub.shakespeare.lit", To = "[email protected]/elsinore", Id = "create2", PubSub = { Create = new Matrix.Xmpp.PubSub.Create { Node = "25e3d37dabbab9541f7523321421edc5bfeb2dae" } } }; pIq.ShouldBe(Resource.Get("Xmpp.PubSub.publish_iq1.xml")); }
public static Iq CreatePublishNicknameStanza(string nickname) { var pIq = new PubSubIq { Type = IqType.Set }; var publish = new Publish { Node = Namespaces.Nick }; var item = new Item(); item.Add(new Nick(nickname)); publish.AddItem(item); pIq.PubSub.Publish = publish; return(pIq); }
public static Iq CreateRequestAvatarStanza(Jid to, string id) { var pIq = new PubSubIq { To = to, Type = IqType.Get }; var items = new Items { Node = Namespaces.AvatarData }; items.AddItem(new Item { Id = id }); pIq.PubSub.Items = items; return(pIq); }
public static Iq PublishItems(Jid to, string node, Item[] items) { var pIq = new PubSubIq { To = to, Type = IqType.Set, }; var publish = new Publish { Node = node }; foreach (var item in items) { publish.AddItem(item); } pIq.PubSub.Publish = publish; return(pIq); }
public static Iq CreatePublishAvatarDataStanza(byte[] avatarBytes) { /* * <iq type='set' from='[email protected]/chamber' id='publish1'> * <pubsub xmlns='http://jabber.org/protocol/pubsub'> * <publish node='urn:xmpp:avatar:data'> * <item id='111f4b3c50d7b0df729d299bc6f8e9ef9066971f'> * <data xmlns='urn:xmpp:avatar:data'> * qANQR1DBwU4DX7jmYZnncm... * </data> * </item> * </publish> * </pubsub> * </iq> * */ var pIq = new PubSubIq { Type = IqType.Set }; var publish = new Publish { Node = Namespaces.AvatarData }; var item = new Item { Id = Hash.Sha1HashHex(avatarBytes) }; item.Add( new Data { Bytes = avatarBytes } ); publish.AddItem(item); pIq.PubSub.Publish = publish; return(pIq); }
/// <summary> /// Retracts the items stanza. /// </summary> /// <param name="to">To.</param> /// <param name="node">The node.</param> /// <param name="itemIds">The item ids.</param> /// <returns></returns> public static Iq RetractItems(Jid to, string node, string[] itemIds) { var pIq = new PubSubIq { To = to, Type = IqType.Set }; var retract = new Retract { Node = node }; foreach (var item in itemIds) { retract.AddItem(new Item { Id = item }); } pIq.PubSub.Retract = retract; return(pIq); }
public static Iq CreatePublishAvatarMetadataStanza(byte[] avatarBytes, int height, int width, string contentType) { /* * <iq type='set' from='[email protected]/chamber' id='publish1'> * <pubsub xmlns='http://jabber.org/protocol/pubsub'> * <publish node='urn:xmpp:avatar:data'> * <item id='111f4b3c50d7b0df729d299bc6f8e9ef9066971f'> * <data xmlns='urn:xmpp:avatar:data'> * qANQR1DBwU4DX7jmYZnncm... * </data> * </item> * </publish> * </pubsub> * </iq> * * <iq type='set' from='[email protected]/chamber' id='publish2'> * <pubsub xmlns='http://jabber.org/protocol/pubsub'> * <publish node='urn:xmpp:avatar:metadata'> * <item id='111f4b3c50d7b0df729d299bc6f8e9ef9066971f'> * <metadata xmlns='urn:xmpp:avatar:metadata'> * <info bytes='12345' * id='111f4b3c50d7b0df729d299bc6f8e9ef9066971f' * height='64' * type='image/png' * width='64'/> * </metadata> * </item> * </publish> * </pubsub> * </iq> */ var pIq = new PubSubIq { Type = IqType.Set }; // publish tag var publish = new Publish { Node = Namespaces.AvatarMetadata }; // metadata Tag including the info child var metaData = new Metadata() { Info = new Info { CountBytes = avatarBytes.Length, Id = Hash.Sha1HashHex(avatarBytes), Height = height, Width = width, Type = contentType } }; var item = new Item { Id = metaData.Info.Id }; item.Add(metaData); publish.AddItem(item); pIq.PubSub.Publish = publish; return(pIq); }