modernize: Use raw string literals instead of escaped strings
[quassel.git] / src / common / ircuser.cpp
index 6c10cf4..cf1aeda 100644 (file)
@@ -28,7 +28,6 @@
 #include <QTextCodec>
 #include <QDebug>
 
-INIT_SYNCABLE_OBJECT(IrcUser)
 IrcUser::IrcUser(const QString &hostmask, Network *network) : SyncableObject(network),
     _initialized(false),
     _nick(nickFromMask(hostmask)),
@@ -40,19 +39,16 @@ IrcUser::IrcUser(const QString &hostmask, Network *network) : SyncableObject(net
     _server(),
     // _idleTime(QDateTime::currentDateTime()),
     _ircOperator(),
-    _lastAwayMessage(0),
+    _lastAwayMessageTime(),
     _whoisServiceReply(),
     _encrypted(false),
     _network(network),
-    _codecForEncoding(0),
-    _codecForDecoding(0)
+    _codecForEncoding(nullptr),
+    _codecForDecoding(nullptr)
 {
     updateObjectName();
-}
-
-
-IrcUser::~IrcUser()
-{
+    _lastAwayMessageTime.setTimeSpec(Qt::UTC);
+    _lastAwayMessageTime.setMSecsSinceEpoch(0);
 }
 
 
@@ -159,10 +155,11 @@ void IrcUser::setAccount(const QString &account)
 }
 
 
-void IrcUser::setAway(const bool &away)
+void IrcUser::setAway(bool away)
 {
     if (away != _away) {
         _away = away;
+        markAwayChanged();
         SYNC(ARG(away))
         emit awaySet(away);
     }
@@ -173,6 +170,7 @@ void IrcUser::setAwayMessage(const QString &awayMessage)
 {
     if (!awayMessage.isEmpty() && _awayMessage != awayMessage) {
         _awayMessage = awayMessage;
+        markAwayChanged();
         SYNC(ARG(awayMessage))
     }
 }
@@ -215,11 +213,27 @@ void IrcUser::setIrcOperator(const QString &ircOperator)
 }
 
 
-void IrcUser::setLastAwayMessage(const int &lastAwayMessage)
+// This function is only ever called by SYNC calls from legacy cores (pre-0.13).
+// Therefore, no SYNC call is needed here.
+void IrcUser::setLastAwayMessage(int lastAwayMessage)
+{
+#if QT_VERSION >= 0x050800
+    QDateTime lastAwayMessageTime = QDateTime::fromSecsSinceEpoch(lastAwayMessage);
+#else
+    // toSecsSinceEpoch() was added in Qt 5.8.  Manually downconvert to seconds for now.
+    // See https://doc.qt.io/qt-5/qdatetime.html#toMSecsSinceEpoch
+    QDateTime lastAwayMessageTime = QDateTime::fromMSecsSinceEpoch(lastAwayMessage * 1000);
+#endif
+    lastAwayMessageTime.setTimeSpec(Qt::UTC);
+    setLastAwayMessageTime(lastAwayMessageTime);
+}
+
+
+void IrcUser::setLastAwayMessageTime(const QDateTime &lastAwayMessageTime)
 {
-    if (lastAwayMessage > _lastAwayMessage) {
-        _lastAwayMessage = lastAwayMessage;
-        SYNC(ARG(lastAwayMessage))
+    if (lastAwayMessageTime > _lastAwayMessageTime) {
+        _lastAwayMessageTime = lastAwayMessageTime;
+        SYNC(ARG(lastAwayMessageTime))
     }
 }
 
@@ -309,7 +323,7 @@ void IrcUser::partChannel(IrcChannel *channel)
 {
     if (_channels.contains(channel)) {
         _channels.remove(channel);
-        disconnect(channel, 0, this, 0);
+        disconnect(channel, nullptr, this, nullptr);
         channel->part(this);
         QString channelName = channel->name();
         SYNC_OTHER(partChannel, ARG(channelName))
@@ -322,7 +336,7 @@ void IrcUser::partChannel(IrcChannel *channel)
 void IrcUser::partChannel(const QString &channelname)
 {
     IrcChannel *channel = network()->ircChannel(channelname);
-    if (channel == 0) {
+    if (channel == nullptr) {
         qWarning() << "IrcUser::partChannel(): received part for unknown Channel" << channelname;
     }
     else {
@@ -336,7 +350,7 @@ void IrcUser::quit()
     QList<IrcChannel *> channels = _channels.toList();
     _channels.clear();
     foreach(IrcChannel *channel, channels) {
-        disconnect(channel, 0, this, 0);
+        disconnect(channel, nullptr, this, nullptr);
         channel->part(this);
     }
     network()->removeIrcUser(this);
@@ -348,7 +362,7 @@ void IrcUser::quit()
 void IrcUser::channelDestroyed()
 {
     // private slot!
-    IrcChannel *channel = static_cast<IrcChannel *>(sender());
+    auto *channel = static_cast<IrcChannel *>(sender());
     if (_channels.contains(channel)) {
         _channels.remove(channel);
         if (_channels.isEmpty() && !network()->isMe(this))