Changeset 3321

Show
Ignore:
Timestamp:
05/04/08 22:45:48 (3 months ago)
Author:
dgollub
Message:

Adapt use of OSyncObjFormatSink in OpenSync? engine.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/opensync/engine/opensync_engine.c

    r3212 r3321  
    136136        osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, proxy, userdata, change); 
    137137 
    138         long long int memberid = osync_member_get_id(osync_client_proxy_get_member(proxy)); 
     138        OSyncMember *member = osync_client_proxy_get_member(proxy); 
     139        long long int memberid = osync_member_get_id(member); 
    139140        const char *uid = osync_change_get_uid(change);          
    140         int changetype = osync_change_get_changetype(change); 
     141        OSyncChangeType changetype = osync_change_get_changetype(change); 
    141142        const char *format = osync_objformat_get_name(osync_change_get_objformat(change)); 
    142         const char *format_config = osync_objformat_get_config(osync_change_get_objformat(change)); 
    143143        const char *objtype = osync_change_get_objtype(change); 
    144144 
    145         osync_trace(TRACE_INTERNAL, "Received change %s, changetype %i, format %s, format conversion config %s, objtype %s from member %lli", uid, changetype, format, format_config, objtype, memberid); 
     145        OSyncObjTypeSink *objtype_sink = osync_member_find_objtype_sink(member, objtype); 
     146 
     147        osync_trace(TRACE_INTERNAL, "Received change %s, changetype %i, format %s, objtype %s from member %lli", uid, changetype, format, objtype, memberid); 
    146148         
    147149        OSyncData *data = osync_change_get_data(change); 
     
    156158        if (internalFormat && osync_group_get_converter_enabled(engine->group) && (osync_change_get_changetype(change) != OSYNC_CHANGE_TYPE_DELETED)) { 
    157159                osync_trace(TRACE_INTERNAL, "converting to common format %s", osync_objformat_get_name(internalFormat)); 
    158          
     160 
    159161                OSyncFormatConverterPath *path = osync_format_env_find_path_with_detectors(engine->formatenv, osync_change_get_data(change), internalFormat, &error); 
    160162 
     
    162164                        goto error; 
    163165         
    164                 osync_converter_path_set_config(path, osync_objformat_get_config(osync_change_get_objformat(change))); 
     166                OSyncObjFormatSink *formatsink = osync_objtype_sink_find_objformat_sink(objtype_sink, internalFormat); 
     167                const char *config = osync_objformat_sink_get_config(formatsink);  
     168                osync_converter_path_set_config(path, config); 
    165169 
    166170                if (!osync_format_env_convert(engine->formatenv, path, data, &error)) { 
  • trunk/opensync/engine/opensync_obj_engine.c

    r3305 r3321  
    823823} 
    824824 
    825 static OSyncObjFormat **_get_member_formats(OSyncFormatEnv *env, OSyncClientProxy *proxy, const char *objtype, OSyncError **error) 
    826 { 
    827         osync_trace(TRACE_ENTRY, "%s(%p, %p, %s, %p)", __func__, env, proxy, objtype, error); 
    828         OSyncMember *member = osync_client_proxy_get_member(proxy); 
    829          
    830         const OSyncList *formats = osync_member_get_objformats(member, objtype, error); 
    831         if (!formats) { 
    832                 if (!osync_error_is_set(error)) 
    833                         osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to find a valid target format"); 
    834                 goto error; 
    835         } 
    836  
    837         osync_trace(TRACE_INTERNAL, "Found %i possible sink formats", osync_list_length(formats)); 
    838                                                  
    839         int num = osync_list_length(formats); 
    840          
    841         OSyncObjFormat **formatArray = osync_try_malloc0(sizeof(OSyncObjFormat *) * (num + 1), error); 
    842         if (!formatArray) 
    843                 goto error; 
    844          
    845         const OSyncList *f = NULL; 
    846         int i = 0; 
    847         for (f = formats; f; f = f->next) { 
    848                 const char **format_vertice = f->data; 
    849                 const char *formatstr = format_vertice[0]; 
    850                 const char *format_configstr = format_vertice[1]; 
    851                 OSyncObjFormat *format = osync_format_env_find_objformat(env, formatstr); 
    852                 osync_objformat_set_config(format, format_configstr); 
    853                 if (!format) { 
    854                         g_free(formatArray); 
    855                         osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to find a valid object format for \"%s\"", formatstr); 
    856                         goto error; 
    857                 } 
    858                  
    859                 formatArray[i] = format; 
    860                 i++; 
    861         } 
    862         formatArray[i] = NULL; 
    863          
    864         osync_trace(TRACE_EXIT, "%s: %p", __func__, formatArray); 
    865         return formatArray; 
    866  
    867 error:   
    868         osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); 
    869         return NULL; 
    870 } 
    871  
    872825osync_bool osync_obj_engine_command(OSyncObjEngine *engine, OSyncEngineCmd cmd, OSyncError **error) 
    873826{ 
     
    1019972                                                        /* Now we have to convert to one of the formats 
    1020973                                                         * that the client can understand */ 
    1021                                                         OSyncObjFormat **formats = _get_member_formats(engine->formatenv, sinkengine->proxy, osync_change_get_objtype(entry_engine->change), error); 
    1022                                                         if (!formats) 
    1023                                                                 goto error; 
    1024                                                          
    1025                                                         OSyncFormatConverterPath *path = osync_format_env_find_path_formats_with_detectors(engine->formatenv, osync_change_get_data(entry_engine->change), formats, error); 
    1026                                                         if (!path) { 
    1027                                                                 g_free(formats); 
     974                                                        OSyncList *format_sinks = osync_objtype_sink_get_objformat_sinks(objtype_sink); 
     975                                                        if (!format_sinks) { 
     976                                                                osync_error_set(error, OSYNC_ERROR_GENERIC, "There are no available format sinks."); 
    1028977                                                                goto error; 
    1029978                                                        } 
    1030  
    1031                                                         int length = osync_converter_path_num_edges(path); 
     979                                                         
     980                                                        OSyncFormatConverterPath *path = osync_format_env_find_path_formats_with_detectors(engine->formatenv, osync_change_get_data(entry_engine->change), format_sinks, error); 
     981                                                        if (!path) 
     982                                                                goto error; 
     983 
     984                                                        unsigned int length = osync_converter_path_num_edges(path); 
    1032985                                                        OSyncFormatConverter *converter = osync_converter_path_nth_edge(path, length - 1); 
    1033986                                                        if (converter) { 
    1034987                                                                OSyncObjFormat *format = osync_converter_get_targetformat(converter); 
    1035                                                                 osync_converter_path_set_config( path, osync_objformat_get_config(format)); 
     988                                                                OSyncObjFormatSink *formatsink = osync_objtype_sink_find_objformat_sink(objtype_sink, format); 
     989                                                                osync_converter_path_set_config(path, osync_objformat_sink_get_config(formatsink)); 
    1036990                                                        } 
    1037991 
    1038                                                         g_free(formats); 
    1039                                                          
    1040992                                                        if (!osync_format_env_convert(engine->formatenv, path, osync_change_get_data(entry_engine->change), error)) { 
    1041993                                                                osync_converter_path_unref(path); 
     
    10501002                                                } 
    10511003                                                 
    1052                                                 osync_trace(TRACE_INTERNAL, "Writing change %s, changetype %i, format %s , format conversion config %s , objtype %s from member %lli", osync_change_get_uid(change), osync_change_get_changetype(change), osync_objformat_get_name(osync_change_get_objformat(change)), osync_objformat_get_config(osync_change_get_objformat(change)), osync_change_get_objtype(change), osync_member_get_id(osync_client_proxy_get_member(sinkengine->proxy))); 
     1004                                                osync_trace(TRACE_INTERNAL, "Writing change %s, changetype %i, format %s , objtype %s from member %lli",  
     1005                                                                osync_change_get_uid(change),  
     1006                                                                osync_change_get_changetype(change),  
     1007                                                                osync_objformat_get_name(osync_change_get_objformat(change)),  
     1008                                                                osync_change_get_objtype(change),  
     1009                                                                osync_member_get_id(osync_client_proxy_get_member(sinkengine->proxy))); 
    10531010         
    10541011                                                if (!osync_client_proxy_commit_change(sinkengine->proxy, _osync_obj_engine_commit_change_callback, entry_engine, osync_entry_engine_get_change(entry_engine), error))