X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fircuser.cpp;h=f1ec7d6948beeb29618d6689a361e77557ecf1ec;hp=eee29a8d908c5a0c6714964ed9b7a263f3291990;hb=5432a429749c8cfa295d0f26e30e7e590873f51c;hpb=ad801015af3afad53e0b245afc3a2214373a1b44 diff --git a/src/common/ircuser.cpp b/src/common/ircuser.cpp index eee29a8d..f1ec7d69 100644 --- a/src/common/ircuser.cpp +++ b/src/common/ircuser.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -28,6 +28,7 @@ #include #include +INIT_SYNCABLE_OBJECT(IrcUser) IrcUser::IrcUser(const QString &hostmask, Network *network) : SyncableObject(network), _initialized(false), _nick(nickFromMask(hostmask)), @@ -109,20 +110,21 @@ QByteArray IrcUser::encodeString(const QString &string) const { void IrcUser::setUser(const QString &user) { if(!user.isEmpty() && _user != user) { _user = user; - emit userSet(user); + SYNC(ARG(user)); } } void IrcUser::setRealName(const QString &realName) { if (!realName.isEmpty() && _realName != realName) { _realName = realName; - emit realNameSet(realName); + SYNC(ARG(realName)) } } void IrcUser::setAway(const bool &away) { if(away != _away) { _away = away; + SYNC(ARG(away)) emit awaySet(away); } } @@ -130,7 +132,7 @@ void IrcUser::setAway(const bool &away) { void IrcUser::setAwayMessage(const QString &awayMessage) { if(!awayMessage.isEmpty() && _awayMessage != awayMessage) { _awayMessage = awayMessage; - emit awayMessageSet(awayMessage); + SYNC(ARG(awayMessage)) } } @@ -138,49 +140,51 @@ void IrcUser::setIdleTime(const QDateTime &idleTime) { if(idleTime.isValid() && _idleTime != idleTime) { _idleTime = idleTime; _idleTimeSet = QDateTime::currentDateTime(); - emit idleTimeSet(idleTime); + SYNC(ARG(idleTime)) } } void IrcUser::setLoginTime(const QDateTime &loginTime) { if(loginTime.isValid() && _loginTime != loginTime) { _loginTime = loginTime; - emit loginTimeSet(loginTime); + SYNC(ARG(loginTime)) } } void IrcUser::setServer(const QString &server) { if(!server.isEmpty() && _server != server) { _server = server; - emit serverSet(server); + SYNC(ARG(server)) } } void IrcUser::setIrcOperator(const QString &ircOperator) { if(!ircOperator.isEmpty() && _ircOperator != ircOperator) { _ircOperator = ircOperator; - emit ircOperatorSet(ircOperator); + SYNC(ARG(ircOperator)) } } void IrcUser::setLastAwayMessage(const int &lastAwayMessage) { if(lastAwayMessage > _lastAwayMessage) { _lastAwayMessage = lastAwayMessage; - emit lastAwayMessageSet(lastAwayMessage); + SYNC(ARG(lastAwayMessage)) } } void IrcUser::setHost(const QString &host) { if(!host.isEmpty() && _host != host) { _host = host; - emit hostSet(host); + SYNC(ARG(host)) } } void IrcUser::setNick(const QString &nick) { if(!nick.isEmpty() && nick != _nick) { + qDebug() << "setNick" << this << _nick << nick; _nick = nick; updateObjectName(); + SYNC(ARG(nick)) emit nickSet(nick); } } @@ -188,14 +192,14 @@ void IrcUser::setNick(const QString &nick) { void IrcUser::setWhoisServiceReply(const QString &whoisServiceReply) { if(!whoisServiceReply.isEmpty() && whoisServiceReply != _whoisServiceReply) { _whoisServiceReply = whoisServiceReply; - emit whoisServiceReplySet(whoisServiceReply); + SYNC(ARG(whoisServiceReply)) } } void IrcUser::setSuserHost(const QString &suserHost) { if(!suserHost.isEmpty() && suserHost != _suserHost) { _suserHost = suserHost; - emit suserHostSet(suserHost); + SYNC(ARG(suserHost)) } } @@ -217,8 +221,7 @@ void IrcUser::joinChannel(IrcChannel *channel) { Q_ASSERT(channel); if(!_channels.contains(channel)) { _channels.insert(channel); - channel->joinIrcUsers(this); - connect(channel, SIGNAL(destroyed()), this, SLOT(channelDestroyed())); + channel->joinIrcUser(this); } } @@ -231,9 +234,10 @@ void IrcUser::partChannel(IrcChannel *channel) { _channels.remove(channel); disconnect(channel, 0, this, 0); channel->part(this); - emit channelParted(channel->name()); - if(_channels.isEmpty() && network()->isMe(this)) - deleteLater(); + QString channelName = channel->name(); + SYNC_OTHER(partChannel, ARG(channelName)) + if(_channels.isEmpty() && !network()->isMe(this)) + quit(); } } @@ -246,18 +250,31 @@ void IrcUser::partChannel(const QString &channelname) { } } +void IrcUser::quit() { + QList channels = _channels.toList(); + _channels.clear(); + foreach(IrcChannel *channel, channels) { + disconnect(channel, 0, this, 0); + channel->part(this); + } + network()->removeIrcUser(this); + SYNC(NO_ARG) + emit quited(); +} + void IrcUser::channelDestroyed() { // private slot! IrcChannel *channel = static_cast(sender()); if(_channels.contains(channel)) { _channels.remove(channel); - if(_channels.isEmpty()) - deleteLater(); + if(_channels.isEmpty() && !network()->isMe(this)) + quit(); } } void IrcUser::setUserModes(const QString &modes) { _userModes = modes; + SYNC(ARG(modes)) emit userModesSet(modes); } @@ -270,6 +287,7 @@ void IrcUser::addUserModes(const QString &modes) { _userModes += modes[i]; } + SYNC(ARG(modes)) emit userModesAdded(modes); } @@ -280,5 +298,16 @@ void IrcUser::removeUserModes(const QString &modes) { for(int i = 0; i < modes.count(); i++) { _userModes.remove(modes[i]); } + SYNC(ARG(modes)) emit userModesRemoved(modes); } + +void IrcUser::setLastChannelActivity(BufferId buffer, const QDateTime &time) { + _lastActivity[buffer] = time; + emit lastChannelActivityUpdated(buffer, time); +} + +void IrcUser::setLastSpokenTo(BufferId buffer, const QDateTime &time) { + _lastSpokenTo[buffer] = time; + emit lastSpokenToUpdated(buffer, time); +}