Changeset - 3c0f8b47447b
[Not reviewed]
0 1 0
Jan Kaluza - 9 years ago 2016-02-28 14:48:24
jkaluza@redhat.com
Libcommuni: Default irc_away_timeout to 60 seconds
1 file changed with 1 insertions and 1 deletions:
0 comments (0 inline, 0 general)
backends/libcommuni/session.cpp
Show inline comments
 
@@ -36,97 +36,97 @@
 

	
 
DEFINE_LOGGER(logger, "IRCConnection");
 

	
 
MyIrcSession::MyIrcSession(const std::string &user, IRCNetworkPlugin *np, const std::string &suffix, QObject* parent) : IrcConnection(parent)
 
{
 
	m_np = np;
 
	m_user = user;
 
	m_suffix = suffix;
 
	m_connected = false;
 
	rooms = 0;
 
	m_bufferModel = NULL;
 

	
 
	connect(this, SIGNAL(disconnected()), SLOT(on_disconnected()));
 
	connect(this, SIGNAL(socketError(QAbstractSocket::SocketError)), SLOT(on_socketError(QAbstractSocket::SocketError)));
 
	connect(this, SIGNAL(connected()), SLOT(on_connected()));
 

	
 
	m_awayTimer = new QTimer(this);
 
	connect(m_awayTimer, SIGNAL(timeout()), this, SLOT(awayTimeout()));
 
	m_awayTimer->start(1 * 1000);
 
}
 

	
 
MyIrcSession::~MyIrcSession() {
 
	delete m_awayTimer;
 
}
 

	
 
void MyIrcSession::createBufferModel() {
 
	m_bufferModel = new IrcBufferModel(this);
 
	connect(m_bufferModel, SIGNAL(added(IrcBuffer*)), this, SLOT(onBufferAdded(IrcBuffer*)));
 
	connect(m_bufferModel, SIGNAL(removed(IrcBuffer*)), this, SLOT(onBufferRemoved(IrcBuffer*)));
 

	
 
	// keep the command parser aware of the context
 
// 	connect(m_bufferModel, SIGNAL(channelsChanged(QStringList)), parser, SLOT(setChannels(QStringList)));
 

	
 
	// create a server buffer for non-targeted messages...
 
	IrcBuffer* serverBuffer = m_bufferModel->add(host());
 
	// ...and connect it to IrcBufferModel::messageIgnored()
 
	// TODO: Make this configurable, so users can show the MOTD and other stuff as in normal
 
	// IRC client.
 
	connect(m_bufferModel, SIGNAL(messageIgnored(IrcMessage*)), serverBuffer, SLOT(receiveMessage(IrcMessage*)));
 
}
 

	
 
void MyIrcSession::onBufferAdded(IrcBuffer* buffer) {
 
	LOG4CXX_INFO(logger, m_user << ": Created IrcBuffer " << TO_UTF8(buffer->name()));
 

	
 
	connect(buffer, SIGNAL(messageReceived(IrcMessage*)), this, SLOT(onMessageReceived(IrcMessage*)));
 

	
 
	if (buffer->isChannel()) {
 
		QVariantMap userData;
 
		userData["awayCycle"] = boost::lexical_cast<int>(CONFIG_STRING_DEFAULTED(m_np->getConfig(), "service.irc_away_timeout", "12")) + m_userModels.size();
 
		userData["awayCycle"] = boost::lexical_cast<int>(CONFIG_STRING_DEFAULTED(m_np->getConfig(), "service.irc_away_timeout", "60")) + m_userModels.size();
 
		userData["awayTick"] = 0;
 
		buffer->setUserData(userData);
 
	}
 

	
 
	// create a  model for buffer users
 
	IrcUserModel* userModel = new IrcUserModel(buffer);
 
	connect(userModel, SIGNAL(added(IrcUser*)), this, SLOT(onIrcUserAdded(IrcUser*)));
 
	connect(userModel, SIGNAL(removed(IrcUser*)), this, SLOT(onIrcUserRemoved(IrcUser*)));
 
	m_userModels.insert(buffer, userModel);
 
}
 

	
 
void MyIrcSession::onBufferRemoved(IrcBuffer* buffer) {
 
	LOG4CXX_INFO(logger, m_user << ": Removed IrcBuffer " << TO_UTF8(buffer->name()));
 
	// the buffer specific models and documents are no longer needed
 
	delete m_userModels.take(buffer);
 
}
 

	
 
bool MyIrcSession::hasIrcUser(const std::string &channel_, const std::string &name) {
 
	std::string channel = channel_;
 
	if (channel[0] != '#') {
 
		channel = "#" + channel;
 
	}
 

	
 
	IrcBuffer *buffer = m_bufferModel->find(FROM_UTF8(channel));
 
	if (!buffer) {
 
		LOG4CXX_ERROR(logger, m_user << ": Cannot find IrcBuffer '" << channel << "'");
 
		return false;
 
	}
 

	
 
	IrcUserModel *userModel = m_userModels.value(buffer);
 
	if (!userModel) {
 
		LOG4CXX_ERROR(logger, m_user << ": Cannot find UserModel for IrcBuffer " << channel);
 
		return false;
 
	}
 

	
 
	return userModel->contains(FROM_UTF8(name));
 
}
 

	
 
void MyIrcSession::sendUserToFrontend(IrcUser *user, pbnetwork::StatusType statusType, const std::string &statusMessage, const std::string &newNick) {
 
	std::string target = "#" + TO_UTF8(user->channel()->name().toLower()) + m_suffix;
 
	int op = user->mode() == "o";
 

	
 
	if (statusType != pbnetwork::STATUS_NONE) {
 
		if (user->isAway()) {
 
			statusType = pbnetwork::STATUS_AWAY;
 
		}
 
		if (newNick.empty()) {
 
			LOG4CXX_INFO(logger, m_user << ": IrcUser connected: " << target << "/" << TO_UTF8(user->name()));
0 comments (0 inline, 0 general)