Changeset 2287
- Timestamp:
- 07/08/07 00:08:22 (1 year ago)
- Files:
-
- plugins/file-sync/src/file-sync (modified) (1 diff)
- plugins/file-sync/src/file_sync.c (modified) (12 diffs)
- plugins/file-sync/src/file_sync.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
plugins/file-sync/src/file-sync
r1583 r2287 5 5 <objtype>data</objtype> 6 6 </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 7 31 </config> plugins/file-sync/src/file_sync.c
r2007 r2287 50 50 } 51 51 52 static osync_bool osync_filesync_parse_directory(OSyncFileEnv *env, xmlNode *cur, OSyncError **error)52 static osync_bool osync_filesync_parse_directory(OSyncFileEnv *env, OSyncPluginInfo *info, xmlNode *cur, OSyncError **error) 53 53 { 54 54 osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, env, cur, error); 55 56 OSyncFormatEnv *formatenv = osync_plugin_info_get_format_env(info); 55 57 56 58 OSyncFileDir *dir = osync_try_malloc0(sizeof(OSyncFileDir), error); … … 66 68 } else if (!xmlStrcmp(cur->name, (const xmlChar *)"objtype")) { 67 69 dir->objtype = g_strdup(str); 70 } else if (!xmlStrcmp(cur->name, (const xmlChar *)"objformat")) { 71 dir->objformat = osync_format_env_find_objformat(formatenv, str); 68 72 } else if (!xmlStrcmp(cur->name, (const xmlChar *)"recursive")) { 69 73 dir->recursive = (g_ascii_strcasecmp(str, "TRUE") == 0); … … 94 98 95 99 /*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);100 static 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); 99 103 xmlDoc *doc = NULL; 100 104 xmlNode *cur = NULL; 105 106 const char *data = osync_plugin_info_get_config(info); 101 107 102 108 doc = xmlParseMemory(data, strlen(data) + 1); … … 124 130 if (str) { 125 131 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)) 127 133 goto error_free_doc; 128 134 } … … 215 221 OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); 216 222 OSyncFileDir *dir = osync_objtype_sink_get_userdata(sink); 217 OSyncFileEnv *env = (OSyncFileEnv *)data;218 223 OSyncError *error = NULL; 219 224 … … 235 240 goto error_free_file; 236 241 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); 238 243 if (!odata) 239 244 goto error_free_data; … … 294 299 osync_data_get_data(odata, &buffer, &size); 295 300 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 302 314 break; 303 315 default: … … 421 433 } 422 434 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); 424 436 if (!odata) { 425 437 osync_change_unref(change); … … 454 466 OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); 455 467 OSyncFileDir *dir = osync_objtype_sink_get_userdata(sink); 456 OSyncFileEnv *env = (OSyncFileEnv *)data;457 468 int i = 0; 458 469 OSyncError *error = NULL; … … 480 491 osync_change_set_changetype(change, OSYNC_CHANGE_TYPE_DELETED); 481 492 482 OSyncData *odata = osync_data_new(NULL, 0, env->objformat, &error);493 OSyncData *odata = osync_data_new(NULL, 0, dir->objformat, &error); 483 494 if (!odata) { 484 495 g_free(uids[i]); … … 567 578 568 579 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)) 572 582 goto error_free_env; 573 583 … … 585 595 dir->sink = sink; 586 596 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 590 605 /* All sinks have the same functions of course */ 591 606 OSyncObjTypeSinkFunctions functions; plugins/file-sync/src/file_sync.h
r1201 r2287 40 40 typedef struct OSyncFileEnv { 41 41 GList *directories; 42 OSyncObjFormat *objformat;43 42 } OSyncFileEnv; 44 43 … … 51 50 osync_bool recursive; 52 51 OSyncFileEnv *env; 52 OSyncObjFormat *objformat; 53 53 } OSyncFileDir; 54 54
