From: <svn...@op...> - 2009-09-04 22:58:42
|
Author: dgollub Date: Sat Sep 5 00:58:28 2009 New Revision: 5745 URL: http://www.opensync.org/changeset/5745 Log: Added new public interface: osync_format_env_find_merger This functions allows to search for a merger which is registered in the format env. The search is based on the tuple: objformat and capsformat The objformat is a const char* string, so format plugins can register merger for formats which aren't registered yet. Added: trunk/opensync/format/opensync_merger_internals.h Modified: trunk/opensync.sym trunk/opensync/data/opensync_change.c trunk/opensync/format/opensync_format_env.c trunk/opensync/format/opensync_format_env.h trunk/opensync/format/opensync_merger.c Modified: trunk/opensync.sym ============================================================================== --- trunk/opensync.sym Sat Sep 5 00:07:34 2009 (r5744) +++ trunk/opensync.sym Sat Sep 5 00:58:28 2009 (r5745) @@ -156,6 +156,7 @@ osync_format_env_detect_objformat_full osync_format_env_find_converter osync_format_env_find_converters +osync_format_env_find_merger osync_format_env_find_objformat osync_format_env_find_path osync_format_env_find_path_formats Modified: trunk/opensync/data/opensync_change.c ============================================================================== --- trunk/opensync/data/opensync_change.c Sat Sep 5 00:07:34 2009 (r5744) +++ trunk/opensync/data/opensync_change.c Sat Sep 5 00:58:28 2009 (r5745) @@ -249,3 +249,4 @@ return TRUE; } + Modified: trunk/opensync/format/opensync_format_env.c ============================================================================== --- trunk/opensync/format/opensync_format_env.c Sat Sep 5 00:07:34 2009 (r5744) +++ trunk/opensync/format/opensync_format_env.c Sat Sep 5 00:58:28 2009 (r5745) @@ -33,6 +33,7 @@ #include "opensync_format_env_private.h" #include "opensync_converter_internals.h" +#include "opensync_merger_internals.h" static osync_bool osync_format_env_load_modules(OSyncFormatEnv *env, const char *path, osync_bool must_exist, OSyncError **error) { @@ -963,6 +964,29 @@ osync_merger_ref(merger); } + +OSyncMerger *osync_format_env_find_merger(OSyncFormatEnv *env, const char *objformat, const char *capsformat) +{ + OSyncList *m; + osync_assert(env); + osync_assert(objformat); + osync_assert(capsformat); + + + for (m = env->mergers; m; m = m->next) { + OSyncMerger *merger = m->data; + if (strcmp(objformat, osync_merger_get_objformat(merger))) + continue; + + if (strcmp(capsformat, osync_merger_get_capsformat(merger))) + continue; + + return merger; + } + + return NULL; +} + OSyncObjFormat *osync_format_env_detect_objformat(OSyncFormatEnv *env, OSyncData *data) { OSyncList *d = NULL; Modified: trunk/opensync/format/opensync_format_env.h ============================================================================== --- trunk/opensync/format/opensync_format_env.h Sat Sep 5 00:07:34 2009 (r5744) +++ trunk/opensync/format/opensync_format_env.h Sat Sep 5 00:58:28 2009 (r5745) @@ -253,6 +253,8 @@ */ OSYNC_EXPORT void osync_format_env_register_merger(OSyncFormatEnv *env, OSyncMerger *merger); +OSYNC_EXPORT OSyncMerger *osync_format_env_find_merger(OSyncFormatEnv *env, const char *objformat, const char *capsformat); + /*@}*/ #endif /* _OPENSYNC_FORMAT_ENV_H_ */ Modified: trunk/opensync/format/opensync_merger.c ============================================================================== --- trunk/opensync/format/opensync_merger.c Sat Sep 5 00:07:34 2009 (r5744) +++ trunk/opensync/format/opensync_merger.c Sat Sep 5 00:58:28 2009 (r5745) @@ -21,6 +21,8 @@ #include "opensync.h" #include "opensync_internals.h" +#include "opensync-data.h" + #include "opensync_merger.h" #include "opensync_merger_private.h" @@ -91,3 +93,35 @@ osync_return_if_fail(merger); merger->demerge_func = demerge_func; } + +const char *osync_merger_get_objformat(OSyncMerger *merger) +{ + osync_return_val_if_fail(merger, NULL); + return merger->objformat; +} + +const char *osync_merger_get_capsformat(OSyncMerger *merger) +{ + osync_return_val_if_fail(merger, NULL); + return merger->capsformat; +} + +osync_bool osync_merger_demerge(OSyncMerger *merger, OSyncChange *change, OSyncCapabilities *caps, OSyncError **error) +{ + + char *buffer; + unsigned int size; + + OSyncData *data = osync_change_get_data(change); + + osync_data_get_data(data, &buffer, &size); + + if (!merger->demerge_func(&buffer, &size, caps, NULL /*userdata!*/, error)) + goto error; + + return TRUE; + +error: + return FALSE; +} + Added: trunk/opensync/format/opensync_merger_internals.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/opensync/format/opensync_merger_internals.h Sat Sep 5 00:58:28 2009 (r5745) @@ -0,0 +1,40 @@ +/* + * libopensync - A synchronization framework + * Copyright (C) 2009 Bjoern Ricks <bjo...@go...> + * Copyright (C) 2009 Daniel Gollub <go...@b1...> + * + * 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) any later version. + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef OPENSYNC_MERGER_INTERNALS_H_ +#define OPENSYNC_MERGER_INTERNALS_H_ + +/** + * @defgroup OSyncMergerInternalsAPI OpenSync Merger + * @ingroup OSyncFormatPrivate + * @brief Functions for merging formats + * + */ +/*@{*/ + +const char *osync_merger_get_objformat(OSyncMerger *merger); +const char *osync_merger_get_capsformat(OSyncMerger *merger); + +osync_bool osync_merger_demerge(OSyncMerger *merger, OSyncChange *change, OSyncCapabilities *caps, OSyncError **error); + +/*@}*/ + +#endif /* OPENSYNC_MERGER_INTERNALS_H_ */ |