Changeset 2287

Show
Ignore:
Timestamp:
07/08/07 00:08:22 (1 year ago)
Author:
dgollub
Message:

Added <objformat> field to specifiy which format should be used
to store the changes. This is needed since we have a plain xmlformat-*
detector/converter. To avoid that everyting got stored as
xmlformat-*-doc.

So if you want to backup your device which contains a binary format and
want to store the entries as iCalendar. <objformat>vevent20</objformat>
will do the magic.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • plugins/file-sync/src/file-sync

    r1583 r2287  
    55    <objtype>data</objtype> 
    66  </directory> 
     7 
     8  <!--  
     9    
     10   Field objformat set the object format which should be used to store. 
     11   objformat is optional - by default objformat is "file". 
     12 
     13  -->  
     14         
     15  <!-- 
     16  <directory> 
     17    <path></path> 
     18    <objtype>contact</objtype> 
     19    <objformat>vcard30</objformat> 
     20  </directory> 
     21  --> 
     22 
     23  <!-- 
     24  <directory> 
     25    <path></path> 
     26    <objtype>event</objtype> 
     27    <objformat>vevent20</objformat> 
     28  </directory> 
     29  --> 
     30 
    731</config> 
  • plugins/file-sync/src/file_sync.c

    r2007 r2287  
    5050} 
    5151 
    52 static osync_bool osync_filesync_parse_directory(OSyncFileEnv *env, xmlNode *cur, OSyncError **error) 
     52static osync_bool osync_filesync_parse_directory(OSyncFileEnv *env, OSyncPluginInfo *info, xmlNode *cur, OSyncError **error) 
    5353{ 
    5454        osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, env, cur, error); 
     55 
     56        OSyncFormatEnv *formatenv = osync_plugin_info_get_format_env(info); 
    5557 
    5658        OSyncFileDir *dir = osync_try_malloc0(sizeof(OSyncFileDir), error); 
     
    6668                        } else if (!xmlStrcmp(cur->name, (const xmlChar *)"objtype")) { 
    6769                                dir->objtype = g_strdup(str); 
     70                        } else if (!xmlStrcmp(cur->name, (const xmlChar *)"objformat")) { 
     71                                dir->objformat = osync_format_env_find_objformat(formatenv, str); 
    6872                        } else if (!xmlStrcmp(cur->name, (const xmlChar *)"recursive")) { 
    6973                                dir->recursive = (g_ascii_strcasecmp(str, "TRUE") == 0); 
     
    9498 
    9599/*Load the state from a xml file and return it in the conn struct*/ 
    96 static osync_bool osync_filesync_parse_settings(OSyncFileEnv *env, const char *data, OSyncError **error) 
    97 { 
    98         osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, env, data, error); 
     100static osync_bool osync_filesync_parse_settings(OSyncFileEnv *env, OSyncPluginInfo *info, OSyncError **error) 
     101{ 
     102        osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, env, info, error); 
    99103        xmlDoc *doc = NULL; 
    100104        xmlNode *cur = NULL; 
     105 
     106        const char *data = osync_plugin_info_get_config(info); 
    101107 
    102108        doc = xmlParseMemory(data, strlen(data) + 1); 
     
    124130                if (str) { 
    125131                        if (!xmlStrcmp(cur->name, (const xmlChar *)"directory")) { 
    126                                 if (!osync_filesync_parse_directory(env, cur->xmlChildrenNode, error)) 
     132                                if (!osync_filesync_parse_directory(env, info, cur->xmlChildrenNode, error)) 
    127133                                        goto error_free_doc; 
    128134                        } 
     
    215221        OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); 
    216222        OSyncFileDir *dir = osync_objtype_sink_get_userdata(sink); 
    217         OSyncFileEnv *env = (OSyncFileEnv *)data; 
    218223        OSyncError *error = NULL; 
    219224         
     
    235240                goto error_free_file; 
    236241         
    237         OSyncData *odata = osync_data_new((char *)file, sizeof(OSyncFileFormat), env->objformat, &error); 
     242        OSyncData *odata = osync_data_new((char *)file, sizeof(OSyncFileFormat), dir->objformat, &error); 
    238243        if (!odata) 
    239244                goto error_free_data; 
     
    294299                        osync_data_get_data(odata, &buffer, &size); 
    295300                        g_assert(buffer); 
    296                         g_assert(size == sizeof(OSyncFileFormat)); 
    297                          
    298                         OSyncFileFormat *file = (OSyncFileFormat *)buffer; 
    299                          
    300                         if (!osync_file_write(filename, file->data, file->size, file->mode, &error)) 
    301                                 goto error; 
     301 
     302                        if (!strcmp(osync_objformat_get_name(osync_data_get_objformat(odata)), "file")) { 
     303                                g_assert(size == sizeof(OSyncFileFormat)); 
     304                                 
     305                                OSyncFileFormat *file = (OSyncFileFormat *)buffer; 
     306                                 
     307                                if (!osync_file_write(filename, file->data, file->size, file->mode, &error)) 
     308                                        goto error; 
     309                        } else { 
     310                                if (!osync_file_write(filename, buffer, size-1, 0, &error)) 
     311                                        goto error; 
     312                        } 
     313 
    302314                        break; 
    303315                default: 
     
    421433                        } 
    422434                         
    423                         OSyncData *odata = osync_data_new((char *)file, sizeof(OSyncFileFormat), directory->env->objformat, &error); 
     435                        OSyncData *odata = osync_data_new((char *)file, sizeof(OSyncFileFormat), directory->objformat, &error); 
    424436                        if (!odata) { 
    425437                                osync_change_unref(change); 
     
    454466        OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); 
    455467        OSyncFileDir *dir = osync_objtype_sink_get_userdata(sink); 
    456         OSyncFileEnv *env = (OSyncFileEnv *)data; 
    457468        int i = 0; 
    458469        OSyncError *error = NULL; 
     
    480491                osync_change_set_changetype(change, OSYNC_CHANGE_TYPE_DELETED); 
    481492                 
    482                 OSyncData *odata = osync_data_new(NULL, 0, env->objformat, &error); 
     493                OSyncData *odata = osync_data_new(NULL, 0, dir->objformat, &error); 
    483494                if (!odata) { 
    484495                        g_free(uids[i]); 
     
    567578         
    568579        OSyncFormatEnv *formatenv = osync_plugin_info_get_format_env(info); 
    569         env->objformat = osync_format_env_find_objformat(formatenv, "file"); 
    570          
    571         if (!osync_filesync_parse_settings(env, osync_plugin_info_get_config(info), error)) 
     580         
     581        if (!osync_filesync_parse_settings(env, info, error)) 
    572582                goto error_free_env; 
    573583         
     
    585595                dir->sink = sink; 
    586596                 
    587                 /* The file format is the only one we understand */ 
    588                 osync_objtype_sink_add_objformat(sink, "file"); 
    589                  
     597                /* Use the configured object format. By default object format "file" is used. */ 
     598                if (dir->objformat) { 
     599                        osync_objtype_sink_add_objformat(sink, osync_objformat_get_name(dir->objformat)); 
     600                } else { 
     601                        osync_objtype_sink_add_objformat(sink, "file"); 
     602                        dir->objformat = osync_format_env_find_objformat(formatenv, "file"); 
     603                } 
     604 
    590605                /* All sinks have the same functions of course */ 
    591606                OSyncObjTypeSinkFunctions functions; 
  • plugins/file-sync/src/file_sync.h

    r1201 r2287  
    4040typedef struct OSyncFileEnv { 
    4141        GList *directories; 
    42         OSyncObjFormat *objformat; 
    4342} OSyncFileEnv; 
    4443 
     
    5150        osync_bool recursive; 
    5251        OSyncFileEnv *env; 
     52        OSyncObjFormat *objformat; 
    5353} OSyncFileDir; 
    5454