Exemplo n.º 1
0
        /// <summary>
        /// Loads up the contact store using the contactsRT APIs.
        /// Checks to make sure the store can be loaded and errors out accordingly
        /// </summary>
        private async Task LoadContactsFromStoreAsync()
        {
            //Try loading the contact atore
            try
            {
                store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AllContactsReadOnly);
            }
            catch (Exception ex)
            {
                ContactsStatusText = "We couldn't load the contact store.";
                Debug.WriteLine("Potential contact store bug: " + ex, "error");
            }

            //If we can access the store without crashing (There seems to be a bug with the store).
            //Check to make sure we actually have access.
            if (store == null)
            {
                //Launch the settings app to fix the security settings
                Debug.WriteLine("Could not open contact store, is app access disabled in privacy settings?", "error");
                return;
            }
            Debug.WriteLine("Contact store opened for reading successfully.", "informational");
            //Load the contacts into the ListView on the page
            ContactReader reader = store.GetContactReader();

            await DisplayContactsFromReaderAsync(reader, true);

            return;
        }
Exemplo n.º 2
0
        public void EmptyNumberTest()
        {
            ContactReader   contactReader = GetContactReaderFromSingleDatabaseRow(new ContactDatabaseRow(1, "Larry", "Barry", "Sanders", ""));
            List <IContact> contacts      = new List <IContact>(contactReader);

            Assert.AreEqual(0, contacts.Count);
        }
Exemplo n.º 3
0
        public async Task <List <string> > getContacts()
        {
            List <string> listResults        = new List <string>();
            ContactStore  store              = null;
            IReadOnlyList <ContactList> list = null;
            ContactReader reader             = null;
            ContactBatch  batch              = null;

            // *** This RequestStoreAsync() call is where the exception is thrown. All the cases below have the same issue. ***
            //store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AllContactsReadWrite);
            //store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);
            store = await ContactManager.RequestStoreAsync();

            list = await store.FindContactListsAsync();

            foreach (ContactList contactList in list)
            {
                reader = contactList.GetContactReader();
                batch  = await reader.ReadBatchAsync();

                foreach (Contact contact in batch.Contacts)
                {
                    string fullname = contact.FullName; //+ ", " + contact.Name;// + ", " + contact.Emails.First().Address;
                    listResults.Add(fullname);
                    DisplayContact dc = new DisplayContact(contact);
                    vDisplayContact.Add(dc);
                }
            }
            return(listResults);
        }
Exemplo n.º 4
0
        private async Task LoadContactsFromStoreAsync()
        {
            try {
                store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AllContactsReadOnly);
            } catch (Exception ex) {
                Debug.WriteLine("Potential contact store bug: " + ex, "error");
            }

            if (store == null)
            {
                MessageDialog connectionWarning =
                    new MessageDialog("The app needs access to your contacts in order to function correctly. " +
                                      "Please grant it access using the options in the settings menu ",
                                      "Lost Connection to Store");
                await connectionWarning.ShowAsync();

                await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings:privacy-contacts"));

                return;
            }

            store.ChangeTracker.Enable();
            ContactReader reader = store.GetContactReader();

            await DisplayContactsFromReaderAsync(reader, true);

            return;
        }
Exemplo n.º 5
0
        public void AppendCustomBase64Text()
        {
            var contact        = CreateContact();
            var encodedContact = new StringBuilder(ContactWriter.ToString(contact));

            encodedContact.Append('.');
            encodedContact.Append(Convert.ToBase64String(Encoding.UTF8.GetBytes("This is a test string.")));

            CompareContacts(contact, ContactReader.FromString(encodedContact.ToString()));
        }
Exemplo n.º 6
0
        public void LoadFromFile()
        {
            using (var tempFile = new TemporaryFile())
            {
                var contact = CreateContact();
                ContactWriter.ToFile(tempFile, contact);

                CompareContacts(contact, ContactReader.FromFile(tempFile));
            }
        }
Exemplo n.º 7
0
        private ContactReader GetContactReaderFromSingleDatabaseRow(ContactDatabaseRow row)
        {
            MockContactDatabaseReader mockReader = new MockContactDatabaseReader();

            mockReader.AddRow(row);
            ContactReader contactReader = new ContactReader();

            contactReader.ParseDatabase(mockReader);

            return(contactReader);
        }
Exemplo n.º 8
0
        async Task <ObservableCollection <Contact> > GetContactsAsync()
        {
            ContactStore store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);

            //find contact list
            ContactList contactlist = await store.CreateContactListAsync(Windows.ApplicationModel.Package.Current.DisplayName); //problem if it already exists

            ContactReader contactreader = contactlist.GetContactReader();
            ContactBatch  contactbatch  = await contactreader.ReadBatchAsync();

            return(new ObservableCollection <Contact>(contactbatch.Contacts)); // store.FindContactsAsync()
        }
Exemplo n.º 9
0
 private async Task ShowContacts(ContactReader reader)
 {
     txtContacts.Text = ""; //reset text box
     var batch = await reader.ReadBatchAsync();
     while (batch.Contacts.Count != 0 &&
            batch.Status == ContactBatchStatus.Success)
     {
         foreach (Contact c in batch.Contacts)
         {
             txtContacts.Text += c.FirstName + " " + c.LastName + "\n";
         }
         batch = await reader.ReadBatchAsync();
     }
 }
Exemplo n.º 10
0
        /// <summary>
        /// Update displayed contacts.
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        private async Task DisplayContactsFromReaderAsync(ContactReader reader)
        {
            Contacts.Clear();
            ContactBatch contactBatch = await reader.ReadBatchAsync();

            while (contactBatch.Contacts.Count != 0 &&
                   contactBatch.Status == ContactBatchStatus.Success)
            {
                foreach (Contact c in contactBatch.Contacts)
                {
                    Contacts.Add(new ContactViewModel(c));
                }
                contactBatch = await reader.ReadBatchAsync();
            }
        }
Exemplo n.º 11
0
 /// <summary>
 /// Search for contacts
 /// </summary>
 /// <param name="text"></param>
 /// <returns></returns>
 internal async Task SearchForTextAsync(string text)
 {
     if (!String.IsNullOrWhiteSpace(text))
     {
         ContactQueryOptions option = new ContactQueryOptions(text, ContactQuerySearchFields.All);
         ContactReader       reader = store.GetContactReader(option);
         await DisplayContactsFromReaderAsync(reader);
     }
     // A null query string is beeing treated as query for "*"
     else
     {
         ContactReader reader = store.GetContactReader();
         await DisplayContactsFromReaderAsync(reader);
     }
 }
Exemplo n.º 12
0
 public void VerifyDatabaseRowsMatchContacts(List<ContactDatabaseRow> inputRows, List<IContact> contactsExpected)
 {
     MockContactDatabaseReader mockReader = new MockContactDatabaseReader();
     foreach (ContactDatabaseRow row in inputRows)
     {
         mockReader.AddRow(row);
     }
     ContactReader contactReader = new ContactReader();
     contactReader.ParseDatabase(mockReader);
     List<IContact> contactsActual = new List<IContact>(contactReader);
     Assert.AreEqual(contactsExpected.Count, contactsActual.Count);
     foreach (IContact contactExpected in contactsExpected)
     {
         Assert.IsTrue(contactsActual.Contains(contactExpected));
     }
 }
Exemplo n.º 13
0
        public void VerifyDatabaseRowsMatchContacts(List <ContactDatabaseRow> inputRows, List <IContact> contactsExpected)
        {
            MockContactDatabaseReader mockReader = new MockContactDatabaseReader();

            foreach (ContactDatabaseRow row in inputRows)
            {
                mockReader.AddRow(row);
            }
            ContactReader contactReader = new ContactReader();

            contactReader.ParseDatabase(mockReader);
            List <IContact> contactsActual = new List <IContact>(contactReader);

            Assert.AreEqual(contactsExpected.Count, contactsActual.Count);
            foreach (IContact contactExpected in contactsExpected)
            {
                Assert.IsTrue(contactsActual.Contains(contactExpected));
            }
        }
Exemplo n.º 14
0
        private async Task SearchForTextAsync(string ContactFilter)
        {
            if (store == null)
            {
                await LoadContactsFromStoreAsync();

                return;
            }
            if (!string.IsNullOrWhiteSpace(ContactFilter))
            {
                ContactQueryOptions option = new ContactQueryOptions(ContactFilter, ContactQuerySearchFields.All);
                ContactReader       reader = store.GetContactReader(option);
                await DisplayContactsFromReaderAsync(reader, false);
            }
            else
            {
                ContactReader reader = store.GetContactReader();
                await DisplayContactsFromReaderAsync(reader, true);
            }
            return;
        }
Exemplo n.º 15
0
        /// <summary>
        /// Load contacts from contact manager.
        /// Add <uap:Capability Name="contacts" /> to manifest
        /// </summary>
        /// <returns></returns>
        public async Task LoadContactsAsync()
        {
            store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AllContactsReadOnly);

            if (store == null) // check every time because user can deactivate access at any time
            {
                LostConnectionToStore(this, new EventArgs());
                return;
            }

            Debug.WriteLine("Contact store opend for writing successfully.", "information");

            // Load contacts into ListView on the page
            ContactReader reader = store.GetContactReader();

            await DisplayContactsFromReaderAsync(reader);

            // Start tracking changes to the store once the list is loaded into memory
            store.ChangeTracker.Enable();
            store.ContactChanged += Store_ContactChanged;
        }
Exemplo n.º 16
0
        /// <summary>
        /// Processes contact search.
        /// </summary>
        /// <param name="ContactFilter">Takes in the string inputed by the user</param>
        private async Task SearchForTextAsync(string ContactFilter)
        {
            if (store == null)
            {
                //Shouldn't happen, and I don't want to deal with opening the store in multiple locations
                await LoadContactsFromStoreAsync();

                return;
            }
            //A null query string is being treated as a query for "*"
            if (!string.IsNullOrWhiteSpace(ContactFilter))
            {
                ContactQueryOptions option = new ContactQueryOptions(ContactFilter, ContactQuerySearchFields.All);
                ContactReader       reader = store.GetContactReader(option);
                await DisplayContactsFromReaderAsync(reader, false);
            }
            else
            {
                ContactReader reader = store.GetContactReader();
                await DisplayContactsFromReaderAsync(reader, true);
            }
            return;
        }
Exemplo n.º 17
0
        /// <summary>
        /// Displays the items from the contact store in the contacts view.
        /// </summary>
        /// <param name="reader">Contact store reader</param>
        /// <param name="isGroup">
        /// Boolean to decide if to show the list in a group or a flat list
        /// Groups is shown by default and search
        /// Flast list is shown during search
        /// </param>
        private async Task DisplayContactsFromReaderAsync(ContactReader reader, bool isGroup)
        {
            contactItems.Clear();
            ContactBatch contactBatch = await reader.ReadBatchAsync();

            if (contactBatch.Contacts.Count == 0)
            {
                Debug.WriteLine("Contact store empty");
                ContactsStatusText = "We couldn't find any contacts.";
                ShowContactListStatusText();
                return;
            }

            while (contactBatch.Contacts.Count != 0)
            {
                //should batch add to avoid triggering callbacks
                foreach (Contact c in contactBatch.Contacts)
                {
                    ContactItem contactToAdd = new ContactItem(c.Id, c.DisplayName);
                    contactToAdd.SetImageAsync(c.Thumbnail);
                    contactItems.Add(contactToAdd);
                }
                contactBatch = await reader.ReadBatchAsync();
            }

            if (isGroup)
            {
                GroupsOfContacts = alphaGroupSorting(contactItems);
                ShowContactGroup();
            }
            else
            {
                ListOfContacts = contactItems;
                ShowContactList();
            }
            return;
        }
Exemplo n.º 18
0
    private async Task <IReadOnlyList <Contact> > ListContactsAsync()
    {
        ContactStore store = await Store();

        if (store != null)
        {
            ContactList list = await GetAsync();

            if (list != null)
            {
                ContactReader reader = list.GetContactReader();
                if (reader != null)
                {
                    ContactBatch batch = await reader.ReadBatchAsync();

                    if (batch != null)
                    {
                        return(batch.Contacts);
                    }
                }
            }
        }
        return(null);
    }
Exemplo n.º 19
0
        private async Task DisplayContactsFromReaderAsync(ContactReader reader, bool isGroup)
        {
            contactItems.Clear();
            ContactBatch contactBatch = await reader.ReadBatchAsync();

            if (contactBatch.Contacts.Count == 0)
            {
                return;
            }

            while (contactBatch.Contacts.Count != 0)
            {
                foreach (Contact c in contactBatch.Contacts)
                {
                    if (c.Phones.Count > 0 || c.Emails.Count > 0)
                    {
                        ContactItem contactToAdd = new ContactItem(c.Id, c.DisplayName);
                        contactToAdd.ContactEmails = c.Emails;
                        contactToAdd.ContactPhones = c.Phones;
                        contactToAdd.SetImageAsync(c.Thumbnail);
                        contactItems.Add(contactToAdd);
                    }
                }
                contactBatch = await reader.ReadBatchAsync();
            }

            if (isGroup)
            {
                groupsOfContacts = alphaGroupSorting(contactItems);
            }
            else
            {
                _contactsList = contactItems;
            }
            return;
        }
        private async Task RaiseContactAddedEvent(ContactReader contactReader, CancellationToken cancellationToken)
        {
            var e = new ContactAddedEvent(contactReader);

            await _mediator.Publish(e, cancellationToken);
        }
Exemplo n.º 21
0
        public static IConversationManager LoadConversationManager(ILoadingProgressCallback progressCallback, IPhoneDeviceInfo deviceInfo, bool mergeConversations)
        {
            IConversationManager conversationManager = null;

            using (DatabaseReader contactDatabaseReader = new DatabaseReader(DatabaseFinder.FindContactDatabasePath(deviceInfo.BackupPath)))
            {
                ContactReader contactReader = new ContactReader();
                contactReader.ParseDatabase(contactDatabaseReader);

                using (DatabaseReader textDatabaseReader = new DatabaseReader(DatabaseFinder.FindTextMessageDatabasePath(deviceInfo.BackupPath)))
                {
                    TextMessageReaderBase             textMessageReader;
                    IEnumerable <ChatRoomInformation> chatReader;
                    IEnumerable <MessageAttachment>   attachments;
                    int chatWorkEstimate;

                    if ((deviceInfo.OsVersion == null) || (deviceInfo.OsVersion.MajorVersion >= 6))
                    {
                        try
                        {
                            textMessageReader = new TextMessageReaderiOS6(deviceInfo.BackupPath);
                            textMessageReader.ParseDatabase(textDatabaseReader);
                            ChatRoomInformationReaderiOS6 chatRoomInfoReader = new ChatRoomInformationReaderiOS6();
                            chatRoomInfoReader.ParseDatabase(textDatabaseReader);
                            chatReader       = chatRoomInfoReader;
                            attachments      = new List <MessageAttachment>();
                            chatWorkEstimate = chatRoomInfoReader.ItemCountEstimate;
                        }
                        catch (DatabaseQueryException)
                        {
                            textMessageReader = new TextMessageReader(deviceInfo.BackupPath);
                            textMessageReader.ParseDatabase(textDatabaseReader);
                            chatReader       = new List <ChatRoomInformation>();
                            attachments      = new List <MessageAttachment>();
                            chatWorkEstimate = 0;
                        }
                    }
                    else if (deviceInfo.OsVersion.MajorVersion == 5)
                    {
                        textMessageReader = new TextMessageReader2(deviceInfo.BackupPath);
                        textMessageReader.ParseDatabase(textDatabaseReader);
                        ChatRoomInformationReader chatRoomInfoReader = new ChatRoomInformationReader();
                        chatRoomInfoReader.ParseDatabase(textDatabaseReader);
                        chatReader       = chatRoomInfoReader;
                        attachments      = new List <MessageAttachment>();
                        chatWorkEstimate = chatRoomInfoReader.ItemCountEstimate;
                    }
                    else
                    {
                        textMessageReader = new TextMessageReader(deviceInfo.BackupPath);
                        textMessageReader.ParseDatabase(textDatabaseReader);
                        chatReader       = new List <ChatRoomInformation>();
                        attachments      = new List <MessageAttachment>();
                        chatWorkEstimate = 0;
                    }

                    int workEstimate = AllYourTextsLib.Conversation.ConversationManager.GetWorkEstimate(contactReader.ItemCountEstimate,
                                                                                                        textMessageReader.ItemCountEstimate,
                                                                                                        chatWorkEstimate,
                                                                                                        0);
                    if (mergeConversations)
                    {
                        workEstimate += MergingConversationManager.GetWorkEstimateByContacts(contactReader.ItemCountEstimate);
                    }
                    progressCallback.Begin(workEstimate);

                    conversationManager = new ConversationManager(contactReader,
                                                                  textMessageReader,
                                                                  chatReader,
                                                                  attachments,
                                                                  progressCallback);
                    if (mergeConversations)
                    {
                        conversationManager = new MergingConversationManager(conversationManager, progressCallback);
                    }
                }
            }

            return(conversationManager);
        }
Exemplo n.º 22
0
        private IContact GetContactFromSingleDatabaseRow(ContactDatabaseRow row)
        {
            ContactReader contactReader = GetContactReaderFromSingleDatabaseRow(row);

            return(new List <IContact>(contactReader)[0]);
        }
Exemplo n.º 23
0
        public static IConversationManager LoadConversationManager(ILoadingProgressCallback progressCallback, IPhoneDeviceInfo deviceInfo, bool mergeConversations)
        {
            IConversationManager conversationManager = null;

            using (DatabaseReader contactDatabaseReader = new DatabaseReader(DatabaseFinder.FindContactDatabasePath(deviceInfo.BackupPath)))
            {
                ContactReader contactReader = new ContactReader();
                contactReader.ParseDatabase(contactDatabaseReader);

                using (DatabaseReader textDatabaseReader = new DatabaseReader(DatabaseFinder.FindTextMessageDatabasePath(deviceInfo.BackupPath)))
                {
                    TextMessageReaderBase textMessageReader;
                    IEnumerable<ChatRoomInformation> chatReader;
                    IEnumerable<MessageAttachment> attachments;
                    int chatWorkEstimate;

                    if ((deviceInfo.OsVersion == null) || (deviceInfo.OsVersion.MajorVersion >= 6))
                    {
                        try
                        {
                            textMessageReader = new TextMessageReaderiOS6(deviceInfo.BackupPath);
                            textMessageReader.ParseDatabase(textDatabaseReader);
                            ChatRoomInformationReaderiOS6 chatRoomInfoReader = new ChatRoomInformationReaderiOS6();
                            chatRoomInfoReader.ParseDatabase(textDatabaseReader);
                            chatReader = chatRoomInfoReader;
                            attachments = new List<MessageAttachment>();
                            chatWorkEstimate = chatRoomInfoReader.ItemCountEstimate;
                        }
                        catch (DatabaseQueryException)
                        {
                            textMessageReader = new TextMessageReader(deviceInfo.BackupPath);
                            textMessageReader.ParseDatabase(textDatabaseReader);
                            chatReader = new List<ChatRoomInformation>();
                            attachments = new List<MessageAttachment>();
                            chatWorkEstimate = 0;
                        }
                    }
                    else if (deviceInfo.OsVersion.MajorVersion == 5)
                    {
                        textMessageReader = new TextMessageReader2(deviceInfo.BackupPath);
                        textMessageReader.ParseDatabase(textDatabaseReader);
                        ChatRoomInformationReader chatRoomInfoReader = new ChatRoomInformationReader();
                        chatRoomInfoReader.ParseDatabase(textDatabaseReader);
                        chatReader = chatRoomInfoReader;
                        attachments = new List<MessageAttachment>();
                        chatWorkEstimate = chatRoomInfoReader.ItemCountEstimate;
                    }
                    else
                    {
                        textMessageReader = new TextMessageReader(deviceInfo.BackupPath);
                        textMessageReader.ParseDatabase(textDatabaseReader);
                        chatReader = new List<ChatRoomInformation>();
                        attachments = new List<MessageAttachment>();
                        chatWorkEstimate = 0;
                    }

                    int workEstimate = AllYourTextsLib.Conversation.ConversationManager.GetWorkEstimate(contactReader.ItemCountEstimate,
                                                                                                        textMessageReader.ItemCountEstimate,
                                                                                                        chatWorkEstimate,
                                                                                                        0);
                    if (mergeConversations)
                    {
                        workEstimate += MergingConversationManager.GetWorkEstimateByContacts(contactReader.ItemCountEstimate);
                    }
                    progressCallback.Begin(workEstimate);

                    conversationManager = new ConversationManager(contactReader,
                                                                  textMessageReader,
                                                                  chatReader,
                                                                  attachments,
                                                                  progressCallback);
                    if (mergeConversations)
                    {
                        conversationManager = new MergingConversationManager(conversationManager, progressCallback);
                    }
                }
            }

            return conversationManager;
        }
Exemplo n.º 24
0
        private ContactReader GetContactReaderFromSingleDatabaseRow(ContactDatabaseRow row)
        {
            MockContactDatabaseReader mockReader = new MockContactDatabaseReader();
            mockReader.AddRow(row);
            ContactReader contactReader = new ContactReader();
            contactReader.ParseDatabase(mockReader);

            return contactReader;
        }
        /// <summary>
        /// Displays the items from the contact store in the contacts view.
        /// </summary>
        /// <param name="reader">Contact store reader</param>
        /// <param name="isGroup">
        /// Boolean to decide if to show the list in a group or a flat list
        /// Groups is shown by default and search
        /// Flast list is shown during search
        /// </param>
        private async Task DisplayContactsFromReaderAsync(ContactReader reader, bool isGroup)
        {
            contactItems.Clear();
            ContactBatch contactBatch = await reader.ReadBatchAsync();
            if (contactBatch.Contacts.Count == 0)
            {
                Debug.WriteLine("Contact store empty");
                ContactsStatusText = "We couldn't find any contacts.";
                ShowContactListStatusText();
                return;
            }

            while (contactBatch.Contacts.Count != 0)
            {
                //should batch add to avoid triggering callbacks            
                foreach (Contact c in contactBatch.Contacts)
                {
                    ContactItem contactToAdd = new ContactItem(c.Id, c.DisplayName);
                    contactToAdd.SetImageAsync(c.Thumbnail);
                    contactItems.Add(contactToAdd);
                }
                contactBatch = await reader.ReadBatchAsync();
            }

            if (isGroup)
            {
                GroupsOfContacts = alphaGroupSorting(contactItems);
                ShowContactGroup();
            }
            else
            {
                ListOfContacts = contactItems;
                ShowContactList();
            }
            return;
        }