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 \
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 \
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.
*/
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
#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__ */
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;
}
g_return_if_fail(book != NULL);
/* Clear cache */
+ addrcache_clear(book->addressCache);
addrcache_free(book->addressCache);
/* Free up internal objects */
{
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 ); */
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;
}
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;
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.
-*/
-
-
const gchar *remarks );
gchar *addrbook_guess_next_file ( AddressBookFile *book );
-void addrbook_invalidate ( AddressBookFile *book );
#endif /* __ADDRBOOK_H__ */
/*
* Create new address cache.
*/
-AddressCache *addrcache_create(void) {
+AddressCache *addrcache_create() {
AddressCache *cache;
gint t;
cache->rootFolder = addritem_create_item_folder();
cache->rootFolder->isRoot = TRUE;
ADDRITEM_PARENT(cache->rootFolder) = NULL;
-
- cache->searchIndex = NULL;
-
return cache;
}
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 );
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 );
cache->cacheID = NULL;
g_free( cache->name );
cache->name = NULL;
-
g_free( cache );
}
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.
*/
-
-
#include <stdio.h>
#include <glib.h>
#include "addritem.h"
-#include "addrcindex.h"
/* Address cache */
typedef struct _AddressCache AddressCache;
gboolean dirtyFlag;
gboolean accessFlag;
gchar *name;
- AddrCacheIndex *searchIndex;
};
/* Function prototypes */
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__ */
#ifdef USE_LDAP
#include <pthread.h>
-#include "ldapserver.h"
+#include "syldap.h"
#include "editldap.h"
#define ADDRESSBOOK_LDAP_BUSYMSG "Busy"
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 */
}
}
-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];
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 ) {
/* 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 {
}
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 );
}
/*
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 );
* 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;
}
}
-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;
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), "" );
}
}
}
-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;
}
/*
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
#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__ */
#include "addrbook.h"
#include "addrindex.h"
#include "xml.h"
-#include "addrquery.h"
#ifndef DEV_STANDALONE
#include "prefs_gtk.h"
#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")
#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;
};
/*
- * 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;
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;
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;
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;
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;
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 );
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 );
#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 );
}
}
}
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 ) {
}
}
-/**
- * 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 );
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;
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;
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 );
}
/*
- * 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;
}
/*
- * 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 );
}
/*
- * 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 );
}
/*
- * Create a new address index.
- * \return Initialized address index object.
- */
+* Create new object.
+*/
AddressIndex *addrindex_create_index( void ) {
AddressIndex *addrIndex = g_new0( AddressIndex, 1 );
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;
addrIndex->conversionError = FALSE;
addrIndex->lastType = ADDR_IF_NONE;
addrIndex->dirtyFlag = FALSE;
-
- /* Free up interfaces */
node = addrIndex->interfaceList;
while( node ) {
AddressInterface *iface = node->data;
}
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 )
{
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 )
{
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 )
{
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 )
{
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 )
{
* 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 );
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 );
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;
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;
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
* 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 );
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 );
}
}
}
+ 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;
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;
}
}
xml_close_file( file );
- addrindex_build_search_order( addrIndex );
-
return addrIndex->retVal;
}
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 );
}
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.
+*/
#include <glib.h>
#include "addritem.h"
#include "addrcache.h"
-#include "addrquery.h"
#define ADDRESSBOOK_MAX_IFACE 4
#define ADDRESSBOOK_INDEX_FILE "addrbook--index.xml"
gboolean dirtyFlag;
GList *interfaceList;
GHashTable *hashCache;
- gboolean loadedFlag;
- GList *searchOrder;
};
typedef struct _AddressInterface 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;
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 );
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__ */
/*
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 );
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;
if( item ) {
itemNew = addritem_create_item_folder();
ADDRITEM_NAME(itemNew) = g_strdup( ADDRITEM_NAME(item) );
- itemNew->folderType = item->folderType;
}
return itemNew;
}
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 );
folder->listFolder = NULL;
folder->listGroup = NULL;
folder->listPerson = NULL;
- folder->folderType = ADDRFOLDER_NONE;
- folder->folderData = NULL;
g_free( folder );
}
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 ) {
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.
*/
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;
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;
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__ */
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) );
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;
}
addritem_folder_set_name( folder, name );
g_free( name );
- addrbook_invalidate( abf );
return folder;
}
#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"
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.
*/
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 ) {
}
}
+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;
gchar *sBaseDN = NULL;
gint iBaseDN = 0;
gboolean flg;
- GList *baseDN = NULL;
edit_ldap_status_show( "" );
flg = FALSE;
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 ) {
}
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 ) {
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 );
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);
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;
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 );
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;
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;
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);
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;
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 );
/* 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;
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;
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;
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;
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 );
}
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);
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 );
#include "intl.h"
#include "prefs_common.h"
-#include "ldaputil.h"
+#include "syldap.h"
#include "mgutils.h"
#include "gtkutils.h"
#include "manage_window.h"
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));
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 };
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;
}
jpilot_clear_custom_labels( pilotFile );
/* Clear cache */
+ addrcache_clear( pilotFile->addressCache );
addrcache_free( pilotFile->addressCache );
/* Free internal stuff */
if( pilotFile->retVal == MGU_SUCCESS ) {
pilotFile->addressCache->modified = FALSE;
pilotFile->addressCache->dataRead = TRUE;
-
- /* Build address completion index */
- addrcache_build_index( pilotFile->addressCache );
}
}
}
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;
}
if( cardFile->file ) fclose( cardFile->file );
/* Clear cache */
+ addrcache_clear( cardFile->addressCache );
addrcache_free( cardFile->addressCache );
/* Free internal stuff */
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;