X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fmessageevent.cpp;h=41485e21bede2906f7b8307e6a001481b03b4da7;hp=d7f3b7c910ee73faa28d7f6b60d61b2cce926234;hb=c1cf157116de7fc3da96203aa6f03c38c7ebb650;hpb=6097f67231950c4c22845735db8b997a844fec48 diff --git a/src/common/messageevent.cpp b/src/common/messageevent.cpp index d7f3b7c9..41485e21 100644 --- a/src/common/messageevent.cpp +++ b/src/common/messageevent.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2010 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -15,39 +15,76 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include "messageevent.h" +#include -MessageEvent::MessageEvent(Message::Type msgType, Network *net, const QString &msg, const QString &target, const QString &sender, Message::Flags flags) - : NetworkEvent(EventManager::MessageEvent, net), - _msgType(msgType), - _text(msg), - _target(target), - _sender(sender), - _msgFlags(flags) +Event* MessageEvent::create(EventManager::EventType type, QVariantMap& map, Network* network) { - IrcChannel *channel = network()->ircChannel(_target); - if(!channel) { - if(!_target.isEmpty() && network()->prefixes().contains(_target.at(0))) - _target = _target.mid(1); + if (type == EventManager::MessageEvent) + return new MessageEvent(type, map, network); - if(_target.startsWith('$') || _target.startsWith('#')) - _target = nickFromMask(sender); - } - - _bufferType = bufferTypeByTarget(_target); + return nullptr; } -BufferInfo::Type MessageEvent::bufferTypeByTarget(const QString &target) const { - if(target.isEmpty()) - return BufferInfo::StatusBuffer; +MessageEvent::MessageEvent( + Message::Type msgType, Network* net, QString msg, const QString& sender, QString target, Message::Flags flags, const QDateTime& timestamp) + : NetworkEvent(EventManager::MessageEvent, net) + , _msgType(msgType) + , _text(std::move(msg)) + , _sender(sender) + , _target(std::move(target)) + , _msgFlags(flags) +{ + IrcChannel* channel = network()->ircChannel(_target); + if (!channel) { + if (!_target.isEmpty() && network()->prefixes().contains(_target.at(0))) + _target = _target.mid(1); + + if (_target.startsWith('$') || _target.startsWith('#')) + _target = nickFromMask(sender); + } - if(network()->isChannelName(target)) - return BufferInfo::ChannelBuffer; + _bufferType = bufferTypeByTarget(_target); - return BufferInfo::QueryBuffer; + if (timestamp.isValid()) + setTimestamp(timestamp); + else + setTimestamp(QDateTime::currentDateTime()); } +MessageEvent::MessageEvent(EventManager::EventType type, QVariantMap& map, Network* network) + : NetworkEvent(type, map, network) +{ + _msgType = static_cast(map.take("messageType").toInt()); + _msgFlags = static_cast(map.take("messageFlags").toInt()); + _bufferType = static_cast(map.take("bufferType").toInt()); + _text = map.take("text").toString(); + _sender = map.take("sender").toString(); + _target = map.take("target").toString(); +} + +void MessageEvent::toVariantMap(QVariantMap& map) const +{ + NetworkEvent::toVariantMap(map); + map["messageType"] = msgType(); + map["messageFlags"] = (int)msgFlags(); + map["bufferType"] = bufferType(); + map["text"] = text(); + map["sender"] = sender(); + map["target"] = target(); +} + +BufferInfo::Type MessageEvent::bufferTypeByTarget(const QString& target) const +{ + if (target.isEmpty()) + return BufferInfo::StatusBuffer; + + if (network()->isChannelName(target)) + return BufferInfo::ChannelBuffer; + + return BufferInfo::QueryBuffer; +}