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