/// <summary> /// Loads a new instance of the <see cref="VCard" /> class from a text file. /// </summary> /// <param name="path"> /// The path to a text file containing vCard data in any recognized vCard format. /// </param> public VCard(string path) : this() { using (var streamReader = new StreamReader(path)) { var reader = new VCardReader(); reader.ReadInto(this, streamReader); } }
/// <summary> /// This method will read the given <paramref name="inputFile"/> convert it to HTML and write it to the <paramref name="outputFolder"/> /// </summary> /// <param name="inputFile">The vcf file</param> /// <param name="outputFolder">The folder where to save the converted vcf file</param> /// <param name="hyperlinks">When true hyperlinks are clickable, otherwhise they are written as plain text</param> /// <returns>String array containing the full path to the converted VCF file</returns> /// <exception cref="ArgumentNullException">Raised when the <paramref name="inputFile" /> or <paramref name="outputFolder" /> is null or empty</exception> /// <exception cref="FileNotFoundException">Raised when the <paramref name="inputFile" /> does not exists</exception> /// <exception cref="DirectoryNotFoundException">Raised when the <paramref name="outputFolder" /> does not exist</exception> /// <exception cref="VCRFileTypeNotSupported">Raised when the extension is not .vcf</exception> public string[] ExtractToFolder(string inputFile, string outputFolder, bool hyperlinks = false) { outputFolder = FileManager.CheckForBackSlash(outputFolder); _errorMessage = string.Empty; CheckFileNameAndOutputFolder(inputFile, outputFolder); using (TextReader textReader = File.OpenText(inputFile)) { var vcardReader = new VCardReader(); var vCard = new VCard(); vcardReader.ReadInto(vCard, textReader); return(WriteVCard(vCard, outputFolder, hyperlinks).ToArray()); } }
public void ReadItemTest() { var cases = new[] { new ItemTestCase() { Name = "a", Value = "b" }, new ItemTestCase() { Name = "X-DL", ParamList = "Design Work Group", Value = "List Item 1;List Item 2;List Item 3" }, new ItemTestCase() { Groups = "A0", Name = "ADR", ParamList = "DOM;HOME", Value = "P.O. Box 101;Suite 101; 123 Main Street" }, }; foreach (var @case in cases) { var itemLine = @case.ToString(); using (var sr = new StringReader(itemLine)) { var vr = new VCardReader(sr); vr.Read(); Assert.AreEqual(VCardReaderState.Item, vr.State, string.Format("Case [{0}], State not match.", @case)); Assert.AreEqual(@case.Groups, vr.Groups, string.Format("Case [{0}], Groups not match.", @case)); Assert.AreEqual(@case.Name, vr.Name, string.Format("Case [{0}], Name not match.", @case)); Assert.AreEqual(@case.ParamList, vr.Params, string.Format("Case [{0}], ParamList not match.", @case)); Assert.AreEqual(@case.Value, vr.Value, string.Format("Case [{0}], Value not match.", @case)); } } }
public void TestContactAndVCard() { string vcardText = File.ReadAllText(MockPath + "Contact of Outlook.vcf"); VCard v = VCardReader.ParseText(vcardText); Application app = new Application(); OutlookContactsWithVCard agent = new OutlookContactsWithVCard(app); OutlookContacts outlookAgent = new OutlookContacts(app); const string fullName = "Manager Contact Of Outlook Sr."; string entryId = outlookAgent.GetEntryIdByDisplayName(fullName); if (entryId != null) { bool deletionOK = outlookAgent.DeleteItem(entryId); Assert.IsTrue(deletionOK); } agent.AddItem(vcardText); entryId = outlookAgent.GetEntryIdByDisplayName(fullName); Assert.IsTrue(entryId != null); //test conversions ContactItem contactItem = outlookAgent.GetItemByEntryId(entryId); string text = agent.ReadItemToText(contactItem); VCard v2 = VCardReader.ParseText(text); Assert.IsTrue(v.Surname == v2.Surname && v.GivenName == v2.GivenName && v.MiddleName == v2.MiddleName && v.Suffix == v2.Suffix && //full name will not be compared as Outlook treat fullname specially. v.Title == v2.Title && v.Role == v2.Role && v.Birthday == v2.Birthday && v.Org == v2.Org && v.Department == v2.Department && v.Phones.Count == v2.Phones.Count && v.Emails.Count == v2.Emails.Count && v.Addresses.Count == v2.Addresses.Count && v.URLs.Count == v2.URLs.Count); }
public void WriteACard() { var TestObject = new VCardWriter(); var ResultReader = new VCardReader(); using (var ResultFile = File.Open("./Results/WriteACard.vcf", FileMode.OpenOrCreate)) { Assert.True(TestObject.Write(ResultFile, new GenericCard { Addresses = new IAddress[] { new Address { Street = "111 Floyd Ave.", City = "NumberPlace", StateOrProvence = "ThatOne", ZipCode = "11122", Type = "home" } }.ToList(), DirectDial = new IPhoneNumber[] { new PhoneNumber { Number = "111-1111", Type = "Work" } }.ToList(), Email = new IMailAddress[] { new MailAddress { EmailAddress = "*****@*****.**", Type = "Work" } }.ToList(), FirstName = "FirstName", LastName = "LastName", MiddleName = "MiddleName", Organization = "OrgName", Prefix = "Prefix", Suffix = "Suffix", Title = "Title", Url = "http://www.somewhere.com" })); } using (var ResultFile = File.Open("./Results/WriteACard.vcf", FileMode.OpenOrCreate)) { var Result = ResultReader.Read(ResultFile); Assert.Contains(Result.DirectDial, x => x.Type == "WORK" && x.Number == "111-1111"); Assert.Contains(Result.Email, x => x.Type == "WORK" && x.EmailAddress == "*****@*****.**"); Assert.Contains(Result.Addresses, x => x.Type == "HOME" && x.Street == "111 Floyd Ave." && x.City == "NumberPlace" && x.StateOrProvence == "ThatOne" && x.ZipCode == "11122"); Assert.Equal("FirstName", Result.FirstName); Assert.Equal("Prefix FirstName MiddleName LastName Suffix", Result.FullName); Assert.Equal("LastName", Result.LastName); Assert.Equal("MiddleName", Result.MiddleName); Assert.Equal("OrgName", Result.Organization); Assert.Equal("Prefix", Result.Prefix); Assert.Equal(0, Result.Relationships.Count); Assert.Equal("Suffix", Result.Suffix); Assert.Equal("Title", Result.Title); Assert.Equal("http://www.somewhere.com", Result.Url); } }
/// <summary> /// Loads a new instance of the <see cref="VCard" /> class from a text reader. /// </summary> /// <param name="input"> /// An initialized text reader. /// </param> public VCard(TextReader input) : this() { var reader = new VCardReader(); reader.ReadInto(this, input); }
protected override void WriteMetaToItem(string meta, ContactItem item) { Fonlow.VCard.VCard vcard = VCardReader.ParseText(meta); item.LastName = vcard.Surname; item.FirstName = vcard.GivenName; item.MiddleName = vcard.MiddleName; item.Title = vcard.Title; item.Suffix = vcard.Suffix; // item.FullName = vcard.FormattedName;//This must be after lastName to Suffix, otherwise, item.FullName will be recomposed by Outlook item.Body = vcard.Note; item.CompanyName = vcard.Org; item.Department = vcard.Department; item.JobTitle = vcard.Role; if (vcard.Birthday > DateTime.MinValue) { item.Birthday = vcard.Birthday; } PhoneNumber phoneNumber = vcard.Phones.GetItemsOfTypes(PhoneTypes.CELL).FirstOrDefault(); if (phoneNumber != null) { item.MobileTelephoneNumber = phoneNumber.Number; } //Home phones IEnumerable <PhoneNumber> numbers = vcard.Phones.GetItemsOfTypes(PhoneTypes.VOICE, HomeWorkTypes.HOME); phoneNumber = numbers.FirstOrDefault(); if (phoneNumber != null) { item.HomeTelephoneNumber = phoneNumber.Number; if (numbers.Count() > 1) { item.Home2TelephoneNumber = numbers.ElementAt(1).Number; } } //Home fax numbers = vcard.Phones.GetItemsOfTypes(PhoneTypes.FAX, HomeWorkTypes.HOME); phoneNumber = numbers.FirstOrDefault(); if (phoneNumber != null) { item.HomeFaxNumber = phoneNumber.Number; } //Work phones numbers = vcard.Phones.GetItemsOfTypes(PhoneTypes.VOICE, HomeWorkTypes.WORK); phoneNumber = numbers.FirstOrDefault(); if (phoneNumber != null) { item.BusinessTelephoneNumber = phoneNumber.Number; if (numbers.Count() > 1) { item.Business2TelephoneNumber = numbers.ElementAt(1).Number; } } //Work fax numbers = vcard.Phones.GetItemsOfTypes(PhoneTypes.FAX, HomeWorkTypes.WORK); phoneNumber = numbers.FirstOrDefault(); if (phoneNumber != null) { item.BusinessFaxNumber = phoneNumber.Number; } //Other phone numbers = vcard.Phones.GetItemsOfTypesExactly(PhoneTypes.VOICE, HomeWorkTypes.None); phoneNumber = numbers.FirstOrDefault(); if (phoneNumber != null) { item.OtherTelephoneNumber = phoneNumber.Number; } //Other fax numbers = vcard.Phones.GetItemsOfTypesExactly(PhoneTypes.FAX, HomeWorkTypes.None); phoneNumber = numbers.FirstOrDefault(); if (phoneNumber != null) { item.OtherFaxNumber = phoneNumber.Number; } phoneNumber = vcard.Phones.GetPreferredItems().FirstOrDefault(n => (n.HomeWorkTypes == HomeWorkTypes.HOME) || (n.HomeWorkTypes == HomeWorkTypes.None)); if (phoneNumber != null) { item.PrimaryTelephoneNumber = phoneNumber.Number; } phoneNumber = vcard.Phones.GetPreferredItems().FirstOrDefault(n => n.HomeWorkTypes == HomeWorkTypes.WORK); if (phoneNumber != null) { item.CompanyMainTelephoneNumber = phoneNumber.Number; } phoneNumber = vcard.Phones.GetItemsOfTypes(PhoneTypes.PAGER).FirstOrDefault(); if (phoneNumber != null) { item.PagerNumber = phoneNumber.Number; } EmailAddress email = vcard.Emails.FirstOrDefault(); if (email != null) { item.Email1Address = email.Address; if (vcard.Emails.Count() > 1) { item.Email2Address = vcard.Emails.ElementAt(1).Address; } if (vcard.Emails.Count() > 2) { item.Email3Address = vcard.Emails.ElementAt(2).Address; } } Address address = vcard.Addresses.FirstOrDefault(n => n.HomeWorkType == HomeWorkTypes.HOME); if (address != null) { item.HomeAddressCity = address.Locality; item.HomeAddressCountry = address.Country; item.HomeAddressPostalCode = address.Postcode; item.HomeAddressPostOfficeBox = address.POBox; item.HomeAddressState = address.Region; item.HomeAddressStreet = address.Street; } address = vcard.Addresses.FirstOrDefault(n => n.HomeWorkType == HomeWorkTypes.WORK); if (address != null) { item.BusinessAddressCity = address.Locality; item.BusinessAddressCountry = address.Country; item.BusinessAddressPostalCode = address.Postcode; item.BusinessAddressPostOfficeBox = address.POBox; item.BusinessAddressState = address.Region; item.BusinessAddressStreet = address.Street; } URL url = vcard.URLs.FirstOrDefault(n => n.HomeWorkTypes == HomeWorkTypes.HOME); if (url != null) { item.PersonalHomePage = url.Address; } url = vcard.URLs.FirstOrDefault(n => n.HomeWorkTypes == HomeWorkTypes.WORK); if (url != null) { item.BusinessHomePage = url.Address; } }
public DataTable ImportDataToDataTable() { DataTable dt = BuildTableStructure(); String Vcf = File.ReadAllText(FilePath); Fonlow.VCard.VCard vc = VCardReader.ParseText(Vcf); DataRow dr = dt.NewRow(); if (String.IsNullOrEmpty(vc.FormattedName) == false) { dr["Full Name"] = vc.FormattedName; } if (String.IsNullOrEmpty(vc.FormattedName) == false) { dr["Surname"] = vc.Surname; } if (String.IsNullOrEmpty(vc.GivenName) == false) { dr["GivenName"] = vc.GivenName; } if (String.IsNullOrEmpty(vc.MiddleName) == false) { dr["MiddleName"] = vc.MiddleName; } if (String.IsNullOrEmpty(vc.Title) == false) { dr["Title"] = vc.Title; } if (String.IsNullOrEmpty(vc.Prefix) == false) { dr["Prefix"] = vc.Prefix; } if (String.IsNullOrEmpty(vc.Suffix) == false) { dr["Suffix"] = vc.Suffix; } if (vc.Birthday > DateTime.MinValue) { dr["Birthday"] = vc.Birthday.ToLongDateString(); } if (vc.Rev > DateTime.MinValue) { dr["Rev"] = vc.Rev.ToLongDateString(); } if (String.IsNullOrEmpty(vc.Org) == false) { dr["Org"] = vc.Org; } for (int j = 0; j == vc.Phones.Count - 1; j++) { if (String.IsNullOrEmpty(dr["Phones"].ToString()) == false) { dr["Phones"] = dr["Phones"] + " | " + ("Phone " + vc.Phones[j].PhoneTypes.ToString("G") + " " + vc.Phones[j].HomeWorkTypes.ToString() + " (Preferred = " + (vc.Phones[j].Pref + ") =" + vc.Phones[j].Number)); } else { dr["Phones"] = ("Phone " + vc.Phones[j].PhoneTypes.ToString("G") + " " + vc.Phones[j].HomeWorkTypes.ToString() + " (Preferred = " + (vc.Phones[j].Pref + ") =" + vc.Phones[j].Number)); } } for (int j = 0; j == vc.Emails.Count - 1; j++) { if (String.IsNullOrEmpty(dr["Emails"].ToString()) == false) { dr["Emails"] = dr["Emails"] + " | " + ("Email " + " (Preferred = " + (vc.Emails[j].Pref.ToString()) + ") =" + vc.Emails[j].Address); } else { dr["Emails"] = ("Email " + " (Preferred = " + (vc.Emails[j].Pref.ToString()) + ") =" + vc.Emails[j].Address); } } for (int j = 0; j == vc.URLs.Count - 1; j++) { if (String.IsNullOrEmpty(dr["URL"].ToString()) == false) { dr["URL"] = dr["URL"] + " | " + ("URL " + vc.URLs[j].HomeWorkTypes.ToString() + " " + "=" + vc.URLs[j].Address); } else { dr["URL"] = ("URL " + vc.URLs[j].HomeWorkTypes.ToString() + " " + "=" + vc.URLs[j].Address); } } for (int j = 0; j == vc.Addresses.Count - 1; j++) { if (String.IsNullOrEmpty(dr["Addresses"].ToString()) == false) { dr["Addresses"] = dr["Addresses"] + " | " + ("Address " + vc.Addresses[j].HomeWorkType.ToString() + "=" + vc.Addresses[j].POBox + "," + vc.Addresses[j].Ext + ", " + vc.Addresses[j].Street + ", " + vc.Addresses[j].Locality + ", " + vc.Addresses[j].Region + ", " + vc.Addresses[j].Postcode + ", " + vc.Addresses[j].Country); } else { dr["Addresses"] = ("Address " + vc.Addresses[j].HomeWorkType.ToString() + "=" + vc.Addresses[j].POBox + "," + vc.Addresses[j].Ext + ", " + vc.Addresses[j].Street + ", " + vc.Addresses[j].Locality + ", " + vc.Addresses[j].Region + ", " + vc.Addresses[j].Postcode + ", " + vc.Addresses[j].Country); } } if (String.IsNullOrEmpty(vc.Note) == false) { dr["Note"] = ("Note=" + vc.Note); } dt.Rows.Add(dr); Maindataset.Tables.Add(dt); return(dt); }
public Control(View vue) { this.vue = vue; model = new Model(); cardReader = new VCardReader(); }
} // using xmlWriter /// <summary> /// /// </summary> /// <param name="topElement">the 'Changes' element, to be manipulated</param> /// <param name="command"></param> private static void WriteAddOrReplaceCommandToXml(XElement topElement, SyncMLUpdateBase command) { if (command == null) { return; } bool isBase64 = false; ContactExchangeType contentType = ContactExchangeType.Unknown; bool isAddCommand = false; string commandTypeStr; SyncMLMeta commandMeta = command.Meta; SyncMLItem commandItem = command.ItemCollection[0]; //assuming there is always one item. if (String.IsNullOrEmpty(commandMeta.Content) && (!commandMeta.Xml.HasElements)) { commandMeta = commandItem.Meta; } MetaParser metaParser = new MetaParser(commandMeta.Xml); MetaFormat metaFormat = metaParser.GetMetaFormat(); if (metaFormat != null) { isBase64 = metaFormat.Content == "b64"; } MetaType metaType = metaParser.GetMetaType(); if (metaType == null) { return; //the meta element may be empty, so no need to proceed. } if (metaType.Content == "text/x-s4j-sifc") { contentType = ContactExchangeType.Sifc; } else if ((metaType.Content == "text/x-vcard") || (metaType.Content == "text/vcard")) { contentType = ContactExchangeType.Vcard21; } if (contentType == ContactExchangeType.Unknown) { throw new LocalDataSourceException("expected data is Base64 encoded SIF-C or vCard"); } isAddCommand = command is SyncMLAdd; commandTypeStr = isAddCommand ? "New" : "Update"; //Assuming there will be only one item. string id; if (isAddCommand) { id = commandItem.Source.LocURI.Content; } else { id = commandItem.Target.LocURI.Content; } XElement cItem = new XElement("C", new XAttribute("ID", id)); XElement changItem = new XElement(commandTypeStr, cItem); topElement.Add(changItem); switch (contentType) { case ContactExchangeType.Sifc: // do not need to check isBase64, because it must be cItem.Add(XElement.Parse(Utility.ConvertFromBase64(commandItem.Data.Content))); break; case ContactExchangeType.Vcard21: XElement sifcXml; if (isBase64) { sifcXml = VCardSIFC.ConvertVCardToSifCXml(VCardReader.ParseText( Utility.ConvertFromBase64(commandItem.Data.Content))); } else { sifcXml = VCardSIFC.ConvertVCardToSifCXml(VCardReader.ParseText(commandItem.Data.Content)); } cItem.Add(sifcXml); break; default: throw new LocalDataSourceException("Can not create stream from command Data."); } }