/* * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include namespace Swift { class SWIFTEN_API Presence : public Stanza { public: typedef std::shared_ptr ref; enum Type { Available, Error, Probe, Subscribe, Subscribed, Unavailable, Unsubscribe, Unsubscribed }; Presence(); Presence(const std::string& status); SWIFTEN_DEFAULT_COPY_CONSTRUCTOR(Presence) virtual ~Presence(); static ref create() { return std::make_shared(); } static ref create(const std::string& status) { return std::make_shared(status); } static ref create(Presence::ref presence) { return std::make_shared(*presence); } Type getType() const { return type_; } void setType(Type type) { type_ = type; } StatusShow::Type getShow() const { std::shared_ptr show(getPayload()); if (show) { return show->getType(); } return type_ == Available ? StatusShow::Online : StatusShow::None; } void setShow(const StatusShow::Type &show) { updatePayload(std::make_shared(show)); } std::string getStatus() const; void setStatus(const std::string& status); int getPriority() const; void setPriority(int priority); std::shared_ptr clone() const { return std::make_shared(*this); } bool isAvailable() const { return type_ == Available; } private: Presence::Type type_; }; }