summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode/stroke/vcards/VCardManager.java')
-rw-r--r--src/com/isode/stroke/vcards/VCardManager.java19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/com/isode/stroke/vcards/VCardManager.java b/src/com/isode/stroke/vcards/VCardManager.java
index 2a7837c..a5b62e8 100644
--- a/src/com/isode/stroke/vcards/VCardManager.java
+++ b/src/com/isode/stroke/vcards/VCardManager.java
@@ -14,12 +14,14 @@ import com.isode.stroke.queries.IQRouter;
import com.isode.stroke.signals.Signal1;
import com.isode.stroke.signals.Signal2;
import com.isode.stroke.signals.Slot2;
+import java.util.Date;
+import java.util.TimeZone;
public class VCardManager {
- private final JID ownJID;
- private final IQRouter iqRouter;
- private final VCardStorage storage;
- private final Set<JID> requestedVCards = new HashSet<JID>();
+ private JID ownJID = new JID();
+ private IQRouter iqRouter;
+ private VCardStorage storage;
+ private Set<JID> requestedVCards = new HashSet<JID>();
/**
* The JID will always be bare.
@@ -37,6 +39,7 @@ public class VCardManager {
this.ownJID = ownJID;
this.iqRouter = iqRouter;
this.storage = vcardStorage;
+ TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
public void delete() {
@@ -47,8 +50,14 @@ public class VCardManager {
}
public VCard getVCardAndRequestWhenNeeded(final JID jid) {
+ return getVCardAndRequestWhenNeeded(jid, null);
+ }
+
+ public VCard getVCardAndRequestWhenNeeded(final JID jid, final Date allowedAge) {
VCard vcard = storage.getVCard(jid);
- if (vcard == null) {
+ Date vcardFetchedTime = storage.getVCardWriteTime(jid);
+ boolean vcardTooOld = (vcard != null) && (vcardFetchedTime == null || (allowedAge != null && ((new Date().getTime() - vcardFetchedTime.getTime()) > allowedAge.getTime())));
+ if (vcard == null || vcardTooOld) {
requestVCard(jid);
}
return vcard;