/// <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; }
/// <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), SyncType = syncType, Status = (SyncStatusTypes) Enum.Parse(typeof (SyncStatusTypes), sync.ExtractValue<string>(Constants.SyncStatus)), MaxTimeStamp = sync.ExtractValue<long>(Constants.SyncMaxTimeStamp) }; return state; }
public static SyncOptions OptionsForSyncDown(SyncState.MergeModeOptions mergeMode) { return new SyncOptions(null, mergeMode); }
public static SyncOptions OptionsForSyncUp(List<string> fieldList, SyncState.MergeModeOptions mergeMode = SyncState.MergeModeOptions.Overwrite) { return new SyncOptions(fieldList, mergeMode); }
private SyncOptions(List<string> fieldList, SyncState.MergeModeOptions mergeMode) : this(fieldList) { MergeMode = mergeMode; }
private static void CheckStatus(SyncState sync, SyncState.SyncTypes expectedType, long expectedId, SyncState.SyncStatusTypes expectedStatus, int expectedProgress, int expectedSize) { Assert.AreEqual(expectedType, sync.SyncType, "Wrong type"); Assert.AreEqual(expectedId, sync.Id, "Wrong id"); Assert.AreEqual(expectedStatus, sync.Status, "Wrong status"); Assert.AreEqual(expectedProgress, sync.Progress, "Wrong progress"); Assert.AreEqual(expectedSize, sync.TotalSize, "Wrong total size"); }
private void HandleResyncCheck(SyncState sync) { if (sync.Status == SyncState.SyncStatusTypes.Done) _syncCheck = 3; switch (_syncCheck) { default: CheckStatus(sync, SyncState.SyncTypes.SyncDown, sync.Id, SyncState.SyncStatusTypes.Running, 0, _idToNames.Count); break; case 3: CheckStatus(sync, SyncState.SyncTypes.SyncDown, sync.Id, SyncState.SyncStatusTypes.Done, 100, _idToNames.Count); break; } }
private void HandleSyncDownCheck(SyncState sync) { _syncCheck++; switch (_syncCheck) { case 1: CheckStatus(sync, SyncState.SyncTypes.SyncDown, sync.Id, SyncState.SyncStatusTypes.Running, 0, -1); // we get an update right away before getting records to sync break; case 2: CheckStatus(sync, SyncState.SyncTypes.SyncDown, sync.Id, SyncState.SyncStatusTypes.Running, 0, _idToNames.Count); break; default: CheckStatus(sync, SyncState.SyncTypes.SyncDown, sync.Id, SyncState.SyncStatusTypes.Done, 100, _idToNames.Count); break; } }
private void HandleSyncUpCheck(SyncState sync) { if (sync.Progress == 100 || sync.Status == SyncState.SyncStatusTypes.Failed) _syncCheck = 1; switch (_syncCheck) { case 1: CheckStatus(sync, SyncState.SyncTypes.SyncUp, sync.Id, SyncState.SyncStatusTypes.Done, 100, _numberOfChanges); break; } }
private long TrySyncDown(SyncState.MergeModeOptions mergeMode) { // Ids clause String idsClause = "('" + String.Join("', '", _idToNames.Keys) + "')"; // Create sync SyncDownTarget target = new SoqlSyncDownTarget("SELECT Id, Name, " + Constants.LastModifiedDate + " FROM Account WHERE Id IN " + idsClause); SyncOptions options = SyncOptions.OptionsForSyncDown(mergeMode); SyncState sync = SyncState.CreateSyncDown(_smartStore, target, AccountsSoup, options); long syncId = sync.Id; CheckStatus(sync, SyncState.SyncTypes.SyncDown, syncId, SyncState.SyncStatusTypes.New, 0, -1); // Run sync _syncCheck = 0; _syncManager.RunSync(sync, HandleSyncDownCheck); DateTime end = DateTime.Now.AddSeconds(60); while (_syncCheck < 3) { if (DateTime.Now > end) Assert.Fail("Sync timed out"); } return syncId; }
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; }
private void HandleSyncUpdate(SyncState sync) { if (SyncState.SyncStatusTypes.Done != sync.Status) return; switch (sync.SyncType) { case SyncState.SyncTypes.SyncUp: RemoveDeleted(); ResetUpdated(); SyncDownContacts(); break; case SyncState.SyncTypes.SyncDown: LoadDataFromSmartStore(false); break; } }
private void HandleSyncUpdate(SyncState sync) { if (SyncState.SyncStatusTypes.Done != sync.Status) return; switch (sync.SyncType) { case SyncState.SyncTypes.SyncUp: SyncDownNotes(); break; case SyncState.SyncTypes.SyncDown: LoadDataFromSmartStore(false); break; } }