rhodes 2.3.0 → 2.3.1.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. data/CHANGELOG +6 -0
  2. data/Manifest.txt +5819 -0
  3. data/README.md +2 -2
  4. data/Rakefile +9 -5
  5. data/doc/build.txt +7 -13
  6. data/doc/configuration.txt +4 -0
  7. data/doc/connect-to-web-services.txt +0 -1
  8. data/doc/device-caps.txt +2 -2
  9. data/doc/extensions.txt +2 -0
  10. data/doc/linea.txt +699 -0
  11. data/doc/rhom.txt +2 -1
  12. data/doc/synchronization.txt +39 -2
  13. data/doc/ui.txt +1 -0
  14. data/installer/README.html +1 -1
  15. data/lib/build/jake.rb +3 -0
  16. data/lib/framework/res/esri.wm.png +0 -0
  17. data/lib/framework/rho/render.rb +2 -0
  18. data/lib/framework/rho/rho.rb +17 -10
  19. data/lib/framework/rho/rhoapplication.rb +13 -3
  20. data/lib/framework/rho/rhoevent_bb.rb +3 -1
  21. data/lib/framework/rho/rhoevent_c.rb +4 -1
  22. data/lib/framework/rhodes.rb +1 -1
  23. data/lib/framework/rhom/rhom.rb +10 -0
  24. data/lib/framework/rhom/rhom_object_factory.rb +45 -0
  25. data/lib/framework/rhom/rhom_source.rb +1 -1
  26. data/lib/framework/version.rb +1 -1
  27. data/lib/rhodes.rb +1 -1
  28. data/platform/android/Rhodes/AndroidManifest.xml +2 -2
  29. data/platform/android/Rhodes/jni/include/rhodes/RhoClassFactory.h +1 -1
  30. data/platform/android/Rhodes/jni/src/RhoClassFactory.cpp +1 -1
  31. data/platform/android/Rhodes/jni/src/callbacks.cpp +9 -11
  32. data/platform/android/Rhodes/jni/src/event.cpp +17 -9
  33. data/platform/android/Rhodes/jni/src/mapview.cpp +34 -4
  34. data/platform/android/Rhodes/jni/src/rhodes.cpp +1 -1
  35. data/platform/android/Rhodes/res/drawable/esri.png +0 -0
  36. data/platform/android/Rhodes/src/com/rhomobile/rhodes/AndroidR.java +1 -0
  37. data/platform/android/Rhodes/src/com/rhomobile/rhodes/BaseActivity.java +3 -0
  38. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivity.java +8 -5
  39. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +80 -9
  40. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +29 -8
  41. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +4 -1
  42. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/TabbedMainView.java +50 -10
  43. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/MapView.java +3 -0
  44. data/platform/android/build/android.rake +45 -23
  45. data/platform/android/build/librhocommon_build.files +1 -0
  46. data/platform/bb/Hsqldb/src/com/rho/db/HsqlDBStorage.java +6 -1
  47. data/platform/bb/Hsqldb/src/org/hsqldb/CachedDataRow.java +1 -1
  48. data/platform/bb/Hsqldb/src/org/hsqldb/CachedRow.java +3 -2
  49. data/platform/bb/Hsqldb/src/org/hsqldb/Row.java +1 -1
  50. data/platform/bb/Hsqldb/src/org/hsqldb/persist/CachedObject.java +1 -1
  51. data/platform/bb/Hsqldb/src/org/hsqldb/persist/DataFileCache.java +66 -16
  52. data/platform/bb/Hsqldb/src/org/hsqldb/persist/HsqlDatabaseProperties.java +1 -1
  53. data/platform/bb/RubyVM/src/com/rho/RhoCrypto.java +116 -0
  54. data/platform/bb/RubyVM/src/com/rho/ThreadQueue.java +39 -2
  55. data/platform/bb/RubyVM/src/com/rho/Tokenizer.java +11 -6
  56. data/platform/bb/RubyVM/src/com/rho/db/DBAdapter.java +157 -150
  57. data/platform/bb/RubyVM/src/com/rho/db/IDBStorage.java +1 -1
  58. data/platform/bb/RubyVM/src/com/rho/file/RhoFile.java +15 -0
  59. data/platform/bb/RubyVM/src/com/rho/net/AsyncHttp.java +35 -23
  60. data/platform/bb/RubyVM/src/com/rho/net/NetRequest.java +6 -9
  61. data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +54 -16
  62. data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +18 -9
  63. data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +37 -59
  64. data/platform/bb/RubyVM/src/com/rho/sync/SyncThread.java +3 -0
  65. data/platform/bb/build/RubyVM_build.files +1 -0
  66. data/platform/bb/build/bb.rake +4 -5
  67. data/platform/bb/rhodes/platform/5.0/com/rho/RhodesApplicationPlatform.java +4 -1
  68. data/platform/bb/rhodes/platform/5.0/com/rho/db/SqliteStorage.java +8 -3
  69. data/platform/bb/rhodes/resources/esri.png +0 -0
  70. data/platform/bb/rhodes/src/com/rho/RhodesApplicationPlatform.java +2 -0
  71. data/platform/bb/rhodes/src/com/rho/db/SqliteStorage.java +8 -3
  72. data/platform/bb/rhodes/src/com/rho/rubyext/RhoCalendar.java +4 -1
  73. data/platform/bb/rhodes/src/com/rho/rubyext/System.java +2 -0
  74. data/platform/bb/rhodes/src/rhomobile/mapview/ESRIMapField.java +9 -0
  75. data/platform/iphone/Classes/Event/Event.m +12 -2
  76. data/platform/iphone/Classes/NativeBar.h +12 -11
  77. data/platform/iphone/Classes/NativeBar.m +13 -3
  78. data/platform/iphone/Classes/Rhodes.m +48 -10
  79. data/platform/iphone/Classes/SimpleMainView.h +1 -0
  80. data/platform/iphone/Classes/SimpleMainView.m +7 -1
  81. data/platform/iphone/Classes/SplitView/LeftViewController.m +3 -0
  82. data/platform/iphone/Classes/SplitView/RightViewController.m +11 -6
  83. data/platform/iphone/Classes/SplitView/SplittedMainView.m +8 -0
  84. data/platform/iphone/Classes/TabbedMainView.m +39 -3
  85. data/platform/iphone/Info.plist +1 -1
  86. data/platform/iphone/RhoLib/RhoLib.xcodeproj/project.pbxproj +4 -0
  87. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +3 -3
  88. data/platform/shared/SyncClient/SyncClient.cpp +23 -23
  89. data/platform/shared/common/IRhoClassFactory.h +6 -4
  90. data/platform/shared/common/RhoAppAdapter.h +1 -1
  91. data/platform/shared/common/RhoFile.cpp +10 -0
  92. data/platform/shared/common/RhoFile.h +1 -0
  93. data/platform/shared/common/RhoMutexLock.h +1 -1
  94. data/platform/shared/common/RhoStd.h +5 -0
  95. data/platform/shared/common/RhoThread.cpp +2 -2
  96. data/platform/shared/common/RhoThread.h +1 -2
  97. data/platform/shared/common/RhodesApp.cpp +33 -55
  98. data/platform/shared/common/RhodesApp.h +0 -5
  99. data/platform/shared/common/RhodesAppBase.cpp +1 -1
  100. data/platform/shared/common/SplashScreen.cpp +1 -2
  101. data/platform/shared/common/ThreadQueue.cpp +31 -4
  102. data/platform/shared/common/ThreadQueue.h +10 -3
  103. data/platform/shared/common/Tokenizer.cpp +12 -8
  104. data/platform/shared/common/iphone/RhoClassFactory.cpp +5 -8
  105. data/platform/shared/common/iphone/RhoClassfactory.h +1 -1
  106. data/platform/shared/common/map/ESRIMapEngine.cpp +17 -7
  107. data/platform/shared/common/map/ESRIMapEngine.h +11 -1
  108. data/platform/shared/common/map/GoogleMapEngine.cpp +3 -3
  109. data/platform/shared/common/map/GoogleMapEngine.h +2 -2
  110. data/platform/shared/common/map/MapEngine.cpp +37 -0
  111. data/platform/shared/common/map/MapEngine.h +5 -0
  112. data/platform/shared/db/DBAdapter.cpp +113 -81
  113. data/platform/shared/db/DBAdapter.h +21 -5
  114. data/platform/shared/db/DBAttrManager.cpp +2 -2
  115. data/platform/shared/db/DBResult.h +28 -0
  116. data/platform/shared/net/AsyncHttp.cpp +48 -48
  117. data/platform/shared/net/AsyncHttp.h +15 -12
  118. data/platform/shared/net/CURLNetRequest.cpp +27 -105
  119. data/platform/shared/net/CURLNetRequest.h +8 -15
  120. data/platform/shared/net/INetRequest.cpp +122 -0
  121. data/platform/shared/net/INetRequest.h +96 -23
  122. data/platform/shared/net/ssl.cpp +1 -1
  123. data/platform/shared/ruby/ext/calendar/calendar.i +2 -2
  124. data/platform/shared/ruby/ext/calendar/calendar_wrap.c +30 -3
  125. data/platform/shared/rubyext/GeoLocation.cpp +4 -5
  126. data/platform/shared/rubyext/GeoLocation.h +4 -4
  127. data/platform/shared/rubyext/RhoAppAdapter.cpp +1 -1
  128. data/platform/shared/rubyext/System.cpp +3 -0
  129. data/platform/shared/sync/ClientRegister.cpp +6 -9
  130. data/platform/shared/sync/ClientRegister.h +8 -6
  131. data/platform/shared/sync/SyncEngine.cpp +54 -30
  132. data/platform/shared/sync/SyncEngine.h +9 -11
  133. data/platform/shared/sync/SyncNotify.cpp +19 -14
  134. data/platform/shared/sync/SyncNotify.h +5 -12
  135. data/platform/shared/sync/SyncSource.cpp +53 -76
  136. data/platform/shared/sync/SyncSource.h +5 -4
  137. data/platform/shared/sync/SyncThread.cpp +5 -7
  138. data/platform/shared/sync/SyncThread.h +2 -2
  139. data/platform/wm/RhoLib/RhoLib.vcproj +43 -39
  140. data/platform/wm/build/wm.rake +19 -17
  141. data/platform/wm/rhodes/AppManager.cpp +4 -4
  142. data/platform/wm/rhodes/MainWindow.cpp +0 -1
  143. data/platform/wm/rhodes/MapView/MapViewManager.cpp +4 -0
  144. data/platform/wm/rhodes/Vibrate.cpp +2 -2
  145. data/platform/wm/rhodes/Vibrate.h +1 -1
  146. data/platform/wm/rhodes/rho/common/RhoClassFactory.cpp +7 -5
  147. data/platform/wm/rhodes/rho/common/RhoClassFactory.h +3 -3
  148. data/platform/wm/rhodes/rho/net/NetRequestImpl.cpp +24 -10
  149. data/platform/wm/rhodes/rho/net/NetRequestImpl.h +49 -25
  150. data/platform/wm/rhodes/rho/rubyext/calendar.cpp +16 -2
  151. data/platform/wm/rhodes/rhodes.vcproj +77 -85
  152. data/platform/wm/tools/detool/detool.cpp +16 -6
  153. data/rakefile.rb +9 -5
  154. data/res/build-tools/detool.exe +0 -0
  155. data/rhodes.gemspec +2 -2
  156. data/spec/phone_spec/app/spec/blobsync_spec.rb +1 -0
  157. data/spec/phone_spec/app/spec/events_spec.rb +13 -2
  158. data/spec/phone_spec/app/spec/mapview_spec.rb +2 -2
  159. data/spec/phone_spec/app/spec/nativebar_spec.rb +3 -3
  160. data/spec/phone_spec/app/spec/navbar_spec.rb +3 -3
  161. data/spec/phone_spec/app/spec/rho_spec.rb +1 -1
  162. data/spec/phone_spec/app/spec/rhom_object_spec.rb +1 -1
  163. data/spec/phone_spec/app/spec/syncengine_spec.rb +219 -0
  164. data/spec/phone_spec/build.yml +1 -0
  165. metadata +15 -8
  166. data/platform/wm/rhodes/rho/net/NetRequest.cpp +0 -89
  167. data/platform/wm/rhodes/rho/net/NetRequest.h +0 -45
@@ -23,7 +23,7 @@ static const int ERR_GEOLOCATION = 12;
23
23
 
24
24
  static String getMessageText(const char* szName);
25
25
  static String getErrorText(int nError);
26
- static int getErrorFromResponse(net::INetResponse& resp);
26
+ static int getErrorFromResponse(NetResponse& resp);
27
27
  static void loadServerSources(const String& strSources);
28
28
  static void loadAllSyncSources();
29
29
  static const char* getRhoDBVersion();
@@ -245,5 +245,15 @@ void CRhoFile::deleteFilesInFolder(const char* szFolderPath)
245
245
  }
246
246
  }
247
247
 
248
+ /*static*/ void CRhoFile::writeStringToFile( const char* szFilePath, String& strData )
249
+ {
250
+ common::CRhoFile oFile;
251
+ if ( oFile.open( szFilePath, common::CRhoFile::OpenForWrite) )
252
+ {
253
+ oFile.write(strData.c_str(), strData.length() );
254
+ oFile.close();
255
+ }
256
+ }
257
+
248
258
  }
249
259
  }
@@ -43,6 +43,7 @@ public:
43
43
  static void loadTextFile(const char* szFilePath, String& strFile);
44
44
  static void createFolder(const char* szDirPath);
45
45
  static void readStringFromFile( const char* szFilePath, String& strData );
46
+ static void writeStringToFile( const char* szFilePath, String& strData );
46
47
  private:
47
48
  CRhoFile(const CRhoFile&);
48
49
  void operator=(const CRhoFile&);
@@ -60,7 +60,7 @@ private:
60
60
  void operator=(const CMutexLock&);
61
61
  };
62
62
 
63
- #define synchronized(mutex) CMutexLock __lock(mutex);
63
+ #define synchronized(mutex) rho::common::CMutexLock __lock(mutex);
64
64
 
65
65
  class CLocalMutexLock {
66
66
  public:
@@ -196,6 +196,11 @@ public:
196
196
  {
197
197
  return VectorPtr<Type>::elementAt(i);
198
198
  }
199
+
200
+ void remove(int nItem)
201
+ {
202
+ VectorPtr<Type>::removeElementAt(nItem);
203
+ }
199
204
  };
200
205
 
201
206
  template<class TKEY, class TVALUE>
@@ -4,10 +4,10 @@
4
4
  namespace rho {
5
5
  namespace common {
6
6
 
7
- CRhoThread::CRhoThread(IRhoClassFactory* factory)
7
+ CRhoThread::CRhoThread()
8
8
  {
9
9
  m_nState = TS_NONE;
10
- m_pImpl = factory->createThreadImpl();
10
+ m_pImpl = rho_get_RhoClassFactory()->createThreadImpl();
11
11
  }
12
12
 
13
13
  void CRhoThread::start(EPriority ePriority)
@@ -7,7 +7,6 @@
7
7
  namespace rho {
8
8
  namespace common {
9
9
 
10
- struct IRhoClassFactory;
11
10
  class CRhoThread : public IRhoRunnable
12
11
  {
13
12
  CAutoPtr<IRhoThreadImpl> m_pImpl;
@@ -19,7 +18,7 @@ class CRhoThread : public IRhoRunnable
19
18
  int m_nState;
20
19
  public:
21
20
 
22
- CRhoThread(IRhoClassFactory* factory);
21
+ CRhoThread();
23
22
  virtual ~CRhoThread(void){};
24
23
 
25
24
  virtual void start(EPriority ePriority);
@@ -53,7 +53,7 @@ public:
53
53
  };
54
54
 
55
55
  public:
56
- CAppCallbacksQueue(IRhoClassFactory *factory);
56
+ CAppCallbacksQueue();
57
57
  ~CAppCallbacksQueue();
58
58
 
59
59
  //void call(callback_t type);
@@ -99,8 +99,8 @@ char const *CAppCallbacksQueue::toString(int type)
99
99
  }
100
100
  }
101
101
 
102
- CAppCallbacksQueue::CAppCallbacksQueue(IRhoClassFactory *factory)
103
- :CThreadQueue(factory), m_expected(local_server_started)
102
+ CAppCallbacksQueue::CAppCallbacksQueue()
103
+ :CThreadQueue(), m_expected(local_server_started)
104
104
  {
105
105
  CThreadQueue::setLogCategory(getLogCategory());
106
106
  //setPollInterval(1);
@@ -143,7 +143,7 @@ void CAppCallbacksQueue::processCommand(IQueueCommand* pCmd)
143
143
  if (cmd->type > m_expected)
144
144
  {
145
145
  boolean bDuplicate = false;
146
- for( int i = 0; i < m_commands.size() ; i++)
146
+ for( int i = 0; i < (int)m_commands.size() ; i++)
147
147
  {
148
148
  if ( m_commands.elementAt(i) == cmd->type )
149
149
  {
@@ -181,15 +181,13 @@ void CAppCallbacksQueue::processCommand(IQueueCommand* pCmd)
181
181
  break;
182
182
 
183
183
  case local_server_started:
184
- // Nothing
184
+ m_expected = ui_created;
185
185
  break;
186
186
  case ui_created:
187
187
  {
188
- common::CAutoPtr<common::IRhoClassFactory> factory = rho_impl_createClassFactory();
189
- common::CAutoPtr<net::INetRequest> pNetRequest = factory->createNetRequest();
190
188
  String strUrl = RHODESAPP().getBaseUrl();
191
189
  strUrl += "/system/uicreated";
192
- NetResponse(resp, pNetRequest->pullData( strUrl, null ) );
190
+ NetResponse resp = getNetRequest().pullData( strUrl, null );
193
191
  if ( !resp.isOK() )
194
192
  LOG(ERROR) + "activate app failed. Code: " + resp.getRespCode() + "; Error body: " + resp.getCharData();
195
193
 
@@ -198,19 +196,9 @@ void CAppCallbacksQueue::processCommand(IQueueCommand* pCmd)
198
196
  break;
199
197
  case app_activated:
200
198
  {
201
- /* static bool navigatedToStartUrl = false;
202
- if (!navigatedToStartUrl)
203
- {
204
- LOG(INFO) + "navigate to first start url";
205
- RHODESAPP().navigateToUrl(RHODESAPP().getFirstStartUrl());
206
- navigatedToStartUrl = true;
207
- }*/
208
-
209
- common::CAutoPtr<common::IRhoClassFactory> factory = rho_impl_createClassFactory();
210
- common::CAutoPtr<net::INetRequest> pNetRequest = factory->createNetRequest();
211
199
  String strUrl = RHODESAPP().getBaseUrl();
212
200
  strUrl += "/system/activateapp";
213
- NetResponse(resp, pNetRequest->pullData( strUrl, null ) );
201
+ NetResponse resp = getNetRequest().pullData( strUrl, null );
214
202
  if ( !resp.isOK() )
215
203
  LOG(ERROR) + "activate app failed. Code: " + resp.getRespCode() + "; Error body: " + resp.getCharData();
216
204
 
@@ -249,9 +237,7 @@ CRhodesApp::CRhodesApp(const String& strRootPath)
249
237
  m_bRestartServer = false;
250
238
  //m_activateCounter = 0;
251
239
 
252
- m_ptrFactory = rho_impl_createClassFactory();
253
- m_NetRequest = m_ptrFactory->createNetRequest();
254
- m_appCallbacksQueue = new CAppCallbacksQueue(rho_impl_createClassFactory());
240
+ m_appCallbacksQueue = new CAppCallbacksQueue();
255
241
 
256
242
  #if defined( OS_WINCE ) || defined (OS_WINDOWS)
257
243
  //initializing winsock
@@ -275,12 +261,12 @@ void CRhodesApp::run()
275
261
  {
276
262
  LOG(INFO) + "Starting RhodesApp main routine...";
277
263
  RhoRubyStart();
278
- rubyext::CGeoLocation::Create(m_ptrFactory);
264
+ rubyext::CGeoLocation::Create();
279
265
 
280
266
  rho_db_init_attr_manager();
281
267
 
282
268
  LOG(INFO) + "Starting sync engine...";
283
- sync::CSyncThread::Create(rho_impl_createClassFactory());
269
+ sync::CSyncThread::Create();
284
270
 
285
271
  LOG(INFO) + "RhoRubyInitApp...";
286
272
  RhoRubyInitApp();
@@ -345,7 +331,7 @@ class CRhoCallInThread : public common::CRhoThread
345
331
  {
346
332
  public:
347
333
  CRhoCallInThread(T* cb)
348
- :CRhoThread(rho_impl_createClassFactory()), m_cb(cb)
334
+ :CRhoThread(), m_cb(cb)
349
335
  {
350
336
  start(epNormal);
351
337
  }
@@ -369,23 +355,21 @@ void rho_rhodesapp_call_in_thread(T *cb)
369
355
 
370
356
  class CRhoCallbackCall
371
357
  {
372
- common::CAutoPtr<common::IRhoClassFactory> m_ptrFactory;
373
358
  String m_strCallback, m_strBody;
374
359
  public:
375
- CRhoCallbackCall(const String& strCallback, const String& strBody, common::IRhoClassFactory* factory)
376
- :m_ptrFactory(factory), m_strCallback(strCallback), m_strBody(strBody)
360
+ CRhoCallbackCall(const String& strCallback, const String& strBody)
361
+ : m_strCallback(strCallback), m_strBody(strBody)
377
362
  {}
378
363
 
379
364
  void run(common::CRhoThread &)
380
365
  {
381
- common::CAutoPtr<net::INetRequest> pNetRequest = m_ptrFactory->createNetRequest();
382
- common::CAutoPtr<net::INetResponse> presp = pNetRequest->pushData( m_strCallback, m_strBody, null );
366
+ getNetRequest().pushData( m_strCallback, m_strBody, null );
383
367
  }
384
368
  };
385
369
 
386
370
  void CRhodesApp::runCallbackInThread(const String& strCallback, const String& strBody)
387
371
  {
388
- rho_rhodesapp_call_in_thread(new CRhoCallbackCall(strCallback, strBody, rho_impl_createClassFactory() ) );
372
+ rho_rhodesapp_call_in_thread(new CRhoCallbackCall(strCallback, strBody ) );
389
373
  }
390
374
 
391
375
  static void callback_activateapp(void *arg, String const &strQuery)
@@ -443,7 +427,7 @@ void CRhodesApp::callUiCreatedCallback()
443
427
  void CRhodesApp::callUiDestroyedCallback()
444
428
  {
445
429
  String strUrl = m_strHomeUrl + "/system/uidestroyed";
446
- NetResponse(resp,getNet().pullData( strUrl, null ));
430
+ NetResponse resp = getNetRequest().pullData( strUrl, null );
447
431
  if ( !resp.isOK() )
448
432
  {
449
433
  LOG(ERROR) + "UI destroy callback failed. Code: " + resp.getRespCode() + "; Error body: " + resp.getCharData();
@@ -480,7 +464,7 @@ void CRhodesApp::callAppActiveCallback(boolean bActive)
480
464
  m_appCallbacksQueue->addQueueCommand(new CAppCallbacksQueue::Command(CAppCallbacksQueue::app_deactivated));
481
465
 
482
466
  String strUrl = m_strHomeUrl + "/system/deactivateapp";
483
- NetResponse(resp,getNet().pullData( strUrl, null ));
467
+ NetResponse resp = getNetRequest().pullData( strUrl, null );
484
468
  if ( !resp.isOK() )
485
469
  {
486
470
  LOG(ERROR) + "deactivate app failed. Code: " + resp.getRespCode() + "; Error body: " + resp.getCharData();
@@ -491,8 +475,10 @@ void CRhodesApp::callAppActiveCallback(boolean bActive)
491
475
 
492
476
  if (bStop)
493
477
  {
478
+ #if !defined( OS_WINCE ) && !defined (OS_WINDOWS)
494
479
  LOG(INFO) + "Stopping local server.";
495
480
  m_httpServer->stop();
481
+ #endif
496
482
  }
497
483
  }
498
484
 
@@ -515,7 +501,7 @@ void CRhodesApp::callCameraCallback(String strCallbackUrl, const String& strImag
515
501
  strBody = "status=ok&image_uri=db%2Fdb-files%2F" + strImagePath;
516
502
 
517
503
  strBody += "&rho_callback=1";
518
- NetRequest( getNet().pushData( strCallbackUrl, strBody, null ) );
504
+ getNetRequest().pushData( strCallbackUrl, strBody, null );
519
505
  }
520
506
 
521
507
  void CRhodesApp::callSignatureCallback(String strCallbackUrl, const String& strSignaturePath,
@@ -533,7 +519,7 @@ void CRhodesApp::callSignatureCallback(String strCallbackUrl, const String& strS
533
519
  strBody = "status=ok&signature_uri=db%2Fdb-files%2F" + strSignaturePath;
534
520
 
535
521
  strBody += "&rho_callback=1";
536
- NetRequest( getNet().pushData( strCallbackUrl, strBody, null ) );
522
+ getNetRequest().pushData( strCallbackUrl, strBody, null );
537
523
  }
538
524
 
539
525
  void CRhodesApp::callDateTimeCallback(String strCallbackUrl, long lDateTime, const char* szData, int bCancel )
@@ -552,14 +538,14 @@ void CRhodesApp::callDateTimeCallback(String strCallbackUrl, long lDateTime, con
552
538
  }
553
539
 
554
540
  strBody += "&rho_callback=1";
555
- NetRequest( getNet().pushData( strCallbackUrl, strBody, null ) );
541
+ getNetRequest().pushData( strCallbackUrl, strBody, null );
556
542
  }
557
543
 
558
544
  void CRhodesApp::callBluetoothCallback(String strCallbackUrl, const char* body) {
559
545
  strCallbackUrl = canonicalizeRhoUrl(strCallbackUrl);
560
546
  String strBody = body;
561
547
  strBody += "&rho_callback=1";
562
- NetRequest( getNet().pushData( strCallbackUrl, strBody, null ) );
548
+ getNetRequest().pushData( strCallbackUrl, strBody, null );
563
549
  }
564
550
 
565
551
  void CRhodesApp::callPopupCallback(String strCallbackUrl, const String &id, const String &title)
@@ -570,7 +556,7 @@ void CRhodesApp::callPopupCallback(String strCallbackUrl, const String &id, cons
570
556
  strCallbackUrl = canonicalizeRhoUrl(strCallbackUrl);
571
557
  String strBody = "button_id=" + id + "&button_title=" + title;
572
558
  strBody += "&rho_callback=1";
573
- NetRequest( getNet().pushData( strCallbackUrl, strBody, null ) );
559
+ getNetRequest().pushData( strCallbackUrl, strBody, null );
574
560
  }
575
561
 
576
562
  static void callback_syncdb(void *arg, String const &/*query*/ )
@@ -642,7 +628,7 @@ const String& CRhodesApp::getRhoMessage(int nError, const char* szName)
642
628
  strUrl += szName;
643
629
  }
644
630
 
645
- NetResponse(resp,getNet().pullData( strUrl, null ));
631
+ NetResponse resp = getNetRequest().pullData( strUrl, null );
646
632
  if ( !resp.isOK() )
647
633
  {
648
634
  LOG(ERROR) + "getRhoMessage failed. Code: " + resp.getRespCode() + "; Error body: " + resp.getCharData();
@@ -975,7 +961,7 @@ boolean CRhodesApp::sendLog()
975
961
 
976
962
  boolean bOldSaveToFile = LOGCONF().isLogToFile();
977
963
  LOGCONF().setLogToFile(false);
978
- NetResponse( resp, getNet().pushMultipartData( strQuery, oItem, &(rho::sync::CSyncThread::getSyncEngine()), null ) );
964
+ NetResponse resp = getNetRequest().pushMultipartData( strQuery, oItem, &(rho::sync::CSyncThread::getSyncEngine()), null );
979
965
  LOGCONF().setLogToFile(bOldSaveToFile);
980
966
 
981
967
  if ( !resp.isOK() )
@@ -1045,8 +1031,7 @@ boolean CRhodesApp::callPushCallback(String strData)
1045
1031
  if ( m_strPushCallbackParams.length() > 0 )
1046
1032
  strBody += "&" + m_strPushCallbackParams;
1047
1033
 
1048
- common::CAutoPtr<net::INetRequest> pNetRequest = m_ptrFactory->createNetRequest();
1049
- NetResponse(resp,pNetRequest->pushData( m_strPushCallback, strBody, null ));
1034
+ NetResponse resp = getNetRequest().pushData( m_strPushCallback, strBody, null );
1050
1035
  if (!resp.isOK())
1051
1036
  LOG(ERROR) + "Push notification failed. Code: " + resp.getRespCode() + "; Error body: " + resp.getCharData();
1052
1037
  else
@@ -1084,9 +1069,7 @@ void CRhodesApp::callScreenRotationCallback(int width, int height, int degrees)
1084
1069
  if ( m_strScreenRotationCallbackParams.length() > 0 )
1085
1070
  strBody += "&" + m_strPushCallbackParams;
1086
1071
 
1087
- common::CAutoPtr<net::INetRequest> pNetRequest = m_ptrFactory->createNetRequest();
1088
- NetResponse(resp, pNetRequest->pushData( m_strScreenRotationCallback, strBody, null));
1089
-
1072
+ NetResponse resp = getNetRequest().pushData( m_strScreenRotationCallback, strBody, null);
1090
1073
  if (!resp.isOK()) {
1091
1074
  LOG(ERROR) + "Screen rotation notification failed. Code: " + resp.getRespCode() + "; Error body: " + resp.getCharData();
1092
1075
  }
@@ -1128,9 +1111,7 @@ void CRhodesApp::loadUrl(String url)
1128
1111
  url = canonicalizeRhoUrl(url);
1129
1112
  if (callback)
1130
1113
  {
1131
- common::CAutoPtr<net::INetRequest> pNetRequest = m_ptrFactory->createNetRequest();
1132
- NetResponse(resp, pNetRequest->pushData( url, "rho_callback=1", null ));
1133
- (void)resp;
1114
+ getNetRequest().pushData( url, "rho_callback=1", null );
1134
1115
  }
1135
1116
  else
1136
1117
  navigateToUrl(url);
@@ -1388,15 +1369,12 @@ int rho_conf_send_log()
1388
1369
 
1389
1370
  void rho_net_request(const char *url)
1390
1371
  {
1391
- rho::common::CAutoPtr<rho::common::IRhoClassFactory> factory = rho_impl_createClassFactory();
1392
- rho::common::CAutoPtr<rho::net::INetRequest> request = factory->createNetRequest();
1393
- request->pullData(url, null);
1372
+ getNetRequest().pullData(url, null);
1394
1373
  }
1395
1374
 
1396
- void rho_net_request_with_data(const char *url, const char *str_body) {
1397
- rho::common::CAutoPtr<rho::common::IRhoClassFactory> factory = rho_impl_createClassFactory();
1398
- rho::common::CAutoPtr<rho::net::INetRequest> request = factory->createNetRequest();
1399
- request->pushData(url, str_body, null);
1375
+ void rho_net_request_with_data(const char *url, const char *str_body)
1376
+ {
1377
+ getNetRequest().pushData(url, str_body, null);
1400
1378
  }
1401
1379
 
1402
1380
  void rho_rhodesapp_load_url(const char *url)
@@ -28,9 +28,6 @@ private:
28
28
  CRhodesApp(const String& strRootPath);
29
29
  boolean m_bExit, m_bRestartServer;
30
30
 
31
- common::CAutoPtr<common::IRhoClassFactory> m_ptrFactory;
32
- common::CAutoPtr<net::INetRequest> m_NetRequest;
33
-
34
31
  String m_strListeningPorts;
35
32
 
36
33
  common::CAutoPtr<net::CHttpServer> m_httpServer;
@@ -132,8 +129,6 @@ protected:
132
129
 
133
130
  void initHttpServer();
134
131
  void initAppUrls();
135
-
136
- net::INetRequest& getNet(){ return *m_NetRequest; }
137
132
  };
138
133
 
139
134
  }
@@ -25,7 +25,7 @@ CRhodesAppBase* CRhodesAppBase::m_pInstance = 0;
25
25
  m_pInstance = 0;
26
26
  }
27
27
 
28
- CRhodesAppBase::CRhodesAppBase(const String& strRootPath) : CRhoThread(rho_impl_createClassFactory())
28
+ CRhodesAppBase::CRhodesAppBase(const String& strRootPath) : CRhoThread()
29
29
  {
30
30
  m_strRhoRootPath = strRootPath;
31
31
 
@@ -31,8 +31,7 @@ void CSplashScreen::hide()
31
31
  if ( nWaitMs <= 0 )
32
32
  return;
33
33
 
34
- CAutoPtr<IRhoClassFactory> ptrFactory = rho_impl_createClassFactory();
35
- CAutoPtr<IRhoThreadImpl> ptrThread = ptrFactory->createThreadImpl();
34
+ CAutoPtr<IRhoThreadImpl> ptrThread = rho_get_RhoClassFactory()->createThreadImpl();
36
35
 
37
36
  ptrThread->sleep(nWaitMs);
38
37
  }
@@ -5,12 +5,11 @@
5
5
  namespace rho {
6
6
  namespace common {
7
7
 
8
- CThreadQueue::CThreadQueue(common::IRhoClassFactory* factory) : CRhoThread(factory)
8
+ CThreadQueue::CThreadQueue() : CRhoThread()
9
9
  {
10
10
  m_nPollInterval = QUEUE_POLL_INTERVAL_SECONDS;
11
11
  m_bNoThreaded = false;
12
-
13
- m_ptrFactory = factory;
12
+ m_pCurCmd = null;
14
13
  }
15
14
 
16
15
  CThreadQueue::~CThreadQueue(void)
@@ -76,6 +75,34 @@ void CThreadQueue::addQueueCommandToFront(IQueueCommand* pCmd)
76
75
  stopWait();
77
76
  }
78
77
 
78
+ void CThreadQueue::stop(unsigned int nTimeoutToKill)
79
+ {
80
+ cancelCurrentCommand();
81
+ CRhoThread::stop(nTimeoutToKill);
82
+ }
83
+
84
+ void CThreadQueue::cancelCurrentCommand()
85
+ {
86
+ synchronized(m_mxStackCommands);
87
+ if ( m_pCurCmd != null )
88
+ m_pCurCmd->cancel();
89
+ }
90
+
91
+ void CThreadQueue::processCommandBase(IQueueCommand* pCmd)
92
+ {
93
+ {
94
+ synchronized(m_mxStackCommands);
95
+ m_pCurCmd = pCmd;
96
+ }
97
+
98
+ processCommand(pCmd);
99
+
100
+ {
101
+ synchronized(m_mxStackCommands);
102
+ m_pCurCmd = null;
103
+ }
104
+ }
105
+
79
106
  void CThreadQueue::run()
80
107
  {
81
108
  LOG(INFO) + "Starting main routine...";
@@ -130,7 +157,7 @@ void CThreadQueue::processCommands()//throws Exception
130
157
  pCmd = (IQueueCommand*)m_stackCommands.removeFirst();
131
158
  }
132
159
 
133
- processCommand(pCmd);
160
+ processCommandBase(pCmd);
134
161
  }
135
162
  }
136
163
 
@@ -25,24 +25,26 @@ public:
25
25
  virtual ~IQueueCommand(){};
26
26
  virtual boolean equals(const IQueueCommand& cmd) = 0;
27
27
  virtual String toString() = 0;
28
+ virtual void cancel(){}
28
29
  };
29
30
 
30
31
  private:
31
32
 
32
- common::CAutoPtr<common::IRhoClassFactory> m_ptrFactory;
33
33
  int m_nPollInterval;
34
34
  common::CMutex m_mxStackCommands;
35
35
  LinkedListPtr<IQueueCommand*> m_stackCommands;
36
+ IQueueCommand* m_pCurCmd;
36
37
 
37
38
  boolean m_bNoThreaded;
38
39
  public:
39
- CThreadQueue(common::IRhoClassFactory* factory);
40
+ CThreadQueue();
40
41
 
41
42
  ~CThreadQueue(void);
42
43
 
43
44
  virtual void addQueueCommand(IQueueCommand* pCmd);
44
45
  virtual void addQueueCommandToFront(IQueueCommand* pCmd);
45
46
  virtual void run();
47
+ virtual void stop(unsigned int nTimeoutToKill);
46
48
 
47
49
  void setPollInterval(int nInterval);
48
50
  int getPollInterval()const{ return m_nPollInterval;}
@@ -50,7 +52,11 @@ public:
50
52
  boolean isNoThreadedMode(){ return m_bNoThreaded; }
51
53
  void setNonThreadedMode(boolean b){m_bNoThreaded = b;}
52
54
 
53
- common::IRhoClassFactory* getFactory(){ return m_ptrFactory; }
55
+ void cancelCurrentCommand();
56
+ common::CMutex& getCommandLock(){ return m_mxStackCommands; }
57
+ IQueueCommand* getCurCommand(){ return m_pCurCmd; }
58
+ LinkedListPtr<IQueueCommand*>& getCommands(){ return m_stackCommands; }
59
+
54
60
  protected:
55
61
  virtual int getLastPollInterval(){ return 0;}
56
62
  virtual void processCommand(IQueueCommand* pCmd) = 0;
@@ -60,6 +66,7 @@ protected:
60
66
  boolean isAlreadyExist(IQueueCommand *pCmd);
61
67
 
62
68
  void processCommands();
69
+ void processCommandBase(IQueueCommand* pCmd);
63
70
 
64
71
  void addQueueCommandInt(IQueueCommand* pCmd);
65
72
  void addQueueCommandToFrontInt(IQueueCommand* pCmd);
@@ -12,32 +12,36 @@ CTokenizer::CTokenizer(String str,String delims) {
12
12
 
13
13
  String CTokenizer::nextToken()
14
14
  {
15
- eatDelimeters();
15
+ //eatDelimeters();
16
16
  int start = m_position;
17
17
  while (m_position<m_length && m_delims.find(m_str.at(m_position)) == String::npos ) {
18
18
  m_position++;
19
19
  }
20
-
21
- return m_str.substr(start,m_position-start);
20
+
21
+ String strToken = m_str.substr(start,m_position-start);
22
+ eatDelimeters();
23
+ return strToken;
22
24
  }
23
25
 
24
26
  void CTokenizer::eatDelimeters()
25
27
  {
26
- while (m_position<m_length) {
27
- char c = m_str.at(m_position);
28
+ if ( m_position == m_length )
29
+ m_position++;
30
+ else if (m_position<m_length)
31
+ {
32
+ char c = m_str.at(m_position);
28
33
  if (m_delims.find(c) != String::npos ) {
29
34
  m_position++;
30
35
  } else {
31
36
  return;
32
37
  }
33
-
34
38
  }
35
39
  }
36
40
 
37
41
  boolean CTokenizer::hasMoreTokens()
38
42
  {
39
- eatDelimeters();
40
- return (m_position < m_length);
43
+ //eatDelimeters();
44
+ return (m_position <= m_length);
41
45
  }
42
46
 
43
47
  }
@@ -2,20 +2,17 @@
2
2
  #include "sync/SyncThread.h"
3
3
  #include "sync/ClientRegister.h"
4
4
 
5
- namespace rho{
6
- namespace common{
7
- IRhoClassFactory* rho_impl_createClassFactory()
8
- {
9
- return new rho::common::CRhoClassFactory;
10
- }
11
- }
5
+ static rho::common::CRhoClassFactory g_oRhoClassFactory;
6
+ rho::common::IRhoClassFactory* rho_get_RhoClassFactory()
7
+ {
8
+ return &g_oRhoClassFactory;
12
9
  }
13
10
 
14
11
  extern "C" {
15
12
 
16
13
  void rho_clientregister_create(const char* szDevicePin)
17
14
  {
18
- rho::sync::CClientRegister::Create(new rho::common::CRhoClassFactory, szDevicePin);
15
+ rho::sync::CClientRegister::Create(szDevicePin);
19
16
  }
20
17
 
21
18
  };
@@ -12,7 +12,7 @@ namespace common {
12
12
  class CRhoClassFactory : public common::IRhoClassFactory
13
13
  {
14
14
  public:
15
- net::INetRequest* createNetRequest()
15
+ net::INetRequestImpl* createNetRequestImpl()
16
16
  {
17
17
  return new net::CURLNetRequest();
18
18
  }
@@ -11,8 +11,7 @@
11
11
  //1. move classes to files, raname namespace to rho::map
12
12
  //2. image cache: remove only unvisible images
13
13
  //3. see TODO inside
14
- //4. when stop thread - cancel current net request. Add cancelCurrentCommand to ThreadQueue and call it from stop
15
- //5. move all platform code to appropriate folders
14
+ //4. move all platform code to appropriate folders
16
15
 
17
16
  #ifdef min
18
17
  #undef min
@@ -176,8 +175,7 @@ void ESRIMapView::Tile::swap(ESRIMapView::Tile &tile)
176
175
 
177
176
  IMPLEMENT_LOGCLASS(ESRIMapView::MapFetch,"MapFetch");
178
177
  ESRIMapView::MapFetch::MapFetch(ESRIMapView *view)
179
- :CThreadQueue(rho_impl_createClassFactory()),
180
- m_mapview(view), m_net_request(getFactory()->createNetRequest())
178
+ :CThreadQueue(), m_mapview(view)
181
179
  {
182
180
  CThreadQueue::setLogCategory(getLogCategory());
183
181
 
@@ -198,7 +196,7 @@ void ESRIMapView::MapFetch::fetchTile(String const &baseUrl, int zoom, uint64 la
198
196
  bool ESRIMapView::MapFetch::fetchData(String const &url, void **data, size_t *datasize)
199
197
  {
200
198
  RHO_MAP_TRACE1("fetchData: url=%s", url.c_str());
201
- NetResponse(resp, m_net_request->doRequest("GET", url, "", 0, 0));
199
+ NetResponse resp = getNet().doRequest("GET", url, "", 0, 0);
202
200
  if (!resp.isOK())
203
201
  return false;
204
202
  *datasize = resp.getDataSize();
@@ -260,7 +258,7 @@ String ESRIMapView::MapFetch::Command::toString()
260
258
 
261
259
  IMPLEMENT_LOGCLASS(ESRIMapView::CacheUpdate,"CacheUpdate");
262
260
  ESRIMapView::CacheUpdate::CacheUpdate(ESRIMapView *view)
263
- :CThreadQueue(rho_impl_createClassFactory()), m_mapview(view)
261
+ :CThreadQueue(), m_mapview(view)
264
262
  {
265
263
  CThreadQueue::setLogCategory(getLogCategory());
266
264
  start(epNormal);
@@ -434,7 +432,7 @@ ESRIMapView::ESRIMapView(IDrawingDevice *device)
434
432
  m_zoom_enabled(true), m_scroll_enabled(true), m_maptype("roadmap"),
435
433
  m_zoom(MIN_ZOOM), m_latitude(degreesToPixelsY(0, MAX_ZOOM)), m_longitude(degreesToPixelsX(0, MAX_ZOOM)),
436
434
  m_selected_annotation_index(-1),
437
- m_pinCallout(0), m_pinCalloutLink(0), m_pin(0)
435
+ m_pinCallout(0), m_pinCalloutLink(0), m_pin(0), m_esriLogo(0)
438
436
  {
439
437
  String url = RHOCONF().getString("esri_map_url_roadmap");
440
438
  if (url.empty())
@@ -669,6 +667,11 @@ void ESRIMapView::setPinImage(IDrawingImage *pin, PIN_INFO pin_info)
669
667
  m_pin_info = pin_info;
670
668
  }
671
669
 
670
+ void ESRIMapView::setESRILogoImage(IDrawingImage *esriLogoImg) {
671
+ m_esriLogo = esriLogoImg;
672
+ }
673
+
674
+
672
675
  void ESRIMapView::setPinCalloutImage(IDrawingImage *pinCallout, PIN_INFO pin_callout_info)
673
676
  {
674
677
  m_pinCallout = pinCallout;
@@ -733,6 +736,13 @@ void ESRIMapView::paint(IDrawingContext *context)
733
736
  paintCallout(context, m_annotations.elementAt(m_selected_annotation_index));
734
737
  }
735
738
 
739
+ // draw esri logo
740
+ if (m_esriLogo != 0) {
741
+ int left = 0;
742
+ int top = m_height - m_esriLogo->height();
743
+ context->drawImage(left, top, m_esriLogo);
744
+ }
745
+
736
746
  /*
737
747
  TilesCache::list cache;
738
748
  {