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
@@ -0,0 +1,321 @@
1
+
2
+ #pragma once
3
+
4
+ #include <windows.h>
5
+
6
+ #ifndef OS_WINDOWS
7
+
8
+
9
+ #include <winsock2.h>
10
+ #include <ws2bth.h>
11
+ #include <bthapi.h>
12
+ #include <bthutil.h>
13
+
14
+
15
+ #define MAX_NAME_SIZE 1024
16
+ #define MAX_ADDR_SIZE 32
17
+ #define MAX_MESSAGE_SIZE 256
18
+
19
+ #ifndef ARRAYSIZE
20
+ #define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
21
+ #endif
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+ #define RHO_BT_OK "OK"
35
+ #define RHO_BT_CANCEL "CANCEL"
36
+ #define RHO_BT_ERROR "ERROR"
37
+
38
+ #define RHO_BT_ROLE_SERVER "ROLE_SERVER"
39
+ #define RHO_BT_ROLE_CLIENT "ROLE_CLIENT"
40
+
41
+ #define RHO_BT_SESSION_INPUT_DATA_RECEIVED "SESSION_INPUT_DATA_RECEIVED"
42
+ #define RHO_BT_SESSION_DISCONNECT "SESSION_DISCONNECT"
43
+
44
+ #define RHO_DISCOVER_TIME_MS 5000
45
+ #define RHO_DISCOVERED_TIME_MS 5000
46
+ #define SerialPortConnectGUID L"00001101-0000-1000-8000-00805F9B34FB"
47
+
48
+ class RhoBluetoothManager;
49
+
50
+
51
+ // CRhoBluetoothDiscoverDlg dialog
52
+ class CRhoBluetoothDiscoverDlg : public //CDialog
53
+ #if defined(OS_WINDOWS)
54
+ COkCancelModalDialog<CRhoBluetoothDiscoverDlg>
55
+ #else
56
+ CDialogImpl <CRhoBluetoothDiscoverDlg>
57
+ #endif
58
+ {
59
+ public:
60
+ CRhoBluetoothDiscoverDlg ();
61
+ ~CRhoBluetoothDiscoverDlg ();
62
+
63
+ enum { IDD = IDD_BLUETOOTH_DISCOVER };
64
+
65
+ BEGIN_MSG_MAP(CRhoBluetoothDiscoverDlg)
66
+ MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
67
+ COMMAND_ID_HANDLER(IDOK, OnOK)
68
+ COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
69
+ END_MSG_MAP()
70
+
71
+ public:
72
+ LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
73
+ LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
74
+ LRESULT OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
75
+
76
+ int mSelectedDevice;
77
+ };
78
+
79
+
80
+
81
+ // CRhoBluetoothDiscoveredDlg dialog
82
+ class CRhoBluetoothDiscoveredDlg : public //CDialog
83
+ #if defined(OS_WINDOWS)
84
+ COkCancelModalDialog<CRhoBluetoothDiscoveredDlg>
85
+ #else
86
+ CDialogImpl <CRhoBluetoothDiscoveredDlg>
87
+ #endif
88
+ {
89
+ public:
90
+ CRhoBluetoothDiscoveredDlg ();
91
+ ~CRhoBluetoothDiscoveredDlg ();
92
+
93
+ enum { IDD = IDD_BLUETOOTH_DISCOVERED };
94
+
95
+ BEGIN_MSG_MAP(CRhoBluetoothDiscoveredDlg)
96
+ MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
97
+ COMMAND_ID_HANDLER(IDOK, OnOK)
98
+ COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
99
+ END_MSG_MAP()
100
+
101
+ public:
102
+ LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
103
+ LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
104
+ LRESULT OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
105
+ };
106
+
107
+
108
+
109
+ struct RhoDeviceList
110
+ {
111
+ BT_ADDR bthAddress;
112
+ TCHAR bthName[40];
113
+ RhoDeviceList *NextDevice;
114
+ };
115
+
116
+ struct RhoDeviceInfo
117
+ {
118
+ WCHAR szDeviceNameAddr[MAX_NAME_SIZE];
119
+
120
+ };
121
+
122
+ struct RhoDataBlock {
123
+ RhoDataBlock() {
124
+ buf = NULL;
125
+ size = 0;
126
+ next = NULL;
127
+ }
128
+ void* buf;
129
+ int size;
130
+ RhoDataBlock* next;
131
+ };
132
+
133
+
134
+ class RhoDiscoverDlg {
135
+ public:
136
+ RhoDiscoverDlg();
137
+ virtual ~RhoDiscoverDlg();
138
+
139
+ void openDialog(RhoBluetoothManager* btManager);
140
+ void updateDeviceListFromManager();
141
+
142
+ private:
143
+ RhoBluetoothManager* mBtManager;
144
+ CRhoBluetoothDiscoverDlg dlg;
145
+ HCURSOR hCurs;
146
+ int mShowCursor;
147
+ };
148
+
149
+ class RhoDiscoveredDlg {
150
+ public:
151
+ RhoDiscoveredDlg();
152
+ virtual ~RhoDiscoveredDlg();
153
+
154
+ void openDialog(RhoBluetoothManager* btManager);
155
+ void closeDialog();
156
+
157
+ private:
158
+ RhoBluetoothManager* mBtManager;
159
+ CRhoBluetoothDiscoveredDlg dlg;
160
+ HCURSOR hCurs;
161
+ int mShowCursor;
162
+ };
163
+
164
+
165
+
166
+ DWORD WINAPI runThreadDiscoverDevices(LPVOID data);
167
+
168
+ class RhoBluetoothManager {
169
+ // public API :
170
+ public :
171
+ // Ruby API
172
+ int rho_bluetooth_is_bluetooth_available();
173
+ void rho_bluetooth_off_bluetooth();
174
+ void rho_bluetooth_set_device_name(const char* device_name);
175
+ const char* rho_bluetooth_get_device_name();
176
+ const char* rho_bluetooth_get_last_error();
177
+ const char* rho_bluetooth_create_session(const char* role, const char* callback_url);
178
+ void rho_bluetooth_session_set_callback(const char* connected_device_name, const char* callback_url);
179
+ void rho_bluetooth_session_disconnect(const char* connected_device_name);
180
+ int rho_bluetooth_session_get_status(const char* connected_device_name);
181
+ const char* rho_bluetooth_session_read_string(const char* connected_device_name);
182
+ void rho_bluetooth_session_write_data(const char* connected_device_name, void* buf, int datasize);
183
+
184
+ // access API
185
+ static RhoBluetoothManager* getInstance();
186
+ static void releaseAll();
187
+
188
+ RhoDiscoverDlg* getDiscoverDlg() {return &mDiscoverDlg;}
189
+ RhoDiscoveredDlg* getDiscoveredDlg() {return &mDiscoveredDlg;}
190
+
191
+ public:
192
+ RhoBluetoothManager();
193
+ virtual ~RhoBluetoothManager();
194
+
195
+ int DiscoverDevices();
196
+ int GetNumDevices(){return m_iNumDevices;};
197
+ int GetDeviceInfo(RhoDeviceInfo *pPeerDevicesInfo);
198
+ int GetLocalDeviceName(RhoDeviceInfo *pLocalDeviceInfo);
199
+ int GetDeviceInfo(RhoDeviceInfo *pPeerDeviceInfo, int iSelectedItem);
200
+ int GetGUID(WCHAR *psz, GUID *pGUID) ;
201
+
202
+
203
+
204
+ void fireCreateSessionCallBack(const char* status, const char* connected_device_name);
205
+
206
+ void onDiscoverDlgSelectDevice(int index);
207
+ void onDiscoverDlgCancel();
208
+ void onDiscoveredDlgCancel();
209
+ void onServerConnectionCreated();
210
+
211
+ RhoDiscoverDlg mDiscoverDlg;
212
+ RhoDiscoveredDlg mDiscoveredDlg;
213
+
214
+ void addDataBlock(RhoDataBlock* block);
215
+ void* readAllBlocks(int* size, int additional_space);
216
+ int getBlocksSummarySize();
217
+
218
+ void terminateDiscoverThread();
219
+ void terminateDiscoveredThread();
220
+
221
+ private:
222
+
223
+ void fireRhodeCallback(const char* callback_url, const char* body);
224
+ void fireSessionCallBack(const char* connected_device_name, const char* event_type);
225
+
226
+ void init();
227
+ void freeAll();
228
+ void freeAllBlocks();
229
+ int getBlocksSummarySizeFromBlock(RhoDataBlock* block);
230
+
231
+ int RegisterService(BYTE *rgbSdpRecord, int cSdpRecord, int iChannelOffset, UCHAR channel);
232
+
233
+ int makeConnection(BT_ADDR bt_addr);
234
+
235
+ RhoDeviceList *m_pDeviceList, *m_pStart, *m_pEnd, *m_pCurrentDevice;
236
+
237
+ int m_iNumDevices;
238
+ HANDLE m_hReadThread; // thread with read from socket, infinity
239
+ HANDLE m_hDiscoverThred; // thread with find BT devices,
240
+ HANDLE m_hDiscoveredThread; // thread with discovered this device and read data
241
+ SOCKET m_socketServer;
242
+ SOCKET m_socketClient;
243
+ DWORD m_dwBluetoothMode;
244
+ SOCKADDR_BTH m_saClient;
245
+
246
+ bool mIsBluetoothEnabled;
247
+
248
+ char mConnectedDeviceName[MAX_NAME_SIZE];
249
+ char mLocalDeviceName[MAX_NAME_SIZE];
250
+
251
+ char mCreateSessionCallback[MAX_NAME_SIZE];
252
+ char mSessionCallback[MAX_NAME_SIZE];
253
+
254
+ RhoDataBlock* mFirstDataBlock;
255
+ RhoDataBlock* mLastDataBlock;
256
+
257
+ char* mReadedString;
258
+
259
+ static DWORD WINAPI runThreadReadData(LPVOID voidArg);
260
+ static DWORD WINAPI runThreadDiscovered(LPVOID data);
261
+
262
+ };
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+ #endif // OS_WINDOWS
294
+
295
+ extern "C" int rho_bluetooth_is_bluetooth_available();
296
+
297
+ extern "C" void rho_bluetooth_off_bluetooth();
298
+
299
+ extern "C" void rho_bluetooth_set_device_name(const char* device_name);
300
+
301
+ extern "C" const char* rho_bluetooth_get_device_name();
302
+
303
+ extern "C" const char* rho_bluetooth_get_last_error();
304
+
305
+ extern "C" const char* rho_bluetooth_create_session(const char* role, const char* callback_url);
306
+
307
+ extern "C" void rho_bluetooth_session_set_callback(const char* connected_device_name, const char* callback_url);
308
+
309
+ extern "C" void rho_bluetooth_session_disconnect(const char* connected_device_name);
310
+
311
+ extern "C" int rho_bluetooth_session_get_status(const char* connected_device_name);
312
+
313
+ extern "C" const char* rho_bluetooth_session_read_string(const char* connected_device_name);
314
+
315
+ extern "C" void rho_bluetooth_session_write_string(const char* connected_device_name, const char* str);
316
+
317
+ extern "C" VALUE rho_bluetooth_session_read_data(const char* connected_device_name);
318
+
319
+ extern "C" void rho_bluetooth_session_write_data(const char* connected_device_name, VALUE data);
320
+
321
+
@@ -2,6 +2,7 @@
2
2
 
3
3
  #include "ext/phonebook/phonebook.h"
4
4
  #include "NativeAddressBook.h"
5
+ #include "OutlookApp.h"
5
6
  #include <common/RhoStd.h>
6
7
 
7
8
  #define INITGUID
@@ -184,20 +185,26 @@ int CABOutlookRecord::remove() {
184
185
  //=============================================================================
185
186
 
186
187
  CNativeAddressBook::CNativeAddressBook() :
187
- m_openedOutlookAB(false), m_outlookApp(NULL), m_outlookItems(NULL), m_hSim(0) {
188
+ m_outlookItems(NULL), m_hSim(0)
189
+ {
188
190
  }
189
191
 
190
- CNativeAddressBook::~CNativeAddressBook() {
191
- if (m_openedOutlookAB)
192
- closeOutlookAB();
192
+ CNativeAddressBook::~CNativeAddressBook()
193
+ {
194
+ if(m_outlookItems) {
195
+ m_outlookItems->Release();
196
+ }
193
197
 
194
198
  if (m_hSim)
195
199
  closeSimAB();
196
200
  }
197
201
 
198
- int CNativeAddressBook::openAB() {
202
+ int CNativeAddressBook::openAB()
203
+ {
199
204
  initSimAB();
200
- return initOutlookAB();
205
+
206
+ COutlookApp* pApp = COutlookApp::Create();
207
+ return pApp->getApp() != 0;
201
208
  }
202
209
 
203
210
  int CNativeAddressBook::getAllRecords(std::vector<CABRecord*>& records) {
@@ -231,66 +238,14 @@ int CNativeAddressBook::deleteRecord(CABRecord* record) {
231
238
 
232
239
  //=============================================================================
233
240
 
234
- int CNativeAddressBook::initOutlookAB() {
235
- m_openedOutlookAB = false;
236
-
237
- HRESULT hr = CoInitializeEx( NULL, 0);
238
- // subsequent valid calls return S_FALSE
239
- /*if (hr != S_OK) {
240
- // CoInitializeEx failed.
241
- LOG(ERROR) + "CoInitializeEx failed.";
242
- return false; // Replace with specific error handling.;
243
- }*/
244
-
245
- IUnknown* pUnknown = NULL;
246
- hr = CoCreateInstance(__uuidof(Application),//CLSID_Application,
247
- NULL, CLSCTX_INPROC_SERVER,
248
- IID_IUnknown,
249
- (void **)&pUnknown);
250
- if (hr != S_OK) {
251
- // CoCreateInstance failed.
252
- LOG(ERROR) + "CoCreateInstance failed.";
253
- CoUninitialize();
254
- return false; // Replace with specific error handling.;
255
- }
256
-
257
- hr = pUnknown->QueryInterface(__uuidof(IPOutlookApp)/*IID_IPOutlookApp*/, (void**)&m_outlookApp);
258
- if (hr != S_OK) {
259
- // QueryInterface failed.
260
- LOG(ERROR) + "QueryInterface failed.";
261
- CoUninitialize();
262
- return false; // Replace with specific error handling.;
263
- }
264
-
265
- hr = m_outlookApp->Logon(NULL);
266
- if (hr != S_OK) {
267
- // Logon failed.
268
- LOG(ERROR) + "Logon failed.";
269
- m_outlookApp->Release();
270
- CoUninitialize();
271
- return false; // Replace with specific error handling.;
272
- }
273
-
274
- m_openedOutlookAB = true;
275
- return m_openedOutlookAB;
276
- }
277
-
278
- int CNativeAddressBook::closeOutlookAB() {
279
- if(m_outlookItems) {
280
- m_outlookItems->Release();
281
- }
282
- if(m_outlookApp) {
283
- m_outlookApp->Release();
284
- CoUninitialize();
285
- }
286
- return 1;
287
- }
288
-
289
- bool CNativeAddressBook::getOutlookItems() {
290
- if( (m_outlookApp!=NULL)&&(m_outlookItems==NULL)) {
241
+ bool CNativeAddressBook::getOutlookItems()
242
+ {
243
+ IPOutlookApp* pApp = COutlookApp::getInstance()->getApp();
244
+ if( (pApp!=NULL)&&(m_outlookItems==NULL))
245
+ {
291
246
  //
292
247
  IFolder* polFolder;
293
- HRESULT res = m_outlookApp->GetDefaultFolder(olFolderContacts, &polFolder);
248
+ HRESULT res = pApp->GetDefaultFolder(olFolderContacts, &polFolder);
294
249
  if (res != S_OK) {
295
250
  // QueryInterface failed.
296
251
  LOG(ERROR) + "GetDefaultFolder failed.";
@@ -310,8 +265,12 @@ bool CNativeAddressBook::getOutlookItems() {
310
265
  return true;
311
266
  }
312
267
 
313
- int CNativeAddressBook::getAllOutlookRecords(std::vector<CABRecord*>& records) {
314
- if(m_outlookApp && getOutlookItems()) {
268
+ int CNativeAddressBook::getAllOutlookRecords(std::vector<CABRecord*>& records)
269
+ {
270
+ IPOutlookApp* pApp = COutlookApp::getInstance()->getApp();
271
+
272
+ if(pApp && getOutlookItems())
273
+ {
315
274
  int size;
316
275
  m_outlookItems->get_Count(&size);
317
276
 
@@ -331,8 +290,12 @@ int CNativeAddressBook::getAllOutlookRecords(std::vector<CABRecord*>& records) {
331
290
  return 1;
332
291
  }
333
292
 
334
- CABRecord* CNativeAddressBook::getOutlookRecord(long oid) {
335
- if(m_outlookApp && getOutlookItems()) {
293
+ CABRecord* CNativeAddressBook::getOutlookRecord(long oid)
294
+ {
295
+ IPOutlookApp* pApp = COutlookApp::getInstance()->getApp();
296
+
297
+ if(pApp && getOutlookItems())
298
+ {
336
299
  DWORD index;
337
300
  if(S_OK==GetItemIndexFromOid(m_outlookItems,oid,&index)) {
338
301
  IContact * pContact;
@@ -351,8 +314,12 @@ CABRecord* CNativeAddressBook::getOutlookRecord(long oid) {
351
314
  return NULL;
352
315
  }
353
316
 
354
- int CNativeAddressBook::addOutlookRecord(CABOutlookRecord* record) {
355
- if(m_outlookApp && getOutlookItems()) {
317
+ int CNativeAddressBook::addOutlookRecord(CABOutlookRecord* record)
318
+ {
319
+ IPOutlookApp* pApp = COutlookApp::getInstance()->getApp();
320
+
321
+ if(pApp && getOutlookItems())
322
+ {
356
323
  if(SUCCEEDED(m_outlookItems->Add((IDispatch**)&record->m_pContact))) {
357
324
  record->save();
358
325
  }