/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 2001-2007 Match Grun and the Claws Mail team
+ * Copyright (C) 2001-2012 Match Grun and the Claws Mail team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#ifdef HAVE_CONFIG_H
# include "config.h"
+#include "claws-features.h"
#endif
#include "defs.h"
#include "ldaputil.h"
#endif
+#ifdef G_OS_WIN32
+#undef interface
+#endif
+
#define TAG_ADDRESS_INDEX "addressbook"
#define TAG_IF_ADDRESS_BOOK "book_list"
void addrindex_free_datasource( AddressDataSource *ds ) {
AddressInterface *iface;
- g_return_if_fail( ds != NULL );
+ cm_return_if_fail( ds != NULL );
iface = ds->interface;
if( ds->rawDataSource != NULL ) {
AddrBookBase *adbase;
AddressCache *cache;
- g_return_val_if_fail( addrIndex != NULL, NULL );
- g_return_val_if_fail( ds != NULL, NULL );
+ cm_return_val_if_fail( addrIndex != NULL, NULL );
+ cm_return_val_if_fail( ds != NULL, NULL );
adbase = ( AddrBookBase * ) ds->rawDataSource;
if( adbase ) {
static 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 );
+ cm_return_val_if_fail( addrIndex != NULL, NULL );
+ cm_return_val_if_fail( cacheID != NULL, NULL );
return ( AddressDataSource * ) g_hash_table_lookup( addrIndex->hashCache, cacheID );
}
AddrBookBase *adbase;
AddressCache *cache;
- g_return_val_if_fail( addrIndex != NULL, NULL );
- g_return_val_if_fail( cacheID != NULL, NULL );
+ cm_return_val_if_fail( addrIndex != NULL, NULL );
+ cm_return_val_if_fail( cacheID != NULL, NULL );
cache = NULL;
ds = addrindex_get_datasource( addrIndex, cacheID );
* \param value Path to index file.
*/
void addrindex_set_file_path( AddressIndex *addrIndex, const gchar *value ) {
- g_return_if_fail( addrIndex != NULL );
+ cm_return_if_fail( addrIndex != NULL );
addrIndex->filePath = mgu_replace_string( addrIndex->filePath, value );
}
* \param value File name.
*/
void addrindex_set_file_name( AddressIndex *addrIndex, const gchar *value ) {
- g_return_if_fail( addrIndex != NULL );
+ cm_return_if_fail( addrIndex != NULL );
addrIndex->fileName = mgu_replace_string( addrIndex->fileName, value );
}
* \return List of address interfaces.
*/
GList *addrindex_get_interface_list( AddressIndex *addrIndex ) {
- g_return_val_if_fail( addrIndex != NULL, NULL );
+ cm_return_val_if_fail( addrIndex != NULL, NULL );
return addrIndex->interfaceList;
}
void addrindex_free_index( AddressIndex *addrIndex ) {
GList *node;
- g_return_if_fail( addrIndex != NULL );
+ cm_return_if_fail( addrIndex != NULL );
/* Search stuff */
g_list_free( addrIndex->searchOrder );
* \parem stream Stream to print.
*/
void addrindex_print_index( AddressIndex *addrIndex, FILE *stream ) {
- g_return_if_fail( addrIndex != NULL );
+ cm_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 );
AddressInterface *retVal = NULL;
GList *node;
- g_return_val_if_fail( addrIndex != NULL, NULL );
+ cm_return_val_if_fail( addrIndex != NULL, NULL );
node = addrIndex->interfaceList;
while( node ) {
AddressInterface *iface;
AddressDataSource *ds = NULL;
- g_return_val_if_fail( addrIndex != NULL, NULL );
- g_return_val_if_fail( dataSource != NULL, NULL );
+ cm_return_val_if_fail( addrIndex != NULL, NULL );
+ cm_return_val_if_fail( dataSource != NULL, NULL );
iface = addrindex_get_interface( addrIndex, ifType );
if( iface ) {
AddressDataSource *retVal = FALSE;
AddressInterface *iface;
- g_return_val_if_fail( addrIndex != NULL, NULL );
- g_return_val_if_fail( dataSource != NULL, NULL );
+ cm_return_val_if_fail( addrIndex != NULL, NULL );
+ cm_return_val_if_fail( dataSource != NULL, NULL );
iface = addrindex_get_interface( addrIndex, dataSource->type );
if( iface ) {
* \param lvl Indentation level.
* \param name Element name.
*/
-static void addrindex_write_elem_s( FILE *fp, const gint lvl, const gchar *name ) {
+static int addrindex_write_elem_s( FILE *fp, const gint lvl, const gchar *name ) {
gint i;
- for( i = 0; i < lvl; i++ ) fputs( " ", fp );
- fputs( "<", fp );
- fputs( name, fp );
+ for( i = 0; i < lvl; i++ )
+ if (fputs( " ", fp ) == EOF)
+ return -1;
+ if (fputs( "<", fp ) == EOF)
+ return -1;
+ if (fputs( name, fp ) == EOF)
+ return -1;
+ return 0;
}
/**
* \param lvl Indentation level.
* \param name Element name.
*/
-static void addrindex_write_elem_e( FILE *fp, const gint lvl, const gchar *name ) {
+static int addrindex_write_elem_e( FILE *fp, const gint lvl, const gchar *name ) {
gint i;
- for( i = 0; i < lvl; i++ ) fputs( " ", fp );
- fputs( "</", fp );
- fputs( name, fp );
- fputs( ">\n", fp );
+ for( i = 0; i < lvl; i++ )
+ if (fputs( " ", fp ) == EOF)
+ return -1;
+ if (fputs( "</", fp ) == EOF)
+ return -1;
+ if (fputs( name, fp ) == EOF)
+ return -1;
+ if (fputs( ">\n", fp ) == EOF)
+ return -1;
+ return 0;
}
/**
* \param name Attribute name.
* \param value Attribute value.
*/
-static void addrindex_write_attr( FILE *fp, const gchar *name, const gchar *value ) {
- fputs( " ", fp );
- fputs( name, fp );
- fputs( "=\"", fp );
- xml_file_put_escape_str( fp, value );
- fputs( "\"", fp );
-}
-
+static int addrindex_write_attr( FILE *fp, const gchar *name, const gchar *value ) {
+ if (fputs( " ", fp ) == EOF)
+ return -1;
+ if (fputs( name, fp ) == EOF)
+ return -1;
+ if (fputs( "=\"", fp ) == EOF)
+ return -1;
+ if (xml_file_put_escape_str( fp, value ) < 0)
+ return -1;
+ if (fputs( "\"", fp ) == EOF)
+ return -1;
+ return 0;
+}
+
+#if !defined(USE_LDAP) || !defined(USE_JPILOT)
/**
* Return DOM fragment for current XML tag from file.
* \param file XML file being processed.
* \param fragment DOM fragment for configuration element.
* \param lvl Indent level.
*/
-static void addrindex_write_fragment(
+static int addrindex_write_fragment(
FILE *fp, const AddressIfFragment *fragment, const gint lvl )
{
GList *node;
if( fragment ) {
- addrindex_write_elem_s( fp, lvl, fragment->name );
+ if (addrindex_write_elem_s( fp, lvl, fragment->name ) < 0)
+ return -1;
node = fragment->attributes;
while( node ) {
AddressIfAttrib *nv = node->data;
- addrindex_write_attr( fp, nv->name, nv->value );
+ if (addrindex_write_attr( fp, nv->name, nv->value ) < 0)
+ return -1;
node = g_list_next( node );
}
if( fragment->children ) {
- fputs(" >\n", fp);
+ if (fputs(" >\n", fp) == EOF)
+ return -1;
/* Output children */
node = fragment->children;
while( node ) {
AddressIfFragment *child = node->data;
- addrindex_write_fragment( fp, child, 1+lvl );
+ if (addrindex_write_fragment( fp, child, 1+lvl ) < 0)
+ return -1;
node = g_list_next( node );
}
/* Output closing tag */
- addrindex_write_elem_e( fp, lvl, fragment->name );
+ if (addrindex_write_elem_e( fp, lvl, fragment->name ) < 0)
+ return -1;
}
else {
- fputs(" />\n", fp);
+ if (fputs(" />\n", fp) == EOF)
+ return -1;
}
}
+
+ return 0;
}
-
+#endif
/**
* Read/parse address index file, creating a data source for a regular
* intrinsic XML addressbook.
return ds;
}
-static void addrindex_write_book( FILE *fp, AddressDataSource *ds, gint lvl ) {
+static int addrindex_write_book( FILE *fp, AddressDataSource *ds, gint lvl ) {
AddressBookFile *abf = ds->rawDataSource;
if( abf ) {
- addrindex_write_elem_s( fp, lvl, TAG_DS_ADDRESS_BOOK );
- addrindex_write_attr( fp, ATTAG_BOOK_NAME, addrbook_get_name( abf ) );
- addrindex_write_attr( fp, ATTAG_BOOK_FILE, abf->fileName );
- fputs( " />\n", fp );
+ if (addrindex_write_elem_s( fp, lvl, TAG_DS_ADDRESS_BOOK ) < 0)
+ return -1;
+ if (addrindex_write_attr( fp, ATTAG_BOOK_NAME, addrbook_get_name( abf ) ) < 0)
+ return -1;
+ if (addrindex_write_attr( fp, ATTAG_BOOK_FILE, abf->fileName ) < 0)
+ return -1;
+ if (fputs( " />\n", fp ) == EOF)
+ return -1;
}
+ return 0;
}
static AddressDataSource *addrindex_parse_vcard( XMLFile *file ) {
return ds;
}
-static void addrindex_write_vcard( FILE *fp, AddressDataSource *ds, gint lvl ) {
+static int addrindex_write_vcard( FILE *fp, AddressDataSource *ds, gint lvl ) {
VCardFile *vcf = ds->rawDataSource;
if( vcf ) {
- addrindex_write_elem_s( fp, lvl, TAG_DS_VCARD );
- addrindex_write_attr( fp, ATTAG_VCARD_NAME, vcard_get_name( vcf ) );
- addrindex_write_attr( fp, ATTAG_VCARD_FILE, vcf->path );
- fputs( " />\n", fp );
+ if (addrindex_write_elem_s( fp, lvl, TAG_DS_VCARD ) < 0)
+ return -1;
+ if (addrindex_write_attr( fp, ATTAG_VCARD_NAME, vcard_get_name( vcf ) ) < 0)
+ return -1;
+ if (addrindex_write_attr( fp, ATTAG_VCARD_FILE, vcf->path ) < 0)
+ return -1;
+ if (fputs( " />\n", fp ) == EOF)
+ return -1;
}
+ return 0;
}
#ifdef USE_JPILOT
return ds;
}
-static void addrindex_write_jpilot( FILE *fp,AddressDataSource *ds, gint lvl ) {
+static int addrindex_write_jpilot( FILE *fp,AddressDataSource *ds, gint lvl ) {
JPilotFile *jpf = ds->rawDataSource;
if( jpf ) {
gint ind;
GList *node;
GList *customLbl = jpilot_get_custom_labels( jpf );
- addrindex_write_elem_s( fp, lvl, TAG_DS_JPILOT );
- addrindex_write_attr( fp, ATTAG_JPILOT_NAME, jpilot_get_name( jpf ) );
- addrindex_write_attr( fp, ATTAG_JPILOT_FILE, jpf->path );
+ if (addrindex_write_elem_s( fp, lvl, TAG_DS_JPILOT ) < 0)
+ return -1;
+ if (addrindex_write_attr( fp, ATTAG_JPILOT_NAME, jpilot_get_name( jpf ) ) < 0)
+ return -1;
+ if (addrindex_write_attr( fp, ATTAG_JPILOT_FILE, jpf->path ) < 0)
+ return -1;
node = customLbl;
ind = 1;
while( node ) {
gchar name[256];
g_snprintf( name, sizeof(name), "%s%d",
ATTAG_JPILOT_CUSTOM, ind );
- addrindex_write_attr( fp, name, node->data );
+ if (addrindex_write_attr( fp, name, node->data ) < 0)
+ return -1;
ind++;
node = g_list_next( node );
}
- fputs( " />\n", fp );
+ if (fputs( " />\n", fp ) == EOF)
+ return -1;
}
+ return 0;
}
#else
return ds;
}
-static void addrindex_write_jpilot( FILE *fp, AddressDataSource *ds, gint lvl ) {
+static int addrindex_write_jpilot( FILE *fp, AddressDataSource *ds, gint lvl ) {
AddressIfFragment *fragment = ds->rawDataSource;
if( fragment ) {
- addrindex_write_fragment( fp, fragment, lvl );
+ if (addrindex_write_fragment( fp, fragment, lvl ) < 0)
+ return -1;
}
+ return 0;
}
#endif
ldapctl_set_bind_dn( ctl, value );
}
else if( strcmp( name, ATTAG_LDAP_BIND_PASS ) == 0 ) {
- ldapctl_set_bind_password( ctl, value );
+ ldapctl_set_bind_password( ctl, value, FALSE, FALSE );
}
else if( strcmp( name, ATTAG_LDAP_CRITERIA ) == 0 ) {
g_free( criteria );
ldapsvr_set_name( server, serverName );
ldapsvr_set_search_flag( server, bDynSearch );
ldapctl_set_matching_option( ctl, iMatch );
-#ifdef USE_LDAP_TLS
ldapctl_set_tls( ctl, bTLS );
ldapctl_set_ssl( ctl, bSSL );
-#endif
g_free( serverName );
ldapsvr_set_control( server, ctl );
ds->rawDataSource = server;
return ds;
}
-static void addrindex_write_ldap( FILE *fp, AddressDataSource *ds, gint lvl ) {
+static int addrindex_write_ldap( FILE *fp, AddressDataSource *ds, gint lvl ) {
LdapServer *server = ds->rawDataSource;
LdapControl *ctl = NULL;
GList *node;
if( server ) {
ctl = server->control;
}
- if( ctl == NULL ) return;
+ if( ctl == NULL ) return 0;
/* 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 );
+ if (addrindex_write_elem_s( fp, lvl, TAG_DS_LDAP ) < 0)
+ return -1;
+ if (addrindex_write_attr( fp, ATTAG_LDAP_NAME, ldapsvr_get_name( server ) ) < 0)
+ return -1;
+ if (addrindex_write_attr( fp, ATTAG_LDAP_HOST, ctl->hostName ) < 0)
+ return -1;
sprintf( value, "%d", ctl->port );
- addrindex_write_attr( fp, ATTAG_LDAP_PORT, value );
+ if (addrindex_write_attr( fp, ATTAG_LDAP_PORT, value ) < 0)
+ return -1;
- 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 );
+ if (addrindex_write_attr( fp, ATTAG_LDAP_BASE_DN, ctl->baseDN ) < 0)
+ return -1;
+ if (addrindex_write_attr( fp, ATTAG_LDAP_BIND_DN, ctl->bindDN ) < 0)
+ return -1;
+ if (addrindex_write_attr( fp, ATTAG_LDAP_BIND_PASS, ctl->bindPass ) < 0)
+ return -1;
sprintf( value, "%d", ctl->maxEntries );
- addrindex_write_attr( fp, ATTAG_LDAP_MAX_ENTRY, value );
+ if (addrindex_write_attr( fp, ATTAG_LDAP_MAX_ENTRY, value ) < 0)
+ return -1;
sprintf( value, "%d", ctl->timeOut );
- addrindex_write_attr( fp, ATTAG_LDAP_TIMEOUT, value );
+ if (addrindex_write_attr( fp, ATTAG_LDAP_TIMEOUT, value ) < 0)
+ return -1;
sprintf( value, "%d", ctl->maxQueryAge );
- addrindex_write_attr( fp, ATTAG_LDAP_MAX_AGE, value );
+ if (addrindex_write_attr( fp, ATTAG_LDAP_MAX_AGE, value ) < 0)
+ return -1;
- addrindex_write_attr( fp, ATTAG_LDAP_DYN_SEARCH,
+ if (addrindex_write_attr( fp, ATTAG_LDAP_DYN_SEARCH,
server->searchFlag ?
- ATVAL_BOOLEAN_YES : ATVAL_BOOLEAN_NO );
+ ATVAL_BOOLEAN_YES : ATVAL_BOOLEAN_NO ) < 0)
+ return -1;
- addrindex_write_attr( fp, ATTAG_LDAP_MATCH_OPT,
+ if (addrindex_write_attr( fp, ATTAG_LDAP_MATCH_OPT,
( ctl->matchingOption == LDAPCTL_MATCH_CONTAINS ) ?
- ATVAL_LDAP_MATCH_CONTAINS : ATVAL_LDAP_MATCH_BEGIN );
+ ATVAL_LDAP_MATCH_CONTAINS : ATVAL_LDAP_MATCH_BEGIN ) < 0)
+ return -1;
- addrindex_write_attr( fp, ATTAG_LDAP_ENABLE_TLS,
+ if (addrindex_write_attr( fp, ATTAG_LDAP_ENABLE_TLS,
ctl->enableTLS ?
- ATVAL_BOOLEAN_YES : ATVAL_BOOLEAN_NO );
- addrindex_write_attr( fp, ATTAG_LDAP_ENABLE_SSL,
+ ATVAL_BOOLEAN_YES : ATVAL_BOOLEAN_NO ) < 0)
+ return -1;
+ if (addrindex_write_attr( fp, ATTAG_LDAP_ENABLE_SSL,
ctl->enableSSL ?
- ATVAL_BOOLEAN_YES : ATVAL_BOOLEAN_NO );
+ ATVAL_BOOLEAN_YES : ATVAL_BOOLEAN_NO ) < 0)
+ return -1;
- fputs(" >\n", fp);
+ if (fputs(" >\n", fp) == EOF)
+ return -1;
/* 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);
+ if (addrindex_write_elem_s( fp, 1+lvl, ELTAG_LDAP_ATTR_SRCH ) < 0)
+ return -1;
+ if (addrindex_write_attr( fp, ATTAG_LDAP_ATTR_NAME, node->data ) < 0)
+ return -1;
+ if (fputs(" />\n", fp) == EOF)
+ return -1;
node = g_list_next( node );
}
/* End of element */
- addrindex_write_elem_e( fp, lvl, TAG_DS_LDAP );
+ if (addrindex_write_elem_e( fp, lvl, TAG_DS_LDAP ) < 0)
+ return -1;
+
+ return 0;
}
#else
return ds;
}
-static void addrindex_write_ldap( FILE *fp, AddressDataSource *ds, gint lvl ) {
+static int addrindex_write_ldap( FILE *fp, AddressDataSource *ds, gint lvl ) {
AddressIfFragment *fragment = ds->rawDataSource;
if( fragment ) {
- addrindex_write_fragment( fp, fragment, lvl );
+ if (addrindex_write_fragment( fp, fragment, lvl ) < 0)
+ return -1;
}
+ return 0;
}
#endif
* \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;
addrIndex->loadedFlag = FALSE;
for (;;) {
- prev_level = file->level;
rc = xml_parse_next_tag( file );
- if( file->level == 0 ) return;
+ if( rc < 0 || file->level == 0 ) return;
xtag = xml_get_current_tag( file );
XMLFile *file = NULL;
gchar *fileSpec = NULL;
- g_return_val_if_fail( addrIndex != NULL, -1 );
+ cm_return_val_if_fail( addrIndex != NULL, -1 );
fileSpec = g_strconcat( addrIndex->filePath, G_DIR_SEPARATOR_S, addrIndex->fileName, NULL );
addrIndex->retVal = MGU_NO_FILE;
return addrIndex->retVal;
}
-static void addrindex_write_index( AddressIndex *addrIndex, FILE *fp ) {
+static int addrindex_write_index( AddressIndex *addrIndex, FILE *fp ) {
GList *nodeIF, *nodeDS;
gint lvlList = 1;
gint lvlItem = 1 + lvlList;
AddressInterface *iface = nodeIF->data;
if( ! iface->legacyFlag ) {
nodeDS = iface->listSource;
- addrindex_write_elem_s( fp, lvlList, iface->listTag );
- fputs( ">\n", fp );
+ if (addrindex_write_elem_s( fp, lvlList, iface->listTag ) < 0)
+ return -1;
+ if (fputs( ">\n", fp ) == EOF)
+ return -1;
while( nodeDS ) {
AddressDataSource *ds = nodeDS->data;
if( ds ) {
if( iface->type == ADDR_IF_BOOK ) {
- addrindex_write_book( fp, ds, lvlItem );
+ if (addrindex_write_book( fp, ds, lvlItem ) < 0)
+ return -1;
}
if( iface->type == ADDR_IF_VCARD ) {
- addrindex_write_vcard( fp, ds, lvlItem );
+ if (addrindex_write_vcard( fp, ds, lvlItem ) < 0)
+ return -1;
}
if( iface->type == ADDR_IF_JPILOT ) {
- addrindex_write_jpilot( fp, ds, lvlItem );
+ if (addrindex_write_jpilot( fp, ds, lvlItem ) < 0)
+ return -1;
}
if( iface->type == ADDR_IF_LDAP ) {
- addrindex_write_ldap( fp, ds, lvlItem );
+ if (addrindex_write_ldap( fp, ds, lvlItem ) < 0)
+ return -1;
}
}
nodeDS = g_list_next( nodeDS );
}
- addrindex_write_elem_e( fp, lvlList, iface->listTag );
+ if (addrindex_write_elem_e( fp, lvlList, iface->listTag ) < 0)
+ return -1;
}
nodeIF = g_list_next( nodeIF );
}
+ return 0;
}
/*
PrefFile *pfile;
#endif
- g_return_val_if_fail( addrIndex != NULL, -1 );
+ cm_return_val_if_fail( addrIndex != NULL, -1 );
fileSpec = g_strconcat( addrIndex->filePath, G_DIR_SEPARATOR_S, newFile, NULL );
addrIndex->retVal = MGU_OPEN_FILE;
g_free( fileSpec );
if( pfile ) {
fp = pfile->fp;
- fprintf( fp, "<?xml version=\"1.0\" encoding=\"%s\" ?>\n", CS_INTERNAL );
+ if (fprintf( fp, "<?xml version=\"1.0\" encoding=\"%s\" ?>\n", CS_INTERNAL ) < 0)
+ goto fail;
#endif
- addrindex_write_elem_s( fp, 0, TAG_ADDRESS_INDEX );
- fputs( ">\n", fp );
+ if (addrindex_write_elem_s( fp, 0, TAG_ADDRESS_INDEX ) < 0)
+ goto fail;
+ if (fputs( ">\n", fp ) == EOF)
+ goto fail;
- addrindex_write_index( addrIndex, fp );
- addrindex_write_elem_e( fp, 0, TAG_ADDRESS_INDEX );
+ if (addrindex_write_index( addrIndex, fp ) < 0)
+ goto fail;
+ if (addrindex_write_elem_e( fp, 0, TAG_ADDRESS_INDEX ) < 0)
+ goto fail;
addrIndex->retVal = MGU_SUCCESS;
#ifdef DEV_STANDALONE
fileSpec = NULL;
return addrIndex->retVal;
+fail:
+ g_warning("error writing AB index\n");
+ addrIndex->retVal = MGU_ERROR_WRITE;
+ if (pfile)
+ prefs_file_close_revert( pfile );
+ return addrIndex->retVal;
}
/*
GList *nodeDS;
#endif
- g_return_val_if_fail( addrIndex != NULL, -1 );
+ cm_return_val_if_fail( addrIndex != NULL, -1 );
#ifdef USE_LDAP
nodeIf = addrIndex->interfaceList;
node->list = g_list_append( node->list, newNode );
}
else {
- /* g_print( "invalid: !!! \n" ); */
- attr = xml_get_current_tag_attr( file );
+ g_warning("Invalid tag");
}
}
}
*/
static void addrindex_consume_tree( XMLFile *file ) {
guint prev_level;
- gchar *element;
- GList *attr;
- XMLTag *xtag;
for (;;) {
prev_level = file->level;
xml_parse_next_tag( file );
- if (file->level < prev_level) return;
+ if (file->level < prev_level)
+ return;
- xtag = xml_get_current_tag( file );
- /* g_print( "tag : %s\n", xtag->tag ); */
- element = xml_get_element( file );
- attr = xml_get_current_tag_attr( file );
- /* show_attribs( attr ); */
- /* g_print( "\ttag value : %s :\n", element ); */
addrindex_consume_tree( file );
}
}
-/*
-* Print temporary tree.
-*/
-static void addrindex_print_node( AddressCvtNode *node, FILE *stream ) {
- GList *list;
-
- fprintf( stream, "Node:\ttype :%d:\n", node->type );
- fprintf( stream, "\tname :%s:\n", node->name );
- fprintf( stream, "\taddr :%s:\n", node->address );
- fprintf( stream, "\trems :%s:\n", node->remarks );
- if( node->list ) {
- fprintf( stream, "\t--list----\n" );
- }
- list = node->list;
- while( list ) {
- AddressCvtNode *lNode = list->data;
- list = g_list_next( list );
- addrindex_print_node( lNode, stream );
- }
- fprintf( stream, "\t==list-%d==\n", node->type );
-}
-
/*
* Free up temporary tree.
*/
*/
static void addrindex_convert_tree( AddressIndex *addrIndex, XMLFile *file ) {
guint prev_level;
- gchar *element;
- GList *attr;
XMLTag *xtag;
/* Process file */
}
return;
}
- element = xml_get_element( file );
- attr = xml_get_current_tag_attr( file );
- /* show_attribs( attr ); */
- /* g_print( "\ttag value : %s :\n", element ); */
addrindex_consume_tree( file );
}
}
* "Gathered addresses" - a new address book.
*/
gint addrindex_read_data( AddressIndex *addrIndex ) {
- g_return_val_if_fail( addrIndex != NULL, -1 );
+ cm_return_val_if_fail( addrIndex != NULL, -1 );
addrIndex->conversionError = FALSE;
addrindex_read_file( addrIndex );
if( addrIndex->retVal == MGU_SUCCESS ) {
if( addrIndex->needsConversion ) {
- if( addrindex_convert_data( addrIndex ) == MGU_SUCCESS ) {
+ if( addrindex_convert_data( addrIndex ) == MGU_SUCCESS )
+ addrIndex->conversionError = FALSE;
+ else
addrIndex->conversionError = TRUE;
- }
- else {
- addrIndex->conversionError = TRUE;
- }
}
addrIndex->dirtyFlag = TRUE;
}
gint addrindex_create_new_books( AddressIndex *addrIndex ) {
gboolean flg;
- g_return_val_if_fail( addrIndex != NULL, -1 );
+ cm_return_val_if_fail( addrIndex != NULL, -1 );
flg = addrindex_create_new_book( addrIndex, DISP_NEW_COMMON );
if( flg ) {
*/
void addrindex_remove_results( AddressDataSource *ds, ItemFolder *folder ) {
AddrBookBase *adbase;
- AddressCache *cache;
gint queryID = 0;
/* g_print( "addrindex_remove_results/start\n" ); */
/* g_print( "folder name ::%s::\n", ADDRITEM_NAME(folder) ); */
adbase = ( AddrBookBase * ) ds->rawDataSource;
if( adbase == NULL ) return;
- cache = adbase->addressCache;
/* Hide folder to prevent re-display */
addritem_folder_set_hidden( folder, TRUE );
return TRUE;
}
+/**
+ * This function can be used to collect information about
+ * addressbook entries
+ *
+ * \param callBackFunc Function to be called for each ItemPerson
+ * \return <i>TRUE</i>
+ */
+gboolean addrindex_load_person_ds( gint (*callBackFunc)
+ ( ItemPerson *, AddressDataSource * ) )
+{
+ AddressDataSource *ds;
+ GList *nodeIf, *nodeDS;
+ GList *listP, *nodeP;
+
+ nodeIf = addrindex_get_interface_list( _addressIndex_ );
+ while( nodeIf ) {
+ AddressInterface *iface = nodeIf->data;
+
+ nodeIf = g_list_next( nodeIf );
+
+ if( ! iface->useInterface || iface->externalQuery )
+ continue;
+
+ nodeDS = iface->listSource;
+ while( nodeDS ) {
+ ds = nodeDS->data;
+
+ /* Read address book */
+ if( addrindex_ds_get_modify_flag( ds ) ) {
+ addrindex_ds_read_data( ds );
+ }
+
+ if( ! addrindex_ds_get_read_flag( ds ) ) {
+ addrindex_ds_read_data( ds );
+ }
+
+ /* Get all persons */
+ listP = addrindex_ds_get_all_persons( ds );
+ nodeP = listP;
+ while( nodeP ) {
+ ItemPerson *person = nodeP->data;
+
+ callBackFunc(person, ds);
+ nodeP = g_list_next( nodeP );
+ }
+ /* Free up the list */
+ g_list_free( listP );
+
+ nodeDS = g_list_next( nodeDS );
+ }
+ }
+ return TRUE;
+}
+
+gchar *addrindex_get_picture_file(const gchar *emailaddr)
+{
+ AddressDataSource *ds;
+ GList *nodeIf, *nodeDS;
+ GList *listP, *nodeP;
+ gboolean found = FALSE;
+ gchar *filename = NULL;
+ gchar *raw_addr = NULL;
+
+ if (!emailaddr)
+ return NULL;
+
+ Xstrdup_a(raw_addr, emailaddr, return NULL);
+ extract_address(raw_addr);
+
+ nodeIf = addrindex_get_interface_list( _addressIndex_ );
+ while( nodeIf ) {
+ AddressInterface *iface = nodeIf->data;
+
+ nodeIf = g_list_next( nodeIf );
+
+ if( ! iface->useInterface || iface->externalQuery )
+ continue;
+
+ nodeDS = iface->listSource;
+ while( nodeDS && !found) {
+ ds = nodeDS->data;
+
+ /* Read address book */
+ if( addrindex_ds_get_modify_flag( ds ) ) {
+ addrindex_ds_read_data( ds );
+ }
+
+ if( ! addrindex_ds_get_read_flag( ds ) ) {
+ addrindex_ds_read_data( ds );
+ }
+
+ /* Get all persons */
+ listP = addrindex_ds_get_all_persons( ds );
+ nodeP = listP;
+ while( nodeP ) {
+ GList *nodeM;
+ ItemPerson *person = nodeP->data;
+ nodeM = person->listEMail;
+ while(nodeM) {
+ ItemEMail *email = nodeM->data;
+ if (email->address && !strcasecmp(raw_addr, email->address)) {
+ found = TRUE;
+ filename = g_strconcat( get_rc_dir(), G_DIR_SEPARATOR_S,
+ ADDRBOOK_DIR, G_DIR_SEPARATOR_S,
+ person->picture, ".png", NULL );
+ break;
+ }
+ nodeM = nodeM->next;
+ }
+ nodeP = g_list_next( nodeP );
+ }
+ /* Free up the list */
+ g_list_free( listP );
+
+ nodeDS = g_list_next( nodeDS );
+ }
+ }
+
+ return filename;
+}
+
/*
* End of Source.
*/