revert to get ldap into it previous working state
authorPaul Mangan <paul@claws-mail.org>
Thu, 22 May 2003 20:33:58 +0000 (20:33 +0000)
committerPaul Mangan <paul@claws-mail.org>
Thu, 22 May 2003 20:33:58 +0000 (20:33 +0000)
19 files changed:
src/Makefile.am
src/addr_compl.c
src/addr_compl.h
src/addrbook.c
src/addrbook.h
src/addrcache.c
src/addrcache.h
src/addressbook.c
src/addressbook.h
src/addrindex.c
src/addrindex.h
src/addritem.c
src/addritem.h
src/editaddress.c
src/editgroup.c
src/editldap.c
src/editldap_basedn.c
src/jpilot.c
src/vcard.c

index 6499921..9b15e03 100644 (file)
@@ -35,10 +35,8 @@ sylpheed_SOURCES = \
        addr_compl.c addr_compl.h \
        addressitem.h \
        adbookbase.h \
-       addrquery.h \
        addritem.c addritem.h \
        addrcache.c addrcache.h \
-       addrcindex.c addrcindex.h \
        addrclip.c addrclip.h \
        addrselect.c addrselect.h \
        addrbook.c addrbook.h \
@@ -52,10 +50,6 @@ sylpheed_SOURCES = \
        importpine.c importpine.h \
        jpilot.c jpilot.h \
        syldap.c syldap.h \
-       ldapserver.c ldapserver.h \
-       ldapctrl.c ldapctrl.h \
-       ldapquery.c ldapquery.h \
-       ldaputil.c ldaputil.h \
        editbook.c editbook.h \
        editgroup.c editgroup.h \
        editaddress.c editaddress.h \
index f11f4b9..f035c85 100644 (file)
@@ -187,22 +187,6 @@ static void read_address_book(void) {
        g_completion_list = g_list_reverse(g_completion_list);
 }
 
-/* should clear up anything after complete_address() */
-void clear_completion_cache(void)
-{
-       if (is_completion_pending()) {
-               if (g_completion_prefix)
-                       g_free(g_completion_prefix);
-
-               if (g_completion_addresses) {
-                       g_slist_free(g_completion_addresses);
-                       g_completion_addresses = NULL;
-               }
-
-               g_completion_count = g_completion_next = 0;
-       }
-}
-
 /* start_address_completion() - returns the number of addresses 
  * that should be matched for completion.
  */
@@ -430,6 +414,22 @@ guint get_completion_count(void)
                return 0;
 }
 
+/* should clear up anything after complete_address() */
+void clear_completion_cache(void)
+{
+       if (is_completion_pending()) {
+               if (g_completion_prefix)
+                       g_free(g_completion_prefix);
+
+               if (g_completion_addresses) {
+                       g_slist_free(g_completion_addresses);
+                       g_completion_addresses = NULL;
+               }
+
+               g_completion_count = g_completion_next = 0;
+       }
+}
+
 gboolean is_completion_pending(void)
 {
        /* check if completion pending, i.e. we might satisfy a request for the next
index fcb65a4..7439cc9 100644 (file)
 #define __ADDR_COMPL_H__
 
 gint start_address_completion          (void);
-guint complete_address                 (const gchar *str);
-gchar *get_complete_address            (gint        index);
+gint invalidate_address_completion     (void);
+
+guint complete_address                 (const gchar    *str);
+
+gchar *get_address_from_edit           (GtkEntry       *entry,
+                                        gint           *start_pos);
+void replace_address_in_edit           (GtkEntry       *entry,
+                                        const gchar    *newtext,
+                                        gint            start_pos);
+
+gchar *get_complete_address            (gint            index);
+
+gchar *get_next_complete_address       (void);
+gchar *get_prev_complete_address       (void);
+guint get_completion_count             (void);
+
+gboolean is_completion_pending         (void);
+
+void clear_completion_cache            (void);
+
 gint end_address_completion            (void);
 
 /* ui functions */
-void address_completion_start          (GtkWidget *mainwindow);
-void address_completion_register_entry (GtkEntry  *entry);
-void address_completion_unregister_entry(GtkEntry  *entry);
-void address_completion_end            (GtkWidget *mainwindow);
 
-void addrcompl_initialize      ( void );
-void addrcompl_teardown                ( void );
+void address_completion_start  (GtkWidget *mainwindow);
+void address_completion_register_entry (GtkEntry *entry);
+void address_completion_unregister_entry (GtkEntry *entry);
+void address_completion_end    (GtkWidget *mainwindow);
 
 #endif /* __ADDR_COMPL_H__ */
index 909568d..839ee55 100644 (file)
@@ -61,10 +61,6 @@ AddressBookFile *addrbook_create_book()
        book->tempList = NULL;
        book->tempHash = NULL;
        book->addressCache->modified = TRUE;
-
-       /* We want to use an address completion index */
-       addrcache_use_index( book->addressCache, TRUE );
-
        return book;
 }
 
@@ -192,6 +188,7 @@ void addrbook_free_book(AddressBookFile *book)
        g_return_if_fail(book != NULL);
 
        /* Clear cache */
+       addrcache_clear(book->addressCache);
        addrcache_free(book->addressCache);
 
        /* Free up internal objects */
@@ -511,22 +508,17 @@ static void addrbook_parse_member(AddressBookFile *book, XMLFile *file,
 {
        GList *attr;
        gchar *name, *value;
-       gchar *eid = NULL;
-       /* gchar *pid = NULL; */
+       gchar *pid = NULL, *eid = NULL;
        ItemEMail *email = NULL;
 
        attr = xml_get_current_tag_attr(file);
        while (attr) {
                name = ((XMLAttr *)attr->data)->name;
                value = ((XMLAttr *)attr->data)->value;
-               /*
                if (strcmp(name, AB_ATTAG_PID) == 0)
                        pid = g_strdup(value);
                else if (strcmp(name, AB_ATTAG_EID) == 0)
                        eid = g_strdup(value);
-               */
-               if( strcmp( name, AB_ATTAG_EID ) == 0 )
-                       eid = g_strdup( value );
                attr = g_list_next(attr);
        }
        /* email = addrcache_get_email( book->addressCache, pid, eid ); */
@@ -883,9 +875,6 @@ gint addrbook_read_data(AddressBookFile *book)
                book->addressCache->modified = FALSE;
                book->addressCache->dataRead = TRUE;
                addrcache_set_dirty(book->addressCache, FALSE);
-
-               /* Build address completion index */
-               addrcache_build_index( book->addressCache );
        }
        return book->retVal;
 }
@@ -1976,36 +1965,27 @@ GList *addrbook_get_all_persons(AddressBookFile *book)
        return addrcache_get_all_persons(book->addressCache);
 }
 
-/**
- * Add person and address data to address book.
- * \param  book    Address book.
- * \param  folder  Folder where to add person, or NULL for root folder.
- * \param  name    Common name.
- * \param  address EMail address.
- * \param  remarks Remarks.
- * \return Person added. Do not <b>*NOT*</b> to use the
- *         <code>addrbook_free_xxx()</code> functions... this will destroy
- *         the address book data.
- */
+/* Add person and address data to address book.
+   Enter: book      Address book.
+          folder    Folder where to add person, or NULL for root folder.
+          name      Common name.
+          address   EMail address.
+          remarks   Remarks.
+   Return: Person added. Do not *NOT* to use the addrbook_free_xxx() functions...
+   this will destroy the address book data */
 ItemPerson *addrbook_add_contact(AddressBookFile *book, ItemFolder *folder, 
                                 const gchar *name,const gchar *address, 
                                 const gchar *remarks)
 {
-       ItemPerson *person;
-
        g_return_val_if_fail(book != NULL, NULL);
-       person = addrcache_add_contact(
-                       book->addressCache, folder, name, address, remarks );
-       addrcache_invalidate( book->addressCache );
-       return person;
+       return addrcache_add_contact(book->addressCache, folder, name, address, 
+                                    remarks);
 }
 
-/**
- * Return file name for next address book file.
- * \param  book Address book.
- * \return File name, or <i>NULL</i> if could not create. This should be
- *         <code>g_free()</code> when done.
- */
+/* Return file name for next address book file.
+   Enter:  book Address book.
+   Return: File name, or NULL if could not create. This should be g_free()
+           when done */
 gchar *addrbook_guess_next_file(AddressBookFile *book)
 {
        gchar *newFile = NULL;
@@ -2020,18 +2000,3 @@ gchar *addrbook_guess_next_file(AddressBookFile *book)
        fileList = NULL;
        return newFile;
 }
-
-/**
- * Invalidate the address book data. This will cause index to be rebuilt.
- * \param book Address book.
- */
-void addrbook_invalidate( AddressBookFile *book ) {
-       g_return_if_fail( book != NULL );
-       addrcache_invalidate( book->addressCache );
-}
-
-/*
-* End of Source.
-*/
-
-
index deae50c..84d8cd3 100644 (file)
@@ -115,6 +115,5 @@ ItemPerson *addrbook_add_contact    ( AddressBookFile *book, ItemFolder *folder,
                                          const gchar *remarks );
 
 gchar *addrbook_guess_next_file                ( AddressBookFile *book );
-void addrbook_invalidate               ( AddressBookFile *book );
 
 #endif /* __ADDRBOOK_H__ */
index 97326e1..1edf82a 100644 (file)
@@ -50,7 +50,7 @@ static int addrcache_next_cache_id() {
 /*
 * Create new address cache.
 */
-AddressCache *addrcache_create(void) {
+AddressCache *addrcache_create() {
        AddressCache *cache;
        gint t;
 
@@ -76,9 +76,6 @@ AddressCache *addrcache_create(void) {
        cache->rootFolder = addritem_create_item_folder();
        cache->rootFolder->isRoot = TRUE;
        ADDRITEM_PARENT(cache->rootFolder) = NULL;
-
-       cache->searchIndex = NULL;
-
        return cache;
 }
 
@@ -220,9 +217,7 @@ static void addrcache_free_all_folders( ItemFolder *parent ) {
 void addrcache_clear( AddressCache *cache ) {
        g_return_if_fail( cache != NULL );
 
-       /* Clear completion index */
-       addrcindex_clear( cache->searchIndex );
-
+       /* printf( "...addrcache_clear :%s:\n", cache->name ); */
        /* Free up folders and hash table */
        addrcache_free_all_folders( cache->rootFolder );
        addrcache_free_item_hash( cache->itemHash );
@@ -249,10 +244,6 @@ void addrcache_clear( AddressCache *cache ) {
 void addrcache_free( AddressCache *cache ) {
        g_return_if_fail( cache != NULL );
 
-       /* Free completion index */
-       addrcindex_free( cache->searchIndex );
-       cache->searchIndex = NULL;
-
        cache->dirtyFlag = FALSE;
        addrcache_free_all_folders( cache->rootFolder );
        addrcache_free_item_hash( cache->itemHash );
@@ -267,7 +258,6 @@ void addrcache_free( AddressCache *cache ) {
        cache->cacheID = NULL;
        g_free( cache->name );
        cache->name = NULL;
-
        g_free( cache );
 }
 
@@ -1374,84 +1364,6 @@ ItemPerson *addrcache_add_contact( AddressCache *cache, ItemFolder *folder, cons
        return person;
 }
 
-/**
- * Clear address completion index.
- * \param cache Cache.
- */
-void addrcache_clear_index( AddressCache *cache ) {
-       g_return_if_fail( cache != NULL );
-       addrcindex_clear( cache->searchIndex );
-}
-
-/**
- * Control creation of an address completion index.
- * \param cache Cache.
- * \param value Set to <i>TRUE</i> to create an index, or <i>FALSE</i> to
- *              destroy index.
- */
-void addrcache_use_index( AddressCache *cache, gboolean value ) {
-       g_return_if_fail( cache != NULL );
-
-       if( value ) {
-               if( cache->searchIndex ) {
-                       addrcindex_clear( cache->searchIndex );
-               }
-               else {
-                       cache->searchIndex = addrcindex_create();
-               }
-       }
-       else {
-               addrcindex_free( cache->searchIndex );
-               cache->searchIndex = NULL;
-       }
-}
-
-/*
- * Load completion callback function.
- */
-static void addrcache_load_index_cb( gpointer key, gpointer value, gpointer data ) {
-       AddrItemObject *obj = ( AddrItemObject * ) value;
-
-       if( ADDRITEM_TYPE(obj) == ITEMTYPE_PERSON ) {
-               ItemPerson *person = ( ItemPerson * ) obj;
-               AddrCacheIndex *index = data;
-               addrcindex_add_person( index, person );
-       }
-}
-
-/**
- * Rebuild address completion index with all persons in cache.
- * \param cache Cache.
- */
-void addrcache_build_index( AddressCache *cache ) {
-       g_return_if_fail( cache != NULL );
-
-       if( cache->searchIndex == NULL ) return;
-
-       /* Clear index */
-       addrcindex_clear( cache->searchIndex );
-
-       /* Now load up */       
-       g_hash_table_foreach(
-               cache->itemHash, addrcache_load_index_cb, cache->searchIndex );
-       addrcindex_validate( cache->searchIndex );
-
-       /* addrcindex_print( cache->searchIndex, stdout ); */
-}
-
-/**
- * Invalidate the address cache. This will cause index to be rebuilt.
- * \param cache Cache.
- */
-void addrcache_invalidate( AddressCache *cache ) {
-       g_return_if_fail( cache != NULL );
-
-       if( cache->searchIndex == NULL ) return;
-       addrcindex_invalidate( cache->searchIndex );
-}
-
 /*
 * End of Source.
 */
-
-
index 41b287d..951a306 100644 (file)
@@ -28,7 +28,6 @@
 #include <stdio.h>
 #include <glib.h>
 #include "addritem.h"
-#include "addrcindex.h"
 
 /* Address cache */
 typedef struct _AddressCache AddressCache;
@@ -45,7 +44,6 @@ struct _AddressCache {
        gboolean   dirtyFlag;
        gboolean   accessFlag;
        gchar      *name;
-       AddrCacheIndex *searchIndex;
 };
 
 /* Function prototypes */
@@ -172,10 +170,4 @@ ItemPerson *addrcache_add_contact  ( AddressCache *cache,
                                          const gchar *address,
                                          const gchar *remarks ); 
 
-void addrcache_clear_index     ( AddressCache *cache );
-void addrcache_create_index    ( AddressCache *cache,
-                                 gboolean value );
-void addrcache_build_index     ( AddressCache *cache );
-void addrcache_invalidate      ( AddressCache *cache );
-
 #endif /* __ADDRCACHE_H__ */
index 8d5bdc2..608b801 100644 (file)
@@ -85,7 +85,7 @@
 
 #ifdef USE_LDAP
 #include <pthread.h>
-#include "ldapserver.h"
+#include "syldap.h"
 #include "editldap.h"
 
 #define ADDRESSBOOK_LDAP_BUSYMSG "Busy"
@@ -313,7 +313,7 @@ static void addressbook_folder_remove_node  (GtkCTree *clist,
                                                 GtkCTreeNode *node);
 
 #ifdef USE_LDAP
-static void addressbook_ldap_show_message      ( LdapServer *server );
+static void addressbook_ldap_show_message      (SyldapServer *server);
 #endif
 
 /* LUT's and IF stuff */
@@ -2484,11 +2484,9 @@ static void addressbook_load_group( GtkCTree *clist, ItemGroup *itemGroup ) {
        }
 }
 
-static void addressbook_folder_load_one_person(
-               GtkCTree *clist, ItemPerson *person,
-               AddressTypeControlItem *atci,
-               AddressTypeControlItem *atciMail )
-{
+static void addressbook_folder_load_one_person( GtkCTree *clist, ItemPerson *person,  
+                                               AddressTypeControlItem *atci, AddressTypeControlItem *atciMail) {
+       
        GtkCTreeNode *nodePerson = NULL;
        GtkCTreeNode *nodeEMail = NULL;
        gchar *text[N_COLS];
@@ -2580,10 +2578,8 @@ static void addressbook_folder_remove_node( GtkCTree *clist, GtkCTreeNode *node
        addrbook.listSelected = NULL;
        gtk_ctree_remove_node( clist, node );
        addressbook_menubar_set_sensitive( FALSE );
-       addressbook_menuitem_set_sensitive(
-               gtk_ctree_node_get_row_data(
-                       GTK_CTREE(clist), addrbook.treeSelected ),
-               addrbook.treeSelected );
+       addressbook_menuitem_set_sensitive( gtk_ctree_node_get_row_data( 
+                                               GTK_CTREE(clist), addrbook.treeSelected ), addrbook.treeSelected );
 }
 
 static void addressbook_folder_refresh_one_person( GtkCTree *clist, ItemPerson *person ) {
@@ -2793,10 +2789,8 @@ static void addressbook_set_clist( AddressObject *obj ) {
                        /* Load root folder */
                        ItemFolder *rootFolder = NULL;
                        rootFolder = addrindex_ds_get_root_folder( ds );
-                       addressbook_folder_load_person(
-                               ctreelist, addrindex_ds_get_root_folder( ds ) );
-                       addressbook_folder_load_group(
-                               ctreelist, addrindex_ds_get_root_folder( ds ) );
+                       addressbook_folder_load_person( ctreelist, addrindex_ds_get_root_folder( ds ) );
+                       addressbook_folder_load_group( ctreelist, addrindex_ds_get_root_folder( ds ) );
                }
        }
        else {
@@ -2861,8 +2855,7 @@ AdapterDSource *addressbook_create_ds_adapter( AddressDataSource *ds,
 }
 
 void addressbook_ads_set_name( AdapterDSource *adapter, gchar *value ) {
-       ADDRESS_OBJECT_NAME(adapter) =
-               mgu_replace_string( ADDRESS_OBJECT_NAME(adapter), value );
+       ADDRESS_OBJECT_NAME(adapter) = mgu_replace_string( ADDRESS_OBJECT_NAME(adapter), value );
 }
 
 /*
@@ -2893,10 +2886,8 @@ static void addressbook_load_tree( void ) {
                                        ds = nodeDS->data;
                                        newNode = NULL;
                                        name = addrindex_ds_get_name( ds );
-                                       ads = addressbook_create_ds_adapter(
-                                                       ds, atci->objectType, name );
-                                       newNode = addressbook_add_object(
-                                                       node, ADDRESS_OBJECT(ads) );
+                                       ads = addressbook_create_ds_adapter( ds, atci->objectType, name );
+                                       newNode = addressbook_add_object( node, ADDRESS_OBJECT(ads) );
                                        nodeDS = g_list_next( nodeDS );
                                }
                                gtk_ctree_expand( ctree, node );
@@ -3121,8 +3112,7 @@ static GtkCTreeNode *addressbook_node_add_group( GtkCTreeNode *node, AddressData
 * Return: Inserted node.
 */
 static GtkCTreeNode *addressbook_node_add_folder(
-               GtkCTreeNode *node, AddressDataSource *ds,
-               ItemFolder *itemFolder, AddressObjectType otype )
+               GtkCTreeNode *node, AddressDataSource *ds, ItemFolder *itemFolder, AddressObjectType otype )
 {
        GtkCTree *ctree = GTK_CTREE(addrbook.ctree);
        GtkCTreeNode *newNode = NULL;
@@ -3323,36 +3313,43 @@ static void addressbook_new_ldap_cb( gpointer data, guint action, GtkWidget *wid
        }
 }
 
-static void addressbook_ldap_show_message( LdapServer *svr ) {
+static void addressbook_ldap_show_message( SyldapServer *svr ) {
        gchar *name;
        gchar *desc;
        *addressbook_msgbuf = '\0';
        if( svr ) {
-               name = ldapsvr_get_name( svr );
-               if( svr->retVal == MGU_SUCCESS ) {
+               name = syldap_get_name( svr );
+               if( svr->busyFlag ) {
                        g_snprintf( addressbook_msgbuf,
-                                   sizeof(addressbook_msgbuf), "%s",
-                                   name );
+                                   sizeof(addressbook_msgbuf), "%s: %s", name,
+                                   ADDRESSBOOK_LDAP_BUSYMSG );
                }
                else {
-                       desc = addressbook_err2string(
-                                       _lutErrorsLDAP_, svr->retVal );
-                       g_snprintf( addressbook_msgbuf,
-                                   sizeof(addressbook_msgbuf),
-                                   "%s: %s", name, desc );
+                       if( svr->retVal == MGU_SUCCESS ) {
+                               g_snprintf( addressbook_msgbuf,
+                                           sizeof(addressbook_msgbuf), "%s",
+                                           name );
+                       }
+                       else {
+                               desc = addressbook_err2string(
+                                               _lutErrorsLDAP_, svr->retVal );
+                               g_snprintf( addressbook_msgbuf,
+                                           sizeof(addressbook_msgbuf),
+                                           "%s: %s", name, desc );
+                       }
                }
        }
        addressbook_status_show( addressbook_msgbuf );
 }
 
-static void addressbook_ldap_show_results( LdapServer *server ) {
+static void addressbook_ldap_show_results( SyldapServer *sls ) {
        GtkCTree *ctree = GTK_CTREE(addrbook.ctree);
        AddressObject *obj;
        AdapterDSource *ads = NULL;
        AddressDataSource *ds = NULL;
        AddressInterface *iface = NULL;
 
-       if( server == NULL ) return;
+       if( sls == NULL ) return;
        if( ! addrbook.treeSelected ) return;
        if( GTK_CTREE_ROW( addrbook.treeSelected )->level == 1 ) return;
 
@@ -3361,18 +3358,18 @@ static void addressbook_ldap_show_results( LdapServer *server ) {
        if( obj->type == ADDR_DATASOURCE ) {
                ads = ADAPTER_DSOURCE(obj);
                if( ads->subType == ADDR_LDAP ) {
-                       LdapServer *ldapSvr;
+                       SyldapServer *server;
 
                        ds = ads->dataSource;
                        if( ds == NULL ) return;
                        iface = ds->interface;
                        if( ! iface->haveLibrary ) return;
                        server = ds->rawDataSource;
-                       if( ldapSvr == server ) {
+                       if( server == sls ) {
                                /* Read from cache */
                                gtk_widget_show_all(addrbook.window);
                                addressbook_set_clist( obj );
-                               addressbook_ldap_show_message( server );
+                               addressbook_ldap_show_message( sls );
                                gtk_widget_show_all(addrbook.window);
                                gtk_entry_set_text( GTK_ENTRY(addrbook.entry), "" );
                        }
@@ -3380,27 +3377,24 @@ static void addressbook_ldap_show_results( LdapServer *server ) {
        }
 }
 
-static gint _idleID_ = 0;
-static gchar *_tempMessage_ = "Busy searching LDAP...";
-
 /*
  * LDAP idle function. This function is called during UI idle time while
  * an LDAP search is in progress.
  * Enter: data Reference to LDAP server object.
  */
 static void addressbook_ldap_idle( gpointer data ) {
-}
+       SyldapServer *server;
 
-/*
- * LDAP search completion function.
- */
-static void addressbook_ldap_idle_end( void ) {
-       /* Server has completed search - remove from idle list */
-       printf( "addressbook_ldap_idle_end... completed" );
-       if( _idleID_ != 0 ) {
-               gtk_idle_remove( _idleID_ );
+       server = ( SyldapServer * ) data;       
+       if( ! server->busyFlag ) {
+               /* Server has completed search - remove from idle list */
+               gtk_idle_remove( server->idleId );
+
+               /* Process callback and free up the thread */
+               addressbook_ldap_show_results( server );
+               g_free( server->thread );
+               server->thread = NULL;
        }
-       _idleID_ = 0;
 }
 
 /*
@@ -3411,26 +3405,21 @@ static void addressbook_ldap_idle_end( void ) {
 static void addressbook_ldap_lookup( AdapterDSource *ads, gchar *sLookup ) {
        AddressDataSource *ds = NULL;
        AddressInterface *iface = NULL;
-       LdapServer *server;
+       SyldapServer *server;
 
-       printf( "addressbook_ldap_lookup/Searching for '%s'\n", sLookup );
        ds = ads->dataSource;
        if( ds == NULL ) return;
        iface = ds->interface;
        if( ! iface->haveLibrary ) return;
        server = ds->rawDataSource;
        if( server ) {
-               printf( "addressbook_ldap_lookup/Starting.../1\n" );
+               syldap_cancel_read( server );
                if( *sLookup == '\0' || strlen( sLookup ) < 1 ) return;
-
-               /* Setup a query */
-               printf( "addressbook_ldap_lookup/Starting.../2\n" );
-
-               /* Sit back and wait for something to happen */
-               _idleID_ = gtk_idle_add(
-                       ( GtkFunction ) addressbook_ldap_idle, NULL );
-               addrindex_search_ldap_noid( server, sLookup, addressbook_ldap_idle_end  );
-               addressbook_status_show( _tempMessage_ );
+               syldap_set_search_value( server, sLookup );
+               server->idleId = gtk_idle_add(
+                       ( GtkFunction ) addressbook_ldap_idle, server );
+               syldap_read_data_th( server );
+               addressbook_ldap_show_message( server );
        }
 }
 #endif
index ddd0a29..d78f79a 100644 (file)
 #include <gtk/gtkwidget.h>
 
 #include "compose.h"
-#include "addrquery.h"
-#include "addritem.h"
 
-void addressbook_open                  ( Compose *target );
-void addressbook_set_target_compose    ( Compose *target );
-Compose *addressbook_get_target_compose        ( void );
-void addressbook_read_file             ( void );
-void addressbook_export_to_file                ( void );
-gint addressbook_obj_name_compare      ( gconstpointer a,
-                                         gconstpointer b );
+void addressbook_open                  (Compose        *target);
+void addressbook_set_target_compose    (Compose        *target);
+Compose *addressbook_get_target_compose        (void);
+void addressbook_read_file             (void);
+void addressbook_export_to_file                (void);
+gint addressbook_obj_name_compare      (gconstpointer   a,
+                                        gconstpointer   b);
 void addressbook_destroy               ( void );
 
-gboolean addressbook_add_contact       ( const gchar *name,
-                                         const gchar *address,
-                                         const gchar *remarks );
-                                         
-gboolean addressbook_load_completion   (gint (*callBackFunc) 
-                                              (const gchar *, 
-                                               const gchar *, 
-                                               const gchar *));
+gboolean addressbook_add_contact       ( const gchar   *name,
+                                         const gchar   *address,
+                                         const gchar   *remarks );
+
+gboolean addressbook_load_completion   ( gint (*callBackFunc) ( const gchar *, const gchar *, const gchar * ) );
 
 void addressbook_gather                        ( FolderItem *folderItem,
                                          gboolean sourceInd,
                                          GList *msgList );
-void addressbook_harvest               ( FolderItem *folderItem,
-                                         gboolean sourceInd,
-                                         GList *msgList);
-
-gint addressbook_setup_search          ( const gchar *searchTerm,
-                                         const gpointer target,
-                                         AddrSearchCallbackFunc callback );
-gboolean addressbook_start_search      ( const gint queryID );
-void addressbook_stop_search           ( const gint queryID );
-
-void addressbook_read_all              ( void );
-GList *addressbook_quick_search_list   ( const gchar *searchTerm );
-ItemEMail *addressbook_quick_search_single( const gchar *searchTerm );
-gchar *addressbook_lookup_name         ( const gchar *address );
+void addressbook_harvest               (FolderItem     *folderItem,
+                                        gboolean sourceInd,
+                                        GList *msgList);
 
 #endif /* __ADDRESSBOOK_H__ */
 
index b2c3e2a..f2dd845 100644 (file)
@@ -36,7 +36,6 @@
 #include "addrbook.h"
 #include "addrindex.h"
 #include "xml.h"
-#include "addrquery.h"
 
 #ifndef DEV_STANDALONE
 #include "prefs_gtk.h"
@@ -50,9 +49,7 @@
 #endif
 
 #ifdef USE_LDAP
-#include "ldapserver.h"
-#include "ldapctrl.h"
-#include "ldapquery.h"
+#include "syldap.h"
 #endif
 
 #define TAG_ADDRESS_INDEX    "addressbook"
 #define ATTAG_LDAP_CRITERIA   "criteria"
 #define ATTAG_LDAP_MAX_ENTRY  "max-entry"
 #define ATTAG_LDAP_TIMEOUT    "timeout"
-#define ATTAG_LDAP_MAX_AGE    "max-age"
-#define ATTAG_LDAP_DYN_SEARCH "dyn-search"
-
-#define ELTAG_LDAP_ATTR_SRCH  "attribute"
-#define ATTAG_LDAP_ATTR_NAME  "name"
-
-/* New attributes */
-#define ATTAG_LDAP_DEFAULT    "default"
 
 #if 0
 N_("Common address")
@@ -115,9 +104,6 @@ N_("Personal address")
 #define DISP_OLD_COMMON       _("Common address")
 #define DISP_OLD_PERSONAL     _("Personal address")
 
-/*
- * Define attribute name-value pair.
- */
 typedef struct _AddressIfAttr AddressIfAttrib;
 struct _AddressIfAttr {
        gchar *name;
@@ -125,27 +111,9 @@ struct _AddressIfAttr {
 };
 
 /*
- * Define DOM fragment.
- */
-typedef struct _AddressIfFrag AddressIfFragment;
-struct _AddressIfFrag {
-       gchar *name;
-       GList *children;
-       GList *attributes;
-};
-
-/**
- * Build interface with default values.
- *
- * \param type Interface type.
- * \param name Interface name.
- * \param tagIf XML tag name for interface in address index file.
- * \param tagDS XML tag name for datasource in address index file.
- * \return Address interface object.
+* Build interface with default values.
 */
-static AddressInterface *addrindex_create_interface(
-               gint type, gchar *name, gchar *tagIf, gchar *tagDS )
-{
+static AddressInterface *addrindex_create_interface( gint type, gchar *name, gchar *tagIf, gchar *tagDS ) {
        AddressInterface *iface = g_new0( AddressInterface, 1 );
 
        ADDRITEM_TYPE(iface) = ITEMTYPE_INTERFACE;
@@ -161,8 +129,6 @@ static AddressInterface *addrindex_create_interface(
        iface->haveLibrary = TRUE;
        iface->useInterface = TRUE;
        iface->readOnly      = TRUE;
-
-       /* Set callbacks to NULL values - override for each interface */
        iface->getAccessFlag = NULL;
        iface->getModifyFlag = NULL;
        iface->getReadFlag   = NULL;
@@ -175,27 +141,16 @@ static AddressInterface *addrindex_create_interface(
        iface->getAllGroups  = NULL;
        iface->getName       = NULL;
        iface->listSource = NULL;
-
-       /* Search stuff */
-       iface->externalQuery = FALSE;
-       iface->searchOrder = 0;         /* Ignored */
-       iface->startSearch = NULL;
-       iface->stopSearch = NULL;
-
        return iface;
 }
 
-/**
- * Build table of of all address book interfaces.
- * \param addrIndex Address index object.
- */
+/*
+* Build table of interfaces.
+*/
 static void addrindex_build_if_list( AddressIndex *addrIndex ) {
        AddressInterface *iface;
 
-       /* Create intrinsic XML address book interface */
-       iface = addrindex_create_interface(
-                       ADDR_IF_BOOK, "Address Book", TAG_IF_ADDRESS_BOOK,
-                       TAG_DS_ADDRESS_BOOK );
+       iface = addrindex_create_interface( ADDR_IF_BOOK, "Address Book", TAG_IF_ADDRESS_BOOK, TAG_DS_ADDRESS_BOOK );
        iface->readOnly      = FALSE;
        iface->getModifyFlag = ( void * ) addrbook_get_modified;
        iface->getAccessFlag = ( void * ) addrbook_get_accessed;
@@ -208,16 +163,10 @@ static void addrindex_build_if_list( AddressIndex *addrIndex ) {
        iface->getAllPersons = ( void * ) addrbook_get_all_persons;
        iface->getName       = ( void * ) addrbook_get_name;
        iface->setAccessFlag = ( void * ) addrbook_set_accessed;
-       iface->searchOrder   = 2;
-
-       /* Add to list of interfaces in address book */ 
-       addrIndex->interfaceList =
-               g_list_append( addrIndex->interfaceList, iface );
+       addrIndex->interfaceList = g_list_append( addrIndex->interfaceList, iface );
        ADDRITEM_PARENT(iface) = ADDRITEM_OBJECT(addrIndex);
 
-       /* Create vCard interface */
-       iface = addrindex_create_interface(
-                       ADDR_IF_VCARD, "vCard", TAG_IF_VCARD, TAG_DS_VCARD );
+       iface = addrindex_create_interface( ADDR_IF_VCARD, "vCard", TAG_IF_VCARD, TAG_DS_VCARD );
        iface->getModifyFlag = ( void * ) vcard_get_modified;
        iface->getAccessFlag = ( void * ) vcard_get_accessed;
        iface->getReadFlag   = ( void * ) vcard_get_read_flag;
@@ -229,15 +178,10 @@ static void addrindex_build_if_list( AddressIndex *addrIndex ) {
        iface->getAllPersons = ( void * ) vcard_get_all_persons;
        iface->getName       = ( void * ) vcard_get_name;
        iface->setAccessFlag = ( void * ) vcard_set_accessed;
-       iface->searchOrder   = 3;
-       addrIndex->interfaceList =
-               g_list_append( addrIndex->interfaceList, iface );
+       addrIndex->interfaceList = g_list_append( addrIndex->interfaceList, iface );
        ADDRITEM_PARENT(iface) = ADDRITEM_OBJECT(addrIndex);
 
-       /* Create JPilot interface */
-       iface = addrindex_create_interface(
-                       ADDR_IF_JPILOT, "J-Pilot", TAG_IF_JPILOT,
-                       TAG_DS_JPILOT );
+       iface = addrindex_create_interface( ADDR_IF_JPILOT, "J-Pilot", TAG_IF_JPILOT, TAG_DS_JPILOT );
 #ifdef USE_JPILOT
        iface->haveLibrary = jpilot_test_pilot_lib();
        iface->useInterface = iface->haveLibrary;
@@ -252,103 +196,72 @@ static void addrindex_build_if_list( AddressIndex *addrIndex ) {
        iface->getAllPersons = ( void * ) jpilot_get_all_persons;
        iface->getName       = ( void * ) jpilot_get_name;
        iface->setAccessFlag = ( void * ) jpilot_set_accessed;
-       iface->searchOrder   = 3;
 #else
        iface->useInterface = FALSE;
        iface->haveLibrary = FALSE;
 #endif
-       addrIndex->interfaceList =
-               g_list_append( addrIndex->interfaceList, iface );
+       addrIndex->interfaceList = g_list_append( addrIndex->interfaceList, iface );
        ADDRITEM_PARENT(iface) = ADDRITEM_OBJECT(addrIndex);
 
-       /* Create LDAP interface */
-       iface = addrindex_create_interface(
-                       ADDR_IF_LDAP, "LDAP", TAG_IF_LDAP, TAG_DS_LDAP );
+       iface = addrindex_create_interface( ADDR_IF_LDAP, "LDAP", TAG_IF_LDAP, TAG_DS_LDAP );
 #ifdef USE_LDAP
-       /* iface->haveLibrary = ldapsvr_test_ldap_lib(); */
-       iface->haveLibrary = ldaputil_test_ldap_lib();
+       iface->haveLibrary = syldap_test_ldap_lib();
        iface->useInterface = iface->haveLibrary;
-       /* iface->getModifyFlag = ( void * ) ldapsvr_get_modified; */
-       iface->getAccessFlag = ( void * ) ldapsvr_get_accessed;
-       /* iface->getReadFlag   = ( void * ) ldapsvr_get_read_flag; */
-       iface->getStatusCode = ( void * ) ldapsvr_get_status;
-       /* iface->getReadData   = ( void * ) ldapsvr_read_data; */
-       iface->getRootFolder = ( void * ) ldapsvr_get_root_folder;
-       iface->getListFolder = ( void * ) ldapsvr_get_list_folder;
-       iface->getListPerson = ( void * ) ldapsvr_get_list_person;
-       iface->getName       = ( void * ) ldapsvr_get_name;
-       iface->setAccessFlag = ( void * ) ldapsvr_set_accessed;
-       iface->externalQuery = TRUE;
-       iface->searchOrder   = 1;
+       iface->getAccessFlag = ( void * ) syldap_get_accessed;
+       /* iface->getModifyFlag = ( void * ) syldap_get_modified; */
+       /* iface->getReadFlag   = ( void * ) syldap_get_read_flag; */
+       iface->getStatusCode = ( void * ) syldap_get_status;
+       iface->getReadData   = ( void * ) syldap_read_data;
+       iface->getRootFolder = ( void * ) syldap_get_root_folder;
+       iface->getListFolder = ( void * ) syldap_get_list_folder;
+       iface->getListPerson = ( void * ) syldap_get_list_person;
+       iface->getName       = ( void * ) syldap_get_name;
+       iface->setAccessFlag = ( void * ) syldap_set_accessed;
 #else
        iface->useInterface = FALSE;
        iface->haveLibrary = FALSE;
 #endif
-       addrIndex->interfaceList =
-               g_list_append( addrIndex->interfaceList, iface );
+       addrIndex->interfaceList = g_list_append( addrIndex->interfaceList, iface );
        ADDRITEM_PARENT(iface) = ADDRITEM_OBJECT(addrIndex);
 
-       /* Two old legacy data sources (pre 0.7.0) */
+       /* Two old legacy data sources */
        iface = addrindex_create_interface(
                        ADDR_IF_COMMON, "Old Address - common",
                        TAG_IF_OLD_COMMON, NULL );
        iface->legacyFlag = TRUE;
-       addrIndex->interfaceList =
-               g_list_append( addrIndex->interfaceList, iface );
+       addrIndex->interfaceList = g_list_append( addrIndex->interfaceList, iface );
        ADDRITEM_PARENT(iface) = ADDRITEM_OBJECT(addrIndex);
 
        iface = addrindex_create_interface(
                        ADDR_IF_COMMON, "Old Address - personal",
                        TAG_IF_OLD_PERSONAL, NULL );
        iface->legacyFlag = TRUE;
-       addrIndex->interfaceList =
-               g_list_append( addrIndex->interfaceList, iface );
+       addrIndex->interfaceList = g_list_append( addrIndex->interfaceList, iface );
        ADDRITEM_PARENT(iface) = ADDRITEM_OBJECT(addrIndex);
 
 }
 
-/**
- * Free DOM fragment.
- * \param fragment Fragment to free.
- */
-static addrindex_free_fragment( AddressIfFragment *fragment ) {
-       GList *node;
-
-       /* Free children */
-       node = fragment->children;
-       while( node ) {
-               AddressIfFragment *child = node->data;
-               addrindex_free_fragment( child );
-               node->data = NULL;
-               node = g_list_next( node );
-       }
-       g_list_free( fragment->children );
-
-       /* Free attributes */
-       node = fragment->attributes;
+/*
+* Free name-value pairs.
+*/
+static void addrindex_free_attributes( GList *list ) {
+       GList *node = list;
        while( node ) {
                AddressIfAttrib *nv = node->data;
-               g_free( nv->name );
-               g_free( nv->value );
+               g_free( nv->name ); nv->name = NULL;
+               g_free( nv->value ); nv->value = NULL;
                g_free( nv );
                node->data = NULL;
                node = g_list_next( node );
        }
-       g_list_free( fragment->attributes );
-
-       g_free( fragment->name );
-       fragment->name = NULL;
-       fragment->attributes = NULL;
-       fragment->children = NULL;
-
-       g_free( fragment );
+       g_list_free( list );
 }
 
-/**
- * Create a new data source.
- * \param ifType Interface type to create.
- * \return Initialized data source.
- */
+/*
+* Create new data source.
+* Enter: ifType Interface type to create.
+* Return: Initialized data source.
+*/
 AddressDataSource *addrindex_create_datasource( AddressIfType ifType ) {
        AddressDataSource *ds = g_new0( AddressDataSource, 1 );
 
@@ -363,13 +276,11 @@ AddressDataSource *addrindex_create_datasource( AddressIfType ifType ) {
        return ds;
 }
 
-/**
- * Free up data source.
- * \param ds Data source to free.
- */
+/*
+* Free up data source.
+*/
 void addrindex_free_datasource( AddressDataSource *ds ) {
        AddressInterface *iface;
-       AddressCache *cache;
 
        g_return_if_fail( ds != NULL );
 
@@ -393,18 +304,16 @@ void addrindex_free_datasource( AddressDataSource *ds ) {
 #endif
 #ifdef USE_LDAP
                                else if( iface->type == ADDR_IF_LDAP ) {
-                                       LdapServer *server = ds->rawDataSource;
-                                       cache = server->addressCache;
-                                       addrcache_use_index( cache, FALSE );
-                                       ldapsvr_free( server );
+                                       SyldapServer *server = ds->rawDataSource;
+                                       syldap_free( server );
                                }
 #endif
                                else {
                                }
                        }
                        else {
-                               AddressIfFragment *fragment = ds->rawDataSource;
-                               addrindex_free_fragment( fragment );
+                               GList *list = ds->rawDataSource;
+                               addrindex_free_attributes( list );
                        }
                }
        }
@@ -417,14 +326,9 @@ void addrindex_free_datasource( AddressDataSource *ds ) {
        ds->type = ADDR_IF_NONE;
        ds->interface = NULL;
        ds->rawDataSource = NULL;
-
        g_free( ds );
 }
 
-/**
- * Free up all data sources for specified interface.
- * \param iface Address interface to process.
- */
 static void addrindex_free_all_datasources( AddressInterface *iface ) {
        GList *node = iface->listSource;
        while( node ) {
@@ -435,10 +339,6 @@ static void addrindex_free_all_datasources( AddressInterface *iface ) {
        }
 }
 
-/**
- * Free up specified interface.
- * \param iface Interface to process.
- */
 static void addrindex_free_interface( AddressInterface *iface ) {
        /* Free up data sources */
        addrindex_free_all_datasources( iface );
@@ -466,21 +366,14 @@ static void addrindex_free_interface( AddressInterface *iface ) {
        iface->haveLibrary = FALSE;
        iface->listSource = NULL;
 
-       /* Search stuff */
-       iface->searchOrder = 0;
-       iface->startSearch = NULL;
-       iface->stopSearch = NULL;
-
        g_free( iface );
 }
 
-/**
+/*
  * Return cache ID for specified data source.
- *
- * \param  addrIndex Address index.
- * \param  ds        Data source.
- * \return ID or NULL if not found. This should be <code>g_free()</code>
- *         when done.
+ * Enter: addrIndex Address index.
+ *        ds        Data source.
+ * Return: ID or NULL if not found. This can be g_free() when done.
  */
 gchar *addrindex_get_cache_id( AddressIndex *addrIndex, AddressDataSource *ds ) {
        gchar *cacheID = NULL;
@@ -501,25 +394,23 @@ gchar *addrindex_get_cache_id( AddressIndex *addrIndex, AddressDataSource *ds )
        return cacheID;
 }
 
-/**
- * Return reference to data source for specified cacheID.
- * \param addrIndex Address index.
- * \param cacheID   ID.
- * \return Data source, or NULL if not found.
+/*
+ * Return data source for specified cacheID.
+ * Enter: addrIndex Address index.
+ *        cacheID   ID.
+ * Return: Data source, or NULL if not found.
  */
-AddressDataSource *addrindex_get_datasource(
-               AddressIndex *addrIndex, const gchar *cacheID )
-{
+AddressDataSource *addrindex_get_datasource( AddressIndex *addrIndex, const gchar *cacheID ) {
        g_return_val_if_fail( addrIndex != NULL, NULL );
        g_return_val_if_fail( cacheID != NULL, NULL );
        return ( AddressDataSource * ) g_hash_table_lookup( addrIndex->hashCache, cacheID );
 }
 
-/**
- * Return reference to address cache for specified cacheID.
- * \param addrIndex Address index.
- * \param cacheID   ID.
- * \return Address cache, or NULL if not found.
+/*
+ * Return cache for specified cacheID.
+ * Enter: addrIndex Address index.
+ *        cacheID   ID.
+ * Return: Address cache, or NULL if not found.
  */
 AddressCache *addrindex_get_cache( AddressIndex *addrIndex, const gchar *cacheID ) {
        AddressDataSource *ds;
@@ -538,14 +429,12 @@ AddressCache *addrindex_get_cache( AddressIndex *addrIndex, const gchar *cacheID
        return cache;
 }
 
-/**
- * Add data source into hash table.
- * \param addrIndex Address index.
- * \param ds        Data source.
+/*
+ * Add data source into hash.
+ * Enter: addrIndex Address index.
+ *        ds        Data source.
  */
-static void addrindex_hash_add_cache(
-               AddressIndex *addrIndex, AddressDataSource *ds )
-{
+static void addrindex_hash_add_cache( AddressIndex *addrIndex, AddressDataSource *ds ) {
        gchar *cacheID;
 
        cacheID = addrindex_get_cache_id( addrIndex, ds );
@@ -555,8 +444,8 @@ static void addrindex_hash_add_cache(
 }
 
 /*
- * Free hash table callback function.
- */
+* Free hash table callback function.
+*/
 static gboolean addrindex_free_cache_cb( gpointer key, gpointer value, gpointer data ) {
        g_free( key );
        key = NULL;
@@ -565,8 +454,8 @@ static gboolean addrindex_free_cache_cb( gpointer key, gpointer value, gpointer
 }
 
 /*
- * Free hash table of address cache items.
- */
+* Free hash table of address cache items.
+*/
 static void addrindex_free_cache_hash( GHashTable *table ) {
        g_hash_table_freeze( table );
        g_hash_table_foreach_remove( table, addrindex_free_cache_cb, NULL );
@@ -575,13 +464,9 @@ static void addrindex_free_cache_hash( GHashTable *table ) {
 }
 
 /*
- * Remove data source from internal hashtable.
- * \param addrIndex Address index.
- * \param ds        Data source to remove.
- */
-static void addrindex_hash_remove_cache(
-               AddressIndex *addrIndex, AddressDataSource *ds )
-{
+* Remove address cache for specified data source from internal hashtable.
+*/
+static void addrindex_hash_remove_cache( AddressIndex *addrIndex, AddressDataSource *ds ) {
        gchar *cacheID;
 
        cacheID = addrindex_get_cache_id( addrIndex, ds );
@@ -593,9 +478,8 @@ static void addrindex_hash_remove_cache(
 }
 
 /*
- * Create a new address index.
- * \return Initialized address index object.
- */
+* Create new object.
+*/
 AddressIndex *addrindex_create_index( void ) {
        AddressIndex *addrIndex = g_new0( AddressIndex, 1 );
 
@@ -614,99 +498,46 @@ AddressIndex *addrindex_create_index( void ) {
        addrIndex->lastType = ADDR_IF_NONE;
        addrIndex->dirtyFlag = FALSE;
        addrIndex->hashCache = g_hash_table_new( g_str_hash, g_str_equal );
-       addrIndex->loadedFlag = FALSE;
-       addrIndex->searchOrder = NULL;
        addrindex_build_if_list( addrIndex );
        return addrIndex;
 }
 
-/**
- * Property - Specify file path to address index file.
- * \param addrIndex Address index.
- * \param value Path to index file.
- */
+/*
+* Specify file to be used.
+*/
 void addrindex_set_file_path( AddressIndex *addrIndex, const gchar *value ) {
        g_return_if_fail( addrIndex != NULL );
        addrIndex->filePath = mgu_replace_string( addrIndex->filePath, value );
 }
-
-/**
- * Property - Specify file name to address index file.
- * \param addrIndex Address index.
- * \param value File name.
- */
 void addrindex_set_file_name( AddressIndex *addrIndex, const gchar *value ) {
        g_return_if_fail( addrIndex != NULL );
        addrIndex->fileName = mgu_replace_string( addrIndex->fileName, value );
 }
-
-/**
- * Property - Specify file path to be used.
- * \param addrIndex Address index.
- * \param value Path to JPilot file.
- */
 void addrindex_set_dirty( AddressIndex *addrIndex, const gboolean value ) {
        g_return_if_fail( addrIndex != NULL );
        addrIndex->dirtyFlag = value;
 }
 
-/**
- * Property - get loaded flag. Note that this flag is set after reading data
- * from the address books.
- * \param addrIndex Address index.
- * \return <i>TRUE</i> if address index data was loaded.
- */
-gboolean addrindex_get_loaded( AddressIndex *addrIndex ) {
-       g_return_val_if_fail( addrIndex != NULL, FALSE );
-       return addrIndex->loadedFlag;
-}
-
-/**
- * Return list of address interfaces.
- * \param addrIndex Address index.
- * \return List of address interfaces.
- */
+/*
+* Return list of interfaces.
+*/
 GList *addrindex_get_interface_list( AddressIndex *addrIndex ) {
        g_return_val_if_fail( addrIndex != NULL, NULL );
        return addrIndex->interfaceList;
 }
 
-/**
- * Perform any other initialization of address index.
- * \param addrIndex Address index.
- */
-/* void addrindex_initialize( AddressIndex *addrIndex ) {
-       addrcompl_initialize();
-} */
-
-/**
- * Perform any other teardown of address index.
- * \param addrIndex Address index.
- */
-/* void addrindex_teardown( AddressIndex *addrIndex ) {
-       addrcompl_teardown();
-} */
-
-/**
- * Free up address index.
- * \param addrIndex Address index.
- */
+/*
+* Free up object.
+*/
 void addrindex_free_index( AddressIndex *addrIndex ) {
        GList *node;
 
        g_return_if_fail( addrIndex != NULL );
 
-       /* Search stuff */
-       g_list_free( addrIndex->searchOrder );
-       addrIndex->searchOrder = NULL;
-
-       /* Free internal storage */
        g_free( ADDRITEM_ID(addrIndex) );
        g_free( ADDRITEM_NAME(addrIndex) );
        g_free( addrIndex->filePath );
        g_free( addrIndex->fileName );
-
-       /* Clear pointers */    
        ADDRITEM_TYPE(addrIndex) = ITEMTYPE_NONE;
        ADDRITEM_ID(addrIndex) = NULL;
        ADDRITEM_NAME(addrIndex) = NULL;
@@ -720,8 +551,6 @@ void addrindex_free_index( AddressIndex *addrIndex ) {
        addrIndex->conversionError = FALSE;
        addrIndex->lastType = ADDR_IF_NONE;
        addrIndex->dirtyFlag = FALSE;
-
-       /* Free up interfaces */        
        node = addrIndex->interfaceList;
        while( node ) {
                AddressInterface *iface = node->data;
@@ -730,40 +559,28 @@ void addrindex_free_index( AddressIndex *addrIndex ) {
        }
        g_list_free( addrIndex->interfaceList );
        addrIndex->interfaceList = NULL;
-
-       /* Free up hash cache */
        addrindex_free_cache_hash( addrIndex->hashCache );
        addrIndex->hashCache = NULL;
-
-       addrIndex->loadedFlag = FALSE;
-
        g_free( addrIndex );
 }
 
-/**
- * Print address index.
- * \param addrIndex Address index.
- * \parem stream    Stream to print.
+/*
+* Print address index.
 */
 void addrindex_print_index( AddressIndex *addrIndex, FILE *stream ) {
        g_return_if_fail( addrIndex != NULL );
        fprintf( stream, "AddressIndex:\n" );
        fprintf( stream, "\tfile path: '%s'\n", addrIndex->filePath );
        fprintf( stream, "\tfile name: '%s'\n", addrIndex->fileName );
-       fprintf( stream, "\t   status: %d\n", addrIndex->retVal );
-       fprintf( stream, "\tconverted: '%s'\n",
-                       addrIndex->wasConverted ? "yes" : "no" );
-       fprintf( stream, "\tcvt error: '%s'\n",
-                       addrIndex->conversionError ? "yes" : "no" );
+       fprintf( stream, "\t   status: %d\n",   addrIndex->retVal );
+       fprintf( stream, "\tconverted: '%s'\n", addrIndex->wasConverted ? "yes" : "no" );
+       fprintf( stream, "\tcvt error: '%s'\n", addrIndex->conversionError ? "yes" : "no" );
        fprintf( stream, "\t---\n" );
 }
 
-/**
- * Retrieve reference to address interface for specified interface type.
- * \param  addrIndex Address index.
- * \param  ifType Interface type.
- * \return Address interface, or NULL if not found.
- */
+/*
+* Retrieve specified interface from index.
+*/
 AddressInterface *addrindex_get_interface(
        AddressIndex *addrIndex, AddressIfType ifType )
 {
@@ -784,16 +601,15 @@ AddressInterface *addrindex_get_interface(
        return retVal;
 }
 
-/**
- * Add raw data source to index. The raw data object (an AddressBookFile or
- * VCardFile object, for example) should be supplied as the raw dataSource
- * argument.
- *
- * \param  addrIndex Address index.
- * \param ifType     Interface type to add.
- * \param dataSource Actual raw data source to add. 
- * \return Data source added, or NULL if invalid interface type.
- */
+/*
+* Add data source to index.
+* Enter: addrIndex  Address index object.
+*        ifType     Interface type to add.
+*        dataSource Actual data source to add.
+* Return: TRUE if data source was added.
+* Note: The raw data object (for example, AddressBookFile or VCardFile object) should be
+* supplied as the dataSource argument.
+*/
 AddressDataSource *addrindex_index_add_datasource(
        AddressIndex *addrIndex, AddressIfType ifType, gpointer dataSource )
 {
@@ -818,13 +634,13 @@ AddressDataSource *addrindex_index_add_datasource(
        return ds;
 }
 
-/**
- * Remove specified data source from index.
- * \param  addrIndex Address index.
- * \param  dataSource Data source to add. 
- * \return Reference to data source if removed, or NULL if data source was not
- *         found in index. Note the this object must still be freed.
- */
+/*
+* Remove data source from index.
+* Enter: addrIndex  Address index object.
+*        dataSource Data source to remove.
+* Return: Data source if removed, or NULL if data source was not found in
+* index. Note the this object must still be freed.
+*/
 AddressDataSource *addrindex_index_remove_datasource(
        AddressIndex *addrIndex, AddressDataSource *dataSource )
 {
@@ -848,14 +664,6 @@ AddressDataSource *addrindex_index_remove_datasource(
        return retVal;
 }
 
-/**
- * Retrieve a reference to address interface for specified interface type and
- * XML interface tag name.
- * \param  addrIndex Address index.
- * \param  tag       XML interface tag name to match.
- * \param  ifType    Interface type to match.
- * \return Reference to address index, or NULL if not found in index.
- */
 static AddressInterface *addrindex_tag_get_interface(
        AddressIndex *addrIndex, gchar *tag, AddressIfType ifType )
 {
@@ -881,14 +689,6 @@ static AddressInterface *addrindex_tag_get_interface(
        return retVal;
 }
 
-/**
- * Retrieve a reference to address interface for specified interface type and
- * XML datasource tag name.
- * \param  addrIndex Address index.
- * \param  ifType    Interface type to match.
- * \param  tag       XML datasource tag name to match.
- * \return Reference to address index, or NULL if not found in index.
- */
 static AddressInterface *addrindex_tag_get_datasource(
        AddressIndex *addrIndex, AddressIfType ifType, gchar *tag )
 {
@@ -912,27 +712,26 @@ static AddressInterface *addrindex_tag_get_datasource(
 * Interface XML parsing functions.
 * ***********************************************************************
 */
+/*
+static void show_attribs( GList *attr ) {
+       while( attr ) {
+               gchar *name = ((XMLAttr *)attr->data)->name;
+               gchar *value = ((XMLAttr *)attr->data)->value;
+               printf( "\tattr value : %s :%s:\n", name, value );
+               attr = g_list_next( attr );
+       }
+       printf( "\t---\n" );
+}
+*/
 
-/**
- * Write start of XML element to file.
- * \param fp   File.
- * \param lvl  Indentation level.
- * \param name Element name.
- */
-static void addrindex_write_elem_s( FILE *fp, const gint lvl, const gchar *name ) {
+static void addrindex_write_elem_s( FILE *fp, gint lvl, gchar *name ) {
        gint i;
        for( i = 0; i < lvl; i++ ) fputs( "  ", fp );
        fputs( "<", fp );
        fputs( name, fp );
 }
 
-/**
- * Write end of XML element to file.
- * \param fp   File.
- * \param lvl  Indentation level.
- * \param name Element name.
- */
-static void addrindex_write_elem_e( FILE *fp, const gint lvl, const gchar *name ) {
+static void addrindex_write_elem_e( FILE *fp, gint lvl, gchar *name ) {
        gint i;
        for( i = 0; i < lvl; i++ ) fputs( "  ", fp );
        fputs( "</", fp );
@@ -940,13 +739,7 @@ static void addrindex_write_elem_e( FILE *fp, const gint lvl, const gchar *name
        fputs( ">\n", fp );
 }
 
-/**
- * Write XML attribute to file.
- * \param fp    File.
- * \param name  Attribute name.
- * \param value Attribute value.
- */
-static void addrindex_write_attr( FILE *fp, const gchar *name, const gchar *value ) {
+static void addrindex_write_attr( FILE *fp, gchar *name, gchar *value ) {
        fputs( " ", fp );
        fputs( name, fp );
        fputs( "=\"", fp );
@@ -954,36 +747,16 @@ static void addrindex_write_attr( FILE *fp, const gchar *name, const gchar *valu
        fputs( "\"", fp );
 }
 
-/**
- * Return DOM fragment for current XML tag from file.
- * \param  file XML file being processed.
- * \return Fragment representing DOM fragment for configuration element.
- */
-static AddressIfFragment *addrindex_read_fragment( XMLFile *file ) {
-       AddressIfFragment *fragment;
-       AddressIfFragment *child;
+/*
+* Return list of name-value pairs.
+*/
+static GList *addrindex_read_attributes( XMLFile *file ) {
+       GList *list = NULL;
        AddressIfAttrib *nv;
-       XMLTag *xtag;
-       GList *list;
        GList *attr;
        gchar *name;
        gchar *value;
-       guint prevLevel;
-       gint rc;
 
-       prevLevel = file->level;
-
-       /* Get current tag name */
-       xtag = xml_get_current_tag( file );
-
-       /* Create new fragment */
-       fragment = g_new0( AddressIfFragment, 1 );
-       fragment->name = g_strdup( xtag->tag );
-       fragment->children = NULL;
-       fragment->attributes = NULL;
-
-       /* Read attributes */
-       list = NULL;
        attr = xml_get_current_tag_attr( file );
        while( attr ) {
                name = ((XMLAttr *)attr->data)->name;
@@ -994,102 +767,38 @@ static AddressIfFragment *addrindex_read_fragment( XMLFile *file ) {
                list = g_list_append( list, nv );
                attr = g_list_next( attr );
        }
-       fragment->attributes = list;
-
-       /* Now read the children */
-       while( TRUE ) {
-               rc = xml_parse_next_tag( file );
-               if( rc != 0 ) {
-                       /* End of file? */
-                       break;
-               }
-               if( file->level < prevLevel ) {
-                       /* We must be above level we start at */
-                       break;
-               }
-               child = addrindex_read_fragment( file );
-               fragment->children = g_list_append( fragment->children, child );
-       }
-
-       return fragment;
+       return list;
 }
 
-/**
- * Write DOM fragment to file.
- * \param fp       File to write.
- * \param fragment DOM fragment for configuration element.
- * \param lvl      Indent level.
- */
-static void addrindex_write_fragment(
-               FILE *fp, const AddressIfFragment *fragment, const gint lvl )
-{
+/*
+* Output name-value pairs.
+*/
+static void addrindex_write_attributes( FILE *fp, gchar *tag, GList *list, gint lvl ) {
        GList *node;
-
-       if( fragment ) {
-               addrindex_write_elem_s( fp, lvl, fragment->name );
-               node = fragment->attributes;
+       AddressIfAttrib *nv;
+       if( list ) {
+               addrindex_write_elem_s( fp, lvl, tag );
+               node = list;
                while( node ) {
-                       AddressIfAttrib *nv = node->data;
+                       nv = node->data;
                        addrindex_write_attr( fp, nv->name, nv->value );
                        node = g_list_next( node );
                }
-               if( fragment->children ) {
-                       fputs(" >\n", fp);
-
-                       /* Output children */
-                       node = fragment->children;
-                       while( node ) {
-                               AddressIfFragment *child = node->data;
-                               addrindex_write_fragment( fp, child, 1+lvl );
-                               node = g_list_next( node );
-                       }
-
-                       /* Output closing tag */
-                       addrindex_write_elem_e( fp, lvl, fragment->name );
-               }
-               else {
-                       fputs(" />\n", fp);
-               }
+               fputs(" />\n", fp);
        }
 }
 
 /*
-static void addrindex_print_fragment_r(
-               const AddressIfFragment *fragment, FILE *stream, gint lvl )
-{
-       GList *node;
-       gint i;
-
-       for( i = 0; i < lvl; i++ )
-               fprintf( stream, "  " );
-       fprintf( stream, "Element:%s:\n", fragment->name );
-       node = fragment->attributes;
+static void addrindex_print_attributes( GList *list, FILE *stream ) {
+       GList *node = list;
        while( node ) {
                AddressIfAttrib *nv = node->data;
-               for( i = 0; i < lvl; i++ )
-                       fprintf( stream, "  " );
-               fprintf( stream, "    %s : %s\n", nv->name, nv->value );
-               node = g_list_next( node );
-       }
-       node = fragment->children;
-       while( node ) {
-               AddressIfFragment *child = node->data;
-               addrindex_print_fragment_r( child, stream, 1+lvl );
+               fprintf( stream, "%s : %s\n", nv->name, nv->value );
                node = g_list_next( node );
        }
 }
-
-static void addrindex_print_fragment( const AddressIfFragment *fragment, FILE *stream ) {
-       addrindex_print_fragment_r( fragment, stream, 0 );
-}
 */
 
-/**
- * Read/parse address index file, creating a data source for a regular
- * intrinsic XML addressbook.
- * \param  file Address index file.
- * \return Data source.
- */
 static AddressDataSource *addrindex_parse_book( XMLFile *file ) {
        AddressDataSource *ds;
        AddressBookFile *abf;
@@ -1214,222 +923,111 @@ static void addrindex_write_jpilot( FILE *fp,AddressDataSource *ds, gint lvl ) {
                fputs( " />\n", fp );
        }
 }
+#else
+/* Just read/write name-value pairs (preserve data found in file)  */
+static AddressDataSource *addrindex_parse_jpilot( XMLFile *file ) {
+       AddressDataSource *ds;
 
-#endif
-
-#ifdef USE_LDAP
-/**
- * Parse LDAP criteria attribute data from XML file.
- * \param file Index file.
- * \param ctl  LDAP control object to populate.
- */
-static void addrindex_parse_ldap_attrlist( XMLFile *file, LdapControl *ctl ) {
-       guint prevLevel;
-       XMLTag *xtag;
-       XMLTag *xtagPrev;
-       gint rc;
-       GList *attr;
-       GList *list;
-       GList *node;
-
-       if( file == NULL ) {
-               return;
-       }
-
-       list = NULL;
-       prevLevel = file->level;
-       xtagPrev = xml_get_current_tag( file );
-       while( TRUE ) {
-               rc = xml_parse_next_tag( file );
-               if( rc != 0 ) {
-                       /* Terminate prematurely */
-                       mgu_free_dlist( list );
-                       list = NULL;
-                       return;
-               }
-               if( file->level < prevLevel ) {
-                       /* We must be above level we start at */
-                       break;
-               }
-
-               /* Get a tag (element) */
-               xtag = xml_get_current_tag( file );
-               if( strcmp( xtag->tag, ELTAG_LDAP_ATTR_SRCH ) == 0 ) {
-                       /* LDAP criteria attribute */
-                       attr = xml_get_current_tag_attr( file );
-                       while( attr ) {
-                               gchar *name = ((XMLAttr *)attr->data)->name;
-                               gchar *value = ((XMLAttr *)attr->data)->value;
-                               if( strcmp( name, ATTAG_LDAP_ATTR_NAME ) == 0 ) {
-                                       if( value && strlen( value ) > 0 ) {
-                                               list = g_list_append(
-                                                       list, g_strdup( value ) );
-                                       }
-                               }
-                               attr = g_list_next( attr );
-                       }
-               }
-               else {
-                       if( xtag != xtagPrev ) {
-                               /* Found a new tag */
-                               break;
-                       }
-               }
-               xtag = xtagPrev;
-       }
+       ds = addrindex_create_datasource( ADDR_IF_JPILOT );
+       ds->rawDataSource = addrindex_read_attributes( file );
+       return ds;
+}
 
-       /* Build list of search attributes */
-       ldapctl_criteria_list_clear( ctl );
-       node = list;
-       while( node ) {
-               ldapctl_criteria_list_add( ctl, node->data );
-               g_free( node->data );
-               node->data = NULL;
-               node = g_list_next( node );
+static void addrindex_write_jpilot( FILE *fp, AddressDataSource *ds, gint lvl ) {
+       GList *list = ds->rawDataSource;
+       if( list ) {
+               addrindex_write_attributes( fp, TAG_DS_JPILOT, list, lvl );
        }
-       g_list_free( list );
-       list = NULL;
-
 }
+#endif
 
+#ifdef USE_LDAP
 static AddressDataSource *addrindex_parse_ldap( XMLFile *file ) {
        AddressDataSource *ds;
-       LdapServer *server;
-       LdapControl *ctl;
+       SyldapServer *server;
        GList *attr;
-       gchar *serverName = NULL;
-       gchar *criteria = NULL;
-       gboolean bSearch = FALSE;
-       gboolean cvtFlag = TRUE;
 
        ds = addrindex_create_datasource( ADDR_IF_LDAP );
-       ctl = ldapctl_create();
+       server = syldap_create();
        attr = xml_get_current_tag_attr( file );
        while( attr ) {
                gchar *name = ((XMLAttr *)attr->data)->name;
                gchar *value = ((XMLAttr *)attr->data)->value;
                gint ivalue = atoi( value );
-
                if( strcmp( name, ATTAG_LDAP_NAME ) == 0 ) {
-                       if( serverName ) g_free( serverName );
-                       serverName = g_strdup( value );
+                       syldap_set_name( server, value );
                }
                else if( strcmp( name, ATTAG_LDAP_HOST ) == 0 ) {
-                       ldapctl_set_host( ctl, value );
+                       syldap_set_host( server, value );
                }
                else if( strcmp( name, ATTAG_LDAP_PORT ) == 0 ) {
-                       ldapctl_set_port( ctl, ivalue );
+                       syldap_set_port( server, ivalue );
                }
                else if( strcmp( name, ATTAG_LDAP_BASE_DN ) == 0 ) {
-                       ldapctl_set_base_dn( ctl, value );
+                       syldap_set_base_dn( server, value );
                }
                else if( strcmp( name, ATTAG_LDAP_BIND_DN ) == 0 ) {
-                       ldapctl_set_bind_dn( ctl, value );
+                       syldap_set_bind_dn( server, value );
                }
                else if( strcmp( name, ATTAG_LDAP_BIND_PASS ) == 0 ) {
-                       ldapctl_set_bind_password( ctl, value );
+                       syldap_set_bind_password( server, value );
                }
                else if( strcmp( name, ATTAG_LDAP_CRITERIA ) == 0 ) {
-                       if( criteria ) g_free( criteria );
-                       criteria = g_strdup( value );
+                       syldap_set_search_criteria( server, value );
                }
                else if( strcmp( name, ATTAG_LDAP_MAX_ENTRY ) == 0 ) {
-                       ldapctl_set_max_entries( ctl, ivalue );
+                       syldap_set_max_entries( server, ivalue );
                }
                else if( strcmp( name, ATTAG_LDAP_TIMEOUT ) == 0 ) {
-                       ldapctl_set_timeout( ctl, ivalue );
-               }
-               else if( strcmp( name, ATTAG_LDAP_MAX_AGE ) == 0 ) {
-                       ldapctl_set_max_query_age( ctl, ivalue );
-               }
-               else if( strcmp( name, ATTAG_LDAP_DYN_SEARCH ) == 0 ) {
-                       bSearch = FALSE;
-                       cvtFlag = FALSE;
-                       if( strcmp( value, "yes" ) == 0 ) {
-                               bSearch = TRUE;
-                       }
+                       syldap_set_timeout( server, ivalue );
                }
                attr = g_list_next( attr );
        }
 
-       server = ldapsvr_create_noctl();
-       ldapsvr_set_name( server, serverName );
-       ldapsvr_set_search_flag( server, bSearch );
-       g_free( serverName );
-       ldapsvr_set_control( server, ctl );
        ds->rawDataSource = server;
-
-       addrindex_parse_ldap_attrlist( file, ctl );
-       /*
-        * If criteria have been specified and no attributes were listed, then
-        * convert old style criteria into an attribute list. Any criteria will
-        * be dropped when saving data.
-        */
-       if( criteria ) {
-               if( ! ldapctl_get_criteria_list( ctl ) ) {
-                       ldapctl_parse_ldap_search( ctl, criteria );
-               }
-               g_free( criteria );
-       }
-       /*
-        * If no search flag was found, then we are converting from old format
-        * server data to new format.
-        */
-       if( cvtFlag ) {
-               ldapsvr_set_search_flag( server, TRUE );
-       }
-       /* ldapsvr_print_data( server, stdout ); */
-
        return ds;
 }
 
 static void addrindex_write_ldap( FILE *fp, AddressDataSource *ds, gint lvl ) {
-       LdapServer *server = ds->rawDataSource;
-       LdapControl *ctl = NULL;
-       GList *node;
-       gchar value[256];
-
+       SyldapServer *server = ds->rawDataSource;
        if( server ) {
-               ctl = server->control;
-       }
-       if( ctl == NULL ) return;
+               gchar value[256];
 
-       /* Output start element with attributes */
-       addrindex_write_elem_s( fp, lvl, TAG_DS_LDAP );
-       addrindex_write_attr( fp, ATTAG_LDAP_NAME, ldapsvr_get_name( server ) );
-       addrindex_write_attr( fp, ATTAG_LDAP_HOST, ctl->hostName );
+               addrindex_write_elem_s( fp, lvl, TAG_DS_LDAP );
+               addrindex_write_attr( fp, ATTAG_LDAP_NAME, syldap_get_name( server ) );
+               addrindex_write_attr( fp, ATTAG_LDAP_HOST, server->hostName );
 
-       sprintf( value, "%d", ctl->port );      
-       addrindex_write_attr( fp, ATTAG_LDAP_PORT, value );
+               sprintf( value, "%d", server->port );   
+               addrindex_write_attr( fp, ATTAG_LDAP_PORT, value );
 
-       addrindex_write_attr( fp, ATTAG_LDAP_BASE_DN, ctl->baseDN );
-       addrindex_write_attr( fp, ATTAG_LDAP_BIND_DN, ctl->bindDN );
-       addrindex_write_attr( fp, ATTAG_LDAP_BIND_PASS, ctl->bindPass );
+               addrindex_write_attr( fp, ATTAG_LDAP_BASE_DN, server->baseDN );
+               addrindex_write_attr( fp, ATTAG_LDAP_BIND_DN, server->bindDN );
+               addrindex_write_attr( fp, ATTAG_LDAP_BIND_PASS, server->bindPass );
+               addrindex_write_attr( fp, ATTAG_LDAP_CRITERIA, server->searchCriteria );
 
-       sprintf( value, "%d", ctl->maxEntries );
-       addrindex_write_attr( fp, ATTAG_LDAP_MAX_ENTRY, value );
-       sprintf( value, "%d", ctl->timeOut );
-       addrindex_write_attr( fp, ATTAG_LDAP_TIMEOUT, value );
-       sprintf( value, "%d", ctl->maxQueryAge );
-       addrindex_write_attr( fp, ATTAG_LDAP_MAX_AGE, value );
+               sprintf( value, "%d", server->maxEntries );
+               addrindex_write_attr( fp, ATTAG_LDAP_MAX_ENTRY, value );
+               sprintf( value, "%d", server->timeOut );
+               addrindex_write_attr( fp, ATTAG_LDAP_TIMEOUT, value );
 
-       addrindex_write_attr( fp, ATTAG_LDAP_DYN_SEARCH,
-                       server->searchFlag ? "yes" : "no" );
-
-       fputs(" >\n", fp);
-
-       /* Output attributes */
-       node = ldapctl_get_criteria_list( ctl );
-       while( node ) {
-               addrindex_write_elem_s( fp, 1+lvl, ELTAG_LDAP_ATTR_SRCH );
-               addrindex_write_attr( fp, ATTAG_LDAP_ATTR_NAME, node->data );
                fputs(" />\n", fp);
-               node = g_list_next( node );
        }
+}
+#else
+/* Just read/write name-value pairs (preserve data found in file)  */
+static AddressDataSource *addrindex_parse_ldap( XMLFile *file ) {
+       AddressDataSource *ds;
 
-       /* End of element */    
-       addrindex_write_elem_e( fp, lvl, TAG_DS_LDAP );
+       ds = addrindex_create_datasource( ADDR_IF_LDAP );
+       ds->rawDataSource = addrindex_read_attributes( file );
+       return ds;
+}
 
+static void addrindex_write_ldap( FILE *fp, AddressDataSource *ds, gint lvl ) {
+       GList *list = ds->rawDataSource;
+       if( list ) {
+               addrindex_write_attributes( fp, TAG_DS_LDAP, list, lvl );
+       }
 }
 #endif
 
@@ -1437,25 +1035,16 @@ static void addrindex_write_ldap( FILE *fp, AddressDataSource *ds, gint lvl ) {
 * Address index I/O functions.
 * ***********************************************************************
 */
-/**
- * Read address index file, creating appropriate data sources for each address
- * index file entry.
- *
- * \param  addrIndex Address index.
- * \param  file Address index file.
- */
 static void addrindex_read_index( AddressIndex *addrIndex, XMLFile *file ) {
        guint prev_level;
        XMLTag *xtag;
        AddressInterface *iface = NULL, *dsIFace = NULL;
        AddressDataSource *ds;
-       gint rc;
 
-       addrIndex->loadedFlag = FALSE;
        for (;;) {
                prev_level = file->level;
-               rc = xml_parse_next_tag( file );
-               if( file->level == 0 ) return;
+               xml_parse_next_tag( file );
+               if( file->level < prev_level ) return;
 
                xtag = xml_get_current_tag( file );
 
@@ -1480,16 +1069,12 @@ static void addrindex_read_index( AddressIndex *addrIndex, XMLFile *file ) {
                                else if( addrIndex->lastType == ADDR_IF_VCARD ) {
                                        ds = addrindex_parse_vcard( file );
                                }
-#ifdef USE_JPILOT
                                else if( addrIndex->lastType == ADDR_IF_JPILOT ) {
                                        ds = addrindex_parse_jpilot( file );
                                }
-#endif
-#ifdef USE_LDAP
                                else if( addrIndex->lastType == ADDR_IF_LDAP ) {
                                        ds = addrindex_parse_ldap( file );
                                }
-#endif
                                if( ds ) {
                                        ds->interface = dsIFace;
                                        addrindex_hash_add_cache( addrIndex, ds );
@@ -1498,52 +1083,10 @@ static void addrindex_read_index( AddressIndex *addrIndex, XMLFile *file ) {
                                }
                        }
                }
+               addrindex_read_index( addrIndex, file );
        }
 }
 
-/*
- * Search order sorting comparison function for building search order list.
- */
-static gint addrindex_search_order_compare( gconstpointer ptrA, gconstpointer ptrB ) {
-       AddressInterface *ifaceA = ( AddressInterface * ) ptrA;
-       AddressInterface *ifaceB = ( AddressInterface * ) ptrB;
-
-       return ifaceA->searchOrder - ifaceB->searchOrder;
-}
-
-/**
- * Build list of data sources to process.
- * \param addrIndex Address index object.
- */
-static void addrindex_build_search_order( AddressIndex *addrIndex ) {
-       AddressInterface *iface;
-       GList *nodeIf;
-
-       /* Clear existing list */
-       g_list_free( addrIndex->searchOrder );
-       addrIndex->searchOrder = NULL;
-
-       /* Build new list */
-       nodeIf = addrIndex->interfaceList;
-       while( nodeIf ) {
-               AddressInterface *iface = nodeIf->data;
-               if( iface->searchOrder > 0 ) {
-                       /* Add to search order list */
-                       addrIndex->searchOrder = g_list_insert_sorted(
-                               addrIndex->searchOrder, iface,
-                               addrindex_search_order_compare );
-               }
-               nodeIf = g_list_next( nodeIf );
-       }
-
-       nodeIf = addrIndex->searchOrder;
-       while( nodeIf ) {
-               AddressInterface *iface = nodeIf->data;
-               nodeIf = g_list_next( nodeIf );
-       }
-
-}
-
 static gint addrindex_read_file( AddressIndex *addrIndex ) {
        XMLFile *file = NULL;
        gchar *fileSpec = NULL;
@@ -1556,9 +1099,7 @@ static gint addrindex_read_file( AddressIndex *addrIndex ) {
        g_free( fileSpec );
 
        if( file == NULL ) {
-               /*
-               fprintf( stdout, " file '%s' does not exist.\n", addrIndex->fileName );
-               */
+               /* fprintf( stdout, " file '%s' does not exist.\n", addrIndex->fileName ); */
                return addrIndex->retVal;
        }
 
@@ -1573,8 +1114,6 @@ static gint addrindex_read_file( AddressIndex *addrIndex ) {
        }
        xml_close_file( file );
 
-       addrindex_build_search_order( addrIndex );
-
        return addrIndex->retVal;
 }
 
@@ -1599,16 +1138,12 @@ static void addrindex_write_index( AddressIndex *addrIndex, FILE *fp ) {
                                        if( iface->type == ADDR_IF_VCARD ) {
                                                addrindex_write_vcard( fp, ds, lvlItem );
                                        }
-#ifdef USE_JPILOT
                                        if( iface->type == ADDR_IF_JPILOT ) {
                                                addrindex_write_jpilot( fp, ds, lvlItem );
                                        }
-#endif
-#ifdef USE_LDAP
                                        if( iface->type == ADDR_IF_LDAP ) {
                                                addrindex_write_ldap( fp, ds, lvlItem );
                                        }
-#endif
                                }
                                nodeDS = g_list_next( nodeDS );
                        }
@@ -2419,522 +1954,6 @@ GList *addrindex_ds_get_all_groups( AddressDataSource *ds ) {
        return retVal;
 }
 
-/* **********************************************************************
-* Address search stuff.
-* ***********************************************************************
-*/
-
-/**
- * Current query ID. This is incremented for each query created.
- */
-static gint _currentQueryID_ = 0;
-
 /*
- * Variables for the search that is being performed.
- */
-static gchar *_searchTerm_ = NULL;
-static gpointer _searchTarget_ = NULL;
-static AddrSearchCallbackFunc *_searchCallback_ = NULL;
-
-/**
- * Setup or register the search that will be performed.
- * \param addrIndex  Address index object.
- * \param searchTerm Search term. A private copy will be made.
- * \param target     Target object that will receive data.
- * \param callBack   Callback function.
- * \return ID allocated to query that will be executed.
- */
-gint addrindex_setup_search(
-       AddressIndex *addrIndex, const gchar *searchTerm,
-       const gpointer target, AddrSearchCallbackFunc callBack )
-{
-       gint queryID;
-
-       /* printf( "search term ::%s::\n", searchTerm ); */
-       g_free( _searchTerm_ );
-       _searchTerm_ = g_strdup( searchTerm );
-
-       queryID = ++_currentQueryID_;
-       _searchTarget_ = target;
-       _searchCallback_ = callBack;
-       /* printf( "query ID ::%d::\n", queryID ); */
-       return queryID;
-}
-
-/**
- * Perform the search for specified address cache.
- * \param cache Cache to be searched.
- * \param queryID ID of search query to be executed.
- */
-static void addrindex_search_cache( AddressCache *cache, const gint queryID ) {
-       AddrCacheIndex *index;
-       GList *listEMail;
-
-       index = cache->searchIndex;
-       if( index == NULL ) return;
-       if( index->invalid ) {
-               addrcache_build_index( cache );
-       }
-
-       /*
-       printf( "query ::%d:: searching index for ::%s::\n", queryID, _searchTerm_ );
-       */
-       listEMail = addrcindex_search( index, _searchTerm_ );
-       ( _searchCallback_ ) ( queryID, listEMail, _searchTarget_ );
-       g_list_free( listEMail );
-       listEMail = NULL;
-       /* printf( "searching index done\n" ); */
-}
-
-#ifdef USE_LDAP
-/**
- * LDAP callback entry point for each address entry found.
- * \param qry       LDAP query.
- * \param listEMail List of Item EMail objects found.
- */
-static void addrindex_ldap_entry_cb( LdapQuery *qry, GList *listEMail ) {
-       GList *node;
-
-       /*
-       printf( "\naddrindex::addrindex_ldap_entry_cb ::%s::\n", qry->queryName );
-       */
-       node = listEMail;
-       while( node ) {
-               ItemEMail *email = node->data;
-               /* printf( "\temail ::%s::\n", email->address ); */
-               node = g_list_next( node );
-       }
-       if( _searchCallback_ ) {
-               ( _searchCallback_ ) ( qry->queryID, listEMail, _searchTarget_ );
-       }
-       g_list_free( listEMail );
-}
-
-/**
- * LDAP callback entry point for completion of search.
- * \param qry LDAP query.
- */
-static void addrindex_ldap_end_cb( LdapQuery *qry ) {
-       /* printf( "\naddrindex::addrindex_ldap_end_cb ::%s::\n", qry->queryName ); */
-}
-
-/**
- * Return results of previous query.
- * \param folder.
- * \return List of ItemEMail objects.
- */
-static void addrindex_ldap_use_previous( const ItemFolder *folder, const gint queryID )
-{
-       GList *listEMail;
-       GList *node;
-       GList *nodeEM;
-
-       listEMail = NULL;
-       if( _searchCallback_ ) {
-               node = folder->listPerson;
-               while( node ) {
-                       AddrItemObject *aio = node->data;
-                       if( aio &&  aio->type == ITEMTYPE_PERSON ) {
-                               ItemPerson *person = node->data;
-                               nodeEM = person->listEMail;
-                               while( nodeEM ) {
-                                       ItemEMail *email = nodeEM->data;
-                                       nodeEM = g_list_next( nodeEM );
-                                       listEMail = g_list_append( listEMail, email );
-                               }
-                       }
-                       node = g_list_next( node );
-               }
-               ( _searchCallback_ ) ( queryID, listEMail, _searchTarget_ );
-               g_list_free( listEMail );
-       }
-}
-
-LdapQuery *ldapsvr_locate_query( LdapServer *server, const gchar *searchTerm );
-
-/**
- * Construct an LDAP query and initiate an LDAP search.
- * \param server  LDAP server object.
- * \param queryID ID of search query to be executed.
- */
-static void addrindex_search_ldap( LdapServer *server, const gint queryID ) {
-       LdapQuery *qry;
-       gchar *name;
-
-       if( ! server->searchFlag ) return;
-       /* printf( "Searching ::%s::\n", ldapsvr_get_name( server ) ); */
-
-       /* Retire any aged queries */
-       ldapsvr_retire_query( server );
-
-       /* Test whether any queries for the same term exist */
-       qry = ldapsvr_locate_query( server, _searchTerm_ );
-       if( qry ) {
-               ItemFolder *folder = qry->folder;
-
-               /* Touch query to ensure it hangs around for a bit longer */            
-               ldapqry_touch( qry );
-               if( folder ) {
-                       addrindex_ldap_use_previous( folder, queryID );
-                       return;
-               }
-       }
-
-       /* Construct a query */
-       qry = ldapqry_create();
-       ldapqry_set_query_id( qry, queryID );
-       ldapqry_set_search_value( qry, _searchTerm_ );
-       ldapqry_set_query_type( qry, LDAPQUERY_DYNAMIC );
-       ldapqry_set_callback_entry( qry, addrindex_ldap_entry_cb );
-       ldapqry_set_callback_end( qry, addrindex_ldap_end_cb );
-
-       /* Name the query */
-       name = g_strdup_printf( "Search for '%s'", _searchTerm_ );
-       ldapqry_set_name( qry, name );
-       g_free( name );
-
-       ldapsvr_add_query( server, qry );
-       /* printf( "addrindex_search_ldap::executing dynamic search...\n" ); */
-       ldapsvr_execute_query( server, qry );
-}
-
-/**
- * Construct an LDAP query and initiate an LDAP search.
- * \param server      LDAP server object to search.
- * \param searchTerm  Search term to locate.
- * \param callbackEnd Function to call when search has terminated.
- *
- */
-void addrindex_search_ldap_noid(
-       LdapServer *server, const gchar *searchTerm, void * callbackEnd )
-{
-       LdapQuery *qry;
-       gchar *name;
-
-       /* Construct a query */
-       qry = ldapqry_create();
-       ldapqry_set_search_value( qry, searchTerm );
-       ldapqry_set_query_type( qry, LDAPQUERY_STATIC );
-       ldapqry_set_callback_end( qry, callbackEnd );
-
-       /* Name the query */
-       name = g_strdup_printf( "Static Search for '%s'", searchTerm );
-       ldapqry_set_name( qry, name );
-       g_free( name );
-
-       ldapsvr_add_query( server, qry );
-       /* printf( "addrindex_search_ldap_noid::executing static search...\n" ); */
-       ldapsvr_execute_query( server, qry );
-}
-#endif
-
-/**
- * Perform the previously registered search.
- * \param  addrIndex  Address index object.
- * \param  queryID    ID of search query to be executed.
- * \return <i>TRUE</i> if search started successfully, or <i>FALSE</i> if
- *         failed.
- */
-gboolean addrindex_start_search( AddressIndex *addrIndex, const gint queryID ) {
-       AddressInterface *iface;
-       AddressDataSource *ds;
-       AddressCache *cache;
-       GList *nodeIf;
-       GList *nodeDS;
-       gint type;
-
-       /* printf( "addrindex_start_search::%d::\n", queryID ); */
-       nodeIf = addrIndex->searchOrder;
-       while( nodeIf ) {
-               iface = nodeIf->data;
-               nodeIf = g_list_next( nodeIf );
-
-               if( ! iface->useInterface ) {
-                       continue;
-               }
-
-               type = iface->type;
-               nodeDS = iface->listSource;
-               while( nodeDS ) {
-                       ds = nodeDS->data;
-                       nodeDS = g_list_next( nodeDS );
-                       cache = NULL;
-
-                       if( type == ADDR_IF_BOOK ) {
-                               AddressBookFile *abf = ds->rawDataSource;
-                               cache = abf->addressCache;
-                       }
-                       else if( type == ADDR_IF_VCARD ) {
-                               VCardFile *vcf = ds->rawDataSource;
-                               cache = vcf->addressCache;
-                       }
-#ifdef USE_JPILOT
-                       else if( type == ADDR_IF_JPILOT ) {
-                               JPilotFile *jpf = ds->rawDataSource;
-                               cache = jpf->addressCache;
-                       }
-#endif
-#ifdef USE_LDAP
-                       else if( type == ADDR_IF_LDAP ) {
-                               LdapServer *server = ds->rawDataSource;
-                               addrindex_search_ldap( server, queryID );
-                       }
-#endif
-                       if( cache ) {
-                               addrindex_search_cache( cache, queryID );
-                       }
-               }
-       }
-       return TRUE;
-}
-
-/**
- * Stop the previously registered search.
- * \param addrIndex Address index object.
- * \param queryID ID of search query to stop.
- */
-void addrindex_stop_search( AddressIndex *addrIndex, const gint queryID ){
-#ifdef USE_LDAP
-       AddressInterface *iface;
-       AddressDataSource *ds;
-       GList *nodeIf;
-       GList *nodeDS;
-       gint type;
-
-       /* If query ID does not match, search has not been setup */
-       /* if( queryID != _queryID_ ) return; */
-
-       /* printf( "addrindex_stop_search::%d::\n", queryID ); */
-       nodeIf = addrIndex->searchOrder;
-       while( nodeIf ) {
-               iface = nodeIf->data;
-               nodeIf = g_list_next( nodeIf );
-
-               if( ! iface->useInterface ) {
-                       continue;
-               }
-
-               type = iface->type;
-               nodeDS = iface->listSource;
-               while( nodeDS ) {
-                       ds = nodeDS->data;
-                       nodeDS = g_list_next( nodeDS );
-                       if( type == ADDR_IF_LDAP ) {
-                               LdapServer *server = ds->rawDataSource;
-                               ldapsvr_stop_all_query( server );
-                       }
-               }
-       }
-#endif
-}
-
-/**
- * Read all address books that do not support dynamic queries.
- * \param addrIndex Address index object.
- */
-void addrindex_read_all( AddressIndex *addrIndex ) {
-       AddressInterface *iface;
-       AddressDataSource *ds;
-       GList *nodeIf;
-       GList *nodeDS;
-
-       nodeIf = addrIndex->searchOrder;
-       while( nodeIf ) {
-               iface = nodeIf->data;
-               nodeIf = g_list_next( nodeIf );
-
-               if( ! iface->useInterface ) {
-                       continue;
-               }
-               if( iface->externalQuery ) {
-                       continue;
-               }
-               nodeDS = iface->listSource;
-               while( nodeDS ) {
-                       ds = nodeDS->data;
-                       nodeDS = g_list_next( nodeDS );
-
-                       /* Read address book */
-                       if( addrindex_ds_get_modify_flag( ds ) ) {
-                               addrindex_ds_read_data( ds );
-                               continue;
-                       }
-
-                       if( ! addrindex_ds_get_read_flag( ds ) ) {
-                               addrindex_ds_read_data( ds );
-                               continue;
-                       }
-               }
-       }
-       addrIndex->loadedFlag = TRUE;
-}
-
-/**
- * Perform a simple search of all non-query type data sources for specified
- * search term. If several entries are found, only the first item is
- * returned. Interfaces that require a time-consuming "external query" are
- * ignored for this search.
- *
- * \param  addrIndex  Address index object.
- * \param  searchTerm Search term to find. Typically an email address.
- * \return List of references to zero or mail E-Mail object that was found in
- *         the address books, or <i>NULL</i> if nothing found. This list
- *         *SHOULD* be freed when done.
- */
-GList *addrindex_quick_search_list(
-               AddressIndex *addrIndex, const gchar *searchTerm )
-{
-       GList *listRet = NULL;
-       GList *listEMail;
-       AddressInterface *iface;
-       AddressDataSource *ds;
-       AddressCache *cache;
-       AddrCacheIndex *index;
-       ItemEMail *email;
-       GList *nodeIf;
-       GList *nodeDS;
-       GList *nodeEM;
-       gint type;
-
-       nodeIf = addrIndex->searchOrder;
-       while( nodeIf ) {
-               iface = nodeIf->data;
-               nodeIf = g_list_next( nodeIf );
-
-               if( ! iface->useInterface ) {
-                       /* Ignore interfaces that don't have a library */
-                       continue;
-               }
-               if( iface->externalQuery ) {
-                       /* Ignore interfaces that require a "query" */
-                       continue;
-               }
-
-               type = iface->type;
-               nodeDS = iface->listSource;
-               while( nodeDS ) {
-                       ds = nodeDS->data;
-                       nodeDS = g_list_next( nodeDS );
-                       cache = NULL;
-
-                       if( type == ADDR_IF_BOOK ) {
-                               AddressBookFile *abf = ds->rawDataSource;
-                               cache = abf->addressCache;
-                       }
-                       else if( type == ADDR_IF_VCARD ) {
-                               VCardFile *vcf = ds->rawDataSource;
-                               cache = vcf->addressCache;
-                       }
-#ifdef USE_JPILOT
-                       else if( type == ADDR_IF_JPILOT ) {
-                               JPilotFile *jpf = ds->rawDataSource;
-                               cache = jpf->addressCache;
-                       }
-#endif
-                       if( cache ) {
-                               index = cache->searchIndex;
-                               if( index == NULL ) {
-                                       continue;
-                               }
-                               if( index->invalid ) {
-                                       addrcache_build_index( cache );
-                               }
-                               listEMail = addrcindex_search( index, searchTerm );
-                               nodeEM = listEMail;
-                               while( nodeEM ) {
-                                       email = listEMail->data;
-                                       listRet = g_list_append( listRet, email );
-                                       nodeEM = g_list_next( nodeEM );
-                               }
-                               g_list_free( listEMail );
-                       }
-               }
-       }
-       return listRet;
-}
-
-/**
- * Perform a simple search of all non-query type data sources for specified
- * search term. If several entries are found, only the first item is
- * returned. Interfaces that require a time-consuming "external query" are
- * ignored for this search.
- *
- * \param  addrIndex  Address index object.
- * \param  searchTerm Search term to find. Typically an email address.
- * \return Reference to a single E-Mail object that was found in the address
- *         book, or <i>NULL</i> if nothing found. This should *NOT* be freed
- *         when done.
- */
-ItemEMail *addrindex_quick_search_single(
-               AddressIndex *addrIndex, const gchar *searchTerm )
-{
-       ItemEMail *email = NULL;
-       AddressInterface *iface;
-       AddressDataSource *ds;
-       AddressCache *cache;
-       AddrCacheIndex *index;
-       GList *listEMail;
-       GList *nodeIf;
-       GList *nodeDS;
-       gint type;
-
-       /* printf( "addrindex_quick_search::%s::\n", searchTerm ); */
-       nodeIf = addrIndex->searchOrder;
-       while( nodeIf ) {
-               iface = nodeIf->data;
-               nodeIf = g_list_next( nodeIf );
-
-               if( ! iface->useInterface ) {
-                       continue;
-               }
-               if( iface->externalQuery ) {
-                       continue;
-               }
-
-               type = iface->type;
-               nodeDS = iface->listSource;
-               while( nodeDS ) {
-                       ds = nodeDS->data;
-                       nodeDS = g_list_next( nodeDS );
-                       cache = NULL;
-
-                       if( type == ADDR_IF_BOOK ) {
-                               AddressBookFile *abf = ds->rawDataSource;
-                               cache = abf->addressCache;
-                       }
-                       else if( type == ADDR_IF_VCARD ) {
-                               VCardFile *vcf = ds->rawDataSource;
-                               cache = vcf->addressCache;
-                       }
-#ifdef USE_JPILOT
-                       else if( type == ADDR_IF_JPILOT ) {
-                               JPilotFile *jpf = ds->rawDataSource;
-                               cache = jpf->addressCache;
-                       }
-#endif
-                       if( cache ) {
-                               index = cache->searchIndex;
-                               if( index == NULL ) {
-                                       continue;
-                               }
-                               if( index->invalid ) {
-                                       addrcache_build_index( cache );
-                               }
-
-                               listEMail = addrcindex_search( index, searchTerm );
-                               if( listEMail ) {
-                                       email = listEMail->data;
-                               }
-                               g_list_free( listEMail );
-                               if( email ) break;
-                       }
-               }
-       }
-       return email;
-}
-
-/*
- * End of Source.
- */
-
-
+* End of Source.
+*/
index 460daff..2c602c1 100644 (file)
@@ -28,7 +28,6 @@
 #include <glib.h>
 #include "addritem.h"
 #include "addrcache.h"
-#include "addrquery.h"
 
 #define ADDRESSBOOK_MAX_IFACE  4
 #define ADDRESSBOOK_INDEX_FILE "addrbook--index.xml"
@@ -57,8 +56,6 @@ struct _AddressIndex {
        gboolean dirtyFlag;
        GList *interfaceList;
        GHashTable *hashCache;
-       gboolean loadedFlag;
-       GList *searchOrder;
 };
 
 typedef struct _AddressInterface AddressInterface;
@@ -85,10 +82,6 @@ struct _AddressInterface {
        GList *(*getAllGroups)( void * );
        gchar *(*getName)( void * );
        void (*setAccessFlag)( void *, void * );
-       gboolean externalQuery;
-       gint searchOrder;
-       void (*startSearch)( void * );
-       void (*stopSearch)( void * );
 };
 
 typedef struct _AddressDataSource AddressDataSource;
@@ -106,8 +99,6 @@ void addrindex_set_file_name         ( AddressIndex *addrIndex,
                                          const gchar *value );
 void addrindex_set_dirty               ( AddressIndex *addrIndex,
                                          const gboolean value );
-gboolean addrindex_get_loaded          ( AddressIndex *addrIndex );
-
 GList *addrindex_get_interface_list    ( AddressIndex *addrIndex );
 void addrindex_free_index              ( AddressIndex *addrIndex );
 void addrindex_print_index             ( AddressIndex *addrIndex, FILE *stream );
@@ -153,22 +144,6 @@ gboolean addrindex_ds_get_readonly ( AddressDataSource *ds );
 GList *addrindex_ds_get_all_persons    ( AddressDataSource *ds );
 GList *addrindex_ds_get_all_groups     ( AddressDataSource *ds );
 
-/* Search support */
-gint addrindex_setup_search    ( AddressIndex *addrIndex,
-                                 const gchar *searchTerm,
-                                 const gpointer target,
-                                 AddrSearchCallbackFunc callBack );
-gboolean addrindex_start_search        ( AddressIndex *addrIndex,
-                                 const gint queryID );
-void addrindex_stop_search     ( AddressIndex *addrIndex,
-                                 const gint queryID );
-
-void addrindex_read_all                        ( AddressIndex *addrIndex );
-GList *addrindex_quick_search_list     ( AddressIndex *addrIndex,
-                                         const gchar *searchTerm );
-ItemEMail *addrindex_quick_search_single( AddressIndex *addrIndex,
-                                         const gchar *searchTerm );
-
 #endif /* __ADDRINDEX_H__ */
 
 /*
index db5c3df..8da644e 100644 (file)
@@ -903,10 +903,9 @@ void addritem_print_item_group( ItemGroup *group, FILE *stream ) {
        fprintf( stream, "\t***\n" );
 }
 
-/**
- * Create new address folder.
- * \return Initialized address folder object.
- */
+/*
+* Create new address folder.
+*/
 ItemFolder *addritem_create_item_folder( void ) {
        ItemFolder *folder;
        folder = g_new0( ItemFolder, 1 );
@@ -921,17 +920,14 @@ ItemFolder *addritem_create_item_folder( void ) {
        folder->listFolder = NULL;
        folder->listPerson = NULL;
        folder->listGroup = NULL;
-       folder->folderType = ADDRFOLDER_NONE;
-       folder->folderData = NULL;
        return folder;
 }
 
-/**
- * Copy address book folder. Note that only the folder and not its contents are
- * copied.
- * \param  item Folder to copy.
- * \return A copy of the folder, or <i>NULL</i> if null argument supplied.
- */
+/*
+* Copy address book folder.
+* Enter:  item Folder to copy.
+* Return: A copy of the folder. 
+*/
 ItemFolder *addritem_copy_item_folder( ItemFolder *item ) {
        ItemFolder *itemNew;
 
@@ -939,7 +935,6 @@ ItemFolder *addritem_copy_item_folder( ItemFolder *item ) {
        if( item ) {
                itemNew = addritem_create_item_folder();
                ADDRITEM_NAME(itemNew) = g_strdup( ADDRITEM_NAME(item) );
-               itemNew->folderType = item->folderType;
        }
        return itemNew;
 }
@@ -971,12 +966,11 @@ void addritem_folder_set_remarks( ItemFolder *folder, const gchar *value ) {
        folder->remarks = mgu_replace_string( folder->remarks, value );
 }
 
-/**
- * Free address folder. Note: this does not free up the lists of children
- * (folders, groups and person). This should be done prior to calling this
- * function.
- * \param folder Folder to free.
- */
+/*
+* Free address folder. Note: this does not free up the lists of children
+* (folders, groups and person). This should be done prior to calling this
+* function.
+*/
 void addritem_free_item_folder( ItemFolder *folder ) {
        g_return_if_fail( folder != NULL );
 
@@ -998,8 +992,6 @@ void addritem_free_item_folder( ItemFolder *folder ) {
        folder->listFolder = NULL;
        folder->listGroup = NULL;
        folder->listPerson = NULL;
-       folder->folderType = ADDRFOLDER_NONE;
-       folder->folderData = NULL;
 
        g_free( folder );
 }
@@ -1107,7 +1099,6 @@ void addritem_print_item_folder( ItemFolder *folder, FILE *stream ) {
        fprintf( stream, "\tsub: %d\n", ADDRITEM_SUBTYPE(folder) );
        fprintf( stream, "\tnam: '%s'\n", ADDRITEM_NAME(folder) );
        fprintf( stream, "\trem: '%s'\n", folder->remarks );
-       fprintf( stream, "\ttyp: %d\n", folder->folderType );
        fprintf( stream, "\t---\n" );
        parent = ( ItemFolder * ) ADDRITEM_PARENT(folder);
        if( parent ) {
@@ -1375,42 +1366,6 @@ GList *addritem_folder_path( const ItemFolder *folder, const gboolean seq ) {
        return list;
 }
 
-/**
- * Format E-Mail address.
- * \param email EMail item to format.
- * \return Formatted string. Should be freed after use.
- */
-gchar *addritem_format_email( ItemEMail *email ) {
-       gchar *address;
-       gchar *name;
-       ItemPerson *person;
-
-       address = NULL;
-       name = NULL;
-       if( ADDRITEM_NAME( email ) ) {
-               if( strlen( ADDRITEM_NAME( email ) ) ) {
-                       name = ADDRITEM_NAME( email );
-               }
-       }
-       if( ! name ) {
-               person = ( ItemPerson * ) ADDRITEM_PARENT( email );
-               name = ADDRITEM_NAME( person );
-       }
-
-       if( name ) {
-               if( strchr_with_skip_quote( name, '"', ',' ) ) {
-                       address = g_strdup_printf( "\"%s\" <%s>", name, email->address );
-               }
-               else {
-                       address = g_strdup_printf( "%s <%s>", name, email->address );
-               }
-       }
-       else {
-               address = g_strdup_printf( "%s", email->address );
-       }
-       return address;
-}
-
 /*
 * End of Source.
 */
index 58c2e9f..df4ca39 100644 (file)
@@ -45,14 +45,6 @@ typedef enum {
        ITEMTYPE_DATASOURCE
 } ItemObjectType;
 
-typedef enum {
-       ADDRFOLDER_NONE,
-       ADDRFOLDER_ROOT,
-       ADDRFOLDER_REGULAR,
-       ADDRFOLDER_CATEGORY,
-       ADDRFOLDER_LDAP_QUERY
-} AddressFolderType;
-
 typedef struct _AddrItemObject AddrItemObject;
 struct _AddrItemObject {
        ItemObjectType type;
@@ -97,8 +89,6 @@ struct _ItemFolder {
        GList    *listFolder;   /* List of contained (child) folders */
        GList    *listPerson;   /* List of contained persons */
        GList    *listGroup;    /* List of contained (child) groups */
-       AddressFolderType folderType;   /* Folder type */
-       gpointer *folderData;           /* Pointer to folder's data */
 };
 
 typedef struct _ItemGroup ItemGroup;
@@ -192,6 +182,5 @@ ItemEMail *addritem_move_email_after        ( ItemPerson *person,
 void addritem_parse_first_last         ( ItemPerson *person );
 GList *addritem_folder_path            ( const ItemFolder *folder,
                                          const gboolean seq );
-gchar *addritem_format_email           ( ItemEMail *email );
 
 #endif /* __ADDRITEM_H__ */
index c6da1f1..584b9bf 100644 (file)
@@ -1030,7 +1030,6 @@ ItemPerson *addressbook_edit_person( AddressBookFile *abf, ItemFolder *parent, I
                g_free( name );
        }
        g_free( cn );
-       addrbook_invalidate( abf );
 
        gtk_clist_clear( GTK_CLIST(personeditdlg.clist_email) );
        gtk_clist_clear( GTK_CLIST(personeditdlg.clist_attrib) );
index aaf3d35..9a21375 100644 (file)
@@ -482,7 +482,6 @@ ItemGroup *addressbook_edit_group( AddressBookFile *abf, ItemFolder *parent, Ite
        name = gtk_editable_get_chars( GTK_EDITABLE(groupeditdlg.entry_name), 0, -1 );
        addritem_group_set_name( group, name );
        g_free( name );
-       addrbook_invalidate( abf );
 
        listEMail = NULL;
        return group;
@@ -526,7 +525,6 @@ ItemFolder *addressbook_edit_folder( AddressBookFile *abf, ItemFolder *parent, I
        }
        addritem_folder_set_name( folder, name );
        g_free( name );
-       addrbook_invalidate( abf );
        return folder;
 }
 
index 212c01b..2e5e552 100644 (file)
 #include "prefs_common.h"
 #include "addressitem.h"
 #include "mgutils.h"
-#include "ldapserver.h"
-#include "ldapctrl.h"
-#include "ldaputil.h"
+#include "syldap.h"
 #include "editldap_basedn.h"
 #include "manage_window.h"
 #include "gtkutils.h"
 
-#define PAGE_BASIC      0
-#define PAGE_SEARCH     1
-#define PAGE_EXTENDED   2
-
 #define ADDRESSBOOK_GUESS_LDAP_NAME    "MyServer"
 #define ADDRESSBOOK_GUESS_LDAP_SERVER  "localhost"
 
@@ -74,52 +68,10 @@ static struct _LDAPEdit {
        GtkWidget *spinbtn_timeout;
        GtkWidget *entry_bindDN;
        GtkWidget *entry_bindPW;
-       GtkWidget *spinbtn_maxentry;
        GtkWidget *entry_criteria;
-       GtkWidget *spinbtn_queryage;
-       GtkWidget *check_dynsearch;
+       GtkWidget *spinbtn_maxentry;
 } ldapedit;
 
-/**
- * Parse out individual attribute names from criteria string.
- * \param criteria Criteria string.
- * \ctl   Control object.
- */
-static gboolean editldap_validate_criteria( gchar *criteria ) {
-       gchar *ptr;
-       gchar **splitStr;
-       gint i;
-       gboolean errorFlag;
-
-       errorFlag = TRUE;
-
-       /* Replace delimiters with spaces */
-       ptr = criteria;
-       while( *ptr ) {
-               if( *ptr == ',' || *ptr == ';' || *ptr == '|' )
-                       *ptr = ' ';
-               ptr++;
-       }
-
-       /* Parse string */
-       splitStr = g_strsplit( criteria, " ", 0 );
-       i = 0;
-       while( TRUE ) {
-               if( splitStr[i] ) {
-                       if( *splitStr[i] ) {
-                               errorFlag = FALSE;
-                               break;
-                       }
-               }
-               else {
-                       break;
-               }
-               i++;
-       }
-       g_strfreev( splitStr );
-       return errorFlag;
-}
-
 /*
 * Edit functions.
 */
@@ -127,67 +79,14 @@ static void edit_ldap_status_show( gchar *msg ) {
        if( ldapedit.statusbar != NULL ) {
                gtk_statusbar_pop( GTK_STATUSBAR(ldapedit.statusbar), ldapedit.status_cid );
                if( msg ) {
-                       gtk_statusbar_push( GTK_STATUSBAR(ldapedit.statusbar),
-                               ldapedit.status_cid, msg );
-               }
-       }
-}
-
-static gboolean edit_ldap_validate( void ) {
-       gchar *str;
-       gboolean errorFlag;
-       gint page;
-
-       errorFlag = FALSE;
-       str = gtk_editable_get_chars(
-                       GTK_EDITABLE(ldapedit.entry_name), 0, -1 );
-       if( *str == '\0' ) {
-               page = PAGE_BASIC;
-               gtk_widget_grab_focus( ldapedit.entry_name );
-               edit_ldap_status_show( _( "A Name must be supplied." ) );
-               errorFlag = TRUE;
-       }
-       g_free( str );
-
-       if( ! errorFlag ) {
-               str = gtk_editable_get_chars(
-                               GTK_EDITABLE(ldapedit.entry_server), 0, -1 );
-               if( *str == '\0' ) {
-                       page = PAGE_BASIC;
-                       gtk_widget_grab_focus( ldapedit.entry_server );
-                       edit_ldap_status_show(
-                               _( "A Hostname must be supplied for the server." ) );
-                       errorFlag = TRUE;
-               }
-               g_free( str );
-       }
-
-       if( ! errorFlag ) {
-               str = gtk_editable_get_chars(
-                               GTK_EDITABLE(ldapedit.entry_criteria), 0, -1 );
-               if( editldap_validate_criteria( str ) ) {
-                       page = PAGE_SEARCH;
-                       gtk_widget_grab_focus( ldapedit.entry_criteria );
-                       edit_ldap_status_show(
-                               _( "At least one LDAP search attribute should be supplied." ) );
-                       errorFlag = TRUE;
+                       gtk_statusbar_push( GTK_STATUSBAR(ldapedit.statusbar), ldapedit.status_cid, msg );
                }
-               g_free( str );
-       }
-
-       /* Switch to page with error */
-       if( errorFlag ) {
-               gtk_notebook_set_page( GTK_NOTEBOOK(ldapedit.notebook), page );
        }
-
-       return errorFlag;
 }
 
 static void edit_ldap_ok( GtkWidget *widget, gboolean *cancelled ) {
-       if( ! edit_ldap_validate() ) {
-               *cancelled = FALSE;
-               gtk_main_quit();
-       }
+       *cancelled = FALSE;
+       gtk_main_quit();
 }
 
 static void edit_ldap_cancel( GtkWidget *widget, gboolean *cancelled ) {
@@ -208,6 +107,10 @@ static void edit_ldap_key_pressed( GtkWidget *widget, GdkEventKey *event, gboole
        }
 }
 
+static void edit_ldap_switch_page( GtkWidget *widget ) {
+       edit_ldap_status_show( "" );
+}
+
 static void edit_ldap_server_check( void ) {
        gchar *sHost, *sBind, *sPass;
        gint iPort, iTime;
@@ -215,7 +118,6 @@ static void edit_ldap_server_check( void ) {
        gchar *sBaseDN = NULL;
        gint iBaseDN = 0;
        gboolean flg;
-       GList *baseDN = NULL;
 
        edit_ldap_status_show( "" );
        flg = FALSE;
@@ -229,9 +131,9 @@ static void edit_ldap_server_check( void ) {
        g_strchomp( sPass ); g_strchug( sPass );
        if( *sHost != '\0' ) {
                /* Test connection to server */
-               if( ldaputil_test_connect( sHost, iPort ) ) {
+               if( syldap_test_connect_s( sHost, iPort ) ) {
                        /* Attempt to read base DN */
-                       baseDN = ldaputil_read_basedn( sHost, iPort, sBind, sPass, iTime );
+                       GList *baseDN = syldap_read_basedn_s( sHost, iPort, sBind, sPass, iTime );
                        if( baseDN ) {
                                GList *node = baseDN;
                                while( node ) {
@@ -294,7 +196,7 @@ static void edit_ldap_basedn_select( void ) {
 }
 
 static void edit_ldap_search_reset( void ) {
-       gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), LDAPCTL_DFL_ATTR_LIST );
+       gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), SYLDAP_DFL_CRITERIA );
 }
 
 static void addressbook_edit_ldap_dialog_create( gboolean *cancelled ) {
@@ -321,6 +223,7 @@ static void addressbook_edit_ldap_dialog_create( gboolean *cancelled ) {
                           cancelled);
 
        vbox = gtk_vbox_new( FALSE, 6 );
+       /* gtk_container_set_border_width(GTK_CONTAINER(vbox), BORDER_WIDTH); */
        gtk_widget_show( vbox );
        gtk_container_add( GTK_CONTAINER( window ), vbox );
 
@@ -346,6 +249,8 @@ static void addressbook_edit_ldap_dialog_create( gboolean *cancelled ) {
                           GTK_SIGNAL_FUNC(edit_ldap_ok), cancelled);
        gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
                           GTK_SIGNAL_FUNC(edit_ldap_cancel), cancelled);
+       gtk_signal_connect(GTK_OBJECT(notebook), "switch_page",
+                          GTK_SIGNAL_FUNC(edit_ldap_switch_page), NULL );
 
        gtk_widget_show_all(vbox);
 
@@ -354,12 +259,10 @@ static void addressbook_edit_ldap_dialog_create( gboolean *cancelled ) {
        ldapedit.ok_btn     = ok_btn;
        ldapedit.cancel_btn = cancel_btn;
        ldapedit.statusbar  = statusbar;
-       ldapedit.status_cid =
-               gtk_statusbar_get_context_id(
-                       GTK_STATUSBAR(statusbar), "Edit LDAP Server Dialog" );
+       ldapedit.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit LDAP Server Dialog" );
 }
 
-static void addressbook_edit_ldap_page_basic( gint pageNum, gchar *pageLbl ) {
+void addressbook_edit_ldap_page_basic( gint pageNum, gchar *pageLbl ) {
        GtkWidget *vbox;
        GtkWidget *table;
        GtkWidget *label;
@@ -376,6 +279,7 @@ static void addressbook_edit_ldap_page_basic( gint pageNum, gchar *pageLbl ) {
        vbox = gtk_vbox_new( FALSE, 8 );
        gtk_widget_show( vbox );
        gtk_container_add( GTK_CONTAINER( ldapedit.notebook ), vbox );
+       /* gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH ); */
 
        label = gtk_label_new( pageLbl );
        gtk_widget_show( label );
@@ -396,8 +300,7 @@ static void addressbook_edit_ldap_page_basic( gint pageNum, gchar *pageLbl ) {
        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
 
        entry_name = gtk_entry_new();
-       gtk_table_attach(GTK_TABLE(table), entry_name, 1, 2, top, (top + 1),
-               GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+       gtk_table_attach(GTK_TABLE(table), entry_name, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
 
        /* Next row */
        ++top;
@@ -406,8 +309,7 @@ static void addressbook_edit_ldap_page_basic( gint pageNum, gchar *pageLbl ) {
        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
 
        entry_server = gtk_entry_new();
-       gtk_table_attach(GTK_TABLE(table), entry_server, 1, 2, top, (top + 1),
-               GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+       gtk_table_attach(GTK_TABLE(table), entry_server, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
 
        /* Next row */
        ++top;
@@ -421,8 +323,7 @@ static void addressbook_edit_ldap_page_basic( gint pageNum, gchar *pageLbl ) {
        gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_port, FALSE, FALSE, 0);
        gtk_widget_set_usize (spinbtn_port, 64, -1);
        gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_port), TRUE);
-       gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1),
-               GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+       gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
 
        check_btn = gtk_button_new_with_label( _(" Check Server "));
        gtk_table_attach(GTK_TABLE(table), check_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
@@ -434,19 +335,16 @@ static void addressbook_edit_ldap_page_basic( gint pageNum, gchar *pageLbl ) {
        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
 
        entry_baseDN = gtk_entry_new();
-       gtk_table_attach(GTK_TABLE(table), entry_baseDN, 1, 2, top, (top + 1),
-               GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+       gtk_table_attach(GTK_TABLE(table), entry_baseDN, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
 
        lookdn_btn = gtk_button_new_with_label( _(" ... "));
        gtk_table_attach(GTK_TABLE(table), lookdn_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
 
-       /* Signal handlers */
        gtk_signal_connect(GTK_OBJECT(check_btn), "clicked",
                           GTK_SIGNAL_FUNC(edit_ldap_server_check), NULL);
        gtk_signal_connect(GTK_OBJECT(lookdn_btn), "clicked",
                           GTK_SIGNAL_FUNC(edit_ldap_basedn_select), NULL);
 
-       /* Done */
        gtk_widget_show_all(vbox);
 
        ldapedit.entry_name   = entry_name;
@@ -455,21 +353,25 @@ static void addressbook_edit_ldap_page_basic( gint pageNum, gchar *pageLbl ) {
        ldapedit.entry_baseDN = entry_baseDN;
 }
 
-static void addressbook_edit_ldap_page_search( gint pageNum, gchar *pageLbl ) {
+void addressbook_edit_ldap_page_extended( gint pageNum, gchar *pageLbl ) {
        GtkWidget *vbox;
        GtkWidget *table;
        GtkWidget *label;
+       GtkWidget *entry_bindDN;
+       GtkWidget *entry_bindPW;
        GtkWidget *entry_criteria;
        GtkWidget *hbox_spin;
-       GtkObject *spinbtn_queryage_adj;
-       GtkWidget *spinbtn_queryage;
-       GtkWidget *check_dynsearch;
+       GtkObject *spinbtn_timeout_adj;
+       GtkWidget *spinbtn_timeout;
+       GtkObject *spinbtn_maxentry_adj;
+       GtkWidget *spinbtn_maxentry;
        GtkWidget *reset_btn;
        gint top;
 
        vbox = gtk_vbox_new( FALSE, 8 );
        gtk_widget_show( vbox );
        gtk_container_add( GTK_CONTAINER( ldapedit.notebook ), vbox );
+       /* gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH ); */
 
        label = gtk_label_new( pageLbl );
        gtk_widget_show( label );
@@ -485,90 +387,24 @@ static void addressbook_edit_ldap_page_search( gint pageNum, gchar *pageLbl ) {
 
        /* First row */
        top = 0;
-       label = gtk_label_new(_("Search Attributes"));
+       label = gtk_label_new(_("Search Criteria"));
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
 
        entry_criteria = gtk_entry_new();
-       gtk_table_attach(GTK_TABLE(table), entry_criteria, 1, 2, top, (top + 1),
-               GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+       gtk_table_attach(GTK_TABLE(table), entry_criteria, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
 
-       reset_btn = gtk_button_new_with_label( _(" Defaults "));
+       reset_btn = gtk_button_new_with_label( _(" Reset "));
        gtk_table_attach(GTK_TABLE(table), reset_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
 
        /* Next row */
        ++top;
-       label = gtk_label_new(_("Max Query Age (secs)"));
-       gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
-       gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-
-       hbox_spin = gtk_hbox_new (FALSE, 8);
-       spinbtn_queryage_adj = gtk_adjustment_new(
-               LDAPCTL_DFL_QUERY_AGE, 1, LDAPCTL_MAX_QUERY_AGE, 10, 1000, 1000 );
-       spinbtn_queryage = gtk_spin_button_new(GTK_ADJUSTMENT (spinbtn_queryage_adj), 1, 0);
-       gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_queryage, FALSE, FALSE, 0);
-       gtk_widget_set_usize (spinbtn_queryage, 64, -1);
-       gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_queryage), TRUE);
-       gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1),
-               GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
-
-       /* Next row */
-       ++top;
-       check_dynsearch = gtk_check_button_new_with_label(
-                               _("Include server in dynamic search") );
-       gtk_table_attach(GTK_TABLE(table), check_dynsearch, 1, 3, top, (top + 1),
-               GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
-
-       /* Signal handlers */
-       gtk_signal_connect(GTK_OBJECT(reset_btn), "clicked",
-                          GTK_SIGNAL_FUNC(edit_ldap_search_reset), NULL);
-
-       /* Done */
-       gtk_widget_show_all(vbox);
-
-       ldapedit.entry_criteria   = entry_criteria;
-       ldapedit.spinbtn_queryage = spinbtn_queryage;
-       ldapedit.check_dynsearch  = check_dynsearch;
-}
-
-static void addressbook_edit_ldap_page_extended( gint pageNum, gchar *pageLbl ) {
-       GtkWidget *vbox;
-       GtkWidget *table;
-       GtkWidget *label;
-       GtkWidget *entry_bindDN;
-       GtkWidget *entry_bindPW;
-       GtkWidget *hbox_spin;
-       GtkObject *spinbtn_timeout_adj;
-       GtkWidget *spinbtn_timeout;
-       GtkObject *spinbtn_maxentry_adj;
-       GtkWidget *spinbtn_maxentry;
-       gint top;
-
-       vbox = gtk_vbox_new( FALSE, 8 );
-       gtk_widget_show( vbox );
-       gtk_container_add( GTK_CONTAINER( ldapedit.notebook ), vbox );
-
-       label = gtk_label_new( pageLbl );
-       gtk_widget_show( label );
-       gtk_notebook_set_tab_label(
-               GTK_NOTEBOOK( ldapedit.notebook ),
-               gtk_notebook_get_nth_page( GTK_NOTEBOOK( ldapedit.notebook ), pageNum ), label );
-
-       table = gtk_table_new( LDAPEDIT_TABLE_ROWS, LDAPEDIT_TABLE_COLS, FALSE);
-       gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
-       gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
-       gtk_table_set_row_spacings(GTK_TABLE(table), 8);
-       gtk_table_set_col_spacings(GTK_TABLE(table), 8);
-
-       /* Next row */
-       top = 0;
        label = gtk_label_new(_("Bind DN"));
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
 
        entry_bindDN = gtk_entry_new();
-       gtk_table_attach(GTK_TABLE(table), entry_bindDN, 1, 2, top, (top + 1),
-               GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+       gtk_table_attach(GTK_TABLE(table), entry_bindDN, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
 
        /* Next row */
        ++top;
@@ -577,8 +413,7 @@ static void addressbook_edit_ldap_page_extended( gint pageNum, gchar *pageLbl )
        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
 
        entry_bindPW = gtk_entry_new();
-       gtk_table_attach(GTK_TABLE(table), entry_bindPW, 1, 2, top, (top + 1),
-               GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+       gtk_table_attach(GTK_TABLE(table), entry_bindPW, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
 
        /* Next row */
        ++top;
@@ -592,8 +427,7 @@ static void addressbook_edit_ldap_page_extended( gint pageNum, gchar *pageLbl )
        gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_timeout, FALSE, FALSE, 0);
        gtk_widget_set_usize (spinbtn_timeout, 64, -1);
        gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_timeout), TRUE);
-       gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1),
-               GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+       gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
 
        /* Next row */
        ++top;
@@ -607,12 +441,14 @@ static void addressbook_edit_ldap_page_extended( gint pageNum, gchar *pageLbl )
        gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_maxentry, FALSE, FALSE, 0);
        gtk_widget_set_usize (spinbtn_maxentry, 64, -1);
        gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_maxentry), TRUE);
-       gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1),
-               GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+       gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+       gtk_signal_connect(GTK_OBJECT(reset_btn), "clicked",
+                          GTK_SIGNAL_FUNC(edit_ldap_search_reset), NULL);
 
-       /* Done */
        gtk_widget_show_all(vbox);
 
+       ldapedit.entry_criteria   = entry_criteria;
        ldapedit.entry_bindDN     = entry_bindDN;
        ldapedit.entry_bindPW     = entry_bindPW;
        ldapedit.spinbtn_timeout  = spinbtn_timeout;
@@ -623,7 +459,6 @@ static void addressbook_edit_ldap_create( gboolean *cancelled ) {
        gint page = 0;
        addressbook_edit_ldap_dialog_create( cancelled );
        addressbook_edit_ldap_page_basic( page++, _( "Basic" ) );
-       addressbook_edit_ldap_page_search( page++, _( "Search" ) );
        addressbook_edit_ldap_page_extended( page++, _( "Extended" ) );
        gtk_widget_show_all( ldapedit.window );
 }
@@ -661,155 +496,17 @@ gint edit_ldap_get_optmenu( GtkOptionMenu *optmenu ) {
        return GPOINTER_TO_INT(gtk_object_get_user_data(GTK_OBJECT(menuitem)));
 }
 
-/**
- * Format criteria list for display.
- * \param ctl Control object.
- * \return Formatted string, or <i>NULL</i> if no attributes found.
- */
-static gchar *editldap_build_criteria_list( const LdapControl *ctl ) {
-       gchar *str = NULL;
-       gchar *tmp = NULL;
-       GList *node;
-
-       node = ldapctl_get_criteria_list( ctl );
-       while( node ) {
-               gchar *attr = node->data;
-               if( str ) {
-                       tmp = g_strdup_printf( "%s, %s", str, attr );
-                       g_free( str );
-                       str = tmp;
-                       tmp = NULL;
-               }
-               else {
-                       str = g_strdup( attr );
-               }
-               node = g_list_next( node );
-       }
-
-       return str;
-}
-
-/**
- * Parse out individual attribute names from criteria string.
- * \param criteria Criteria string.
- * \ctl   Control object.
- */
-static void editldap_parse_criteria( gchar *criteria, LdapControl *ctl ) {
-       gchar *ptr;
-       gchar **splitStr;
-       gint i;
-
-       /* Replace delimiters with spaces */
-       ptr = criteria;
-       while( *ptr ) {
-               if( *ptr == ',' || *ptr == ';' || *ptr == '|' )
-                       *ptr = ' ';
-               ptr++;
-       }
-
-       /* Parse string */
-       ldapctl_criteria_list_clear( ctl );
-       splitStr = g_strsplit( criteria, " ", 0 );
-       i = 0;
-       while( TRUE ) {
-               if( splitStr[i] ) {
-                       if( *splitStr[i] ) {
-                               ldapctl_criteria_list_add( ctl, splitStr[i] );
-                       }
-               }
-               else {
-                       break;
-               }
-               i++;
-       }
-       g_strfreev( splitStr );
-}
-
-/**
- * Clear entry fields to reasonable defaults (for a new server entry).
- */
-static void edit_ldap_clear_fields( void ) {
-       gtk_entry_set_text(
-               GTK_ENTRY(ldapedit.entry_name), ADDRESSBOOK_GUESS_LDAP_NAME );
-       gtk_entry_set_text(
-               GTK_ENTRY(ldapedit.entry_server), ADDRESSBOOK_GUESS_LDAP_SERVER );
-       gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), "");
-       gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindDN), "");
-       gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindPW), "");
-       gtk_spin_button_set_value(
-               GTK_SPIN_BUTTON( ldapedit.spinbtn_port ), LDAPCTL_DFL_PORT );
-       gtk_spin_button_set_value(
-               GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ), LDAPCTL_DFL_TIMEOUT );
-       gtk_spin_button_set_value(
-               GTK_SPIN_BUTTON( ldapedit.spinbtn_maxentry ), LDAPCTL_DFL_TIMEOUT );
-       gtk_entry_set_text(
-               GTK_ENTRY(ldapedit.entry_criteria), LDAPCTL_DFL_ATTR_LIST );
-       gtk_spin_button_set_value(
-               GTK_SPIN_BUTTON(ldapedit.spinbtn_queryage), LDAPCTL_DFL_QUERY_AGE );
-       gtk_toggle_button_set_active(
-               GTK_TOGGLE_BUTTON( ldapedit.check_dynsearch), TRUE );
-}
-
-/**
- * Load entry fields from server control data.
- * \param server Server object.
- */
-static void edit_ldap_set_fields( LdapServer *server ) {
-       LdapControl *ctl;
-       gchar *crit;
-
-       if( ldapsvr_get_name( server ) )
-               gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_name),
-               ldapsvr_get_name( server ) );
-
-       ctl = server->control;
-       if( ctl->hostName )
-               gtk_entry_set_text(
-                       GTK_ENTRY(ldapedit.entry_server), ctl->hostName);
-       if( ctl->baseDN )
-               gtk_entry_set_text(
-                       GTK_ENTRY(ldapedit.entry_baseDN), ctl->baseDN );
-       if( ctl->bindDN )
-               gtk_entry_set_text(
-                       GTK_ENTRY(ldapedit.entry_bindDN), ctl->bindDN );
-       if( ctl->bindPass )
-               gtk_entry_set_text(
-                       GTK_ENTRY(ldapedit.entry_bindPW), ctl->bindPass );
-       gtk_spin_button_set_value(
-               GTK_SPIN_BUTTON(ldapedit.spinbtn_port), ctl->port );
-       gtk_spin_button_set_value(
-               GTK_SPIN_BUTTON(ldapedit.spinbtn_timeout), ctl->timeOut );
-       gtk_spin_button_set_value(
-               GTK_SPIN_BUTTON(ldapedit.spinbtn_maxentry), ctl->maxEntries );
-
-       /* Format criteria */
-       crit = editldap_build_criteria_list( ctl );
-       if( crit ) {
-               gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), crit );
-               g_free( crit );
-       }
-       else {
-               gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), "" );
-       }
-       gtk_spin_button_set_value(
-               GTK_SPIN_BUTTON(ldapedit.spinbtn_queryage), ctl->maxQueryAge );
-       gtk_toggle_button_set_active(
-               GTK_TOGGLE_BUTTON( ldapedit.check_dynsearch), server->searchFlag );
-}
-
 AdapterDSource *addressbook_edit_ldap( AddressIndex *addrIndex, AdapterDSource *ads ) {
        static gboolean cancelled;
        gchar *sName, *sHost, *sBase, *sBind, *sPass, *sCrit;
-       gint iPort, iMaxE, iTime, iAge;
-       gboolean bSrch;
+       gint iPort, iMaxE, iTime;
        AddressDataSource *ds = NULL;
-       LdapServer *server = NULL;
-       LdapControl *ctl = NULL;
+       SyldapServer *server = NULL;
        gboolean fin;
 
        if (!ldapedit.window)
                addressbook_edit_ldap_create(&cancelled);
-       gtk_notebook_set_page( GTK_NOTEBOOK(ldapedit.notebook), PAGE_BASIC );
+       gtk_notebook_set_page( GTK_NOTEBOOK(ldapedit.notebook), 0 );
        gtk_widget_grab_focus(ldapedit.ok_btn);
        gtk_widget_grab_focus(ldapedit.entry_name);
        gtk_widget_show(ldapedit.window);
@@ -819,60 +516,72 @@ AdapterDSource *addressbook_edit_ldap( AddressIndex *addrIndex, AdapterDSource *
        if( ads ) {
                ds = ads->dataSource;
                server = ds->rawDataSource;
-               edit_ldap_set_fields( server );
-               gtk_window_set_title(
-                       GTK_WINDOW(ldapedit.window), _("Edit LDAP Server"));
+               if ( syldap_get_name( server ) )
+                       gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_name),
+                               syldap_get_name( server ) );
+               if (server->hostName)
+                       gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_server), server->hostName);
+               gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ), server->port );
+               gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ), server->timeOut );
+               if (server->baseDN)
+                       gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), server->baseDN);
+               if (server->searchCriteria)
+                       gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), server->searchCriteria);
+               if (server->bindDN)
+                       gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindDN), server->bindDN);
+               if (server->bindPass)
+                       gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindPW), server->bindPass);
+               gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_maxentry ), server->maxEntries );
+               gtk_window_set_title( GTK_WINDOW(ldapedit.window), _("Edit LDAP Server"));
        }
        else {
-               edit_ldap_clear_fields();
-               gtk_window_set_title(
-                       GTK_WINDOW(ldapedit.window), _("Add New LDAP Server"));
+               gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_name), ADDRESSBOOK_GUESS_LDAP_NAME );
+               gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_server), ADDRESSBOOK_GUESS_LDAP_SERVER );
+               gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ), SYLDAP_DFL_PORT );
+               gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ), SYLDAP_DFL_TIMEOUT );
+               gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), "");
+               gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), SYLDAP_DFL_CRITERIA );
+               gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindDN), "");
+               gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindPW), "");
+               gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_maxentry ), SYLDAP_MAX_ENTRIES );
+               gtk_window_set_title( GTK_WINDOW(ldapedit.window), _("Add New LDAP Server"));
        }
 
        gtk_main();
        gtk_widget_hide(ldapedit.window);
        if (cancelled == TRUE) return NULL;
 
+       fin = FALSE;
        sName = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_name), 0, -1 );
        sHost = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_server), 0, -1 );
+       iPort = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ) );
+       iTime = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ) );
        sBase = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_baseDN), 0, -1 );
        sCrit = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_criteria), 0, -1 );
        sBind = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindDN), 0, -1 );
        sPass = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindPW), 0, -1 );
-       iPort = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ) );
-       iTime = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ) );
        iMaxE = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_maxentry ) );
-       iAge  = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_queryage ) );
-       bSrch = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( ldapedit.check_dynsearch ) );
 
-       fin = FALSE;
        if( *sName == '\0' ) fin = TRUE;
        if( *sHost == '\0' ) fin = TRUE;
+       if( *sBase == '\0' ) fin = TRUE;
 
        if( ! fin ) {
-               /* Save changes */
                if( ! ads ) {
-                       /* New server */
-                       server = ldapsvr_create();
+                       server = syldap_create();
                        ds = addrindex_index_add_datasource( addrIndex, ADDR_IF_LDAP, server );
                        ads = addressbook_create_ds_adapter( ds, ADDR_LDAP, NULL );
                }
-               ctl = server->control;
                addressbook_ads_set_name( ads, sName );
-               ldapsvr_set_name( server, sName );
-               ldapsvr_set_search_flag( server, bSrch );
-               ldapctl_set_host( ctl, sHost );
-               ldapctl_set_base_dn( ctl, sBase );
-               ldapctl_set_bind_dn( ctl, sBind );
-               ldapctl_set_bind_password( ctl, sPass );
-               ldapctl_set_port( ctl, iPort );
-               ldapctl_set_max_entries( ctl, iMaxE );
-               ldapctl_set_timeout( ctl, iTime );
-               ldapctl_set_max_query_age( ctl, iAge );
-
-               /* Save attributes */
-               editldap_parse_criteria( sCrit, ctl );
-
+               syldap_set_name( server, sName );
+               syldap_set_host( server, sHost );
+               syldap_set_port( server, iPort );
+               syldap_set_base_dn( server, sBase );
+               syldap_set_bind_dn( server, sBind );
+               syldap_set_bind_password( server, sPass );
+               syldap_set_search_criteria( server, sCrit );
+               syldap_set_max_entries( server, iMaxE );
+               syldap_set_timeout( server, iTime );
        }
        g_free( sName );
        g_free( sHost );
index 6657fe5..6cb32e9 100644 (file)
@@ -41,7 +41,7 @@
 
 #include "intl.h"
 #include "prefs_common.h"
-#include "ldaputil.h"
+#include "syldap.h"
 #include "mgutils.h"
 #include "gtkutils.h"
 #include "manage_window.h"
@@ -237,21 +237,16 @@ static void edit_ldap_bdn_create(void) {
        ldapedit_basedn.ok_btn     = ok_btn;
        ldapedit_basedn.cancel_btn = cancel_btn;
        ldapedit_basedn.statusbar  = statusbar;
-       ldapedit_basedn.status_cid =
-               gtk_statusbar_get_context_id(
-                       GTK_STATUSBAR(statusbar), "Edit LDAP Select Base DN" );
+       ldapedit_basedn.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit LDAP Select Base DN" );
 }
 
-void edit_ldap_bdn_load_data(
-       const gchar *hostName, const gint iPort, const gint tov,
-       const gchar* bindDN, const gchar *bindPW )
-{
+void edit_ldap_bdn_load_data( const gchar *hostName, const gint iPort, const gint tov, const gchar* bindDN,
+              const gchar *bindPW ) {
        gchar *sHost;
        gchar *sMsg = NULL;
        gchar sPort[20];
        gboolean flgConn;
        gboolean flgDN;
-       GList *baseDN = NULL;
 
        edit_ldap_bdn_status_show( "" );
        gtk_clist_clear(GTK_CLIST(ldapedit_basedn.basedn_list));
@@ -263,9 +258,9 @@ void edit_ldap_bdn_load_data(
        gtk_label_set_text(GTK_LABEL(ldapedit_basedn.port_label), sPort);
        if( *sHost != '\0' ) {
                /* Test connection to server */
-               if( ldaputil_test_connect( sHost, iPort ) ) {
+               if( syldap_test_connect_s( sHost, iPort ) ) {
                        /* Attempt to read base DN */
-                       baseDN = ldaputil_read_basedn( sHost, iPort, bindDN, bindPW, tov );
+                       GList *baseDN = syldap_read_basedn_s( sHost, iPort, bindDN, bindPW, tov );
                        if( baseDN ) {
                                GList *node = baseDN;
                                gchar *text[2] = { NULL, NULL };
index 4797a04..5d86f87 100644 (file)
@@ -165,10 +165,6 @@ JPilotFile *jpilot_create() {
        pilotFile->labelInd = NULL;
        pilotFile->havePC3 = FALSE;
        pilotFile->pc3ModifyTime = 0;
-
-       /* We want to use an address completion index */
-       addrcache_use_index( pilotFile->addressCache, TRUE );
-
        return pilotFile;
 }
 
@@ -408,6 +404,7 @@ void jpilot_free( JPilotFile *pilotFile ) {
        jpilot_clear_custom_labels( pilotFile );
 
        /* Clear cache */
+       addrcache_clear( pilotFile->addressCache );
        addrcache_free( pilotFile->addressCache );
 
        /* Free internal stuff */
@@ -1615,9 +1612,6 @@ gint jpilot_read_data( JPilotFile *pilotFile ) {
                        if( pilotFile->retVal == MGU_SUCCESS ) {
                                pilotFile->addressCache->modified = FALSE;
                                pilotFile->addressCache->dataRead = TRUE;
-
-                               /* Build address completion index */
-                               addrcache_build_index( pilotFile->addressCache );
                        }
                }
        }
index 1cb597c..4407f81 100644 (file)
@@ -53,10 +53,6 @@ VCardFile *vcard_create() {
        cardFile->file = NULL;
        cardFile->path = NULL;
        cardFile->bufptr = cardFile->buffer;
-
-       /* We want to use an address completion index */
-       addrcache_use_index( cardFile->addressCache, TRUE );
-
        return cardFile;
 }
 
@@ -151,6 +147,7 @@ void vcard_free( VCardFile *cardFile ) {
        if( cardFile->file ) fclose( cardFile->file );
 
        /* Clear cache */
+       addrcache_clear( cardFile->addressCache );
        addrcache_free( cardFile->addressCache );
 
        /* Free internal stuff */
@@ -560,9 +557,6 @@ gint vcard_read_data( VCardFile *cardFile ) {
                        addrcache_mark_file( cardFile->addressCache, cardFile->path );
                        cardFile->addressCache->modified = FALSE;
                        cardFile->addressCache->dataRead = TRUE;
-
-                       /* Build address completion index */
-                       addrcache_build_index( cardFile->addressCache );
                }
        }
        return cardFile->retVal;