Ticket #1606: openmoko-messages-number-normalize.patch

File openmoko-messages-number-normalize.patch, 3.9 KB (added by nomeata, 11 years ago)

New version, also replaces numbers by names using the same number normalization

  • src/sms-utils.c

     
    2626#  include <config.h> 
    2727#endif 
    2828 
     29gchar* 
     30normalize_number (gchar* number) 
     31{ 
     32       // We might add up to ++49, so 5 should be a safe choice 
     33   
     34       gchar* norm = g_strnfill(strlen(number) +  5, '\0'); 
     35       int i=0; 
     36       if (number[0] == '0' && number[1] == '0') { 
     37         // Leading 00 
     38         norm[i++] = '+'; 
     39         number++; 
     40         number++; 
     41       } else if (number[0] == '0') { 
     42         // Add country prefix 
     43         norm[i++] = '+'; 
     44         norm[i++] = '4'; 
     45         norm[i++] = '9'; 
     46         number++; 
     47       } else if (number[0] == '+') { 
     48         // Correct way to start it 
     49         norm[i++] = '+'; 
     50         number++; 
     51       } else if (number[0] == '4' && number[1] == '9') { 
     52         // Missing + 
     53         norm[i++] = '+'; 
     54       } else { 
     55         // No sendible start of number, just return an unmodified copy 
     56         g_free(norm); 
     57         return g_strdup(number); 
     58       } 
     59         
     60       for (;number[0];number++) { 
     61         //printf("Debug: %s %s\n", norm, number); 
     62         // Strip all non-digit characters 
     63         if (g_ascii_isdigit (number[0])) { 
     64           norm[i++] = number[0]; 
     65         } 
     66       } 
     67       norm[i++] = '\0'; 
     68       return norm; 
     69} 
     70 
    2971void 
    3072sms_clear_combo_box_text (GtkComboBox *combo) 
    3173{ 
     
    150192 
    151193                        if (!number) continue; 
    152194                         
    153                         ncdata = g_hash_table_lookup (data->note_count, number); 
     195                        gchar *norm_number = normalize_number(number); 
     196                         
     197                        ncdata = g_hash_table_lookup (data->note_count, norm_number); 
    154198                        if (!ncdata) { 
    155199                                g_free (number); 
     200                                g_free (norm_number); 
    156201                                continue; 
    157202                        } 
    158203                         
     
    175220                         
    176221                        g_hash_table_remove (data->note_count, number); 
    177222                        g_free (number); 
     223                        g_free (norm_number); 
    178224                } 
    179225                 
    180226                g_list_free (numbers); 
     
    323369                                (EVCardAttribute *)n->data); 
    324370                         
    325371                        if (!number) continue; 
     372 
     373                        gchar *norm_number = normalize_number(number); 
    326374                         
    327                         ncdata = g_hash_table_lookup (data->note_count, number); 
     375                        ncdata = g_hash_table_lookup (data->note_count, norm_number); 
    328376                        g_free (number); 
     377                        g_free (norm_number); 
    329378                        if (!ncdata) continue; 
    330379                         
    331380                        read += g_list_length (ncdata->read); 
  • src/sms-utils.h

     
    2525GList *hito_vcard_get_named_attributes (EVCard *contact, const char *name); 
    2626gchar *hito_vcard_attribute_get_value_string (EVCardAttribute *attr); 
    2727 
     28gchar* normalize_number (gchar* number); 
    2829void sms_clear_combo_box_text (GtkComboBox *combo); 
    2930EContact *sms_get_selected_contact (SmsData *data); 
    3031GdkPixbuf *sms_contact_load_photo (EContact *contact); 
  • src/sms-contacts.c

     
    307307                gchar *number = e_contact_get (contact, (EContactField)i); 
    308308 
    309309                if (!number) continue; 
     310 
     311                gchar *norm_number = normalize_number(number); 
     312                g_free(number); 
    310313                 
    311                 g_hash_table_insert (data->numbers, number, 
     314                g_hash_table_insert (data->numbers, norm_number, 
    312315                        e_contact_get (contact, E_CONTACT_UID)); 
    313316        } 
    314317} 
  • src/sms-notes.c

     
    254254                        (EVCardAttribute *)n->data); 
    255255                 
    256256                if (!number) continue; 
     257 
     258                gchar *norm_number = normalize_number(number); 
    257259                 
    258260                jana_store_view_add_match (store_view, 
    259                         JANA_STORE_VIEW_AUTHOR, number); 
     261                        JANA_STORE_VIEW_AUTHOR, norm_number); 
    260262                jana_store_view_add_match (store_view, 
    261                         JANA_STORE_VIEW_RECIPIENT, number); 
     263                        JANA_STORE_VIEW_RECIPIENT, norm_number); 
    262264                g_free (number); 
     265                g_free (norm_number); 
    263266                found_match = TRUE; 
    264267        } 
    265268        g_list_free (numbers);