summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2015-03-30 13:49:56 (GMT)
committerKevin Smith <kevin.smith@isode.com>2015-04-10 14:06:42 (GMT)
commit69dce2c01bf46cca3db68a113f49bb31e7be4b03 (patch)
tree55b983a139292cb0b96e498872c4f7e8a93d1520 /Swiften/Disco/FeatureOracle.h
parent89e5dd08171366ccfb1f598e6e5f140a166b0680 (diff)
downloadswift-69dce2c01bf46cca3db68a113f49bb31e7be4b03.zip
swift-69dce2c01bf46cca3db68a113f49bb31e7be4b03.tar.bz2
Introduce FeatureOracle class for contact feature support detection
This modifies the feature detection in the ChatController to try to use the common features of all available resources feature detection if no full JID has been bound to the chat yet. Test-Information: Tested with two Swift instances. Tested a) the initial chat start case and, b) the offline/online. In case a) Swift used to initally show a yellow warning about no support for message receipts. This warning is gone now. In case b), after a user gone offline and online again in a running chat, Swift used to show a warning about missing support for message receipts. This warning is gone now. Change-Id: I7a769fde8d14847b180503aeaa58280c572d81b3
Diffstat (limited to 'Swiften/Disco/FeatureOracle.h')
-rw-r--r--Swiften/Disco/FeatureOracle.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/Swiften/Disco/FeatureOracle.h b/Swiften/Disco/FeatureOracle.h
new file mode 100644
index 0000000..d579e5a
--- /dev/null
+++ b/Swiften/Disco/FeatureOracle.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2015 Isode Limited.
+ * All rights reserved.
+ * See the COPYING file for more information.
+ */
+
+#pragma once
+
+#include <Swiften/Base/API.h>
+#include <Swiften/Base/Tristate.h>
+#include <Swiften/Elements/DiscoInfo.h>
+
+namespace Swift {
+
+class EntityCapsProvider;
+class JID;
+class PresenceOracle;
+
+/**
+ * @brief The FeatureOracle class enables direct feature support lookup for client features supported by Swiften.
+ */
+class SWIFTEN_API FeatureOracle {
+ public:
+ FeatureOracle(EntityCapsProvider* capsProvider, PresenceOracle* presenceOracle);
+
+ public:
+ Tristate isFileTransferSupported(const JID& jid);
+ Tristate isMessageReceiptsSupported(const JID& jid);
+ Tristate isMessageCorrectionSupported(const JID& jid);
+
+ private:
+ /**
+ * @brief getDiscoResultForJID returns a shared reference to a DiscoInfo representing features supported by the jid.
+ * @param jid The JID to return the DiscoInfo::ref for.
+ * @return DiscoResult::ref
+ */
+ DiscoInfo::ref getDiscoResultForJID(const JID& jid);
+
+ Tristate isFeatureSupported(const JID& jid, const std::string& feature);
+
+ private:
+ EntityCapsProvider* capsProvider_;
+ PresenceOracle* presenceOracle_;
+};
+
+}
+