Provide (de)serialization for all event types
[quassel.git] / src / common / networkevent.cpp
1 /***************************************************************************
2  *   Copyright (C) 2005-2012 by the Quassel Project                        *
3  *   devel@quassel-irc.org                                                 *
4  *                                                                         *
5  *   This program is free software; you can redistribute it and/or modify  *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) version 3.                                           *
9  *                                                                         *
10  *   This program is distributed in the hope that it will be useful,       *
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13  *   GNU General Public License for more details.                          *
14  *                                                                         *
15  *   You should have received a copy of the GNU General Public License     *
16  *   along with this program; if not, write to the                         *
17  *   Free Software Foundation, Inc.,                                       *
18  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19  ***************************************************************************/
20
21 #include "networkevent.h"
22
23 Event *NetworkEvent::create(EventManager::EventType type, QVariantMap &map, Network *network) {
24   switch(type) {
25   case EventManager::NetworkIncoming:
26     return new NetworkDataEvent(type, map, network);
27
28   case EventManager::NetworkConnecting:
29   case EventManager::NetworkInitializing:
30   case EventManager::NetworkInitialized:
31   case EventManager::NetworkReconnecting:
32   case EventManager::NetworkDisconnecting:
33   case EventManager::NetworkDisconnected:
34     return new NetworkConnectionEvent(type, map, network);
35
36   case EventManager::NetworkSplitJoin:
37   case EventManager::NetworkSplitQuit:
38     return new NetworkSplitEvent(type, map, network);
39
40   default:
41     return 0;
42   }
43 }
44
45
46 NetworkEvent::NetworkEvent(EventManager::EventType type, QVariantMap &map, Network *network)
47   : Event(type, map)
48   , _network(network)
49 {
50
51 }
52
53
54 void NetworkEvent::toVariantMap(QVariantMap &map) const {
55   Event::toVariantMap(map);
56   map["network"] = networkId().toInt();
57 }
58
59
60 NetworkDataEvent::NetworkDataEvent(EventManager::EventType type, QVariantMap &map, Network *network)
61   : NetworkEvent(type, map, network)
62 {
63   _data = map.take("data").toByteArray();
64 }
65
66
67 void NetworkDataEvent::toVariantMap(QVariantMap &map) const {
68   NetworkEvent::toVariantMap(map);
69   map["data"] = data();
70 }
71
72
73 NetworkConnectionEvent::NetworkConnectionEvent(EventManager::EventType type, QVariantMap &map, Network *network)
74   : NetworkEvent(type, map, network)
75 {
76   _state = static_cast<Network::ConnectionState>(map.take("state").toInt()); // FIXME: check enum plausibility
77 }
78
79
80 void NetworkConnectionEvent::toVariantMap(QVariantMap &map) const {
81   NetworkEvent::toVariantMap(map);
82   map["state"] = connectionState();
83 }
84
85
86 NetworkSplitEvent::NetworkSplitEvent(EventManager::EventType type, QVariantMap &map, Network *network)
87   : NetworkEvent(type, map, network)
88 {
89   _channel = map.take("channel").toString();
90   _users = map.take("users").toStringList();
91   _quitMsg = map.take("quitMessage").toString();
92 }
93
94
95 void NetworkSplitEvent::toVariantMap(QVariantMap &map) const
96 {
97   NetworkEvent::toVariantMap(map);
98   map["channel"] = channel();
99   map["users"] = users();
100   map["quitMessage"] = quitMessage();
101 }