rhodes 2.2.4.beta.1 → 2.2.5.beta.1

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