static void writeProp(OFile *fp, VObject *o) { int isQuoted=0; if (NAME_OF(o)) { const struct PreDefProp *pi; VObjectIterator t; const char **fields_ = 0; pi = lookupPropInfo(NAME_OF(o)); if (pi && ((pi->flags & PD_BEGIN) != 0)) { writeVObject_(fp,o); return; } if (isAPropertyOf(o,VCGroupingProp)) writeGroup(fp,o); else appendsOFile(fp,NAME_OF(o)); if (pi) fields_ = pi->fields; initPropIterator(&t,o); while (moreIteration(&t)) { const char *s; VObject *eachProp = nextVObject(&t); s = NAME_OF(eachProp); if (strcasecmp(VCGroupingProp,s) && !inList(fields_,s)) writeAttrValue(fp,eachProp); if (strcasecmp(VCQPProp,s)==0 || strcasecmp(VCQuotedPrintableProp,s)==0) isQuoted=1; } if (fields_) { int i = 0, n = 0; const char** fields = fields_; /* output prop as fields */ appendcOFile(fp,':'); while (*fields) { VObject *tl = isAPropertyOf(o,*fields); i++; if (tl) n = i; fields++; } fields = fields_; for (i=0;i<n;i++) { writeValue(fp,isAPropertyOf(o,*fields),0,isQuoted); fields++; if (i<(n-1)) appendcOFile(fp,';'); } } } if (VALUE_TYPE(o)) { unsigned long size = 0; VObject *p = isAPropertyOf(o,VCDataSizeProp); if (p) size = LONG_VALUE_OF(p); appendcOFile(fp,':'); writeValue(fp,o,size,isQuoted); } appendcOFile(fp,'\n'); }
static void writeValue(OFile *fp, VObject *o, unsigned long size) { if (o == 0) return; switch (VALUE_TYPE(o)) { case VCVT_USTRINGZ: { char *s = fakeCString(USTRINGZ_VALUE_OF(o)); if (isAPropertyOf(o, VCQuotedPrintableProp)) writeQPString(fp, s, 1); else writeQPString(fp, s, 0); deleteStr(s); break; } case VCVT_STRINGZ: { if (isAPropertyOf(o, VCQuotedPrintableProp)) writeQPString(fp, STRINGZ_VALUE_OF(o), 1); else writeQPString(fp, STRINGZ_VALUE_OF(o), 0); break; } case VCVT_UINT: { char buf[16]; snprintf(buf,sizeof(buf),"%u", INTEGER_VALUE_OF(o)); appendsOFile(fp,buf); break; } case VCVT_ULONG: { char buf[16]; snprintf(buf,sizeof(buf),"%lu", LONG_VALUE_OF(o)); appendsOFile(fp,buf); break; } case VCVT_RAW: { appendcOFile(fp,'\n'); writeBase64(fp,(unsigned char*)(ANY_VALUE_OF(o)),size); break; } case VCVT_VOBJECT: appendcOFile(fp,'\n'); writeVObject_(fp,VOBJECT_VALUE_OF(o)); break; } }
static void writeGroup(OFile *fp, VObject *o) { char buf1[256]; char buf2[256]; strncpy(buf1,NAME_OF(o), 255); while ((o=isAPropertyOf(o,VCGroupingProp)) != 0) { strncpy(buf2,STRINGZ_VALUE_OF(o),255); strcat(buf2,"."); strncat(buf2,buf1,254-strlen(STRINGZ_VALUE_OF(o))); strcpy(buf1,buf2); } appendsOFile(fp,buf1); }
static void writeGroup(OFile *fp, VObject *o) { char buf1[256]; char buf2[256]; strcpy(buf1,NAME_OF(o)); while ((o=isAPropertyOf(o,VCGroupingProp)) != 0) { strncpy(buf2,STRINGZ_VALUE_OF(o),sizeof(buf2)); buf2[sizeof(buf2)-1] = '\0'; strncat(buf2,".",sizeof(buf2)-strlen(buf2)-1); strncat(buf2,buf1,sizeof(buf2)-strlen(buf2)-1); strcpy(buf1,buf2); } appendsOFile(fp,buf1); }
static void writeProp(OFile *fp, VObject *o) { if (NAME_OF(o)) { struct PreDefProp *pi; VObjectIterator t; const char **fields_ = 0; pi = lookupPropInfo(NAME_OF(o)); if (pi && ((pi->flags & PD_BEGIN) != 0)) { writeVObject_(fp,o); return; } if (isAPropertyOf(o,VCGroupingProp)) writeGroup(fp,o); else appendsOFile(fp,NAME_OF(o)); if (pi) fields_ = pi->fields; initPropIterator(&t,o); while (moreIteration(&t)) { const char *s; VObject *eachProp = nextVObject(&t); s = NAME_OF(eachProp); if (qstricmp(VCGroupingProp,s) && !inList(fields_,s)) writeAttrValue(fp,eachProp); } if (fields_) { int i = 0, n = 0; const char** fields = fields_; /* output prop as fields */ bool printable = TRUE; while (*fields && printable) { VObject *t = isAPropertyOf(o,*fields); if (includesUnprintable(t,TRUE)) printable = FALSE; fields++; } fields = fields_; if (!printable) appendsOFileEncCs(fp); appendcOFile(fp,':'); while (*fields) { VObject *t = isAPropertyOf(o,*fields); i++; if (t) n = i; fields++; } fields = fields_; for (i=0;i<n;i++) { writeValue(fp,isAPropertyOf(o,*fields),0,TRUE); fields++; if (i<(n-1)) appendcOFile(fp,';'); } } } if (VALUE_TYPE(o)) { if ( includesUnprintable(o,FALSE) ) appendsOFileEncCs(fp); unsigned long size = 0; VObject *p = isAPropertyOf(o,VCDataSizeProp); if (p) size = LONG_VALUE_OF(p); appendcOFile(fp,':'); writeValue(fp,o,size,FALSE); } appendcOFile(fp,'\n'); }
static void convertNameValue(VObject *vObj, nsIAbCard *aCard) { const char *cardPropName = NULL; // if the vCard property is not a root property then we need to determine its exact property. // a good example of this is VCTelephoneProp, this prop has four objects underneath it: // fax, work and home and cellular. if (PL_strcasecmp(VCCityProp, vObjectName(vObj)) == 0) cardPropName = kWorkCityProperty; else if (PL_strcasecmp(VCTelephoneProp, vObjectName(vObj)) == 0) { if (isAPropertyOf(vObj, VCFaxProp)) cardPropName = kFaxProperty; else if (isAPropertyOf(vObj, VCWorkProp)) cardPropName = kWorkPhoneProperty; else if (isAPropertyOf(vObj, VCHomeProp)) cardPropName = kHomePhoneProperty; else if (isAPropertyOf(vObj, VCCellularProp)) cardPropName = kCellularProperty; else if (isAPropertyOf(vObj, VCPagerProp)) cardPropName = kPagerProperty; else return; } else if (PL_strcasecmp(VCEmailAddressProp, vObjectName(vObj)) == 0) cardPropName = kPriEmailProperty; else if (PL_strcasecmp(VCFamilyNameProp, vObjectName(vObj)) == 0) cardPropName = kLastNameProperty; else if (PL_strcasecmp(VCFullNameProp, vObjectName(vObj)) == 0) cardPropName = kDisplayNameProperty; else if (PL_strcasecmp(VCGivenNameProp, vObjectName(vObj)) == 0) cardPropName = kFirstNameProperty; else if (PL_strcasecmp(VCOrgNameProp, vObjectName(vObj)) == 0) cardPropName = kCompanyProperty; else if (PL_strcasecmp(VCOrgUnitProp, vObjectName(vObj)) == 0) cardPropName = kDepartmentProperty; else if (PL_strcasecmp(VCPostalCodeProp, vObjectName(vObj)) == 0) cardPropName = kWorkZipCodeProperty; else if (PL_strcasecmp(VCRegionProp, vObjectName(vObj)) == 0) cardPropName = kWorkStateProperty; else if (PL_strcasecmp(VCStreetAddressProp, vObjectName(vObj)) == 0) cardPropName = kWorkAddressProperty; else if (PL_strcasecmp(VCPostalBoxProp, vObjectName(vObj)) == 0) cardPropName = kWorkAddress2Property; else if (PL_strcasecmp(VCCountryNameProp, vObjectName(vObj)) == 0) cardPropName = kWorkCountryProperty; else if (PL_strcasecmp(VCTitleProp, vObjectName(vObj)) == 0) cardPropName = kJobTitleProperty; else if (PL_strcasecmp(VCUseHTML, vObjectName(vObj)) == 0) cardPropName = kPreferMailFormatProperty; else if (PL_strcasecmp(VCNoteProp, vObjectName(vObj)) == 0) cardPropName = kNotesProperty; else if (PL_strcasecmp(VCURLProp, vObjectName(vObj)) == 0) cardPropName = kWorkWebPageProperty; else return; if (!VALUE_TYPE(vObj)) return; char *cardPropValue = getCString(vObj); aCard->SetPropertyAsAUTF8String(cardPropName, nsDependentCString(cardPropValue)); PR_FREEIF(cardPropValue); return; }