summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Kiagiadakis <george.kiagiadakis@collabora.com>2012-04-13 13:35:29 +0300
committerGeorge Kiagiadakis <george.kiagiadakis@collabora.com>2012-04-13 13:35:46 +0300
commitc92ab27fd5d03dade4c3feda0d3d107c224ca278 (patch)
tree09377fcad26d7d438adedc143080a240f9866151
parentd3e13a20bad5c272cb1b6b2cb4f047ee6c3ad228 (diff)
PresenceSpec: Add high-level API for easily creating PresenceSpec objects
The default flags are based on telepathy-gabble's PresenceSpec flags.
-rw-r--r--TelepathyQt/presence.cpp108
-rw-r--r--TelepathyQt/presence.h23
2 files changed, 131 insertions, 0 deletions
diff --git a/TelepathyQt/presence.cpp b/TelepathyQt/presence.cpp
index 3cb8756b..52b4fdd7 100644
--- a/TelepathyQt/presence.cpp
+++ b/TelepathyQt/presence.cpp
@@ -253,6 +253,114 @@ PresenceSpec::~PresenceSpec()
{
}
+PresenceSpec PresenceSpec::available(PresenceSpec::SimpleStatusFlags flags)
+{
+ SimpleStatusSpec spec;
+ spec.type = ConnectionPresenceTypeAvailable;
+ spec.maySetOnSelf = flags & MaySetOnSelf;
+ spec.canHaveMessage = flags & CanHaveStatusMessage;
+ return PresenceSpec(QLatin1String("available"), spec);
+}
+
+PresenceSpec PresenceSpec::chat(PresenceSpec::SimpleStatusFlags flags)
+{
+ SimpleStatusSpec spec;
+ spec.type = ConnectionPresenceTypeAvailable;
+ spec.maySetOnSelf = flags & MaySetOnSelf;
+ spec.canHaveMessage = flags & CanHaveStatusMessage;
+ return PresenceSpec(QLatin1String("chat"), spec);
+}
+
+PresenceSpec PresenceSpec::pstn(PresenceSpec::SimpleStatusFlags flags)
+{
+ SimpleStatusSpec spec;
+ spec.type = ConnectionPresenceTypeAvailable;
+ spec.maySetOnSelf = flags & MaySetOnSelf;
+ spec.canHaveMessage = flags & CanHaveStatusMessage;
+ return PresenceSpec(QLatin1String("pstn"), spec);
+}
+
+PresenceSpec PresenceSpec::away(PresenceSpec::SimpleStatusFlags flags)
+{
+ SimpleStatusSpec spec;
+ spec.type = ConnectionPresenceTypeAway;
+ spec.maySetOnSelf = flags & MaySetOnSelf;
+ spec.canHaveMessage = flags & CanHaveStatusMessage;
+ return PresenceSpec(QLatin1String("away"), spec);
+}
+
+PresenceSpec PresenceSpec::brb(PresenceSpec::SimpleStatusFlags flags)
+{
+ SimpleStatusSpec spec;
+ spec.type = ConnectionPresenceTypeAway;
+ spec.maySetOnSelf = flags & MaySetOnSelf;
+ spec.canHaveMessage = flags & CanHaveStatusMessage;
+ return PresenceSpec(QLatin1String("brb"), spec);
+}
+
+PresenceSpec PresenceSpec::busy(PresenceSpec::SimpleStatusFlags flags)
+{
+ SimpleStatusSpec spec;
+ spec.type = ConnectionPresenceTypeBusy;
+ spec.maySetOnSelf = flags & MaySetOnSelf;
+ spec.canHaveMessage = flags & CanHaveStatusMessage;
+ return PresenceSpec(QLatin1String("busy"), spec);
+}
+
+PresenceSpec PresenceSpec::dnd(PresenceSpec::SimpleStatusFlags flags)
+{
+ SimpleStatusSpec spec;
+ spec.type = ConnectionPresenceTypeBusy;
+ spec.maySetOnSelf = flags & MaySetOnSelf;
+ spec.canHaveMessage = flags & CanHaveStatusMessage;
+ return PresenceSpec(QLatin1String("dnd"), spec);
+}
+
+PresenceSpec PresenceSpec::xa(PresenceSpec::SimpleStatusFlags flags)
+{
+ SimpleStatusSpec spec;
+ spec.type = ConnectionPresenceTypeExtendedAway;
+ spec.maySetOnSelf = flags & MaySetOnSelf;
+ spec.canHaveMessage = flags & CanHaveStatusMessage;
+ return PresenceSpec(QLatin1String("xa"), spec);
+}
+
+PresenceSpec PresenceSpec::hidden(PresenceSpec::SimpleStatusFlags flags)
+{
+ SimpleStatusSpec spec;
+ spec.type = ConnectionPresenceTypeHidden;
+ spec.maySetOnSelf = flags & MaySetOnSelf;
+ spec.canHaveMessage = flags & CanHaveStatusMessage;
+ return PresenceSpec(QLatin1String("hidden"), spec);
+}
+
+PresenceSpec PresenceSpec::offline(PresenceSpec::SimpleStatusFlags flags)
+{
+ SimpleStatusSpec spec;
+ spec.type = ConnectionPresenceTypeOffline;
+ spec.maySetOnSelf = flags & MaySetOnSelf;
+ spec.canHaveMessage = flags & CanHaveStatusMessage;
+ return PresenceSpec(QLatin1String("offline"), spec);
+}
+
+PresenceSpec PresenceSpec::unknown(PresenceSpec::SimpleStatusFlags flags)
+{
+ SimpleStatusSpec spec;
+ spec.type = ConnectionPresenceTypeUnknown;
+ spec.maySetOnSelf = flags & MaySetOnSelf;
+ spec.canHaveMessage = flags & CanHaveStatusMessage;
+ return PresenceSpec(QLatin1String("unknown"), spec);
+}
+
+PresenceSpec PresenceSpec::error(PresenceSpec::SimpleStatusFlags flags)
+{
+ SimpleStatusSpec spec;
+ spec.type = ConnectionPresenceTypeError;
+ spec.maySetOnSelf = flags & MaySetOnSelf;
+ spec.canHaveMessage = flags & CanHaveStatusMessage;
+ return PresenceSpec(QLatin1String("error"), spec);
+}
+
PresenceSpec &PresenceSpec::operator=(const PresenceSpec &other)
{
this->mPriv = other.mPriv;
diff --git a/TelepathyQt/presence.h b/TelepathyQt/presence.h
index 5b07365f..5f229f3c 100644
--- a/TelepathyQt/presence.h
+++ b/TelepathyQt/presence.h
@@ -75,11 +75,32 @@ private:
class TP_QT_EXPORT PresenceSpec
{
public:
+ enum SimpleStatusFlag {
+ NoFlags = 0,
+ MaySetOnSelf = 0x1,
+ CanHaveStatusMessage = 0x2,
+ AllFlags = MaySetOnSelf | CanHaveStatusMessage
+ };
+ Q_DECLARE_FLAGS(SimpleStatusFlags, SimpleStatusFlag);
+
PresenceSpec();
PresenceSpec(const QString &status, const SimpleStatusSpec &spec);
PresenceSpec(const PresenceSpec &other);
~PresenceSpec();
+ static PresenceSpec available(SimpleStatusFlags flags = AllFlags);
+ static PresenceSpec chat(SimpleStatusFlags flags = AllFlags);
+ static PresenceSpec pstn(SimpleStatusFlags flags = CanHaveStatusMessage);
+ static PresenceSpec away(SimpleStatusFlags flags = AllFlags);
+ static PresenceSpec brb(SimpleStatusFlags flags = AllFlags);
+ static PresenceSpec dnd(SimpleStatusFlags flags = AllFlags);
+ static PresenceSpec busy(SimpleStatusFlags flags = AllFlags);
+ static PresenceSpec xa(SimpleStatusFlags flags = AllFlags);
+ static PresenceSpec hidden(SimpleStatusFlags flags = AllFlags);
+ static PresenceSpec offline(SimpleStatusFlags flags = CanHaveStatusMessage);
+ static PresenceSpec unknown(SimpleStatusFlags flags = CanHaveStatusMessage);
+ static PresenceSpec error(SimpleStatusFlags flags = CanHaveStatusMessage);
+
bool isValid() const { return mPriv.constData() != 0; }
PresenceSpec &operator=(const PresenceSpec &other);
@@ -137,6 +158,8 @@ public:
}
};
+Q_DECLARE_OPERATORS_FOR_FLAGS(PresenceSpec::SimpleStatusFlags)
+
} // Tp
Q_DECLARE_METATYPE(Tp::Presence);