diff options
Diffstat (limited to 'src/net/java/sip/communicator/impl/protocol/icq/InfoRetreiver.java')
-rw-r--r-- | src/net/java/sip/communicator/impl/protocol/icq/InfoRetreiver.java | 65 |
1 files changed, 45 insertions, 20 deletions
diff --git a/src/net/java/sip/communicator/impl/protocol/icq/InfoRetreiver.java b/src/net/java/sip/communicator/impl/protocol/icq/InfoRetreiver.java index c9c1d7a..16b9986 100644 --- a/src/net/java/sip/communicator/impl/protocol/icq/InfoRetreiver.java +++ b/src/net/java/sip/communicator/impl/protocol/icq/InfoRetreiver.java @@ -113,37 +113,62 @@ public class InfoRetreiver */ protected List<GenericDetail> getContactDetails(String uin) { - List<GenericDetail> result = retreivedDetails.get(uin); + List<GenericDetail> result = getCachedContactDetails(uin); if(result == null) { - int reqID = requestID++; + return retrieveDetails(uin); + } + + return result; + } - //retrieve the details - long toICQUin = Long.parseLong(uin); - MetaFullInfoRequest infoRequest = - new MetaFullInfoRequest( - Long.parseLong(ownerUin), - reqID, - toICQUin); + /** + * Retrieve details and return them or if missing return an empty list. + * @param uin the uin to search for. + * @return the details or empty list. + */ + protected List<GenericDetail> retrieveDetails(String uin) + { + int reqID = requestID++; - UserInfoResponseRetriever responseRetriever = - new UserInfoResponseRetriever(reqID); + //retrieve the details + long toICQUin = Long.parseLong(uin); + MetaFullInfoRequest infoRequest = + new MetaFullInfoRequest( + Long.parseLong(ownerUin), + reqID, + toICQUin); - icqProvider.getAimConnection().getInfoService().getOscarConnection() - .sendSnacRequest(infoRequest, responseRetriever); + UserInfoResponseRetriever responseRetriever = + new UserInfoResponseRetriever(reqID); - responseRetriever.waitForLastInfo(60000); + icqProvider.getAimConnection().getInfoService().getOscarConnection() + .sendSnacRequest(infoRequest, responseRetriever); - result = responseRetriever.result; + responseRetriever.waitForLastInfo(60000); - if (result == null) - result = new LinkedList<GenericDetail>(); + List<GenericDetail> result = responseRetriever.result; - retreivedDetails.put(uin, result); - } + if (result == null) + result = new LinkedList<GenericDetail>(); - return new LinkedList<GenericDetail>(result); + // put even empty result to bypass further retrieve + retreivedDetails.put(uin, responseRetriever.result); + + return responseRetriever.result; + } + + /** + * Request the full info for the given uin if available in cache, + * if missing return null. + * + * @param uin to search for in cache. + * @return list of details. + */ + protected List<GenericDetail> getCachedContactDetails(String uin) + { + return retreivedDetails.get(uin); } /** |