From: Manuel Nickschas Date: Thu, 7 Oct 2010 07:45:33 +0000 (+0200) Subject: Add a timestamp to events X-Git-Tag: 0.8-beta1~96 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=e49f87a6227dc6f82c17126a886cfc83ccf5e3ed Add a timestamp to events This is not set automatically for now, as I'm not sure if it's worth the overhead of querying the system clock for every event we create. The timestamp is set on reception of data on the socket (i.e. a bit earlier in the chain than in the old message handling) and carried over into IrcEvents by the IrcParser. EventStringifier will carry over the timestamp to MessageEvents. --- diff --git a/src/common/event.h b/src/common/event.h index 82cd1aca..4e4abacf 100644 --- a/src/common/event.h +++ b/src/common/event.h @@ -21,6 +21,7 @@ #ifndef EVENT_H #define EVENT_H +#include #include #include "eventmanager.h" @@ -35,12 +36,14 @@ public: inline void setFlag(EventManager::EventFlag flag) { _flags |= flag; } inline void setFlags(EventManager::EventFlags flags) { _flags = flags; } - inline EventManager::EventFlags flags() const { return _flags; } inline void stop() { setFlag(EventManager::Stopped); } inline bool isStopped() { return _flags.testFlag(EventManager::Stopped); } + inline void setTimestamp(const QDateTime &time) { _timestamp = time; } + inline QDateTime timestamp() const { return _timestamp; } + //inline void setData(const QVariant &data) { _data = data; } //inline QVariant data() const { return _data; } @@ -51,6 +54,7 @@ protected: private: EventManager::EventType _type; EventManager::EventFlags _flags; + QDateTime _timestamp; //QVariant _data; friend QDebug operator<<(QDebug dbg, Event *e); diff --git a/src/common/ircevent.h b/src/common/ircevent.h index e8e21acb..18e44020 100644 --- a/src/common/ircevent.h +++ b/src/common/ircevent.h @@ -85,10 +85,14 @@ private: class IrcEventRawMessage : public IrcEvent { public: - explicit IrcEventRawMessage(EventManager::EventType type, Network *network, const QString &prefix, const QString &target, const QByteArray &rawMessage) + explicit inline IrcEventRawMessage(EventManager::EventType type, Network *network, + const QByteArray &rawMessage, const QString &prefix, const QString &target, + const QDateTime ×tamp = QDateTime()) : IrcEvent(type, network, prefix, QStringList() << target), _rawMessage(rawMessage) - {} + { + setTimestamp(timestamp); + } inline QString target() const { return params().at(0); } inline void setTarget(const QString &target) { setParams(QStringList() << target); } diff --git a/src/common/messageevent.cpp b/src/common/messageevent.cpp index 83afcac7..70857d82 100644 --- a/src/common/messageevent.cpp +++ b/src/common/messageevent.cpp @@ -21,7 +21,8 @@ #include "messageevent.h" -MessageEvent::MessageEvent(Message::Type msgType, Network *net, const QString &msg, const QString &sender, const QString &target, Message::Flags flags) +MessageEvent::MessageEvent(Message::Type msgType, Network *net, const QString &msg, const QString &sender, const QString &target, + Message::Flags flags, const QDateTime ×tamp) : NetworkEvent(EventManager::MessageEvent, net), _msgType(msgType), _text(msg), @@ -39,6 +40,8 @@ MessageEvent::MessageEvent(Message::Type msgType, Network *net, const QString &m } _bufferType = bufferTypeByTarget(_target); + + setTimestamp(timestamp); } BufferInfo::Type MessageEvent::bufferTypeByTarget(const QString &target) const { diff --git a/src/common/messageevent.h b/src/common/messageevent.h index 6938db73..f2bc6d1a 100644 --- a/src/common/messageevent.h +++ b/src/common/messageevent.h @@ -35,7 +35,8 @@ public: const QString &msg, const QString &sender = QString(), const QString &target = QString(), - Message::Flags msgFlags = Message::None + Message::Flags msgFlags = Message::None, + const QDateTime ×tamp = QDateTime() ); inline Message::Type msgType() const { return _msgType; } diff --git a/src/core/corenetwork.cpp b/src/core/corenetwork.cpp index 05da4135..42b090ff 100644 --- a/src/core/corenetwork.cpp +++ b/src/core/corenetwork.cpp @@ -329,7 +329,13 @@ void CoreNetwork::socketHasData() { QByteArray s = socket.readLine().trimmed(); ircServerHandler()->handleServerMsg(s); // FIXME remove with events - coreSession()->eventManager()->sendEvent(new NetworkDataEvent(EventManager::NetworkIncoming, this, s)); + NetworkDataEvent *event = new NetworkDataEvent(EventManager::NetworkIncoming, this, s); +#if QT_VERSION >= 0x040700 + event->setTimestamp(QDateTime::currentDateTimeUtc()); +#else + event->setTimestamp(QDateTime::currentDateTime().toUTC()); +#endif + coreSession()->eventManager()->sendEvent(event); } } diff --git a/src/core/eventstringifier.cpp b/src/core/eventstringifier.cpp index c29a457b..c5b2f444 100644 --- a/src/core/eventstringifier.cpp +++ b/src/core/eventstringifier.cpp @@ -42,6 +42,7 @@ void EventStringifier::displayMsg(NetworkEvent *event, Message::Type msgType, co MessageEvent *EventStringifier::createMessageEvent(NetworkEvent *event, Message::Type msgType, const QString &msg, const QString &sender, const QString &target, Message::Flags msgFlags) { MessageEvent *msgEvent = new MessageEvent(msgType, event->network(), msg, sender, target, msgFlags); + msgEvent->setTimestamp(event->timestamp()); return msgEvent; } diff --git a/src/core/ircparser.cpp b/src/core/ircparser.cpp index 34e693d6..2a068111 100644 --- a/src/core/ircparser.cpp +++ b/src/core/ircparser.cpp @@ -174,7 +174,7 @@ void IrcParser::processNetworkIncoming(NetworkDataEvent *e) { msg = decrypt(net, target, msg); - events << new IrcEventRawMessage(EventManager::IrcEventRawPrivmsg, net, prefix, target, msg); + events << new IrcEventRawMessage(EventManager::IrcEventRawPrivmsg, net, msg, prefix, target, e->timestamp()); //events << new MessageEvent(Message::Plain, net, net->channelDecode(target, msg), target, prefix); } } @@ -200,7 +200,7 @@ void IrcParser::processNetworkIncoming(NetworkDataEvent *e) { CoreIrcChannel *chan = static_cast(net->ircChannel(channelname)); // we only have CoreIrcChannels in the core, so this cast is safe if(chan && !chan->receivedWelcomeMsg()) { chan->setReceivedWelcomeMsg(); - events << new MessageEvent(Message::Notice, net, decMsg, channelname, prefix); + events << new MessageEvent(Message::Notice, net, decMsg, prefix, channelname, Message::None, e->timestamp()); continue; } } @@ -214,7 +214,7 @@ void IrcParser::processNetworkIncoming(NetworkDataEvent *e) { if(!net->isChannelName(target)) target = nickFromMask(prefix); } - events << new IrcEventRawMessage(EventManager::IrcEventRawNotice, net, prefix, target, msg); + events << new IrcEventRawMessage(EventManager::IrcEventRawNotice, net, msg, prefix, target, e->timestamp()); } } break; @@ -290,6 +290,7 @@ void IrcParser::processNetworkIncoming(NetworkDataEvent *e) { else event = new IrcEvent(type, net, prefix); event->setParams(decParams); + event->setTimestamp(e->timestamp()); events << event; }