[packages/libopensync-plugin-gpe] - up to 0.36, patched for libopensync 0.39
qboosh
qboosh at pld-linux.org
Sun Sep 7 18:52:37 CEST 2025
commit 1db7d1cb34e33892eeb85c72074320dad1d846f8
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date: Sun Sep 7 18:55:27 2025 +0200
- up to 0.36, patched for libopensync 0.39
libopensync-plugin-gpe-libopensync0.39.patch | 696 +++++++++++++++++++++++++++
libopensync-plugin-gpe.spec | 37 +-
2 files changed, 718 insertions(+), 15 deletions(-)
---
diff --git a/libopensync-plugin-gpe.spec b/libopensync-plugin-gpe.spec
index f995f30..a9690fa 100644
--- a/libopensync-plugin-gpe.spec
+++ b/libopensync-plugin-gpe.spec
@@ -1,17 +1,24 @@
Summary: GPE Plugin for OpenSync
Summary(pl.UTF-8): Wtyczka GPE do OpenSync
Name: libopensync-plugin-gpe
-Version: 0.22
+Version: 0.36
Release: 1
License: LGPL v2.1+
Group: Libraries
-Source0: http://www.opensync.org/attachment/wiki/download/%{name}-%{version}.tar.bz2?format=raw
-# Source0-md5: 791c8976b725c4c52e5dd38ddb38c769
-URL: http://www.opensync.org/
+# dead domain
+#Source0: http://www.opensync.org/attachment/wiki/download/%{name}-%{version}.tar.bz2?format=raw
+# restored from http://ftp.iij.ad.jp/pub/linux/momonga/5/Everything/SOURCES/libopensync-plugin-gpe-0.36.tar.bz2
+Source0: %{name}-%{version}.tar.bz2
+# Source0-md5: a0d6bc631beacaaf324b97daaa27042d
+Patch0: %{name}-libopensync0.39.patch
+# dead
+#URL: http://www.opensync.org/
+BuildRequires: cmake
BuildRequires: glib2-devel >= 2.0
-BuildRequires: libopensync-devel >= %{version}
-BuildRequires: libxml2-devel >= 2.0
+BuildRequires: libopensync-devel >= 1:0.39
BuildRequires: pkgconfig
+BuildRequires: rpmbuild(macros) >= 1.605
+Requires: libopensync >= 1:0.39
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
%description
@@ -24,26 +31,26 @@ z PDA używającymi GPE <http://gpe.handhelds.org>.
%prep
%setup -q
+%patch -P0 -p1
%build
-%configure
+install -d build
+cd build
+%cmake ..
+
%{__make}
%install
rm -rf $RPM_BUILD_ROOT
-%{__make} install \
+%{__make} -C build install \
DESTDIR=$RPM_BUILD_ROOT
-rm -f $RPM_BUILD_ROOT%{_libdir}/opensync/plugins/*.la
-# no -devel yet
-rm -f $RPM_BUILD_ROOT%{_includedir}/opensync-1.0/opensync/gpe_sync.h
-
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(644,root,root,755)
-%doc AUTHORS ChangeLog README
-%attr(755,root,root) %{_libdir}/opensync/plugins/gpe_sync.so
-%{_datadir}/opensync/defaults/gpe-sync
+%doc AUTHORS BUGS ChangeLog HOWTO README
+%attr(755,root,root) %{_libdir}/libopensync1/plugins/gpe-sync.so
+%{_datadir}/libopensync1/defaults/gpe-sync
diff --git a/libopensync-plugin-gpe-libopensync0.39.patch b/libopensync-plugin-gpe-libopensync0.39.patch
new file mode 100644
index 0000000..65d31fb
--- /dev/null
+++ b/libopensync-plugin-gpe-libopensync0.39.patch
@@ -0,0 +1,696 @@
+--- libopensync-plugin-gpe-0.36/CMakeLists.txt.orig 2008-01-26 18:02:58.000000000 +0100
++++ libopensync-plugin-gpe-0.36/CMakeLists.txt 2025-09-07 18:35:11.693546342 +0200
+@@ -8,7 +8,6 @@ SET( OPENSYNC_MIN_VERSION "0.36" )
+
+ FIND_PACKAGE( OpenSync REQUIRED )
+ FIND_PACKAGE( GLIB2 REQUIRED )
+-FIND_PACKAGE( LibXml2 REQUIRED )
+
+ INCLUDE( OpenSyncInternal )
+
+--- libopensync-plugin-gpe-0.36/src/CMakeLists.txt.orig 2008-01-26 18:02:58.000000000 +0100
++++ libopensync-plugin-gpe-0.36/src/CMakeLists.txt 2025-09-07 18:35:40.976721035 +0200
+@@ -1,5 +1,5 @@
+-LINK_DIRECTORIES( ${OPENSYNC_LIBRARY_DIRS} ${GLIB2_LIBRARY_DIRS} ${LIBXML2_LIBRARY_DIRS} )
+-INCLUDE_DIRECTORIES( ${OPENSYNC_INCLUDE_DIRS} ${GLIB2_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIRS} )
++LINK_DIRECTORIES( ${OPENSYNC_LIBRARY_DIRS} ${GLIB2_LIBRARY_DIRS} )
++INCLUDE_DIRECTORIES( ${OPENSYNC_INCLUDE_DIRS} ${GLIB2_INCLUDE_DIRS} )
+
+
+ SET( gpe_LIB_SRCS
+@@ -14,7 +14,7 @@ utils.c
+
+ OPENSYNC_PLUGIN_ADD( gpe-sync ${gpe_LIB_SRCS} )
+
+-TARGET_LINK_LIBRARIES( gpe-sync ${OPENSYNC_LIBRARIES} ${GLIB2_LIBRARIES} ${LIBXML2_LIBRARIES} )
++TARGET_LINK_LIBRARIES( gpe-sync ${OPENSYNC_LIBRARIES} ${GLIB2_LIBRARIES} )
+
+ ###### INSTALL ###################
+ OPENSYNC_PLUGIN_INSTALL( gpe-sync )
+--- libopensync-plugin-gpe-0.36/cmake/modules/FindOpenSync.cmake.orig 2008-01-26 18:02:58.000000000 +0100
++++ libopensync-plugin-gpe-0.36/cmake/modules/FindOpenSync.cmake 2025-09-07 14:06:41.170824535 +0200
+@@ -13,7 +13,7 @@
+ # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+ #
+
+-# Take care about opensync-1.0.pc settings
++# Take care about libopensync.pc settings
+ INCLUDE( FindPkgConfig )
+
+ IF ( OpenSync_FIND_REQUIRED )
+@@ -23,15 +23,15 @@ ELSE( OpenSync_FIND_REQUIRED )
+ ENDIF ( OpenSync_FIND_REQUIRED )
+
+ IF ( OPENSYNC_MIN_VERSION )
+- PKG_SEARCH_MODULE( OPENSYNC ${_pkgconfig_REQUIRED} opensync-1.0>=${OPENSYNC_MIN_VERSION} )
++ PKG_SEARCH_MODULE( OPENSYNC ${_pkgconfig_REQUIRED} libopensync>=${OPENSYNC_MIN_VERSION} )
+ ELSE ( OPENSYNC_MIN_VERSION )
+- PKG_SEARCH_MODULE( OPENSYNC ${_pkgconfig_REQUIRED} opensync-1.0 )
++ PKG_SEARCH_MODULE( OPENSYNC ${_pkgconfig_REQUIRED} libopensync )
+ ENDIF ( OPENSYNC_MIN_VERSION )
+
+ FIND_PROGRAM( PKGCONFIG_EXECUTABLE NAMES pkg-config )
+
+ IF ( PKGCONFIG_EXECUTABLE )
+- EXEC_PROGRAM( ${PKGCONFIG_EXECUTABLE} ARGS opensync-1.0 --variable=datadir OUTPUT_VARIABLE _opensync_data_DIR )
++ EXEC_PROGRAM( ${PKGCONFIG_EXECUTABLE} ARGS libopensync --variable=datadir OUTPUT_VARIABLE _opensync_data_DIR )
+ STRING( REGEX REPLACE "[\r\n]" " " _opensync_data_DIR "${_opensync_data_DIR}" )
+ ENDIF ( PKGCONFIG_EXECUTABLE )
+
+@@ -47,7 +47,7 @@ ENDIF ( OPENSYNC_CMAKE_MODULES )
+ # Look for OpenSync include dir and libraries without pkg-config
+ IF( NOT OPENSYNC_FOUND AND NOT PKG_CONFIG_FOUND )
+ # Fallback if pkg-config doesn't exist
+- FIND_PATH( OPENSYNC_INCLUDE_DIRS opensync/opensync.h PATH_SUFFIXES opensync-1.0
++ FIND_PATH( OPENSYNC_INCLUDE_DIRS opensync/opensync.h PATH_SUFFIXES libopensync1
+ PATHS
+ /opt/local/include/
+ /sw/include/
+--- libopensync-plugin-gpe-0.36/src/gpe_sync.h.orig 2008-01-26 18:02:58.000000000 +0100
++++ libopensync-plugin-gpe-0.36/src/gpe_sync.h 2025-09-07 18:21:04.541469092 +0200
+@@ -32,20 +32,14 @@
+ #include <opensync/opensync-data.h>
+ #include <opensync/opensync-format.h>
+ #include <opensync/opensync-plugin.h>
+-#include <opensync/opensync-context.h>
+ #include <opensync/opensync-helper.h>
+ #include <opensync/opensync-version.h>
+
+-// this is needed for gpe_xml.c:
+-#include <libxml/parser.h>
+-#include <libxml/xpath.h>
+-
+ #include "gpesync_client.h"
+
+ typedef struct sink_environment {
+ OSyncObjTypeSink *sink;
+ OSyncObjFormat *objformat;
+- OSyncHashTable *hashtable;
+ char *format;
+ struct gpe_environment *gpe_env;
+ } sink_environment;
+--- libopensync-plugin-gpe-0.36/src/gpe_xml.h.orig 2008-01-26 18:02:58.000000000 +0100
++++ libopensync-plugin-gpe-0.36/src/gpe_xml.h 2025-09-07 16:30:03.550888109 +0200
+@@ -21,6 +21,6 @@
+ #ifndef GPE_XML_H
+ #define GPE_XML_H
+
+-osync_bool gpe_parse_settings(gpe_environment *env, const char *data);
++osync_bool gpe_parse_settings(gpe_environment *env, OSyncPluginConfig *data);
+
+ #endif /* GPE_XML_H */
+--- libopensync-plugin-gpe-0.36/src/gpe_sync.c.orig 2008-01-26 18:02:58.000000000 +0100
++++ libopensync-plugin-gpe-0.36/src/gpe_sync.c 2025-09-07 16:41:20.053889844 +0200
+@@ -36,7 +36,7 @@ static void gpe_disconnect_internal(gpe_
+
+ osync_trace(TRACE_EXIT, "GPE-SYNC %s", __func__);
+ }
+-static void gpe_disconnect(void *userdata, OSyncPluginInfo *info, OSyncContext *ctx)
++static void gpe_disconnect(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *userdata)
+ {
+ osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, userdata, info, ctx);
+ gpe_environment *env = ((sink_environment *)userdata)->gpe_env;
+@@ -74,7 +74,7 @@ static void gpe_connect_internal(gpe_env
+
+ osync_trace(TRACE_EXIT, "GPE-SYNC %s", __func__);
+ }
+-static void gpe_connect(void *userdata, OSyncPluginInfo *info, OSyncContext *ctx)
++static void gpe_connect(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *userdata)
+ {
+ char *client_err = NULL;
+
+@@ -118,7 +118,7 @@ static void gpe_connect(void *userdata,
+ *
+ * \param ctx The context of the plugin
+ */
+-static void sync_done(void *userdata, OSyncPluginInfo *info, OSyncContext *ctx)
++static void sync_done(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *userdata)
+ {
+ osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, userdata, info, ctx);
+ //gpe_environment *env = ((sink_environment *)userdata)->gpe_env;
+@@ -133,7 +133,6 @@ static void sync_done(void *userdata, OS
+ static void free_sink(sink_environment *sinkenv)
+ {
+ if (sinkenv->sink) osync_objtype_sink_unref(sinkenv->sink);
+- if (sinkenv->hashtable) osync_hashtable_free(sinkenv->hashtable);
+ }
+
+
+@@ -169,7 +168,7 @@ static void finalize(void *data)
+ */
+ static void *initialize(OSyncPlugin *plugin, OSyncPluginInfo *info, OSyncError **error)
+ {
+- const char *configdata = NULL;
++ OSyncPluginConfig *configdata = NULL;
+
+ osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, plugin, info, error);
+
+@@ -184,8 +183,6 @@ static void *initialize(OSyncPlugin *plu
+ goto error_free_env;
+ }
+
+- osync_trace(TRACE_INTERNAL, "GPE-SYNC configdata: %s", configdata);
+-
+ if (!gpe_parse_settings(env, configdata)) {
+ osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "Unable to parse plugin configuration for gpe plugin");
+ goto error_free_env;
+@@ -197,12 +194,10 @@ static void *initialize(OSyncPlugin *plu
+ env->main_sink.sink = osync_objtype_main_sink_new(error);
+ if (!env->main_sink.sink) goto error_free_env;
+
+- OSyncObjTypeSinkFunctions functions;
+- memset(&functions, 0, sizeof(functions));
+- functions.connect = gpe_connect;
+- functions.disconnect = gpe_disconnect;
+- functions.sync_done = sync_done;
+- osync_objtype_sink_set_functions(env->main_sink.sink, functions, &env->main_sink);
++ osync_objtype_sink_set_userdata(env->main_sink.sink, &env->main_sink);
++ osync_objtype_sink_set_connect_func(env->main_sink.sink, gpe_connect);
++ osync_objtype_sink_set_disconnect_func(env->main_sink.sink, gpe_disconnect);
++ osync_objtype_sink_set_sync_done_func(env->main_sink.sink, sync_done);
+
+ osync_plugin_info_set_main_sink(info, env->main_sink.sink);
+ env->main_sink.gpe_env = env;
+@@ -231,7 +226,7 @@ error:
+ }
+
+ /* Here we actually tell opensync which sinks are available. */
+-static osync_bool discover(void *userdata, OSyncPluginInfo *info, OSyncError **error)
++static osync_bool discover(OSyncPluginInfo *info, void *userdata, OSyncError **error)
+ {
+ gchar *err_string = NULL;
+ gchar *response = NULL;
+@@ -340,7 +335,7 @@ osync_bool get_sync_info(OSyncPluginEnv
+ osync_plugin_set_finalize(plugin, finalize);
+ osync_plugin_set_discover(plugin, discover);
+
+- osync_plugin_env_register_plugin(env, plugin);
++ osync_plugin_env_register_plugin(env, plugin, error);
+ osync_plugin_unref(plugin);
+
+ //If you like, you can overwrite the default timeouts of your plugin
+--- libopensync-plugin-gpe-0.36/src/calendar.c.orig 2008-01-26 18:02:58.000000000 +0100
++++ libopensync-plugin-gpe-0.36/src/calendar.c 2025-09-07 16:41:58.880346170 +0200
+@@ -27,12 +27,12 @@
+ * \param change The change that has to be committed
+ *
+ */
+-void gpe_calendar_commit_change (void *userdata, OSyncPluginInfo *info, OSyncContext *ctx, OSyncChange *change)
++static void gpe_calendar_commit_change (OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, OSyncChange *change, void *userdata)
+ {
+ osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p, %p)", __func__, userdata, info, ctx, change);
+
+- gpe_environment *env = (gpe_environment *)userdata;
+- sink_environment *sinkenv = (sink_environment *)osync_objtype_sink_get_userdata(osync_plugin_info_get_sink(info));
++ sink_environment *sinkenv = (sink_environment *)userdata;
++ gpe_environment *env = sinkenv->gpe_env;
+ gchar *response = NULL;
+ char *result = NULL;
+ char *modified = NULL;
+@@ -81,8 +81,7 @@ void gpe_calendar_commit_change (void *u
+ osync_change_set_uid (change, g_strdup (buf));
+ }
+ osync_change_set_hash (change, modified);
+- osync_hashtable_update_hash (sinkenv->hashtable, osync_change_get_changetype(change),
+- osync_change_get_uid(change), modified);
++ osync_hashtable_update_change (osync_objtype_sink_get_hashtable(sink), change);
+ osync_context_report_success(ctx);
+ }
+ else {
+@@ -108,16 +107,18 @@ void gpe_calendar_commit_change (void *u
+ * \param ctx Context of the plugin
+ *
+ */
+-void gpe_calendar_get_changes(void *userdata, OSyncPluginInfo *info, OSyncContext *ctx)
++static void gpe_calendar_get_changes(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, osync_bool slow_sync, void *userdata)
+ {
+ osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, userdata, info, ctx);
+
+- gpe_environment *env = (gpe_environment *)userdata;
+- sink_environment *sinkenv = (sink_environment *)osync_objtype_sink_get_userdata(osync_plugin_info_get_sink(info));
++ sink_environment *sinkenv = (sink_environment *)userdata;
++ gpe_environment *env = (gpe_environment *)sinkenv->gpe_env;
++ OSyncHashTable *hashtable = osync_objtype_sink_get_hashtable(sink);
++ OSyncError *error = NULL;
+
+- if (osync_objtype_sink_get_slowsync(sinkenv->sink)) {
++ if (slow_sync) {
+ osync_trace(TRACE_INTERNAL, "Slow sync requested");
+- osync_hashtable_reset(sinkenv->hashtable);
++ osync_hashtable_slowsync(hashtable, &error);
+ }
+
+ gchar *errmsg = NULL;
+@@ -206,24 +207,17 @@ osync_bool gpe_calendar_setup(sink_envir
+ {
+ osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, functions, %p, %p, %p)", __func__, sinkenv, env, info, error);
+
+- char *tablepath = g_strdup_printf("%s/hashtable.db", osync_plugin_info_get_configdir(info));
+- // Note: caller responsible for freeing hashtable on any error
+- sinkenv->hashtable = osync_hashtable_new(tablepath, "event", error);
+- g_free(tablepath);
+- if (!sinkenv->hashtable) goto error;
+-
+ // Note: caller responsible for freeing sink on any error
+ sinkenv->sink = osync_objtype_sink_new("event", error);
+ if (!sinkenv->sink) goto error;
+
++ osync_objtype_sink_enable_hashtable(sinkenv->sink, TRUE);
++
+ sinkenv->format = "vevent20";
+- osync_objtype_sink_add_objformat(sinkenv->sink, sinkenv->format);
+
+- OSyncObjTypeSinkFunctions functions;
+- memset(&functions, 0, sizeof(functions));
+- functions.get_changes = gpe_calendar_get_changes;
+- functions.commit = gpe_calendar_commit_change;
+- osync_objtype_sink_set_functions(sinkenv->sink, functions, sinkenv);
++ osync_objtype_sink_set_userdata(sinkenv->sink, sinkenv);
++ osync_objtype_sink_set_get_changes_func(sinkenv->sink, gpe_calendar_get_changes);
++ osync_objtype_sink_set_commit_func(sinkenv->sink, gpe_calendar_commit_change);
+
+ osync_plugin_info_add_objtype(info, sinkenv->sink);
+
+--- libopensync-plugin-gpe-0.36/src/contacts.c.orig 2008-01-26 18:02:58.000000000 +0100
++++ libopensync-plugin-gpe-0.36/src/contacts.c 2025-09-07 16:53:35.329906512 +0200
+@@ -27,12 +27,12 @@
+ * \param change The change that has to be committed
+ *
+ */
+-void gpe_contacts_commit_change (void *userdata, OSyncPluginInfo *info, OSyncContext *ctx, OSyncChange *change)
++static void gpe_contacts_commit_change (OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, OSyncChange *change, void *userdata)
+ {
+ osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p, %p)", __func__, userdata, info, ctx, change);
+
+- gpe_environment *env = (gpe_environment *)userdata;
+- sink_environment *sinkenv = (sink_environment *)osync_objtype_sink_get_userdata(osync_plugin_info_get_sink(info));
++ sink_environment *sinkenv = (sink_environment *)userdata;
++ gpe_environment *env = sinkenv->gpe_env;
+ gchar *response = NULL;
+ char *result = NULL;
+ char *modified = NULL;
+@@ -81,8 +81,7 @@ void gpe_contacts_commit_change (void *u
+ osync_change_set_uid (change, g_strdup (buf));
+ }
+ osync_change_set_hash (change, modified);
+- osync_hashtable_update_hash (sinkenv->hashtable, osync_change_get_changetype(change),
+- osync_change_get_uid(change), modified);
++ osync_hashtable_update_change (osync_objtype_sink_get_hashtable(sink), change);
+ osync_context_report_success(ctx);
+ }
+ else {
+@@ -108,16 +107,18 @@ void gpe_contacts_commit_change (void *u
+ * \param ctx Context of the plugin
+ *
+ */
+-void gpe_contacts_get_changes(void *userdata, OSyncPluginInfo *info, OSyncContext *ctx)
++static void gpe_contacts_get_changes(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, osync_bool slow_sync, void *userdata)
+ {
+ osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, userdata, info, ctx);
+
+- gpe_environment *env = (gpe_environment *)userdata;
+- sink_environment *sinkenv = (sink_environment *)osync_objtype_sink_get_userdata(osync_plugin_info_get_sink(info));
++ sink_environment *sinkenv = (sink_environment *)userdata;
++ gpe_environment *env = sinkenv->gpe_env;
++ OSyncHashTable *hashtable = osync_objtype_sink_get_hashtable(sink);
++ OSyncError *error = NULL;
+
+- if (osync_objtype_sink_get_slowsync(sinkenv->sink)) {
++ if (slow_sync) {
+ osync_trace(TRACE_INTERNAL, "Slow sync requested");
+- osync_hashtable_reset(sinkenv->hashtable);
++ osync_hashtable_slowsync(hashtable, &error);
+ }
+
+ gchar *errmsg = NULL;
+@@ -205,24 +206,17 @@ osync_bool gpe_contacts_setup(sink_envir
+ {
+ osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, functions, %p, %p, %p)", __func__, sinkenv, env, info, error);
+
+- char *tablepath = g_strdup_printf("%s/hashtable.db", osync_plugin_info_get_configdir(info));
+- // Note: caller responsible for freeing hashtable on any error
+- sinkenv->hashtable = osync_hashtable_new(tablepath, "contact", error);
+- g_free(tablepath);
+- if (!sinkenv->hashtable) goto error;
+-
+ // Note: caller responsible for freeing sink on any error
+ sinkenv->sink = osync_objtype_sink_new("contact", error);
+ if (!sinkenv->sink) goto error;
+
++ osync_objtype_sink_enable_hashtable(sinkenv->sink, TRUE);
++
+ sinkenv->format = "vcard30";
+- osync_objtype_sink_add_objformat(sinkenv->sink, sinkenv->format);
+
+- OSyncObjTypeSinkFunctions functions;
+- memset(&functions, 0, sizeof(functions));
+- functions.get_changes = gpe_contacts_get_changes;
+- functions.commit = gpe_contacts_commit_change;
+- osync_objtype_sink_set_functions(sinkenv->sink, functions, sinkenv);
++ osync_objtype_sink_set_userdata(sinkenv->sink, sinkenv);
++ osync_objtype_sink_set_get_changes_func(sinkenv->sink, gpe_contacts_get_changes);
++ osync_objtype_sink_set_commit_func(sinkenv->sink, gpe_contacts_commit_change);
+
+ osync_plugin_info_add_objtype(info, sinkenv->sink);
+
+--- libopensync-plugin-gpe-0.36/src/todo.c.orig 2008-01-26 18:02:58.000000000 +0100
++++ libopensync-plugin-gpe-0.36/src/todo.c 2025-09-07 17:00:48.967557295 +0200
+@@ -27,12 +27,12 @@
+ * \param change The change that has to be committed
+ *
+ */
+-void gpe_todo_commit_change (void *userdata, OSyncPluginInfo *info, OSyncContext *ctx, OSyncChange *change)
++static void gpe_todo_commit_change (OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, OSyncChange *change, void *userdata)
+ {
+ osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p, %p)", __func__, userdata, info, ctx, change);
+
+- gpe_environment *env = (gpe_environment *)userdata;
+- sink_environment *sinkenv = (sink_environment *)osync_objtype_sink_get_userdata(osync_plugin_info_get_sink(info));
++ sink_environment *sinkenv = (sink_environment *)userdata;
++ gpe_environment *env = sinkenv->gpe_env;
+ gchar *response = NULL;
+ char *result = NULL;
+ char *modified = NULL;
+@@ -81,8 +81,7 @@ void gpe_todo_commit_change (void *userd
+ osync_change_set_uid (change, g_strdup(buf));
+ }
+ osync_change_set_hash (change, modified);
+- osync_hashtable_update_hash (sinkenv->hashtable, osync_change_get_changetype(change),
+- osync_change_get_uid(change), modified);
++ osync_hashtable_update_change (osync_objtype_sink_get_hashtable(sink), change);
+ osync_context_report_success(ctx);
+ }
+ else {
+@@ -109,16 +108,18 @@ void gpe_todo_commit_change (void *userd
+ * \param ctx Context of the plugin
+ *
+ */
+-void gpe_todo_get_changes(void *userdata, OSyncPluginInfo *info, OSyncContext *ctx)
++static void gpe_todo_get_changes(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, osync_bool slow_sync, void *userdata)
+ {
+ osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, userdata, info, ctx);
+
+- gpe_environment *env = (gpe_environment *)userdata;
+- sink_environment *sinkenv = (sink_environment *)osync_objtype_sink_get_userdata(osync_plugin_info_get_sink(info));
++ sink_environment *sinkenv = (sink_environment *)userdata;
++ gpe_environment *env = sinkenv->gpe_env;
++ OSyncHashTable *hashtable = osync_objtype_sink_get_hashtable(sink);
++ OSyncError *error = NULL;
+
+- if (osync_objtype_sink_get_slowsync(sinkenv->sink)) {
++ if (slow_sync) {
+ osync_trace(TRACE_INTERNAL, "Slow sync requested");
+- osync_hashtable_reset(sinkenv->hashtable);
++ osync_hashtable_slowsync(hashtable, &error);
+ }
+
+ gchar *errmsg = NULL;
+@@ -205,24 +206,17 @@ osync_bool gpe_todo_setup(sink_environme
+ {
+ osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, functions, %p, %p, %p)", __func__, sinkenv, env, info, error);
+
+- char *tablepath = g_strdup_printf("%s/hashtable.db", osync_plugin_info_get_configdir(info));
+- // Note: caller responsible for freeing hashtable on any error
+- sinkenv->hashtable = osync_hashtable_new(tablepath, "todo", error);
+- g_free(tablepath);
+- if (!sinkenv->hashtable) goto error;
+-
+ // Note: caller responsible for freeing sink on any error
+ sinkenv->sink = osync_objtype_sink_new("todo", error);
+ if (!sinkenv->sink) goto error;
+
++ osync_objtype_sink_enable_hashtable(sinkenv->sink, TRUE);
++
+ sinkenv->format = "vtodo20";
+- osync_objtype_sink_add_objformat(sinkenv->sink, sinkenv->format);
+
+- OSyncObjTypeSinkFunctions functions;
+- memset(&functions, 0, sizeof(functions));
+- functions.get_changes = gpe_todo_get_changes;
+- functions.commit = gpe_todo_commit_change;
+- osync_objtype_sink_set_functions(sinkenv->sink, functions, sinkenv);
++ osync_objtype_sink_set_userdata(sinkenv->sink, sinkenv);
++ osync_objtype_sink_set_get_changes_func(sinkenv->sink, gpe_todo_get_changes);
++ osync_objtype_sink_set_commit_func(sinkenv->sink, gpe_todo_commit_change);
+
+ osync_plugin_info_add_objtype(info, sinkenv->sink);
+
+--- libopensync-plugin-gpe-0.36/src/gpe_xml.c.orig 2025-09-07 18:20:33.868301930 +0200
++++ libopensync-plugin-gpe-0.36/src/gpe_xml.c 2025-09-07 18:20:46.298234591 +0200
+@@ -22,13 +22,8 @@
+ #include "gpe_sync.h"
+
+ /*This just opens the config file and returns the settings in the env */
+-osync_bool gpe_parse_settings(gpe_environment *env, const char *data)
++osync_bool gpe_parse_settings(gpe_environment *env, OSyncPluginConfig *data)
+ {
+- xmlDocPtr doc = NULL;
+- xmlXPathContextPtr ctx = NULL;
+- xmlXPathObjectPtr obj = NULL;
+- /// xmlNodePtr cur;
+-
+ osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p)", __func__, env, data);
+
+ // Set the defaults
+@@ -41,37 +36,51 @@ osync_bool gpe_parse_settings(gpe_enviro
+ env->use_remote = 0;
+ env->debuglevel = 0;
+ env->calendar = NULL;
+-
+- xmlInitParser();
+
+- doc = xmlParseMemory(data, strlen(data)+1);
+-
+- if(!doc) {
+- osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: Could not parse data!", __func__);
+- return FALSE;
++ OSyncList *optslist = osync_plugin_config_get_advancedoptions(data);
++ for (; optslist; optslist = optslist->next) {
++ OSyncPluginAdvancedOption *option = optslist->data;
++ const char *name = osync_plugin_advancedoption_get_name(option);
++ const char *value = osync_plugin_advancedoption_get_value(option);
++ if (!strcmp(name, "local")) {
++ osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <local> seen", __func__);
++ env->use_local = 1;
++ } else if(!strcmp(name, "ssh")) {
++ osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <ssh> seen", __func__);
++ env->use_ssh = 1;
++ } else if(!strcmp(name, "remote")) {
++ env->use_remote = 1;
++ osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <remote> seen", __func__);
++ } else if(!strcmp(name, "handheld_ip")) {
++ g_free(env->device_addr);
++ env->device_addr = g_strdup(value);
++ osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <handheld_ip> = %s", __func__, env->device_addr);
++ } else if(!strcmp(name, "handheld_user")) {
++ g_free(env->username);
++ env->username = g_strdup(value);
++ osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <handheld_user> = %s", __func__, env->username);
++ } else if(!strcmp(name, "command")) {
++ g_free(env->command);
++ env->command = g_strdup(value);
++ osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <command> = %s", __func__, env->command);
++ } else if(!strcmp(name, "handheld_port")) {
++ env->device_port = atoi(value);
++ osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <handheld_port> = %d", __func__, env->device_port);
++ } else if(!strcmp(name, "debug")) {
++ env->debuglevel = atoi(value);
++ osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <debug> = %d", __func__, env->debuglevel);
++ } else if(!strcmp(name, "calendar")) {
++ env->calendar = g_strdup(value);
++ osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <calendar> = %s", __func__, env->calendar);
++ }
+ }
+
+- ctx = xmlXPathNewContext(doc);
+-
+ /* Work out which type of connection to use */
+- obj = xmlXPathEval("/config/local", ctx);
+- if (obj && obj->nodesetval && obj->nodesetval->nodeNr) {
+- env->use_local = 1;
+- osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <local> seen", __func__);
+- }
+- if (obj) xmlXPathFreeObject(obj);
+- obj = xmlXPathEval("/config/ssh", ctx);
+- if (obj && obj->nodesetval && obj->nodesetval->nodeNr) {
+- if (env->use_local) {
++ if (env->use_ssh && env->use_local) {
+ osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: <local> and <ssh> both found in config file", __func__);
+ goto error;
+- }
+- env->use_ssh = 1;
+- osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <ssh> seen", __func__);
+ }
+- if (obj) xmlXPathFreeObject(obj);
+- obj = xmlXPathEval("/config/remote", ctx);
+- if (obj && obj->nodesetval && obj->nodesetval->nodeNr) {
++ if (env->use_remote) {
+ if (env->use_local) {
+ osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: <local> and <remote> both found in config file", __func__);
+ goto error;
+@@ -80,93 +89,27 @@ osync_bool gpe_parse_settings(gpe_enviro
+ osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: <ssh> and <remote> both found in config file", __func__);
+ goto error;
+ }
+- env->use_remote = 1;
+- osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <remote> seen", __func__);
+ }
+ if (!(env->use_local || env->use_ssh || env->use_remote)) {
+ osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: one of <local>, <remote>, <ssh> must be specified in config file", __func__);
+ goto error;
+ }
+
+- if (obj) xmlXPathFreeObject(obj);
+- obj = xmlXPathEval("//handheld_ip/text()", ctx);
+- if (obj && obj->nodesetval && obj->nodesetval->nodeNr) {
+- if (!(env->use_remote || env->use_ssh)) {
++ if (strcmp(env->device_addr, "127.0.0.1") && !(env->use_remote || env->use_ssh)) {
+ osync_trace(TRACE_ERROR, "GPE-SYNC %s: <handheld_ip> should only be specified in <remote> or <ssh> sections", __func__);
+- }
+- g_free(env->device_addr);
+- xmlChar *str=xmlXPathCastToString(obj);
+- env->device_addr = g_strdup(str);
+- xmlFree(str);
+- osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <handheld_ip> = %s", __func__, env->device_addr);
+ }
+-
+- if (obj) xmlXPathFreeObject(obj);
+- obj = xmlXPathEval("//handheld_user/text()", ctx);
+- if (obj && obj->nodesetval && obj->nodesetval->nodeNr) {
+- if (!(env->use_ssh)) {
++ if (strcmp(env->username, "gpeuser") && !(env->use_ssh)) {
+ osync_trace(TRACE_ERROR, "GPE-SYNC %s: <handheld_user> should only be specified in <ssh> section", __func__);
+- }
+- g_free(env->username);
+- xmlChar *str=xmlXPathCastToString(obj);
+- env->username = g_strdup(str);
+- xmlFree(str);
+- osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <handheld_user> = %s", __func__, env->username);
+ }
+-
+- if (obj) xmlXPathFreeObject(obj);
+- obj = xmlXPathEval("//command/text()", ctx);
+- if (obj && obj->nodesetval && obj->nodesetval->nodeNr) {
+- if (!(env->use_local || env->use_ssh)) {
++ if (strcmp(env->command, "gpesyncd --remote") && !(env->use_local || env->use_ssh)) {
+ osync_trace(TRACE_ERROR, "GPE-SYNC %s: <command> should only be specified in <local> or <ssh> sections", __func__);
+- }
+- g_free(env->username);
+- xmlChar *str=xmlXPathCastToString(obj);
+- env->command = g_strdup(str);
+- xmlFree(str);
+- osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <command> = %s", __func__, env->command);
+ }
+-
+- if (obj) xmlXPathFreeObject(obj);
+- obj = xmlXPathEval("//handheld_port/text()", ctx);
+- if (obj && obj->nodesetval && obj->nodesetval->nodeNr) {
+- if (!(env->use_remote)) {
++ if ((env->device_port != 6446) && !(env->use_remote)) {
+ osync_trace(TRACE_ERROR, "GPE-SYNC %s: <handheld_port> should only be specified in <remote> section", __func__);
+- }
+- xmlChar *str=xmlXPathCastToString(obj);
+- env->device_port = atoi(str);
+- xmlFree(str);
+- osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <handheld_port> = %d", __func__, env->device_port);
+- }
+-
+- if (obj) xmlXPathFreeObject(obj);
+- obj = xmlXPathEval("//debug/text()", ctx);
+- if (obj && obj->nodesetval && obj->nodesetval->nodeNr) {
+- xmlChar *str=xmlXPathCastToString(obj);
+- env->debuglevel = atoi(str);
+- xmlFree(str);
+- osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <debug> = %d", __func__, env->debuglevel);
+- }
+-
+- if (obj) xmlXPathFreeObject(obj);
+- obj = xmlXPathEval("//calendar/text()", ctx);
+- if (obj && obj->nodesetval && obj->nodesetval->nodeNr) {
+- xmlChar *str=xmlXPathCastToString(obj);
+- env->calendar = g_strdup(str);
+- xmlFree(str);
+- osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: <calendar> = %s", __func__, env->calendar);
+- }
+-
+- if (obj) xmlXPathFreeObject(obj);
+- xmlXPathFreeContext(ctx);
+- xmlFreeDoc(doc);
+- xmlCleanupParser();
++ }
++
+ osync_trace(TRACE_EXIT, "GPE-SYNC %s", __func__);
+ return TRUE;
+ error:
+- if (obj) xmlXPathFreeObject(obj);
+- if (ctx) xmlXPathFreeContext(ctx);
+- if (doc) xmlFreeDoc(doc);
+- xmlCleanupParser();
+ return FALSE;
+ }
+--- libopensync-plugin-gpe-0.36/src/utils.c.orig 2008-01-26 18:02:58.000000000 +0100
++++ libopensync-plugin-gpe-0.36/src/utils.c 2025-09-07 18:26:51.629588755 +0200
+@@ -109,13 +109,13 @@ osync_bool report_change (sink_environme
+ osync_change_set_hash (change, hash);
+ osync_change_set_data (change, data);
+
+- OSyncChangeType changetype = osync_hashtable_get_changetype(sinkenv->hashtable, osync_change_get_uid(change), hash);
++ OSyncHashTable *hashtable = osync_objtype_sink_get_hashtable(sinkenv->sink);
++ OSyncChangeType changetype = osync_hashtable_get_changetype(hashtable, change);
+ if (changetype != OSYNC_CHANGE_TYPE_UNMODIFIED) {
+ osync_change_set_changetype(change, changetype);
+ osync_context_report_change (ctx, change);
+- osync_hashtable_update_hash (sinkenv->hashtable, changetype, osync_change_get_uid(change), hash);
++ osync_hashtable_update_change (hashtable, change);
+ }
+- osync_hashtable_report(sinkenv->hashtable, osync_change_get_uid(change));
+
+ osync_change_unref(change);
+
+@@ -135,26 +135,24 @@ void report_deleted (sink_environment *s
+ osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p)", __func__, sinkenv, ctx);
+
+ OSyncError *error = NULL;
++ OSyncHashTable *hashtable = osync_objtype_sink_get_hashtable(sinkenv->sink);
+
+ //check for deleted entries ... via hashtable
+- int i;
+- char **uids = osync_hashtable_get_deleted(sinkenv->hashtable);
+- for (i=0; uids[i]; i++) {
++ OSyncList *u, *uids = osync_hashtable_get_deleted(hashtable);
++ for (u = uids; u; u = u->next) {
+ OSyncChange *change = osync_change_new(&error);
+ if (!change) {
+- g_free(uids[i]);
+ osync_context_report_osyncwarning(ctx, error);
+ osync_error_unref(&error);
+ continue;
+ }
+
+- osync_trace(TRACE_INTERNAL, "%s: deleting uid %s", __func__, uids[i]);
+- osync_change_set_uid(change, uids[i]);
++ osync_trace(TRACE_INTERNAL, "%s: deleting uid %s", __func__, u->data);
++ osync_change_set_uid(change, u->data);
+ osync_change_set_changetype(change, OSYNC_CHANGE_TYPE_DELETED);
+
+ OSyncData *odata = osync_data_new(NULL, 0, sinkenv->objformat, &error);
+ if (!odata) {
+- g_free(uids[i]);
+ osync_change_unref(change);
+ osync_context_report_osyncwarning(ctx, error);
+ osync_error_unref(&error);
+@@ -167,12 +165,11 @@ void report_deleted (sink_environment *s
+
+ osync_context_report_change(ctx, change);
+
+- osync_hashtable_update_hash(sinkenv->hashtable, osync_change_get_changetype(change), osync_change_get_uid(change), NULL);
++ osync_hashtable_update_change(hashtable, change);
+
+ osync_change_unref(change);
+- g_free(uids[i]);
+ }
+- g_free(uids);
++ osync_list_free(uids);
+
+ osync_trace(TRACE_EXIT, "GPE-SYNC %s", __func__);
+ }
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/libopensync-plugin-gpe.git/commitdiff/1db7d1cb34e33892eeb85c72074320dad1d846f8
More information about the pld-cvs-commit
mailing list