rhodes 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. data/CHANGELOG +10 -0
  2. data/lib/framework/rho/rhoerror.rb +4 -0
  3. data/lib/framework/rhodes.rb +2 -2
  4. data/lib/framework/rhom/rhom.rb +21 -1
  5. data/lib/framework/version.rb +2 -2
  6. data/lib/rhodes.rb +2 -2
  7. data/platform/android/Rhodes/AndroidManifest.xml +2 -2
  8. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +21 -6
  9. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesInstance.java +1 -1
  10. data/platform/bb/rhodes/src/com/rho/RhoRubyHelper.java +10 -0
  11. data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +1 -1
  12. data/platform/bb/rhodes/src/com/rho/rubyext/GeoLocation.java +2 -2
  13. data/platform/bb/rhodes/src/rhomobile/PushListeningThread.java +4 -2
  14. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +52 -11
  15. data/platform/iphone/Classes/NativeBar.m +37 -18
  16. data/platform/iphone/Classes/Rhodes.h +2 -0
  17. data/platform/iphone/Classes/Rhodes.m +27 -8
  18. data/platform/iphone/Classes/SimpleMainView.h +7 -5
  19. data/platform/iphone/Classes/SimpleMainView.m +155 -36
  20. data/platform/iphone/Classes/TabbedMainView.h +2 -4
  21. data/platform/iphone/Classes/TabbedMainView.m +12 -10
  22. data/platform/iphone/Classes/WebView.m +1 -0
  23. data/platform/iphone/Info.plist +7 -1
  24. data/platform/iphone/icon114.png +0 -0
  25. data/platform/iphone/icon57.png +0 -0
  26. data/platform/iphone/icon72.png +0 -0
  27. data/platform/iphone/rbuild/iphone.rake +102 -16
  28. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +12 -0
  29. data/platform/shared/common/IRhoThreadImpl.h +1 -1
  30. data/platform/shared/common/PosixThreadImpl.cpp +17 -22
  31. data/platform/shared/common/PosixThreadImpl.h +1 -1
  32. data/platform/shared/common/RhoThread.cpp +7 -3
  33. data/platform/shared/common/RhoThread.h +21 -7
  34. data/platform/shared/common/RhodesApp.cpp +13 -9
  35. data/platform/shared/common/RhodesApp.h +1 -1
  36. data/platform/shared/common/ThreadQueue.cpp +6 -4
  37. data/platform/shared/rubyJVM/src/com/rho/IRhoRubyHelper.java +2 -0
  38. data/platform/shared/rubyJVM/src/com/rho/RhoThread.java +18 -8
  39. data/platform/shared/rubyJVM/src/com/rho/RhodesApp.java +70 -2
  40. data/platform/shared/rubyJVM/src/com/rho/ThreadQueue.java +143 -0
  41. data/platform/shared/rubyJVM/src/com/rho/sync/ClientRegister.java +15 -5
  42. data/platform/shared/rubyJVM/src/com/rho/sync/SyncEngine.java +42 -36
  43. data/platform/shared/rubyJVM/src/com/rho/sync/SyncNotify.java +63 -20
  44. data/platform/shared/rubyJVM/src/com/rho/sync/SyncSource.java +4 -4
  45. data/platform/shared/rubyJVM/src/com/rho/sync/SyncThread.java +12 -2
  46. data/platform/shared/rubyJVM/src/com/xruby/runtime/lang/RhoSupport.java +9 -3
  47. data/platform/shared/sync/ClientRegister.cpp +11 -3
  48. data/platform/shared/sync/ClientRegister.h +1 -0
  49. data/platform/shared/sync/SyncEngine.cpp +38 -35
  50. data/platform/shared/sync/SyncEngine.h +2 -1
  51. data/platform/shared/sync/SyncNotify.cpp +53 -20
  52. data/platform/shared/sync/SyncNotify.h +9 -2
  53. data/platform/shared/sync/SyncSource.cpp +3 -3
  54. data/platform/shared/sync/SyncSource.h +1 -1
  55. data/platform/shared/sync/SyncThread.cpp +9 -2
  56. data/platform/wm/rhodes/Alert.cpp +35 -21
  57. data/platform/wm/rhodes/Alert.h +11 -2
  58. data/platform/wm/rhodes/rho/common/RhoThreadImpl.cpp +11 -12
  59. data/platform/wm/rhodes/rho/common/RhoThreadImpl.h +2 -0
  60. data/res/generators/templates/application/build.yml +1 -1
  61. data/rhodes.gemspec +2 -2
  62. data/spec/framework_spec/rhoconfig.txt +1 -0
  63. data/spec/phone_spec/rhoconfig.txt +2 -0
  64. metadata +8 -5
  65. data/Manifest.txt +0 -5333
@@ -21,6 +21,8 @@ public class SyncNotify {
21
21
  String m_strUrl, m_strParams;
22
22
  boolean m_bRemoveAfterFire;
23
23
 
24
+ SyncNotification(){m_bRemoveAfterFire = false;}
25
+
24
26
  SyncNotification(String strUrl, String strParams, boolean bRemoveAfterFire)
25
27
  { m_strUrl = strUrl; m_strParams = strParams; m_bRemoveAfterFire = bRemoveAfterFire; }
26
28
  };
@@ -40,6 +42,7 @@ public class SyncNotify {
40
42
  Hashtable/*<int,SyncNotification>*/ m_mapSyncNotifications = new Hashtable();
41
43
  SyncNotification m_pSearchNotification;
42
44
  SyncNotification m_bulkSyncNotify;
45
+ SyncNotification m_emptyNotify = new SyncNotification();
43
46
 
44
47
  Mutex m_mxSyncNotifications = new Mutex();
45
48
  ISyncStatusListener m_syncStatusListener = null;
@@ -253,9 +256,10 @@ public class SyncNotify {
253
256
  {
254
257
  SyncSource src = (SyncSource)sources.elementAt(nSrc);
255
258
 
256
- fireSyncNotification( src, true, src.m_nErrCode, "");
257
259
  if ( getSync().getState() == SyncEngine.esStop )
258
- fireAllSyncNotifications(true, src.m_nErrCode, "", sources );
260
+ fireAllSyncNotifications(true, src.m_nErrCode, src.m_strError, sources, nSrc );
261
+ else
262
+ fireSyncNotification( src, true, src.m_nErrCode, "");
259
263
 
260
264
  cleanCreateObjectErrors();
261
265
  }
@@ -346,14 +350,6 @@ public class SyncNotify {
346
350
  }
347
351
  }
348
352
 
349
- void fireAllSyncNotifications( boolean bFinish, int nErrCode, String strMessage, Vector/*Ptr<CSyncSource*>&*/ sources )
350
- {
351
- for( int i = 0; i < sources.size(); i++ )
352
- {
353
- doFireSyncNotification( (SyncSource)sources.elementAt(i), bFinish, nErrCode, strMessage );
354
- }
355
- }
356
-
357
353
  void fireBulkSyncNotification( boolean bFinish, String status, String partition, int nErrCode )
358
354
  {
359
355
  if ( getSync().getState() == SyncEngine.esExit )
@@ -414,7 +410,41 @@ public class SyncNotify {
414
410
  }
415
411
 
416
412
  }
417
-
413
+
414
+ void fireAllSyncNotifications( boolean bFinish, int nErrCode, String strError, Vector/*Ptr<CSyncSource*>&*/ sources, int nCurSrc )
415
+ {
416
+ synchronized(m_mxSyncNotifications)
417
+ {
418
+ if ( nCurSrc >= 0 )
419
+ {
420
+ SyncSource src = (SyncSource)sources.elementAt(nCurSrc);
421
+ SyncNotification pSN = getSyncNotifyBySrc(src);
422
+ if ( pSN != null )
423
+ {
424
+ src.m_strError = strError;
425
+ src.m_nErrCode = nErrCode;
426
+
427
+ fireSyncNotification( src, bFinish, nErrCode, "" );
428
+ return;
429
+ }
430
+ }
431
+
432
+ //find any source with notify
433
+ for( int i = 0; i < (int)sources.size(); i++ )
434
+ {
435
+ SyncSource src = (SyncSource)sources.elementAt(i);
436
+ SyncNotification pSN = getSyncNotifyBySrc(src);
437
+ if ( pSN != null )
438
+ {
439
+ src.m_strError = strError;
440
+ src.m_nErrCode = nErrCode;
441
+ fireSyncNotification( src, bFinish, nErrCode, "" );
442
+ break;
443
+ }
444
+ }
445
+ }
446
+ }
447
+
418
448
  void fireSyncNotification( SyncSource src, boolean bFinish, int nErrCode, String strMessage )
419
449
  {
420
450
  if ( getSync().getState() == SyncEngine.esExit )
@@ -431,10 +461,24 @@ public class SyncNotify {
431
461
  }
432
462
  }
433
463
 
434
- doFireSyncNotification(src, bFinish, nErrCode, strMessage );
464
+ doFireSyncNotification(src, bFinish, nErrCode, "" );
435
465
  }
436
466
 
437
- void doFireSyncNotification( SyncSource src, boolean bFinish, int nErrCode, String strMessage )
467
+ SyncNotification getSyncNotifyBySrc(SyncSource src)
468
+ {
469
+ SyncNotification pSN = null;
470
+ if ( src.isSearch() )
471
+ pSN = m_pSearchNotification;
472
+ else
473
+ pSN = (SyncNotification)m_mapSyncNotifications.get(src.getID());
474
+
475
+ if ( pSN == null )//&& !getSync().isNoThreadedMode() )
476
+ return null;
477
+
478
+ return pSN != null ? pSN : m_emptyNotify;
479
+ }
480
+
481
+ void doFireSyncNotification( SyncSource src, boolean bFinish, int nErrCode, String strError )
438
482
  {
439
483
  if ( src == null || getSync().isStoppedByUser() )
440
484
  return; //TODO: implement all sources callback
@@ -444,12 +488,7 @@ public class SyncNotify {
444
488
  boolean bRemoveAfterFire = bFinish;
445
489
  {
446
490
  synchronized(m_mxSyncNotifications){
447
- SyncNotification sn = null;
448
- if ( src.isSearch() )
449
- sn = m_pSearchNotification;
450
- else
451
- sn = (SyncNotification)m_mapSyncNotifications.get(src.getID());
452
-
491
+ SyncNotification sn = getSyncNotifyBySrc(src);
453
492
  if ( sn == null )
454
493
  return;
455
494
 
@@ -474,7 +513,11 @@ public class SyncNotify {
474
513
 
475
514
  strBody += "error";
476
515
  strBody += "&error_code=" + nErrCode;
477
- strBody += "&error_message=" + URI.urlEncode(src.m_strError);
516
+
517
+ if ( strError != null && strError.length() > 0 )
518
+ strBody += "&error_message=" + URI.urlEncode(strError);
519
+ else
520
+ strBody += "&error_message=" + URI.urlEncode(src.m_strError);
478
521
  }
479
522
  }
480
523
  else
@@ -77,7 +77,7 @@ class SyncSource
77
77
  boolean m_bGetAtLeastOnePage = false;
78
78
  int m_nErrCode = RhoRuby.ERR_NONE;
79
79
  String m_strError = "";
80
- public boolean m_bIsSearch = false;
80
+ boolean m_bIsSearch = false;
81
81
 
82
82
  //String m_strPushBody = "";
83
83
  Vector/*Ptr<CSyncBlob*>*/ m_arSyncBlobs = new Vector();
@@ -139,7 +139,7 @@ class SyncSource
139
139
  m_bGetAtLeastOnePage = false;
140
140
 
141
141
  m_nErrCode = RhoRuby.ERR_NONE;
142
- m_bIsSearch = false;
142
+ m_bIsSearch = m_syncEngine.getState() == SyncEngine.esSearch;
143
143
  m_bSchemaSource = db.isTableExist(m_strName);
144
144
  }
145
145
 
@@ -158,7 +158,7 @@ class SyncSource
158
158
  m_bGetAtLeastOnePage = false;
159
159
 
160
160
  m_nErrCode = RhoRuby.ERR_NONE;
161
- m_bIsSearch = false;
161
+ m_bIsSearch = m_syncEngine.getState() == SyncEngine.esSearch;
162
162
 
163
163
  IDBResult res = db.executeSQL("SELECT token,associations from sources WHERE source_id=?", m_nID);
164
164
  if ( !res.isEnd() )
@@ -203,7 +203,7 @@ class SyncSource
203
203
  getNotify().fireSyncNotification(null, false, RhoRuby.ERR_NONE, RhoRuby.getMessageText("syncronizing") + getName() + "...");
204
204
 
205
205
  TimeInterval startTime = TimeInterval.getCurrentTime();
206
- m_bIsSearch = false;
206
+ //m_bIsSearch = false;
207
207
 
208
208
  try{
209
209
  if ( isEmptyToken() )
@@ -133,7 +133,6 @@ public class SyncThread extends RhoThread
133
133
  {
134
134
  m_oSyncEngine.exitSync();
135
135
  stop(SYNC_WAIT_BEFOREKILL_SECONDS);
136
- LOG.INFO( "Sync engine thread shutdown" );
137
136
 
138
137
  if ( ClientRegister.getInstance() != null )
139
138
  ClientRegister.getInstance().Destroy();
@@ -246,6 +245,8 @@ public class SyncThread extends RhoThread
246
245
  }
247
246
  }
248
247
  }
248
+
249
+ LOG.INFO("Sync engine thread shutdown");
249
250
  }
250
251
 
251
252
  boolean isNoCommands()
@@ -670,9 +671,18 @@ public class SyncThread extends RhoThread
670
671
  getSyncEngine().setSyncServer(syncserver);
671
672
 
672
673
  if ( syncserver != null && syncserver.length() > 0 )
674
+ {
673
675
  SyncThread.getInstance().start(SyncThread.epLow);
676
+ if ( ClientRegister.getInstance() != null )
677
+ ClientRegister.getInstance().startUp();
678
+ }
674
679
  else
675
- SyncThread.getInstance().stop(SYNC_WAIT_BEFOREKILL_SECONDS);
680
+ {
681
+ //DO NOT STOP thread. because they cannot be restarted
682
+ //SyncThread.getInstance().stop(SYNC_WAIT_BEFOREKILL_SECONDS);
683
+ //if ( ClientRegister.getInstance() != null )
684
+ // ClientRegister.getInstance().stop(SYNC_WAIT_BEFOREKILL_SECONDS);
685
+ }
676
686
 
677
687
  }catch(Exception e)
678
688
  {
@@ -2,6 +2,7 @@ package com.xruby.runtime.lang;
2
2
 
3
3
  import com.rho.IRhoRubyHelper;
4
4
  import com.rho.RhoClassFactory;
5
+ import com.rho.RhoConf;
5
6
  import com.rho.RhoEmptyLogger;
6
7
  import com.rho.RhoLogger;
7
8
  import com.rho.RhodesApp;
@@ -181,12 +182,12 @@ public class RhoSupport {
181
182
  required_file = required_file.replace('\\', '.');
182
183
  required_file = StringMe.replaceAll(required_file,"-", "minus");
183
184
 
184
- int nDot = required_file.lastIndexOf('.');
185
+ /*int nDot = required_file.lastIndexOf('.');
185
186
  if (nDot>0)
186
187
  {
187
188
  String fName = required_file.substring(nDot+1);
188
189
  required_file = required_file.substring(0, nDot+1) + fName.toLowerCase();
189
- }
190
+ }*/
190
191
 
191
192
  required_file += ".main";
192
193
  return getAppName() + "." + required_file;
@@ -259,7 +260,12 @@ public class RhoSupport {
259
260
  }
260
261
 
261
262
  if ( strValue == null || strValue.length() == 0 )
262
- return RubyConstant.QNIL;
263
+ {
264
+ if ( RhoConf.getInstance().isExist(name) )
265
+ strValue = RhoConf.getInstance().getString(name);
266
+ else
267
+ return RubyConstant.QNIL;
268
+ }
263
269
 
264
270
  return ObjectFactory.createString(strValue);
265
271
  }
@@ -41,8 +41,7 @@ CClientRegister::CClientRegister(common::IRhoClassFactory* factory,const char* d
41
41
 
42
42
  delete factory;
43
43
 
44
- if ( RHOCONF().getString("syncserver").length() > 0 )
45
- start(epLow);
44
+ startUp();
46
45
  }
47
46
 
48
47
  CClientRegister::~CClientRegister()
@@ -53,10 +52,19 @@ CClientRegister::~CClientRegister()
53
52
  m_pInstance = null;
54
53
  }
55
54
 
55
+ void CClientRegister::startUp()
56
+ {
57
+ if ( RHOCONF().getString("syncserver").length() > 0 )
58
+ {
59
+ start(epLow);
60
+ stopWait();
61
+ }
62
+ }
63
+
56
64
  void CClientRegister::run()
57
65
  {
58
66
  LOG(INFO)+"ClientRegister start";
59
- while(!isStopped())
67
+ while(!isStopping())
60
68
  {
61
69
  if ( CSyncThread::getInstance() != null )
62
70
  {
@@ -37,6 +37,7 @@ public:
37
37
 
38
38
  String getRegisterBody(const String& strClientID);
39
39
 
40
+ void startUp();
40
41
  private:
41
42
  CClientRegister(common::IRhoClassFactory* factory,const char* device_pin);
42
43
  ~CClientRegister();
@@ -37,11 +37,12 @@ void CSyncEngine::initProtocol()
37
37
  m_SyncProtocol = new CSyncProtocol_3();
38
38
  }
39
39
 
40
- void CSyncEngine::prepareSync(ESyncState eState)
40
+ void CSyncEngine::prepareSync(ESyncState eState, const CSourceID* oSrcID)
41
41
  {
42
42
  setState(eState);
43
43
  m_bStopByUser = false;
44
44
  m_nErrCode = RhoRuby.ERR_NONE;
45
+ m_strError = "";
45
46
 
46
47
  loadAllSources();
47
48
 
@@ -59,20 +60,26 @@ void CSyncEngine::prepareSync(ESyncState eState)
59
60
  }else
60
61
  m_nErrCode = RhoRuby.ERR_CLIENTISNOTLOGGEDIN;
61
62
 
62
- if ( m_sources.size() > 0 )
63
- {
64
- CSyncSource& src = *m_sources.elementAt(getStartSource());
65
- src.m_nErrCode = m_nErrCode;
66
- getNotify().fireSyncNotification(&src, true, src.m_nErrCode, "");
63
+ CSyncSource* src = null;
64
+ if ( oSrcID != null )
65
+ src = findSource(*oSrcID);
66
+
67
+ if ( src != null )
68
+ {
69
+ src->m_nErrCode = m_nErrCode;
70
+ src->m_strError = m_strError;
71
+ getNotify().fireSyncNotification(src, true, src->m_nErrCode, "");
67
72
  }else
68
- getNotify().fireSyncNotification(null, true, m_nErrCode, "");
73
+ {
74
+ getNotify().fireAllSyncNotifications(true, m_nErrCode, m_strError, m_sources, getStartSource());
75
+ }
69
76
 
70
77
  stopSync();
71
78
  }
72
79
 
73
80
  void CSyncEngine::doSyncAllSources()
74
81
  {
75
- prepareSync(esSyncAllSources);
82
+ prepareSync(esSyncAllSources, null);
76
83
 
77
84
  if ( isContinueSync() )
78
85
  {
@@ -104,7 +111,7 @@ void CSyncEngine::doSyncAllSources()
104
111
 
105
112
  void CSyncEngine::doSearch(rho::Vector<rho::String>& arSources, String strParams, String strAction, boolean bSearchSyncChanges, int nProgressStep)
106
113
  {
107
- prepareSync(esSearch);
114
+ prepareSync(esSearch, null);
108
115
  if ( !isContinueSync() )
109
116
  {
110
117
  if ( getState() != esExit )
@@ -125,7 +132,6 @@ void CSyncEngine::doSearch(rho::Vector<rho::String>& arSources, String strParams
125
132
  }
126
133
  }
127
134
 
128
- int nErrCode = 0;
129
135
  while( isContinueSync() )
130
136
  {
131
137
  int nSearchCount = 0;
@@ -153,7 +159,8 @@ void CSyncEngine::doSearch(rho::Vector<rho::String>& arSources, String strParams
153
159
  if ( !resp.isOK() )
154
160
  {
155
161
  stopSync();
156
- nErrCode = RhoRuby.getErrorFromResponse(resp);
162
+ m_nErrCode = RhoRuby.getErrorFromResponse(resp);
163
+ m_strError = resp.getCharData();
157
164
  continue;
158
165
  }
159
166
 
@@ -177,7 +184,8 @@ void CSyncEngine::doSearch(rho::Vector<rho::String>& arSources, String strParams
177
184
  LOG(ERROR) + "Sync server send search data with incompatible version. Client version: " + convertToStringA(getProtocol().getVersion()) +
178
185
  "; Server response version: " + convertToStringA(nVersion);
179
186
  stopSync();
180
- nErrCode = RhoRuby.ERR_UNEXPECTEDSERVERRESPONSE;
187
+ m_nErrCode = RhoRuby.ERR_UNEXPECTEDSERVERRESPONSE;
188
+ m_strError = resp.getCharData();
181
189
  continue;
182
190
  }
183
191
 
@@ -185,7 +193,8 @@ void CSyncEngine::doSearch(rho::Vector<rho::String>& arSources, String strParams
185
193
  {
186
194
  LOG(ERROR) + "Sync server send search data without source name.";
187
195
  stopSync();
188
- nErrCode = RhoRuby.ERR_UNEXPECTEDSERVERRESPONSE;
196
+ m_nErrCode = RhoRuby.ERR_UNEXPECTEDSERVERRESPONSE;
197
+ m_strError = resp.getCharData();
189
198
  continue;
190
199
  }
191
200
 
@@ -195,12 +204,12 @@ void CSyncEngine::doSearch(rho::Vector<rho::String>& arSources, String strParams
195
204
  {
196
205
  LOG(ERROR) + "Sync server send search data for unknown source name:" + strSrcName;
197
206
  stopSync();
198
- nErrCode = RhoRuby.ERR_UNEXPECTEDSERVERRESPONSE;
207
+ m_nErrCode = RhoRuby.ERR_UNEXPECTEDSERVERRESPONSE;
208
+ m_strError = resp.getCharData();
199
209
  continue;
200
210
  }
201
211
 
202
212
  oSrcArr.reset(0);
203
- pSrc->m_bIsSearch = true;
204
213
  pSrc->setProgressStep(nProgressStep);
205
214
  pSrc->processServerResponse_ver3(oSrcArr);
206
215
 
@@ -211,20 +220,7 @@ void CSyncEngine::doSearch(rho::Vector<rho::String>& arSources, String strParams
211
220
  break;
212
221
  }
213
222
 
214
- if ( isContinueSync() )
215
- {
216
- CSyncSource& src = *m_sources.elementAt(getStartSource());
217
- src.m_bIsSearch = true;
218
-
219
- getNotify().fireSyncNotification(&src, true, RhoRuby.ERR_NONE, RhoRuby.getMessageText("sync_completed"));
220
- }
221
- else if ( nErrCode != 0 )
222
- {
223
- CSyncSource& src = *m_sources.elementAt(getStartSource());
224
- src.m_nErrCode = nErrCode;
225
- src.m_bIsSearch = true;
226
- getNotify().fireSyncNotification(&src, true, src.m_nErrCode, "");
227
- }
223
+ getNotify().fireAllSyncNotifications(true, m_nErrCode, m_strError, m_sources, getStartSource());
228
224
 
229
225
  //update db info
230
226
  CTimeInterval endTime = CTimeInterval::getCurrentTime();
@@ -250,7 +246,7 @@ void CSyncEngine::doSearch(rho::Vector<rho::String>& arSources, String strParams
250
246
 
251
247
  void CSyncEngine::doSyncSource(const CSourceID& oSrcID)
252
248
  {
253
- prepareSync(esSyncSource);
249
+ prepareSync(esSyncSource, &oSrcID);
254
250
 
255
251
  if ( isContinueSync() )
256
252
  {
@@ -358,6 +354,9 @@ String CSyncEngine::loadClientID()
358
354
  else
359
355
  getUserDB().executeSQL("INSERT INTO client_info (client_id) values (?)", clientID);
360
356
 
357
+ if ( CClientRegister::getInstance() != null )
358
+ CClientRegister::getInstance()->startUp();
359
+
361
360
  }else if ( bResetClient )
362
361
  {
363
362
  if ( !resetClientIDByNet(clientID) )
@@ -413,7 +412,10 @@ boolean CSyncEngine::resetClientIDByNet(const String& strClientID)//throws Excep
413
412
  //"}}]}");
414
413
 
415
414
  if ( !resp.isOK() )
415
+ {
416
416
  m_nErrCode = RhoRuby.getErrorFromResponse(resp);
417
+ m_strError = resp.getCharData();
418
+ }
417
419
  /*else
418
420
  {
419
421
  processServerSources(resp.getCharData());
@@ -459,6 +461,7 @@ String CSyncEngine::requestClientIDByNet()
459
461
  m_nErrCode = RhoRuby.getErrorFromResponse(resp);
460
462
  if ( m_nErrCode == RhoRuby.ERR_NONE )
461
463
  m_nErrCode = RhoRuby.ERR_UNEXPECTEDSERVERRESPONSE;
464
+ m_strError = resp.getCharData();
462
465
  }
463
466
 
464
467
  return "";
@@ -675,13 +678,13 @@ void CSyncEngine::login(String name, String password, String callback)
675
678
  else
676
679
  getUserDB().executeSQL("INSERT INTO client_info (session) values (?)", strSession);
677
680
 
678
-
679
- if ( CClientRegister::getInstance() != null )
680
- CClientRegister::getInstance()->stopWait();
681
-
682
681
  getNotify().callLoginCallback(callback, RhoRuby.ERR_NONE, "" );
683
682
 
684
683
  PROF_STOP("Login");
684
+
685
+ if ( CClientRegister::getInstance() != null )
686
+ CClientRegister::getInstance()->startUp();
687
+
685
688
  //}catch(Exception exc)
686
689
  //{
687
690
  // LOG.ERROR("Login failed.", exc);
@@ -715,7 +718,7 @@ void CSyncEngine::logout()
715
718
  getUserDB().executeSQL( "UPDATE client_info SET session=NULL" );
716
719
  m_strSession = "";
717
720
 
718
- loadAllSources();
721
+ //loadAllSources();
719
722
  }
720
723
 
721
724
  void CSyncEngine::setSyncServer(char* syncserver)