--- /dev/null
+#ifndef _QTRAPIDS_DBUS_HPP_
+#define _QTRAPIDS_DBUS_HPP_
+
+#include <QtDBus/QtDBus>
+#include <QtCore/QString>
+#include <QtCore/QHash>
+
+// TMP TODO
+#include <iostream>
+
+namespace qtrapids
+{
+
+ struct TorrentState
+ {
+ TorrentState()
+ : hash("")
+ , name("")
+ , state(0)
+ , progress(0)
+ , down_rate(0)
+ , up_rate(0)
+ , seeds(0)
+ , leeches(0)
+ , ratio(0)
+ , total_size(0)
+ { }
+
+ QString hash;
+ QString name;
+ uint state;
+ uint progress;
+ uint down_rate;
+ uint up_rate;
+ uint seeds;
+ uint leeches;
+ uint ratio;
+ qulonglong total_size;
+ };
+
+ typedef QHash<QString, QString> ParamsMap_t;
+ typedef QHash<QString, QString> const ParamsMapConst_t;
+ typedef QHash<QString, QString>::iterator ParamsMapIterator_t;
+ typedef QHash<QString, QString>::const_iterator ParamsMapConstIterator_t;
+
+ static inline QDBusArgument& operator << (QDBusArgument& argument
+ , TorrentState const& state)
+ {
+ std::cout << "serialize" << std::endl;
+ argument.beginStructure();
+ argument << state.hash << state.name << state.state << state.progress
+ << state.down_rate << state.up_rate << state.seeds
+ << state.leeches << state.ratio << state.total_size;
+ argument.endStructure();
+ return argument;
+ }
+
+ static inline QDBusArgument const& operator >> (QDBusArgument const& argument
+ , TorrentState& state)
+ {
+ std::cout << "deserialize" << std::endl;
+ argument.beginStructure();
+ argument >> state.hash >> state.name >> state.state >> state.progress
+ >> state.down_rate >> state.up_rate >> state.seeds
+ >> state.leeches >> state.ratio >> state.total_size;
+ argument.endStructure();
+ return argument;
+ }
+
+ static inline QDBusArgument& operator << (QDBusArgument& argument
+ , ParamsMapConst_t& params)
+ {
+ ParamsMapConstIterator_t p;
+ std::cout << "serialize params" << std::endl;
+ argument.beginMap();
+ for (p = params.constBegin(); p != params.constEnd(); ++p) {
+ argument.beginMapEntry();
+ argument << p.key() << p.value();
+ argument.endMapEntry();
+ }
+ argument.endMap();
+ return argument;
+ }
+
+ static inline QDBusArgument const& operator >> (QDBusArgument const& argument
+ , ParamsMap_t& params)
+ {
+ ParamsMapConstIterator_t p;
+ QString key, value;
+ std::cout << "deserialize params" << std::endl;
+ argument.beginMap();
+ for (p = params.constBegin(); p != params.constEnd(); ++p) {
+ argument.beginMapEntry();
+ argument >> key >> value;
+ params[key] = value;
+ argument.endMapEntry();
+ }
+ argument.endMap();
+ return argument;
+ }
+
+
+ // class DBusConnector
+ // {
+ // public:
+ // DBusConnector()
+ // : connection_()
+ // {
+ // }
+ // private:
+ // QDBusConnection connection_;
+ // };
+
+}
+
+Q_DECLARE_METATYPE(qtrapids::TorrentState);
+Q_DECLARE_METATYPE(qtrapids::ParamsMap_t);
+
+#endif // _QTRAPIDS_DBUS_HPP_
+