コード例 #1
0
 /// <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;
 }
コード例 #2
0
 /// <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;
 }
コード例 #3
0
 public static SyncOptions OptionsForSyncDown(SyncState.MergeModeOptions mergeMode)
 {
     return new SyncOptions(null, mergeMode);
 }
コード例 #4
0
 public static SyncOptions OptionsForSyncUp(List<string> fieldList, SyncState.MergeModeOptions mergeMode = SyncState.MergeModeOptions.Overwrite)
 {
     return new SyncOptions(fieldList, mergeMode);
 }
コード例 #5
0
 private SyncOptions(List<string> fieldList, SyncState.MergeModeOptions mergeMode) : this(fieldList)
 {
     MergeMode = mergeMode;
 }
コード例 #6
0
 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");
 }
コード例 #7
0
 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;
     }
 }
コード例 #8
0
 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;
     }
 }
コード例 #9
0
 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;
     }
 }
コード例 #10
0
        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;
        }
コード例 #11
0
        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;
        }
コード例 #12
0
 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;
     }
 }
コード例 #13
0
 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;
     }
 }