int IndexOfRecordByRecordID (CKRecordID recordId) { return Results.Items.FindIndex (r => { var record = (r as CKRecordWrapper)?.Record; return record != null && record.Id == recordId; }); }
public void Can_create_CKShare_with_root_record_and_share_id() { var shareId = new CKRecordID("shareId"); var rootRecord = new CKRecord("root_record_type"); var share = new CKShare(rootRecord, shareId); Assert.AreEqual(share.RecordID, shareId); }
public void MarkRecordAsDeleted(CKRecordID recordID) { var index = IndexOfRecordByRecordID(recordID); if (index > 0) { Results.Deleted.Add(index); } }
public void Can_create_record_of_a_type_with_a_specific_name() { var recordType = "record_type"; var recordName = "record_name"; var recordId = new CKRecordID(recordName); var record = new CKRecord(recordType, recordId); Assert.AreEqual(record.RecordID, recordId); }
public async override Task<Results> Run () { object recordName, zoneName; if (Data.TryGetValue ("recordName", out recordName) && Data.TryGetValue ("zoneName", out zoneName)) { var container = CKContainer.DefaultContainer; var zoneId = new CKRecordZoneID ((string)zoneName, CKContainer.OwnerDefaultName); var userRecordID = new CKRecordID ((string)recordName, zoneId); CKDiscoveredUserInfo userInfo = await container.DiscoverUserInfoAsync (userRecordID); return new Results (new IResult [] { new CKDiscoveredUserInfoWrapper (userInfo) }); } throw new InvalidProgramException ("there are no recordName and zoneName"); }
private void OnRecordDeleted(CKRecordID recordId, NSError error) { if (error != null) { Debug.LogError(error.LocalizedDescription); } else { Debug.Log(string.Format("record: '{0}' deleted", recordId.RecordName)); } Debug.Log("Done"); }
public IEnumerator Can_fetch_share_participant_with_user_recordID() { var recordId = new CKRecordID("recordName"); var wasCalled = false; CKContainer.DefaultContainer().FetchShareParticipantWithUserRecordID(recordId, (participant, error) => { wasCalled = true; }); yield return(WaitUntilWithTimeout(() => wasCalled, DefaultTimeout)); Assert.IsTrue(wasCalled); }
public IEnumerator Can_fetch_user_recordID() { CKRecordID CKRecordID = null; var wasCalled = false; CKContainer.DefaultContainer().FetchUserRecordIDWithCompletionHandler((ckRecordId, error) => { CKRecordID = ckRecordId; wasCalled = true; }); yield return(WaitUntilWithTimeout(() => wasCalled, DefaultTimeout)); Assert.IsTrue(wasCalled); Assert.IsNotNull(CKRecordID); }
public async void LoadNewPostsWithRecordID(CKRecordID recordID) { // Called when AppDelegate receives a push notification // The post that triggered the push may not be indexed yet, so a fetch on predicate might not see it. // We can still fetch by recordID though CKDatabase publicDB = CKContainer.DefaultContainer.PublicCloudDatabase; try { CKRecord record = await publicDB.FetchRecordAsync (recordID); Post postThatFiredPush = new Post(record); postThatFiredPush.LoadImage(null, TableView.ReloadData); postManager.LoadNewPosts(postThatFiredPush); } catch(NSErrorException ex) { Console.WriteLine (ex.Error); } }
private void FetchRecord(string recordName) { // Most operations are done via using a recordID as a handle to the // record itself. If you don't have an instance of the record laying // around to get it's record ID from. This is how you would go about // creating one using a known record name... var recordId = new CKRecordID(recordName); database.FetchRecordWithID(recordId, OnRecordFetched); // if you don't specify a record name when you create the record one is // automatically created for you. If you want to manually set one you // can do it like this... // var record = new CKRecord("MyType", new CKRecordID("ExampleRecordName")) }
public async override Task <Results> Run() { object recordName, zoneName; if (Data.TryGetValue("recordName", out recordName) && Data.TryGetValue("zoneName", out zoneName)) { var container = CKContainer.DefaultContainer; var zoneId = new CKRecordZoneID((string)zoneName, CKContainer.OwnerDefaultName); var userRecordID = new CKRecordID((string)recordName, zoneId); CKDiscoveredUserInfo userInfo = await container.DiscoverUserInfoAsync(userRecordID); return(new Results(new IResult [] { new CKDiscoveredUserInfoWrapper(userInfo) })); } throw new InvalidProgramException("there are no recordName and zoneName"); }
public async void LoadNewPostsWithRecordID(CKRecordID recordID) { // Called when AppDelegate receives a push notification // The post that triggered the push may not be indexed yet, so a fetch on predicate might not see it. // We can still fetch by recordID though CKDatabase publicDB = CKContainer.DefaultContainer.PublicCloudDatabase; try { CKRecord record = await publicDB.FetchRecordAsync(recordID); Post postThatFiredPush = new Post(record); postThatFiredPush.LoadImage(null, TableView.ReloadData); postManager.LoadNewPosts(postThatFiredPush); } catch (NSErrorException ex) { Console.WriteLine(ex.Error); } }
public NSError this[CKRecordID key] { get { NSDictionary dict = base.GetNSDictionary(CKErrorFields.PartialErrorsByItemIdKey); if (dict == null) { return(null); } NSObject obj; if (!dict.TryGetValue(key, out obj)) { return(null); } return((NSError)obj); } }
public IEnumerator Can_delete_a_record() { var database = CKContainer.DefaultContainer().PrivateCloudDatabase; var wasCalled = false; var record = new CKRecord("testrecord"); CKRecordID deletedRecordId = null; database.SaveRecord(record, (record2, error) => { database.DeleteRecordWithID(record2.RecordID, (r2, error2) => { deletedRecordId = r2; wasCalled = true; }); }); yield return(WaitUntilWithTimeout(() => wasCalled, DefaultTimeout)); Assert.AreEqual(record.RecordID, deletedRecordId); }
async partial void Add (UIButton sender) { if (string.IsNullOrEmpty (nameTextField.Text)) nameTextField.ResignFirstResponder (); else { var newRecord = new CKRecord (ReferenceSubItemRecordType); var parentRecordId = new CKRecordID (ParentRecordName); newRecord ["name"] = (NSString)nameTextField.Text; newRecord ["parent"] = new CKReference (parentRecordId, CKReferenceAction.DeleteSelf); await CloudManager.SaveAsync (newRecord); records.Insert (0, newRecord); var indexPath = NSIndexPath.FromRowSection (0, 0); TableView.InsertRows (new [] { indexPath }, UITableViewRowAnimation.Automatic); nameTextField.ResignFirstResponder (); nameTextField.Text = string.Empty; } }
public async override Task<Results> Run () { string zoneName, recordName; if (!TryGetString ("zoneName", out zoneName) || !TryGetString ("recordName", out recordName)) throw new InvalidProgramException (); var container = CKContainer.DefaultContainer; var privateDB = container.PrivateCloudDatabase; var zoneId = new CKRecordZoneID (zoneName, CKContainer.OwnerDefaultName); var recordId = new CKRecordID (recordName, zoneId); var record = await privateDB.FetchRecordAsync (recordId); var results = new Results (); if (record != null) results.Items.Add (new CKRecordWrapper (record)); return results; }
async partial void Add(UIButton sender) { if (string.IsNullOrEmpty(nameTextField.Text)) { nameTextField.ResignFirstResponder(); } else { var newRecord = new CKRecord(ReferenceSubItemRecordType); var parentRecordId = new CKRecordID(ParentRecordName); newRecord ["name"] = (NSString)nameTextField.Text; newRecord ["parent"] = new CKReference(parentRecordId, CKReferenceAction.DeleteSelf); await CloudManager.SaveAsync(newRecord); records.Insert(0, newRecord); var indexPath = NSIndexPath.FromRowSection(0, 0); TableView.InsertRows(new [] { indexPath }, UITableViewRowAnimation.Automatic); nameTextField.ResignFirstResponder(); nameTextField.Text = string.Empty; } }
public async Task <CKRecord> FetchRecordAsync(string id) { var current = new CKRecordID(id); return(await publicDatabase.FetchRecordAsync(current)); }
public async Task <CKDiscoveredUserInfo> DiscoverUserInfoAsync() { CKRecordID recordId = await container.FetchUserRecordIdAsync(); return(await container.DiscoverUserInfoAsync(recordId)); }
public async Task<CKRecord> FetchRecordAsync (string id) { var current = new CKRecordID (id); return await publicDatabase.FetchRecordAsync (current); }
public CKRecord GetRecordById (CKRecordID recordId) { return recordsByID [recordId]; }
public void MarkRecordAsDeleted (CKRecordID recordID) { var index = IndexOfRecordByRecordID (recordID); if (index > 0) Results.Deleted.Add (index); }
public CKRecordIdWrapper(CKRecordID record) { this.record = record; }
public CKRecordIdWrapper (CKRecordID record) { this.record = record; }
public void QueryForRecords (string referenceRecordName, Action<List<CKRecord>> completionHandler) { var recordId = new CKRecordID (referenceRecordName); var parent = new CKReference (recordId, CKReferenceAction.None); var predicate = NSPredicate.FromFormat ("parent == %@", parent); var query = new CKQuery (ReferenceSubItemsRecordType, predicate) { SortDescriptors = new [] { new NSSortDescriptor ("creationDate", false) } }; var queryOperation = new CKQueryOperation (query) { DesiredKeys = new [] { NameField } }; var results = new List<CKRecord> (); queryOperation.RecordFetched = (record) => results.Add (record); queryOperation.Completed = (cursor, error) => { if (error != null) { Console.WriteLine ("An error occured: {0}", error.Description); return; } DispatchQueue.MainQueue.DispatchAsync (() => completionHandler (results)); }; publicDatabase.AddOperation (queryOperation); }
public CKRecord GetRecordById(CKRecordID recordId) { return(recordsByID [recordId]); }
// This method fetches the whole ImageRecord that a user taps on and then passes it to the delegate public override void ItemSelected(UICollectionView collectionView, NSIndexPath indexPath) { // If the user has already tapped on a thumbnail, prevent them from tapping any others if (controller.lockSelectThumbnail) { return; } else { controller.lockSelectThumbnail = true; } // Starts animating the thumbnail to indicate it is loading controller.ImageCollection.SetLoadingFlag(indexPath, true); // Uses convenience API to fetch the whole image record associated with the thumbnail that was tapped CKRecordID userSelectedRecordID = controller.ImageCollection.GetRecordId(indexPath); controller.PublicCloudDatabase.FetchRecord(userSelectedRecordID, (record, error) => { // If we get a partial failure, we should unwrap it if (error != null && error.Code == (long)CKErrorCode.PartialFailure) { CKErrorInfo info = new CKErrorInfo(error); error = info[userSelectedRecordID]; } Error errorResponse = controller.HandleError(error); switch (errorResponse) { case Error.Success: controller.ImageCollection.SetLoadingFlag(indexPath, false); Image selectedImage = new Image(record); InvokeOnMainThread(() => { controller.MasterController.GoTo(controller, selectedImage); }); break; case Error.Retry: Utils.Retry(() => { controller.lockSelectThumbnail = false; ItemSelected(collectionView, indexPath); }, error); break; case Error.Ignore: Console.WriteLine("Error: {0}", error.Description); string errorTitle = "Error"; string errorMessage = "We couldn't fetch the full size thumbnail you tried to select, try again"; string dismissButton = "Okay"; UIAlertController alert = UIAlertController.Create(errorTitle, errorMessage, UIAlertControllerStyle.Alert); alert.AddAction(UIAlertAction.Create(dismissButton, UIAlertActionStyle.Cancel, null)); InvokeOnMainThread(() => controller.PresentViewController(alert, true, null)); controller.ImageCollection.SetLoadingFlag(indexPath, false); controller.lockSelectThumbnail = false; break; default: throw new NotImplementedException(); } }); }
public void Cant_create_record_id_with_no_name() { TestDelegate sut = () => { var recordId = new CKRecordID(null); }; Assert.Throws <ArgumentNullException>(sut); }