rhodes 2.2.4.beta.1 → 2.2.5.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 (188) hide show
  1. data/CHANGELOG +10 -0
  2. data/Rakefile +119 -3
  3. data/lib/build/jake.rb +15 -1
  4. data/lib/framework/dateME.rb +6 -1
  5. data/lib/framework/rho/render.rb +18 -15
  6. data/lib/framework/rho/rho.rb +105 -43
  7. data/lib/framework/rho/rhoapplication.rb +1 -1
  8. data/lib/framework/rho/rhocontact.rb +41 -13
  9. data/lib/framework/rho/rhocontroller.rb +10 -1
  10. data/lib/framework/rho/rhoevent_c.rb +6 -1
  11. data/lib/framework/rho/rhosupport.rb +1 -1
  12. data/lib/framework/rhodes.rb +1 -1
  13. data/lib/framework/rholang/rhomsg_de.rb +1 -1
  14. data/lib/framework/rholang/rhomsg_es.rb +1 -1
  15. data/lib/framework/rholang/rhomsg_it.rb +28 -0
  16. data/lib/framework/rhom/rhom.rb +6 -0
  17. data/lib/framework/rhom/rhom_model.rb +14 -7
  18. data/lib/framework/rhom/rhom_object_factory.rb +121 -56
  19. data/lib/framework/version.rb +1 -1
  20. data/lib/rhodes.rb +1 -1
  21. data/platform/android/Rhodes/AndroidManifest.full.xml +62 -0
  22. data/platform/android/Rhodes/AndroidManifest.xml +3 -34
  23. data/platform/android/Rhodes/jni/include/rhodes/JNIRhodes.h +17 -2
  24. data/platform/android/Rhodes/jni/src/alert.cpp +16 -0
  25. data/platform/android/Rhodes/jni/src/callbacks.cpp +27 -3
  26. data/platform/android/Rhodes/jni/src/nativebar.cpp +3 -0
  27. data/platform/android/Rhodes/jni/src/nativeview.cpp +131 -1
  28. data/platform/android/Rhodes/jni/src/phonebook.cpp +102 -41
  29. data/platform/android/Rhodes/jni/src/rhodes.cpp +113 -32
  30. data/platform/android/Rhodes/jni/src/ringtones.cpp +1 -1
  31. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Capabilities.java +1 -0
  32. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +9 -8
  33. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +184 -49
  34. data/platform/android/Rhodes/src/com/rhomobile/rhodes/SplashScreen.java +49 -25
  35. data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java +104 -57
  36. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +36 -2
  37. data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java +24 -14
  38. data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java +7 -8
  39. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +185 -3
  40. data/platform/android/Rhodes/src/com/rhomobile/rhodes/nativeview/RhoNativeViewManager.java +54 -1
  41. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java +107 -14
  42. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorNew.java +72 -24
  43. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorOld.java +22 -21
  44. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Phonebook.java +91 -11
  45. data/platform/android/Rhodes/src/com/rhomobile/rhodes/util/PerformOnUiThread.java +10 -0
  46. data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/ChromeClientNew.java +11 -0
  47. data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoWebSettingsNew.java +10 -0
  48. data/platform/android/build/android.rake +50 -9
  49. data/platform/android/build/librhocommon_build.files +1 -0
  50. data/platform/bb/Hsqldb/src/org/hsqldb/Parser.java +3 -2
  51. data/platform/bb/Hsqldb/src/org/hsqldb/SchemaManager.java +3 -1
  52. data/platform/bb/Hsqldb/src/org/hsqldb/Session.java +7 -0
  53. data/platform/bb/Hsqldb/src/org/hsqldb/Tokenizer.java +2 -2
  54. data/platform/bb/RubyVM/RubyVM.jdp +1 -0
  55. data/platform/bb/RubyVM/src/com/rho/AppBuildConfig.java +22 -0
  56. data/platform/bb/RubyVM/src/com/rho/RhoRuby.java +5 -0
  57. data/platform/bb/RubyVM/src/com/rho/net/RhoConnection.java +1 -1
  58. data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +51 -4
  59. data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +21 -10
  60. data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +82 -33
  61. data/platform/bb/RubyVM/src/com/rho/sync/SyncThread.java +59 -6
  62. data/platform/bb/RubyVM/src/com/xruby/GeneratedMethods/RubyFloat_Methods.java +5 -0
  63. data/platform/bb/RubyVM/src/com/xruby/GeneratedMethods/RubyString_Methods.java +19 -7
  64. data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/ArrayPacker.java +1 -1
  65. data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyFloat.java +5 -0
  66. data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyString.java +55 -11
  67. data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyTime.java +18 -2
  68. data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RubyKernelModule.java +8 -5
  69. data/platform/bb/RubyVM/src/j2me/lang/CharacterMe.java +1 -1
  70. data/platform/bb/RubyVM/src/j2me/util/StringParser.java +2 -0
  71. data/platform/bb/build/RubyVM_build.files +1 -0
  72. data/platform/bb/build/bb.rake +21 -2
  73. data/platform/bb/rhodes/platform/4.7/com/rho/RhoMainScreen.java +3 -3
  74. data/platform/bb/rhodes/platform/common/com/rho/RhoMainScreen.java +1 -1
  75. data/platform/bb/rhodes/src/com/rho/RhoRubyHelper.java +1 -2
  76. data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +15 -16
  77. data/platform/bb/rhodes/src/com/rho/rubyext/RhoCalendar.java +4 -0
  78. data/platform/bb/rhodes/src/com/rho/rubyext/System.java +58 -0
  79. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +90 -4
  80. data/platform/iphone/Classes/AppManager/AppManager.m +43 -5
  81. data/platform/iphone/Classes/Event/Event.h +2 -0
  82. data/platform/iphone/Classes/Event/Event.m +12 -1
  83. data/platform/iphone/Classes/GeoLocation/LocationController.m +9 -3
  84. data/platform/iphone/Classes/MapView/MapViewController.m +20 -9
  85. data/platform/iphone/Classes/NativeBar.m +27 -0
  86. data/platform/iphone/Classes/Phonebook/phonebook.m +17 -0
  87. data/platform/iphone/Classes/RhoAlert.m +61 -1
  88. data/platform/iphone/Classes/RhoMainView.h +1 -0
  89. data/platform/iphone/Classes/Rhodes.h +2 -0
  90. data/platform/iphone/Classes/Rhodes.m +108 -1
  91. data/platform/iphone/Classes/SimpleMainView.h +4 -0
  92. data/platform/iphone/Classes/SimpleMainView.m +30 -3
  93. data/platform/iphone/Classes/SplashViewController.m +3 -1
  94. data/platform/iphone/Classes/TabbedMainView.h +2 -0
  95. data/platform/iphone/Classes/TabbedMainView.m +63 -11
  96. data/platform/iphone/Classes/rho/net/NetRequestImpl.m +26 -0
  97. data/platform/iphone/Info.plist +12 -1
  98. data/platform/iphone/RhoLib/RhoLib.xcodeproj/project.pbxproj +8 -0
  99. data/platform/iphone/rbuild/iphone.rake +181 -25
  100. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +5 -5
  101. data/platform/shared/common/IRhoThreadImpl.h +1 -1
  102. data/platform/shared/common/PosixThreadImpl.cpp +5 -3
  103. data/platform/shared/common/PosixThreadImpl.h +1 -1
  104. data/platform/shared/common/RhoFilePath.h +11 -0
  105. data/platform/shared/common/RhoNativeViewManager.h +17 -0
  106. data/platform/shared/common/RhoThread.h +1 -1
  107. data/platform/shared/common/RhodesApp.cpp +29 -8
  108. data/platform/shared/common/ThreadQueue.cpp +5 -3
  109. data/platform/shared/common/ThreadQueue.h +2 -1
  110. data/platform/shared/common/app_build_configs.c +25 -0
  111. data/platform/shared/common/app_build_configs.h +11 -0
  112. data/platform/shared/net/AsyncHttp.cpp +5 -5
  113. data/platform/shared/net/CURLNetRequest.cpp +25 -7
  114. data/platform/shared/net/CURLNetRequest.h +2 -1
  115. data/platform/shared/net/HttpServer.cpp +28 -0
  116. data/platform/shared/ruby/ext/nativebar/nativebar.i +3 -0
  117. data/platform/shared/ruby/ext/nativebar/nativebar_wrap.c +26 -1
  118. data/platform/shared/ruby/ext/rho/rhoruby.c +6 -0
  119. data/platform/shared/ruby/ext/rho/rhoruby.h +1 -0
  120. data/platform/shared/ruby/ext/rho/rhosupport.c +15 -2
  121. data/platform/shared/ruby/ext/syncengine/syncengine.i +14 -2
  122. data/platform/shared/ruby/ext/syncengine/syncengine_wrap.c +97 -2
  123. data/platform/shared/ruby/ext/system/system.i +13 -0
  124. data/platform/shared/ruby/ext/system/system_wrap.c +104 -1
  125. data/platform/shared/rubyext/RhoAppAdapter.cpp +7 -0
  126. data/platform/shared/sync/SyncEngine.cpp +43 -3
  127. data/platform/shared/sync/SyncEngine.h +13 -0
  128. data/platform/shared/sync/SyncNotify.cpp +41 -23
  129. data/platform/shared/sync/SyncNotify.h +18 -4
  130. data/platform/shared/sync/SyncSource.cpp +52 -14
  131. data/platform/shared/sync/SyncSource.h +1 -0
  132. data/platform/shared/sync/SyncThread.cpp +29 -9
  133. data/platform/shared/sync/SyncThread.h +4 -2
  134. data/platform/wm/RhoLib/RhoLib.vcproj +8 -0
  135. data/platform/wm/build/build_inf.js +15 -9
  136. data/platform/wm/build/wm.rake +10 -5
  137. data/platform/wm/rhodes/Alert.cpp +10 -0
  138. data/platform/wm/rhodes/Alert.h +3 -3
  139. data/platform/wm/rhodes/MainWindow.cpp +171 -26
  140. data/platform/wm/rhodes/MainWindow.h +23 -1
  141. data/platform/wm/rhodes/MetaHandler.cpp +192 -0
  142. data/platform/wm/rhodes/MetaHandler.h +31 -0
  143. data/platform/wm/rhodes/RhoNativeViewManager.cpp +126 -0
  144. data/platform/wm/rhodes/RhoNativeViewManagerWM.h +20 -0
  145. data/platform/wm/rhodes/Rhodes.cpp +91 -2
  146. data/platform/wm/rhodes/Rhodes.rc +15 -6
  147. data/platform/wm/rhodes/SyncStatusDlg.cpp +32 -0
  148. data/platform/wm/rhodes/SyncStatusDlg.h +29 -0
  149. data/platform/wm/rhodes/resource.h +5 -2
  150. data/platform/wm/rhodes/rho/common/RhoThreadImpl.cpp +3 -1
  151. data/platform/wm/rhodes/rho/common/RhoThreadImpl.h +1 -1
  152. data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +146 -14
  153. data/platform/wm/rhodes/rhodes.vcproj +28 -0
  154. data/rakefile.rb +119 -3
  155. data/res/build-tools/iphonesim/README +58 -0
  156. data/res/build-tools/iphonesim/Source/iPhoneSimulator.h +43 -0
  157. data/res/build-tools/iphonesim/Source/iPhoneSimulator.m +224 -0
  158. data/res/build-tools/iphonesim/Source/main.m +52 -0
  159. data/res/build-tools/iphonesim/Source/nsprintf.h +3 -0
  160. data/res/build-tools/iphonesim/Source/nsprintf.m +42 -0
  161. data/res/build-tools/iphonesim/build/Release/iphonesim +0 -0
  162. data/res/build-tools/iphonesim/iPhoneSimulatorRemoteClient/iPhoneSimulatorRemoteClient.h +124 -0
  163. data/res/build-tools/iphonesim/iphonesim.xcodeproj/project.pbxproj +261 -0
  164. data/res/build-tools/iphonesim/iphonesim_Prefix.pch +7 -0
  165. data/res/generators/rhogen.rb +5 -0
  166. data/res/generators/templates/application/app/layout.erb +7 -13
  167. data/res/generators/templates/application/app/loading.png +0 -0
  168. data/res/generators/templates/application/build.yml +3 -0
  169. data/res/generators/templates/application/icon/icon114.png +0 -0
  170. data/res/generators/templates/application/icon/icon57.png +0 -0
  171. data/res/generators/templates/application/icon/icon72.png +0 -0
  172. data/res/generators/templates/application/public/css/iphone.css +96 -0
  173. data/res/generators/templates/application/public/images/backButton.png +0 -0
  174. data/res/generators/templates/application/public/jqtouch/jqtouch.js +2 -1
  175. data/res/generators/templates/application/rhoconfig.txt +2 -0
  176. data/rhodes.gemspec +1 -1
  177. data/spec/phone_spec/app/spec/array_pack_spec.rb +108 -0
  178. data/spec/phone_spec/app/spec/bulksync_spec.rb +1 -0
  179. data/spec/phone_spec/app/spec/date_spec.rb +27 -0
  180. data/spec/phone_spec/app/spec/fixtures/classes.rb +91 -0
  181. data/spec/phone_spec/app/spec/lstrip_spec.rb +57 -0
  182. data/spec/phone_spec/app/spec/rho_spec.rb +50 -19
  183. data/spec/phone_spec/app/spec/rhom_object_spec.rb +78 -0
  184. data/spec/phone_spec/app/spec/rstrip_spec.rb +51 -0
  185. data/spec/phone_spec/app/spec/strip_spec.rb +50 -0
  186. data/spec/phone_spec/app/spec/syncengine_spec.rb +46 -3
  187. data/spec/phone_spec/app/spec_runner.rb +6 -0
  188. metadata +34 -4
@@ -6,7 +6,11 @@ module Rho
6
6
  def self.find(*args)
7
7
  if args.first == :all
8
8
  params = {}
9
- params = args[1] if args.length >= 2 and args[1].is_a? Hash
9
+ if args.length >= 2 and args[1].is_a? Hash
10
+ args[1].each do |k,v|
11
+ params[k.to_s] = v
12
+ end
13
+ end
10
14
 
11
15
  params['start_date'] = MIN_TIME if params['start_date'].nil? or params['start_date'] < MIN_TIME
12
16
  params['end_date'] = MAX_TIME if params['end_date'].nil? or params['end_date'] > MAX_TIME
@@ -30,6 +34,7 @@ module Rho
30
34
  end
31
35
 
32
36
  def self.create!(event)
37
+ event['id'] = nil #indicate that event should be created
33
38
  Rho::Calendar.save(event)
34
39
  end
35
40
 
@@ -79,7 +79,7 @@ module Rho
79
79
  params.merge!(parse_query_parameters(req['request-query']))
80
80
  end
81
81
  unless req['headers'].nil? or req['headers']['Content-Type'].nil?
82
- if 'application/x-www-form-urlencoded'.eql? req['headers']['Content-Type']
82
+ unless req['headers']['Content-Type'].index('application/x-www-form-urlencoded').nil?
83
83
  params.merge!(parse_query_parameters(req['request-body']))
84
84
  end
85
85
  end
@@ -1,6 +1,6 @@
1
1
  module Rhodes
2
2
  unless defined? Rhodes::VERSION
3
- VERSION = '2.2.4'
3
+ VERSION = '2.2.5'
4
4
  end
5
5
  unless defined? Rhodes::DBVERSION
6
6
  DBVERSION = '2.2.0'
@@ -15,7 +15,7 @@ module Rho
15
15
  'log_menu' => "Log",
16
16
  'close_menu' => "Close",
17
17
  'get_link_menu' => "Link abrufen",
18
- 'open_link_menu' => "Open Link",
18
+ 'open_link_menu' => "Link öffnen",
19
19
  'email_menu' => "Email",
20
20
  'call_menu' => "Call",
21
21
  'sms_menu' => "SMS",
@@ -15,7 +15,7 @@ module Rho
15
15
  'log_menu' => "Log",
16
16
  'close_menu' => "Cerrar",
17
17
  'get_link_menu' => "Obtener vínculo",
18
- 'open_link_menu' => "Obtener vínculo",
18
+ 'open_link_menu' => "Abrir vínculo",
19
19
  'email_menu' => "Email",
20
20
  'call_menu' => "Llamar",
21
21
  'sms_menu' => "SMS",
@@ -0,0 +1,28 @@
1
+ module Rho
2
+ class RhoMessages
3
+ LocalMessages = {
4
+ 'sync_failed_for' => "Sync failed for ",
5
+ 'details' => " Details: ",
6
+ 'sync_completed' => "Sync completed.",
7
+ 'syncronizing' => "Synchronizing ",
8
+ 'syncronizing_data' => "Synchronizing data...",
9
+
10
+ 'home_menu' => "Home",
11
+ 'refresh_menu' => "Refresh",
12
+ 'back_menu' => "Back",
13
+ 'sync_menu' => "Sync",
14
+ 'options_menu' => "Options",
15
+ 'log_menu' => "Log",
16
+ 'close_menu' => "Close",
17
+ 'get_link_menu' => "Apri collegamento",
18
+ 'open_link_menu' => "Apri collegamento",
19
+ 'email_menu' => "Email",
20
+ 'call_menu' => "Call",
21
+ 'sms_menu' => "SMS",
22
+ 'add_contacts_menu' => "Add to Contacts",
23
+
24
+ 'hide' => 'Hide'
25
+ }
26
+
27
+ end # RhoMessages
28
+ end # Rho
@@ -42,6 +42,7 @@ module Rhom
42
42
  end
43
43
 
44
44
  def database_client_reset
45
+ old_interval = SyncEngine.set_pollinterval(0)
45
46
  SyncEngine.stop_sync
46
47
 
47
48
  params = ["", "", 0]
@@ -59,9 +60,12 @@ module Rhom
59
60
 
60
61
  hash_migrate = {}
61
62
  ::Rho::RHO.init_schema_sources(hash_migrate)
63
+
64
+ SyncEngine.set_pollinterval(old_interval)
62
65
  end
63
66
 
64
67
  def database_full_reset(reset_client_info=false)
68
+ old_interval = SyncEngine.set_pollinterval(0)
65
69
  SyncEngine.stop_sync
66
70
 
67
71
  ::Rho::RHO.get_user_db().execute_sql("UPDATE client_info SET reset=1")
@@ -77,6 +81,8 @@ module Rhom
77
81
 
78
82
  hash_migrate = {}
79
83
  ::Rho::RHO.init_schema_sources(hash_migrate)
84
+
85
+ SyncEngine.set_pollinterval(old_interval)
80
86
  end
81
87
 
82
88
  def database_full_reset_and_logout
@@ -8,6 +8,7 @@ module Rhom
8
8
  end
9
9
 
10
10
  def get_model_params
11
+ init_defaults
11
12
  BaseModel.model_params
12
13
  end
13
14
 
@@ -19,17 +20,23 @@ module Rhom
19
20
  false
20
21
  end
21
22
 
22
- def property(name,type=:string,option=nil)
23
- if fixed_schema?()
24
-
25
- BaseModel.model_params ||= {}
26
-
23
+ def init_defaults
24
+ if fixed_schema?
25
+ BaseModel.model_params ||= {}
27
26
  BaseModel.model_params['schema'] ||= {}
28
27
  BaseModel.model_params['schema']['property'] ||= {}
29
- BaseModel.model_params['schema']['property'][name.to_s] = [type,option]
30
28
  else
31
- BaseModel.model_params ||= {}
29
+ BaseModel.model_params ||= {}
30
+ BaseModel.model_params ||= {}
32
31
  BaseModel.model_params['property'] ||= {}
32
+ end
33
+ end
34
+
35
+ def property(name,type=:string,option=nil)
36
+ init_defaults
37
+ if fixed_schema?()
38
+ BaseModel.model_params['schema']['property'][name.to_s] = [type,option]
39
+ else
33
40
  BaseModel.model_params['property'][name.to_s] = [type,option]
34
41
  end
35
42
 
@@ -88,31 +88,35 @@ module Rhom
88
88
  end
89
89
  end
90
90
 
91
- @@metadata = {}
92
91
  class << self
93
92
 
94
- def clean_cached_metadata
95
- src_name = get_source_name()
96
- @@metadata[src_name] = nil
97
- end
98
-
99
93
  def metadata
100
94
  src_name = get_source_name()
101
- return @@metadata[src_name] if @@metadata[src_name]
95
+ return Rho::RhoController.cached_metadata[src_name] if Rho::RhoController.cached_metadata.has_key?(src_name)
96
+
102
97
  db = ::Rho::RHO.get_src_db(src_name)
103
98
  result = db.select_from_table('sources', 'metadata', {"name"=>src_name} )
104
99
  if result && result.length > 0 && result[0]['metadata']
105
- @@metadata[src_name] = Rho::JSON.parse(result[0]['metadata'])
100
+ Rho::RhoController.cached_metadata[src_name] = Rho::JSON.parse(result[0]['metadata'])
101
+ else
102
+ Rho::RhoController.cached_metadata[src_name] = nil
106
103
  end
107
104
 
108
- @@metadata[src_name]
105
+ Rho::RhoController.cached_metadata[src_name]
109
106
  end
110
107
 
111
108
  def count
112
109
  db = ::Rho::RHO.get_src_db(get_source_name)
113
110
 
114
111
  if is_schema_source()
115
- res = db.select_from_table(get_schema_table_name(),'object').length
112
+ #res = db.select_from_table(get_schema_table_name(),'object').length
113
+ db_res = db.execute_sql("SELECT COUNT(*) FROM " + get_schema_table_name())
114
+ #puts "db_res : #{db_res}"
115
+ if db_res && db_res.length() > 0
116
+ res = db_res[0].values[0]
117
+ else
118
+ res = 0
119
+ end
116
120
  else
117
121
  res = db.select_from_table('object_values','object', {"source_id"=>get_source_id}, {"distinct"=>true}).length
118
122
  end
@@ -276,7 +280,7 @@ module Rhom
276
280
  return sql, vals
277
281
  end
278
282
 
279
- def find_objects(condition_hash, op, limit, offset, order_attr)
283
+ def find_objects(condition_hash, op, limit, offset, order_attr, &block)
280
284
  nulls_cond = {}
281
285
  if op == 'AND'
282
286
  condition_hash.each do |key,value|
@@ -288,7 +292,7 @@ module Rhom
288
292
  end
289
293
 
290
294
  strLimit = nil
291
- if !order_attr
295
+ if !(block_given? || order_attr)
292
296
  strLimit = " LIMIT " + limit.to_s + " OFFSET " + offset.to_s if limit && offset && condition_hash.length <= 1 && nulls_cond.length == 0
293
297
  end
294
298
 
@@ -311,8 +315,8 @@ module Rhom
311
315
 
312
316
  mapObjs[ rec['object'] ] = 1
313
317
  listObjs << rec
314
-
315
- bStop = !order_attr && limit && offset && nulls_cond.length == 0 && listObjs.length >= offset + limit
318
+
319
+ bStop = !(block_given? || order_attr) && limit && offset && nulls_cond.length == 0 && listObjs.length >= offset + limit
316
320
  break if bStop
317
321
  end
318
322
 
@@ -357,7 +361,7 @@ module Rhom
357
361
  res = []
358
362
  listObjs.each do |obj|
359
363
  nIndex += 1
360
- next if !order_attr && offset && nIndex < offset && !strLimit
364
+ next if !(block_given? || order_attr) && offset && nIndex < offset && !strLimit
361
365
 
362
366
  bSkip = false
363
367
  #obj_value = ::Rhom::RhomDbAdapter.get_value_for_sql_stmt(obj['object'])
@@ -383,11 +387,11 @@ module Rhom
383
387
  res
384
388
  end
385
389
 
386
- def find_objects_ex(condition_ar, op, limit, offset, order_attr)
390
+ def find_objects_ex(condition_ar, op, limit, offset, order_attr, &block)
387
391
  mapObjs = {}
388
392
  listObjs = []
389
393
  condition_ar.each do |cond|
390
- res = find_objects(cond[:conditions], cond[:op], limit, offset, order_attr)
394
+ res = find_objects(cond[:conditions], cond[:op], limit, offset, order_attr, &block)
391
395
 
392
396
  if listObjs.length() == 0
393
397
  if condition_ar.length() > 1
@@ -423,7 +427,7 @@ module Rhom
423
427
  end
424
428
 
425
429
  def find_bycondhash(args, &block)
426
- #puts 'find_bycondhash start'
430
+ #puts 'find_bycondhash start' + (block_given? ? 'with block' : "")
427
431
 
428
432
  condition_hash = {}
429
433
  select_arr = nil
@@ -442,7 +446,8 @@ module Rhom
442
446
  offset = args[1][:offset] ? args[1][:offset].to_i : 0
443
447
  end
444
448
  select_arr = args[1][:select] if args[1][:select]
445
- order_dir = args[1][:orderdir].upcase() if args[1][:orderdir]
449
+
450
+ order_dir = args[1][:orderdir]
446
451
  order_attr = args[1][:order]
447
452
 
448
453
  op = args[1][:op].upcase if args[1][:op]
@@ -456,9 +461,14 @@ module Rhom
456
461
  attribs = nil
457
462
  if select_arr
458
463
  attribs = select_arr
459
- if order_attr
464
+ if order_attr
460
465
  order_attr_arr = []
461
- order_attr_arr.push(order_attr)
466
+ if order_attr.is_a?(Array)
467
+ order_attr_arr = order_attr
468
+ else
469
+ order_attr_arr.push(order_attr)
470
+ end
471
+
462
472
  attribs = attribs | order_attr_arr
463
473
  end
464
474
  else
@@ -472,9 +482,9 @@ module Rhom
472
482
  begin
473
483
  listObjs = []
474
484
  if condition_hash.is_a?(Hash)
475
- listObjs = find_objects(condition_hash, op, limit, offset, order_attr)
485
+ listObjs = find_objects(condition_hash, op, limit, offset, order_attr, &block)
476
486
  else
477
- listObjs = find_objects_ex(condition_hash, op, limit, offset, order_attr)
487
+ listObjs = find_objects_ex(condition_hash, op, limit, offset, order_attr, &block)
478
488
  end
479
489
 
480
490
  nCount = 0;
@@ -538,24 +548,16 @@ module Rhom
538
548
  #end
539
549
 
540
550
  ret_list << new_obj
541
- break if !order_attr && limit && ret_list.length >= limit
551
+ break if !(block_given? || order_attr) && limit && ret_list.length >= limit
542
552
  end
543
553
  end
544
554
  ensure
545
555
  db.unlock_db
546
556
  end
547
557
 
548
- if order_attr
549
- ret_list.sort! { |x,y|
550
- vx = x.vars[order_attr.to_sym()]
551
- vy = y.vars[order_attr.to_sym()]
552
- res = vx && vy ? (block_given? ? yield(vx,vy): vx <=> vy) : 0
553
- res *= -1 if order_dir && order_dir == 'DESC'
554
- res
555
- }
556
- end
558
+ order_array(ret_list, order_attr,order_dir, &block)
557
559
 
558
- if order_attr && limit
560
+ if (block_given? || order_attr) && limit
559
561
  ret_list = ret_list.slice(offset,limit)
560
562
  end
561
563
 
@@ -570,6 +572,70 @@ module Rhom
570
572
  ret_list
571
573
  end
572
574
 
575
+ def order_array(ret_list, order_attr, order_dir, &block)
576
+ if order_attr
577
+ ret_list.sort! { |x,y|
578
+
579
+ res = 0
580
+ if order_attr.is_a?(Array)
581
+ order_attr.each_index { |i|
582
+ vx = x.vars[order_attr[i].to_sym()]
583
+ vy = y.vars[order_attr[i].to_sym()]
584
+ res = vx && vy ? (block_given? ? yield(vx,vy): vx <=> vy) : 0
585
+
586
+ dir = 'ASC'
587
+ if order_dir && order_dir.is_a?(Array) && i < order_dir.length()
588
+ dir = order_dir[i].upcase()
589
+ else
590
+ dir = order_dir.upcase() if order_dir && order_dir.is_a?(String)
591
+ end
592
+
593
+ res *= -1 if dir && dir == 'DESC'
594
+ break if res != 0
595
+ }
596
+ else
597
+ vx = x.vars[order_attr.to_sym()]
598
+ vy = y.vars[order_attr.to_sym()]
599
+ res = vx && vy ? (block_given? ? yield(vx,vy): vx <=> vy) : 0
600
+ res *= -1 if order_dir && order_dir == 'DESC'
601
+ end
602
+
603
+ res
604
+ }
605
+ elsif block_given?
606
+ ret_list.sort! { |x,y|
607
+ res = yield(x,y)
608
+ res *= -1 if order_dir && order_dir == 'DESC'
609
+ res
610
+ }
611
+ end
612
+
613
+ end
614
+
615
+ def make_sql_order(params)
616
+ order_attr = params[:order]
617
+ order_dir = params[:orderdir]
618
+
619
+ res = ""
620
+
621
+ if order_attr && order_attr.is_a?(Array)
622
+ order_attr.each_index do |i|
623
+ res += "," if i > 0
624
+
625
+ res += "\"#{order_attr[i]}\" "
626
+ if order_dir && order_dir.is_a?(Array) && i < order_dir.length()
627
+ res += order_dir[i].upcase()
628
+ else
629
+ res += order_dir && order_dir.is_a?(String) ? order_dir.upcase() : "ASC"
630
+ end
631
+ end
632
+ else
633
+ res = "\"#{order_attr}\" " + (order_dir ? order_dir.upcase() : "")
634
+ end
635
+
636
+ res
637
+ end
638
+
573
639
  # retrieve a single record if object id provided, otherwise return
574
640
  # full list corresponding to factory's source id
575
641
  def find(*args, &block)
@@ -629,8 +695,9 @@ module Rhom
629
695
  end
630
696
 
631
697
  select_arr = args[1][:select] if args[1][:select]
632
- order_dir = args[1][:orderdir].upcase() if args[1][:orderdir]
698
+ order_dir = args[1][:orderdir]
633
699
  order_attr = args[1][:order]
700
+
634
701
  end
635
702
 
636
703
  if args.first == :first
@@ -639,7 +706,7 @@ module Rhom
639
706
  end
640
707
 
641
708
  strLimit = nil
642
- if !(block_given? && order_attr)
709
+ if !block_given?
643
710
  strLimit = " LIMIT " + limit.to_s + " OFFSET " + offset.to_s if limit && offset
644
711
  end
645
712
 
@@ -670,10 +737,10 @@ module Rhom
670
737
  objects = [ { 'object' => strip_braces(args.first.to_s) } ]
671
738
 
672
739
  else
673
- if !block_given? && order_attr
740
+ if !block_given? && order_attr && order_attr.is_a?(String)
674
741
  if !args[1][:dont_ignore_missed_attribs]
675
742
  sql << "SELECT object FROM object_values WHERE source_id=? "
676
- sql << " AND attrib=? ORDER BY \"value\" " + order_dir
743
+ sql << " AND attrib=? ORDER BY \"value\" " + ( order_dir ? order_dir : "")
677
744
  values << get_source_id
678
745
  values << order_attr
679
746
  end
@@ -753,7 +820,7 @@ module Rhom
753
820
  sql << " FROM object_values ov \n"
754
821
  sql << "where " + ::Rhom::RhomDbAdapter.where_str(where_cond) + "\n" if where_cond and where_cond.length > 0
755
822
  sql << "group by object\n"
756
- sql << "order by \"#{order_attr}\" " + order_dir if !block_given? && order_attr
823
+ sql << "order by " + make_sql_order(args[1]) if !block_given? && order_attr
757
824
  #sql << ") WHERE " + ::Rhom::RhomDbAdapter.where_str(condition_hash) if condition_hash
758
825
  sql << ") WHERE " + condition_str if condition_str
759
826
  sql << strLimit if strLimit
@@ -775,7 +842,7 @@ module Rhom
775
842
  sql << " WHERE " + condition_str if condition_str
776
843
  end
777
844
 
778
- sql << " order by \"#{order_attr}\" " + order_dir if !block_given? && order_attr
845
+ sql << " order by " + make_sql_order(args[1]) if !block_given? && order_attr
779
846
  sql << strLimit if strLimit
780
847
 
781
848
  #puts "Database query start" #: #{sql}"
@@ -804,17 +871,12 @@ module Rhom
804
871
  else
805
872
  puts "Processing rhom objects end, no attributes found."
806
873
  end
807
-
808
- if block_given? && order_attr
809
- ret_list.sort! { |x,y|
810
- vx = x.vars[order_attr.to_sym()]
811
- vy = y.vars[order_attr.to_sym()]
812
- res = vx && vy ? (block_given? ? yield(vx,vy): vx <=> vy) : 0
813
- res *= -1 if order_dir && order_dir == 'DESC'
814
- res
815
- }
874
+
875
+ if block_given?
876
+ order_array(ret_list, order_attr, order_dir, &block)
877
+ ret_list = ret_list.slice(offset,limit) if limit
816
878
  end
817
-
879
+
818
880
  return list.length if args.first == :count
819
881
  if args.first == :first || args.first.is_a?(String)
820
882
  return ret_list.length > 0 ? ret_list[0] : nil
@@ -882,8 +944,12 @@ module Rhom
882
944
 
883
945
  puts "del_objects : #{del_objects}"
884
946
  del_objects.each do |obj|
885
- db.delete_from_table(tableName, {'object'=>obj['object']})
886
- db.delete_from_table('changed_values', {'object'=>obj['object']}) if is_sync_source()
947
+ if is_schema_source()
948
+ db.delete_from_table(tableName, {'object'=>obj['object']})
949
+ else
950
+ db.delete_from_table(tableName, {'object'=>obj['object'], "source_id"=>get_source_id})
951
+ end
952
+ db.delete_from_table('changed_values', {'object'=>obj['object'], "source_id"=>get_source_id}) if is_sync_source()
887
953
  end
888
954
  else
889
955
  if is_schema_source()
@@ -1016,19 +1082,18 @@ module Rhom
1016
1082
  attrsList = nil
1017
1083
  if is_inst_schema_source()
1018
1084
  attrsList = db.select_from_table(tableName, '*', {"object"=>obj})
1085
+ db.delete_from_table(tableName, {"object"=>obj})
1019
1086
  else
1020
1087
  attrsList = db.select_from_table(tableName, '*', {"object"=>obj, "source_id"=>self.get_inst_source_id()})
1088
+ db.delete_from_table(tableName, {"object"=>obj, "source_id"=>self.get_inst_source_id()})
1021
1089
  end
1022
1090
 
1023
- # first delete the record from viewable list
1024
- db.delete_from_table(tableName, {"object"=>obj})
1025
-
1026
1091
  resUpdateType = is_inst_sync_source() ? db.select_from_table('changed_values', 'update_type', {"object"=>obj, "update_type"=>'create', "sent"=>0}) : nil
1027
1092
  if resUpdateType && resUpdateType.length > 0
1028
1093
  update_type = nil
1029
1094
  end
1030
1095
 
1031
- db.delete_from_table('changed_values', {"object"=>obj, "sent"=>0}) if is_inst_sync_source()
1096
+ db.delete_from_table('changed_values', {"object"=>obj, "source_id"=>self.get_inst_source_id(), "sent"=>0}) if is_inst_sync_source()
1032
1097
 
1033
1098
  if is_inst_sync_source() && update_type and attrsList and attrsList.length() > 0
1034
1099
  # now add delete operation
@@ -1,6 +1,6 @@
1
1
  module RhodesFramework
2
2
  unless defined? RhodesFramework::VERSION
3
- VERSION = '2.2.4'
3
+ VERSION = '2.2.5'
4
4
  end
5
5
  unless defined? RhodesFramework::DBVERSION
6
6
  DBVERSION = '2.2.2'
data/lib/rhodes.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Rhodes
2
2
  unless defined? Rhodes::VERSION
3
- VERSION = '2.2.4'
3
+ VERSION = '2.2.5'
4
4
  end
5
5
  unless defined? Rhodes::DBVERSION
6
6
  DBVERSION = '2.2.0'
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
+ package="com.rhomobile.rhodes"
4
+ android:installLocation="auto"
5
+ android:versionCode="25"
6
+ android:versionName="2.2.4">
7
+ <uses-sdk android:minSdkVersion="3" />
8
+ <application android:icon="@drawable/icon"
9
+ android:multiprocess="true"
10
+ android:allowTaskReparenting="true"
11
+ android:debuggable="true"
12
+ finishOnTaskLaunch="true"
13
+ android:label="@string/app_name">
14
+ <activity android:name="com.rhomobile.rhodes.Rhodes"
15
+ android:label="@string/app_name"
16
+ android:configChanges="keyboardHidden|orientation">
17
+ <intent-filter>
18
+ <action android:name="android.intent.action.MAIN" />
19
+ <category android:name="android.intent.category.LAUNCHER" />
20
+ </intent-filter>
21
+ </activity>
22
+ <activity android:name="com.rhomobile.rhodes.camera.FileList" />
23
+ <activity android:name="com.rhomobile.rhodes.camera.ImageCapture" android:screenOrientation="landscape" />
24
+ <activity android:name="com.rhomobile.rhodes.signature.ImageCapture" />
25
+ <activity android:name="com.rhomobile.rhodes.datetime.DateTimePickerScreen" />
26
+ <activity android:name="com.rhomobile.rhodes.mapview.MapView" />
27
+ <activity android:name="com.rhomobile.rhodes.bluetooth.RhoBluetoothDeviceListActivity" />
28
+ <uses-library android:name="com.google.android.maps" />
29
+ <receiver android:name="com.rhomobile.rhodes.PushReceiver" android:permission="com.google.android.c2dm.permission.SEND">
30
+ <!-- Receive the actual message -->
31
+ <intent-filter>
32
+ <action android:name="com.google.android.c2dm.intent.RECEIVE" />
33
+ <category android:name="com.rhomobile.rhodes" />
34
+ </intent-filter>
35
+ <!-- Receive the registration id -->
36
+ <intent-filter>
37
+ <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
38
+ <category android:name="com.rhomobile.rhodes" />
39
+ </intent-filter>
40
+ </receiver>
41
+ </application>
42
+ <uses-permission android:name="android.permission.INTERNET" />
43
+ <uses-permission android:name="android.permission.CAMERA" />
44
+ <uses-permission android:name="android.permission.READ_CONTACTS" />
45
+ <uses-permission android:name="android.permission.WRITE_CONTACTS" />
46
+ <uses-permission android:name="android.permission.CALL_PHONE" />
47
+ <uses-permission android:name="android.permission.READ_PHONE_STATE" />
48
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
49
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
50
+ <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
51
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
52
+ <uses-permission android:name="android.permission.VIBRATE" />
53
+ <uses-permission android:name="android.permission.GET_ACCOUNTS" />
54
+ <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
55
+ <uses-permission android:name="android.permission.BLUETOOTH" />
56
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
57
+ <uses-permission android:name="android.permission.READ_CALENDAR" />
58
+ <uses-permission android:name="android.permission.WRITE_CALENDAR" />
59
+ <permission android:name="com.rhomobile.rhodes.permission.C2D_MESSAGE" android:protectionLevel="signature" />
60
+ <uses-permission android:name="com.rhomobile.rhodes.permission.C2D_MESSAGE" />
61
+ <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
62
+ </manifest>
@@ -1,8 +1,9 @@
1
1
  <?xml version="1.0" encoding="utf-8"?>
2
2
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
3
  package="com.rhomobile.rhodes"
4
- android:versionCode="25"
5
- android:versionName="2.2.4">
4
+ android:installLocation="auto"
5
+ android:versionCode="26"
6
+ android:versionName="2.2.5">
6
7
  <uses-sdk android:minSdkVersion="3" />
7
8
  <application android:icon="@drawable/icon"
8
9
  android:multiprocess="true"
@@ -25,37 +26,5 @@
25
26
  <activity android:name="com.rhomobile.rhodes.mapview.MapView" />
26
27
  <activity android:name="com.rhomobile.rhodes.bluetooth.RhoBluetoothDeviceListActivity" />
27
28
  <uses-library android:name="com.google.android.maps" />
28
- <receiver android:name="com.rhomobile.rhodes.PushReceiver" android:permission="com.google.android.c2dm.permission.SEND">
29
- <!-- Receive the actual message -->
30
- <intent-filter>
31
- <action android:name="com.google.android.c2dm.intent.RECEIVE" />
32
- <category android:name="com.rhomobile.rhodes" />
33
- </intent-filter>
34
- <!-- Receive the registration id -->
35
- <intent-filter>
36
- <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
37
- <category android:name="com.rhomobile.rhodes" />
38
- </intent-filter>
39
- </receiver>
40
29
  </application>
41
- <uses-permission android:name="android.permission.INTERNET" />
42
- <uses-permission android:name="android.permission.CAMERA" />
43
- <uses-permission android:name="android.permission.READ_CONTACTS" />
44
- <uses-permission android:name="android.permission.WRITE_CONTACTS" />
45
- <uses-permission android:name="android.permission.CALL_PHONE" />
46
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
47
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
48
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
49
- <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
50
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
51
- <uses-permission android:name="android.permission.VIBRATE" />
52
- <uses-permission android:name="android.permission.GET_ACCOUNTS" />
53
- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
54
- <uses-permission android:name="android.permission.BLUETOOTH" />
55
- <uses-permission android:name="android.permission.WAKE_LOCK" />
56
- <uses-permission android:name="android.permission.READ_CALENDAR" />
57
- <uses-permission android:name="android.permission.WRITE_CALENDAR" />
58
- <permission android:name="com.rhomobile.rhodes.permission.C2D_MESSAGE" android:protectionLevel="signature" />
59
- <uses-permission android:name="com.rhomobile.rhodes.permission.C2D_MESSAGE" />
60
- <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
61
30
  </manifest>