internal DiscoNode AddItem(DiscoManager manager, DiscoItem di) { DiscoNode dn = manager.GetNode(di.Jid, di.Node); if ((di.Named != null) && (di.Named != "")) dn.Name = di.Named; Children.Add(dn); return dn; }
/// <summary> /// Adds the given items to the cache. /// </summary> /// <param name="manager">The DiscoManager used to create/cache nodes</param> /// <param name="items">Items to add.</param> public void AddItems(DiscoManager manager, DiscoItem[] items) { if (Children == null) Children = new Set(); // items may be null when used from outside. if (items != null) { foreach (DiscoItem di in items) AddItem(manager, di); } DoCallbacks(m_itemCallbacks); }
private void GotAgents(object sender, IQ iq, object onode) { DiscoNode dn = onode as DiscoNode; Debug.Assert(dn != null); if (iq.Type != IQType.result) { dn.AddItems(this, null); return; } AgentsQuery aq = iq.Query as AgentsQuery; if (aq == null) { dn.AddItems(this, null); return; } if (dn.Children == null) dn.Children = new Set(); foreach (Agent agent in aq.GetAgents()) { DiscoItem di = new DiscoItem(m_stream.Document); di.Jid = agent.JID; di.Named = agent.AgentName; DiscoNode child = dn.AddItem(this, di); if (child.Features == null) child.Features = new StringSet(); if (child.Identity == null) child.Identity = new Set(); Ident id = new Ident(); id.Name = agent.Description; switch (agent.Service) { case "groupchat": id.Category = "conference"; id.Type = "text"; child.Identity.Add(id); break; case "jud": id.Category = "directory"; id.Type = "user"; child.Identity.Add(id); break; case null: case "": break; default: // guess this is a transport id.Category = "gateway"; id.Type = agent.Service; child.Identity.Add(id); break; } if (agent.Register) child.Features.Add(URI.REGISTER); if (agent.Search) child.Features.Add(URI.SEARCH); if (agent.Groupchat) child.Features.Add(URI.MUC); if (agent.Transport) { if (id.Category != "gateway") { Ident tid = new Ident(); tid.Name = id.Name; tid.Category = "gateway"; child.Identity.Add(tid); } } foreach (XmlElement ns in agent.GetElementsByTagName("ns")) { child.Features.Add(ns.InnerText); } child.AddItems(this, null); child.AddIdentities(null); child.AddFeatures((StringSet)null); } dn.AddItems(this, null); dn.AddIdentities(null); dn.AddFeatures((StringSet)null); }