From: <dg...@su...> - 2009-01-11 23:27:10
|
Author: dgollub Date: Mon Jan 12 00:26:28 2009 New Revision: 5121 URL: http://www.opensync.org/changeset/5121 Log: Refactor the destination conversion of the engine WRITE command. Conversion got moved to engine PREPARE_WRITE command. Modified: trunk/opensync/engine/opensync_obj_engine.c trunk/opensync/engine/opensync_sink_engine.c trunk/opensync/engine/opensync_sink_engine_internals.h Modified: trunk/opensync/engine/opensync_obj_engine.c ============================================================================== --- trunk/opensync/engine/opensync_obj_engine.c Mon Jan 12 00:00:46 2009 (r5120) +++ trunk/opensync/engine/opensync_obj_engine.c Mon Jan 12 00:26:28 2009 (r5121) @@ -1095,7 +1095,6 @@ OSyncMember *member = NULL; long long int memberid = 0; OSyncObjTypeSink *objtype_sink = NULL; - OSyncFormatConverterPath *path = NULL; OSyncCapabilities *caps; sinkengine = p->data; @@ -1128,13 +1127,6 @@ if (objtype_sink && osync_objtype_sink_get_write(objtype_sink) && osync_entry_engine_is_dirty(entry_engine)) { OSyncChange *change = entry_engine->change; osync_assert(entry_engine->change); - - /* Convert to requested target format if the changetype is not DELETED */ - if (osync_group_get_converter_enabled(osync_engine_get_group(engine->parent)) && (osync_change_get_changetype(change) != OSYNC_CHANGE_TYPE_DELETED)) { - if (!osync_entry_engine_convert(entry_engine, engine->formatenv, objtype_sink, &path, error)) - goto error; - - } osync_trace(TRACE_INTERNAL, "Writing change %s, changetype %i, format %s , objtype %s from member %lli", osync_change_get_uid(change), @@ -1162,10 +1154,7 @@ } } } - - if (path) - osync_converter_path_unref(path); - + if (!osync_client_proxy_committed_all(sinkengine->proxy, _osync_obj_engine_written_callback, sinkengine, engine->objtype, error)) goto error; } @@ -1295,7 +1284,6 @@ return g_list_length(engine->mapping_engines); } - osync_bool osync_obj_engine_prepare_write(OSyncObjEngine *engine, OSyncError **error) { GList *p; @@ -1318,6 +1306,10 @@ && !osync_sink_engine_demerge(sinkengine, engine->archive, error)) goto error; + if (converter_enabled + && !osync_sink_engine_convert_to_dest(sinkengine, engine->formatenv, error)) + goto error; + } return TRUE; Modified: trunk/opensync/engine/opensync_sink_engine.c ============================================================================== --- trunk/opensync/engine/opensync_sink_engine.c Mon Jan 12 00:00:46 2009 (r5120) +++ trunk/opensync/engine/opensync_sink_engine.c Mon Jan 12 00:26:28 2009 (r5121) @@ -25,6 +25,7 @@ #include "opensync-group.h" #include "opensync-engine.h" #include "opensync-data.h" +#include "opensync-format.h" #include "opensync-mapping.h" #include "opensync_obj_engine_internals.h" @@ -170,3 +171,48 @@ return FALSE; } +osync_bool osync_sink_engine_convert_to_dest(OSyncSinkEngine *engine, OSyncFormatEnv *formatenv, OSyncError **error) +{ + OSyncList *o; + OSyncMember *member; + OSyncObjTypeSink *objtype_sink; + const char *objtype; + OSyncFormatConverterPath *path = NULL; + + osync_assert(engine); + osync_assert(formatenv); + + member = osync_client_proxy_get_member(engine->proxy); + osync_assert(member); + + objtype = osync_obj_engine_get_objtype(engine->engine); + objtype_sink = osync_member_find_objtype_sink(member, objtype); + osync_assert(objtype_sink); + + for (o = engine->entries; o; o = o->next) { + OSyncMappingEntryEngine *entry_engine = o->data; + osync_assert(entry_engine); + + if (entry_engine->change == NULL) + continue; + + if (osync_change_get_changetype(entry_engine->change) == OSYNC_CHANGE_TYPE_DELETED) + continue; + + if (!osync_entry_engine_convert(entry_engine, formatenv, objtype_sink, &path, error)) + goto error; + } + + if (path) + osync_converter_path_unref(path); + + + return TRUE; + +error: + if (path) + osync_converter_path_unref(path); + + return FALSE; +} + Modified: trunk/opensync/engine/opensync_sink_engine_internals.h ============================================================================== --- trunk/opensync/engine/opensync_sink_engine_internals.h Mon Jan 12 00:00:46 2009 (r5120) +++ trunk/opensync/engine/opensync_sink_engine_internals.h Mon Jan 12 00:26:28 2009 (r5121) @@ -81,4 +81,16 @@ */ osync_bool osync_sink_engine_demerge(OSyncSinkEngine *engine, OSyncArchive *archive, OSyncError **error); +/*! @brief Convert all entries of OSyncSinkEngine to destitination format + * + * This function converters all entries of the OSyncSinkEngine to the member + * preferd/requested format (destination). + * + * @param engine Pointer to an OSyncSinkEngine which should convert + * @param archive Pointer to an OSyncFormatEnv for plugins to use + * @param error Pointer to error struct, which get set on any error + * @returns TRUE on success, FALSE otherwise + */ +osync_bool osync_sink_engine_convert_to_dest(OSyncSinkEngine *engine, OSyncFormatEnv *formatenv, OSyncError **error); + #endif /*OPENSYNC_SINK_ENGINE_INTERNALS_H_*/ |