diff options
author | Patrick Ohly <patrick.ohly@intel.com> | 2013-05-07 16:39:50 +0200 |
---|---|---|
committer | Patrick Ohly <patrick.ohly@intel.com> | 2013-05-16 11:24:48 +0200 |
commit | b6b75de59ba284b0497e450d2bbe76523d1ee523 (patch) | |
tree | f4e30e372d6eb766b9d0c36c82adf4eb230c6243 /src/dbus/server/session-common.h | |
parent | d3eee8a0390558795ace8be503b44d76be385b13 (diff) |
PIM: new return value for SyncPeer(), new SyncProgress signal (FDO #63417)
The SyncPeer() result is derived from the sync statistics. To have
them available, the "sync done" signal must include the SyncReport.
Start and end of a sync could already be detected; "modified" signals
while a sync runs depends on a new signal inside the SyncContext when
switching from one cycle to the next and at the end of the last one.
Diffstat (limited to 'src/dbus/server/session-common.h')
-rw-r--r-- | src/dbus/server/session-common.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/dbus/server/session-common.h b/src/dbus/server/session-common.h index ce8bb1c4..83fe246c 100644 --- a/src/dbus/server/session-common.h +++ b/src/dbus/server/session-common.h @@ -195,6 +195,83 @@ namespace GDBusCXX { base::append(builder, array); } }; + + template <> struct dbus_traits<SyncReport> : + public dbus_traits< std::string > + { + typedef dbus_traits< std::string > base; + + typedef SyncReport host_type; + typedef const SyncReport &arg_type; + +#ifdef GDBUS_CXX_GIO + static void get(GDBusCXX::ExtractArgs &context, + GDBusCXX::reader_type &iter, host_type &report) + { + std::string dump; + base::get(context, iter, dump); + report = SyncReport(dump); + } +#else + static void get(GDBusCXX::connection_type *conn, GDBusCXX::message_type *msg, + GDBusCXX::reader_type &iter, host_type &report) + { + std::string dump; + base::get(conn, msg, iter, dump); + report = SyncReport(dump); + } +#endif + + static void append(GDBusCXX::builder_type &builder, arg_type report) + { + base::append(builder, report.toString()); + } + }; + + template <> struct dbus_traits<SyncSourceReport> : + public dbus_traits< std::string > + { + typedef dbus_traits< std::string > base; + + typedef SyncSourceReport host_type; + typedef const SyncSourceReport &arg_type; + +#ifdef GDBUS_CXX_GIO + static void get(GDBusCXX::ExtractArgs &context, + GDBusCXX::reader_type &iter, host_type &source) + { + std::string dump; + base::get(context, iter, dump); + SyncReport report = SyncReport(dump); + const SyncSourceReport *foo = report.findSyncSourceReport("foo"); + if (!foo) { + SE_THROW("incomplete SyncReport"); + } + source = *foo; + } +#else + static void get(GDBusCXX::connection_type *conn, GDBusCXX::message_type *msg, + GDBusCXX::reader_type &iter, host_type &source) + { + std::string dump; + base::get(conn, msg, iter, dump); + SyncReport report = SyncReport(dump); + const SyncSourceReport *foo = report.findSyncSourceReport("foo"); + if (!foo) { + SE_THROW("incomplete SyncReport"); + } + source = *foo; + } +#endif + + static void append(GDBusCXX::builder_type &builder, arg_type source) + { + SyncReport report; + report.addSyncSourceReport("foo", source); + base::append(builder, report.toString()); + } + }; + } #endif // SESSION_COMMON_H |