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
#ifndef EVENT_H
#define EVENT_H
#include <QDebug>
#include "eventmanager.h"
#include <QDebug>
#include "eventmanager.h"
inline void setFlag(EventManager::EventFlag flag) { _flags |= flag; }
inline void setFlags(EventManager::EventFlags flags) { _flags = flags; }
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 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; }
//inline void setData(const QVariant &data) { _data = data; }
//inline QVariant data() const { return _data; }
private:
EventManager::EventType _type;
EventManager::EventFlags _flags;
private:
EventManager::EventType _type;
EventManager::EventFlags _flags;
//QVariant _data;
friend QDebug operator<<(QDebug dbg, Event *e);
//QVariant _data;
friend QDebug operator<<(QDebug dbg, Event *e);
class IrcEventRawMessage : public IrcEvent {
public:
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)
: 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); }
inline QString target() const { return params().at(0); }
inline void setTarget(const QString &target) { setParams(QStringList() << target); }
#include "messageevent.h"
#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),
: NetworkEvent(EventManager::MessageEvent, net),
_msgType(msgType),
_text(msg),
}
_bufferType = bufferTypeByTarget(_target);
}
_bufferType = bufferTypeByTarget(_target);
+
+ setTimestamp(timestamp);
}
BufferInfo::Type MessageEvent::bufferTypeByTarget(const QString &target) const {
}
BufferInfo::Type MessageEvent::bufferTypeByTarget(const QString &target) const {
const QString &msg,
const QString &sender = QString(),
const QString &target = QString(),
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; }
);
inline Message::Type msgType() const { return _msgType; }
QByteArray s = socket.readLine().trimmed();
ircServerHandler()->handleServerMsg(s); // FIXME remove with events
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);
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());
msg = decrypt(net, target, msg);
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);
}
}
//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();
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());
if(!net->isChannelName(target))
target = nickFromMask(prefix);
}
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());
else
event = new IrcEvent(type, net, prefix);
event->setParams(decParams);
else
event = new IrcEvent(type, net, prefix);
event->setParams(decParams);
+ event->setTimestamp(e->timestamp());