X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcommon%2Fnetworkevent.cpp;h=1752b58606541260f2f42136a4eae63df1e8e8a3;hb=dd8d82a90c136fa1e56d7f72781881cd5099574f;hp=fa1184be7d5eb8092fa458134f7628977f93776f;hpb=85fb228631cfb087ce80f4b778fae5f1c3877008;p=quassel.git diff --git a/src/common/networkevent.cpp b/src/common/networkevent.cpp index fa1184be..1752b586 100644 --- a/src/common/networkevent.cpp +++ b/src/common/networkevent.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2010 by the Quassel Project * + * Copyright (C) 2005-2012 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -19,3 +19,83 @@ ***************************************************************************/ #include "networkevent.h" + +Event *NetworkEvent::create(EventManager::EventType type, QVariantMap &map, Network *network) { + switch(type) { + case EventManager::NetworkIncoming: + return new NetworkDataEvent(type, map, network); + + case EventManager::NetworkConnecting: + case EventManager::NetworkInitializing: + case EventManager::NetworkInitialized: + case EventManager::NetworkReconnecting: + case EventManager::NetworkDisconnecting: + case EventManager::NetworkDisconnected: + return new NetworkConnectionEvent(type, map, network); + + case EventManager::NetworkSplitJoin: + case EventManager::NetworkSplitQuit: + return new NetworkSplitEvent(type, map, network); + + default: + return 0; + } +} + + +NetworkEvent::NetworkEvent(EventManager::EventType type, QVariantMap &map, Network *network) + : Event(type, map) + , _network(network) +{ + +} + + +void NetworkEvent::toVariantMap(QVariantMap &map) const { + Event::toVariantMap(map); + map["network"] = networkId().toInt(); +} + + +NetworkDataEvent::NetworkDataEvent(EventManager::EventType type, QVariantMap &map, Network *network) + : NetworkEvent(type, map, network) +{ + _data = map.take("data").toByteArray(); +} + + +void NetworkDataEvent::toVariantMap(QVariantMap &map) const { + NetworkEvent::toVariantMap(map); + map["data"] = data(); +} + + +NetworkConnectionEvent::NetworkConnectionEvent(EventManager::EventType type, QVariantMap &map, Network *network) + : NetworkEvent(type, map, network) +{ + _state = static_cast(map.take("state").toInt()); // FIXME: check enum plausibility +} + + +void NetworkConnectionEvent::toVariantMap(QVariantMap &map) const { + NetworkEvent::toVariantMap(map); + map["state"] = connectionState(); +} + + +NetworkSplitEvent::NetworkSplitEvent(EventManager::EventType type, QVariantMap &map, Network *network) + : NetworkEvent(type, map, network) +{ + _channel = map.take("channel").toString(); + _users = map.take("users").toStringList(); + _quitMsg = map.take("quitMessage").toString(); +} + + +void NetworkSplitEvent::toVariantMap(QVariantMap &map) const +{ + NetworkEvent::toVariantMap(map); + map["channel"] = channel(); + map["users"] = users(); + map["quitMessage"] = quitMessage(); +}