+IrcUser::IrcUser(const QString& hostmask, Network* network)
+ : SyncableObject(network)
+ , _initialized(false)
+ , _nick(nickFromMask(hostmask))
+ , _user(userFromMask(hostmask))
+ , _host(hostFromMask(hostmask))
+ , _realName()
+ , _awayMessage()
+ , _away(false)
+ , _server()
+ ,
+ // _idleTime(QDateTime::currentDateTime()),
+ _ircOperator()
+ , _lastAwayMessageTime()
+ , _whoisServiceReply()
+ , _encrypted(false)
+ , _network(network)
+ , _codecForEncoding(nullptr)
+ , _codecForDecoding(nullptr)
+{
+ updateObjectName();
+ _lastAwayMessageTime.setTimeSpec(Qt::UTC);
+ _lastAwayMessageTime.setMSecsSinceEpoch(0);
+}
+
+// ====================
+// PUBLIC:
+// ====================
+
+QString IrcUser::hostmask() const
+{
+ return QString("%1!%2@%3").arg(nick()).arg(user()).arg(host());
+}
+
+QDateTime IrcUser::idleTime()
+{
+ if ((QDateTime::currentDateTime().toMSecsSinceEpoch() - _idleTimeSet.toMSecsSinceEpoch()) > 1200000) {
+ // 20 * 60 * 1000 = 1200000
+ // 20 minutes have elapsed, clear the known idle time as it's likely inaccurate by now
+ _idleTime = QDateTime();
+ }
+ return _idleTime;
+}
+
+QStringList IrcUser::channels() const
+{
+ QStringList chanList;
+ IrcChannel* channel;
+ foreach (channel, _channels) {
+ chanList << channel->name();
+ }
+ return chanList;
+}
+
+void IrcUser::setCodecForEncoding(const QString& name)
+{
+ setCodecForEncoding(QTextCodec::codecForName(name.toLatin1()));
+}
+
+void IrcUser::setCodecForEncoding(QTextCodec* codec)
+{
+ _codecForEncoding = codec;
+}
+
+void IrcUser::setCodecForDecoding(const QString& name)
+{
+ setCodecForDecoding(QTextCodec::codecForName(name.toLatin1()));
+}
+
+void IrcUser::setCodecForDecoding(QTextCodec* codec)
+{
+ _codecForDecoding = codec;
+}