private bool AddMatchedUser(BookSyncContact phoneContact, FacebookUser facebookUser)
        {
            if (facebookUser == null)
            {
                return(false);
            }

            BookSyncContact matchedContact = new BookSyncContact();

            matchedContact.PhoneFirstName   = phoneContact.PhoneFirstName;
            matchedContact.PhoneLastName    = phoneContact.PhoneLastName;
            matchedContact.PhoneContactId   = phoneContact.PhoneContactId;
            matchedContact.PhoneImageBase64 = phoneContact.PhoneImageBase64;

            matchedContact.FacebookFirstName     = facebookUser.FirstName;
            matchedContact.FacebookLastName      = facebookUser.LastName;
            matchedContact.FacebookUserId        = facebookUser.ID;
            matchedContact.FacebookImageSmallUrl = facebookUser.ProfileImageSmallUrl;
            matchedContact.FacebookImageLargeUrl = facebookUser.ProfileImageLargeUrl;

            matchedContact.SelectionChange += (sender, e) => OnPropertyChanged(nameof(HasMatchedContacts));

            AutoMatchedContacts.Add(matchedContact);

            return(true);
        }
        public async Task ExecuteAcceptMatchesCommand()
        {
            //for each selected match update the master list of booksync contacts and save to json
            var selectedMatches = AutoMatchedContacts.Where(w => w.IsSelected);

            if (!selectedMatches.Any())
            {
                return;
            }

            //loop through the matches and store them then refresh the list.
            foreach (var selectedContact in selectedMatches)
            {
                var booksyncContact = BookSyncContactsHelper.BookSyncContacts.FirstOrDefault(f =>
                                                                                             f.PhoneContactId ==
                                                                                             selectedContact.PhoneContactId);

                booksyncContact.FacebookUserId        = selectedContact.FacebookUserId;
                booksyncContact.FacebookFirstName     = selectedContact.FacebookFirstName;
                booksyncContact.FacebookLastName      = selectedContact.FacebookLastName;
                booksyncContact.FacebookImageSmallUrl = selectedContact.FacebookImageSmallUrl;
                booksyncContact.FacebookImageLargeUrl = selectedContact.FacebookImageLargeUrl;

                await BookSyncContactsHelper.SaveBookSyncContacts();
            }

            LoadAutoMatchedContacts();
        }
        private void LoadAutoMatchedContacts()
        {
            AutoMatchedContacts.Clear();
            HasLoaded = false;

            //no point continuing if either list is empty
            if (!BookSyncContactsHelper.FacebookUsers.Any() || !BookSyncContactsHelper.PhoneContacts.Any())
            {
                OnPropertyChanged(nameof(HasMatchedContacts));
                return;
            }

            var unMatchedContacts = BookSyncContactsHelper.BookSyncContacts.Where(w => string.IsNullOrEmpty(w.FacebookUserId)).OrderBy(o => o.PhoneName).ToList();

            foreach (var unMatchedContact in unMatchedContacts)
            {
                //lookup the facebook contacts for a match.
                FacebookUser matchedFacebookUser = null;

                //full name match
                matchedFacebookUser = BookSyncContactsHelper.FacebookUsers.FirstOrDefault(f =>
                                                                                          f.FacebookName.Replace(" ", string.Empty).Equals(unMatchedContact.PhoneName.Replace(" ", string.Empty), StringComparison.OrdinalIgnoreCase));

                if (AddMatchedUser(unMatchedContact, matchedFacebookUser))
                {
                    continue;
                }

                //last name search
                matchedFacebookUser = BookSyncContactsHelper.FacebookUsers.FirstOrDefault(f =>
                                                                                          f.LastName.Replace(" ", string.Empty).Equals(unMatchedContact.PhoneLastName.Replace(" ", string.Empty), StringComparison.OrdinalIgnoreCase));

                if (AddMatchedUser(unMatchedContact, matchedFacebookUser))
                {
                    continue;
                }

                //first name search
                matchedFacebookUser = BookSyncContactsHelper.FacebookUsers.FirstOrDefault(f =>
                                                                                          f.FirstName.Replace(" ", string.Empty).Equals(unMatchedContact.PhoneFirstName.Replace(" ", string.Empty), StringComparison.OrdinalIgnoreCase));

                if (AddMatchedUser(unMatchedContact, matchedFacebookUser))
                {
                    continue;
                }
            }

            AutoMatchedContactsChanged();
        }