summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Young <consult.awy@gmail.com>2014-11-13 06:42:37 (GMT)
committerAlan Young <consult.awy@gmail.com>2015-04-10 06:50:58 (GMT)
commit7d2101b93b6253c3ea15b663f7f3dc385cb21364 (patch)
treed81338baf0d117e83cdc07f882cbedd9471e834d /src/com/isode/stroke/vcards/VCardManager.java
parenta20ca7ba40d837abe228462be0aba5d32d6831e3 (diff)
downloadstroke-7d2101b93b6253c3ea15b663f7f3dc385cb21364.zip
stroke-7d2101b93b6253c3ea15b663f7f3dc385cb21364.tar.bz2
Checkpoint - A bunch of initial stuff for Android
MemoryStorages, Storages NickManager, NickResolver CryptoProvider, Hash, SafeByteArray, JavaCryptoProvider CapsInfoGenerator, CapsManager, CapsMemoryStorage, CapsProvider, CapsStorage, CapsInfo CapsInfoSerializer, CapsInfoParser ClientDiscoManager, DiscoInfoResponder, EntityCapsManager, EntityCapsProvider GetDiscoInfoRequest ChatState, Idle Presence, PayloadAddingPresenceSender, PresenceOracle, SubscriptionManager StatusSerializer, StatusShowSerializer, StatusParser, StatusShowParser, Replace, ReplaceParser, ReplaceSerializer SecurityLabel, SecurityLabelsCatalog, GetSecurityLabelsCatalogRequest VCard, GetVCardRequest, SetVCardRequest, VCardManager, VCardMemoryStorage, VCardStorage RosterMemoryStorage, RosterPushResponder, RosterStorage, SetRosterRequest XMPPRoster, XMPPRosterController, XMPPRosterImpl, XMPPRosterItem GetRosterRequest, SetResponder Add parsers and serializers for Idle, VCard, PrivateStorage & Stroage. Add parser for Subject. Add impromptu flag to MUCInvitation. Update copyrights. Change-Id: I9949f506b70e60b3a64f1dadde8f9b235b322e1d
Diffstat (limited to 'src/com/isode/stroke/vcards/VCardManager.java')
-rw-r--r--src/com/isode/stroke/vcards/VCardManager.java115
1 files changed, 115 insertions, 0 deletions
diff --git a/src/com/isode/stroke/vcards/VCardManager.java b/src/com/isode/stroke/vcards/VCardManager.java
new file mode 100644
index 0000000..593d244
--- /dev/null
+++ b/src/com/isode/stroke/vcards/VCardManager.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2010-2015, Isode Limited, London, England.
+ * All rights reserved.
+ */
+package com.isode.stroke.vcards;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import com.isode.stroke.elements.ErrorPayload;
+import com.isode.stroke.elements.VCard;
+import com.isode.stroke.jid.JID;
+import com.isode.stroke.queries.IQRouter;
+import com.isode.stroke.signals.Signal1;
+import com.isode.stroke.signals.Signal2;
+import com.isode.stroke.signals.Slot2;
+
+public class VCardManager {
+ private final JID ownJID;
+ private final IQRouter iqRouter;
+ private final VCardStorage storage;
+ private final Set<JID> requestedVCards = new HashSet<JID>();
+
+ /**
+ * The JID will always be bare.
+ */
+ public final Signal2<JID, VCard> onVCardChanged = new Signal2<JID, VCard>();
+
+ /**
+ * Emitted when our own vcard changes.
+ *
+ * onVCardChanged will also be emitted.
+ */
+ public final Signal1<VCard> onOwnVCardChanged = new Signal1<VCard>();
+
+ public VCardManager(final JID ownJID, IQRouter iqRouter, VCardStorage vcardStorage) {
+ this.ownJID = ownJID;
+ this.iqRouter = iqRouter;
+ this.storage = vcardStorage;
+ }
+
+ void delete() {
+ }
+
+ public VCard getVCard(final JID jid) {
+ return storage.getVCard(jid);
+ }
+
+ public VCard getVCardAndRequestWhenNeeded(final JID jid) {
+ VCard vcard = storage.getVCard(jid);
+ if (vcard == null) {
+ requestVCard(jid);
+ }
+ return vcard;
+ }
+
+ void requestVCard(final JID requestedJID) {
+ final JID jid = requestedJID.compare(ownJID, JID.CompareType.WithoutResource) == 0 ? new JID() : requestedJID;
+ if (requestedVCards.contains(jid)) {
+ return;
+ }
+ GetVCardRequest request = GetVCardRequest.create(jid, iqRouter);
+ request.onResponse.connect(new Slot2<VCard, ErrorPayload>() {
+ @Override
+ public void call(VCard p1, ErrorPayload p2) {
+ handleVCardReceived(jid, p1, p2);
+ }
+ });
+ request.send();
+ requestedVCards.add(jid);
+ }
+
+ public void requestOwnVCard() {
+ requestVCard(new JID());
+ }
+
+
+ void handleVCardReceived(final JID actualJID, VCard vcard, ErrorPayload error) {
+ if (error != null || vcard == null) {
+ vcard = new VCard();
+ }
+ requestedVCards.remove(actualJID);
+ JID jid = actualJID.isValid() ? actualJID : ownJID.toBare();
+ setVCard(jid, vcard);
+ }
+
+ SetVCardRequest createSetVCardRequest(final VCard vcard) {
+ SetVCardRequest request = SetVCardRequest.create(vcard, iqRouter);
+ request.onResponse.connect(new Slot2<VCard, ErrorPayload>() {
+ @Override
+ public void call(VCard p1, ErrorPayload p2) {
+ handleSetVCardResponse(vcard, p2);
+ }
+ });
+ return request;
+ }
+
+ void handleSetVCardResponse(VCard vcard, ErrorPayload error) {
+ if (error == null) {
+ setVCard(ownJID.toBare(), vcard);
+ }
+ }
+
+ void setVCard(final JID jid, VCard vcard) {
+ storage.setVCard(jid, vcard);
+ onVCardChanged.emit(jid, vcard);
+ if (jid.compare(ownJID, JID.CompareType.WithoutResource) == 0) {
+ onOwnVCardChanged.emit(vcard);
+ }
+ }
+
+// String getPhotoHash(final JID jid) {
+// return storage.getPhotoHash(jid);
+// }
+}