Changeset - 2ce9fd2e16d5
[Not reviewed]
0 3 0
Jan Kaluza - 9 years ago 2016-01-29 14:57:17
jkaluza@redhat.com
Slack: Store info about created channel to SlackIdManager
3 files changed with 45 insertions and 12 deletions:
0 comments (0 inline, 0 general)
spectrum/src/frontends/slack/SlackAPI.cpp
Show inline comments
 
@@ -214,13 +214,37 @@ void SlackAPI::usersList(HTTPRequest::Callback callback) {
 
void SlackAPI::getSlackChannelInfo(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data, std::map<std::string, SlackChannelInfo> &ret) {
 
	if (!ok) {
 
		LOG4CXX_ERROR(logger, req->getError());
 
		return;
 
	}
 

	
 
	GET_ARRAY(resp, channels);
 
	rapidjson::Value &channels = resp["channels"];
 
	if (!channels.IsArray()) {
 
		rapidjson::Value &channel = resp["channel"];
 
		if (channel.IsObject()) {
 
			SlackChannelInfo info;
 

	
 
			STORE_STRING(channel, id);
 
			info.id = id;
 

	
 
			STORE_STRING(channel, name);
 
			info.name = name;
 

	
 
			rapidjson::Value &members = channel["members"];
 
			for (int y = 0; members.IsArray() && y < members.Size(); y++) {
 
				if (!members[y].IsString()) {
 
					continue;
 
				}
 

	
 
				info.members.push_back(members[y].GetString());
 
			}
 

	
 
			ret[info.name] = info;
 
		}
 
		return;
 
	}
 

	
 
	for (int i = 0; i < channels.Size(); i++) {
 
		if (!channels[i].IsObject()) {
 
			continue;
 
		}
 

	
 
@@ -357,14 +381,17 @@ std::string SlackAPI::SlackObjectToPlainText(const std::string &object, bool isC
 

	
 
void SlackAPI::handleSlackChannelInvite(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data, const std::string &channel, const std::string &userId, CreateChannelCallback callback) {
 
	callback(channel);
 
}
 

	
 
void SlackAPI::handleSlackChannelCreate(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data, const std::string &channel, const std::string &userId, CreateChannelCallback callback) {
 
	std::string channelId = getChannelId(req, ok, resp, data);
 
	if (channelId.empty()) {
 
	std::map<std::string, SlackChannelInfo> &channels = m_idManager->getChannels();
 
	SlackAPI::getSlackChannelInfo(req, ok, resp, data, channels);
 

	
 
	std::string channelId = m_idManager->getId(channel);
 
	if (channelId == channel) {
 
		LOG4CXX_INFO(logger, "Error creating channel " << channel << ".");
 
		return;
 
	}
 

	
 
	channelsInvite(channelId, userId, boost::bind(&SlackAPI::handleSlackChannelInvite, this, _1, _2, _3, _4, channelId, userId, callback));
 
}
spectrum/src/frontends/slack/SlackIdManager.cpp
Show inline comments
 
@@ -52,26 +52,26 @@ const std::string &SlackIdManager::getName(const std::string &id) {
 
	}
 

	
 
	return m_users[id].name;
 
}
 

	
 
const std::string &SlackIdManager::getId(const std::string &name) {
 
	for (std::map<std::string, SlackChannelInfo>::const_iterator it = m_channels.begin(); it != m_channels.end(); ++it) {
 
		if (it->second.name == name) {
 
			return it->second.id;
 
		}
 
	if (m_channels.find(name) == m_channels.end()) {
 
		return name;
 
	}
 

	
 
	return name;
 
	return m_channels[name].id;
 
}
 

	
 
bool SlackIdManager::hasMember(const std::string &channelId, const std::string &userId) {
 
	if (m_channels.find(channelId) == m_channels.end()) {
 
		return false;
 

	
 
	for (std::map<std::string, SlackChannelInfo>::const_iterator it = m_channels.begin(); it != m_channels.end(); ++it) {
 
		if (it->second.id == channelId) {
 
			return std::find(it->second.members.begin(), it->second.members.end(), userId) != it->second.members.end();
 
		}
 
	}
 

	
 
	SlackChannelInfo &channel = m_channels[channelId];
 
	return std::find(channel.members.begin(), channel.members.end(), userId) != channel.members.end();
 
	return false;
 
}
 

	
 

	
 
}
spectrum/src/frontends/slack/SlackRTM.cpp
Show inline comments
 
@@ -121,18 +121,24 @@ void SlackRTM::handlePayloadReceived(const std::string &payload) {
 
			onMessageReceived(channel, bot_id, text, ts);
 
		}
 
		else if (subtype == "me_message") {
 
			text = "/me " + text;
 
			STORE_STRING(d, user);
 
			onMessageReceived(channel, user, text, ts);
 
		}
 
		else if (subtype == "channel_join") {
 
			
 
		}
 
		else {
 
			STORE_STRING(d, user);
 
			onMessageReceived(channel, user, text, ts);
 
		}
 
	}
 
	else if (type == "channel_joined") {
 
		
 
	}
 
}
 

	
 
void SlackRTM::sendMessage(const std::string &channel, const std::string &message) {
 
	m_counter++;
 

	
 
	std::string m = message;
0 comments (0 inline, 0 general)