New address book.
[claws.git] / src / mgutils.c
index 68595ddc2874d417dee6e21f554ba41628407241..ea614606038d1e17a696b45f2667d87e0347c966 100644 (file)
  * General functions for create common address book entries.
  */
 
-#include <sys/stat.h>
 #include <stdio.h>
 #include <glib.h>
 
-#include "addressitem.h"
 #include "mgutils.h"
 
-/*
-* Create new address item.
-*/
-AddressItem *mgu_create_address_item( AddressObjectType type ) {
-       AddressItem *item;
-       item = g_new( AddressItem, 1 );
-       ADDRESS_OBJECT(item)->type = type;
-       item->name = NULL;
-       item->address = NULL;
-       item->remarks = NULL;
-       item->externalID = NULL;
-       item->categoryID = ADDRESS_ITEM_CAT_UNKNOWN;
-       return item;
-}
-
-/*
-* Create new address item.
-*/
-AddressItem *mgu_create_address( void ) {
-       AddressItem *item;
-       item = g_new( AddressItem, 1 );
-       ADDRESS_OBJECT(item)->type = ADDR_ITEM;
-       item->name = NULL;
-       item->address = NULL;
-       item->remarks = NULL;
-       item->externalID = NULL;
-       item->categoryID = ADDRESS_ITEM_CAT_UNKNOWN;
-       return item;
-}
-
-/*
-* Create copy of specified address item.
-*/
-AddressItem *mgu_copy_address_item( AddressItem *item ) {
-       AddressItem *itemNew = NULL;
-       if( item ) {
-               itemNew = mgu_create_address_item( ADDRESS_OBJECT(item)->type );
-               itemNew->name = g_strdup( item->name );
-               itemNew->address = g_strdup( item->address );
-               itemNew->remarks = g_strdup( item->remarks );
-               itemNew->externalID = g_strdup( item->externalID );
-               itemNew->categoryID = item->categoryID;
-       }
-       return itemNew;
-}
-
-/*
-* Free address item.
-*/
-void mgu_free_address( AddressItem *item ) {
-       g_return_if_fail( item != NULL );
-
-       /* Free internal stuff */
-       g_free( item->name );
-       g_free( item->address );
-       g_free( item->remarks );
-       g_free( item->externalID );
-       item->name = NULL;
-       item->address = NULL;
-       item->remarks = NULL;
-       item->externalID = NULL;
-       item->categoryID = ADDRESS_ITEM_CAT_UNKNOWN;
-
-       /* Now release item */
-       g_free( item );
-}
-
-/*
-* Refresh internal variables to force a reload.
-*/
-void mgu_refresh_cache( AddressCache *cache ) {
-       cache->dataRead = FALSE;
-       cache->modified = TRUE;
-       cache->modifyTime = 0;
-}
-
-/*
-* Free up address list.
-*/
-void mgu_free_address_list( GList *addrList ) {
-       AddressItem *item;
-       GList *node;
-
-       /* Free data in the list */
-       node = addrList;
-       while( node ) {
-               item = node->data;
-               mgu_free_address( item );
-               node->data = NULL;
-               node = g_list_next( node );
-       }
-
-       /* Now release linked list object */
-       g_list_free( addrList );
-}
-
-/*
-* Clear the cache.
-*/
-void mgu_clear_cache( AddressCache *cache ) {
-       AddressItem *item;
-       GList *node;
-       g_return_if_fail( cache != NULL );
-
-       /* Free data in the list */
-       mgu_free_address_list( cache->addressList );
-       cache->addressList = NULL;
-       mgu_refresh_cache( cache );
-}
-
-/*
-* Clear the cache by setting pointers to NULL and free list.
-* Note that individual items are not free'd.
-*/
-void mgu_clear_cache_null( AddressCache *cache ) {
-       GList *node;
-       g_return_if_fail( cache != NULL );
-
-       /* Free data in the list */
-       node = cache->addressList;
-       while( node ) {
-               node->data = NULL;
-               node = g_list_next( node );
-       }
-
-       /* Now release linked list object */
-       g_list_free( cache->addressList );
-       cache->addressList = NULL;
-}
-
-/*
-* Create new cache.
-*/
-AddressCache *mgu_create_cache( void ) {
-       AddressCache *cache;
-       cache = g_new( AddressCache, 1 );
-       cache->addressList = NULL;
-       cache->dataRead = FALSE;
-       cache->modified = FALSE;
-       cache->modifyTime = 0;
-       return cache;
-}
-
-/*
-* Create new address item.
-*/
-void mgu_free_cache( AddressCache *cache ) {
-       mgu_clear_cache( cache );
-       cache->addressList = NULL;
-}
-
-/*
-* Print address item.
-*/
-void mgu_print_address( AddressItem *item, FILE *stream ) {
-       g_return_if_fail( item != NULL );
-       fprintf( stream, "addr item:\n" );
-       fprintf( stream, "\tname: '%s'\n", item->name );
-       fprintf( stream, "\taddr: '%s'\n", item->address );
-       fprintf( stream, "\trems: '%s'\n", item->remarks );
-       fprintf( stream, "\tid  : '%s'\n", item->externalID );
-       fprintf( stream, "\tcatg: '%d'\n", item->categoryID );
-       fprintf( stream, "---\n" );
-}
-
-/*
-* Print linked list containing address item(s).
-*/
-void mgu_print_address_list( GList *addrList, FILE *stream ) {
-       GList *node;
-       g_return_if_fail( addrList != NULL );
-
-       /* Now process the list */
-       node = addrList;
-       while( node ) {
-               gpointer *gptr = node->data;
-               AddressItem *item = ( AddressItem * ) gptr;
-               mgu_print_address( item, stream );              
-               node = g_list_next( node );
-       }
-}
-
-/*
-* Print address cache.
-*/
-void mgu_print_cache( AddressCache *cache, FILE *stream ) {
-       GList *node;
-       g_return_if_fail( cache != NULL );
-       fprintf( stream, "AddressCache:\n" );
-       fprintf( stream, "modified : %s\n", cache->modified ? "yes" : "no" );
-       fprintf( stream, "data read: %s\n", cache->dataRead ? "yes" : "no" );
-
-       /* Now process the list */
-       node = cache->addressList;
-       while( node ) {
-               gpointer *gptr;
-               AddressItem *item;
-               gptr = node->data;
-               item = ( AddressItem * ) gptr;
-               mgu_print_address( item, stream );              
-               node = g_list_next( node );
-       }
-}
-
 /*
 * Dump linked list of character strings (for debug).
 */
@@ -254,38 +48,6 @@ void mgu_print_dlist( GList *list, FILE *stream ) {
        }
 }
 
-/*
-* Check whether file has changed by comparing with cache.
-* return:      TRUE if file has changed.
-*/
-gboolean mgu_check_file( AddressCache *cache, gchar *path ) {
-       gboolean retVal;
-       struct stat filestat;
-       retVal = TRUE;
-       if( path ) {
-               if( 0 == lstat( path, &filestat ) ) {
-                       if( filestat.st_mtime == cache->modifyTime ) retVal = FALSE;
-               }
-       }
-       return retVal;
-}
-
-/*
-* Save file time to cache.
-* return:      TRUE if time marked.
-*/
-gboolean mgu_mark_cache( AddressCache *cache, gchar *path ) {
-       gboolean retVal = FALSE;
-       struct stat filestat;
-       if( path ) {
-               if( 0 == lstat( path, &filestat ) ) {
-                       cache->modifyTime = filestat.st_mtime;
-                       retVal = TRUE;
-               }
-       }
-       return retVal;
-}
-
 /*
 * Free linked list of character strings.
 */
@@ -334,7 +96,7 @@ gchar *mgu_list_coalesce( GSList *list ) {
        }
 
        // Create new buffer.
-       buf = g_new( gchar, len+1 );
+       buf = g_new0( gchar, len+1 );
        start = buf;
        node = list;
        while( node ) {
@@ -347,14 +109,6 @@ gchar *mgu_list_coalesce( GSList *list ) {
        return buf;
 }
 
-/*
-* Add address item to cache.
-*/
-void mgu_add_cache( AddressCache *cache, AddressItem *addrItem ) {
-       cache->addressList = g_list_append( cache->addressList, addrItem );
-       cache->modified = TRUE;
-}
-
 struct mgu_error_entry {
        gint    e_code;
        gchar   *e_reason;
@@ -377,6 +131,9 @@ static const struct mgu_error_entry mgu_error_list[] = {
        { MGU_LDAP_CRITERIA,    "Error in LDAP search criteria" },
        { MGU_LDAP_CRITERIA,    "Error in LDAP search criteria" },
        { MGU_LDAP_NOENTRIES,   "No LDAP entries found for search criteria" },
+       { MGU_ERROR_WRITE,      "Error writing to file" },
+       { MGU_OPEN_DIRECTORY,   "Error opening directory" },
+       { MGU_NO_PATH,          "No path specified" },
        { -999,                 NULL }
 };
 
@@ -398,6 +155,65 @@ gchar *mgu_error2string( gint err ) {
        return ( e != NULL ) ? e->e_reason : "Unknown error";
 }
 
+/*
+* Replace existing string with new string.
+*/
+gchar *mgu_replace_string( gchar *str, const gchar *value ) {
+       if( str ) g_free( str );
+       if( value ) {
+               str = g_strdup( value );
+               g_strstrip( str );
+       }
+       else {
+               str = NULL;
+       }
+       return str;
+}
+
+/*
+* Clear a linked list by setting node data pointers to NULL. Note that
+* items are not freed.
+*/
+void mgu_clear_slist( GSList *list ) {
+       GSList *node = list;
+       while( node ) {
+               node->data = NULL;
+               node = g_slist_next( node );
+       }
+}
+
+/*
+* Clear a linked list by setting node data pointers to NULL. Note that
+* items are not freed.
+*/
+void mgu_clear_list( GList *list ) {
+       GList *node = list;
+       while( node ) {
+               node->data = NULL;
+               node = g_list_next( node );
+       }
+}
+
+/*
+* Test and reformat an email address.
+* Enter:  address.
+* Return: Address, or NULL if address is empty.
+* Note: Leading and trailing white space is removed.
+*/
+gchar *mgu_email_check_empty( gchar *address ) {
+       gchar *retVal = NULL;
+       if( address ) {
+               retVal = g_strdup( address );
+               retVal = g_strchug( retVal );
+               retVal = g_strchomp( retVal );
+               if( *retVal == '\0' ) {
+                       g_free( retVal );
+                       retVal = NULL;
+               }
+       }
+       return retVal;
+}
+
 /*
 * End of Source.
 */