コード例 #1
0
ファイル: RosterTree.cs プロジェクト: JustOxlamon/TwoRatChat
 /// <summary>
 /// Create an ItemNode
 /// </summary>
 /// <param name="ri">The roster item to create from</param>
 public ItemNode(jabber.protocol.iq.Item ri)
 {
     m_item = ri;
     m_nick = ri.Nickname;
     if ((m_nick == null) || (m_nick == ""))
     {
         m_nick = ri.JID.User;
         if ((m_nick == null) || (m_nick == ""))
         {
             m_nick = ri.JID.ToString(); // punt.
         }
     }
     this.Text = m_nick;
 }
コード例 #2
0
ファイル: RosterTree.cs プロジェクト: eNoise/cyclops-chat
 /// <summary>
 /// Create an ItemNode
 /// </summary>
 /// <param name="ri">The roster item to create from</param>
 public ItemNode(jabber.protocol.iq.Item ri)
 {
     m_item = ri;
     m_nick = ri.Nickname;
     if ((m_nick == null) || (m_nick == ""))
     {
         m_nick = ri.JID.User;
         if ((m_nick == null) || (m_nick == ""))
             m_nick = ri.JID.ToString(); // punt.
     }
     this.Text = m_nick;
 }
コード例 #3
0
ファイル: RosterTree.cs プロジェクト: JustOxlamon/TwoRatChat
        private void m_roster_OnRosterItem(object sender, jabber.protocol.iq.Item ri)
        {
            bool remove = (ri.Subscription == Subscription.remove);

            LinkedList nodelist = (LinkedList)m_items[ri.JID.ToString()];

            if (nodelist == null)
            {
                // First time through.
                if (!remove)
                {
                    nodelist = new LinkedList();
                    m_items.Add(ri.JID.ToString(), nodelist);
                }
            }
            else
            {
                // update to an existing item.  remove all of them, and start over.
                foreach (ItemNode i in nodelist)
                {
                    GroupNode gn = i.Parent as GroupNode;
                    i.Remove();
                    if ((gn != null) && (gn.Nodes.Count == 0))
                    {
                        m_groups.Remove(gn.GroupName);
                        gn.Remove();
                    }
                }
                nodelist.Clear();
                if (remove)
                {
                    m_items.Remove(ri.JID.ToString());
                }
            }

            if (remove)
            {
                return;
            }

            // add the new ones back
            Hashtable ghash = new Hashtable();

            Group[] groups = ri.GetGroups();
            for (int i = groups.Length - 1; i >= 0; i--)
            {
                if (groups[i].GroupName == "")
                {
                    groups[i].GroupName = UNFILED;
                }
            }

            if (groups.Length == 0)
            {
                groups = new Group[] { new Group(ri.OwnerDocument) };
                groups[0].GroupName = UNFILED;
            }

            foreach (Group g in groups)
            {
                GroupNode gn = AddGroupNode(g);
                // might have the same group twice.
                if (ghash.Contains(g.GroupName))
                {
                    continue;
                }
                ghash.Add(g.GroupName, g);

                ItemNode i = new ItemNode(ri);
                i.ChangePresence(m_pres[ri.JID]);
                nodelist.Add(i);
                gn.Nodes.Add(i);
            }
        }