From 8a22c637b84d111dfce6020f471d9b5ebfbb930a Mon Sep 17 00:00:00 2001 From: Damian Minkov Date: Mon, 12 Mar 2007 10:01:55 +0000 Subject: Added icon support for ICQ --- .../impl/protocol/icq/ContactIcqImpl.java | 12 ++++++- .../icq/OperationSetPersistentPresenceIcqImpl.java | 40 +++++++++++++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) (limited to 'src/net/java/sip/communicator/impl/protocol') diff --git a/src/net/java/sip/communicator/impl/protocol/icq/ContactIcqImpl.java b/src/net/java/sip/communicator/impl/protocol/icq/ContactIcqImpl.java index 6e13966..acc0587 100644 --- a/src/net/java/sip/communicator/impl/protocol/icq/ContactIcqImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/icq/ContactIcqImpl.java @@ -320,4 +320,14 @@ public class ContactIcqImpl } } } -} + + /** + * Used to set the image of the contact if it is updated + * + * @param nickname String the value + */ + protected void setImage(byte[] image) + { + this.image = image; + } +} \ No newline at end of file diff --git a/src/net/java/sip/communicator/impl/protocol/icq/OperationSetPersistentPresenceIcqImpl.java b/src/net/java/sip/communicator/impl/protocol/icq/OperationSetPersistentPresenceIcqImpl.java index e6ab231..d1c55c9 100644 --- a/src/net/java/sip/communicator/impl/protocol/icq/OperationSetPersistentPresenceIcqImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/icq/OperationSetPersistentPresenceIcqImpl.java @@ -14,6 +14,7 @@ import net.java.sip.communicator.service.protocol.event.*; import net.java.sip.communicator.service.protocol.icqconstants.*; import net.java.sip.communicator.service.protocol.AuthorizationResponse.*; import net.java.sip.communicator.util.*; +import net.kano.joscar.*; import net.kano.joscar.flapcmd.*; import net.kano.joscar.snac.*; import net.kano.joscar.snaccmd.*; @@ -25,6 +26,7 @@ import net.kano.joustsim.oscar.*; import net.kano.joustsim.oscar.oscar.service.bos.*; import net.kano.joustsim.oscar.oscar.service.buddy.*; import net.kano.joustsim.oscar.oscar.service.ssi.*; +import net.kano.joustsim.oscar.oscar.service.icon.*; /** @@ -1240,6 +1242,10 @@ public class OperationSetPersistentPresenceIcqImpl // contacts and we really need it here ...*/ icqProvider.getAimConnection().getBuddyInfoManager() .addGlobalBuddyInfoListener(new GlobalBuddyInfoListener()); + + icqProvider.getAimConnection().getExternalServiceManager(). + getIconServiceArbiter().addIconRequestListener( + new IconUpdateListener()); } else if(evt.getNewState() == RegistrationState.UNREGISTERED || evt.getNewState() == RegistrationState.AUTHENTICATION_FAILED @@ -1563,4 +1569,36 @@ public class OperationSetPersistentPresenceIcqImpl logger.trace("youWereAdded from " + screenname); } } -} + + /** + * Notified if buddy icon is changed + */ + private class IconUpdateListener + implements IconRequestListener + { + public void buddyIconCleared(IconService iconService, Screenname screenname, ExtraInfoData extraInfoData) + { + updateBuddyyIcon(screenname, null); + } + + public void buddyIconUpdated(IconService iconService, Screenname screenname, ExtraInfoData extraInfoData, ByteBlock byteBlock) + { + if(byteBlock != null) + updateBuddyyIcon(screenname, byteBlock.toByteArray()); + } + + /** + * Changes the Contact image + * @param screenname the contact screenname + * @param icon byte array representing the image + */ + private void updateBuddyyIcon(Screenname screenname, byte[] icon) + { + ContactIcqImpl contact = + ssContactList.findContactByScreenName(screenname.getFormatted()); + + if(contact != null) + contact.setImage(icon); + } + } +} \ No newline at end of file -- cgit v1.1