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

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

New version, now complete WRT openmoko-messages

  • 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                         
     
    173218                                } 
    174219                        } 
    175220                         
    176                         g_hash_table_remove (data->note_count, number); 
     221                        g_hash_table_remove (data->note_count, norm_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

     
    8383                 
    8484                if (!data->recipient_number) continue; 
    8585                 
    86                 uid = g_hash_table_lookup (data->numbers, 
    87                         data->recipient_number); 
     86                gchar *norm_number = normalize_number(data->recipient_number); 
     87                uid = g_hash_table_lookup (data->numbers, norm_number); 
     88                g_free(norm_number); 
     89 
     90                if (uid && data->author_uid) printf("%s %s\n",uid, data->author_uid); 
     91 
    8892                if ((!uid) || (!data->author_uid) || 
    8993                    strcmp (uid, data->author_uid) == 0) { 
    9094                        g_free (data->recipient_number); 
     
    254258                        (EVCardAttribute *)n->data); 
    255259                 
    256260                if (!number) continue; 
     261 
     262                gchar *norm_number = normalize_number(number); 
    257263                 
     264                // jana_store_view needs to support fuzzy matching as well 
     265                // for this to work 
    258266                jana_store_view_add_match (store_view, 
    259                         JANA_STORE_VIEW_AUTHOR, number); 
     267                        JANA_STORE_VIEW_AUTHOR, norm_number); 
    260268                jana_store_view_add_match (store_view, 
    261                         JANA_STORE_VIEW_RECIPIENT, number); 
     269                        JANA_STORE_VIEW_RECIPIENT, norm_number); 
    262270                g_free (number); 
     271                g_free (norm_number); 
    263272                found_match = TRUE; 
    264273        } 
    265274        g_list_free (numbers); 
     
    398407                 
    399408                if (!number) continue; 
    400409                 
    401                 uid = g_hash_table_lookup (data->numbers, number); 
     410                gchar *norm_number = normalize_number(number); 
     411                uid = g_hash_table_lookup (data->numbers, norm_number); 
     412                g_free(norm_number); 
     413                 
    402414                if (!uid) continue; 
    403415                 
    404416                iter = g_hash_table_lookup (data->contacts, uid); 
     
    457469                        key = jana_note_get_author (note); 
    458470 
    459471                if (!key) continue; 
    460  
    461                 ncdata = g_hash_table_lookup (data->note_count, key); 
    462472                 
     473                gchar *norm_number = normalize_number(key); 
     474                g_free(key); 
     475                ncdata = g_hash_table_lookup (data->note_count, norm_number); 
     476                 
    463477                if (!ncdata) { 
    464478                        ncdata = g_slice_new0 (SmsNoteCountData); 
    465479                        g_hash_table_insert ( 
    466                                 data->note_count, key, ncdata); 
     480                                data->note_count, norm_number, ncdata); 
    467481                } else { 
    468                         g_free (key); 
     482                        g_free(norm_number); 
    469483                } 
    470484                 
    471485                uid = jana_component_get_uid ( 
     
    506520                         
    507521                        if (!key) continue; 
    508522                         
    509                         ncdata = g_hash_table_lookup (data->note_count, key); 
    510                         g_free (key); 
    511                          
     523                        gchar *norm_number = normalize_number(key); 
     524                        g_free(key); 
     525                        ncdata = g_hash_table_lookup (data->note_count, norm_number); 
     526                        g_free (norm_number); 
     527 
    512528                        if (!ncdata) continue; 
    513529                         
    514530                        /* Swap from read/unread lists if necessary */