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