rhodes 2.1.0 → 2.2.0.beta.1

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 (241) hide show
  1. data/CHANGELOG +7 -0
  2. data/README.textile +4 -5
  3. data/Rakefile +8 -1
  4. data/lib/build/jake.rb +22 -16
  5. data/lib/extensions/rhoxml/rexml/cdata.rb +67 -0
  6. data/lib/extensions/rhoxml/rexml/document.rb +2 -116
  7. data/lib/extensions/rhoxml/rexml/element.rb +1 -1
  8. data/lib/extensions/rhoxml/rexml/text.rb +117 -0
  9. data/lib/framework/rho/render.rb +19 -11
  10. data/lib/framework/rho/rho.rb +17 -10
  11. data/lib/framework/rho/rhobluetooth.rb +103 -0
  12. data/lib/framework/rho/rhocontroller.rb +2 -0
  13. data/lib/framework/rho/rhoevent.rb +43 -0
  14. data/lib/framework/rho/rhoevent_bb.rb +80 -0
  15. data/lib/framework/rho/rhoevent_c.rb +47 -0
  16. data/lib/framework/rhodes.rb +2 -2
  17. data/lib/framework/rhom/rhom_db_adapter.rb +2 -1
  18. data/lib/framework/rhom/rhom_model.rb +9 -3
  19. data/lib/framework/rhom/rhom_object_factory.rb +46 -22
  20. data/lib/framework/rhom/rhom_source.rb +12 -10
  21. data/lib/framework/version.rb +2 -2
  22. data/lib/rhodes.rb +2 -2
  23. data/platform/android/Rhodes/AndroidManifest.xml +23 -2
  24. data/platform/android/Rhodes/gen/com/rhomobile/rhodes/R.java +54 -38
  25. data/platform/android/Rhodes/jni/include/rhodes.h +3 -0
  26. data/platform/android/Rhodes/jni/include/rhodes/JNIRhodes.h +2 -2
  27. data/platform/android/Rhodes/jni/include/rhodes/details/rhojava.inc +4 -0
  28. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesService.h +16 -0
  29. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_bluetooth_RhoBluetoothManager.h +21 -0
  30. data/platform/android/Rhodes/jni/src/bluetooth.cpp +169 -0
  31. data/platform/android/Rhodes/jni/src/callbacks.cpp +10 -0
  32. data/platform/android/Rhodes/jni/src/event.cpp +429 -0
  33. data/platform/android/Rhodes/jni/src/fileapi.cpp +51 -1
  34. data/platform/android/Rhodes/jni/src/rhodes.cpp +16 -0
  35. data/platform/android/Rhodes/jni/src/sslimpl.cpp +3 -0
  36. data/platform/android/Rhodes/res/layout/bt_device_list.xml +42 -0
  37. data/platform/android/Rhodes/res/layout/bt_device_name.xml +7 -0
  38. data/platform/android/Rhodes/res/values/strings.xml +8 -0
  39. data/platform/android/Rhodes/src/com/rhomobile/rhodes/AndroidR.java +14 -0
  40. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Capabilities.java +2 -0
  41. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Push.java +7 -0
  42. data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushReceiver.java +58 -0
  43. data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushService.java +53 -0
  44. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +8 -0
  45. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +144 -3
  46. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/IRhoBluetoothManager.java +66 -0
  47. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothDeviceListActivity.java +201 -0
  48. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManager.java +139 -0
  49. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManagerNew.java +401 -0
  50. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManagerOld.java +136 -0
  51. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothSession.java +457 -0
  52. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/UUIDHelper.java +71 -0
  53. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java +12 -7
  54. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/Event.java +19 -0
  55. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +261 -0
  56. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +4 -2
  57. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/TabbedMainView.java +2 -2
  58. data/platform/android/Rhodes/src/com/rhomobile/rhodes/uri/MailUriHandler.java +10 -2
  59. data/platform/android/build/RhodesSRC_build.files +33 -22
  60. data/platform/android/build/android.rake +198 -27
  61. data/platform/android/build/librhodes_build.files +3 -1
  62. data/platform/android/build/libruby_build.files +4 -1
  63. data/platform/bb/Hsqldb/src/com/rho/db/HsqlDBResult.java +2 -2
  64. data/platform/bb/Hsqldb/src/com/rho/db/HsqlDBRowResult.java +1 -1
  65. data/platform/bb/Hsqldb/src/org/hsqldb/Expression.java +7 -4
  66. data/platform/bb/Hsqldb/src/org/hsqldb/Like.java +3 -3
  67. data/platform/bb/Hsqldb/src/org/hsqldb/Table.java +3 -1
  68. data/platform/bb/Hsqldb/src/org/hsqldb/Tokenizer.java +1 -1
  69. data/platform/bb/RubyVM/RubyVM.jdp +1 -0
  70. data/platform/bb/RubyVM/src/com/rho/RhoConf.java +108 -1
  71. data/platform/bb/RubyVM/src/com/rho/RhoLogConf.java +7 -1
  72. data/platform/bb/RubyVM/src/com/rho/RhoRuby.java +7 -4
  73. data/platform/bb/RubyVM/src/com/rho/ThreadQueue.java +7 -1
  74. data/platform/bb/RubyVM/src/com/rho/net/AsyncHttp.java +1 -1
  75. data/platform/bb/RubyVM/src/com/rho/net/NetRequest.java +21 -23
  76. data/platform/bb/RubyVM/src/com/rho/net/RhoConnection.java +19 -10
  77. data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +8 -0
  78. data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +3 -0
  79. data/platform/bb/RubyVM/src/com/rho/sync/SyncThread.java +14 -17
  80. data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyFile.java +7 -5
  81. data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RhoSupport.java +2 -0
  82. data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RubyRuntime.java +10 -1
  83. data/platform/bb/RubyVM/src/j2me/io/File.java +7 -6
  84. data/platform/bb/build/RubyVM_build.files +412 -412
  85. data/platform/bb/build/bb.rake +42 -18
  86. data/platform/bb/build/hsqldb_build.files +151 -151
  87. data/platform/bb/build/rhodes_build.files +44 -40
  88. data/platform/bb/rhodes/platform/5.0/com/rho/BrowserAdapter5.java +2 -0
  89. data/platform/bb/rhodes/platform/5.0/com/rho/RhodesApplicationPlatform.java +237 -0
  90. data/platform/bb/rhodes/platform/common/com/rho/RhodesApplicationPlatform.java +14 -0
  91. data/platform/bb/rhodes/rhodes.jdp +6 -1
  92. data/platform/bb/rhodes/src/com/rho/RhoRubyHelper.java +7 -1
  93. data/platform/bb/rhodes/src/com/rho/RhodesApplicationPlatform.java +14 -0
  94. data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +62 -76
  95. data/platform/bb/rhodes/src/com/rho/rubyext/RhoCalendar.java +660 -0
  96. data/platform/bb/rhodes/src/{rhomobile → com/rho/rubyext}/RhoPhonebook.java +95 -38
  97. data/platform/bb/rhodes/src/com/rho/rubyext/System.java +22 -1
  98. data/platform/bb/rhodes/src/rhomobile/PushListeningThread.java +26 -6
  99. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +21 -7
  100. data/platform/bb/rhodes/src/rhomobile/bluetooth/BluetoothManager.java +528 -0
  101. data/platform/bb/rhodes/src/rhomobile/bluetooth/BluetoothPort.java +281 -0
  102. data/platform/bb/rhodes/src/rhomobile/bluetooth/BluetoothScreen.java +119 -0
  103. data/platform/bb/rhodes/src/rhomobile/camera/CameraFilesListener.java +2 -2
  104. data/platform/iphone/Classes/AppManager/AppManager.m +70 -7
  105. data/platform/iphone/Classes/Bluetooth/Bluetooth.h +72 -0
  106. data/platform/iphone/Classes/Bluetooth/Bluetooth.m +414 -0
  107. data/platform/iphone/Classes/Event/Event.h +12 -0
  108. data/platform/iphone/Classes/Event/Event.m +300 -0
  109. data/platform/iphone/Classes/LogOptionsController.h +2 -1
  110. data/platform/iphone/Classes/LogOptionsController.m +1 -1
  111. data/platform/iphone/Classes/LogViewController.h +2 -1
  112. data/platform/iphone/Classes/MapView/MapViewController.h +2 -1
  113. data/platform/iphone/Classes/RhoViewController.h +16 -0
  114. data/platform/iphone/Classes/RhoViewController.m +20 -0
  115. data/platform/iphone/Classes/Rhodes.h +12 -0
  116. data/platform/iphone/Classes/Rhodes.m +34 -6
  117. data/platform/iphone/Classes/Signature/SignatureViewController.h +2 -2
  118. data/platform/iphone/Classes/Signature/SignatureViewController.m +0 -10
  119. data/platform/iphone/Classes/SimpleMainView.h +2 -2
  120. data/platform/iphone/Classes/SimpleMainView.m +5 -14
  121. data/platform/iphone/Classes/SplashViewController.h +2 -2
  122. data/platform/iphone/Classes/TabbedMainView.h +2 -2
  123. data/platform/iphone/Classes/TabbedMainView.m +5 -10
  124. data/platform/iphone/Info.plist +5 -5
  125. data/platform/iphone/rhorubylib/rhorubylib.xcodeproj/project.pbxproj +39 -0
  126. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +47 -4
  127. data/platform/osx/Rhodes Debugger/NoodleLineNumberView.m +3 -2
  128. data/platform/shared/common/AutoPointer.h +3 -0
  129. data/platform/shared/common/RhoConf.cpp +2 -1
  130. data/platform/shared/common/RhoThread.h +1 -1
  131. data/platform/shared/common/RhoTime.h +3 -3
  132. data/platform/shared/common/RhodesApp.cpp +75 -23
  133. data/platform/shared/common/RhodesApp.h +4 -0
  134. data/platform/shared/common/RhodesAppBase.h +2 -0
  135. data/platform/shared/common/ThreadQueue.cpp +23 -18
  136. data/platform/shared/common/ThreadQueue.h +2 -0
  137. data/platform/shared/db/res/db/syncdb.schema +39 -39
  138. data/platform/shared/logging/RhoLogConf.cpp +58 -3
  139. data/platform/shared/logging/RhoLogConf.h +3 -1
  140. data/platform/shared/net/CURLNetRequest.cpp +17 -6
  141. data/platform/shared/net/HttpServer.cpp +125 -25
  142. data/platform/shared/net/HttpServer.h +4 -3
  143. data/platform/shared/ruby/ext/bluetooth/bluetooth.i +56 -0
  144. data/platform/shared/ruby/ext/bluetooth/bluetooth_wrap.c +2563 -0
  145. data/platform/shared/ruby/ext/calendar/calendar.i +28 -0
  146. data/platform/shared/ruby/ext/calendar/calendar_wrap.c +2251 -0
  147. data/platform/shared/ruby/ext/calendar/event.h +41 -0
  148. data/platform/shared/ruby/ext/calendar/event.i +28 -0
  149. data/platform/shared/ruby/ext/calendar/event_wrap.c +2151 -0
  150. data/platform/shared/ruby/ext/rho/rhoruby.c +103 -3
  151. data/platform/shared/ruby/ext/rho/rhoruby.h +16 -2
  152. data/platform/shared/ruby/ext/rhoconf/rhoconf.i +12 -0
  153. data/platform/shared/ruby/ext/rhoconf/rhoconf_wrap.c +101 -0
  154. data/platform/shared/ruby/ext/system/system.i +14 -0
  155. data/platform/shared/ruby/ext/system/system_wrap.c +2568 -2208
  156. data/platform/shared/ruby/main.c +8 -0
  157. data/platform/shared/rubyext/GeoLocation.cpp +6 -3
  158. data/platform/shared/rubyext/System.cpp +14 -0
  159. data/platform/shared/sync/SyncEngine.cpp +9 -1
  160. data/platform/shared/sync/SyncNotify.cpp +16 -8
  161. data/platform/shared/sync/SyncNotify.h +1 -0
  162. data/platform/shared/sync/SyncThread.cpp +7 -12
  163. data/platform/shared/sync/SyncThread.h +5 -3
  164. data/platform/wm/build/wm.rake +7 -1
  165. data/platform/wm/rhodes/Alert.cpp +1 -1
  166. data/platform/wm/rhodes/MainWindow.cpp +28 -0
  167. data/platform/wm/rhodes/MainWindow.h +9 -0
  168. data/platform/wm/rhodes/OutlookApp.cpp +72 -0
  169. data/platform/wm/rhodes/OutlookApp.h +22 -0
  170. data/platform/wm/rhodes/Rhodes.cpp +8 -0
  171. data/platform/wm/rhodes/Rhodes.rc +31 -0
  172. data/platform/wm/rhodes/bluetooth/Bluetooth.cpp +1274 -0
  173. data/platform/wm/rhodes/bluetooth/Bluetooth.h +321 -0
  174. data/platform/wm/rhodes/phonebook/NativeAddressBook.cpp +37 -70
  175. data/platform/wm/rhodes/phonebook/NativeAddressBook.h +0 -4
  176. data/platform/wm/rhodes/resource.h +8 -1
  177. data/platform/wm/rhodes/rho/net/NetRequest.cpp +4 -0
  178. data/platform/wm/rhodes/rho/net/NetRequestImpl.cpp +6 -4
  179. data/platform/wm/rhodes/rho/rubyext/calendar.cpp +487 -0
  180. data/platform/wm/rhodes/rhodes.vcproj +28 -11
  181. data/platform/wm/rhodes/stdafx.h +1 -0
  182. data/platform/wm/rubylib/rubylib.vcproj +32 -0
  183. data/rakefile.rb +8 -1
  184. data/res/generators/templates/application/Rakefile +1 -1
  185. data/res/generators/templates/application/app/layout.erb +4 -1
  186. data/res/generators/templates/application/build.yml +0 -1
  187. data/res/generators/templates/application/public/css/iphone.css +2 -2
  188. data/res/generators/templates/application/public/jqtouch/jqtouch-iphone.css +9 -0
  189. data/res/generators/templates/application/public/jqtouch/jqtouch.css +1 -5
  190. data/res/generators/templates/application/public/jqtouch/jqtouch.js +3 -2
  191. data/rhodes.gemspec +1 -1
  192. data/spec/perfomance_spec/app/Benchmark/benchmark.rb +4 -0
  193. data/spec/perfomance_spec/app/Benchmark/bulk_results.erb +13 -0
  194. data/spec/perfomance_spec/app/Benchmark/controller.rb +178 -0
  195. data/spec/perfomance_spec/app/Benchmark/create_results.erb +13 -0
  196. data/spec/perfomance_spec/app/Benchmark/customers.erb +35 -0
  197. data/spec/perfomance_spec/app/Benchmark/index.erb +9 -0
  198. data/spec/perfomance_spec/app/Benchmark/products.erb +25 -0
  199. data/spec/perfomance_spec/app/Benchmark/search_results.erb +13 -0
  200. data/spec/perfomance_spec/app/Customer/customer.rb +6 -0
  201. data/spec/perfomance_spec/app/Perftest/index.erb +5 -0
  202. data/spec/perfomance_spec/app/Product/index.erb +25 -0
  203. data/spec/perfomance_spec/app/Product/product.rb +6 -0
  204. data/spec/perfomance_spec/app/helpers/application_helper.rb +126 -0
  205. data/spec/perfomance_spec/app/helpers/browser_helper.rb +18 -0
  206. data/spec/perfomance_spec/rhoconfig.txt +1 -1
  207. data/spec/phone_spec/app/Account_s/account_s.rb +5 -2
  208. data/spec/phone_spec/app/Case/case.rb +1 -0
  209. data/spec/phone_spec/app/Case_s/case_s.rb +2 -0
  210. data/spec/phone_spec/app/Data/perftest.json +35 -0
  211. data/spec/phone_spec/app/Data/testCDATA.xml +11 -0
  212. data/spec/phone_spec/app/Product/product.rb +1 -1
  213. data/spec/phone_spec/app/{Spec → spec}/asynchttp_spec.rb +66 -17
  214. data/spec/phone_spec/app/{Spec → spec}/barcode_spec.rb +0 -0
  215. data/spec/phone_spec/app/{Spec → spec}/blobsync_spec.rb +0 -0
  216. data/spec/phone_spec/app/{Spec → spec}/bsearch_spec.rb +0 -0
  217. data/spec/phone_spec/app/{Spec → spec}/bulksync_spec.rb +0 -0
  218. data/spec/phone_spec/app/{Spec → spec}/contacts_spec.rb +0 -0
  219. data/spec/phone_spec/app/{Spec → spec}/crypt_spec.rb +0 -0
  220. data/spec/phone_spec/app/{Spec → spec}/date_spec.rb +0 -0
  221. data/spec/phone_spec/app/spec/events_spec.rb +199 -0
  222. data/spec/phone_spec/app/{Spec → spec}/fixtures/client_info.txt +0 -0
  223. data/spec/phone_spec/app/{Spec → spec}/fixtures/object_values.txt +0 -0
  224. data/spec/phone_spec/app/{Spec → spec}/json_spec.rb +11 -2
  225. data/spec/phone_spec/app/{Spec → spec}/mapview_spec.rb +0 -0
  226. data/spec/phone_spec/app/{Spec → spec}/nativebar_spec.rb +0 -0
  227. data/spec/phone_spec/app/{Spec → spec}/navbar_spec.rb +0 -0
  228. data/spec/phone_spec/app/{Spec → spec}/pagination/fixtures/object_values.txt +0 -0
  229. data/spec/phone_spec/app/{Spec → spec}/rho_controller_spec.rb +5 -0
  230. data/spec/phone_spec/app/{Spec → spec}/rho_spec.rb +48 -0
  231. data/spec/phone_spec/app/{Spec → spec}/rhofile_spec.rb +9 -6
  232. data/spec/phone_spec/app/{Spec → spec}/rhom_object_spec.rb +188 -9
  233. data/spec/phone_spec/app/{Spec → spec}/syncengine_spec.rb +0 -0
  234. data/spec/phone_spec/app/{Spec → spec}/xml_spec.rb +15 -0
  235. data/spec/phone_spec/app/{Spec → spec}/xruby_spec.rb +0 -0
  236. data/spec/phone_spec/app/spec_runner.rb +4 -1
  237. data/spec/phone_spec/build.yml +2 -1
  238. metadata +95 -31
  239. data/platform/bb/rhodes/platform/5.0/com/rho/RhoMainScreen.java +0 -36
  240. data/platform/bb/rhodes/platform/6.0/com/rho/BrowserAdapter5.java +0 -155
  241. data/platform/bb/rhodes/platform/6.0/com/rho/RhoMainScreen.java +0 -36
@@ -197,7 +197,8 @@
197
197
 
198
198
  view = [self clientView];
199
199
  visibleRect = [[[self scrollView] contentView] bounds];
200
-
200
+ visibleRect.origin.y -= 235;
201
+
201
202
  lines = [self lineIndices];
202
203
 
203
204
  location += NSMinY(visibleRect);
@@ -403,7 +404,7 @@
403
404
 
404
405
  yinset = [view textContainerInset].height;
405
406
  visibleRect = [[[self scrollView] contentView] bounds];
406
-
407
+ visibleRect.origin.y -= 235;
407
408
  textAttributes = [self textAttributes];
408
409
 
409
410
  lines = [self lineIndices];
@@ -51,6 +51,9 @@ public:
51
51
  CAutoPtr( const CAutoPtr& orig){ *this = orig; }
52
52
  CAutoPtr& operator=( const CAutoPtr& orig)
53
53
  {
54
+ if ( CBaseAutoPointer<PTRTYPE>::m_ptr )
55
+ FreePtr();
56
+
54
57
  CBaseAutoPointer<PTRTYPE>::m_ptr = orig.m_ptr;
55
58
  const_cast<CAutoPtr&>(orig).m_ptr = 0;
56
59
  return *this;
@@ -210,7 +210,8 @@ int rho_conf_is_property_exists(const char* name)
210
210
  }
211
211
 
212
212
  void rho_conf_freeString(char* str) {
213
- free(str);
213
+ if ( str )
214
+ free(str);
214
215
  }
215
216
 
216
217
  void rho_conf_setString(const char* szName, const char* value){
@@ -25,7 +25,7 @@ public:
25
25
  virtual void start(EPriority ePriority);
26
26
  virtual void stop(unsigned int nTimeoutToKill){ m_nState |= TS_STOPPING; if (m_nState&TS_RUNNING) m_pImpl->stop(nTimeoutToKill); m_nState &= ~TS_STOPPING; }
27
27
  virtual void wait(unsigned int nTimeout){ m_nState |= TS_WAIT; if ((m_nState&TS_RUNNING) && !(m_nState&TS_STOPPING) ) m_pImpl->wait(nTimeout); m_nState &= ~TS_WAIT; }
28
- virtual void stopWait(){ if (isWaiting()) m_pImpl->stopWait(); }
28
+ virtual void stopWait(){ /*if (isWaiting())*/ m_pImpl->stopWait(); }
29
29
  virtual void sleep(unsigned int nTimeout){ m_pImpl->sleep(nTimeout); }
30
30
  virtual void run() = 0;
31
31
  virtual void runObject()
@@ -47,14 +47,14 @@ public:
47
47
  locTime = localtime(&tv.tv_sec);
48
48
 
49
49
  if (inFileFormat)
50
- nSize = sprintf(timeBuf, "%02d%02d%04d%02d%02d%02d%03d", locTime->tm_mon, locTime->tm_mday, locTime->tm_year + 1900,
50
+ nSize = sprintf(timeBuf, "%02d%02d%04d%02d%02d%02d%03d", locTime->tm_mon+1, locTime->tm_mday, locTime->tm_year + 1900,
51
51
  locTime->tm_hour, locTime->tm_min, locTime->tm_sec, (int)tv.tv_usec/1000 );
52
52
  else
53
- nSize = sprintf(timeBuf, "%02d/%02d/%04d %02d:%02d:%02d:%03d", locTime->tm_mon, locTime->tm_mday, locTime->tm_year + 1900,
53
+ nSize = sprintf(timeBuf, "%02d/%02d/%04d %02d:%02d:%02d:%03d", locTime->tm_mon+1, locTime->tm_mday, locTime->tm_year + 1900,
54
54
  locTime->tm_hour, locTime->tm_min, locTime->tm_sec, (int)tv.tv_usec/1000 );
55
55
  #else
56
56
  SYSTEMTIME st;
57
- GetSystemTime( &st );
57
+ GetLocalTime( &st );
58
58
 
59
59
  if (inFileFormat)
60
60
  nSize = sprintf(timeBuf, "%02d%02d%04d%02d%02d%02d%03d", st.wMonth, st.wDay, st.wYear,
@@ -56,6 +56,7 @@ CRhodesApp::CRhodesApp(const String& strRootPath) : CRhodesAppBase(strRootPath)
56
56
  {
57
57
  m_bExit = false;
58
58
  m_bDeactivationMode = false;
59
+ m_activateCounter = 0;
59
60
 
60
61
  m_ptrFactory = rho_impl_createClassFactory();
61
62
  m_NetRequest = m_ptrFactory->createNetRequest();
@@ -92,16 +93,13 @@ void CRhodesApp::run()
92
93
  LOG(INFO) + "RhoRubyInitApp...";
93
94
  RhoRubyInitApp();
94
95
 
95
- //LOG(INFO) + "activate app";
96
- //rho_ruby_activateApp();
97
-
98
- getSplashScreen().hide();
99
96
 
97
+ //rho_clientregister_create("iphone_client");
98
+ #if defined( OS_WINCE ) || defined( OS_WINDOWS )
100
99
  LOG(INFO) + "navigate to first start url";
101
- navigateToUrl(getFirstStartUrl());
100
+ RHODESAPP().navigateToUrl(RHODESAPP().getFirstStartUrl());
101
+ #endif
102
102
 
103
- //rho_clientregister_create("iphone_client");
104
-
105
103
  while (!m_bExit) {
106
104
  m_httpServer->run();
107
105
  if (m_bExit)
@@ -217,6 +215,16 @@ public:
217
215
  {
218
216
  while (!rho_is_local_server_started())
219
217
  thisThread.wait(1);
218
+
219
+ static bool navigated = false;
220
+ if (!navigated)
221
+ {
222
+ LOG(INFO) + "navigate to first start url";
223
+ RHODESAPP().navigateToUrl(RHODESAPP().getFirstStartUrl());
224
+ navigated = true;
225
+ }
226
+ // RHODESAPP().getSplashScreen().hide();
227
+
220
228
  common::CAutoPtr<common::IRhoClassFactory> factory = rho_impl_createClassFactory();
221
229
  common::CAutoPtr<net::INetRequest> pNetRequest = factory->createNetRequest();
222
230
  NetResponse(resp, pNetRequest->pullData( m_strUrl, null ) );
@@ -228,9 +236,12 @@ public:
228
236
  void CRhodesApp::callAppActiveCallback(boolean bActive)
229
237
  {
230
238
  LOG(INFO) + "callAppActiveCallback";
239
+ int stop = !rho_conf_getBool("dont_stop_local_server_in_background");
231
240
  if (bActive)
232
241
  {
233
- this->stopWait();
242
+ if (stop)
243
+ if (m_activateCounter++ > 0)
244
+ this->stopWait();
234
245
 
235
246
  String strUrl = m_strHomeUrl + "/system/activateapp";
236
247
  // Activation callback need to be runned in separate thread
@@ -252,7 +263,8 @@ void CRhodesApp::callAppActiveCallback(boolean bActive)
252
263
  NetResponse(resp,getNet().pullData( strUrl, null ));
253
264
  if ( !resp.isOK() )
254
265
  LOG(ERROR) + "deactivate app failed. Code: " + resp.getRespCode() + "; Error body: " + resp.getCharData();
255
- m_httpServer->stop();
266
+ if (stop)
267
+ m_httpServer->stop();
256
268
  m_bDeactivationMode = false;
257
269
  }
258
270
  }
@@ -312,6 +324,13 @@ void CRhodesApp::callDateTimeCallback(String strCallbackUrl, long lDateTime, con
312
324
  NetRequest( getNet().pushData( strCallbackUrl, strBody, null ) );
313
325
  }
314
326
 
327
+ void CRhodesApp::callBluetoothCallback(String strCallbackUrl, const char* body) {
328
+ strCallbackUrl = canonicalizeRhoUrl(strCallbackUrl);
329
+ String strBody = body;
330
+ strBody += "&rho_callback=1";
331
+ NetRequest( getNet().pushData( strCallbackUrl, strBody, null ) );
332
+ }
333
+
315
334
  void CRhodesApp::callPopupCallback(String strCallbackUrl, const String &id, const String &title)
316
335
  {
317
336
  if ( strCallbackUrl.length() == 0 )
@@ -338,8 +357,8 @@ static void callback_redirect_to(void *arg, String const &strQuery )
338
357
 
339
358
  if ( strUrl.length() == 0 )
340
359
  strUrl = "/app/";
341
-
342
- rho_http_redirect(arg, strUrl.c_str());
360
+
361
+ rho_http_redirect(arg, (rho::net::URI::urlDecode(strUrl)).c_str());
343
362
  }
344
363
 
345
364
  static void callback_map(void *arg, String const &query )
@@ -447,29 +466,42 @@ const char* CRhodesApp::getFreeListeningPort()
447
466
 
448
467
  if (noerrors)
449
468
  {
469
+ int listenPort = rho_conf_getInt("local_server_port");
470
+ if (listenPort < 0)
471
+ listenPort = 0;
472
+ if (listenPort > 65535)
473
+ listenPort = 0;
450
474
  memset((void *) &serv_addr, 0, sizeof(serv_addr));
451
475
  #if defined(OS_MACOSX)
452
476
  serv_addr.sin_len = sizeof(serv_addr);
453
477
  #endif
454
478
  serv_addr.sin_family = AF_INET;
455
479
  serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
456
- serv_addr.sin_port = htons(8080);
480
+ serv_addr.sin_port = htons((short)listenPort);
457
481
 
458
- LOG(INFO) + "Trying to bind on 8080 port...";
482
+ LOG(INFO) + "Trying to bind of " + listenPort + " port...";
459
483
 
460
484
  if ( bind( sockfd, (struct sockaddr *) &serv_addr, sizeof( serv_addr ) ) != 0 )
461
485
  {
462
- // Fill serv_addr again but with dynamically selected port
486
+ if (listenPort != 0)
487
+ {
488
+ // Fill serv_addr again but with dynamically selected port
463
489
  #if defined(OS_MACOSX)
464
- serv_addr.sin_len = sizeof(serv_addr);
490
+ serv_addr.sin_len = sizeof(serv_addr);
465
491
  #endif
466
- serv_addr.sin_family = AF_INET;
467
- serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
468
- serv_addr.sin_port = htons(0);
469
-
470
- LOG(INFO) + "Trying to bind on dynamic port...";
492
+ serv_addr.sin_family = AF_INET;
493
+ serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
494
+ serv_addr.sin_port = htons(0);
495
+
496
+ LOG(INFO) + "Trying to bind on dynamic port...";
471
497
 
472
- if ( bind( sockfd, (struct sockaddr *) &serv_addr, sizeof( serv_addr ) ) != 0 )
498
+ if ( bind( sockfd, (struct sockaddr *) &serv_addr, sizeof( serv_addr ) ) != 0 )
499
+ {
500
+ LOG(WARNING) + "Unable to bind";
501
+ noerrors = 0;
502
+ }
503
+ }
504
+ else
473
505
  {
474
506
  LOG(WARNING) + "Unable to bind";
475
507
  noerrors = 0;
@@ -515,8 +547,12 @@ void CRhodesApp::initAppUrls()
515
547
  {
516
548
  CRhodesAppBase::initAppUrls();
517
549
  m_currentTabIndex = 0;
518
-
550
+
551
+ #if defined( OS_WINCE ) || defined( OS_WINDOWS )
519
552
  m_strHomeUrl = "http://localhost:";
553
+ #else
554
+ m_strHomeUrl = "http://127.0.0.1:";
555
+ #endif
520
556
  m_strHomeUrl += getFreeListeningPort();
521
557
 
522
558
  m_strLoadingPagePath = "file://" + getRhoRootPath() + "apps/app/loading.html";
@@ -615,7 +651,7 @@ const String& CRhodesApp::getRhobundleReloadUrl()
615
651
 
616
652
  void CRhodesApp::navigateToUrl( const String& strUrl)
617
653
  {
618
- rho_webview_navigate(strUrl.c_str(), 0);
654
+ rho_webview_navigate(strUrl.c_str(), -1);
619
655
  }
620
656
 
621
657
  void CRhodesApp::navigateBack()
@@ -976,6 +1012,10 @@ void rho_rhodesapp_callDateTimeCallback(const char* strCallbackUrl, long lDateTi
976
1012
  RHODESAPP().callDateTimeCallback(strCallbackUrl, lDateTime, szData, bCancel != 0);
977
1013
  }
978
1014
 
1015
+ void rho_rhodesapp_callBluetoothCallback(const char* strCallbackUrl, const char* body) {
1016
+ RHODESAPP().callBluetoothCallback(strCallbackUrl, body);
1017
+ }
1018
+
979
1019
  void rho_rhodesapp_callPopupCallback(const char *strCallbackUrl, const char *id, const char *title)
980
1020
  {
981
1021
  RHODESAPP().callPopupCallback(strCallbackUrl, id, title);
@@ -1110,6 +1150,13 @@ void rho_net_request(const char *url)
1110
1150
  request->pullData(url, null);
1111
1151
  }
1112
1152
 
1153
+ void rho_net_request_with_data(const char *url, const char *str_body) {
1154
+ rho::common::CAutoPtr<rho::common::IRhoClassFactory> factory = rho_impl_createClassFactory();
1155
+ rho::common::CAutoPtr<rho::net::INetRequest> request = factory->createNetRequest();
1156
+ request->pushData(url, str_body, null);
1157
+ }
1158
+
1159
+
1113
1160
  void rho_rhodesapp_load_url(const char *url)
1114
1161
  {
1115
1162
  RHODESAPP().loadUrl(url);
@@ -1148,4 +1195,9 @@ unsigned long long rho_cur_time()
1148
1195
  }
1149
1196
  #endif
1150
1197
 
1198
+ void rho_free_callbackdata(void* pData)
1199
+ {
1200
+ //It is used in SyncClient.
1201
+ }
1202
+
1151
1203
  } //extern "C"
@@ -52,6 +52,7 @@ private:
52
52
  String m_strScreenRotationCallback, m_strScreenRotationCallbackParams;
53
53
 
54
54
  boolean m_bDeactivationMode;
55
+ int m_activateCounter;
55
56
 
56
57
  public:
57
58
  ~CRhodesApp(void);
@@ -84,6 +85,7 @@ public:
84
85
  void callCameraCallback(String strCallbackUrl, const String& strImagePath, const String& strError, boolean bCancel );
85
86
  void callSignatureCallback(String strCallbackUrl, const String& strSignaturePath, const String& strError, boolean bCancel );
86
87
  void callDateTimeCallback(String strCallbackUrl, long lDateTime, const char* szData, int bCancel );
88
+ void callBluetoothCallback(String strCallbackUrl, const char* body);
87
89
  void callAppActiveCallback(boolean bActive);
88
90
  void callPopupCallback(String strCallbackUrl, const String &id, const String &title);
89
91
 
@@ -160,6 +162,7 @@ void rho_rhodesapp_callCameraCallback(const char* strCallbackUrl, const char* st
160
162
  void rho_rhodesapp_callSignatureCallback(const char* strCallbackUrl, const char* strSignaturePath,
161
163
  const char* strError, int bCancel );
162
164
  void rho_rhodesapp_callDateTimeCallback(const char* strCallbackUrl, long lDateTime, const char* szData, int bCancel );
165
+ void rho_rhodesapp_callBluetoothCallback(const char* strCallbackUrl, const char* body);
163
166
  void rho_rhodesapp_callAppActiveCallback(int nActive);
164
167
  unsigned long rho_rhodesapp_GetCallbackObject(int nIndex);
165
168
 
@@ -177,6 +180,7 @@ int rho_base64_encode(const char *src, int srclen, char *dst);
177
180
  int rho_base64_decode(const char *src, int srclen, char *dst);
178
181
 
179
182
  void rho_net_request(const char *url);
183
+ void rho_net_request_with_data(const char *url, const char *str_body);
180
184
 
181
185
  void rho_rhodesapp_load_url(const char *url);
182
186
 
@@ -59,6 +59,8 @@ const char* rho_native_rhopath();
59
59
  const char* rho_rhodesapp_getplatform();
60
60
  int rho_unzip_file(const char* szZipPath);
61
61
 
62
+ void rho_free_callbackdata(void* pData);
63
+
62
64
  #ifdef __cplusplus
63
65
  };
64
66
  #endif //__cplusplus
@@ -15,28 +15,33 @@ CThreadQueue::~CThreadQueue(void)
15
15
  {
16
16
  }
17
17
 
18
+ void CThreadQueue::addQueueCommandInt(IQueueCommand* pCmd)
19
+ {
20
+ synchronized(m_mxStackCommands);
21
+
22
+ boolean bExist = false;
23
+ if ( isSkipDuplicateCmd() )
24
+ {
25
+ for ( int i = 0; i < (int)m_stackCommands.size(); i++ )
26
+ {
27
+ if ( m_stackCommands.get(i)->equals(*pCmd) )
28
+ {
29
+ bExist = true;
30
+ break;
31
+ }
32
+ }
33
+ }
34
+
35
+ if ( !bExist )
36
+ m_stackCommands.add(pCmd);
37
+
38
+ }
39
+
18
40
  void CThreadQueue::addQueueCommand(IQueueCommand* pCmd)
19
41
  {
20
42
  LOG(INFO) + "addCommand: " + pCmd->toString();
21
- {
22
- synchronized(m_mxStackCommands);
23
43
 
24
- boolean bExist = false;
25
- if ( isSkipDuplicateCmd() )
26
- {
27
- for ( int i = 0; i < (int)m_stackCommands.size(); i++ )
28
- {
29
- if ( m_stackCommands.get(i)->equals(*pCmd) )
30
- {
31
- bExist = true;
32
- break;
33
- }
34
- }
35
- }
36
-
37
- if ( !bExist )
38
- m_stackCommands.add(pCmd);
39
- }
44
+ addQueueCommandInt(pCmd);
40
45
 
41
46
  if ( isNoThreadedMode() )
42
47
  processCommands();
@@ -57,6 +57,8 @@ protected:
57
57
 
58
58
  virtual void processCommands();
59
59
 
60
+ void addQueueCommandInt(IQueueCommand* pCmd);
61
+
60
62
  boolean isNoCommands();
61
63
  };
62
64
 
@@ -1,44 +1,44 @@
1
1
  CREATE TABLE client_info (
2
- client_id VARCHAR(255) default NULL,
3
- session VARCHAR(255) default NULL,
4
- token VARCHAR(255) default NULL,
5
- token_sent BIGINT default 0,
6
- reset BIGINT default 0,
7
- port VARCHAR(10) default NULL,
8
- last_sync_success VARCHAR(100) default NULL);
2
+ "client_id" VARCHAR(255) default NULL,
3
+ "session" VARCHAR(255) default NULL,
4
+ "token" VARCHAR(255) default NULL,
5
+ "token_sent" BIGINT default 0,
6
+ "reset" BIGINT default 0,
7
+ "port" VARCHAR(10) default NULL,
8
+ "last_sync_success" VARCHAR(100) default NULL);
9
9
  CREATE TABLE object_values (
10
- source_id BIGINT default NULL,
11
- attrib varchar(255) default NULL,
12
- object varchar(255) default NULL,
13
- value varchar default NULL);
10
+ "source_id" BIGINT default NULL,
11
+ "attrib" varchar(255) default NULL,
12
+ "object" varchar(255) default NULL,
13
+ "value" varchar default NULL);
14
14
  CREATE TABLE changed_values (
15
- source_id BIGINT default NULL,
16
- attrib varchar(255) default NULL,
17
- object varchar(255) default NULL,
18
- value varchar default NULL,
19
- attrib_type varchar(255) default NULL,
20
- update_type varchar(255) default NULL,
21
- sent BIGINT default 0);
15
+ "source_id" BIGINT default NULL,
16
+ "attrib" varchar(255) default NULL,
17
+ "object" varchar(255) default NULL,
18
+ "value" varchar default NULL,
19
+ "attrib_type" varchar(255) default NULL,
20
+ "update_type" varchar(255) default NULL,
21
+ "sent" BIGINT default 0);
22
22
  CREATE TABLE sources (
23
- source_id BIGINT PRIMARY KEY,
24
- name VARCHAR(255) default NULL,
25
- token BIGINT default NULL,
26
- sync_priority BIGINT,
27
- partition VARCHAR(255),
28
- sync_type VARCHAR(255),
29
- metadata varchar default NULL,
30
- last_updated BIGINT default 0,
31
- last_inserted_size BIGINT default 0,
32
- last_deleted_size BIGINT default 0,
33
- last_sync_duration BIGINT default 0,
34
- last_sync_success BIGINT default 0,
35
- backend_refresh_time BIGINT default 0,
36
- source_attribs varchar default NULL,
37
- schema varchar default NULL,
38
- schema_version varchar default NULL,
39
- associations varchar default NULL,
40
- blob_attribs varchar default NULL);
41
- CREATE INDEX by_src_id on object_values (source_id);
42
- CREATE UNIQUE INDEX by_src_object ON object_values (object, attrib, source_id);
43
- CREATE INDEX by_src_value ON object_values (attrib, source_id, value);
23
+ "source_id" BIGINT PRIMARY KEY,
24
+ "name" VARCHAR(255) default NULL,
25
+ "token" BIGINT default NULL,
26
+ "sync_priority" BIGINT,
27
+ "partition" VARCHAR(255),
28
+ "sync_type" VARCHAR(255),
29
+ "metadata" varchar default NULL,
30
+ "last_updated" BIGINT default 0,
31
+ "last_inserted_size" BIGINT default 0,
32
+ "last_deleted_size" BIGINT default 0,
33
+ "last_sync_duration" BIGINT default 0,
34
+ "last_sync_success" BIGINT default 0,
35
+ "backend_refresh_time" BIGINT default 0,
36
+ "source_attribs" varchar default NULL,
37
+ "schema" varchar default NULL,
38
+ "schema_version" varchar default NULL,
39
+ "associations" varchar default NULL,
40
+ "blob_attribs" varchar default NULL);
41
+ CREATE INDEX by_src_id on object_values ("source_id");
42
+ CREATE UNIQUE INDEX by_src_object ON object_values ("object", "attrib", "source_id");
43
+ CREATE INDEX by_src_value ON object_values ("attrib", "source_id", "value");
44
44