protected override void ProcessRecord() { // do the data reading // this can take a very long time // TODO: we need a way to warn the user var rows = CursorReader.GetCmcFieldValues(this.CursorName, FieldNames, Filters, ConnectedFields, !string.IsNullOrEmpty(ViewName), UseThids); foreach (var row in rows) { PSObject responseObject = new PSObject(); for (int i = 0; i < row.Count; i++) //row.Count represents the number of columns in the row, except when it only contains indirect fields and the viewtype is Book. What a mess Commence is. // PSNoteProperty: Serves as a property that is a simple name-value pair. { responseObject.Members.Add(new PSNoteProperty(columnNames[i], row[i])); } WriteObject(responseObject); } }
private void MultiPass() { try { string[] userIds = new string[] { "792", "757", "770", "771", "843", "961", "960", "988", "752", }; string selection = GetSelection(userIds); string[] parameters = userIds.Concat(new string[] { "0" }).ToArray(); var cr = ContentResolver; using (var pCur = cr.Query(Phone.ContentUri, null, selection, parameters, null)) { var x = pCur.GetColumnNames(); var reader2 = new CursorReader<YarlyContact>(pCur, c => { int numberField = c.GetColumnIndex(Phone.Number); string phoneNo = c.GetString(numberField); return new YarlyContact(null, phoneNo); }); foreach (var item in reader2) { try { Console.WriteLine(item); } catch (Exception) { throw; } } } } catch (Exception ex) { Console.WriteLine(ex.Message); } return; }
private IEnumerable<YarlyContact> GetPhoneNumbers() { List<string> userIds = null; var cr = ContentResolver; string idColumnName = ContactsContract.PhoneLookup.InterfaceConsts.Id; using (var cur = cr.Query(ContactsContract.Contacts.ContentUri, new string[] { idColumnName }, null, null, null)) { int idIndex = cur.GetColumnIndex(idColumnName); var reader = new CursorReader<string>(cur, c => c.GetString(idIndex)); userIds = reader.ToList(); } string selection = GetSelection(userIds); userIds.Add("0"); // has phone using (var pCur = cr.Query(Phone.ContentUri, null, //new string[] { ContactsContract.PhoneLookup.InterfaceConsts.DisplayName, Phone.Number }, selection, userIds.ToArray(), null)) { var x = pCur.GetColumnNames(); int numberField = pCur.GetColumnIndex(Phone.Number); int displayNameField = pCur.GetColumnIndex(ContactsContract.PhoneLookup.InterfaceConsts.DisplayName); var reader2 = new CursorReader<YarlyContact>(pCur, c => { for (int i = 0; i < pCur.GetColumnNames().Count(); i++) { { try { string name = pCur.GetColumnName(i); string value = pCur.GetString(i); Console.WriteLine("{0} - {1}", name, value); } catch (Exception) { } } } Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); string phoneNo = pCur.GetString(numberField); string displayName = pCur.GetString(displayNameField); return new YarlyContact(displayName, phoneNo); }); foreach (var item in reader2) { Console.WriteLine(item); yield return item; } } }
private IEnumerable<YarlyContact> GetPhoneNumbersSlow() { List<string> numbers = new List<string>(); Dictionary<string, string> userIds = new Dictionary<string, string>(); var cr = ContentResolver; using (var cur = cr.Query(ContactsContract.Contacts.ContentUri, null, null, null, null)) { var reader = new CursorReader<CursorContact>(cur, c => new CursorContact(c)); foreach (var contact in reader.Where(c => c.HasPhone)) { string selection = Phone.InterfaceConsts.ContactId + " = ?"; string[] parameters = new string[] { contact.Id }; userIds[contact.Id] = contact.Id; using (var pCur = cr.Query(Phone.ContentUri, new string[] { Phone.Number }, selection, parameters, null)) { var x = pCur.GetColumnNames(); var reader2 = new CursorReader<YarlyContact>(pCur, c => { int numberField = c.GetColumnIndex(Phone.Number); string phoneNo = pCur.GetString(numberField); return new YarlyContact(contact.DisplayName, phoneNo); }); foreach (var item in reader2) { yield return item; } break; } } } //DumpIds(userIds); }