/* * 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 ); }
/** * Read address file into address cache. * \param pilotFile JPilot control data. * \return Error/status code. <code>MGU_SUCCESS</code> if data read * successfully. */ static gint jpilot_read_file( JPilotFile *pilotFile ) { gint retVal, i; GList *records = NULL; GList *node; buf_rec *br; ItemFolder *folderInd[ JPILOT_NUM_CATEG ]; /* Read list of records from JPilot files */ retVal = jpilot_read_db_files( pilotFile, &records ); if( retVal != MGU_SUCCESS ) { jpilot_free_addrlist( records ); return retVal; } /* Setup labels and category folders */ jpilot_setup_labels( pilotFile ); jpilot_build_category_list( pilotFile ); /* Build array of pointers to categories */ i = 0; node = addrcache_get_list_folder( pilotFile->addressCache ); while( node ) { if( i < JPILOT_NUM_CATEG ) { folderInd[i] = node->data; } node = g_list_next( node ); i++; } /* Load all addresses, free up old stuff as we go */ node = records; while( node ) { br = node->data; if( ( br->rt != DELETED_PC_REC ) && ( br->rt != DELETED_PALM_REC ) && ( br->rt != MODIFIED_PALM_REC ) && ( br->rt != DELETED_DELETED_PALM_REC ) ) { jpilot_load_address( pilotFile, br, folderInd ); } free( br->buf ); free( br ); node->data = NULL; node = g_list_next( node ); } /* Free up list */ g_list_free( records ); /* Remove empty category folders */ jpilot_remove_empty( pilotFile ); jpilot_mark_files( pilotFile ); return retVal; }
/* * Return link list of folders. This is always NULL since there are * no folders in GnomeCard. * Return: NULL. */ GList *jpilot_get_list_folder( JPilotFile *pilotFile ) { g_return_val_if_fail( pilotFile != NULL, NULL ); return addrcache_get_list_folder( pilotFile->addressCache ); }