rhodes 2.1.0 → 2.2.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
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