From: <svn...@op...> - 2010-06-04 23:51:00
|
Author: vschreiner Date: Sat Jun 5 01:50:49 2010 New Revision: 6047 URL: http://www.opensync.org/changeset/6047 Log: the irmc plugin got ported to the current API (0.39). Modified: plugins/irmc-sync/src/irmc-sync plugins/irmc-sync/src/irmc_obex.c plugins/irmc-sync/src/irmc_sync.c Modified: plugins/irmc-sync/src/irmc-sync ============================================================================== --- plugins/irmc-sync/src/irmc-sync Tue Jun 1 01:51:19 2010 (r6046) +++ plugins/irmc-sync/src/irmc-sync Sat Jun 5 01:50:49 2010 (r6047) @@ -1,6 +1,55 @@ -<?xml version="1.0"?> -<config> - <connectmedium>bluetooth</connectmedium> - <btunit></btunit> - <btchannel></btchannel> -</config> +<config version="1.0"> + <Connection> + <ActiveConnection>Bluetooth</ActiveConnection> + <Bluetooth> + <MAC></MAC> + <RFCommChannel></RFCommChannel> + <SDPUUID></SDPUUID> + </Bluetooth> + </Connection> + <Resources> + <Resource> + <Enabled>1</Enabled> + <Formats> + <Format> + <Name>vcard21</Name> + </Format> + <Format> + <Name>vcard30</Name> + </Format> + </Formats> + <ObjType>contact</ObjType> + <Url>default</Url> + </Resource> + <Resource> + <Enabled>1</Enabled> + <Formats> + <Format> + <Name>vevent20</Name> + </Format> + </Formats> + <ObjType>event</ObjType> + <Url>default</Url> + </Resource> + <Resource> + <Enabled>1</Enabled> + <Formats> + <Format> + <Name>vtodo20</Name> + </Format> + </Formats> + <ObjType>todo</ObjType> + <Url>default</Url> + </Resource> + <Resource> + <Enabled>1</Enabled> + <Formats> + <Format> + <Name>vjournal</Name> + </Format> + </Formats> + <ObjType>note</ObjType> + <Url>default</Url> + </Resource> + </Resources> +</config> \ No newline at end of file Modified: plugins/irmc-sync/src/irmc_obex.c ============================================================================== --- plugins/irmc-sync/src/irmc_obex.c Tue Jun 1 01:51:19 2010 (r6046) +++ plugins/irmc-sync/src/irmc_obex.c Sat Jun 5 01:50:49 2010 (r6047) @@ -441,6 +441,7 @@ } obex_t* irmc_obex_client(irmc_config *config) { + osync_trace(TRACE_ENTRY, "%s(%p)", __func__, config); obex_ctrans_t bttrans; #ifdef HAVE_COBEX obex_ctrans_t cabletrans = { obex_cable_connect, cobex_disconnect, @@ -526,7 +527,8 @@ #endif break; } - OBEX_SetUserData(handle, (gpointer) userdata); + OBEX_SetUserData(handle, userdata); + osync_trace(TRACE_EXIT, "%s(%p)", __func__, handle); return(handle); } @@ -537,7 +539,8 @@ obex_headerdata_t hd; obexdata_t *userdata; struct sockaddr_un addr; - + if( handle == NULL ) + return FALSE; userdata = (obexdata_t*) OBEX_GetUserData(handle); userdata->connected = 0; @@ -570,6 +573,7 @@ ret = OBEX_Request(handle, object); if (ret < 0) { osync_error_set(error, OSYNC_ERROR_GENERIC, "Cannot connect via OBEX."); + osync_trace(TRACE_EXIT_ERROR, "%s (%p)", __func__, handle); return FALSE; } } @@ -589,6 +593,7 @@ g_free(serial); irmc_obex_disconnect(handle, error); osync_error_set(error, OSYNC_ERROR_GENERIC, "Cannot connect via OBEX."); + osync_trace(TRACE_EXIT_ERROR, "%s (%p)", __func__, handle); return FALSE; } g_free(serial); @@ -597,24 +602,25 @@ #endif } // Connected and serial number is OK! - osync_trace(TRACE_EXIT, "%s", __func__); + osync_trace(TRACE_EXIT, "%s (%p)", __func__, handle); return TRUE; } osync_error_set(error, OSYNC_ERROR_GENERIC, "Cannot connect via OBEX."); - osync_trace(TRACE_EXIT_ERROR, "%s", __func__); + osync_trace(TRACE_EXIT_ERROR, "%s (%p)", __func__, handle); return FALSE; } gboolean irmc_obex_disconnect(obex_t* handle, OSyncError **error) { + osync_trace(TRACE_ENTRY, "%s(%p %p)", __func__, handle, error); obex_object_t *object; obexdata_t *userdata; - - userdata = (obexdata_t*) OBEX_GetUserData(handle); + userdata = (obexdata_t*) OBEX_GetUserData(handle); if (userdata->connected) { if ((object = OBEX_ObjectNew(handle, OBEX_CMD_DISCONNECT))) { userdata->busy = 1; if(OBEX_Request(handle, object) < 0) { osync_error_set(error, OSYNC_ERROR_GENERIC, "Cannot disconnect from OBEX."); + osync_trace(TRACE_EXIT, "%s Cannot disconnect from OBEX.", __func__); return FALSE; } } @@ -625,10 +631,12 @@ OBEX_TransportDisconnect(handle); userdata->connected = 0; } + osync_trace(TRACE_EXIT, "%s", __func__); return TRUE; } void irmc_obex_cleanup(obex_t* handle) { + osync_trace(TRACE_ENTRY, "%s(%p)", __func__, handle); if (handle) { obexdata_t *userdata; @@ -636,6 +644,7 @@ OBEX_Cleanup(handle); g_free(userdata); } + osync_trace(TRACE_EXIT, "%s", __func__); } // Return the serial number of an already connected device. Modified: plugins/irmc-sync/src/irmc_sync.c ============================================================================== --- plugins/irmc-sync/src/irmc_sync.c Tue Jun 1 01:51:19 2010 (r6046) +++ plugins/irmc-sync/src/irmc_sync.c Sat Jun 5 01:50:49 2010 (r6047) @@ -190,14 +190,14 @@ osync_plugin_connection_serial_set_devicenode( conn, devnode ); strncpy( config->cabledev, devnode, 127 ); } - - if( !strcmp( osync_plugin_config_get_advancedoption_value_by_name(configdata, "donttellsync"), "true" )) + const char *dtstmp = osync_plugin_config_get_advancedoption_value_by_name(configdata, "donttellsync"); + if( dtstmp ) { - config->donttellsync = TRUE; - } else { - config->donttellsync = FALSE; + if( !strcmp( dtstmp, "true" )) + { + config->donttellsync = TRUE; + } } - // FIXME: implement parsing of config->cabletype! osync_trace(TRACE_EXIT, "%s", __func__); return TRUE; @@ -366,7 +366,7 @@ /** * Creates the addressbook specific changeinfo for slow- and fastsync */ -void create_addressbook_changeinfo(int sync_type, OSyncObjTypeSink *sink, OSyncContext *ctx, char *data, char *luid, int type, void *userdata) +static void create_addressbook_changeinfo(int sync_type, OSyncObjTypeSink *sink, OSyncContext *ctx, char *data, char *luid, int type, void *userdata) { osync_trace(TRACE_ENTRY, "%s(%i, %p, %p, %s, %i)", __func__, sync_type, ctx, data, luid, type); osync_trace(TRACE_SENSITIVE, "Content of data:\n%s", data); @@ -447,7 +447,7 @@ /** * Creates the notebook specific changeinfo for slow- and fastsync */ -void create_notebook_changeinfo(int sync_type, OSyncObjTypeSink *sink, OSyncContext *ctx, char *data, char *luid, int type, void *userdata) +static void create_notebook_changeinfo(int sync_type, OSyncObjTypeSink *sink, OSyncContext *ctx, char *data, char *luid, int type, void *userdata) { osync_trace(TRACE_ENTRY, "%s(%i, %p, %p, %s, %i)", __func__, sync_type, ctx, data, luid, type); osync_trace(TRACE_SENSITIVE, "Content of data:\n%s", data); @@ -536,7 +536,7 @@ * - create_addressbook_changeinfo() * - create_notebook_changeinfo() */ -gboolean get_generic_changeinfo(irmc_environment *env, OSyncObjTypeSink *sink, OSyncPluginInfo *oinfo, OSyncContext *ctx, data_type_information *info, void *userdata, OSyncError **error) +gboolean get_generic_changeinfo(irmc_environment *env, OSyncObjTypeSink *sink, OSyncPluginInfo *oinfo, OSyncContext *ctx, data_type_information *info, osync_bool slow_sync, void *userdata, OSyncError **error) { osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p, %p)", __func__, env, info, ctx, info, error); @@ -554,12 +554,10 @@ buffer = g_malloc(DATABUFSIZE); - osync_trace(TRACE_INTERNAL, "syncing %s\n", info->name ); memset(buffer, 0, DATABUFSIZE); // check whether we have to do a slowsync - if (osync_objtype_sink_get_slowsync(sink) == TRUE) { - osync_trace(TRACE_INTERNAL, "slowsync %s\n", info->name ); + if (slow_sync) { buffer_length = DATABUFSIZE; if (config->donttellsync) { // reconnect with "IRMC-SYNC" to get X-IRMC-LUID @@ -573,7 +571,8 @@ } } } - + if( !config->obexhandle ) + goto error; // get $objecttype/info.log for debugging memset(buffer, 0, DATABUFSIZE); buffer_length = DATABUFSIZE; @@ -868,12 +867,13 @@ */ const char *objtype = osync_objtype_sink_get_name(sink); - //you can also use the anchor system to detect a device reset //or some parameter change here. Check the docs to see how it works //Now you get the last stored anchor from the device + /* OSyncSinkStateDB *state_db = osync_objtype_sink_get_state_db(sink); - + assert(state_db); + osync_trace(TRACE_INTERNAL, "%s(after get_state_db )", __func__); char *anchor = osync_sink_state_get(state_db, env->anchor_path, &error ); if( !anchor) { @@ -888,7 +888,7 @@ g_free( anchor ); osync_context_report_success(ctx); osync_trace(TRACE_EXIT, "%s", __func__); - return; + return;*/ if (env->isConnected == 0) { @@ -908,7 +908,7 @@ env->isConnected++; // check whether a slowsync is necessary - gboolean slowsync = FALSE; +/* gboolean slowsync = FALSE; if (!detect_slowsync(database->changecounter, database->obex_db, &(database->dbid), &(config->serial_number), &slowsync, config->obexhandle, &error)) { @@ -923,15 +923,15 @@ osync_objtype_sink_set_slowsync(sink, TRUE); } else { osync_trace(TRACE_INTERNAL, "No slowsync required"); - } + } */ osync_context_report_success(ctx); - + return; error: osync_context_report_osyncerror(ctx, error); osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(&error)); osync_error_unref(&error); - + return; } /** @@ -941,7 +941,8 @@ { osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, userdata, info, ctx); - irmc_environment *env = (irmc_environment *)userdata; + irmc_database *database = (irmc_database *)userdata; + irmc_environment *env = database->env; // disconnect from the device if (env->isConnected <= 1) { @@ -950,7 +951,7 @@ env->isConnected--; } OSyncPluginConfig *origconf = osync_plugin_info_get_config(info); - save_sync_anchors(sink, origconf, env); + //save_sync_anchors(sink, origconf, env); osync_context_report_success(ctx); @@ -962,27 +963,45 @@ */ static void irmcSyncDone(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *userdata) { - osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, userdata, info, ctx); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, sink, info, ctx, userdata); - irmc_database *database = (irmc_database *)userdata; +/* irmc_database *database = (irmc_database *)userdata; irmc_environment *env = database->env; - const char *objtype = osync_objtype_sink_get_name(sink); - if (database->changecounter >= 0 && strcmp(database->dbid, "FFFFFF")) { - +*/ /* FIXME port to SinkStateDb */ #if 0 char *anchor = g_strdup_printf("%d:%s", database->changecounter, database->dbid); osync_anchor_update( env->anchor_path, objtype, anchor ); g_free(anchor); #endif - } else { +/* } else { osync_trace(TRACE_INTERNAL, "ERROR: Invalid values for event anchor detected."); } osync_context_report_success(ctx); - osync_trace(TRACE_EXIT, "%s", __func__); + osync_trace(TRACE_EXIT, "%s", __func__);*/ + + + OSyncError *error = NULL; +/* + irmc_database *database = userdata; + OSyncSinkStateDB *state_db = osync_objtype_sink_get_state_db(sink); + + if (!osync_sink_state_set(state_db, "path", database->env->anchor_path, &error)) + goto error; +*/ + osync_context_report_success(ctx); + + osync_trace(TRACE_EXIT, "%s", __func__); + return; + +error: + osync_context_report_osyncerror(ctx, error); + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(&error)); + osync_error_unref(&error); + return; } /** @@ -992,7 +1011,7 @@ */ static void irmcCalendarGetChangeinfo(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, osync_bool slow_sync, void *userdata) { - osync_trace(TRACE_ENTRY, "%p, %p, %p)", __func__, userdata, info, ctx); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, userdata, info, ctx); OSyncError *error = 0; irmc_database *database = (irmc_database *)userdata; @@ -1008,7 +1027,7 @@ datainfo.change_counter = &(database->changecounter); - if (!get_generic_changeinfo(env, sink, info, ctx, &datainfo, userdata, &error)) + if (!get_generic_changeinfo(env, sink, info, ctx, &datainfo, slow_sync, userdata, &error)) goto error; osync_context_report_success(ctx); @@ -1042,7 +1061,7 @@ strcpy(datainfo.path_extension, "vcf"); datainfo.change_counter = &(database->changecounter); - if (!get_generic_changeinfo(env, sink, info, ctx, &datainfo, userdata, &error)) + if (!get_generic_changeinfo(env, sink, info, ctx, &datainfo, slow_sync, userdata, &error)) goto error; osync_context_report_success(ctx); @@ -1061,7 +1080,7 @@ */ static void irmcNoteGetChangeinfo(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, osync_bool slow_sync, void *userdata) { - osync_trace(TRACE_ENTRY, "%p, %p, %p)", __func__, userdata, info, ctx); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, userdata, info, ctx); OSyncError *error = 0; irmc_database *database = (irmc_database *)userdata; @@ -1077,7 +1096,7 @@ strcpy(datainfo.path_extension, "vnt"); datainfo.change_counter = &(database->changecounter); - if (!get_generic_changeinfo(env, sink, info, ctx, &datainfo, userdata, &error)) + if (!get_generic_changeinfo(env, sink, info, ctx, &datainfo, slow_sync, userdata, &error)) goto error; osync_context_report_success(ctx); @@ -1307,13 +1326,19 @@ while (env->databases) { irmc_database *db = env->databases->data; - if(db->sink) osync_objtype_sink_unref(db->sink); - if(db->dbid) g_free(db->dbid); + + if(db->sink) + osync_objtype_sink_unref(db->sink); + + if(db->dbid) + g_free(db->dbid); + g_free(db); env->databases = g_list_remove(env->databases, db); } - if(config->serial_number) g_free(config->serial_number); + if(config->serial_number) + g_free(config->serial_number); g_free(env); @@ -1348,13 +1373,13 @@ return TRUE; } -static irmc_database *create_database(OSyncPluginInfo *info, OSyncObjTypeSink *sink, const char *format, char *obex_db, OSyncSinkGetChangesFn getchanges, OSyncSinkCommitFn commit, OSyncError **error) +static irmc_database *create_database(OSyncPluginInfo *info, OSyncObjTypeSink *sink, const char *format, char *obex_db, OSyncError **error) { - osync_trace(TRACE_ENTRY, "%s(%p, %s, %s, %p)", __func__, info, sink, format, error); + const char *objtype = osync_objtype_sink_get_name(sink); + osync_trace(TRACE_ENTRY, "%s(%p, %s, %s, %p)", __func__, info, objtype, format, error); OSyncFormatEnv *formatenv = osync_plugin_info_get_format_env(info); - const char *objtype = osync_objtype_sink_get_name(sink); irmc_database *database = osync_try_malloc0(sizeof(irmc_database), error); if (!database) goto error; @@ -1363,23 +1388,12 @@ if (!database->sink) goto error_free_db; - osync_objtype_sink_set_connect_func(database->sink, irmcConnect); - osync_objtype_sink_set_disconnect_func(database->sink, irmcDisconnect); - osync_objtype_sink_set_get_changes_func(database->sink, getchanges); - osync_objtype_sink_set_commit_func(database->sink, commit); - osync_objtype_sink_set_sync_done_func(database->sink, irmcSyncDone); - - database->objformat = osync_format_env_find_objformat(formatenv, format); if (!database->objformat) { osync_error_set(error, OSYNC_ERROR_GENERIC, "Can't find object format \"%s\" for object type \"%s\"! " "Is the vformat plugin correctly installed?", format, objtype); goto error_free_db; } - osync_objtype_sink_add_objformat_sink(database->sink, format); - - osync_plugin_info_add_objtype(info, database->sink); - database->obex_db = obex_db; osync_trace(TRACE_EXIT, "%s: %p", __func__, database); @@ -1457,15 +1471,37 @@ OSyncObjTypeSink *sink = (OSyncObjTypeSink *) s->data; const char *objtype = osync_objtype_sink_get_name(sink); - - if (!strcmp(objtype, "contact")) - contactdb = create_database(info, sink, "vcard21", "pb", irmcContactGetChangeinfo, irmcContactCommitChange, error); - else if (!strcmp(objtype, "event")) - eventdb = create_database(info, sink, "vevent10", "cal", irmcCalendarGetChangeinfo, irmcCalendarCommitChange, error); - else if (!strcmp(objtype, "todo")) - tododb = create_database(info, sink, "vtodo10", "cal", irmcCalendarGetChangeinfo, irmcCalendarCommitChange, error); - else if (!strcmp(objtype, "note")) - notedb = create_database(info, sink, "vnote11", "nt", irmcNoteGetChangeinfo, irmcNoteCommitChange, error); + osync_objtype_sink_set_connect_func(sink, irmcConnect); + osync_objtype_sink_set_disconnect_func(sink, irmcDisconnect); + osync_objtype_sink_set_sync_done_func(sink, irmcSyncDone); + if (!strcmp(objtype, "contact")) { + contactdb = create_database(info, sink, "vcard21", "pb", error); + osync_objtype_sink_set_get_changes_func(sink, irmcContactGetChangeinfo); + osync_objtype_sink_set_commit_func(sink, irmcContactCommitChange); + osync_objtype_sink_set_userdata(sink, contactdb); + } else if (!strcmp(objtype, "event")) { + eventdb = create_database(info, sink, "vevent10", "cal", error); + osync_objtype_sink_set_get_changes_func(sink, irmcCalendarGetChangeinfo); + osync_objtype_sink_set_commit_func(sink, irmcCalendarCommitChange); + osync_objtype_sink_set_userdata(sink, eventdb); + } else if (!strcmp(objtype, "todo")) { + tododb = create_database(info, sink, "vtodo10", "cal", error); + osync_objtype_sink_set_get_changes_func(sink, irmcCalendarGetChangeinfo); + osync_objtype_sink_set_commit_func(sink, irmcCalendarCommitChange); + osync_objtype_sink_set_userdata(sink,tododb); + } else if (!strcmp(objtype, "note")) { + notedb = create_database(info, sink, "vnote11", "nt", error); + osync_objtype_sink_set_get_changes_func(sink, irmcNoteGetChangeinfo); + osync_objtype_sink_set_commit_func(sink, irmcNoteCommitChange); + osync_objtype_sink_set_userdata(sink,notedb); + } + OSyncPluginResource *res = osync_plugin_config_find_active_resource(configdata, objtype); + OSyncList *s = osync_plugin_resource_get_objformat_sinks(res); + for (; s; s = s->next) { + OSyncObjFormatSink *fsink = s->data; + osync_objtype_sink_add_objformat_sink(sink, fsink); + } + osync_plugin_info_add_objtype(info, sink); } if (!contactdb || !eventdb || !tododb || !notedb) @@ -1476,10 +1512,10 @@ tododb->env = env; notedb->env = env; - env->databases = g_list_append(env->databases, contactdb); - env->databases = g_list_append(env->databases, eventdb); - env->databases = g_list_append(env->databases, tododb); - env->databases = g_list_append(env->databases, notedb); + env->databases = g_list_append(env->databases, contactdb); + env->databases = g_list_append(env->databases, eventdb); + env->databases = g_list_append(env->databases, tododb); + env->databases = g_list_append(env->databases, notedb); // return the environment osync_trace(TRACE_EXIT, "%s: %p", __func__, env); @@ -1508,7 +1544,7 @@ osync_plugin_set_finalize(plugin, irmcFinalize); osync_plugin_set_discover(plugin, irmcDiscover); - osync_plugin_env_register_plugin(env, plugin); + osync_plugin_env_register_plugin(env, plugin, error); osync_plugin_unref(plugin); return TRUE; |