You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by be...@apache.org on 2013/07/24 21:05:36 UTC

git commit: [wp] fixed search by name and made searching case insensitive

Updated Branches:
  refs/heads/master dd37c813f -> 5f0847d4a


[wp] fixed search by name and made searching case insensitive


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/5f0847d4
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/5f0847d4
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/5f0847d4

Branch: refs/heads/master
Commit: 5f0847d4a13a90df5b37bdcbabae6936610a5345
Parents: dd37c81
Author: Benn Mapes <be...@gmail.com>
Authored: Wed Jul 24 12:05:10 2013 -0700
Committer: Benn Mapes <be...@gmail.com>
Committed: Wed Jul 24 12:05:24 2013 -0700

----------------------------------------------------------------------
 src/wp/Contacts.cs | 28 +++++++++++++++++++++-------
 1 file changed, 21 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/5f0847d4/src/wp/Contacts.cs
----------------------------------------------------------------------
diff --git a/src/wp/Contacts.cs b/src/wp/Contacts.cs
index b5083e8..3678856 100644
--- a/src/wp/Contacts.cs
+++ b/src/wp/Contacts.cs
@@ -18,6 +18,7 @@ using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Diagnostics;
+using System.Globalization;
 using System.Linq;
 using System.Runtime.Serialization;
 using System.Windows;
@@ -441,6 +442,10 @@ namespace WPCordovaClassLib.Cordova.Commands
             ContactSearchParams searchParams = (ContactSearchParams)e.State;
 
             List<Contact> foundContacts = null;
+            // used for comparing strings, ""  instantiates with InvariantCulture
+            CultureInfo culture = new CultureInfo("");
+            // make the search comparisons case insensitive.
+            CompareOptions compare_option = CompareOptions.IgnoreCase;
 
             // if we have multiple search fields
             if (searchParams.options.filter != null && searchParams.options.filter.Length > 0 && searchParams.fields.Count() > 1)
@@ -450,33 +455,42 @@ namespace WPCordovaClassLib.Cordova.Commands
                 {
                     foundContacts.AddRange(from Contact con in e.Results
                                            from ContactEmailAddress a in con.EmailAddresses
-                                           where a.EmailAddress.Contains(searchParams.options.filter)
+                                           where culture.CompareInfo.IndexOf(a.EmailAddress, searchParams.options.filter, compare_option) >= 0
                                            select con);
                 }
                 if (searchParams.fields.Contains("displayName"))
                 {
                     foundContacts.AddRange(from Contact con in e.Results
-                                           where con.DisplayName.Contains(searchParams.options.filter)
+                                           where culture.CompareInfo.IndexOf(con.DisplayName, searchParams.options.filter, compare_option) >= 0
                                            select con);
                 }
                 if (searchParams.fields.Contains("name"))
                 {
-                    foundContacts.AddRange(from Contact con in e.Results
-                                           where con.CompleteName != null && con.CompleteName.ToString().Contains(searchParams.options.filter)
-                                           select con);
+                    foundContacts.AddRange(
+                        from Contact con in e.Results
+                        where con.CompleteName != null && (
+                            (con.CompleteName.FirstName != null     && culture.CompareInfo.IndexOf(con.CompleteName.FirstName, searchParams.options.filter, compare_option) >= 0) ||
+                            (con.CompleteName.LastName != null      && culture.CompareInfo.IndexOf(con.CompleteName.LastName, searchParams.options.filter, compare_option) >= 0) ||
+                            (con.CompleteName.MiddleName != null    && culture.CompareInfo.IndexOf(con.CompleteName.MiddleName, searchParams.options.filter, compare_option) >= 0) ||
+                            (con.CompleteName.Nickname != null      && culture.CompareInfo.IndexOf(con.CompleteName.Nickname, searchParams.options.filter, compare_option) >= 0) ||
+                            (con.CompleteName.Suffix != null        && culture.CompareInfo.IndexOf(con.CompleteName.Suffix, searchParams.options.filter, compare_option) >= 0) ||
+                            (con.CompleteName.Title != null         && culture.CompareInfo.IndexOf(con.CompleteName.Title, searchParams.options.filter, compare_option) >= 0) ||
+                            (con.CompleteName.YomiFirstName != null && culture.CompareInfo.IndexOf(con.CompleteName.YomiFirstName, searchParams.options.filter, compare_option) >= 0) ||
+                            (con.CompleteName.YomiLastName != null  && culture.CompareInfo.IndexOf(con.CompleteName.YomiLastName, searchParams.options.filter, compare_option) >= 0))
+                        select con);
                 }
                 if (searchParams.fields.Contains("phoneNumbers"))
                 {
                     foundContacts.AddRange(from Contact con in e.Results
                                            from ContactPhoneNumber a in con.PhoneNumbers
-                                           where a.PhoneNumber.Contains(searchParams.options.filter)
+                                           where culture.CompareInfo.IndexOf(a.PhoneNumber, searchParams.options.filter, compare_option) >= 0
                                            select con);
                 }
                 if (searchParams.fields.Contains("urls"))
                 {
                     foundContacts.AddRange(from Contact con in e.Results
                                            from string a in con.Websites
-                                           where a.Contains(searchParams.options.filter)
+                                           where culture.CompareInfo.IndexOf(a, searchParams.options.filter, compare_option) >= 0
                                            select con);
                 }
             }