summaryrefslogtreecommitdiff
path: root/src/dbus/server/session-common.h
diff options
context:
space:
mode:
authorPatrick Ohly <patrick.ohly@intel.com>2013-05-07 16:39:50 +0200
committerPatrick Ohly <patrick.ohly@intel.com>2013-05-16 11:24:48 +0200
commitb6b75de59ba284b0497e450d2bbe76523d1ee523 (patch)
treef4e30e372d6eb766b9d0c36c82adf4eb230c6243 /src/dbus/server/session-common.h
parentd3eee8a0390558795ace8be503b44d76be385b13 (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.h77
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