# HG changeset patch # User Da Risk # Date 1325897020 -3600 # Node ID dc06a2e4d6947cf6513923c6d7c413c4bb1f947b # Parent 4076787c45f77696ee4b08e0609faba7df79b712 Add a MemoryAvatarCache. diff -r 4076787c45f7 -r dc06a2e4d694 src/com/beem/project/beem/smack/avatar/AvatarCache.java --- a/src/com/beem/project/beem/smack/avatar/AvatarCache.java Fri Jan 06 22:46:28 2012 +0100 +++ b/src/com/beem/project/beem/smack/avatar/AvatarCache.java Sat Jan 07 01:43:40 2012 +0100 @@ -57,7 +57,7 @@ * Put some datas in cache. * * @param id the key id of the data - * @param data the datato cache + * @param data the data to cache * @throws IOException if an IO error occurs while caching the data */ void put(String id, byte[] data) throws IOException; diff -r 4076787c45f7 -r dc06a2e4d694 src/com/beem/project/beem/smack/avatar/AvatarManager.java --- a/src/com/beem/project/beem/smack/avatar/AvatarManager.java Fri Jan 06 22:46:28 2012 +0100 +++ b/src/com/beem/project/beem/smack/avatar/AvatarManager.java Sat Jan 07 01:43:40 2012 +0100 @@ -43,23 +43,22 @@ */ package com.beem.project.beem.smack.avatar; +import java.io.IOException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.LinkedList; +import java.util.List; + import com.beem.project.beem.smack.avatar.AvatarMetadataExtension.Info; import com.beem.project.beem.smack.pep.PEPListener; import com.beem.project.beem.smack.pep.PepSubManager; -import java.io.IOException; - -import java.util.List; -import java.util.LinkedList; -import java.security.NoSuchAlgorithmException; -import java.security.MessageDigest; - import org.jivesoftware.smack.Connection; import org.jivesoftware.smack.packet.PacketExtension; +import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smackx.pubsub.Item; +import org.jivesoftware.smackx.pubsub.LeafNode; import org.jivesoftware.smackx.pubsub.PayloadItem; -import org.jivesoftware.smackx.pubsub.LeafNode; -import org.jivesoftware.smack.util.StringUtils; /** * This class deals with the avatar data. @@ -108,7 +107,7 @@ mPep = pepMgr; mAutoDownload = autoDownload; mPep.addPEPListener(new Listener()); - //TODO add a memory cache + mCache = new MemoryAvatarCache(100, 1800000); } /** @@ -158,7 +157,6 @@ try { AvatarRetriever retriever = AvatarRetrieverFactory.getRetriever(mCon, from, info); byte[] avatar = retriever.getAvatar(); - // TODO check the hash before store mCache.put(avatarId, avatar); return true; } catch (IOException e) { diff -r 4076787c45f7 -r dc06a2e4d694 src/com/beem/project/beem/smack/avatar/MemoryAvatarCache.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/com/beem/project/beem/smack/avatar/MemoryAvatarCache.java Sat Jan 07 01:43:40 2012 +0100 @@ -0,0 +1,85 @@ +/* + BEEM is a videoconference application on the Android Platform. + + Copyright (C) 2009 by Frederic-Charles Barthelery, + Jean-Manuel Da Silva, + Nikita Kozlov, + Philippe Lago, + Jean Baptiste Vergely, + Vincent Veronis. + + This file is part of BEEM. + + BEEM is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BEEM is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BEEM. If not, see . + + Please send bug reports with examples or suggestions to + contact@beem-project.com or http://dev.beem-project.com/ + +*/ +package com.beem.project.beem.smack.avatar; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.jivesoftware.smack.util.Cache; + +/** + * An avatar cache which store the avatars in memory. + */ +public class MemoryAvatarCache implements AvatarCache { + private static final int BUFFER_SIZE = 1024; + private Cache mCache; + + /** + * Create a MemoryAvatarCache. + * + * @param maxSize the maximum number of objects the cache will hold. -1 means the cache has no max size. + * @param maxlifetime the maximum amount of time (in ms) objects can exist in cache before being deleted. + * -1 means objects never expire. + */ + public MemoryAvatarCache(final int maxSize, final long maxlifetime) { + mCache = new Cache(maxSize, maxlifetime); + } + + @Override + public void put(String key, byte[] data) throws IOException { + mCache.put(key, data); + } + + @Override + public void put(String key, InputStream in) throws IOException { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + try { + byte[] data = new byte[BUFFER_SIZE]; + int nbread; + while ((nbread = in.read(data)) != -1) + os.write(data, 0, nbread); + } finally { + in.close(); + os.close(); + } + mCache.put(key, os.toByteArray()); + } + + @Override + public byte[] get(String key) throws IOException { + return mCache.get(key); + } + + @Override + public boolean contains(String key) { + return mCache.containsKey(key); + } +}