From bfdc99f475b385fbfe9f2f55ff1a03f0fd8a91cd Mon Sep 17 00:00:00 2001 From: Yana Stamcheva Date: Wed, 17 Feb 2010 17:11:29 +0000 Subject: [PATCH] - Fixes issue #780 (Online contact not displayed in the contact list). - Fixes avatar refresh problem. --- .../impl/contactlist/MclStorageManager.java | 10 ++++++++ .../impl/contactlist/MetaContactImpl.java | 3 +++ .../MetaContactListServiceImpl.java | 9 +++++-- .../gui/main/chat/MetaContactChatSession.java | 2 ++ .../gui/main/contactlist/ContactList.java | 2 ++ .../gui/main/contactlist/TreeContactList.java | 25 +++++++++++++++++++ ...java => MetaContactAvatarUpdateEvent.java} | 6 ++--- .../event/MetaContactListListener.java | 6 +++++ .../event/MetaContactPropertyChangeEvent.java | 4 +-- .../contactlist/TestMetaContactList.java | 10 ++++++++ 10 files changed, 70 insertions(+), 7 deletions(-) rename src/net/java/sip/communicator/service/contactlist/event/{MetaContactAvatarUpdate.java => MetaContactAvatarUpdateEvent.java} (88%) diff --git a/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java b/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java index 321019305..32d1d5a41 100644 --- a/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java +++ b/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java @@ -2056,4 +2056,14 @@ private static StoredProtoContactDescriptor findContactInList( return null; } } + + /** + * Indicates that a new avatar is available for a MetaContact. + * @param evt the MetaContactAvatarUpdateEvent containing details + * of this event + */ + public void metaContactAvatarUpdated(MetaContactAvatarUpdateEvent evt) + { + // TODO: Store meta contact avatar. + } } diff --git a/src/net/java/sip/communicator/impl/contactlist/MetaContactImpl.java b/src/net/java/sip/communicator/impl/contactlist/MetaContactImpl.java index a7e15c4cf..d95682f06 100644 --- a/src/net/java/sip/communicator/impl/contactlist/MetaContactImpl.java +++ b/src/net/java/sip/communicator/impl/contactlist/MetaContactImpl.java @@ -619,6 +619,9 @@ void addProtoContact(Contact contact) this.protoContacts.add(contact); + // Re-init the default contact. + defaultContact = null; + // if this is our firt contact and we don't already have a display // name, use theirs. if (this.protoContacts.size() == 1 diff --git a/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java b/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java index 8086b94b6..598a40e9c 100644 --- a/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java +++ b/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java @@ -817,10 +817,10 @@ public void changeMetaContactAvatar(MetaContact metaContact, } byte[] oldAvatar = metaContact.getAvatar(true); - ((MetaContactImpl)metaContact).cacheAvatar(protoContact, newAvatar); + ((MetaContactImpl) metaContact).cacheAvatar(protoContact, newAvatar); fireMetaContactEvent( - new MetaContactAvatarUpdate(metaContact, oldAvatar, newAvatar)); + new MetaContactAvatarUpdateEvent(metaContact, oldAvatar, newAvatar)); } /** @@ -2565,6 +2565,11 @@ else if (event instanceof MetaContactModifiedEvent) { listener.metaContactModified( (MetaContactModifiedEvent) event); } + else if (event instanceof MetaContactAvatarUpdateEvent) + { + listener.metaContactAvatarUpdated( + (MetaContactAvatarUpdateEvent) event); + } } } diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/MetaContactChatSession.java b/src/net/java/sip/communicator/impl/gui/main/chat/MetaContactChatSession.java index 73bac3108..92fd7f13b 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/MetaContactChatSession.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/MetaContactChatSession.java @@ -398,6 +398,8 @@ public void metaContactMoved(MetaContactMovedEvent evt) public void metaContactRemoved(MetaContactEvent evt) {} + public void metaContactAvatarUpdated(MetaContactAvatarUpdateEvent evt) {} + /** * Implements MetaContactListListener.metaContactRenamed method. * When a meta contact is renamed, updates all related labels in this diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java index 5b1837956..73ca46c84 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java @@ -217,6 +217,8 @@ public void metaContactMoved(MetaContactMovedEvent evt) this.modifyGroup(evt.getOldParent()); } + public void metaContactAvatarUpdated(MetaContactAvatarUpdateEvent evt) {} + /** * Handles the MetaContactGroupEvent. Refreshes the list model * when a new meta contact group has been added. diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java index 3bc4f2266..8707d7942 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java @@ -328,6 +328,31 @@ public void run() }); } + /** + * Notifies the tree model, when the MetaContact avatar has been + * modified in the MetaContactListService. + * @param evt the MetaContactEvent that notified us + */ + public void metaContactAvatarUpdated(MetaContactAvatarUpdateEvent evt) + { + final MetaContact metaContact = evt.getSourceMetaContact(); + + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + if (currentFilter.isMatching(metaContact)) + { + ContactNode contactNode + = treeModel.findContactNodeByMetaContact(metaContact); + + if (contactNode != null) + treeModel.nodeChanged(contactNode); + } + } + }); + } + /** * Adds a contact node corresponding to the parent MetaContact if * this last is matching the current filter and wasn't previously contained diff --git a/src/net/java/sip/communicator/service/contactlist/event/MetaContactAvatarUpdate.java b/src/net/java/sip/communicator/service/contactlist/event/MetaContactAvatarUpdateEvent.java similarity index 88% rename from src/net/java/sip/communicator/service/contactlist/event/MetaContactAvatarUpdate.java rename to src/net/java/sip/communicator/service/contactlist/event/MetaContactAvatarUpdateEvent.java index ff31caf40..173d4363a 100644 --- a/src/net/java/sip/communicator/service/contactlist/event/MetaContactAvatarUpdate.java +++ b/src/net/java/sip/communicator/service/contactlist/event/MetaContactAvatarUpdateEvent.java @@ -13,7 +13,7 @@ * * @author Emil Ivov */ -public class MetaContactAvatarUpdate +public class MetaContactAvatarUpdateEvent extends MetaContactPropertyChangeEvent { /** @@ -23,11 +23,11 @@ public class MetaContactAvatarUpdate * @param oldAvatar the new avatar just of this meta contact. * @param newAvatar the old avatar that just got replaced or null. */ - public MetaContactAvatarUpdate(MetaContact source, + public MetaContactAvatarUpdateEvent(MetaContact source, byte[] oldAvatar, byte[] newAvatar) { - super(source, PROTO_CONTACT_AVATAR_UPDATE, oldAvatar, newAvatar); + super(source, META_CONTACT_AVATAR_UPDATE, oldAvatar, newAvatar); } /** diff --git a/src/net/java/sip/communicator/service/contactlist/event/MetaContactListListener.java b/src/net/java/sip/communicator/service/contactlist/event/MetaContactListListener.java index c5bce07c1..f2b760260 100644 --- a/src/net/java/sip/communicator/service/contactlist/event/MetaContactListListener.java +++ b/src/net/java/sip/communicator/service/contactlist/event/MetaContactListListener.java @@ -119,4 +119,10 @@ public interface MetaContactListListener */ public void metaContactModified(MetaContactModifiedEvent evt); + /** + * Indicates that a new avatar is available for a MetaContact. + * @param evt the MetaContactAvatarUpdateEvent containing details + * of this event + */ + public void metaContactAvatarUpdated(MetaContactAvatarUpdateEvent evt); } diff --git a/src/net/java/sip/communicator/service/contactlist/event/MetaContactPropertyChangeEvent.java b/src/net/java/sip/communicator/service/contactlist/event/MetaContactPropertyChangeEvent.java index 73a141bf9..602aba1af 100644 --- a/src/net/java/sip/communicator/service/contactlist/event/MetaContactPropertyChangeEvent.java +++ b/src/net/java/sip/communicator/service/contactlist/event/MetaContactPropertyChangeEvent.java @@ -54,8 +54,8 @@ public abstract class MetaContactPropertyChangeEvent * Indicates that the MetaContactEvent instance was triggered by the update * of an Avatar for one of its encapsulated contacts. */ - public static final String PROTO_CONTACT_AVATAR_UPDATE - = "ProtoContactAvatarUpdate"; + public static final String META_CONTACT_AVATAR_UPDATE + = "MetaContactAvatarUpdate"; /** * Indicates that the meta contact has been modified. The old and new value diff --git a/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java b/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java index 55d96de2e..987aef801 100644 --- a/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java +++ b/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java @@ -1235,5 +1235,15 @@ public void childContactsReordered(MetaContactGroupEvent evt) { collectedMetaContactGroupEvents.add(evt); } + + /** + * Indicates that the avatar of a MetaContact has been updated. + * @param evt the MetaContactAvatarUpdateEvent containing + * details of this event + */ + public void metaContactAvatarUpdated(MetaContactAvatarUpdateEvent evt) + { + collectedMetaContactGroupEvents.add(evt); + } } }