+QString IrcUser::decodeString(const QByteArray &text) const {
+ if(!codecForDecoding()) return network()->decodeString(text);
+ return ::decodeString(text, codecForDecoding());
+}
+
+QByteArray IrcUser::encodeString(const QString &string) const {
+ if(codecForEncoding()) {
+ return codecForEncoding()->fromUnicode(string);
+ }
+ return network()->encodeString(string);
+}
+
+// ====================
+// PUBLIC SLOTS:
+// ====================
+void IrcUser::setUser(const QString &user) {
+ if(!user.isEmpty() && _user != user) {
+ _user = user;
+ emit userSet(user);
+ }
+}
+
+void IrcUser::setRealName(const QString &realName) {
+ if (!realName.isEmpty() && _realName != realName) {
+ _realName = realName;
+ emit realNameSet(realName);
+ }
+}
+
+void IrcUser::setAway(const bool &away) {
+ if(away != _away) {
+ _away = away;
+ emit awaySet(away);
+ }
+}
+
+void IrcUser::setAwayMessage(const QString &awayMessage) {
+ if(!awayMessage.isEmpty() && _awayMessage != awayMessage) {
+ _awayMessage = awayMessage;
+ emit awayMessageSet(awayMessage);
+ }
+}
+
+void IrcUser::setIdleTime(const QDateTime &idleTime) {
+ if(idleTime.isValid() && _idleTime != idleTime) {
+ _idleTime = idleTime;
+ _idleTimeSet = QDateTime::currentDateTime();
+ emit idleTimeSet(idleTime);
+ }
+}
+
+void IrcUser::setLoginTime(const QDateTime &loginTime) {
+ if(loginTime.isValid() && _loginTime != loginTime) {
+ _loginTime = loginTime;
+ emit loginTimeSet(loginTime);
+ }
+}
+
+void IrcUser::setServer(const QString &server) {
+ if(!server.isEmpty() && _server != server) {
+ _server = server;
+ emit serverSet(server);
+ }
+}
+
+void IrcUser::setIrcOperator(const QString &ircOperator) {
+ if(!ircOperator.isEmpty() && _ircOperator != ircOperator) {
+ _ircOperator = ircOperator;
+ emit ircOperatorSet(ircOperator);
+ }
+}
+
+void IrcUser::setLastAwayMessage(const int &lastAwayMessage) {
+ if(lastAwayMessage > _lastAwayMessage) {
+ _lastAwayMessage = lastAwayMessage;
+ emit lastAwayMessageSet(lastAwayMessage);
+ }
+}
+
+void IrcUser::setHost(const QString &host) {
+ if(!host.isEmpty() && _host != host) {
+ _host = host;
+ emit hostSet(host);
+ }
+}
+
+void IrcUser::setNick(const QString &nick) {
+ if(!nick.isEmpty() && nick != _nick) {
+ _nick = nick;
+ updateObjectName();
+ emit nickSet(nick);
+ }
+}
+
+void IrcUser::updateObjectName() {
+ renameObject(QString::number(network()->networkId().toInt()) + "/" + _nick);
+}
+
+void IrcUser::updateHostmask(const QString &mask) {
+ if(mask == hostmask())
+ return;
+
+ QString user = userFromMask(mask);
+ QString host = hostFromMask(mask);
+ setUser(user);
+ setHost(host);
+}
+
+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()));
+ }
+}
+
+void IrcUser::joinChannel(const QString &channelname) {
+ joinChannel(network()->newIrcChannel(channelname));
+}
+
+void IrcUser::partChannel(IrcChannel *channel) {
+ if(_channels.contains(channel)) {
+ _channels.remove(channel);
+ disconnect(channel, 0, this, 0);
+ channel->part(this);
+ emit channelParted(channel->name());
+ if(_channels.isEmpty() && network()->isMe(this))
+ deleteLater();
+ }
+}
+
+void IrcUser::partChannel(const QString &channelname) {
+ IrcChannel *channel = network()->ircChannel(channelname);
+ if(channel == 0) {
+ qWarning() << "IrcUser::partChannel(): received part for unknown Channel" << channelname;
+ } else {
+ partChannel(channel);
+ }
+}
+
+void IrcUser::channelDestroyed() {
+ // private slot!
+ IrcChannel *channel = static_cast<IrcChannel*>(sender());
+ if(_channels.contains(channel)) {
+ _channels.remove(channel);
+ if(_channels.isEmpty())
+ deleteLater();
+ }
+}
+
+void IrcUser::setUserModes(const QString &modes) {
+ _userModes = modes;
+ emit userModesSet(modes);
+}
+
+void IrcUser::addUserModes(const QString &modes) {
+ if(modes.isEmpty())
+ return;
+
+ for(int i = 0; i < modes.count(); i++) {
+ if(!_userModes.contains(modes[i]))
+ _userModes += modes[i];
+ }
+
+ emit userModesAdded(modes);
+}
+
+void IrcUser::removeUserModes(const QString &modes) {
+ if(modes.isEmpty())
+ return;
+
+ for(int i = 0; i < modes.count(); i++) {
+ _userModes.remove(modes[i]);
+ }
+ emit userModesRemoved(modes);