From evolution@opengroupware.org Fri Apr 8 08:54:26 2005 From: evolution@opengroupware.org (Oliver Jehle) Date: Fri, 08 Apr 2005 09:54:26 +0200 Subject: [OGo-Evolution] Address create patch but it only create an address, then crash Message-ID: <1112946866.17765.5.camel@vorab.monex.li> --=-Yyb/7szGfzMWuPdpMR92 Content-Type: text/plain Content-Transfer-Encoding: 7bit due my limited knowledge of evolution i've the problem, that after creating the address in ogo, i don't know how to update the internal data structure of evolution. i try to extract the "x-skyrix-newname" header field to catch the new server id of the address and then send an update of the address feel free to comment or to fix it ;-) its diffed against evolution-groupdav-0.2. --=-Yyb/7szGfzMWuPdpMR92 Content-Disposition: attachment; filename=addr.diff Content-Type: text/x-patch; name=addr.diff; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Only in evolution-groupdav-0.2.oj-x/addressbook: .deps diff -C 3 -r evolution-groupdav-0.2/addressbook/e-book-backend-ogo.c evolution-groupdav-0.2.oj-x/addressbook/e-book-backend-ogo.c *** evolution-groupdav-0.2/addressbook/e-book-backend-ogo.c 2005-03-24 12:09:20.000000000 +0100 --- evolution-groupdav-0.2.oj-x/addressbook/e-book-backend-ogo.c 2005-04-08 08:57:14.000000000 +0200 *************** *** 39,46 **** #define d(x) x ! #define SUMMARY_FLUSH_TIMEOUT 5000 ! static EBookBackendClass *parent_class; struct _EBookBackendOGoPrivate { --- 39,45 ---- #define d(x) x ! #define SUMMARY_FLUSH_TIMEOUT 5000 static EBookBackendClass *parent_class; struct _EBookBackendOGoPrivate { *************** *** 121,159 **** guint32 opid, const char *vcard) { ! EBookBackendOGo *ogo = E_BOOK_BACKEND_OGO (backend); EContact *contact; E2kProperties *props; const gchar *name; gchar *e2k_href, *href; gchar *location; OGoConnectionStatus status; - contact = e_contact_new_from_vcard (vcard); ! ! props = props_from_contact (ogo, contact, NULL); ! /* figure out the right uri to be using */ name = contact_name (contact); if (!name) name = "No Subject"; - href = ogo_connection_get_item_uri (ogo->priv->conn, ogo->priv->item_path); e2k_href = get_e2k_uri (href); ! g_free (href); ! ! status = ogo_connection_proppatch_new (ogo->priv->conn, e2k_href, name, ! test_name, ogo, ! props, &location, NULL); ! g_free (e2k_href); ! if (status == OGO_CONNECTION_STATUS_OK) { ! ogo_book_backend_cache_put_contact (ogo->priv->cache, contact); ! e_data_book_respond_modify (book, opid, GNOME_Evolution_Addressbook_Success, contact); } else { ! e_data_book_respond_modify (book, opid, GNOME_Evolution_Addressbook_OtherError, NULL); } ! g_object_unref (contact); } --- 120,160 ---- guint32 opid, const char *vcard) { ! EBookBackendOGo *ogo = E_BOOK_BACKEND_OGO (backend); EContact *contact; E2kProperties *props; const gchar *name; gchar *e2k_href, *href; gchar *location; + gchar *newname; + gchar *uid; + GString *new_uri; OGoConnectionStatus status; contact = e_contact_new_from_vcard (vcard); ! props = props_from_contact (ogo, contact, NULL); ! uid = e_contact_get_const (contact, E_CONTACT_UID); ! g_print ("create Contact %s\n",uid); /* figure out the right uri to be using */ name = contact_name (contact); if (!name) name = "No Subject"; href = ogo_connection_get_item_uri (ogo->priv->conn, ogo->priv->item_path); e2k_href = get_e2k_uri (href); ! g_print ("create Contact uri %s || %s \n",e2k_href,ogo->priv->item_path); ! status = ogo_connection_proppatch_new (ogo->priv->conn, e2k_href, name, test_name, ogo, props, &location, &newname); ! g_print ("newname: %s \n",newname); ! new_uri = g_string_new (e2k_href); ! g_string_append_printf(new_uri, "/%s.vcf", newname); ! e2k_href=g_string_free (new_uri, FALSE); ! g_print ("newname href: %s \n",e2k_href); ! status = ogo_connection_proppatch (ogo->priv->conn, e2k_href, props, FALSE, NULL); if (status == OGO_CONNECTION_STATUS_OK) { ! e_data_book_respond_create (book, opid, GNOME_Evolution_Addressbook_Success, contact); } else { ! e_data_book_respond_create (book, opid, GNOME_Evolution_Addressbook_OtherError, NULL); } ! g_free (href); ! g_free (e2k_href); g_object_unref (contact); } *************** *** 1295,1319 **** get_ogo_info (EContact *contact, gchar **href, gchar **etag) { GList *attrs; gint n_found = 0; for (attrs = e_vcard_get_attributes (E_VCARD (contact)); attrs != NULL; attrs = attrs->next) { EVCardAttribute *attr = attrs->data; - if (strcmp (e_vcard_attribute_get_name (attr), OGO_ETAG_PROPERTY) == 0) { ! if (etag) *etag = g_strdup (e_vcard_attribute_get_value (attr)); ! printf("etag %s",etag) ; ! n_found ++; } else if (strcmp (e_vcard_attribute_get_name (attr), OGO_HREF_PROPERTY) == 0) { ! if (href) *href = g_strdup (e_vcard_attribute_get_value (attr)); ! printf("href %s",href) ; ! n_found ++; } } ! ! g_assert (n_found == 2); } EContact * --- 1296,1328 ---- get_ogo_info (EContact *contact, gchar **href, gchar **etag) { GList *attrs; + EVCardAttribute *attr = NULL; gint n_found = 0; for (attrs = e_vcard_get_attributes (E_VCARD (contact)); attrs != NULL; attrs = attrs->next) { EVCardAttribute *attr = attrs->data; if (strcmp (e_vcard_attribute_get_name (attr), OGO_ETAG_PROPERTY) == 0) { ! if (etag) { *etag = g_strdup (e_vcard_attribute_get_value (attr)); ! n_found ++; ! } } else if (strcmp (e_vcard_attribute_get_name (attr), OGO_HREF_PROPERTY) == 0) { ! if (href) { *href = g_strdup (e_vcard_attribute_get_value (attr)); ! n_found ++; ! } } } ! /* ! if (n_found ==2 ){ ! fprintf(2,"-------------------------------\n"); ! if (attr) ! fprintf(2,"found:%d attr:%s\n",n_found,e_vcard_attribute_get_name(attr)); ! else ! fprintf(2,"found:%d with empty attr\n"); ! fprintf(2,"-------------------------------\n"); ! } ! g_assert (n_found == 2); */ } EContact * diff -C 3 -r evolution-groupdav-0.2/utils/ogo-connection.c evolution-groupdav-0.2.oj-x/utils/ogo-connection.c *** evolution-groupdav-0.2/utils/ogo-connection.c 2005-02-25 03:42:48.000000000 +0100 --- evolution-groupdav-0.2.oj-x/utils/ogo-connection.c 2005-03-25 12:29:04.000000000 +0100 *************** *** 797,807 **** char **repl_uid) { const char *header; if (repl_uid) { ! header = soup_message_get_header (msg->response_headers, ! "Repl-UID"); ! *repl_uid = g_strdup (header); } if (location) { header = soup_message_get_header (msg->response_headers, --- 797,828 ---- char **repl_uid) { const char *header; + g_print(" enter in extract put result"); + g_print("\nrepl_uid : "); + if (repl_uid) + g_print(" set"); + else + g_print(" unset"); + g_print("\nlocation : "); + if (location) + g_print(" set\n"); + else + g_print(" unset\n"); + header = soup_message_get_header (msg->response_headers, "Repl-UID"); if (repl_uid) { ! g_print(" get header for Repl-UID\n"); ! header = soup_message_get_header (msg->response_headers, "Repl-UID"); ! g_print(" get header done for Repl-UID\n"); ! if (!header || strlen(header)==0) { ! g_print(" get header for x-skyrix-newname\n"); ! header = soup_message_get_header (msg->response_headers, "x-skyrix-newname"); ! } ! if (header) { ! g_print("x-skyrix hack, newname used :%s \n",header); ! *repl_uid = g_strdup (header); ! } else ! g_print("x-skyrix hack, newname empty \n"); } if (location) { header = soup_message_get_header (msg->response_headers, *************** *** 829,835 **** setup_debug (message); http_status = soup_session_send_message (conn->priv->soup_session, message); - status = get_status_from_http_response (http_status); if (status == OGO_CONNECTION_STATUS_OK) --- 850,855 ---- *************** *** 899,905 **** soup_message_add_header (msg->request_headers, "If-None-Match", "*"); count = 1; ! do { update_unique_uri (conn, msg, slash_uri, encoded_name, &count, test_callback, user_data); setup_debug (msg); --- 919,925 ---- soup_message_add_header (msg->request_headers, "If-None-Match", "*"); count = 1; ! do { update_unique_uri (conn, msg, slash_uri, encoded_name, &count, test_callback, user_data); setup_debug (msg); *************** *** 908,914 **** if (location) *location = soup_uri_to_string (soup_message_get_uri (msg), FALSE); ! extract_put_results (msg, NULL, repl_uid); g_object_unref (msg); g_free (slash_uri); --- 928,935 ---- if (location) *location = soup_uri_to_string (soup_message_get_uri (msg), FALSE); ! ! extract_put_results (msg, location, repl_uid); g_object_unref (msg); g_free (slash_uri); --=-Yyb/7szGfzMWuPdpMR92--