/* * Remove empty folders (categories). */ static void jpilot_remove_empty( JPilotFile *pilotFile ) { GList *listFolder; GList *remList; GList *node; gint i = 0; listFolder = addrcache_get_list_folder( pilotFile->addressCache ); node = listFolder; remList = NULL; while( node ) { ItemFolder *folder = node->data; if( ADDRITEM_NAME(folder) == NULL || *ADDRITEM_NAME(folder) == '\0' ) { if( folder->listPerson ) { /* Give name to folder */ gchar name[20]; sprintf( name, "? %d", i ); addritem_folder_set_name( folder, name ); } else { /* Mark for removal */ remList = g_list_append( remList, folder ); } } node = g_list_next( node ); i++; } node = remList; while( node ) { ItemFolder *folder = node->data; addrcache_remove_folder( pilotFile->addressCache, folder ); node = g_list_next( node ); } g_list_free( remList ); }
/* * Insert address into cache. * Enter: harvester Harvester object. * entry Header object. * cache Address cache to load. * name Name. * address eMail address. */ static void addrharvest_insert_cache( AddressHarvester *harvester, HeaderEntry *entry, AddressCache *cache, const gchar *name, const gchar *address ) { ItemPerson *person; ItemFolder *folder; gchar *folderName; gboolean newFolder; gint cnt; gchar *key, *value; newFolder = FALSE; folder = entry->folder; if( folder == NULL ) { newFolder = TRUE; /* No folder yet */ } if( entry->count % harvester->folderSize == 0 ) { newFolder = TRUE; /* Folder is full */ } /* Insert address */ key = g_strdup( address ); g_strdown( key ); person = g_hash_table_lookup( harvester->dupTable, key ); if( person ) { /* Update existing person to use longest name */ value = ADDRITEM_NAME(person); if( strlen( name ) > strlen( value ) ) { addritem_person_set_common_name( person, name ); } g_free( key ); } else { /* Folder if required */ if( newFolder ) { cnt = 1 + ( entry->count / harvester->folderSize ); folderName =g_strdup_printf( "%s (%d)", entry->header, cnt ); folder = addritem_create_item_folder(); addritem_folder_set_name( folder, folderName ); addritem_folder_set_remarks( folder, "" ); addrcache_id_folder( cache, folder ); addrcache_add_folder( cache, folder ); entry->folder = folder; g_free( folderName ); } /* Insert entry */ person = addrcache_add_contact( cache, folder, name, address, "" ); g_hash_table_insert( harvester->dupTable, key, person ); entry->count++; } addritem_parse_first_last( person ); }
/** * Build folder in address book for each category. * \param pilotFile JPilot control data. */ static void jpilot_build_category_list( JPilotFile *pilotFile ) { struct AddressAppInfo *ai = & pilotFile->addrInfo; struct CategoryAppInfo *cat = & ai->category; gint i; for( i = 0; i < JPILOT_NUM_CATEG; i++ ) { ItemFolder *folder = addritem_create_item_folder(); if( convert_charcode ) { gchar catName[ JPILOT_LEN_CATEG ]; conv_sjistoeuc( catName, JPILOT_LEN_CATEG, cat->name[i] ); addritem_folder_set_name( folder, catName ); } else { addritem_folder_set_name( folder, cat->name[i] ); } addrcache_id_folder( pilotFile->addressCache, folder ); addrcache_add_folder( pilotFile->addressCache, folder ); } }
/* * Build folder for each category. */ static void jpilot_build_category_list( JPilotFile *pilotFile ) { struct AddressAppInfo *ai = & pilotFile->addrInfo; struct CategoryAppInfo *cat = & ai->category; gint i; for( i = 0; i < JPILOT_NUM_CATEG; i++ ) { ItemFolder *folder = addritem_create_item_folder(); gchar *catName; catName = jpilot_convert_encoding( cat->name[i] ); addritem_folder_set_name( folder, catName ); g_free( catName ); addrcache_id_folder( pilotFile->addressCache, folder ); addrcache_add_folder( pilotFile->addressCache, folder ); } }