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);
            }
        }
Exemple #4
0
    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");
    }
Exemple #7
0
    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);
    }
Exemple #8
0
    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");
        }
Exemple #12
0
        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);
            }
        }
Exemple #13
0
        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;
		}
Exemple #17
0
        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;
            }
        }
Exemple #18
0
        public async Task <CKRecord> FetchRecordAsync(string id)
        {
            var current = new CKRecordID(id);

            return(await publicDatabase.FetchRecordAsync(current));
        }
Exemple #19
0
        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);
		}
Exemple #23
0
 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]);
 }
Exemple #27
0
            // 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);
    }