- Added rate limit preferences to DBus client/server implementation
[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         enum torrent_action {
17                 action_add,
18                 action_remove,
19                 action_update
20         };
21
22         TorrentState()
23                         : hash("")
24                         , name("")
25                         , state(0)
26                         , progress(0)
27                         , down_rate(0)
28                         , up_rate(0)
29                         , seeds(0)
30                         , leeches(0)
31                         , ratio(0)
32                         , total_size(0) { }
33
34         QString hash;
35         QString name;
36         torrent_action action;
37         uint state;
38         uint progress;
39         uint down_rate;
40         uint up_rate;
41         uint seeds;
42         uint leeches;
43         uint ratio;
44         qulonglong total_size;
45 };
46
47 typedef QHash<QString, QString> ParamsMap_t;
48 typedef QHash<QString, QString> const ParamsMapConst_t;
49 typedef ParamsMap_t::iterator ParamsMapIterator_t;
50 typedef ParamsMap_t::const_iterator ParamsMapConstIterator_t;
51
52 static inline QDBusArgument& operator << (QDBusArgument& argument
53         , TorrentState const& state)
54 {
55 #ifdef QTRAPIDS_DEBUG
56         std::cout << "serialize" << std::endl;
57 #endif
58         argument.beginStructure();
59         argument << state.hash << state.name << (uint)(state.action) << state.state << state.progress
60         << state.down_rate << state.up_rate << state.seeds
61         << state.leeches << state.ratio << state.total_size;
62         argument.endStructure();
63         return argument;
64 }
65
66 static inline QDBusArgument const& operator >> (QDBusArgument const& argument
67         , TorrentState& state)
68 {
69 #ifdef QTRAPIDS_DEBUG
70         std::cout << "deserialize" << std::endl;
71 #endif
72         argument.beginStructure();
73         uint action;
74         argument >> state.hash >> state.name >> action >> state.state >> state.progress
75         >> state.down_rate >> state.up_rate >> state.seeds
76         >> state.leeches >> state.ratio >> state.total_size;
77         state.action = (TorrentState::torrent_action)action;
78         argument.endStructure();
79         return argument;
80 }
81
82 static inline QDBusArgument& operator << (QDBusArgument& argument
83         , ParamsMapConst_t& params)
84 {
85         ParamsMapConstIterator_t p;
86 #ifdef QTRAPIDS_DEBUG
87         std::cout << "serialize params" << std::endl;
88 #endif
89
90         argument.beginMap();
91         for (p = params.constBegin(); p != params.constEnd(); ++p) {
92                 argument.beginMapEntry();
93                 argument << p.key() << p.value();
94                 argument.endMapEntry();
95         }
96         argument.endMap();
97         return argument;
98 }
99
100 static inline QDBusArgument const& operator >> (QDBusArgument const& argument
101         , ParamsMap_t& params)
102 {
103         ParamsMapConstIterator_t p;
104         QString key, value;
105 #ifdef QTRAPIDS_DEBUG
106         std::cout << "deserialize params" << std::endl;
107 #endif
108         argument.beginMap();
109         for (p = params.constBegin(); p != params.constEnd(); ++p) {
110                 argument.beginMapEntry();
111                 argument >> key >> value;
112                 params[key] = value;
113                 argument.endMapEntry();
114         }
115         argument.endMap();
116         return argument;
117 }
118
119
120 // class DBusConnector
121 // {
122 // public:
123 //     DBusConnector()
124 //         : connection_()
125 //     {
126 //     }
127 // private:
128 //     QDBusConnection connection_;
129 // };
130
131 }
132
133 Q_DECLARE_METATYPE(qtrapids::TorrentState);
134 Q_DECLARE_METATYPE(qtrapids::ParamsMap_t);
135
136 #endif // _QTRAPIDS_DBUS_HPP_
137