private static SyncTarget GetSyncTargetFromJson(SyncTypes syncType, JObject jsonTarget) { SyncTarget st = null; switch (syncType) { case SyncTypes.SyncDown: st = SyncDownTarget.FromJson(jsonTarget); break; case SyncTypes.SyncDownAttachment: st = AttachmentSyncDownTarget.FromJson(jsonTarget); break; case SyncTypes.SyncUp: st = SyncUpTarget.FromJSON(jsonTarget); break; } return(st); }
/// <summary> /// Create sync state in database for a sync up and return corresponding SyncState /// </summary> /// <param name="store"></param> /// <param name="target"></param> /// <param name="options"></param> /// <param name="soupName"></param> /// <returns></returns> public static SyncState CreateSyncUp(SmartStore.Store.SmartStore store, SyncUpTarget target, SyncOptions options, string soupName) { var sync = new JObject { {Constants.SyncType, SyncTypes.SyncUp.ToString()}, {Constants.SyncSoupName, soupName}, {Constants.SyncOptions, options.AsJson()}, {Constants.SyncStatus, SyncStatusTypes.New.ToString()}, {Constants.SyncProgress, 0}, {Constants.SyncTotalSize, -1}, {Constants.SyncMaxTimeStamp, -1}, {Constants.SyncTarget, target.AsJson()} }; JObject upserted = store.Upsert(Constants.SyncsSoup, sync); if (upserted != null) { return FromJson(upserted); } sync[Constants.SyncStatus] = SyncStatusTypes.Failed.ToString(); return FromJson(sync); }
/// <summary> /// Build SyncState from json /// </summary> /// <param name="sync"></param> /// <returns></returns> public static SyncState FromJson(JObject sync) { if (sync == null) { return(null); } var jsonTarget = sync.ExtractValue <JObject>(Constants.SyncTarget); var syncType = (SyncTypes)Enum.Parse(typeof(SyncTypes), sync.ExtractValue <string>(Constants.SyncType)); var state = new SyncState { Id = sync.ExtractValue <long>(SmartStore.Store.SmartStore.SoupEntryId), Target = (syncType == SyncTypes.SyncDown ? (SyncTarget)SyncDownTarget.FromJson(jsonTarget) : SyncUpTarget.FromJson(jsonTarget)), Options = SyncOptions.FromJson(sync.ExtractValue <JObject>(Constants.SyncOptions)), SoupName = sync.ExtractValue <string>(Constants.SyncSoupName), Progress = sync.ExtractValue <int>(Constants.SyncProgress), TotalSize = sync.ExtractValue <int>(Constants.SyncTotalSize), Type = syncType, Status = (SyncStatusTypes) Enum.Parse(typeof(SyncStatusTypes), sync.ExtractValue <string>(Constants.SyncStatus)), MaxTimeStamp = sync.ExtractValue <long>(Constants.SyncMaxTimeStamp) }; return(state); }
private long TrySyncUp(int numberOfChanges, SyncState.MergeModeOptions mergeMode = SyncState.MergeModeOptions.Overwrite) { // Create sync SyncOptions options = SyncOptions.OptionsForSyncUp(new List<string>(new[] { Constants.Name }), mergeMode); var target = new SyncUpTarget(); SyncState sync = SyncState.CreateSyncUp(_smartStore, target, options, AccountsSoup); long syncId = sync.Id; CheckStatus(sync, SyncState.SyncTypes.SyncUp, syncId, SyncState.SyncStatusTypes.New, 0, -1); // run sync _syncCheck = 0; _numberOfChanges = numberOfChanges; DateTime end = DateTime.Now.AddSeconds(60); _syncManager.RunSync(sync, HandleSyncUpCheck); while (_syncCheck < 1) { if (DateTime.Now > end) Assert.Fail("Sync timed out"); } return syncId; }
public void SyncUpContacts() { RegisterSoup(); SyncOptions options = SyncOptions.OptionsForSyncUp(ContactObject.ContactFields.ToList(), SyncState.MergeModeOptions.LeaveIfChanged); var target = new SyncUpTarget(); _syncManager.SyncUp(target, options, ContactSoup, HandleSyncUpdate); }