mirror of https://github.com/sipwise/jitsi.git
parent
040fd6c87a
commit
ac02a2151c
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
|
||||
*
|
||||
* Distributable under LGPL license. See terms of license at gnu.org.
|
||||
*/
|
||||
package net.java.sip.communicator.impl.protocol.jabber;
|
||||
|
||||
import net.java.sip.communicator.service.protocol.*;
|
||||
|
||||
/**
|
||||
* A simple implementation of the <tt>OperationSetAvatar</tt> interface for the
|
||||
* jabber protocol.
|
||||
*
|
||||
* Actually there isn't any maximum size for the jabber protocol but GoogleTalk
|
||||
* fix it a 96x96.
|
||||
*
|
||||
* @author Damien Roth
|
||||
*/
|
||||
public class OperationSetAvatarJabberImpl extends
|
||||
AbstractOperationSetAvatar<ProtocolProviderServiceJabberImpl>
|
||||
{
|
||||
|
||||
public OperationSetAvatarJabberImpl(
|
||||
ProtocolProviderServiceJabberImpl parentProvider,
|
||||
OperationSetServerStoredAccountInfo accountInfoOpSet)
|
||||
{
|
||||
super(parentProvider, accountInfoOpSet, 96, 96, 0);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,158 @@
|
||||
/*
|
||||
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
|
||||
*
|
||||
* Distributable under LGPL license. See terms of license at gnu.org.
|
||||
*/
|
||||
package net.java.sip.communicator.service.protocol;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import net.java.sip.communicator.service.protocol.ServerStoredDetails.*;
|
||||
import net.java.sip.communicator.service.protocol.event.*;
|
||||
import net.java.sip.communicator.util.Logger;
|
||||
|
||||
/**
|
||||
* Represents a default implementation of {@link OperationSetAvatar} in order to
|
||||
* make it easier for implementers to provide complete solutions while focusing
|
||||
* on implementation-specific details.
|
||||
*
|
||||
* @author Damien Roth
|
||||
*/
|
||||
public abstract class AbstractOperationSetAvatar<T extends ProtocolProviderService>
|
||||
implements OperationSetAvatar
|
||||
{
|
||||
private static Logger logger = Logger
|
||||
.getLogger(AbstractOperationSetAvatar.class);
|
||||
|
||||
/**
|
||||
* The maximum avatar width. Zero mean no maximum
|
||||
*/
|
||||
private int maxWidth = 0;
|
||||
|
||||
/**
|
||||
* The maximum avatar height. Zero mean no maximum
|
||||
*/
|
||||
private int maxHeight = 0;
|
||||
|
||||
/**
|
||||
* The maximum avatar size. Zero mean no maximum
|
||||
*/
|
||||
private int maxSize = 0;
|
||||
|
||||
/**
|
||||
* The provider that created us.
|
||||
*/
|
||||
private T parentProvider;
|
||||
|
||||
private OperationSetServerStoredAccountInfo accountInfoOpSet;
|
||||
|
||||
/**
|
||||
* The list of listeners interested in <tt>AvatarEvent</tt>s.
|
||||
*/
|
||||
private List<AvatarListener> avatarListeners = new ArrayList<AvatarListener>();
|
||||
|
||||
protected AbstractOperationSetAvatar(T parentProvider,
|
||||
OperationSetServerStoredAccountInfo accountInfoOpSet, int maxWidth,
|
||||
int maxHeight, int maxSize)
|
||||
{
|
||||
this.parentProvider = parentProvider;
|
||||
this.accountInfoOpSet = accountInfoOpSet;
|
||||
|
||||
this.maxWidth = maxWidth;
|
||||
this.maxHeight = maxHeight;
|
||||
this.maxSize = maxSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxWidth()
|
||||
{
|
||||
return this.maxWidth;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxHeight()
|
||||
{
|
||||
return this.maxHeight;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxSize()
|
||||
{
|
||||
return this.maxSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getAvatar()
|
||||
{
|
||||
return AccountInfoUtils.getImage(this.accountInfoOpSet);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public void setAvatar(byte[] avatar)
|
||||
{
|
||||
ImageDetail oldDetail = null;
|
||||
ImageDetail newDetail = new ImageDetail("avatar", avatar);
|
||||
|
||||
Iterator<GenericDetail> imageDetails = this.accountInfoOpSet
|
||||
.getDetails(ServerStoredDetails.ImageDetail.class);
|
||||
if (imageDetails.hasNext())
|
||||
{
|
||||
oldDetail = (ImageDetail) imageDetails.next();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (oldDetail == null)
|
||||
this.accountInfoOpSet.addDetail(newDetail);
|
||||
else
|
||||
this.accountInfoOpSet.replaceDetail(oldDetail, newDetail);
|
||||
} catch (OperationFailedException e)
|
||||
{
|
||||
logger.warn("Unable to set new avatar", e);
|
||||
}
|
||||
|
||||
fireAvatarChanged(avatar);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addAvatarListener(AvatarListener listener)
|
||||
{
|
||||
synchronized (this.avatarListeners)
|
||||
{
|
||||
if (!this.avatarListeners.contains(listener))
|
||||
this.avatarListeners.add(listener);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeAvatarListener(AvatarListener listener)
|
||||
{
|
||||
synchronized (this.avatarListeners)
|
||||
{
|
||||
if (this.avatarListeners.contains(listener))
|
||||
this.avatarListeners.remove(listener);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Notifies all registered listeners of the new event.
|
||||
*
|
||||
* @param newAvatar
|
||||
* the new avatar
|
||||
*/
|
||||
protected void fireAvatarChanged(byte[] newAvatar)
|
||||
{
|
||||
AvatarEvent event = new AvatarEvent(this, this.parentProvider,
|
||||
newAvatar);
|
||||
|
||||
Collection<AvatarListener> listeners;
|
||||
synchronized (this.avatarListeners)
|
||||
{
|
||||
listeners = new ArrayList<AvatarListener>(this.avatarListeners);
|
||||
}
|
||||
|
||||
for (AvatarListener l : listeners)
|
||||
l.avatarChanged(event);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,77 @@
|
||||
/*
|
||||
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
|
||||
*
|
||||
* Distributable under LGPL license.
|
||||
* See terms of license at gnu.org.
|
||||
*/
|
||||
package net.java.sip.communicator.service.protocol;
|
||||
|
||||
import net.java.sip.communicator.service.protocol.event.AvatarListener;
|
||||
|
||||
/**
|
||||
* This interface is an extension of the operation set, meant to be implemented
|
||||
* by protocols that support user avatar.
|
||||
*
|
||||
* @author Damien Roth
|
||||
*/
|
||||
public interface OperationSetAvatar extends OperationSet
|
||||
{
|
||||
/**
|
||||
* Returns the maximum width of the avatar. This method should return 0
|
||||
* (zero) if there is no maximum width.
|
||||
*
|
||||
* @return the maximum width of the avatar
|
||||
*/
|
||||
public int getMaxWidth();
|
||||
|
||||
/**
|
||||
* Returns the maximum height of the avatar. This method should return 0
|
||||
* (zero) if there is no maximum height.
|
||||
*
|
||||
* @return the maximum height of the avatar
|
||||
*/
|
||||
public int getMaxHeight();
|
||||
|
||||
/**
|
||||
* Returns the maximum size of the avatar. This method should return 0
|
||||
* (zero) if there is no maximum size.
|
||||
*
|
||||
* @return the maximum size of the avatar
|
||||
*/
|
||||
public int getMaxSize();
|
||||
|
||||
/**
|
||||
* Defines a new avatar for this protocol
|
||||
*
|
||||
* @param avatar
|
||||
* the new avatar
|
||||
*/
|
||||
public void setAvatar(byte[] avatar);
|
||||
|
||||
/**
|
||||
* Returns the current avatar of this protocol. May return null if the
|
||||
* account has no avatar
|
||||
*
|
||||
* @param avatar
|
||||
* the new avatar
|
||||
*/
|
||||
public byte[] getAvatar();
|
||||
|
||||
/**
|
||||
* Registers a listener that would receive events upon avatar changes.
|
||||
*
|
||||
* @param listener
|
||||
* a AvatarListener that would receive events upon avatar
|
||||
* changes.
|
||||
*/
|
||||
public void addAvatarListener(AvatarListener listener);
|
||||
|
||||
/**
|
||||
* Removes the specified group change listener so that it won't receive any
|
||||
* further events.
|
||||
*
|
||||
* @param listener
|
||||
* the AvatarListener to remove
|
||||
*/
|
||||
public void removeAvatarListener(AvatarListener listener);
|
||||
}
|
||||
@ -0,0 +1,89 @@
|
||||
/*
|
||||
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
|
||||
*
|
||||
* Distributable under LGPL license.
|
||||
* See terms of license at gnu.org.
|
||||
*/
|
||||
package net.java.sip.communicator.service.protocol.event;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import net.java.sip.communicator.service.protocol.*;
|
||||
|
||||
/**
|
||||
* Instances of this class represent a change avatar of a protocol
|
||||
*
|
||||
* @author Damien Roth
|
||||
*/
|
||||
public class AvatarEvent
|
||||
extends EventObject
|
||||
{
|
||||
/**
|
||||
* The new avatar
|
||||
*/
|
||||
private byte[] newAvatar;
|
||||
|
||||
/**
|
||||
* The provider that has generated the event.
|
||||
*/
|
||||
private ProtocolProviderService sourceProvider;
|
||||
|
||||
/**
|
||||
* Creates an event instance indicating that the specified protocol
|
||||
* has changed its avatar to <tt>newAvatar</tt>.
|
||||
*
|
||||
* @param sourceOp the operation set that generated this event
|
||||
* @param sourceProvider the protocol provider that the contact belongs to
|
||||
* @param newAvatar the new avatar
|
||||
*/
|
||||
public AvatarEvent(OperationSetAvatar sourceOp,
|
||||
ProtocolProviderService sourceProvider, byte[] newAvatar)
|
||||
{
|
||||
super(sourceOp);
|
||||
this.sourceProvider = sourceProvider;
|
||||
this.newAvatar = newAvatar;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the provider that the source belongs to.
|
||||
*
|
||||
* @return the provider that the source belongs to.
|
||||
*/
|
||||
public ProtocolProviderService getSourceProvider()
|
||||
{
|
||||
return this.sourceProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the new avatar
|
||||
* @return the new avatar
|
||||
*/
|
||||
public byte[] getNewAvatar()
|
||||
{
|
||||
return this.newAvatar;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the <tt>OperationSetAvatar</tt> instance that is the source
|
||||
* of this event.
|
||||
*
|
||||
* @return the <tt>OperationSetAvatar</tt> instance that is the source
|
||||
* of this event.
|
||||
*/
|
||||
public OperationSetAvatar getSourceAvatarOperationSet()
|
||||
{
|
||||
return (OperationSetAvatar) getSource();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a String representation of this AvatarEvent
|
||||
*
|
||||
* @return A a <tt>java.lang.String</tt> representation of this AvatarEvent.
|
||||
*/
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buff = new StringBuffer("AvatarEvent-[ Provider=");
|
||||
buff.append(getSourceProvider()).append("]");
|
||||
return buff.toString();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
|
||||
*
|
||||
* Distributable under LGPL license.
|
||||
* See terms of license at gnu.org.
|
||||
*/
|
||||
package net.java.sip.communicator.service.protocol.event;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* The listener interface for receiving geolocation events. The class that is
|
||||
* interested in processing a avatar event implements this interface, and the
|
||||
* object created with that class is registered with the avatar operation set,
|
||||
* using its <code>addAvatarListener</code> method. When a avatar event occurs,
|
||||
* that object's <code>avatarChanged</code> method is invoked.
|
||||
*
|
||||
* @see AvatarEvent
|
||||
*
|
||||
* @author Damien Roth
|
||||
*/
|
||||
public interface AvatarListener
|
||||
extends EventListener
|
||||
{
|
||||
/**
|
||||
* Called whenever a new avatar is defined for one of the protocols that we
|
||||
* have subscribed for.
|
||||
*
|
||||
* @param event the event containg the new image
|
||||
*/
|
||||
public void avatarChanged(AvatarEvent event);
|
||||
}
|
||||
Loading…
Reference in new issue