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:
parent
fee9c3917b
commit
8b93714261
14 changed files with 1689 additions and 1779 deletions
|
@ -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 = \
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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) \
|
||||
|
|
|
@ -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>
|
|
@ -1,2 +1,5 @@
|
|||
VOID:STRING,STRING,INT,INT,INT,INT
|
||||
VOID:STRING,STRING
|
||||
VOID:STRING,BOOLEAN
|
||||
VOID:INT,BOXED
|
||||
VOID:INT,INT,BOXED
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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
535
src/dbus/syncevo-server.c
Normal 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
108
src/dbus/syncevo-server.h
Normal 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
532
src/dbus/syncevo-session.c
Normal 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
123
src/dbus/syncevo-session.h
Normal 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
|
205
src/dbus/test.c
205
src/dbus/test.c
|
@ -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;
|
||||
}
|
Loading…
Reference in a new issue