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.
#ifndef EVENT_H
#define EVENT_H
+#include <QDateTime>
#include <QDebug>
#include "eventmanager.h"
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; }
private:
EventManager::EventType _type;
EventManager::EventFlags _flags;
+ QDateTime _timestamp;
//QVariant _data;
friend QDebug operator<<(QDebug dbg, Event *e);
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); }
#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),
}
_bufferType = bufferTypeByTarget(_target);
+
+ setTimestamp(timestamp);
}
BufferInfo::Type MessageEvent::bufferTypeByTarget(const QString &target) const {
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; }
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);
}
}
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;
}
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);
}
}
CoreIrcChannel *chan = static_cast<CoreIrcChannel *>(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;
}
}
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;
else
event = new IrcEvent(type, net, prefix);
event->setParams(decParams);
+ event->setTimestamp(e->timestamp());
events << event;
}