diff --git a/spectrum/src/frontends/slack/SlackSession.cpp b/spectrum/src/frontends/slack/SlackSession.cpp index 35dccaf49e674e9af4044e708a4d25b1de6ac320..1b2d59294e962dafad5bbd93f1ab301d4621d2bd 100644 --- a/spectrum/src/frontends/slack/SlackSession.cpp +++ b/spectrum/src/frontends/slack/SlackSession.cpp @@ -215,6 +215,40 @@ void SlackSession::handleJoinMessage(const std::string &message, std::vectorchannelsList(boost::bind(&SlackSession::handleJoinRoomList, this, _1, _2, _3, _4, args)); } +void SlackSession::handleSlackChannelCreate(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data) { + std::string channelId = m_api->getChannelId(req, ok, resp, data); + if (channelId.empty()) { + LOG4CXX_INFO(logger,"Error creating channel " << m_slackChannel << "."); + return; + } + + m_slackChannel = channelId; + Swift::Presence::ref presence = Swift::Presence::create(); + presence->setFrom(Swift::JID("", m_uinfo.jid, "default")); + presence->setTo(m_component->getJID()); + presence->setType(Swift::Presence::Available); + presence->addPayload(boost::shared_ptr(new Swift::MUCPayload())); + m_component->getFrontend()->onPresenceReceived(presence); +} + +void SlackSession::handleSlackChannelList(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data) { + std::map channels; + SlackAPI::getSlackChannelInfo(req, ok, resp, data, channels); + + if (channels.find(m_slackChannel) != channels.end()) { + m_slackChannel = channels[m_slackChannel].id; + Swift::Presence::ref presence = Swift::Presence::create(); + presence->setFrom(Swift::JID("", m_uinfo.jid, "default")); + presence->setTo(m_component->getJID()); + presence->setType(Swift::Presence::Available); + presence->addPayload(boost::shared_ptr(new Swift::MUCPayload())); + m_component->getFrontend()->onPresenceReceived(presence); + } + else { + m_api->channelsCreate(m_slackChannel, boost::bind(&SlackSession::handleSlackChannelCreate, this, _1, _2, _3, _4)); + } +} + void SlackSession::handleLeaveMessage(const std::string &message, std::vector &args, bool quiet) { // .spectrum2 leave.room channel std::string slackChannel = SlackAPI::SlackObjectToPlainText(args[2], true); @@ -452,12 +486,7 @@ void SlackSession::handleImOpen(HTTPRequest *req, bool ok, rapidjson::Document & else { m_storageBackend->getUserSetting(m_uinfo.id, "slack_channel", type, m_slackChannel); if (!m_slackChannel.empty()) { - Swift::Presence::ref presence = Swift::Presence::create(); - presence->setFrom(Swift::JID("", m_uinfo.jid, "default")); - presence->setTo(m_component->getJID()); - presence->setType(Swift::Presence::Available); - presence->addPayload(boost::shared_ptr(new Swift::MUCPayload())); - m_component->getFrontend()->onPresenceReceived(presence); + m_api->channelsList(boost::bind(&SlackSession::handleSlackChannelList, this, _1, _2, _3, _4)); } else { std::string msg;