Fixes contact list issue with duplicated contacts.

cusax-fix
hristoterezov 12 years ago
parent 79214016b4
commit dfac8a056e

@ -311,20 +311,36 @@ private void addMatching( MetaContactGroup metaGroup,
UIContact newUIContact; UIContact newUIContact;
synchronized (metaContact) synchronized (metaContact)
{ {
newUIContact = MetaContactListSource newUIContact
.createUIContact(metaContact); = MetaContactListSource.getUIContact(metaContact);
}
if (newUIContact == null)
{
newUIContact = MetaContactListSource
.createUIContact(metaContact);
GuiActivator.getContactList().addContact(
newUIContact,
uiGroup,
true,
true);
}
GuiActivator.getContactList().addContact( }
newUIContact,
uiGroup,
true,
true);
query.setInitialResultCount(resultCount); query.setInitialResultCount(resultCount);
} }
else else
query.fireQueryEvent(metaContact); {
synchronized (metaContact)
{
if (MetaContactListSource.getUIContact(metaContact)
== null)
{
query.fireQueryEvent(metaContact);
}
}
}
} }
} }

@ -569,24 +569,34 @@ private void createMetaUIRootGroup()
{ {
MetaContactGroup rootGroup MetaContactGroup rootGroup
= GuiActivator.getContactListService().getRoot(); = GuiActivator.getContactListService().getRoot();
UIGroup uiGroup = MetaContactListSource UIGroup uiGroup;
.getUIGroup(rootGroup); synchronized (rootGroup)
{
if (uiGroup != null) uiGroup = MetaContactListSource
return; .getUIGroup(rootGroup);
uiGroup = MetaContactListSource if (uiGroup != null)
.createUIGroup(rootGroup); return;
uiGroup = MetaContactListSource
.createUIGroup(rootGroup);
}
treeModel.getRoot().sortedAddContactGroup((UIGroupImpl)uiGroup); treeModel.getRoot().sortedAddContactGroup((UIGroupImpl)uiGroup);
Iterator<MetaContact> i = rootGroup.getChildContacts(); Iterator<MetaContact> i = rootGroup.getChildContacts();
while (i.hasNext()) while (i.hasNext())
{ {
MetaContact contact = i.next(); MetaContact contact = i.next();
UIContact uiContact = MetaContactListSource.getUIContact(contact); UIContact uiContact;
removeContact(uiContact); synchronized (contact)
uiContact = MetaContactListSource.createUIContact(contact); {
uiContact
= MetaContactListSource.getUIContact(contact);
if(uiContact == null)
continue;
removeContact(uiContact);
uiContact = MetaContactListSource.createUIContact(contact);
}
if (currentFilter.isMatching(uiContact)) if (currentFilter.isMatching(uiContact))
addContact(uiContact, uiGroup, true, true); addContact(uiContact, uiGroup, true, true);
else else
@ -602,11 +612,15 @@ private void removeMetaUIRootGroup()
MetaContactGroup rootGroup MetaContactGroup rootGroup
= GuiActivator.getContactListService().getRoot(); = GuiActivator.getContactListService().getRoot();
UIGroup uiGroup = MetaContactListSource UIGroup uiGroup;
.getUIGroup(rootGroup); synchronized (rootGroup)
{
uiGroup = MetaContactListSource
.getUIGroup(rootGroup);
if (uiGroup == null) if (uiGroup == null)
return; return;
}
GroupNode parentNode = treeModel.getRoot(); GroupNode parentNode = treeModel.getRoot();
@ -614,10 +628,16 @@ private void removeMetaUIRootGroup()
while (i.hasNext()) while (i.hasNext())
{ {
MetaContact contact = i.next(); MetaContact contact = i.next();
UIContact uiContact UIContact uiContact;
= MetaContactListSource.getUIContact(contact); synchronized (contact)
removeContact(uiContact); {
uiContact = MetaContactListSource.createUIContact(contact); uiContact
= MetaContactListSource.getUIContact(contact);
if(uiContact == null)
continue;
removeContact(uiContact);
uiContact = MetaContactListSource.createUIContact(contact);
}
if (currentFilter.isMatching(uiContact)) if (currentFilter.isMatching(uiContact))
addContact(uiContact, treeModel.getRoot().getGroupDescriptor(), addContact(uiContact, treeModel.getRoot().getGroupDescriptor(),
true, true); true, true);

@ -258,22 +258,40 @@ public void queryMetaContactSource(Pattern filterPattern,
} }
UIContact newUIContact; UIContact newUIContact;
boolean uiContactCreated = false;
synchronized (metaContact) synchronized (metaContact)
{ {
newUIContact newUIContact
= MetaContactListSource.createUIContact(metaContact); = MetaContactListSource.getUIContact(metaContact);
}
if (newUIContact == null)
{
newUIContact
= MetaContactListSource
.createUIContact(metaContact);
GuiActivator.getContactList().addContact(
newUIContact,
uiGroup,
true,
true);
}
GuiActivator.getContactList().addContact( }
newUIContact,
uiGroup,
true,
true);
query.setInitialResultCount(resultCount); query.setInitialResultCount(resultCount);
} }
else else
query.fireQueryEvent(metaContact); {
synchronized (metaContact)
{
if (MetaContactListSource.getUIContact(metaContact)
== null)
{
query.fireQueryEvent(metaContact);
}
}
}
} }
} }

Loading…
Cancel
Save