aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/impl/protocol/icq/InfoRetreiver.java
diff options
context:
space:
mode:
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.java65
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);
}
/**