implement new dbus api in the C wrapper

NOTE: GTK Client is not buildable at the moment...

The wrapper does not include the Connection object as it's not needed
in the client.
This commit is contained in:
Jussi Kukkonen 2009-11-11 13:24:55 +02:00
parent fee9c3917b
commit 8b93714261
14 changed files with 1689 additions and 1779 deletions

View file

@ -9,20 +9,14 @@ EXTRA_DIST = syncevo-dbus.pc.in
pkgconfig_DATA = syncevo-dbus.pc
pkgconfigdir = $(libdir)/pkgconfig
noinst_PROGRAMS = \
test-syncevo-dbus
test_syncevo_dbus_SOURCES = test.c
test_syncevo_dbus_LDADD = $(DBUS_GLIB_LIBS) libsyncevo-dbus.la
test_syncevo_dbus_CFLAGS = $(DBUS_GLIB_CFLAGS)
nodist_libsyncevo_dbus_la_SOURCES = \
interfaces/syncevo-marshal.c
libsyncevo_dbus_la_SOURCES = \
$(syncevo_dbus_headers) \
syncevo-dbus-types.c \
syncevo-dbus.c
syncevo-server.c \
syncevo-session.c
libsyncevo_dbus_la_CFLAGS = \
-I$(top_srcdir) \
@ -34,7 +28,8 @@ libsyncevo_dbus_la_LIBADD = \
syncevo_dbus_headers = \
syncevo-dbus-types.h \
syncevo-dbus.h
syncevo-server.h \
syncevo-session.h
libsyncevo_dbus_includedir = $(includedir)/syncevo-dbus
libsyncevo_dbus_include_HEADERS = \

View file

@ -1 +1,2 @@
This is the C wrapper for the SyncEvolution DBus API
This is the C wrapper for the SyncEvolution DBus API. It is used by the GTK ui.

View file

@ -4,9 +4,12 @@
%-doc.xml: %-full.xml
$(XSLT) -o $@ $(srcdir)/spec-to-docbook.xsl $<
BUILT_SOURCES = syncevo.xml syncevo-dbus-glue.h syncevo-marshal.c syncevo-marshal.h syncevo-bindings.h syncevo-server-doc.xml syncevo-connection-doc.xml syncevo-session-doc.xml
BUILT_SOURCES = syncevo-marshal.c syncevo-marshal.h \
syncevo-server-bindings.h syncevo-connection-bindings.h syncevo-session-bindings.h \
syncevo-server-glue.h syncevo-connection-glue.h syncevo-session-glue.h \
syncevo-server-doc.xml syncevo-connection-doc.xml syncevo-session-doc.xml \
syncevo-server.xml syncevo-connection.xml syncevo-session.xml
noinst_DATA = syncevo.xml
CLEANFILES = $(noinst_DATA) $(BUILT_SOURCES) stamp-syncevo-dbus-glue.h
EXTRA_DIST = syncevo-marshal.list spec-strip-docs.xsl $(noinst_DATA)
@ -24,9 +27,9 @@ syncevo-marshal.c: $(srcdir)/syncevo-marshal.list syncevo-marshal.h $(GLIB_GENMA
echo "#include \"syncevo-marshal.h\"" > $@ \
&& $(GLIB_GENMARSHAL) --prefix=syncevo_marshal $(srcdir)/syncevo-marshal.list --body >> $@
syncevo-dbus-glue.h: stamp-syncevo-dbus-glue.h
%-glue.h: stamp-%-glue.h
@true
stamp-syncevo-dbus-glue.h: syncevo.xml
stamp-%-glue.h: %.xml
$(DBUS_BINDING_TOOL) --prefix=syncevo --mode=glib-server $< > xgen-$(@F) \
&& (cmp -s xgen-$(@F) $(@F:stamp-%=%) || cp xgen-$(@F) $(@F:stamp-%=%)) \
&& rm -f xgen-$(@F) \

View file

@ -1,139 +0,0 @@
<?xml version="1.0"?>
<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
<doc:doc>
<doc:summary>SyncEvolution D-Bus Interface</doc:summary>
</doc:doc>
<interface name="org.Moblin.SyncEvolution">
<doc:doc>
<doc:para>
The SyncEvolution object can be used to get and set configurations,
to start synchronizations and to observe synchronization progress.
</doc:para>
</doc:doc>
<method name="StartSync">
<doc:doc>
<doc:summary>Starts a synchronization. This function returns immediately,
use Progress-signal to see when Synchronization is finished.
</doc:summary>
</doc:doc>
<arg type="s" name="server" direction="in">
<doc:doc>
<doc:summary>Server name. Server must be already defined in SyncEvolution</doc:summary>
</doc:doc>
</arg>
<arg type="a(si)" name="sources" direction="in">
<doc:doc>
<doc:summary>Source array with each source containing name and sync mode.
If array is empty, all sources will be synchronized.
</doc:summary>
</doc:doc>
</arg>
</method>
<method name="AbortSync">
<doc:doc>
<doc:summary>Aborts a synchronization. This function returns immediately,
use Progress-signal to see when Synchronization is actually aborted.
</doc:summary>
</doc:doc>
<arg type="s" name="server" direction="in" />
</method>
<!-- for now the progress signal args are a direct copy from synthesis -->
<signal name="Progress">
<doc:doc>
<doc:summary>Signal for synchronization progress. The arguments come
from Synthesis, see TProgressEventEnum in engine_defs.h. Additionally
type -1 means "synchromization finished", with extra1 carrying the
return value of SyncEvolution sync-call.
</doc:summary>
</doc:doc>
<arg type="s" name="server">
<doc:doc>
<doc:summary>Server name, always defined.</doc:summary>
</doc:doc>
</arg>
<arg type="s" name="source">
<doc:doc>
<doc:summary>Source name, only defined if this progress event
relates to a specific source.</doc:summary>
</doc:doc>
</arg>
<arg type="i" name="type" />
<arg type="i" name="extra1" />
<arg type="i" name="extra2" />
<arg type="i" name="extra3" />
</signal>
<signal name="ServerMessage">
<arg type="s" name="server" />
<arg type="s" name="message" />
</signal>
<method name="GetTemplates">
<arg type="a(sssb)" name="templates" direction="out">
<doc:doc>
<doc:summary>Template array, where an item consists of template name,
web URL, icon URI and boolean consumerReady.
</doc:summary>
</doc:doc>
</arg>
</method>
<method name="GetTemplateConfig">
<arg type="s" name="template" direction="in" />
<arg type="a(sss)" name="properties" direction="out">
<doc:doc>
<doc:summary>Property array, where array consists of source name, property
name and property value. Source name can be NULL: when it's not defined the
the property is not specific to a source (e.g. username)</doc:summary>
</doc:doc>
</arg>
</method>
<method name="GetServers">
<arg type="a(sssb)" name="servers" direction="out">
<doc:doc>
<doc:summary>Server array, where an item consists of server name,
web URL, icon URI and boolean consumerReady (the latter three from
the corresponding template if it exists).
</doc:summary>
</doc:doc>
</arg>
</method>
<method name="GetServerConfig">
<arg type="s" name="server" direction="in" />
<arg type="a(sss)" name="properties" direction="out">
<doc:doc>
<doc:summary>Property array, where array consists of source name, property
name and property value. Source name can be NULL: when it's not defined the
the property is not specific to a source (e.g. username)</doc:summary>
</doc:doc>
</arg>
</method>
<method name="SetServerConfig">
<doc:doc>
<doc:summary>Updates or creates a Server configuration with given values.
If a server configuration does not exists, a template of same name is
used.
</doc:summary>
</doc:doc>
<arg type="s" name="server" direction="in" />
<arg type="a(sss)" name="properties" direction="in">
<doc:doc>
<doc:summary>Property array, where array consists of source name, property
name and property value. Source name can be NULL: when it's not defined the
the property is not specific to a source (e.g. username)</doc:summary>
</doc:doc>
</arg>
</method>
<method name="RemoveServerConfig">
<arg type="s" name="server" direction="in" />
</method>
<method name ="GetSyncReports">
<arg type="s" name="server" direction="in"/>
<arg type="i" name="count" direction="in"/>
<arg type="a(ia(siiiiiiiiiiiii))" name="reports" direction="out"/>
</method>
</interface>
</node>

View file

@ -1,2 +1,5 @@
VOID:STRING,STRING,INT,INT,INT,INT
VOID:STRING,STRING
VOID:STRING,BOOLEAN
VOID:INT,BOXED
VOID:INT,INT,BOXED

View file

@ -17,306 +17,349 @@
* 02110-1301 USA
*/
#include <string.h>
#include <glib.h>
#include <dbus/dbus-glib.h>
#include "syncevo-dbus-types.h"
SyncevoSource*
syncevo_source_new (char *name, int mode)
#define SYNCEVO_TYPE_SOURCE_STATUS (dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INVALID))
#define SYNCEVO_TYPE_SOURCE_PROGRESS (dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INVALID))
gboolean
syncevo_config_get_value (SyncevoConfig *config,
const char *source,
const char *key,
char **value)
{
GValue val = {0, };
char *name;
GHashTable *source_config;
g_value_init (&val, SYNCEVO_SOURCE_TYPE);
g_value_take_boxed (&val, dbus_g_type_specialized_construct (SYNCEVO_SOURCE_TYPE));
dbus_g_type_struct_set (&val, 0, name, 1, mode, G_MAXUINT);
g_return_val_if_fail (config, FALSE);
g_return_val_if_fail (value, FALSE);
return (SyncevoSource*) g_value_get_boxed (&val);
}
if (!source || strlen (source) == 0) {
name = g_strdup ("");
} else {
name = g_strdup_printf ("sources/%s", source);
}
void
syncevo_source_get (SyncevoSource *source, const char **name, int *mode)
{
g_return_if_fail (source);
source_config = (GHashTable*)g_hash_table_lookup (config, name);
g_free (name);
if (name) {
*name = g_value_get_string (g_value_array_get_nth (source, 0));
}
if (mode) {
*mode = g_value_get_int (g_value_array_get_nth (source, 1));
}
}
void
syncevo_source_free (SyncevoSource *source)
{
if (source) {
g_boxed_free (SYNCEVO_SOURCE_TYPE, source);
}
}
SyncevoOption*
syncevo_option_new (char *ns, char *key, char *value)
{
GValue val = {0, };
g_value_init (&val, SYNCEVO_OPTION_TYPE);
g_value_take_boxed (&val, dbus_g_type_specialized_construct (SYNCEVO_OPTION_TYPE));
dbus_g_type_struct_set (&val, 0, ns, 1, key, 2, value, G_MAXUINT);
return (SyncevoOption*) g_value_get_boxed (&val);
}
void
syncevo_option_get (SyncevoOption *option, const char **ns, const char **key, const char **value)
{
g_return_if_fail (option);
if (ns) {
*ns = g_value_get_string (g_value_array_get_nth (option, 0));
}
if (key) {
*key = g_value_get_string (g_value_array_get_nth (option, 1));
}
if (value) {
*value = g_value_get_string (g_value_array_get_nth (option, 2));
}
}
void
syncevo_option_free (SyncevoOption *option)
{
if (option) {
g_boxed_free (SYNCEVO_OPTION_TYPE, option);
}
}
SyncevoServer* syncevo_server_new (char *name, char *url, char *icon, gboolean consumer_ready)
{
GValue val = {0, };
g_value_init (&val, SYNCEVO_SERVER_TYPE);
g_value_take_boxed (&val, dbus_g_type_specialized_construct (SYNCEVO_SERVER_TYPE));
dbus_g_type_struct_set (&val,
0, name,
1, url,
2, icon,
3, consumer_ready,
G_MAXUINT);
return (SyncevoServer*) g_value_get_boxed (&val);
}
void syncevo_server_get (SyncevoServer *server, const char **name, const char **url, const char **icon, gboolean *consumer_ready)
{
g_return_if_fail (server);
if (name) {
*name = g_value_get_string (g_value_array_get_nth (server, 0));
}
if (url) {
*url = g_value_get_string (g_value_array_get_nth (server, 1));
}
if (icon) {
*icon = g_value_get_string (g_value_array_get_nth (server, 2));
}
if (consumer_ready) {
*consumer_ready = g_value_get_boolean (g_value_array_get_nth (server, 3));
}
}
void syncevo_server_free (SyncevoServer *server)
{
if (server) {
g_boxed_free (SYNCEVO_SERVER_TYPE, server);
}
}
SyncevoReport*
syncevo_report_new (char *source)
{
GValue val = {0, };
g_value_init (&val, SYNCEVO_REPORT_TYPE);
g_value_take_boxed (&val, dbus_g_type_specialized_construct (SYNCEVO_REPORT_TYPE));
dbus_g_type_struct_set (&val,
0, source,
G_MAXUINT);
return (SyncevoReport*) g_value_get_boxed (&val);
if (source_config) {
*value = (char*)g_hash_table_lookup (source_config, key);
}
return (source_config != NULL);
}
static void
insert_int (SyncevoReport *report, int index, int value)
free_source_config_item (char *key,
char *value)
{
GValue val = {0};
g_value_init (&val, G_TYPE_INT);
g_value_set_int (&val, value);
g_value_array_insert (report, index, &val);
g_free (key);
g_free (value);
}
static void
free_source_configs_item (char *source,
GHashTable *source_config)
{
g_free (source);
g_hash_table_foreach (source_config,
(GHFunc)free_source_config_item,
NULL);
g_hash_table_destroy (source_config);
}
void
syncevo_report_set_io (SyncevoReport *report,
int sent_bytes, int received_bytes)
syncevo_config_free (SyncevoConfig *config)
{
g_return_if_fail (report);
insert_int (report, 1, sent_bytes);
insert_int (report, 2, received_bytes);
}
void
syncevo_report_set_local (SyncevoReport *report,
int adds, int updates, int removes, int rejects)
{
g_return_if_fail (report);
insert_int (report, 3, adds);
insert_int (report, 4, updates);
insert_int (report, 5, removes);
insert_int (report, 6, rejects);
}
void
syncevo_report_set_remote (SyncevoReport *report,
int adds, int updates, int removes, int rejects)
{
g_return_if_fail (report);
insert_int (report, 7, adds);
insert_int (report, 8, updates);
insert_int (report, 9, removes);
insert_int (report, 10, rejects);
}
void
syncevo_report_set_conflicts (SyncevoReport *report,
int local_won, int remote_won, int duplicated)
{
g_return_if_fail (report);
insert_int (report, 11, local_won);
insert_int (report, 12, remote_won);
insert_int (report, 13, duplicated);
g_hash_table_foreach (config,
(GHFunc)free_source_configs_item,
NULL);
g_hash_table_destroy (config);
}
const char*
syncevo_report_get_name (SyncevoReport *report)
syncevo_sync_mode_to_string (SyncevoSyncMode mode)
{
g_return_val_if_fail (report, NULL);
const char *mode_str;
return g_value_get_string (g_value_array_get_nth (report, 0));
switch (mode) {
case SYNCEVO_SYNC_NONE:
mode_str = "none";
break;
case SYNCEVO_SYNC_TWO_WAY:
mode_str = "two-way";
break;
case SYNCEVO_SYNC_SLOW:
mode_str = "slow";
break;
case SYNCEVO_SYNC_REFRESH_FROM_CLIENT:
mode_str = "refresh-from-client";
break;
case SYNCEVO_SYNC_REFRESH_FROM_SERVER:
mode_str = "refresh-from-server";
break;
case SYNCEVO_SYNC_ONE_WAY_FROM_CLIENT:
mode_str = "one-way-from-client";
break;
case SYNCEVO_SYNC_ONE_WAY_FROM_SERVER:
mode_str = "one-way-from-server";
break;
case SYNCEVO_SYNC_DEFAULT:
mode_str = "";
break;
default:
mode_str = "";
break;
}
return mode_str;
}
SyncevoSourceModes*
syncevo_source_modes_new ()
{
return g_hash_table_new_full (g_str_hash, g_str_equal,
NULL, NULL);
}
void
syncevo_report_get_io (SyncevoReport *report,
int *bytes_sent, int *bytes_received)
syncevo_source_modes_add (SyncevoSourceModes *source_modes,
char *source,
SyncevoSyncMode mode)
{
g_return_if_fail (report);
const char *mode_str;
if (bytes_sent) {
*bytes_sent = g_value_get_int (g_value_array_get_nth (report, 1));
}
if (bytes_received) {
*bytes_received = g_value_get_int (g_value_array_get_nth (report, 2));
}
g_return_if_fail (source_modes);
g_return_if_fail (source);
mode_str = syncevo_sync_mode_to_string (mode);
g_hash_table_insert (source_modes, source, (char*)mode_str);
}
void
syncevo_report_get_local (SyncevoReport *report,
int *adds, int *updates, int *removes, int *rejects)
syncevo_source_modes_free (SyncevoSourceModes *source_modes)
{
g_return_if_fail (report);
/* no need to free keys/values */
g_hash_table_destroy (source_modes);
}
if (adds) {
*adds = g_value_get_int (g_value_array_get_nth (report, 3));
}
if (updates) {
*updates = g_value_get_int (g_value_array_get_nth (report, 4));
}
if (removes) {
*removes = g_value_get_int (g_value_array_get_nth (report, 5));
}
if (rejects) {
*rejects = g_value_get_int (g_value_array_get_nth (report, 6));
}
SyncevoSessionStatus
syncevo_session_status_from_string (const char *status_str)
{
SyncevoSessionStatus status;
if (!status_str) {
status = SYNCEVO_STATUS_UNKNOWN;
} else if (g_str_has_prefix (status_str, "queueing")) {
status = SYNCEVO_STATUS_QUEUEING;
} else if (g_str_has_prefix (status_str, "idle")) {
status = SYNCEVO_STATUS_IDLE;
} else if (g_str_has_prefix (status_str, "running")) {
status = SYNCEVO_STATUS_RUNNING;
} else if (g_str_has_prefix (status_str, "aborting")) {
status = SYNCEVO_STATUS_ABORTING;
} else if (g_str_has_prefix (status_str, "suspending")) {
status = SYNCEVO_STATUS_SUSPENDING;
} else {
status = SYNCEVO_STATUS_UNKNOWN;
}
return status;
}
gboolean
syncevo_source_statuses_get (SyncevoSourceStatuses *source_statuses,
char *source,
SyncevoSyncMode *mode,
SyncevoSourceStatus *status,
guint *error_code)
{
GValueArray *source_status;
g_return_val_if_fail (source_statuses, FALSE);
g_return_val_if_fail (source, FALSE);
source_status = g_hash_table_lookup (source_statuses, source);
if (!source_status) {
return FALSE;
}
if (mode) {
const char *mode_str;
mode_str = g_value_get_string (g_value_array_get_nth (source_status, 0));
if (!mode_str) {
*mode = SYNCEVO_SYNC_UNKNOWN;
} else if (g_str_has_prefix (mode_str, "none")) {
*mode = SYNCEVO_SYNC_NONE;
} else if (g_str_has_prefix (mode_str, "two-way")) {
*mode = SYNCEVO_SYNC_TWO_WAY;
} else if (g_str_has_prefix (mode_str, "slow")) {
*mode = SYNCEVO_SYNC_SLOW;
} else if (g_str_has_prefix (mode_str, "refresh-from-client")) {
*mode = SYNCEVO_SYNC_REFRESH_FROM_CLIENT;
} else if (g_str_has_prefix (mode_str, "refresh-from-server")) {
*mode = SYNCEVO_SYNC_REFRESH_FROM_SERVER;
} else if (g_str_has_prefix (mode_str, "one-way-from-client")) {
*mode = SYNCEVO_SYNC_ONE_WAY_FROM_CLIENT;
} else if (g_str_has_prefix (mode_str, "one-way-from-server")) {
*mode = SYNCEVO_SYNC_ONE_WAY_FROM_SERVER;
} else {
*mode = SYNCEVO_SYNC_UNKNOWN;
}
}
if (status) {
const char *status_str;
status_str = g_value_get_string (g_value_array_get_nth (source_status, 1));
*status = syncevo_session_status_from_string (status_str);
}
if (error_code) {
*error_code = g_value_get_uint (g_value_array_get_nth (source_status, 2));
}
return TRUE;
}
static void
free_source_status_item (char *source,
GValueArray *status_array)
{
g_free (source);
g_boxed_free (SYNCEVO_TYPE_SOURCE_STATUS, status_array);
}
void
syncevo_report_get_remote (SyncevoReport *report,
int *adds, int *updates, int *removes, int *rejects)
syncevo_source_statuses_free (SyncevoSourceStatuses *source_statuses)
{
g_return_if_fail (report);
g_hash_table_foreach (source_statuses,
(GHFunc)free_source_status_item,
NULL);
g_hash_table_destroy (source_statuses);
}
if (adds) {
*adds = g_value_get_int (g_value_array_get_nth (report, 7));
}
if (updates) {
*updates = g_value_get_int (g_value_array_get_nth (report, 8));
}
if (removes) {
*removes = g_value_get_int (g_value_array_get_nth (report, 9));
}
if (rejects) {
*rejects = g_value_get_int (g_value_array_get_nth (report, 10));
}
gboolean
syncevo_source_progresses_get (SyncevoSourceProgresses *source_progresses,
char *source,
SyncevoSourceProgress *source_progress)
{
const char *phase_str;
GValueArray *progress_array;
GValue *val;
g_return_val_if_fail (source_progresses, FALSE);
g_return_val_if_fail (source, FALSE);
progress_array = g_hash_table_lookup (source_progresses, source);
if (!progress_array) {
return FALSE;
}
if (!source_progress) {
return TRUE;
}
phase_str = g_value_get_string (g_value_array_get_nth (progress_array, 0));
if (!phase_str) {
source_progress->phase = SYNCEVO_PHASE_NONE;
} else if (g_str_has_prefix (phase_str, "preparing")) {
source_progress->phase = SYNCEVO_PHASE_PREPARING;
} else if (g_str_has_prefix (phase_str, "sending")) {
source_progress->phase = SYNCEVO_PHASE_SENDING;
} else if (g_str_has_prefix (phase_str, "receiving")) {
source_progress->phase = SYNCEVO_PHASE_RECEIVING;
} else {
source_progress->phase = SYNCEVO_PHASE_NONE;
}
val = g_value_array_get_nth (progress_array, 1);
source_progress->prepare_current = g_value_get_int (val);
val = g_value_array_get_nth (progress_array, 2);
source_progress->prepare_total = g_value_get_int (val);
val = g_value_array_get_nth (progress_array, 3);
source_progress->send_current = g_value_get_int (val);
val = g_value_array_get_nth (progress_array, 4);
source_progress->send_total = g_value_get_int (val);
val = g_value_array_get_nth (progress_array, 5);
source_progress->receive_current = g_value_get_int (val);
val = g_value_array_get_nth (progress_array, 6);
source_progress->receive_total = g_value_get_int (val);
return TRUE;
}
static void
free_source_progress_item (char *source,
GValueArray *progress_array)
{
g_free (source);
g_boxed_free (SYNCEVO_TYPE_SOURCE_PROGRESS, progress_array);
}
void
syncevo_report_get_conflicts (SyncevoReport *report,
int *local_won, int *remote_won, int *duplicated)
syncevo_source_progresses_free (SyncevoSourceProgresses *source_progresses)
{
g_return_if_fail (report);
g_hash_table_foreach (source_progresses,
(GHFunc)free_source_progress_item,
NULL);
g_hash_table_destroy (source_progresses);
}
if (local_won) {
*local_won = g_value_get_int (g_value_array_get_nth (report, 11));
}
if (remote_won) {
*remote_won = g_value_get_int (g_value_array_get_nth (report, 12));
}
if (duplicated) {
*duplicated = g_value_get_int (g_value_array_get_nth (report, 13));
}
static void
free_report_item (char *key, char *value)
{
g_free (key);
g_free (value);
}
static void
syncevo_report_free (GHashTable *report)
{
g_hash_table_foreach (report,
(GHFunc)free_report_item,
NULL);
g_hash_table_destroy (report);
}
GHashTable*
syncevo_reports_index (SyncevoReports *reports,
guint index)
{
g_return_val_if_fail (reports, NULL);
return (GHashTable*)g_ptr_array_index (reports, index);
}
void
syncevo_report_free (SyncevoReport *report)
syncevo_reports_free (SyncevoReports *reports)
{
if (report) {
g_boxed_free (SYNCEVO_REPORT_TYPE, report);
}
g_ptr_array_foreach (reports,
(GFunc)syncevo_report_free,
NULL);
g_ptr_array_free (reports, TRUE);
}
SyncevoReportArray* syncevo_report_array_new (int end_time, GPtrArray *reports)
char*
syncevo_sessions_index (SyncevoSessions *sessions,
guint index)
{
GValue val = {0, };
g_return_val_if_fail (sessions, NULL);
g_value_init (&val, SYNCEVO_REPORT_ARRAY_TYPE);
g_value_take_boxed (&val, dbus_g_type_specialized_construct (SYNCEVO_REPORT_ARRAY_TYPE));
dbus_g_type_struct_set (&val,
0, end_time,
1, reports,
G_MAXUINT);
return (SyncevoReportArray*) g_value_get_boxed (&val);
}
void syncevo_report_array_get (SyncevoReportArray *array, int *end_time, GPtrArray **reports)
{
g_return_if_fail (array);
if (end_time) {
*end_time = g_value_get_int (g_value_array_get_nth (array, 0));
}
if (reports) {
*reports = g_value_get_boxed (g_value_array_get_nth (array, 1));
}
return (char*)g_ptr_array_index (sessions, index);
}
void
syncevo_report_array_free (SyncevoReportArray *array)
syncevo_sessions_free (SyncevoSessions *sessions)
{
if (array) {
g_boxed_free (SYNCEVO_REPORT_ARRAY_TYPE, array);
}
g_ptr_array_foreach (sessions,
(GFunc)g_free,
NULL);
g_ptr_array_free (sessions, TRUE);
}

View file

@ -17,72 +17,106 @@
* 02110-1301 USA
*/
#ifndef __SYNCEVO_DBUS_TYPES_H__
#define __SYNCEVO_DBUS_TYPES_H__
#ifndef __SYNCEVO_TYPES_H__
#define __SYNCEVO_TYPES_H__
#include <glib.h>
#include <dbus/dbus-glib.h>
#define SYNCEVO_DBUS_ERROR_GENERIC_ERROR "org.Moblin.SyncEvolution.GenericError"
#define SYNCEVO_DBUS_ERROR_NO_SUCH_SERVER "org.Moblin.SyncEvolution.NoSuchServer"
#define SYNCEVO_DBUS_ERROR_MISSING_ARGS "org.Moblin.SyncEvolution.MissingArgs"
#define SYNCEVO_DBUS_ERROR_INVALID_CALL "org.Moblin.SyncEvolution.InvalidCall"
#define SYNCEVO_DBUS_ERROR_GENERIC_ERROR "org.syncevolution.GenericError"
#define SYNCEVO_DBUS_ERROR_NO_SUCH_SERVER "org.syncevolution.NoSuchServer"
#define SYNCEVO_DBUS_ERROR_MISSING_ARGS "org.syncevolution.MissingArgs"
#define SYNCEVO_DBUS_ERROR_INVALID_CALL "org.syncevolution.InvalidCall"
#define SYNCEVO_SOURCE_TYPE (dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID))
typedef GValueArray SyncevoSource;
typedef enum {
SYNCEVO_SYNC_UNKNOWN, /* Cannot be used in Sync */
SYNCEVO_SYNC_DEFAULT, /* cannot be received in GetStatus*/
SYNCEVO_SYNC_NONE,
SYNCEVO_SYNC_TWO_WAY,
SYNCEVO_SYNC_SLOW,
SYNCEVO_SYNC_REFRESH_FROM_CLIENT,
SYNCEVO_SYNC_REFRESH_FROM_SERVER,
SYNCEVO_SYNC_ONE_WAY_FROM_CLIENT,
SYNCEVO_SYNC_ONE_WAY_FROM_SERVER,
} SyncevoSyncMode;
#define SYNCEVO_OPTION_TYPE (dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID))
typedef GValueArray SyncevoOption;
typedef enum {
SYNCEVO_STATUS_UNKNOWN,
SYNCEVO_STATUS_QUEUEING,
SYNCEVO_STATUS_IDLE,
SYNCEVO_STATUS_RUNNING,
SYNCEVO_STATUS_ABORTING,
SYNCEVO_STATUS_SUSPENDING,
} SyncevoSessionStatus;
#define SYNCEVO_SERVER_TYPE (dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID))
typedef GValueArray SyncevoServer;
typedef enum {
SYNCEVO_SOURCE_IDLE,
SYNCEVO_SOURCE_RUNNING,
SYNCEVO_SOURCE_RUNNING_WAITING,
SYNCEVO_SOURCE_RUNNING_PROCESSING,
SYNCEVO_SOURCE_DONE,
} SyncevoSourceStatus;
#define SYNCEVO_REPORT_TYPE (dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INVALID))
typedef GValueArray SyncevoReport;
typedef enum {
SYNCEVO_PHASE_NONE,
SYNCEVO_PHASE_PREPARING,
SYNCEVO_PHASE_SENDING,
SYNCEVO_PHASE_RECEIVING,
} SyncevoSourcePhase;
#define SYNCEVO_REPORT_ARRAY_TYPE (dbus_g_type_get_struct ("GValueArray", G_TYPE_INT, dbus_g_type_get_collection ("GPtrArray", SYNCEVO_REPORT_TYPE)))
typedef GValueArray SyncevoReportArray;
typedef struct {
SyncevoSourcePhase phase;
int prepare_current;
int prepare_total;
int send_current;
int send_total;
int receive_current;
int receive_total;
} SyncevoSourceProgress;
SyncevoOption* syncevo_option_new (char *ns, char *key, char *value);
void syncevo_option_get (SyncevoOption *option, const char **ns, const char **key, const char **value);
void syncevo_option_free (SyncevoOption *option);
typedef GHashTable SyncevoConfig;
typedef GHashTable SyncevoSourceModes;
typedef GHashTable SyncevoSourceStatuses;
typedef GHashTable SyncevoSourceProgresses;
typedef GPtrArray SyncevoReports;
typedef GPtrArray SyncevoSessions;
SyncevoSource* syncevo_source_new (char *name, int mode);
void syncevo_source_get (SyncevoSource *source, const char **name, int *mode);
void syncevo_source_free (SyncevoSource *source);
gboolean syncevo_config_get_value (SyncevoConfig *config,
const char *source,
const char *key,
char **value);
void syncevo_config_free (SyncevoConfig *config);
SyncevoServer* syncevo_server_new (char *name, char *url, char *icon, gboolean consumer_ready);
void syncevo_server_get (SyncevoServer *server, const char **name, const char **url, const char **icon, gboolean *consumer_ready);
void syncevo_server_free (SyncevoServer *server);
const char* syncevo_sync_mode_to_string (SyncevoSyncMode mode);
SyncevoSourceModes* syncevo_source_modes_new ();
void syncevo_source_modes_add (SyncevoSourceModes *source_modes,
char *source,
SyncevoSyncMode mode);
void syncevo_source_modes_free (SyncevoSourceModes *source_modes);
SyncevoSessionStatus syncevo_session_status_from_string (const char *status_str);
gboolean syncevo_source_statuses_get (SyncevoSourceStatuses *source_modes,
char *source,
SyncevoSyncMode *mode,
SyncevoSourceStatus *status,
guint *error_code);
void syncevo_source_statuses_free (SyncevoSourceStatuses *source_statuses);
SyncevoReport* syncevo_report_new (char *source);
gboolean syncevo_source_progresses_get (SyncevoSourceProgresses *source_progresses,
char *source,
SyncevoSourceProgress *source_progress);
void syncevo_report_set_io (SyncevoReport *report,
int sent_bytes, int received_bytes);
void syncevo_report_set_local (SyncevoReport *report,
int adds, int updates, int removes, int rejects);
void syncevo_report_set_remote (SyncevoReport *report,
int adds, int updates, int removes, int rejects);
void syncevo_report_set_conflicts (SyncevoReport *report,
int local_won, int remote_won, int duplicated);
const char* syncevo_report_get_name (SyncevoReport *report);
void syncevo_report_get_io (SyncevoReport *report,
int *bytes_sent, int *bytes_received);
void syncevo_report_get_local (SyncevoReport *report,
int *adds, int *updates, int *removes, int *rejects);
void syncevo_report_get_remote (SyncevoReport *report,
int *adds, int *updates, int *removes, int *rejects);
void syncevo_report_get_conflicts (SyncevoReport *report,
int *local_won, int *remote_won, int *duplicated);
void syncevo_report_free (SyncevoReport *report);
void syncevo_source_progresses_free (SyncevoSourceProgresses *source_progresses);
SyncevoReportArray* syncevo_report_array_new (int end_time, GPtrArray *reports);
void syncevo_report_array_get (SyncevoReportArray *array, int *end_time, GPtrArray **reports);
void syncevo_report_array_free (SyncevoReportArray *array);
GHashTable* syncevo_reports_index (SyncevoReports *reports,
guint index);
void syncevo_reports_free (SyncevoReports *reports);
char* syncevo_sessions_index (SyncevoSessions *sessions,
guint index);
void syncevo_sessions_free (SyncevoSessions *sessions);
#endif

View file

@ -1,954 +0,0 @@
/*
* Copyright (C) 2009 Intel Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#include <glib-object.h>
#include <string.h>
#include "syncevo-dbus.h"
#include "syncevo-marshal.h"
#include "syncevo-bindings.h"
typedef struct _SyncevoAsyncData {
SyncevoService *service;
GCallback callback;
gpointer userdata;
} SyncevoAsyncData;
enum {
PROGRESS,
SERVER_MESSAGE,
SERVER_SHUTDOWN,
LAST_SIGNAL
};
typedef struct _SyncevoServicePrivate {
DBusGProxy *proxy;
} SyncevoServicePrivate;
#define GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SYNCEVO_TYPE_SERVICE, SyncevoServicePrivate))
static void progress_cb (DBusGProxy *proxy,
char *server,
char *source,
int type,
int extra1, int extra2, int extra3,
SyncevoService *service);
static void server_message_cb (DBusGProxy *proxy,
char *server,
char *message,
SyncevoService *service);
static void proxy_destroyed (DBusGProxy *proxy,
SyncevoService *service);
G_DEFINE_TYPE (SyncevoService, syncevo_service, G_TYPE_OBJECT);
static guint32 signals[LAST_SIGNAL] = {0, };
static void
finalize (GObject *object)
{
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (object);
G_OBJECT_CLASS (syncevo_service_parent_class)->finalize (object);
}
static void
dispose (GObject *object)
{
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (object);
if (priv->proxy) {
dbus_g_proxy_disconnect_signal (priv->proxy, "Progress",
G_CALLBACK (progress_cb),
object);
dbus_g_proxy_disconnect_signal (priv->proxy, "ServerMessage",
G_CALLBACK (server_message_cb),
object);
g_object_unref (priv->proxy);
priv->proxy = NULL;
}
G_OBJECT_CLASS (syncevo_service_parent_class)->dispose (object);
}
static void progress_cb (DBusGProxy *proxy,
char *server,
char *source,
int type,
int extra1, int extra2, int extra3,
SyncevoService *service)
{
g_signal_emit (service, signals[PROGRESS], 0,
server, source, type, extra1, extra2, extra3);
}
static void server_message_cb (DBusGProxy *proxy,
char *server,
char *message,
SyncevoService *service)
{
g_signal_emit (service, signals[SERVER_MESSAGE], 0,
server, message);
}
static gboolean
syncevo_service_get_new_proxy (SyncevoService *service)
{
DBusGConnection *connection;
GError *error;
guint32 result;
SyncevoServicePrivate *priv;
DBusGProxy *proxy;
priv = GET_PRIVATE (service);
error = NULL;
connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
if (connection == NULL) {
g_printerr ("Failed to open connection to bus: %s\n",
error->message);
g_error_free (error);
priv->proxy = NULL;
return FALSE;
}
/* we want to use dbus_g_proxy_new_for_name_owner() for the destroy signal
* so need to start the service by hand by using DBUS proxy: */
proxy = dbus_g_proxy_new_for_name (connection,
DBUS_SERVICE_DBUS,
DBUS_PATH_DBUS,
DBUS_INTERFACE_DBUS);
if (!dbus_g_proxy_call (proxy, "StartServiceByName", NULL,
G_TYPE_STRING, SYNCEVO_SERVICE_DBUS_SERVICE,
G_TYPE_UINT, 0,
G_TYPE_INVALID,
G_TYPE_UINT, &result,
G_TYPE_INVALID)) {
g_warning ("StartServiceByName call failed");
}
g_object_unref (proxy);
/* the real proxy */
proxy = dbus_g_proxy_new_for_name_owner (connection,
SYNCEVO_SERVICE_DBUS_SERVICE,
SYNCEVO_SERVICE_DBUS_PATH,
SYNCEVO_SERVICE_DBUS_INTERFACE,
&error);
if (proxy == NULL) {
g_printerr ("dbus_g_proxy_new_for_name_owner() failed");
priv->proxy = NULL;
return FALSE;
}
dbus_g_proxy_add_signal (proxy, "Progress",
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (proxy, "Progress",
G_CALLBACK (progress_cb), service, NULL);
dbus_g_proxy_add_signal (proxy, "ServerMessage",
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (proxy, "ServerMessage",
G_CALLBACK (server_message_cb), service, NULL);
g_signal_connect (proxy, "destroy",
G_CALLBACK (proxy_destroyed), service);
priv->proxy = proxy;
return TRUE;
}
static void
proxy_destroyed (DBusGProxy *proxy,
SyncevoService *service)
{
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
if (priv->proxy) {
g_object_unref (priv->proxy);
}
priv->proxy = NULL;
g_signal_emit (service, signals[SERVER_SHUTDOWN], 0);
}
static GObject *
constructor (GType type,
guint n_construct_properties,
GObjectConstructParam *construct_properties)
{
SyncevoService *service;
SyncevoServicePrivate *priv;
service = SYNCEVO_SERVICE (G_OBJECT_CLASS (syncevo_service_parent_class)->constructor
(type, n_construct_properties, construct_properties));
priv = GET_PRIVATE (service);
dbus_g_object_register_marshaller (syncevo_marshal_VOID__STRING_STRING_INT_INT_INT_INT,
G_TYPE_NONE,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_INT,
G_TYPE_INT,
G_TYPE_INT,
G_TYPE_INT,
G_TYPE_INVALID);
dbus_g_object_register_marshaller (syncevo_marshal_VOID__STRING_STRING,
G_TYPE_NONE,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_INVALID);
syncevo_service_get_new_proxy (service);
return G_OBJECT (service);
}
static void
syncevo_service_class_init (SyncevoServiceClass *klass)
{
GObjectClass *o_class = (GObjectClass *) klass;
o_class->finalize = finalize;
o_class->dispose = dispose;
o_class->constructor = constructor;
g_type_class_add_private (klass, sizeof (SyncevoServicePrivate));
signals[PROGRESS] = g_signal_new ("progress",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE,
G_STRUCT_OFFSET (SyncevoServiceClass, progress),
NULL, NULL,
syncevo_marshal_VOID__STRING_STRING_INT_INT_INT_INT,
G_TYPE_NONE,
6, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
signals[SERVER_MESSAGE] = g_signal_new ("server-message",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE,
G_STRUCT_OFFSET (SyncevoServiceClass, server_message),
NULL, NULL,
syncevo_marshal_VOID__STRING_STRING,
G_TYPE_NONE,
2, G_TYPE_STRING, G_TYPE_STRING);
signals[SERVER_SHUTDOWN] = g_signal_new ("server-shutdown",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE,
G_STRUCT_OFFSET (SyncevoServiceClass, server_shutdown),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);
}
static void
syncevo_service_init (SyncevoService *service)
{
}
SyncevoService *
syncevo_service_get_default ()
{
static SyncevoService *default_service = NULL;
if (default_service == NULL) {
default_service = g_object_new (SYNCEVO_TYPE_SERVICE, NULL);
g_object_add_weak_pointer (G_OBJECT (default_service),
(gpointer) &default_service);
return default_service;
}
return g_object_ref (default_service);
}
gboolean syncevo_service_start_sync (SyncevoService *service,
char *server,
GPtrArray *sources,
GError **error)
{
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
if (error) {
*error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
}
return FALSE;
}
return org_Moblin_SyncEvolution_start_sync (priv->proxy,
server,
sources,
error);
}
gboolean syncevo_service_abort_sync (SyncevoService *service,
char *server,
GError **error)
{
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
if (error) {
*error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
}
return FALSE;
}
return org_Moblin_SyncEvolution_abort_sync (priv->proxy,
server,
error);
}
static void
abort_sync_async_callback (DBusGProxy *proxy,
GError *error,
SyncevoAsyncData *data)
{
(*(SyncevoAbortSyncCb)data->callback) (data->service,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
}
static gboolean
abort_sync_async_error (SyncevoAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
(*(SyncevoAbortSyncCb)data->callback) (data->service,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
return FALSE;
}
void
syncevo_service_abort_sync_async (SyncevoService *service,
char *server,
SyncevoAbortSyncCb callback,
gpointer userdata)
{
SyncevoAsyncData *data;
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
data = g_slice_new0 (SyncevoAsyncData);
data->service = service;
data->callback = G_CALLBACK (callback);
data->userdata = userdata;
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
g_idle_add ((GSourceFunc)abort_sync_async_error, data);
return;
}
org_Moblin_SyncEvolution_abort_sync_async
(priv->proxy,
server,
(org_Moblin_SyncEvolution_abort_sync_reply) abort_sync_async_callback,
data);
}
gboolean syncevo_service_get_servers (SyncevoService *service,
GPtrArray **servers,
GError **error)
{
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
if (error) {
*error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
}
return FALSE;
}
return org_Moblin_SyncEvolution_get_servers (priv->proxy,
servers,
error);
}
static void
get_servers_async_callback (DBusGProxy *proxy,
GPtrArray *servers,
GError *error,
SyncevoAsyncData *data)
{
(*(SyncevoGetServersCb)data->callback) (data->service,
servers,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
}
static gboolean
get_servers_async_error (SyncevoAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
(*(SyncevoGetServersCb)data->callback) (data->service,
NULL,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
return FALSE;
}
void
syncevo_service_get_servers_async (SyncevoService *service,
SyncevoGetServersCb callback,
gpointer userdata)
{
SyncevoAsyncData *data;
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
data = g_slice_new0 (SyncevoAsyncData);
data->service = service;
data->callback = G_CALLBACK (callback);
data->userdata = userdata;
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
g_idle_add ((GSourceFunc)get_servers_async_error, data);
return;
}
org_Moblin_SyncEvolution_get_servers_async
(priv->proxy,
(org_Moblin_SyncEvolution_get_servers_reply) get_servers_async_callback,
data);
}
gboolean syncevo_service_get_templates (SyncevoService *service,
GPtrArray **templates,
GError **error)
{
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
if (error) {
*error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
}
return FALSE;
}
return org_Moblin_SyncEvolution_get_templates (priv->proxy,
templates,
error);
}
static void
get_templates_async_callback (DBusGProxy *proxy,
GPtrArray *templates,
GError *error,
SyncevoAsyncData *data)
{
(*(SyncevoGetTemplatesCb)data->callback) (data->service,
templates,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
}
static gboolean
get_templates_async_error (SyncevoAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
(*(SyncevoGetTemplatesCb)data->callback) (data->service,
NULL,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
return FALSE;
}
void syncevo_service_get_templates_async (SyncevoService *service,
SyncevoGetTemplatesCb callback,
gpointer userdata)
{
SyncevoAsyncData *data;
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
data = g_slice_new0 (SyncevoAsyncData);
data->service = service;
data->callback = G_CALLBACK (callback);
data->userdata = userdata;
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
g_idle_add ((GSourceFunc)get_templates_async_error, data);
return;
}
org_Moblin_SyncEvolution_get_templates_async
(priv->proxy,
(org_Moblin_SyncEvolution_get_templates_reply) get_templates_async_callback,
data);
}
gboolean syncevo_service_get_template_config (SyncevoService *service,
char *template,
GPtrArray **options,
GError **error)
{
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
if (error) {
*error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
}
return FALSE;
}
return org_Moblin_SyncEvolution_get_template_config (priv->proxy,
template,
options,
error);
}
static void
get_template_config_async_callback (DBusGProxy *proxy,
GPtrArray *options,
GError *error,
SyncevoAsyncData *data)
{
(*(SyncevoGetTemplateConfigCb)data->callback) (data->service,
options,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
}
static gboolean
get_template_config_async_error (SyncevoAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
(*(SyncevoGetTemplateConfigCb)data->callback) (data->service,
NULL,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
return FALSE;
}
void
syncevo_service_get_template_config_async (SyncevoService *service,
char *template,
SyncevoGetServerConfigCb callback,
gpointer userdata)
{
SyncevoAsyncData *data;
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
data = g_slice_new0 (SyncevoAsyncData);
data->service = service;
data->callback = G_CALLBACK (callback);
data->userdata = userdata;
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
g_idle_add ((GSourceFunc)get_template_config_async_error, data);
return;
}
org_Moblin_SyncEvolution_get_template_config_async
(priv->proxy,
template,
(org_Moblin_SyncEvolution_get_server_config_reply) get_template_config_async_callback,
data);
}
gboolean syncevo_service_get_server_config (SyncevoService *service,
char *server,
GPtrArray **options,
GError **error)
{
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
if (error) {
*error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
}
return FALSE;
}
return org_Moblin_SyncEvolution_get_server_config (priv->proxy,
server,
options,
error);
}
static void
get_server_config_async_callback (DBusGProxy *proxy,
GPtrArray *options,
GError *error,
SyncevoAsyncData *data)
{
(*(SyncevoGetServerConfigCb)data->callback) (data->service,
options,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
}
static gboolean
get_server_config_async_error (SyncevoAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
(*(SyncevoGetServerConfigCb)data->callback) (data->service,
NULL,
error,
data->userdata);
return FALSE;
}
void
syncevo_service_get_server_config_async (SyncevoService *service,
char *server,
SyncevoGetServerConfigCb callback,
gpointer userdata)
{
SyncevoAsyncData *data;
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
data = g_slice_new0 (SyncevoAsyncData);
data->service = service;
data->callback = G_CALLBACK (callback);
data->userdata = userdata;
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
g_idle_add ((GSourceFunc)get_server_config_async_error, data);
return;
}
org_Moblin_SyncEvolution_get_server_config_async
(priv->proxy,
server,
(org_Moblin_SyncEvolution_get_server_config_reply) get_server_config_async_callback,
data);
}
gboolean syncevo_service_set_server_config (SyncevoService *service,
char *server,
GPtrArray *options,
GError **error)
{
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
if (error) {
*error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
}
return FALSE;
}
return org_Moblin_SyncEvolution_set_server_config (priv->proxy,
server,
options,
error);
}
static void
set_server_config_async_callback (DBusGProxy *proxy,
GError *error,
SyncevoAsyncData *data)
{
(*(SyncevoSetServerConfigCb)data->callback) (data->service,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
}
static gboolean
set_server_config_async_error (SyncevoAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
(*(SyncevoSetServerConfigCb)data->callback) (data->service,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
return FALSE;
}
void
syncevo_service_set_server_config_async (SyncevoService *service,
char *server,
GPtrArray *options,
SyncevoSetServerConfigCb callback,
gpointer userdata)
{
SyncevoAsyncData *data;
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
data = g_slice_new0 (SyncevoAsyncData);
data->service = service;
data->callback = G_CALLBACK (callback);
data->userdata = userdata;
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
g_idle_add ((GSourceFunc)set_server_config_async_error, data);
return;
}
org_Moblin_SyncEvolution_set_server_config_async
(priv->proxy,
server,
options,
(org_Moblin_SyncEvolution_set_server_config_reply) set_server_config_async_callback,
data);
}
gboolean
syncevo_service_remove_server_config (SyncevoService *service,
char *server,
GError **error)
{
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
if (error) {
*error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
}
return FALSE;
}
return org_Moblin_SyncEvolution_remove_server_config (priv->proxy,
server,
error);
}
static void
remove_server_config_async_callback (DBusGProxy *proxy,
GError *error,
SyncevoAsyncData *data)
{
(*(SyncevoRemoveServerConfigCb)data->callback) (data->service,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
}
static gboolean
remove_server_config_async_error (SyncevoAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
(*(SyncevoRemoveServerConfigCb)data->callback) (data->service,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
return FALSE;
}
void
syncevo_service_remove_server_config_async (SyncevoService *service,
char *server,
SyncevoRemoveServerConfigCb callback,
gpointer userdata)
{
SyncevoAsyncData *data;
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
data = g_slice_new0 (SyncevoAsyncData);
data->service = service;
data->callback = G_CALLBACK (callback);
data->userdata = userdata;
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
g_idle_add ((GSourceFunc)remove_server_config_async_error, data);
return;
}
org_Moblin_SyncEvolution_remove_server_config_async
(priv->proxy,
server,
(org_Moblin_SyncEvolution_remove_server_config_reply) remove_server_config_async_callback,
data);
}
gboolean
syncevo_service_get_sync_reports (SyncevoService *service,
char *server,
int count,
GPtrArray **reports,
GError **error)
{
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
if (error) {
*error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
}
return FALSE;
}
return org_Moblin_SyncEvolution_get_sync_reports (
priv->proxy,
server,
count,
reports,
error);
}
static void
get_sync_reports_async_callback (DBusGProxy *proxy,
GPtrArray *reports,
GError *error,
SyncevoAsyncData *data)
{
(*(SyncevoGetSyncReportsCb)data->callback) (data->service,
reports,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
}
static gboolean
get_sync_reports_async_error (SyncevoAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-service"),
SYNCEVO_SERVICE_ERROR_COULD_NOT_START,
"Could not start service");
(*(SyncevoGetSyncReportsCb)data->callback) (data->service,
NULL,
error,
data->userdata);
g_slice_free (SyncevoAsyncData, data);
return FALSE;
}
void
syncevo_service_get_sync_reports_async (SyncevoService *service,
char *server,
int count,
SyncevoGetSyncReportsCb callback,
gpointer userdata)
{
SyncevoAsyncData *data;
SyncevoServicePrivate *priv;
priv = GET_PRIVATE (service);
data = g_slice_new0 (SyncevoAsyncData);
data->service = service;
data->callback = G_CALLBACK (callback);
data->userdata = userdata;
if (!priv->proxy && !syncevo_service_get_new_proxy (service)) {
g_idle_add ((GSourceFunc)get_sync_reports_async_error, data);
return;
}
org_Moblin_SyncEvolution_get_sync_reports_async
(priv->proxy,
server,
count,
(org_Moblin_SyncEvolution_get_sync_reports_reply) get_sync_reports_async_callback,
data);
}

View file

@ -1,169 +0,0 @@
/*
* Copyright (C) 2009 Intel Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef __SYNCEVO_SERVICE_H__
#define __SYNCEVO_SERVICE_H__
#include <glib-object.h>
#include "syncevo-dbus-types.h"
G_BEGIN_DECLS
enum SyncevoServiceError{
SYNCEVO_SERVICE_ERROR_COULD_NOT_START = 1,
};
#define SYNCEVO_SERVICE_DBUS_SERVICE "org.Moblin.SyncEvolution"
#define SYNCEVO_SERVICE_DBUS_PATH "/org/Moblin/SyncEvolution"
#define SYNCEVO_SERVICE_DBUS_INTERFACE "org.Moblin.SyncEvolution"
#define SYNCEVO_TYPE_SERVICE (syncevo_service_get_type ())
#define SYNCEVO_SERVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SYNCEVO_TYPE_SERVICE, SyncevoService))
#define SYNCEVO_IS_SERVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SYNCEVO_TYPE_SERVICE))
typedef struct _SyncevoService {
GObject parent_object;
} SyncevoService;
typedef struct _SyncevoServiceClass {
GObjectClass parent_class;
void (*progress) (SyncevoService *service,
char *server,
char *source,
int type,
int extra1, int extra2, int extra3);
void (*server_message) (SyncevoService *service,
char *server,
char *message);
void (*server_shutdown) (SyncevoService *service);
} SyncevoServiceClass;
GType syncevo_service_get_type (void);
SyncevoService *syncevo_service_get_default ();
gboolean syncevo_service_start_sync (SyncevoService *service,
char *server,
GPtrArray *sources,
GError **error);
gboolean syncevo_service_abort_sync (SyncevoService *service,
char *server,
GError **error);
typedef void (*SyncevoAbortSyncCb) (SyncevoService *service,
GError *error,
gpointer userdata);
void syncevo_service_abort_sync_async (SyncevoService *service,
char *server,
SyncevoAbortSyncCb callback,
gpointer userdata);
gboolean syncevo_service_get_servers (SyncevoService *service,
GPtrArray **servers,
GError **error);
typedef void (*SyncevoGetServersCb) (SyncevoService *service,
GPtrArray *servers,
GError *error,
gpointer userdata);
void syncevo_service_get_servers_async (SyncevoService *service,
SyncevoGetServersCb callback,
gpointer userdata);
gboolean syncevo_service_get_templates (SyncevoService *service,
GPtrArray **templates,
GError **error);
typedef void (*SyncevoGetTemplatesCb) (SyncevoService *service,
GPtrArray *templates,
GError *error,
gpointer userdata);
void syncevo_service_get_templates_async (SyncevoService *service,
SyncevoGetTemplatesCb callback,
gpointer userdata);
gboolean syncevo_service_get_template_config (SyncevoService *service,
char *template,
GPtrArray **options,
GError **error);
typedef void (*SyncevoGetTemplateConfigCb) (SyncevoService *service,
GPtrArray *options,
GError *error,
gpointer userdata);
void syncevo_service_get_template_config_async (SyncevoService *service,
char *template,
SyncevoGetTemplateConfigCb callback,
gpointer userdata);
gboolean syncevo_service_get_server_config (SyncevoService *service,
char *server,
GPtrArray **options,
GError **error);
typedef void (*SyncevoGetServerConfigCb) (SyncevoService *service,
GPtrArray *options,
GError *error,
gpointer userdata);
void syncevo_service_get_server_config_async (SyncevoService *service,
char *server,
SyncevoGetServerConfigCb callback,
gpointer userdata);
gboolean syncevo_service_set_server_config (SyncevoService *service,
char *server,
GPtrArray *options,
GError **error);
typedef void (*SyncevoSetServerConfigCb) (SyncevoService *service,
GError *error,
gpointer userdata);
void syncevo_service_set_server_config_async (SyncevoService *service,
char *server,
GPtrArray *options,
SyncevoSetServerConfigCb callback,
gpointer userdata);
gboolean syncevo_service_remove_server_config (SyncevoService *service,
char *server,
GError **error);
typedef void (*SyncevoRemoveServerConfigCb) (SyncevoService *service,
GError *error,
gpointer userdata);
void syncevo_service_remove_server_config_async (SyncevoService *service,
char *server,
SyncevoRemoveServerConfigCb callback,
gpointer userdata);
gboolean syncevo_service_get_sync_reports (SyncevoService *service,
char *server,
int count,
GPtrArray **reports,
GError **error);
typedef void (*SyncevoGetSyncReportsCb) (SyncevoService *service,
GPtrArray *reports,
GError *error,
gpointer userdata);
void syncevo_service_get_sync_reports_async (SyncevoService *service,
char *server,
int count,
SyncevoGetSyncReportsCb callback,
gpointer userdata);
G_END_DECLS
#endif

535
src/dbus/syncevo-server.c Normal file
View file

@ -0,0 +1,535 @@
/*
* Copyright (C) 2009 Intel Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#include <glib-object.h>
#include <string.h>
#include "syncevo-server.h"
#include "syncevo-marshal.h"
#include "syncevo-server-bindings.h"
typedef struct _ServerAsyncData {
SyncevoServer *server;
GCallback callback;
gpointer userdata;
} ServerAsyncData;
enum {
SESSION_CHANGED,
SHUTDOWN,
LAST_SIGNAL
};
static guint32 signals[LAST_SIGNAL] = {0, };
typedef struct _SyncevoServerPrivate {
DBusGProxy *proxy;
} SyncevoServerPrivate;
#define GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SYNCEVO_TYPE_SERVER, SyncevoServerPrivate))
G_DEFINE_TYPE (SyncevoServer, syncevo_server, G_TYPE_OBJECT);
static ServerAsyncData*
server_async_data_new (SyncevoServer *server,
GCallback callback,
gpointer userdata)
{
ServerAsyncData *data;
data = g_slice_new0 (ServerAsyncData);
data->server = server;
data->callback = G_CALLBACK (callback);
data->userdata = userdata;
return data;
}
static void
server_async_data_free (ServerAsyncData *data)
{
g_slice_free (ServerAsyncData, data);
}
static void
session_changed_cb (DBusGProxy *proxy,
char *session_path,
gboolean started,
SyncevoServer *server)
{
g_signal_emit (server, signals[SESSION_CHANGED], 0,
session_path, started);
}
static void
proxy_destroy_cb (DBusGProxy *proxy,
SyncevoServer *server)
{
SyncevoServerPrivate *priv;
priv = GET_PRIVATE (server);
if (priv->proxy) {
g_object_unref (priv->proxy);
}
priv->proxy = NULL;
g_signal_emit (server, signals[SHUTDOWN], 0);
}
static void
dispose (GObject *object)
{
SyncevoServerPrivate *priv;
priv = GET_PRIVATE (object);
if (priv->proxy) {
dbus_g_proxy_disconnect_signal (priv->proxy, "SessionChanged",
G_CALLBACK (session_changed_cb),
object);
dbus_g_proxy_disconnect_signal (priv->proxy, "destroy",
G_CALLBACK (proxy_destroy_cb),
object);
g_object_unref (priv->proxy);
priv->proxy = NULL;
}
G_OBJECT_CLASS (syncevo_server_parent_class)->dispose (object);
}
static gboolean
syncevo_server_get_new_proxy (SyncevoServer *server)
{
DBusGConnection *connection;
GError *error;
guint32 result;
SyncevoServerPrivate *priv;
DBusGProxy *proxy;
priv = GET_PRIVATE (server);
error = NULL;
connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
if (connection == NULL) {
g_printerr ("Failed to open connection to bus: %s\n",
error->message);
g_error_free (error);
priv->proxy = NULL;
return FALSE;
}
/* we want to use dbus_g_proxy_new_for_name_owner() for the destroy signal
* so need to start the service by hand by using DBUS proxy: */
proxy = dbus_g_proxy_new_for_name (connection,
DBUS_SERVICE_DBUS,
DBUS_PATH_DBUS,
DBUS_INTERFACE_DBUS);
if (!dbus_g_proxy_call (proxy, "StartServiceByName", NULL,
G_TYPE_STRING, DBUS_SERVICE_SYNCEVO_SERVER,
G_TYPE_UINT, 0,
G_TYPE_INVALID,
G_TYPE_UINT, &result,
G_TYPE_INVALID)) {
g_warning ("StartServiceByName call failed");
}
g_object_unref (proxy);
/* the real proxy */
priv->proxy = dbus_g_proxy_new_for_name_owner (connection,
DBUS_SERVICE_SYNCEVO_SERVER,
DBUS_PATH_SYNCEVO_SERVER,
DBUS_INTERFACE_SYNCEVO_SERVER,
&error);
if (priv->proxy == NULL) {
g_printerr ("dbus_g_proxy_new_for_name_owner() failed");
return FALSE;
}
dbus_g_proxy_add_signal (priv->proxy, "SessionChanged",
G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (priv->proxy, "SessionChanged",
G_CALLBACK (session_changed_cb), server, NULL);
g_signal_connect (priv->proxy, "destroy",
G_CALLBACK (proxy_destroy_cb), server);
return TRUE;
}
static void
syncevo_server_init (SyncevoServer *server)
{
SyncevoServerPrivate *priv;
priv = GET_PRIVATE (server);
/* SessionChanged */
dbus_g_object_register_marshaller (syncevo_marshal_VOID__STRING_BOOLEAN,
G_TYPE_NONE,
G_TYPE_STRING,
G_TYPE_BOOLEAN,
G_TYPE_INVALID);
syncevo_server_get_new_proxy (server);
}
static void
syncevo_server_class_init (SyncevoServerClass *klass)
{
GObjectClass *o_class = (GObjectClass *) klass;
o_class->dispose = dispose;
g_type_class_add_private (klass, sizeof (SyncevoServerPrivate));
signals[SESSION_CHANGED] =
g_signal_new ("session-changed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE,
G_STRUCT_OFFSET (SyncevoServerClass, session_changed),
NULL, NULL,
syncevo_marshal_VOID__STRING_BOOLEAN,
G_TYPE_NONE,
2, G_TYPE_STRING, G_TYPE_BOOLEAN);
signals[SHUTDOWN] =
g_signal_new ("shutdown",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE,
G_STRUCT_OFFSET (SyncevoServerClass, shutdown),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);
}
SyncevoServer *
syncevo_server_get_default ()
{
static SyncevoServer *server = NULL;
if (server == NULL) {
server = g_object_new (SYNCEVO_TYPE_SERVER, NULL);
g_object_add_weak_pointer (G_OBJECT (server),
(gpointer) &server);
return server;
}
return g_object_ref (server);
}
static void
get_configs_callback (DBusGProxy *proxy,
char **config_names,
GError *error,
ServerAsyncData *data)
{
if (data->callback) {
(*(SyncevoServerGetConfigsCb)data->callback) (data->server,
config_names,
error,
data->userdata);
}
server_async_data_free (data);
}
static gboolean
get_configs_error (ServerAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-server"),
SYNCEVO_SERVER_ERROR_NO_DBUS_OBJECT,
"Could not start service");
(*(SyncevoServerGetConfigsCb)data->callback) (data->server,
NULL,
error,
data->userdata);
server_async_data_free (data);
return FALSE;
}
void
syncevo_server_get_configs (SyncevoServer *syncevo,
gboolean template,
SyncevoServerGetConfigsCb callback,
gpointer userdata)
{
ServerAsyncData *data;
SyncevoServerPrivate *priv;
priv = GET_PRIVATE (syncevo);
data = server_async_data_new (syncevo, G_CALLBACK (callback), userdata);
if (!priv->proxy && !syncevo_server_get_new_proxy (syncevo)) {
if (callback) {
g_idle_add ((GSourceFunc)get_configs_error, data);
}
return;
}
org_syncevolution_Server_get_configs_async
(priv->proxy,
template,
(org_syncevolution_Server_get_configs_reply) get_configs_callback,
data);
}
static void
get_config_callback (DBusGProxy *proxy,
SyncevoConfig *configuration,
GError *error,
ServerAsyncData *data)
{
if (data->callback) {
(*(SyncevoServerGetConfigCb)data->callback) (data->server,
configuration,
error,
data->userdata);
}
server_async_data_free (data);
}
static gboolean
get_config_error (ServerAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-server"),
SYNCEVO_SERVER_ERROR_NO_DBUS_OBJECT,
"Could not start service");
(*(SyncevoServerGetConfigCb)data->callback) (data->server,
NULL,
error,
data->userdata);
server_async_data_free (data);
return FALSE;
}
void
syncevo_server_get_config (SyncevoServer *syncevo,
const char *config_name,
gboolean template,
SyncevoServerGetConfigCb callback,
gpointer userdata)
{
ServerAsyncData *data;
SyncevoServerPrivate *priv;
priv = GET_PRIVATE (syncevo);
data = server_async_data_new (syncevo, G_CALLBACK (callback), userdata);
if (!priv->proxy && !syncevo_server_get_new_proxy (syncevo)) {
if (callback) {
g_idle_add ((GSourceFunc)get_config_error, data);
}
return;
}
org_syncevolution_Server_get_config_async
(priv->proxy,
config_name,
template,
(org_syncevolution_Server_get_config_reply) get_config_callback,
data);
}
static void
get_reports_callback (DBusGProxy *proxy,
SyncevoReports *reports,
GError *error,
ServerAsyncData *data)
{
if (data->callback) {
(*(SyncevoServerGetReportsCb)data->callback) (data->server,
reports,
error,
data->userdata);
}
server_async_data_free (data);
}
static gboolean
get_reports_error (ServerAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-server"),
SYNCEVO_SERVER_ERROR_NO_DBUS_OBJECT,
"Could not start service");
(*(SyncevoServerGetReportsCb)data->callback) (data->server,
NULL,
error,
data->userdata);
server_async_data_free (data);
return FALSE;
}
void
syncevo_server_get_reports (SyncevoServer *syncevo,
const char *config_name,
guint start,
guint count,
SyncevoServerGetReportsCb callback,
gpointer userdata)
{
ServerAsyncData *data;
SyncevoServerPrivate *priv;
priv = GET_PRIVATE (syncevo);
data = server_async_data_new (syncevo, G_CALLBACK (callback), userdata);
if (!priv->proxy && !syncevo_server_get_new_proxy (syncevo)) {
if (callback) {
g_idle_add ((GSourceFunc)get_reports_error, data);
}
return;
}
org_syncevolution_Server_get_reports_async
(priv->proxy,
config_name,
start,
count,
(org_syncevolution_Server_get_reports_reply) get_reports_callback,
data);
}
static void
start_session_callback (SyncevoServer *syncevo,
char *session_path,
GError *error,
ServerAsyncData *data)
{
if (data->callback) {
(*(SyncevoServerStartSessionCb)data->callback) (data->server,
session_path,
error,
data->userdata);
}
server_async_data_free (data);
}
static gboolean
start_session_error (ServerAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-server"),
SYNCEVO_SERVER_ERROR_NO_DBUS_OBJECT,
"Could not start service");
(*(SyncevoServerStartSessionCb)data->callback) (data->server,
NULL,
error,
data->userdata);
server_async_data_free (data);
return FALSE;
}
void
syncevo_server_start_session (SyncevoServer *syncevo,
const char *config_name,
SyncevoServerStartSessionCb callback,
gpointer userdata)
{
ServerAsyncData *data;
SyncevoServerPrivate *priv;
priv = GET_PRIVATE (syncevo);
data = server_async_data_new (syncevo, G_CALLBACK (callback), userdata);
if (!priv->proxy && !syncevo_server_get_new_proxy (syncevo)) {
if (callback) {
g_idle_add ((GSourceFunc)start_session_error, data);
}
return;
}
org_syncevolution_Server_start_session_async
(priv->proxy,
config_name,
(org_syncevolution_Server_start_session_reply) start_session_callback,
data);
}
static void
get_sessions_callback (SyncevoServer *syncevo,
SyncevoSessions *sessions,
GError *error,
ServerAsyncData *data)
{
if (data->callback) {
(*(SyncevoServerGetSessionsCb)data->callback) (data->server,
sessions,
error,
data->userdata);
}
server_async_data_free (data);
}
static gboolean
get_sessions_error (ServerAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-server"),
SYNCEVO_SERVER_ERROR_NO_DBUS_OBJECT,
"Could not start service");
(*(SyncevoServerGetSessionsCb)data->callback) (data->server,
NULL,
error,
data->userdata);
server_async_data_free (data);
return FALSE;
}
void
syncevo_server_get_sessions (SyncevoServer *syncevo,
SyncevoServerGetSessionsCb callback,
gpointer userdata)
{
ServerAsyncData *data;
SyncevoServerPrivate *priv;
priv = GET_PRIVATE (syncevo);
data = server_async_data_new (syncevo, G_CALLBACK (callback), userdata);
if (!priv->proxy && !syncevo_server_get_new_proxy (syncevo)) {
if (callback) {
g_idle_add ((GSourceFunc)get_sessions_error, data);
}
return;
}
org_syncevolution_Server_get_sessions_async
(priv->proxy,
(org_syncevolution_Server_get_reports_reply) get_sessions_callback,
data);
}

108
src/dbus/syncevo-server.h Normal file
View file

@ -0,0 +1,108 @@
/*
* Copyright (C) 2009 Intel Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef __SYNCEVO_SERVER_H__
#define __SYNCEVO_SERVER_H__
#include <glib-object.h>
#include "syncevo-dbus-types.h"
G_BEGIN_DECLS
enum SyncevoServerError{
SYNCEVO_SERVER_ERROR_NO_DBUS_OBJECT = 1,
};
#define DBUS_SERVICE_SYNCEVO_SERVER "org.syncevolution.Server"
#define DBUS_PATH_SYNCEVO_SERVER "/org/syncevolution/Server"
#define DBUS_INTERFACE_SYNCEVO_SERVER "org.syncevolution.Server"
#define SYNCEVO_TYPE_SERVER (syncevo_server_get_type ())
#define SYNCEVO_SERVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SYNCEVO_TYPE_SERVER, SyncevoServer))
#define SYNCEVO_IS_SERVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SYNCEVO_TYPE_SERVER))
typedef struct _SyncevoServer {
GObject parent_object;
} SyncevoServer;
typedef struct _SyncevoServerClass {
GObjectClass parent_class;
void (*session_changed) (SyncevoServer *syncevo,
char *session_path,
gboolean started);
void (*shutdown) (SyncevoServer *syncevo);
} SyncevoServerClass;
GType syncevo_server_get_type (void);
SyncevoServer *syncevo_server_get_default ();
typedef void (*SyncevoServerGetConfigsCb) (SyncevoServer *syncevo,
char **config_names,
GError *error,
gpointer userdata);
void syncevo_server_get_configs (SyncevoServer *syncevo,
gboolean template,
SyncevoServerGetConfigsCb callback,
gpointer userdata);
typedef void (*SyncevoServerGetConfigCb) (SyncevoServer *syncevo,
SyncevoConfig *config,
GError *error,
gpointer userdata);
void syncevo_server_get_config (SyncevoServer *syncevo,
const char *config_name,
gboolean template,
SyncevoServerGetConfigCb callback,
gpointer userdata);
typedef void (*SyncevoServerGetReportsCb) (SyncevoServer *syncevo,
SyncevoReports *reports,
GError *error,
gpointer userdata);
void syncevo_server_get_reports (SyncevoServer *syncevo,
const char *config_name,
guint start,
guint count,
SyncevoServerGetReportsCb callback,
gpointer userdata);
typedef void (*SyncevoServerStartSessionCb) (SyncevoServer *syncevo,
char *session_path,
GError *error,
gpointer userdata);
void syncevo_server_start_session (SyncevoServer *syncevo,
const char *config_name,
SyncevoServerStartSessionCb callback,
gpointer userdata);
typedef void (*SyncevoServerGetSessionsCb) (SyncevoServer *syncevo,
SyncevoSessions *sessions,
GError *error,
gpointer userdata);
void syncevo_server_get_sessions (SyncevoServer *syncevo,
SyncevoServerGetSessionsCb callback,
gpointer userdata);
G_END_DECLS
#endif

532
src/dbus/syncevo-session.c Normal file
View file

@ -0,0 +1,532 @@
/*
* Copyright (C) 2009 Intel Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#include <glib-object.h>
#include <string.h>
#include "syncevo-session.h"
#include "syncevo-marshal.h"
#include "syncevo-session-bindings.h"
typedef struct _SessionAsyncData {
SyncevoSession *session;
GCallback callback;
gpointer userdata;
} SessionAsyncData;
enum {
STATUS_CHANGED,
PROGRESS_CHANGED,
LAST_SIGNAL
};
static guint32 signals[LAST_SIGNAL] = {0, };
typedef struct _SyncevoSessionPrivate {
DBusGProxy *proxy;
} SyncevoSessionPrivate;
#define GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SYNCEVO_TYPE_SESSION, SyncevoSessionPrivate))
G_DEFINE_TYPE (SyncevoSession, syncevo_session, G_TYPE_OBJECT);
static SessionAsyncData*
session_async_data_new (SyncevoSession *session,
GCallback callback,
gpointer userdata)
{
SessionAsyncData *data;
data = g_slice_new0 (SessionAsyncData);
data->session = session;
data->callback = G_CALLBACK (callback);
data->userdata = userdata;
return data;
}
static void
session_async_data_free (SessionAsyncData *data)
{
g_slice_free (SessionAsyncData, data);
}
static void
status_changed_cb (DBusGProxy *proxy,
SyncevoSessionStatus status,
guint error_code,
SyncevoSourceStatuses *source_statuses,
SyncevoSession *session)
{
g_signal_emit (session, signals[STATUS_CHANGED], 0,
status,
error_code,
source_statuses);
}
static void
progress_changed_cb (DBusGProxy *proxy,
guint progress,
SyncevoSourceProgresses *source_progresses,
SyncevoSession *session)
{
g_signal_emit (session, signals[PROGRESS_CHANGED], 0,
progress,
source_progresses);
}
static void
dispose (GObject *object)
{
SyncevoSessionPrivate *priv;
priv = GET_PRIVATE (object);
if (priv->proxy) {
dbus_g_proxy_disconnect_signal (priv->proxy, "ProgressChanged",
G_CALLBACK (progress_changed_cb),
object);
dbus_g_proxy_disconnect_signal (priv->proxy, "StatusChanged",
G_CALLBACK (status_changed_cb),
object);
g_object_unref (priv->proxy);
priv->proxy = NULL;
}
G_OBJECT_CLASS (syncevo_session_parent_class)->dispose (object);
}
static void
syncevo_session_init (SyncevoSession *session)
{
SyncevoSessionPrivate *priv;
priv = GET_PRIVATE (session);
/* ProgressChanged */
dbus_g_object_register_marshaller (syncevo_marshal_VOID__INT_BOXED,
G_TYPE_NONE,
G_TYPE_INT,
G_TYPE_BOXED,
G_TYPE_INVALID);
/* StatusChanged */
dbus_g_object_register_marshaller (syncevo_marshal_VOID__INT_INT_BOXED,
G_TYPE_NONE,
G_TYPE_INT,
G_TYPE_INT,
G_TYPE_BOXED,
G_TYPE_INVALID);
/*TODO init proxy in the path setter
priv->proxy = dbus_g_proxy_new_for_name (connection,
SYNCEVO_SESSION_DBUS_SERVICE,
path,
SYNCEVO_SESSION_DBUS_INTERFACE);
if (priv->proxy == NULL) {
g_printerr ("dbus_g_proxy_new_for_name() failed for path '%s'", path);
return;
}
*/
/* TODO for all signals
dbus_g_proxy_add_signal
dbus_g_proxy_connect_signal
*/
}
static void
generic_callback (DBusGProxy *proxy,
GError *error,
SessionAsyncData *data)
{
if (data->callback) {
(*(SyncevoSessionGenericCb)data->callback) (data->session,
error,
data->userdata);
}
session_async_data_free (data);
}
static gboolean
generic_error (SessionAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-session"),
SYNCEVO_SESSION_ERROR_NO_DBUS_OBJECT,
"The D-Bus object does not exist");
(*(SyncevoSessionGenericCb)data->callback) (data->session,
error,
data->userdata);
session_async_data_free (data);
return FALSE;
}
static void
get_config_callback (DBusGProxy *proxy,
SyncevoConfig *configuration,
GError *error,
SessionAsyncData *data)
{
if (data->callback) {
(*(SyncevoSessionGetConfigCb)data->callback) (data->session,
configuration,
error,
data->userdata);
}
session_async_data_free (data);
}
static gboolean
get_config_error (SessionAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-session"),
SYNCEVO_SESSION_ERROR_NO_DBUS_OBJECT,
"The D-Bus object does not exist");
(*(SyncevoSessionGetConfigCb)data->callback) (data->session,
NULL,
error,
data->userdata);
session_async_data_free (data);
return FALSE;
}
void
syncevo_session_get_config (SyncevoSession *session,
SyncevoSessionGetConfigCb callback,
gpointer userdata)
{
SessionAsyncData *data;
SyncevoSessionPrivate *priv;
priv = GET_PRIVATE (session);
data = session_async_data_new (session, G_CALLBACK (callback), userdata);
if (!priv->proxy) {
if (callback) {
g_idle_add ((GSourceFunc)get_config_error, data);
}
return;
}
org_syncevolution_Session_get_config_async
(priv->proxy,
(org_syncevolution_Session_get_config_reply) get_config_callback,
data);
}
void
syncevo_session_set_config (SyncevoSession *session,
gboolean update,
gboolean temporary,
SyncevoConfig *config,
SyncevoSessionGenericCb callback,
gpointer userdata)
{
SessionAsyncData *data;
SyncevoSessionPrivate *priv;
priv = GET_PRIVATE (session);
data = session_async_data_new (session, G_CALLBACK (callback), userdata);
if (!priv->proxy) {
if (callback) {
g_idle_add ((GSourceFunc)generic_error, data);
}
return;
}
org_syncevolution_Session_set_config_async
(priv->proxy,
update,
temporary,
config,
(org_syncevolution_Session_set_config_reply) generic_callback,
data);
}
static void
get_reports_callback (DBusGProxy *proxy,
SyncevoReports *reports,
GError *error,
SessionAsyncData *data)
{
if (data->callback) {
(*(SyncevoSessionGetReportsCb)data->callback) (data->session,
reports,
error,
data->userdata);
}
session_async_data_free (data);
}
static gboolean
get_reports_error (SessionAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-session"),
SYNCEVO_SESSION_ERROR_NO_DBUS_OBJECT,
"The D-Bus object does not exist");
(*(SyncevoSessionGetReportsCb)data->callback) (data->session,
NULL,
error,
data->userdata);
session_async_data_free (data);
return FALSE;
}
void
syncevo_session_get_reports (SyncevoSession *session,
guint start,
guint count,
SyncevoSessionGetReportsCb callback,
gpointer userdata)
{
SessionAsyncData *data;
SyncevoSessionPrivate *priv;
priv = GET_PRIVATE (session);
data = session_async_data_new (session, G_CALLBACK (callback), userdata);
if (!priv->proxy) {
if (callback) {
g_idle_add ((GSourceFunc)get_reports_error, data);
}
return;
}
org_syncevolution_Session_get_reports_async
(priv->proxy,
start,
count,
(org_syncevolution_Session_get_reports_reply)get_reports_callback,
data);
}
void
syncevo_session_sync (SyncevoSession *session,
SyncevoSyncMode mode,
SyncevoSourceModes *source_modes,
SyncevoSessionGenericCb callback,
gpointer userdata)
{
SessionAsyncData *data;
SyncevoSessionPrivate *priv;
priv = GET_PRIVATE (session);
data = session_async_data_new (session, G_CALLBACK (callback), userdata);
if (!priv->proxy) {
if (callback) {
g_idle_add ((GSourceFunc)generic_error, data);
}
return;
}
org_syncevolution_Session_sync_async
(priv->proxy,
syncevo_sync_mode_to_string (mode),
source_modes,
(org_syncevolution_Session_sync_reply) generic_callback,
data);
}
void
syncevo_session_abort (SyncevoSession *session,
SyncevoSessionGenericCb callback,
gpointer userdata)
{
SessionAsyncData *data;
SyncevoSessionPrivate *priv;
priv = GET_PRIVATE (session);
data = session_async_data_new (session, G_CALLBACK (callback), userdata);
if (!priv->proxy) {
if (callback) {
g_idle_add ((GSourceFunc)generic_error, data);
}
return;
}
org_syncevolution_Session_abort_async
(priv->proxy,
(org_syncevolution_Session_abort_reply) generic_callback,
data);
}
void
syncevo_session_suspend (SyncevoSession *session,
SyncevoSessionGenericCb callback,
gpointer userdata)
{
SessionAsyncData *data;
SyncevoSessionPrivate *priv;
priv = GET_PRIVATE (session);
data = session_async_data_new (session, G_CALLBACK (callback), userdata);
if (!priv->proxy) {
if (callback) {
g_idle_add ((GSourceFunc)generic_error, data);
}
return;
}
org_syncevolution_Session_suspend_async
(priv->proxy,
(org_syncevolution_Session_suspend_reply) generic_callback,
data);
}
static void
get_status_callback (DBusGProxy *proxy,
char *status,
guint error_code,
SyncevoSourceStatuses *sources,
GError *error,
SessionAsyncData *data)
{
if (data->callback) {
(*(SyncevoSessionGetStatusCb)data->callback) (data->session,
syncevo_session_status_from_string (status),
error_code,
sources,
error,
data->userdata);
}
session_async_data_free (data);
}
static gboolean
get_status_error (SessionAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-session"),
SYNCEVO_SESSION_ERROR_NO_DBUS_OBJECT,
"The D-Bus object does not exist");
(*(SyncevoSessionGetStatusCb)data->callback) (data->session,
SYNCEVO_STATUS_UNKNOWN,
0,
NULL,
error,
data->userdata);
session_async_data_free (data);
return FALSE;
}
void
syncevo_session_get_status (SyncevoSession *session,
SyncevoSessionGetStatusCb callback,
gpointer userdata)
{
SessionAsyncData *data;
SyncevoSessionPrivate *priv;
priv = GET_PRIVATE (session);
data = session_async_data_new (session, G_CALLBACK (callback), userdata);
if (!priv->proxy) {
if (callback) {
g_idle_add ((GSourceFunc)get_status_error, data);
}
return;
}
org_syncevolution_Session_get_status_async
(priv->proxy,
(org_syncevolution_Session_get_status_reply) get_status_callback,
data);
}
static void
get_progress_callback (DBusGProxy *proxy,
int progress,
SyncevoSourceProgresses *source_progresses,
GError *error,
SessionAsyncData *data)
{
if (data->callback) {
(*(SyncevoSessionGetProgressCb)data->callback) (data->session,
progress,
source_progresses,
error,
data->userdata);
}
session_async_data_free (data);
}
static gboolean
get_progress_error (SessionAsyncData *data)
{
GError *error;
error = g_error_new_literal (g_quark_from_static_string ("syncevo-session"),
SYNCEVO_SESSION_ERROR_NO_DBUS_OBJECT,
"The D-Bus object does not exist");
(*(SyncevoSessionGetProgressCb)data->callback) (data->session,
-1,
NULL,
error,
data->userdata);
session_async_data_free (data);
return FALSE;
}
void
syncevo_session_get_progress (SyncevoSession *session,
SyncevoSessionGetProgressCb callback,
gpointer userdata)
{
SessionAsyncData *data;
SyncevoSessionPrivate *priv;
priv = GET_PRIVATE (session);
data = session_async_data_new (session, G_CALLBACK (callback), userdata);
if (!priv->proxy) {
if (callback) {
g_idle_add ((GSourceFunc)get_progress_error, data);
}
return;
}
org_syncevolution_Session_get_progress_async
(priv->proxy,
(org_syncevolution_Session_get_progress_reply) get_progress_callback,
data);
}

123
src/dbus/syncevo-session.h Normal file
View file

@ -0,0 +1,123 @@
/*
* Copyright (C) 2009 Intel Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef __SYNCEVO_SESSION_H__
#define __SYNCEVO_SESSION_H__
#include <glib-object.h>
#include "syncevo-dbus-types.h"
G_BEGIN_DECLS
enum SyncevoSessionError{
SYNCEVO_SESSION_ERROR_NO_DBUS_OBJECT = 1,
};
#define SYNCEVO_SESSION_DBUS_SERVICE "org.syncevolution.Session"
#define SYNCEVO_SESSION_DBUS_INTERFACE "org.syncevolution.Session"
#define SYNCEVO_TYPE_SESSION (syncevo_session_get_type ())
#define SYNCEVO_SESSION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SYNCEVO_TYPE_SESSION, SyncevoSession))
#define SYNCEVO_IS_SESSION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SYNCEVO_TYPE_SESSION))
typedef struct _SyncevoSession {
GObject parent_object;
} SyncevoSession;
typedef struct _SyncevoSessionClass {
GObjectClass parent_class;
void (*status_changed) (SyncevoSession *session,
SyncevoSessionStatus status,
guint error_code,
SyncevoSourceStatuses *source_statuses);
void (*progress_changed) (SyncevoSession *session,
guint progress,
SyncevoSourceProgresses *source_progresses);
} SyncevoSessionClass;
GType syncevo_session_get_type (void);
typedef void (*SyncevoSessionGenericCb) (SyncevoSession *session,
GError *error,
gpointer userdata);
typedef void (*SyncevoSessionGetConfigCb) (SyncevoSession *session,
SyncevoConfig *config,
GError *error,
gpointer userdata);
void syncevo_session_get_config (SyncevoSession *session,
SyncevoSessionGetConfigCb callback,
gpointer userdata);
void syncevo_session_set_config (SyncevoSession *session,
gboolean update,
gboolean temporary,
SyncevoConfig *config,
SyncevoSessionGenericCb callback,
gpointer userdata);
typedef void (*SyncevoSessionGetReportsCb) (SyncevoSession *session,
SyncevoReports *reports,
GError *error,
gpointer userdata);
void syncevo_session_get_reports (SyncevoSession *session,
guint start,
guint count,
SyncevoSessionGetReportsCb callback,
gpointer userdata);
void syncevo_session_sync (SyncevoSession *session,
SyncevoSyncMode mode,
SyncevoSourceModes *source_modes,
SyncevoSessionGenericCb callback,
gpointer userdata);
void syncevo_session_abort (SyncevoSession *session,
SyncevoSessionGenericCb callback,
gpointer userdata);
void syncevo_session_suspend (SyncevoSession *session,
SyncevoSessionGenericCb callback,
gpointer userdata);
typedef void (*SyncevoSessionGetStatusCb) (SyncevoSession *session,
SyncevoSessionStatus status,
guint error_code,
SyncevoSourceStatuses *source_statuses,
GError *error,
gpointer userdata);
void syncevo_session_get_status (SyncevoSession *session,
SyncevoSessionGetStatusCb callback,
gpointer userdata);
typedef void (*SyncevoSessionGetProgressCb) (SyncevoSession *session,
guint progress,
SyncevoSourceProgresses *source_progresses,
GError *error,
gpointer userdata);
void syncevo_session_get_progress (SyncevoSession *session,
SyncevoSessionGetProgressCb callback,
gpointer userdata);
G_END_DECLS
#endif

View file

@ -1,205 +0,0 @@
/*
* Copyright (C) 2009 Intel Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
/* test syncevo dbus */
#include "syncevo-dbus.h"
#include <synthesis/syerror.h>
#include <synthesis/engine_defs.h>
static void
print_option (SyncevoOption *option, gpointer userdata)
{
const char *ns, *key, *value;
syncevo_option_get (option, &ns, &key, &value);
g_debug (" Got option [%s] %s = %s", ns, key, value);
}
static void
print_server (SyncevoServer *temp, gpointer userdata)
{
const char *name, *url, *icon;
gboolean ready;
syncevo_server_get (temp, &name, &url, &icon, &ready);
g_debug (" Got server %s (%s, %s, %sconsumer ready)",
name, url, icon,
ready ? "" : "non-");
}
static void
progress_cb (SyncevoService *service,
char *server,
char *source,
int type,
int extra1, int extra2, int extra3,
GMainLoop *loop)
{
char *mode, *speed;
int percent;
switch(type) {
case -1:
g_print ("Finished syncing %s with return value %d\n", server, extra1);
g_main_loop_quit (loop);
break;
case PEV_SESSIONSTART:
g_debug (" progress: %s: session start", server);
break;
case PEV_SESSIONEND:
g_debug (" progress: %s: session end", server);
break;
case PEV_SENDSTART:
g_debug (" progress: %s: send start", server);
break;
case PEV_SENDEND:
g_debug (" progress: %s: send end", server);
break;
case PEV_RECVSTART:
g_debug (" progress: %s: receive start", server);
break;
case PEV_RECVEND:
g_debug (" progress: %s: receive end", server);
break;
case PEV_ALERTED:
switch (extra1) {
case 0: speed = ""; break;
case 1: speed = "slow "; break;
case 2: speed = "first time slow "; break;
default: g_assert_not_reached();
}
switch (extra3) {
case 0: mode = "two-way"; break;
case 1: mode = "from server"; break;
case 2: mode = "from client"; break;
default: g_assert_not_reached();
}
g_debug (" source progress: %s/%s: alert (%s%s)", server, source, speed, mode);
break;
case PEV_PREPARING:
percent = CLAMP (100 * extra1 / extra2, 0, 100);
g_debug (" source progress: %s/%s: preparing (%d%%)", server, source, percent);
break;
case PEV_ITEMSENT:
percent = CLAMP (100 * extra1 / extra2, 0, 100);
g_debug (" source progress: %s/%s: item sent (%d%%)", server, source, percent);
break;
case PEV_ITEMRECEIVED:
percent = CLAMP (100 * extra1 / extra2, 0, 100);
g_debug (" source progress: %s/%s: item received (%d%%)", server, source, percent);
break;
case PEV_ITEMPROCESSED:
g_debug (" source progress: %s/%s: item processed (added %d, updated %d, deleted %d)", server, source, extra1, extra2, extra3);
break;
case PEV_SYNCSTART:
g_debug (" source progress: %s/%s: sync started", server, source);
break;
case PEV_SYNCEND:
switch (extra1) {
case 0:
g_debug (" source progress: %s/%s: sync finished", server, source);
break;
case LOCERR_USERABORT:
g_debug (" source progress: %s/%s: sync aborted by user", server, source);
break;
case LOCERR_USERSUSPEND:
g_debug (" source progress: %s/%s: sync suspended by user", server, source);
break;
default:
g_debug (" source progress: %s/%s: sync finished with error %d", server, source, extra1);
}
break;
default:
if(source)
g_debug (" source progress: %s/%s: unknown type (%d)", server, source, type);
else
g_debug (" progress: %s: unknown type (%d)", server, type);
g_debug (" %d, %d, %d", extra1, extra2, extra3);
}
}
int main (int argc, char *argv[])
{
SyncevoService *service;
GMainLoop *loop;
GPtrArray *sources;
GError *error = NULL;
GPtrArray *array;
char *server = NULL;
g_type_init();
if (argc > 1) {
server = argv[1];
}
service = syncevo_service_get_default ();
array = g_ptr_array_new();
g_print ("Testing syncevo_service_get_servers()\n");
syncevo_service_get_servers (service, &array, &error);
if (error) {
g_error (" syncevo_service_get_servers() failed with %s", error->message);
}
g_ptr_array_foreach (array, (GFunc)print_server, NULL);
array = g_ptr_array_new();
g_print ("Testing syncevo_service_get_templates()\n");
syncevo_service_get_templates (service, &array, &error);
if (error) {
g_error (" syncevo_service_get_templates() failed with %s", error->message);
}
g_ptr_array_foreach (array, (GFunc)print_server, NULL);
if (!server) {
g_print ("No server given, stopping here\n");
return 0;
}
array = g_ptr_array_new();
g_print ("Testing syncevo_service_get_config() with server %s\n", server);
syncevo_service_get_server_config (service, server, &array, &error);
if (error) {
g_error (" syncevo_service_get_server_config() failed with %s", error->message);
}
g_ptr_array_foreach (array, (GFunc)print_option, NULL);
loop = g_main_loop_new (NULL, TRUE);
g_signal_connect (service, "progress", (GCallback)progress_cb, loop);
g_print ("Testing syncevo_service_start_sync() with server %s\n", server);
sources = g_ptr_array_new (); /*empty*/
syncevo_service_start_sync (service,
server,
sources,
&error);
if (error) {
g_error (" syncevo_service_start_sync() failed with %s", error->message);
}
g_main_loop_run (loop);
return 0;
}