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