Correct support for multiply clients
[qtrapids] / src / include / qtrapids / dbus.hpp
1 #ifndef _QTRAPIDS_DBUS_HPP_
2 #define _QTRAPIDS_DBUS_HPP_
3
4 #include <QtDBus/QtDBus>
5 #include <QtCore/QString>
6 #include <QtCore/QHash>
7
8 // TMP TODO
9 #include <iostream>
10
11 namespace qtrapids
12 {
13
14     struct TorrentState
15     {
16
17         enum torrent_action
18         {
19             action_add,
20             action_remove,
21             action_update
22         };
23         
24         TorrentState() 
25             : hash("")
26             , name("")
27             , state(0)
28             , progress(0)
29             , down_rate(0)
30             , up_rate(0)
31             , seeds(0)
32             , leeches(0)
33             , ratio(0)
34             , total_size(0)
35             { }
36
37         QString hash;
38         QString name;
39         torrent_action action;
40         uint state;
41         uint progress;
42         uint down_rate;
43         uint up_rate;
44         uint seeds;
45         uint leeches;
46         uint ratio;
47         qulonglong total_size;
48     };
49
50     typedef QHash<QString, QString> ParamsMap_t;
51     typedef QHash<QString, QString> const ParamsMapConst_t;
52     typedef QHash<QString, QString>::iterator ParamsMapIterator_t;
53     typedef QHash<QString, QString>::const_iterator ParamsMapConstIterator_t;
54
55     static inline QDBusArgument& operator << (QDBusArgument& argument
56                                               , TorrentState const& state)
57     {
58         std::cout << "serialize" << std::endl;
59         argument.beginStructure();
60         argument << state.hash << state.name << (uint)(state.action) << state.state << state.progress 
61                  << state.down_rate << state.up_rate << state.seeds
62                  << state.leeches << state.ratio << state.total_size;
63         argument.endStructure();
64         return argument;
65     }
66
67     static inline QDBusArgument const& operator >> (QDBusArgument const& argument
68                                                     , TorrentState& state)
69     {
70         std::cout << "deserialize" << std::endl;
71         argument.beginStructure();
72         uint action;
73         argument >> state.hash >> state.name >> action >> state.state >> state.progress 
74                  >> state.down_rate >> state.up_rate >> state.seeds
75                  >> state.leeches >> state.ratio >> state.total_size;
76         state.action = (TorrentState::torrent_action)action;
77         argument.endStructure();
78         return argument;
79     }
80
81     static inline QDBusArgument& operator << (QDBusArgument& argument
82                                               , ParamsMapConst_t& params)
83     {
84         ParamsMapConstIterator_t p;
85         std::cout << "serialize params" << std::endl;
86         argument.beginMap();
87         for (p = params.constBegin(); p != params.constEnd(); ++p) {
88             argument.beginMapEntry();
89             argument << p.key() << p.value();
90             argument.endMapEntry();
91         }
92         argument.endMap();
93         return argument;
94     }
95
96     static inline QDBusArgument const& operator >> (QDBusArgument const& argument
97                                                     , ParamsMap_t& params)
98     {
99         ParamsMapConstIterator_t p;
100         QString key, value;
101         std::cout << "deserialize params" << std::endl;
102         argument.beginMap();
103         for (p = params.constBegin(); p != params.constEnd(); ++p) {
104             argument.beginMapEntry();
105             argument >> key >> value;
106             params[key] = value; 
107             argument.endMapEntry();
108         }
109         argument.endMap();
110         return argument;
111     }
112
113
114     // class DBusConnector
115     // {
116     // public:
117     //     DBusConnector()
118     //         : connection_()
119     //     {
120     //     }
121     // private:
122     //     QDBusConnection connection_;
123     // };
124
125 }
126
127 Q_DECLARE_METATYPE(qtrapids::TorrentState);
128 Q_DECLARE_METATYPE(qtrapids::ParamsMap_t);
129
130 #endif // _QTRAPIDS_DBUS_HPP_
131