modernize: Prefer default member init over ctor init
[quassel.git] / src / common / event.cpp
index 8604796..4bb0221 100644 (file)
 #include "ircevent.h"
 #include "networkevent.h"
 #include "messageevent.h"
+#include "peer.h"
+#include "signalproxy.h"
 
 Event::Event(EventManager::EventType type)
     : _type(type)
-    , _valid(true)
 {
 }
 
 
 Event::Event(EventManager::EventType type, QVariantMap &map)
     : _type(type)
-    , _valid(true)
 {
     if (!map.contains("flags") || !map.contains("timestamp")) {
         qWarning() << "Received invalid serialized event:" << map;
@@ -40,16 +40,33 @@ Event::Event(EventManager::EventType type, QVariantMap &map)
         return;
     }
 
+    Q_ASSERT(SignalProxy::current());
+    Q_ASSERT(SignalProxy::current()->sourcePeer());
+
     setFlags(static_cast<EventManager::EventFlags>(map.take("flags").toInt())); // TODO sanity check?
-    setTimestamp(QDateTime::fromTime_t(map.take("timestamp").toUInt()));
+
+    if (SignalProxy::current()->sourcePeer()->hasFeature(Quassel::Feature::LongTime)) {
+        // timestamp is a qint64, signed rather than unsigned
+        setTimestamp(QDateTime::fromMSecsSinceEpoch(map.take("timestamp").toLongLong()));
+    } else {
+        setTimestamp(QDateTime::fromTime_t(map.take("timestamp").toUInt()));
+    }
 }
 
 
 void Event::toVariantMap(QVariantMap &map) const
 {
+    Q_ASSERT(SignalProxy::current());
+    Q_ASSERT(SignalProxy::current()->targetPeer());
+
     map["type"] = static_cast<int>(type());
     map["flags"] = static_cast<int>(flags());
-    map["timestamp"] = timestamp().toTime_t();
+    if (SignalProxy::current()->targetPeer()->hasFeature(Quassel::Feature::LongTime)) {
+        // toMSecs returns a qint64, signed rather than unsigned
+        map["timestamp"] = timestamp().toMSecsSinceEpoch();
+    } else {
+        map["timestamp"] = timestamp().toTime_t();
+    }
 }
 
 
@@ -67,16 +84,16 @@ Event *Event::fromVariantMap(QVariantMap &map, Network *network)
     // sanity check if we have a valid enum value
     if (EventManager::enumName(inttype).isEmpty()) {
         qWarning() << "Received a serialized event with unknown type" << inttype;
-        return 0;
+        return nullptr;
     }
 
     EventManager::EventType type = static_cast<EventManager::EventType>(inttype);
     if (type == EventManager::Invalid || type == EventManager::GenericEvent)
-        return 0;
+        return nullptr;
 
     EventManager::EventType group = static_cast<EventManager::EventType>(type & EventManager::EventGroupMask);
 
-    Event *e = 0;
+    Event *e = nullptr;
 
     // we use static create() functions to keep group-specific special cases in the files they belong
     // e.g. IrcEventRawMessage
@@ -102,7 +119,7 @@ Event *Event::fromVariantMap(QVariantMap &map, Network *network)
 
     if (!e) {
         qWarning() << "Can't create event of type" << type;
-        return 0;
+        return nullptr;
     }
 
     if (!map.isEmpty()) {