Beispiel #1
0
        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);
            }
        }
Beispiel #4
0
        /// <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));
     }
 }
Beispiel #8
0
        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));
            }
        }
Beispiel #10
0
 /// <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);
     }
 }
Beispiel #11
0
        private void BuildProperties_NAME(
            vCardPropertyCollection properties,
            vCard card)
        {
            if (!string.IsNullOrEmpty(card.DisplayName))
            {
                vCardProperty property =
                    new vCardProperty("NAME", card.DisplayName);

                properties.Add(property);
            }
        }
Beispiel #12
0
        /// <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));
            }
        }
Beispiel #14
0
        /// <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);
        }
Beispiel #16
0
        /// <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);
            }
        }
Beispiel #17
0
        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);
            }
        }
Beispiel #18
0
        /// <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);
            }
        }
Beispiel #19
0
        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);
                }
            }
        }
Beispiel #20
0
        /// <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);
            }
        }
Beispiel #21
0
        /// <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);
            }
        }
Beispiel #22
0
        /// <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);
            }
        }
Beispiel #23
0
        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;
            }
        }
Beispiel #24
0
        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);
            }
        }
Beispiel #25
0
        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);
                }
            }
        }
Beispiel #26
0
        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);
            }
        }
Beispiel #27
0
        /// <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);
            }
        }
Beispiel #28
0
        /// <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);
                }

            }
        }
Beispiel #30
0
        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));
            }
        }
Beispiel #31
0
        /// <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);

            }

        }
Beispiel #32
0
        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);
                    }

                }
            }
        }
Beispiel #33
0
        /// <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);

                }

            }

        }
Beispiel #34
0
        private void BuildProperties_NAME(
            vCardPropertyCollection properties,
            vCard card)
        {

            if (!string.IsNullOrEmpty(card.DisplayName))
            {

                vCardProperty property =
                    new vCardProperty("NAME", card.DisplayName);

                properties.Add(property);
            }

        }
Beispiel #35
0
        /// <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);

            }

        }
Beispiel #36
0
        /// <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);

            }

        }
Beispiel #37
0
        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);

            }

        }
Beispiel #38
0
        private void BuildProperties_TZ(
            vCardPropertyCollection properties,
            vCard card)
        {

            if (!string.IsNullOrEmpty(card.TimeZone))
            {
                properties.Add(new vCardProperty("TZ", card.TimeZone));
            }

        }
Beispiel #39
0
        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);
            }

        }
Beispiel #40
0
        /// <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);

            }

        }
Beispiel #41
0
        /// <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 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);

        }

      }
Beispiel #45
0
        /// <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);

            }

        }
Beispiel #46
0
        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);
                }

            }

        }
Beispiel #47
0
        /// <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);

            }

        }
Beispiel #48
0
        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;

            }

        }
Beispiel #49
0
        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);


                }

            }

        }
Beispiel #50
0
        // 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;

        }
Beispiel #51
0
        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);

        }
Beispiel #52
0
        /// <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));
            }

        }
Beispiel #53
0
        /// <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);

            }

        }
Beispiel #54
0
        /// <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);

                }

            }

        }
Beispiel #55
0
        /// <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);

            }

        }
Beispiel #56
0
        /// <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);
            }

        }
Beispiel #57
0
        /// <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);
            }

        }
Beispiel #58
0
        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));

            }

        }
Beispiel #59
0
        /// <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);

            }

        }
Beispiel #60
0
        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);

        }