public async override Task <Results> Run()
        {
            string zoneName;

            if (!TryGetString("zoneName", out zoneName))
            {
                throw new InvalidProgramException();
            }

            var container = CKContainer.DefaultContainer;
            var privateDB = container.PrivateCloudDatabase;

            CKRecordZone recordZone = await privateDB.SaveRecordZoneAsync(new CKRecordZone (zoneName));

            var results = new Results();

            if (recordZone == null)
            {
                throw new InvalidProgramException();
            }

            if (recordZone != null)
            {
                results.Items.Add(new CKRecordZoneWrapper(recordZone));
            }

            return(results);
        }
示例#2
0
    public void Can_create_record_zone_with_zone_id()
    {
        var zoneId = new CKRecordZoneID("zoneName", "ownerName");
        var zone   = new CKRecordZone(zoneId);

        Assert.AreEqual(zoneId, zone.ZoneID);
    }
示例#3
0
    public void Can_create_record_zone_with_zone_name()
    {
        var zoneName = "zoneName";
        var zone     = new CKRecordZone(zoneName);

        Assert.AreEqual(zone.ZoneID.ZoneName, zoneName);
    }
示例#4
0
    public void Cant_create_record_with_no_zone_id()
    {
        TestDelegate sut = () => {
            CKRecordZoneID zoneId = null;
            var            zone   = new CKRecordZone(zoneId);
        };

        Assert.Throws <ArgumentNullException>(sut);
    }
示例#5
0
    public void Can_create_record_of_a_type_in_a_zone()
    {
        var recordType = "record_type";
        var zoneName   = "zone_name";
        var recordZone = new CKRecordZone(zoneName);

        var record = new CKRecord(recordType, recordZone.ZoneID);

        Assert.AreEqual(record.RecordID.ZoneID, recordZone.ZoneID);
    }
示例#6
0
    public void Can_access_zone_capabilities()
    {
        TestDelegate sut = () =>
        {
            var zone       = new CKRecordZone("name");
            var capability = zone.Capabilities;
        };

        Assert.DoesNotThrow(sut);
    }
示例#7
0
    public void Cant_create_record_zone_with_no_zone_name()
    {
        TestDelegate sut = () =>
        {
            string zoneName = null;
            var    zone     = new CKRecordZone(zoneName);
        };

        Assert.Throws <ArgumentNullException>(sut);
    }
示例#8
0
    public void Cant_create_record_zone_with_invalid_zone_name(
        [Values("", "_underscore", "2numbers")] string zoneName
        )
    {
        TestDelegate sut = () => {
            var zone = new CKRecordZone(zoneName);
        };

        Assert.Throws <CloudKitException>(sut);
    }
    private void Run()
    {
        Debug.Log("Example 5 - Zones");

        // Apple arcade recommends using zones for different GC users
        customZone = new CKRecordZone("GameCenterUser1");
        database   = CKContainer.DefaultContainer().PrivateCloudDatabase;

        database.SaveRecordZone(customZone, OnRecordZoneCreated);
    }
示例#10
0
        public static async Task <int> GetPastPurchasesAsync()
        {
            var container = CKContainer.DefaultContainer;

            var status = await container.GetAccountStatusAsync();

            var hasCloud = status == CKAccountStatus.Available;

            if (!hasCloud)
            {
                return(0);
            }

            var db = container.PrivateCloudDatabase;

            var pred  = NSPredicate.FromFormat("TransactionId != 'tttt'");
            var query = new CKQuery("PatronSubscription", pred);

            var recs = await db.PerformQueryAsync(query, CKRecordZone.DefaultRecordZone().ZoneId);

            Console.WriteLine("NUM PATRON RECS = {0}", recs.Length);

            var subs = recs.Select(x => new PatronSubscription(x)).OrderBy(x => x.PurchaseDate).ToArray();

            var ed = DateTime.UtcNow;

            if (subs.Length > 0)
            {
                ed = subs[0].PurchaseEndDate;
                foreach (var s in subs.Skip(1))
                {
                    if (s.PurchaseDate < ed)
                    {
                        ed = ed.AddMonths(s.NumMonths);
                    }
                    else
                    {
                        ed = s.PurchaseEndDate;
                    }
                }
            }

            Console.WriteLine("NEW END DATE = {0}", ed);

            var endDate  = ed;
            var isPatron = DateTime.UtcNow < endDate;

            var settings = DocumentAppDelegate.Shared.Settings;

            settings.IsPatron      = isPatron;
            settings.PatronEndDate = endDate;

            return(subs.Length);
        }
示例#11
0
    private void OnRecordZoneCreated(CKRecordZone zone, NSError error)
    {
        Debug.Log(string.Format("Created record zone with name {0}", zone.ZoneID.ZoneName));

        // records you want to save to a custom zone are initialized with the zoneId
        var save1 = new CKRecord("SaveGame", customZone.ZoneID);

        // or if you need a custom record name, initialize with a recordID with the zoneId
        var save2 = new CKRecord("SaveGame", new CKRecordID("MySave", customZone.ZoneID));

        var op = new CKModifyRecordsOperation(new CKRecord[] { save1, save2 }, null);

        op.Configuration.QualityOfService = NSQualityOfService.UserInitiated;
        op.ModifyRecordsCompletionBlock   = OnRecordsSaved;
        database.AddOperation(op);
    }
    public IEnumerator Can_fetch_a_record_zone_by_its_id()
    {
        var database  = CKContainer.DefaultContainer().PrivateCloudDatabase;
        var wasCalled = false;

        var          recordZoneId = new CKRecordZoneID("zonename", "me");
        CKRecordZone returnedZone = null;

        database.FetchRecordZoneWithID(recordZoneId, (zone, error) => {
            wasCalled    = true;
            returnedZone = zone;
        });

        yield return(WaitUntilWithTimeout(() => wasCalled, DefaultTimeout));

        Assert.IsTrue(wasCalled);
        Assert.AreEqual(recordZoneId, returnedZone.ZoneID);
    }
    public IEnumerator Can_save_a_record_zone()
    {
        var database  = CKContainer.DefaultContainer().PrivateCloudDatabase;
        var wasCalled = false;

        var          zone          = new CKRecordZone(new CKRecordZoneID("zonename", "me"));
        CKRecordZone returnedZone  = null;
        NSError      returnedError = null;

        database.SaveRecordZone(zone, (z, error) => {
            wasCalled     = true;
            returnedZone  = z;
            returnedError = error;
        });

        yield return(WaitUntilWithTimeout(() => wasCalled, DefaultTimeout));

        Assert.IsTrue(wasCalled);
        Assert.IsNull(returnedError);
        Assert.AreEqual(zone, returnedZone);
    }
    public IEnumerator Can_delete_a_record_zone_by_its_id()
    {
        var database  = CKContainer.DefaultContainer().PrivateCloudDatabase;
        var wasCalled = false;

        var            zone          = new CKRecordZone(new CKRecordZoneID("zonename", "me"));
        CKRecordZoneID deletedZoneId = null;
        NSError        returnedError = null;

        database.SaveRecordZone(zone, (zone2, error) => {
            database.DeleteRecordZoneWithID(zone2.ZoneID, (recordZoneId, error2) => {
                wasCalled     = true;
                deletedZoneId = recordZoneId;
            });
        });

        yield return(WaitUntilWithTimeout(() => wasCalled, DefaultTimeout));

        Assert.IsTrue(wasCalled);
        Assert.IsNull(returnedError);
        Assert.AreEqual(zone.ZoneID, deletedZoneId);
    }
示例#15
0
        async Task DeletePastPurchasesAsync()
        {
            try {
                var container = CKContainer.DefaultContainer;
                var db        = container.PrivateCloudDatabase;

                var pred  = NSPredicate.FromFormat("TransactionId != 'tttt'");
                var query = new CKQuery("PatronSubscription", pred);

                var recs = await db.PerformQueryAsync(query, CKRecordZone.DefaultRecordZone().ZoneId);

                Console.WriteLine("NUM RECS = {0}", recs.Length);

                foreach (var r in recs)
                {
                    await db.DeleteRecordAsync(r.Id);
                }
            } catch (NSErrorException ex) {
                Console.WriteLine("ERROR: {0}", ex.Error);
                Log.Error(ex);
            } catch (Exception ex) {
                Log.Error(ex);
            }
        }
		public CKRecordZoneWrapper (CKRecordZone zone)
		{
			this.zone = zone;
		}
示例#17
0
 public CKRecordZoneWrapper(CKRecordZone zone)
 {
     this.zone = zone;
 }
示例#18
0
    public void Default_record_zone_exists()
    {
        var zone = CKRecordZone.DefaultRecordZone();

        Assert.NotNull(zone);
    }