private void BuildProperties_URL( vCardPropertyCollection properties, vCard card) { foreach (vCardWebsite webSite in card.Websites) { if (!string.IsNullOrEmpty(webSite.Url)) { vCardProperty property = new vCardProperty("URL", webSite.Url.ToString()); if (webSite.IsWorkSite) { property.Subproperties.Add("TYPE", "WORK"); } // Add Subproperty for HOME aswell if (webSite.IsPersonalSite) { property.Subproperties.Add("TYPE", "HOME"); } properties.Add(property); } } }
/// <summary> /// Builds the NOTE property. /// </summary> private void BuildProperties_NOTE( vCardPropertyCollection properties, vCard card) { foreach (vCardNote note in card.Notes) { if (!string.IsNullOrEmpty(note.Text)) { vCardProperty property = new vCardProperty(); property.Name = "NOTE"; property.Value = note.Text; if (!string.IsNullOrEmpty(note.Language)) { property.Subproperties.Add("language", note.Language); } property.Subproperties.Add("ENCODING", "QUOTED-PRINTABLE"); properties.Add(property); } } }
/// <summary> /// Builds the NICKNAME property. /// </summary> private void BuildProperties_NICKNAME( vCardPropertyCollection properties, vCard card) { // The NICKNAME property specifies the familiar name // of the person, such as Jim. This is defined in // section 3.1.3 of RFC 2426. Multiple names can // be listed, separated by commas. if (card.Nicknames.Count > 0) { // A NICKNAME property is a comma-separated // list of values. Create a value list and // add the nicknames collection to it. vCardValueCollection values = new vCardValueCollection(','); values.Add(card.Nicknames); // Create the new properties with each name separated // by a comma. vCardProperty property = new vCardProperty("NICKNAME", values); properties.Add(property); } }
/// <summary> /// Builds the ORG property. /// </summary> private void BuildProperties_ORG( vCardPropertyCollection properties, vCard card) { // The ORG property specifies the name of the // person's company or organization. Example: // // ORG:FairMetric LLC if (!string.IsNullOrEmpty(card.Organization)) { vCardProperty property; // Add department also if (!string.IsNullOrEmpty(card.Department)) { vCardValueCollection values = new vCardValueCollection(';'); values.Add(card.Organization); values.Add(card.Department); property = new vCardProperty("ORG", values); } else { property = new vCardProperty("ORG", card.Organization); } properties.Add(property); } }
private void BuildProperties_CLASS( vCardPropertyCollection properties, vCard card) { vCardProperty property = new vCardProperty("CLASS"); switch (card.AccessClassification) { case vCardAccessClassification.Unknown: // No value is written. return; case vCardAccessClassification.Confidential: property.Value = "CONFIDENTIAL"; break; case vCardAccessClassification.Private: property.Value = "PRIVATE"; break; case vCardAccessClassification.Public: property.Value = "PUBLIC"; break; default: throw new NotSupportedException(); } properties.Add(property); }
private void BuildProperties_N( vCardPropertyCollection properties, vCard card) { // The property has the following components: Family Name, // Given Name, Additional Names, Name Prefix, and Name // Suffix. Example: // // N:Pinch;David // N:Pinch;David;John // // The N property is required (see section 3.1.2 of RFC 2426). vCardValueCollection values = new vCardValueCollection(';'); values.Add(card.FamilyName); values.Add(card.GivenName); values.Add(card.AdditionalNames); values.Add(card.NamePrefix); values.Add(card.NameSuffix); vCardProperty property = new vCardProperty("N", values); properties.Add(property); }
private void BuildProperties_TZ( vCardPropertyCollection properties, vCard card) { if (!string.IsNullOrEmpty(card.TimeZone)) { properties.Add(new vCardProperty("TZ", card.TimeZone)); } }
private void BuildProperties_IMPP(vCardPropertyCollection properties, vCard card) { // adding support for IMPP (IM handles) in the vCard //iOS outputs this => IMPP;X-SERVICE-TYPE=Skype;type=HOME;type=pref:skype:skypeusernameee foreach (var im in card.IMs) { vCardProperty property = new vCardProperty(); property.Name = "IMPP"; string prefix = IMTypeUtils.GetIMTypePropertyPrefix(im.ServiceType); string suffix = IMTypeUtils.GetIMTypePropertySuffix(im.ServiceType); if (!string.IsNullOrEmpty(prefix) && !string.IsNullOrEmpty(suffix)) { property.Subproperties.Add("X-SERVICE-TYPE", prefix); property.Value = string.Concat(suffix, ":", im.Handle); } else { property.Value = im.Handle; } if (im.IsPreferred) { property.Subproperties.Add(TYPE, "PREF"); } switch (im.ItemType) { case ItemType.HOME: property.Subproperties.Add(TYPE, ItemType.HOME.ToString()); break; case ItemType.WORK: property.Subproperties.Add(TYPE, ItemType.WORK.ToString()); break; case ItemType.UNSPECIFIED: default: property.Subproperties.Add(TYPE, "OTHER"); break; } properties.Add(property); if (im.ServiceType == IMServiceType.AIM) { var propertyXAim = new vCardProperty("X-AIM", im.Handle); properties.Add(propertyXAim); } } }
private void BuildProperties_X_MS_IMADDRESS( vCardPropertyCollection properties, vCard card) { // The X-MS-IMADDRESS property is an extended (custom) // property supported by Microsoft Outlook. if (!string.IsNullOrEmpty(card.IMAddress)) { properties.Add(new vCardProperty("X-MS-IMADDRESS", card.IMAddress)); } }
/// <summary> /// Builds PRODID properties. /// </summary> private void BuildProperties_PRODID( vCardPropertyCollection properties, vCard card) { if (!string.IsNullOrEmpty(card.ProductId)) { vCardProperty property = new vCardProperty(); property.Name = "PRODID"; property.Value = card.ProductId; properties.Add(property); } }
private void BuildProperties_NAME( vCardPropertyCollection properties, vCard card) { if (!string.IsNullOrEmpty(card.DisplayName)) { vCardProperty property = new vCardProperty("NAME", card.DisplayName); properties.Add(property); } }
/// <summary> /// Builds the REV property. /// </summary> private void BuildProperties_REV( vCardPropertyCollection properties, vCard card) { if (card.RevisionDate.HasValue) { vCardProperty property = new vCardProperty("REV", card.RevisionDate.Value.ToString()); properties.Add(property); } }
/// <summary> /// Writes a collection of vCard properties to an output text writer. /// </summary> public void Write(vCardPropertyCollection properties, TextWriter output) { if (properties == null) throw new ArgumentNullException("properties"); if (output == null) throw new ArgumentNullException("output"); foreach (vCardProperty property in properties) { output.WriteLine(EncodeProperty(property)); } }
/// <summary> /// Builds the ROLE property. /// </summary> private void BuildProperties_ROLE( vCardPropertyCollection properties, vCard card) { // The ROLE property identifies the role of // the person at his/her organization. if (!string.IsNullOrEmpty(card.Role)) { vCardProperty property = new vCardProperty("ROLE", card.Role); properties.Add(property); } }
/// <summary> /// Writes a vCard to an output text writer. /// </summary> public override void Write(vCard card, TextWriter output) { if (card == null) throw new ArgumentNullException("card"); if (output == null) throw new ArgumentNullException("output"); // Get the properties of the vCard. vCardPropertyCollection properties = BuildProperties(card); Write(properties, output); }
/// <summary> /// Builds the MAILER property. /// </summary> private void BuildProperties_MAILER( vCardPropertyCollection properties, vCard card) { // The MAILER property indicates the software that // generated the vCard. See section 2.4.3 of the // vCard 2.1 specification. Support is not widespread. if (!string.IsNullOrEmpty(card.Mailer)) { vCardProperty property = new vCardProperty("MAILER", card.Mailer); properties.Add(property); } }
private void BuildProperties_FN( vCardPropertyCollection properties, vCard card) { // The FN property indicates the formatted // name of the person. This can be something // like "John Smith". if (!string.IsNullOrEmpty(card.FormattedName)) { vCardProperty property = new vCardProperty("FN", card.FormattedName); properties.Add(property); } }
/// <summary> /// Builds the BDAY property. /// </summary> private void BuildProperties_BDAY( vCardPropertyCollection properties, vCard card) { // The BDAY property indicates the birthdate // of the person. The output format here is based on // Microsoft Outlook, which writes the date as YYYMMDD. if (card.BirthDate.HasValue) { vCardProperty property = new vCardProperty("BDAY", card.BirthDate.Value); properties.Add(property); } }
private void BuildProperties_LABEL( vCardPropertyCollection properties, vCard card) { foreach (vCardDeliveryLabel label in card.DeliveryLabels) { if (label.Text.Length > 0) { vCardProperty property = new vCardProperty("LABEL", label.Text); if (label.IsDomestic) { property.Subproperties.Add("DOM"); } if (label.IsInternational) { property.Subproperties.Add("INTL"); } if (label.IsParcel) { property.Subproperties.Add("PARCEL"); } if (label.IsPostal) { property.Subproperties.Add("POSTAL"); } if (label.IsHome) { property.Subproperties.Add("HOME"); } if (label.IsWork) { property.Subproperties.Add("WORK"); } // Give a hint to use QUOTED-PRINTABLE. property.Subproperties.Add("ENCODING", "QUOTED-PRINTABLE"); properties.Add(property); } } }
/// <summary> /// Builds KEY properties. /// </summary> private void BuildProperties_KEY( vCardPropertyCollection properties, vCard card) { // A KEY field contains an embedded security certificate. foreach (vCardCertificate certificate in card.Certificates) { vCardProperty property = new vCardProperty(); property.Name = "KEY"; property.Value = certificate.Data; property.Subproperties.Add(certificate.KeyType); properties.Add(property); } }
/// <summary> /// Builds the ORG property. /// </summary> private void BuildProperties_ORG( vCardPropertyCollection properties, vCard card) { // The ORG property specifies the name of the // person's company or organization. Example: // // ORG:FairMetric LLC if (!string.IsNullOrEmpty(card.Organization)) { vCardProperty property = new vCardProperty("ORG", card.Organization); properties.Add(property); } }
/// <summary> /// Builds the GEO property. /// </summary> private void BuildProperties_GEO( vCardPropertyCollection properties, vCard card) { // The GEO properties contains the latitude and // longitude of the person or company of the vCard. if (card.Latitude.HasValue && card.Longitude.HasValue) { vCardProperty property = new vCardProperty(); property.Name = "GEO"; property.Value = card.Latitude.ToString() + ";" + card.Longitude.ToString(); properties.Add(property); } }
private void BuildProperties_X_WAB_GENDER( vCardPropertyCollection properties, vCard card) { // The X-WAB-GENDER property is an extended (custom) // property supported by Microsoft Outlook. switch (card.Gender) { case vCardGender.Female: properties.Add(new vCardProperty("X-WAB-GENDER", "1")); break; case vCardGender.Male: properties.Add(new vCardProperty("X-WAB-GENDER", "2")); break; } }
private void BuildProperties_TITLE( vCardPropertyCollection properties, vCard card) { // The TITLE property specifies the job title of // the person. Example: // // TITLE:Systems Analyst // TITLE:President if (!string.IsNullOrEmpty(card.Title)) { vCardProperty property = new vCardProperty("TITLE", card.Title); properties.Add(property); } }
private void BuildProperties_LABEL( vCardPropertyCollection properties, vCard card) { foreach (vCardDeliveryLabel label in card.DeliveryLabels) { if (label.Text.Length > 0) { vCardProperty property = new vCardProperty("LABEL", label.Text); if (label.IsDomestic) { property.Subproperties.Add(TYPE, "DOM"); } if (label.IsInternational) { property.Subproperties.Add(TYPE, "INTL"); } if (label.IsParcel) { property.Subproperties.Add(TYPE, "PARCEL"); } if (label.IsPostal) { property.Subproperties.Add(TYPE, "POSTAL"); } if (label.IsHome) { property.Subproperties.Add(TYPE, "HOME"); } if (label.IsWork) { property.Subproperties.Add(TYPE, "WORK"); } properties.Add(property); } } }
private void BuildProperties_XSOCIALPROFILE(vCardPropertyCollection properties, vCard card) { // adding support for X-SOCIALPROFILE) in the vCard foreach (var sp in card.SocialProfiles) { vCardProperty property = new vCardProperty(); property.Name = "X-SOCIALPROFILE"; string propertyType = SocialProfileTypeUtils.GetSocialProfileServicePropertyType(sp.ServiceType); property.Subproperties.Add("TYPE", propertyType); property.Subproperties.Add("X-USER", sp.Username); property.Value = sp.ProfileUrl; properties.Add(property); } }
/// <summary> /// Builds SOURCE properties. /// </summary> private void BuildProperties_SOURCE( vCardPropertyCollection properties, vCard card) { foreach (vCardSource source in card.Sources) { vCardProperty property = new vCardProperty(); property.Name = "SOURCE"; property.Value = source.Uri.ToString(); if (!string.IsNullOrEmpty(source.Context)) { property.Subproperties.Add("CONTEXT", source.Context); } properties.Add(property); } }
/// <summary> /// Initializes a new instance of the <see cref="vCard"/> class. /// </summary> public vCard() { // Per Microsoft best practices, string properties should // never return null. String properties should always // return String.Empty. this.additionalNames = string.Empty; this.department = string.Empty; this.displayName = string.Empty; this.familyName = string.Empty; this.formattedName = string.Empty; this.givenName = string.Empty; this.mailer = string.Empty; this.namePrefix = string.Empty; this.nameSuffix = string.Empty; this.office = string.Empty; this.organization = string.Empty; this.productId = string.Empty; this.role = string.Empty; this.timeZone = string.Empty; this.title = string.Empty; this.uniqueId = string.Empty; this.assistant = string.Empty; this.spouse = string.Empty; this.manager = string.Empty; this.categories = new StringCollection(); this.certificates = new vCardCertificateCollection(); this.deliveryAddresses = new vCardDeliveryAddressCollection(); this.deliveryLabels = new vCardDeliveryLabelCollection(); this.emailAddresses = new vCardEmailAddressCollection(); this.nicknames = new StringCollection(); this.notes = new vCardNoteCollection(); this.phones = new vCardPhoneCollection(); this.photos = new vCardPhotoCollection(); this.sources = new vCardSourceCollection(); this.websites = new vCardWebsiteCollection(); this.ims = new vCardIMPPCollection(); this.sps = new vCardSocialProfileCollection(); this.members = new vCardMemberCollection(); this.otherProperties = new vCardPropertyCollection(); }
private void BuildProperties_URL( vCardPropertyCollection properties, vCard card) { foreach (vCardWebsite webSite in card.Websites) { if (!string.IsNullOrEmpty(webSite.Url)) { vCardProperty property = new vCardProperty("URL", webSite.Url.ToString()); if (webSite.IsWorkSite) property.Subproperties.Add("WORK"); properties.Add(property); } } }
private void BuildProperties_CATEGORIES( vCardPropertyCollection properties, vCard card) { if (card.Categories.Count > 0) { vCardValueCollection values = new vCardValueCollection(','); foreach (string category in card.Categories) { if (!string.IsNullOrEmpty(category)) { values.Add(category); } } properties.Add( new vCardProperty("CATEGORIES", values)); } }
private void BuildProperties_PHOTO( vCardPropertyCollection properties, vCard card) { foreach (vCardPhoto photo in card.Photos) { if (photo.Url == null) { // This photo does not have a URL associated // with it. Therefore a property can be // generated only if the image data is loaded. // Otherwise there is not enough information. if (photo.IsLoaded) { properties.Add( new vCardProperty("PHOTO", photo.GetBytes())); } } else { // This photo has a URL associated with it. The // PHOTO property can either be linked as an image // or embedded, if desired. bool doEmbedded = photo.Url.IsFile ? this.embedLocalImages : this.embedInternetImages; if (doEmbedded) { // According to the settings of the card writer, // this linked image should be embedded into the // vCard data. Attempt to fetch the data. try { //photo.Fetch(); // PCL } catch { // An error was encountered. The image can // still be written as a link, however. doEmbedded = false; } } // At this point, doEmbedded is true only if (a) the // writer was configured to embed the image, and (b) // the image was successfully downloaded. if (doEmbedded) { properties.Add( new vCardProperty("PHOTO", photo.GetBytes())); } else { vCardProperty uriPhotoProperty = new vCardProperty("PHOTO"); // Set the VALUE property to indicate that // the data for the photo is a URI. uriPhotoProperty.Subproperties.Add("VALUE", "URI"); uriPhotoProperty.Value = photo.Url.ToString(); properties.Add(uriPhotoProperty); } } } }
/// <summary> /// Builds TEL properties. /// </summary> private void BuildProperties_TEL( vCardPropertyCollection properties, vCard card) { // The TEL property indicates a telephone number of // the person (including non-voice numbers like fax // and BBS numbers). // // TEL;VOICE;WORK:1-800-929-5805 foreach (vCardPhone phone in card.Phones) { // A telephone entry has the property name TEL and // can have zero or more subproperties like FAX // or HOME. Examples: // // TEL;HOME:+1-612-555-1212 // TEL;FAX;HOME:+1-612-555-1212 vCardProperty property = new vCardProperty(); property.Name = "TEL"; if (phone.IsBBS) property.Subproperties.Add("BBS"); if (phone.IsCar) property.Subproperties.Add("CAR"); if (phone.IsCellular) property.Subproperties.Add("CELL"); if (phone.IsFax) property.Subproperties.Add("FAX"); if (phone.IsHome) property.Subproperties.Add("HOME"); if (phone.IsISDN) property.Subproperties.Add("ISDN"); if (phone.IsMessagingService) property.Subproperties.Add("MSG"); if (phone.IsModem) property.Subproperties.Add("MODEM"); if (phone.IsPager) property.Subproperties.Add("PAGER"); if (phone.IsPreferred) property.Subproperties.Add("PREF"); if (phone.IsVideo) property.Subproperties.Add("VIDEO"); if (phone.IsVoice) property.Subproperties.Add("VOICE"); if (phone.IsWork) property.Subproperties.Add("WORK"); property.Value = phone.FullNumber; properties.Add(property); } }
/// <summary> /// Builds SOURCE properties. /// </summary> private void BuildProperties_SOURCE( vCardPropertyCollection properties, vCard card) { foreach (vCardSource source in card.Sources) { vCardProperty property = new vCardProperty(); property.Name = "SOURCE"; property.Value = source.Uri.ToString(); if (!string.IsNullOrEmpty(source.Context)) property.Subproperties.Add("CONTEXT", source.Context); properties.Add(property); } }
private void BuildProperties_IMPP ( vCardPropertyCollection properties, vCard card) { // Build IMPP and X-AIM properties foreach (vCardIMPP impp in card.IMs) { if (!string.IsNullOrEmpty(impp.Handle)) { vCardProperty propertyIMPP; vCardProperty propertyXAIM; if (impp.ServiceType == IMServiceType.AIM) { propertyIMPP = new vCardProperty("IMPP", "aim:"+impp.Handle); propertyIMPP.Subproperties.Add("X-SERVICE-TYPE", "AIM"); if (impp.ItemType == ItemType.HOME) propertyIMPP.Subproperties.Add("TYPE", "HOME"); if (impp.ItemType == ItemType.WORK) propertyIMPP.Subproperties.Add("TYPE", "WORK"); if (impp.IsPreferred) propertyIMPP.Subproperties.Add("TYPE", "PREF"); properties.Add(propertyIMPP); propertyXAIM = new vCardProperty("X-AIM", impp.Handle); properties.Add(propertyXAIM); } } } }
/// <summary> /// Builds the NOTE property. /// </summary> private void BuildProperties_NOTE( vCardPropertyCollection properties, vCard card) { foreach (vCardNote note in card.Notes) { if (!string.IsNullOrEmpty(note.Text)) { vCardProperty property = new vCardProperty(); property.Name = "NOTE"; property.Value = note.Text.Replace("\r\n","\n"); if (!string.IsNullOrEmpty(note.Language)) { property.Subproperties.Add("language", note.Language); } // Don't use QUOTED-PRINTABLE since it is deprecated //property.Subproperties.Add("ENCODING", "QUOTED-PRINTABLE"); properties.Add(property); } } }
/// <summary> /// Builds EMAIL properties. /// </summary> private void BuildProperties_EMAIL( vCardPropertyCollection properties, vCard card) { // The EMAIL property contains an electronic // mail address for the purpose. A vCard may contain // as many email addresses as needed. The format also // supports various vendors, such as CompuServe addresses // and Internet SMTP addresses. // // EMAIL;INTERNET:[email protected] foreach (vCardEmailAddress emailAddress in card.EmailAddresses) { vCardProperty property = new vCardProperty(); property.Name = "EMAIL"; property.Value = emailAddress.Address; if (emailAddress.IsPreferred) { property.Subproperties.Add("PREF"); } switch (emailAddress.EmailType) { case vCardEmailAddressType.Internet: property.Subproperties.Add("INTERNET"); break; case vCardEmailAddressType.AOL: property.Subproperties.Add("AOL"); break; case vCardEmailAddressType.AppleLink: property.Subproperties.Add("AppleLink"); break; case vCardEmailAddressType.AttMail: property.Subproperties.Add("ATTMail"); break; case vCardEmailAddressType.CompuServe: property.Subproperties.Add("CIS"); break; case vCardEmailAddressType.eWorld: property.Subproperties.Add("eWorld"); break; case vCardEmailAddressType.IBMMail: property.Subproperties.Add("IBMMail"); break; case vCardEmailAddressType.MCIMail: property.Subproperties.Add("MCIMail"); break; case vCardEmailAddressType.PowerShare: property.Subproperties.Add("POWERSHARE"); break; case vCardEmailAddressType.Prodigy: property.Subproperties.Add("PRODIGY"); break; case vCardEmailAddressType.Telex: property.Subproperties.Add("TLX"); break; case vCardEmailAddressType.X400: property.Subproperties.Add("X400"); break; default: property.Subproperties.Add("INTERNET"); break; } properties.Add(property); } }
private void BuildProperties_LABEL( vCardPropertyCollection properties, vCard card) { foreach (vCardDeliveryLabel label in card.DeliveryLabels) { if (label.Text.Length > 0) { vCardProperty property = new vCardProperty("LABEL", label.Text); if (label.IsDomestic) property.Subproperties.Add("DOM"); if (label.IsInternational) property.Subproperties.Add("INTL"); if (label.IsParcel) property.Subproperties.Add("PARCEL"); if (label.IsPostal) property.Subproperties.Add("POSTAL"); if (label.IsHome) property.Subproperties.Add("HOME"); if (label.IsWork) property.Subproperties.Add("WORK"); // Give a hint to use QUOTED-PRINTABLE. property.Subproperties.Add("ENCODING", "QUOTED-PRINTABLE"); properties.Add(property); } } }
// The next set of functions generate raw vCard properties // from an object in the vCard object model. Every method // has a collection (into which new properties should be // placed) and a vCard object (from which the properties // should be generated). #region [ BuildProperties ] /// <summary> /// Builds a collection of standard properties based on /// the specified vCard. /// </summary> /// <returns> /// A <see cref="vCardPropertyCollection"/> that contains all /// properties for the current vCard, including the header /// and footer properties. /// </returns> /// <seealso cref="vCard"/> /// <seealso cref="vCardProperty"/> private vCardPropertyCollection BuildProperties( vCard card) { vCardPropertyCollection properties = new vCardPropertyCollection(); // The BEGIN:VCARD line marks the beginning of // the vCard contents. Later it will end with END:VCARD. // See section 2.1.1 of RFC 2426. properties.Add(new vCardProperty("BEGIN", "VCARD")); BuildProperties_NAME( properties, card); BuildProperties_SOURCE( properties, card); BuildProperties_N( properties, card); BuildProperties_FN( properties, card); BuildProperties_ADR( properties, card); BuildProperties_BDAY( properties, card); BuildProperties_CATEGORIES( properties, card); BuildProperties_CLASS( properties, card); BuildProperties_EMAIL( properties, card); BuildProperties_GEO( properties, card); BuildProperties_KEY( properties, card); BuildProperties_LABEL( properties, card); BuildProperties_MAILER( properties, card); BuildProperties_NICKNAME( properties, card); BuildProperties_NOTE( properties, card); BuildProperties_ORG( properties, card); BuildProperties_PHOTO( properties, card); BuildProperties_PRODID( properties, card); BuildProperties_REV( properties, card); BuildProperties_ROLE( properties, card); BuildProperties_TEL( properties, card); BuildProperties_TITLE( properties, card); BuildProperties_TZ( properties, card); BuildProperties_UID( properties, card); BuildProperties_URL( properties, card); BuildProperties_X_WAB_GENDER( properties, card); // The end of the vCard is marked with an END:VCARD. properties.Add(new vCardProperty("END", "VCARD")); return properties; }
/// <summary> /// Builds ADR properties. /// </summary> private void BuildProperties_ADR( vCardPropertyCollection properties, vCard card) { foreach (vCardDeliveryAddress address in card.DeliveryAddresses) { // Do not generate a postal address (ADR) property // if the entire address is blank. if ( (!string.IsNullOrEmpty(address.City)) || (!string.IsNullOrEmpty(address.Country)) || (!string.IsNullOrEmpty(address.PostalCode)) || (!string.IsNullOrEmpty(address.Region)) || (!string.IsNullOrEmpty(address.Street))) { // The ADR property contains the following // subvalues in order. All are required: // // - Post office box // - Extended address // - Street address // - Locality (e.g. city) // - Region (e.g. province or state) // - Postal code (e.g. ZIP code) // - Country name vCardValueCollection values = new vCardValueCollection(';'); values.Add(string.Empty); values.Add(string.Empty); values.Add(address.Street); values.Add(address.City); values.Add(address.Region); values.Add(address.PostalCode); values.Add(address.Country); vCardProperty property = new vCardProperty("ADR", values); if (address.IsDomestic) property.Subproperties.Add("DOM"); if (address.IsInternational) property.Subproperties.Add("INTL"); if (address.IsParcel) property.Subproperties.Add("PARCEL"); if (address.IsPostal) property.Subproperties.Add("POSTAL"); if (address.IsHome) property.Subproperties.Add("HOME"); if (address.IsWork) property.Subproperties.Add("WORK"); properties.Add(property); } } }
private void BuildProperties_CATEGORIES( vCardPropertyCollection properties, vCard card) { if (card.Categories.Count > 0) { vCardValueCollection values = new vCardValueCollection(','); foreach (string category in card.Categories) { if (!string.IsNullOrEmpty(category)) values.Add(category); } properties.Add( new vCardProperty("CATEGORIES", values)); } }