/// <summary> /// TODO: Documentation ProcessRosterItem /// </summary> /// <param name="ri"></param> private void ProcessRosterItem(Item ri) { bool remove = ri.Subscription == Subscription.remove; LinkedList nodelist = m_items[ri.JID.ToString()] as LinkedList; 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) { this.RemoveItemNode(i); } nodelist.Clear(); if (remove) { m_items.Remove(ri.JID.ToString()); } } if (remove) { return; } if (this.ExcludeRosterItem(ri)) { return; } // add the new ones back Hashtable ghash = new Hashtable(); Group[] groups = ri.GetGroups(); foreach (Group g in groups) { if (String.IsNullOrEmpty(g.GroupName)) { g.GroupName = this.Unfiled; } } if (groups.Length == 0) { groups = new Group[] { new Group(ri.OwnerDocument) }; groups[0].GroupName = this.Unfiled; } foreach (Group g in groups) { // might have the same group twice. if (ghash.Contains(g.GroupName)) { continue; } ghash.Add(g.GroupName, g); if (this.Client.SupportNestedGroups) { IEnumerable <String> groupies = this.ConstructNestedGroupList(g.GroupName); Boolean useContinue = false; foreach (String groupie in groupies) { if (this.m_excludedGroups.ContainsKey(groupie)) { useContinue = true; break; } } if (useContinue) { continue; } } else { if (this.m_excludedGroups.ContainsKey(g.GroupName)) { continue; } } ItemNode i = new ItemNode(ri); i.ChangePresence(m_pres[ri.JID]); nodelist.Add(i); GroupNode gn = this.AddGroupNode(g); gn.Nodes.Add(i); } }
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); } }
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); } }
/// <summary> /// TODO: Documentation ProcessRosterItem /// </summary> /// <param name="ri"></param> private void ProcessRosterItem(Item ri) { bool remove = ri.Subscription == Subscription.remove; LinkedList nodelist = m_items[ri.JID.ToString()] as LinkedList; 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) this.RemoveItemNode(i); nodelist.Clear(); if (remove) m_items.Remove(ri.JID.ToString()); } if (remove) return; if (this.ExcludeRosterItem(ri)) return; // add the new ones back Hashtable ghash = new Hashtable(); Group[] groups = ri.GetGroups(); foreach (Group g in groups) { if (String.IsNullOrEmpty(g.GroupName)) g.GroupName = this.Unfiled; } if (groups.Length == 0) { groups = new Group[] { new Group(ri.OwnerDocument) }; groups[0].GroupName = this.Unfiled; } foreach (Group g in groups) { // might have the same group twice. if (ghash.Contains(g.GroupName)) continue; ghash.Add(g.GroupName, g); if (this.Client.SupportNestedGroups) { IEnumerable<String> groupies = this.ConstructNestedGroupList(g.GroupName); Boolean useContinue = false; foreach (String groupie in groupies) { if (this.m_excludedGroups.ContainsKey(groupie)) { useContinue = true; break; } } if (useContinue) continue; } else { if (this.m_excludedGroups.ContainsKey(g.GroupName)) continue; } ItemNode i = new ItemNode(ri); i.ChangePresence(m_pres[ri.JID]); nodelist.Add(i); GroupNode gn = this.AddGroupNode(g); gn.Nodes.Add(i); } }