Ticket #1173: vformat.patch

File vformat.patch, 3.2 KB (added by henrik, 3 years ago)
  • src/xmlformat-common.c

     
    227227        vformat_attribute_add_value(attr, tmp); 
    228228} 
    229229 
     230void add_value_array(VFormatAttribute *attr, OSyncXMLField *xmlfield, const char *parameterNameArray[], int nParameters, const char *encoding) { 
     231        const char **parameterValueArray = malloc(nParameters*sizeof(char*)); 
     232        int n=-1; 
     233        int i; 
     234        for (i=0; i<nParameters; ++i) { 
     235                parameterValueArray[i]=osync_xmlfield_get_key_value(xmlfield, parameterNameArray[i]); 
     236                if (parameterValueArray[i]) n=i; 
     237        } 
     238        for (i=0; i<=n; ++i) { 
     239                const char *name = parameterNameArray[i]; 
     240                const char *tmp = parameterValueArray[i]; 
     241                if (needs_charset((unsigned char*)tmp)) 
     242                        if (!vformat_attribute_has_param (attr, "CHARSET")) 
     243                                vformat_attribute_add_param_with_value(attr, "CHARSET", "UTF-8"); 
     244         
     245                /* XXX: This one breaks unit test case: conv_vcard_evolution2_special 
     246                   TODO: Combine this with converter extension/config ... e.g. if a mobile needs QP! 
     247                */         
     248                if (needs_encoding((unsigned char*)tmp, encoding)) { 
     249                        if (!vformat_attribute_has_param (attr, "ENCODING")) 
     250                                vformat_attribute_add_param_with_value(attr, "ENCODING", encoding); 
     251                        vformat_attribute_add_value_decoded(attr, tmp, strlen(tmp) + 1); 
     252                } else 
     253                vformat_attribute_add_value(attr, tmp); 
     254 
     255        } 
     256        free(parameterValueArray); 
     257} 
     258 
     259 
    230260void add_values(VFormatAttribute *attr, OSyncXMLField *xmlfield, const char *encoding) 
    231261{ 
    232262        int i, c = osync_xmlfield_get_key_count(xmlfield); 
  • src/xmlformat-common.h

     
    7171osync_bool needs_charset(const unsigned char *tmp); 
    7272 
    7373void add_value(VFormatAttribute *attr, OSyncXMLField *xmlfield, const char *name, const char *encoding); 
     74void add_value_array(VFormatAttribute *attr, OSyncXMLField *xmlfield, const char *parameterNameArray[], int nParameters, const char *encoding); 
    7475void add_values(VFormatAttribute *attr, OSyncXMLField *xmlfield, const char *encoding); 
    7576void add_values_from_nth_field_on(VFormatAttribute *attr, OSyncXMLField *xmlfield, const char *encoding, int nth); 
    7677 
  • src/xmlformat-vcard.c

     
    14661466        return attr; 
    14671467} 
    14681468 
     1469static const char* xml_name_parameters[] = { "LastName", "FirstName", "Additional", "Prefix", "Suffix"}; 
     1470 
    14691471static VFormatAttribute *handle_xml_name_attribute(VFormat *vcard, OSyncXMLField *xmlfield, const char *encoding) 
    14701472{ 
    14711473        osync_trace(TRACE_INTERNAL, "Handling name xml attribute"); 
    14721474        VFormatAttribute *attr = vformat_attribute_new(NULL, "N"); 
    1473         add_value(attr, xmlfield, "LastName", encoding); 
    1474         add_value(attr, xmlfield, "FirstName", encoding); 
    1475         add_value(attr, xmlfield, "Additional", encoding); 
    1476         add_value(attr, xmlfield, "Prefix", encoding); 
    1477         add_value(attr, xmlfield, "Suffix", encoding); 
     1475        add_value_array(attr, xmlfield, xml_name_parameters, 5, encoding); 
    14781476        vformat_add_attribute(vcard, attr); 
    14791477        return attr; 
    14801478}