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.
- data/CHANGELOG +10 -0
- data/Rakefile +119 -3
- data/lib/build/jake.rb +15 -1
- data/lib/framework/dateME.rb +6 -1
- data/lib/framework/rho/render.rb +18 -15
- data/lib/framework/rho/rho.rb +105 -43
- data/lib/framework/rho/rhoapplication.rb +1 -1
- data/lib/framework/rho/rhocontact.rb +41 -13
- data/lib/framework/rho/rhocontroller.rb +10 -1
- data/lib/framework/rho/rhoevent_c.rb +6 -1
- data/lib/framework/rho/rhosupport.rb +1 -1
- data/lib/framework/rhodes.rb +1 -1
- data/lib/framework/rholang/rhomsg_de.rb +1 -1
- data/lib/framework/rholang/rhomsg_es.rb +1 -1
- data/lib/framework/rholang/rhomsg_it.rb +28 -0
- data/lib/framework/rhom/rhom.rb +6 -0
- data/lib/framework/rhom/rhom_model.rb +14 -7
- data/lib/framework/rhom/rhom_object_factory.rb +121 -56
- data/lib/framework/version.rb +1 -1
- data/lib/rhodes.rb +1 -1
- data/platform/android/Rhodes/AndroidManifest.full.xml +62 -0
- data/platform/android/Rhodes/AndroidManifest.xml +3 -34
- data/platform/android/Rhodes/jni/include/rhodes/JNIRhodes.h +17 -2
- data/platform/android/Rhodes/jni/src/alert.cpp +16 -0
- data/platform/android/Rhodes/jni/src/callbacks.cpp +27 -3
- data/platform/android/Rhodes/jni/src/nativebar.cpp +3 -0
- data/platform/android/Rhodes/jni/src/nativeview.cpp +131 -1
- data/platform/android/Rhodes/jni/src/phonebook.cpp +102 -41
- data/platform/android/Rhodes/jni/src/rhodes.cpp +113 -32
- data/platform/android/Rhodes/jni/src/ringtones.cpp +1 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Capabilities.java +1 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +9 -8
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +184 -49
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/SplashScreen.java +49 -25
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java +104 -57
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +36 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java +24 -14
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java +7 -8
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +185 -3
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/nativeview/RhoNativeViewManager.java +54 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java +107 -14
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorNew.java +72 -24
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorOld.java +22 -21
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Phonebook.java +91 -11
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/util/PerformOnUiThread.java +10 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/ChromeClientNew.java +11 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoWebSettingsNew.java +10 -0
- data/platform/android/build/android.rake +50 -9
- data/platform/android/build/librhocommon_build.files +1 -0
- data/platform/bb/Hsqldb/src/org/hsqldb/Parser.java +3 -2
- data/platform/bb/Hsqldb/src/org/hsqldb/SchemaManager.java +3 -1
- data/platform/bb/Hsqldb/src/org/hsqldb/Session.java +7 -0
- data/platform/bb/Hsqldb/src/org/hsqldb/Tokenizer.java +2 -2
- data/platform/bb/RubyVM/RubyVM.jdp +1 -0
- data/platform/bb/RubyVM/src/com/rho/AppBuildConfig.java +22 -0
- data/platform/bb/RubyVM/src/com/rho/RhoRuby.java +5 -0
- data/platform/bb/RubyVM/src/com/rho/net/RhoConnection.java +1 -1
- data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +51 -4
- data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +21 -10
- data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +82 -33
- data/platform/bb/RubyVM/src/com/rho/sync/SyncThread.java +59 -6
- data/platform/bb/RubyVM/src/com/xruby/GeneratedMethods/RubyFloat_Methods.java +5 -0
- data/platform/bb/RubyVM/src/com/xruby/GeneratedMethods/RubyString_Methods.java +19 -7
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/ArrayPacker.java +1 -1
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyFloat.java +5 -0
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyString.java +55 -11
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyTime.java +18 -2
- data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RubyKernelModule.java +8 -5
- data/platform/bb/RubyVM/src/j2me/lang/CharacterMe.java +1 -1
- data/platform/bb/RubyVM/src/j2me/util/StringParser.java +2 -0
- data/platform/bb/build/RubyVM_build.files +1 -0
- data/platform/bb/build/bb.rake +21 -2
- data/platform/bb/rhodes/platform/4.7/com/rho/RhoMainScreen.java +3 -3
- data/platform/bb/rhodes/platform/common/com/rho/RhoMainScreen.java +1 -1
- data/platform/bb/rhodes/src/com/rho/RhoRubyHelper.java +1 -2
- data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +15 -16
- data/platform/bb/rhodes/src/com/rho/rubyext/RhoCalendar.java +4 -0
- data/platform/bb/rhodes/src/com/rho/rubyext/System.java +58 -0
- data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +90 -4
- data/platform/iphone/Classes/AppManager/AppManager.m +43 -5
- data/platform/iphone/Classes/Event/Event.h +2 -0
- data/platform/iphone/Classes/Event/Event.m +12 -1
- data/platform/iphone/Classes/GeoLocation/LocationController.m +9 -3
- data/platform/iphone/Classes/MapView/MapViewController.m +20 -9
- data/platform/iphone/Classes/NativeBar.m +27 -0
- data/platform/iphone/Classes/Phonebook/phonebook.m +17 -0
- data/platform/iphone/Classes/RhoAlert.m +61 -1
- data/platform/iphone/Classes/RhoMainView.h +1 -0
- data/platform/iphone/Classes/Rhodes.h +2 -0
- data/platform/iphone/Classes/Rhodes.m +108 -1
- data/platform/iphone/Classes/SimpleMainView.h +4 -0
- data/platform/iphone/Classes/SimpleMainView.m +30 -3
- data/platform/iphone/Classes/SplashViewController.m +3 -1
- data/platform/iphone/Classes/TabbedMainView.h +2 -0
- data/platform/iphone/Classes/TabbedMainView.m +63 -11
- data/platform/iphone/Classes/rho/net/NetRequestImpl.m +26 -0
- data/platform/iphone/Info.plist +12 -1
- data/platform/iphone/RhoLib/RhoLib.xcodeproj/project.pbxproj +8 -0
- data/platform/iphone/rbuild/iphone.rake +181 -25
- data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +5 -5
- data/platform/shared/common/IRhoThreadImpl.h +1 -1
- data/platform/shared/common/PosixThreadImpl.cpp +5 -3
- data/platform/shared/common/PosixThreadImpl.h +1 -1
- data/platform/shared/common/RhoFilePath.h +11 -0
- data/platform/shared/common/RhoNativeViewManager.h +17 -0
- data/platform/shared/common/RhoThread.h +1 -1
- data/platform/shared/common/RhodesApp.cpp +29 -8
- data/platform/shared/common/ThreadQueue.cpp +5 -3
- data/platform/shared/common/ThreadQueue.h +2 -1
- data/platform/shared/common/app_build_configs.c +25 -0
- data/platform/shared/common/app_build_configs.h +11 -0
- data/platform/shared/net/AsyncHttp.cpp +5 -5
- data/platform/shared/net/CURLNetRequest.cpp +25 -7
- data/platform/shared/net/CURLNetRequest.h +2 -1
- data/platform/shared/net/HttpServer.cpp +28 -0
- data/platform/shared/ruby/ext/nativebar/nativebar.i +3 -0
- data/platform/shared/ruby/ext/nativebar/nativebar_wrap.c +26 -1
- data/platform/shared/ruby/ext/rho/rhoruby.c +6 -0
- data/platform/shared/ruby/ext/rho/rhoruby.h +1 -0
- data/platform/shared/ruby/ext/rho/rhosupport.c +15 -2
- data/platform/shared/ruby/ext/syncengine/syncengine.i +14 -2
- data/platform/shared/ruby/ext/syncengine/syncengine_wrap.c +97 -2
- data/platform/shared/ruby/ext/system/system.i +13 -0
- data/platform/shared/ruby/ext/system/system_wrap.c +104 -1
- data/platform/shared/rubyext/RhoAppAdapter.cpp +7 -0
- data/platform/shared/sync/SyncEngine.cpp +43 -3
- data/platform/shared/sync/SyncEngine.h +13 -0
- data/platform/shared/sync/SyncNotify.cpp +41 -23
- data/platform/shared/sync/SyncNotify.h +18 -4
- data/platform/shared/sync/SyncSource.cpp +52 -14
- data/platform/shared/sync/SyncSource.h +1 -0
- data/platform/shared/sync/SyncThread.cpp +29 -9
- data/platform/shared/sync/SyncThread.h +4 -2
- data/platform/wm/RhoLib/RhoLib.vcproj +8 -0
- data/platform/wm/build/build_inf.js +15 -9
- data/platform/wm/build/wm.rake +10 -5
- data/platform/wm/rhodes/Alert.cpp +10 -0
- data/platform/wm/rhodes/Alert.h +3 -3
- data/platform/wm/rhodes/MainWindow.cpp +171 -26
- data/platform/wm/rhodes/MainWindow.h +23 -1
- data/platform/wm/rhodes/MetaHandler.cpp +192 -0
- data/platform/wm/rhodes/MetaHandler.h +31 -0
- data/platform/wm/rhodes/RhoNativeViewManager.cpp +126 -0
- data/platform/wm/rhodes/RhoNativeViewManagerWM.h +20 -0
- data/platform/wm/rhodes/Rhodes.cpp +91 -2
- data/platform/wm/rhodes/Rhodes.rc +15 -6
- data/platform/wm/rhodes/SyncStatusDlg.cpp +32 -0
- data/platform/wm/rhodes/SyncStatusDlg.h +29 -0
- data/platform/wm/rhodes/resource.h +5 -2
- data/platform/wm/rhodes/rho/common/RhoThreadImpl.cpp +3 -1
- data/platform/wm/rhodes/rho/common/RhoThreadImpl.h +1 -1
- data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +146 -14
- data/platform/wm/rhodes/rhodes.vcproj +28 -0
- data/rakefile.rb +119 -3
- data/res/build-tools/iphonesim/README +58 -0
- data/res/build-tools/iphonesim/Source/iPhoneSimulator.h +43 -0
- data/res/build-tools/iphonesim/Source/iPhoneSimulator.m +224 -0
- data/res/build-tools/iphonesim/Source/main.m +52 -0
- data/res/build-tools/iphonesim/Source/nsprintf.h +3 -0
- data/res/build-tools/iphonesim/Source/nsprintf.m +42 -0
- data/res/build-tools/iphonesim/build/Release/iphonesim +0 -0
- data/res/build-tools/iphonesim/iPhoneSimulatorRemoteClient/iPhoneSimulatorRemoteClient.h +124 -0
- data/res/build-tools/iphonesim/iphonesim.xcodeproj/project.pbxproj +261 -0
- data/res/build-tools/iphonesim/iphonesim_Prefix.pch +7 -0
- data/res/generators/rhogen.rb +5 -0
- data/res/generators/templates/application/app/layout.erb +7 -13
- data/res/generators/templates/application/app/loading.png +0 -0
- data/res/generators/templates/application/build.yml +3 -0
- data/res/generators/templates/application/icon/icon114.png +0 -0
- data/res/generators/templates/application/icon/icon57.png +0 -0
- data/res/generators/templates/application/icon/icon72.png +0 -0
- data/res/generators/templates/application/public/css/iphone.css +96 -0
- data/res/generators/templates/application/public/images/backButton.png +0 -0
- data/res/generators/templates/application/public/jqtouch/jqtouch.js +2 -1
- data/res/generators/templates/application/rhoconfig.txt +2 -0
- data/rhodes.gemspec +1 -1
- data/spec/phone_spec/app/spec/array_pack_spec.rb +108 -0
- data/spec/phone_spec/app/spec/bulksync_spec.rb +1 -0
- data/spec/phone_spec/app/spec/date_spec.rb +27 -0
- data/spec/phone_spec/app/spec/fixtures/classes.rb +91 -0
- data/spec/phone_spec/app/spec/lstrip_spec.rb +57 -0
- data/spec/phone_spec/app/spec/rho_spec.rb +50 -19
- data/spec/phone_spec/app/spec/rhom_object_spec.rb +78 -0
- data/spec/phone_spec/app/spec/rstrip_spec.rb +51 -0
- data/spec/phone_spec/app/spec/strip_spec.rb +50 -0
- data/spec/phone_spec/app/spec/syncengine_spec.rb +46 -3
- data/spec/phone_spec/app/spec_runner.rb +6 -0
- metadata +34 -4
data/CHANGELOG
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## 2.2.5
|
2
|
+
* support iPhone and iPad 4.2
|
3
|
+
* support Blackberry 6
|
4
|
+
* support Samsung Galaxy
|
5
|
+
* GPS stops by timeout on Android
|
6
|
+
* fixed several schema model issues
|
7
|
+
* NativeView on Android and Windows Mobile
|
8
|
+
* Tabbar badge for iPhone
|
9
|
+
* sms link fix for Blackberry
|
10
|
+
|
1
11
|
## 2.2.4
|
2
12
|
* Launch external browser
|
3
13
|
* Open any url (http, file etc), and run external application associated with it
|
data/Rakefile
CHANGED
@@ -51,6 +51,94 @@ namespace "framework" do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
|
54
|
+
$application_build_configs_keys = ['security_token']
|
55
|
+
|
56
|
+
def make_application_build_config_header_file
|
57
|
+
inc_file = File.join($startdir, "platform", "shared", "common", "app_build_configs.c")
|
58
|
+
File.open(inc_file, "w") do |f|
|
59
|
+
f.puts "// WARNING! THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT IT MANUALLY!"
|
60
|
+
f.puts "// Generated #{Time.now.to_s}"
|
61
|
+
f.puts ""
|
62
|
+
f.puts "#include <string.h>"
|
63
|
+
f.puts ""
|
64
|
+
f.puts '#include "app_build_configs.h"'
|
65
|
+
f.puts ""
|
66
|
+
|
67
|
+
f.puts 'static const char* keys[] = { ""'
|
68
|
+
$application_build_configs.keys.each do |key|
|
69
|
+
f.puts ',"'+key+'"'
|
70
|
+
end
|
71
|
+
f.puts '};'
|
72
|
+
f.puts ''
|
73
|
+
|
74
|
+
count = 1
|
75
|
+
|
76
|
+
f.puts 'static const char* values[] = { ""'
|
77
|
+
$application_build_configs.keys.each do |key|
|
78
|
+
f.puts ',"'+$application_build_configs[key]+'"'
|
79
|
+
count = count + 1
|
80
|
+
end
|
81
|
+
f.puts '};'
|
82
|
+
f.puts ''
|
83
|
+
|
84
|
+
f.puts '#define APP_BUILD_CONFIG_COUNT '+count.to_s
|
85
|
+
f.puts ''
|
86
|
+
f.puts 'const char* get_app_build_config_item(const char* key) {'
|
87
|
+
f.puts ' int i;'
|
88
|
+
f.puts ' for (i = 1; i < APP_BUILD_CONFIG_COUNT; i++) {'
|
89
|
+
f.puts ' if (strcmp(key, keys[i]) == 0) {'
|
90
|
+
f.puts ' return values[i];'
|
91
|
+
f.puts ' }'
|
92
|
+
f.puts ' }'
|
93
|
+
f.puts ' return 0;'
|
94
|
+
f.puts '}'
|
95
|
+
f.puts ''
|
96
|
+
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def make_application_build_config_java_file
|
101
|
+
file_name = $startdir + "/platform/bb/RubyVM/src/com/rho/AppBuildConfig.java"
|
102
|
+
|
103
|
+
File.open(file_name, "w") do |f|
|
104
|
+
f.puts "// WARNING! THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT IT MANUALLY!"
|
105
|
+
f.puts "// Generated #{Time.now.to_s}"
|
106
|
+
|
107
|
+
f.puts "package com.rho;"
|
108
|
+
f.puts ""
|
109
|
+
f.puts "public class AppBuildConfig {"
|
110
|
+
|
111
|
+
f.puts 'static final String keys[] = { ""'
|
112
|
+
$application_build_configs.keys.each do |key|
|
113
|
+
f.puts ',"'+key+'"'
|
114
|
+
end
|
115
|
+
f.puts '};'
|
116
|
+
f.puts ''
|
117
|
+
|
118
|
+
count = 1
|
119
|
+
|
120
|
+
f.puts 'static final String values[] = { ""'
|
121
|
+
$application_build_configs.keys.each do |key|
|
122
|
+
f.puts ',"'+$application_build_configs[key]+'"'
|
123
|
+
count = count + 1
|
124
|
+
end
|
125
|
+
f.puts '};'
|
126
|
+
f.puts ''
|
127
|
+
|
128
|
+
f.puts 'static final int APP_BUILD_CONFIG_COUNT = '+count.to_s + ';'
|
129
|
+
f.puts ''
|
130
|
+
f.puts 'public static String getItem(String key){'
|
131
|
+
f.puts ' for (int i = 1; i < APP_BUILD_CONFIG_COUNT; i++) {'
|
132
|
+
f.puts ' if ( key.compareTo( keys[i]) == 0) {'
|
133
|
+
f.puts ' return values[i];'
|
134
|
+
f.puts ' }'
|
135
|
+
f.puts ' }'
|
136
|
+
f.puts ' return null;'
|
137
|
+
f.puts '}'
|
138
|
+
f.puts "}"
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
54
142
|
namespace "config" do
|
55
143
|
task :common do
|
56
144
|
$startdir = File.dirname(__FILE__)
|
@@ -106,6 +194,32 @@ namespace "config" do
|
|
106
194
|
extensions += $app_config[$config["platform"]]["extensions"] if $app_config[$config["platform"]] and
|
107
195
|
$app_config[$config["platform"]]["extensions"] and $app_config[$config["platform"]]["extensions"].is_a? Array
|
108
196
|
$app_config["extensions"] = extensions
|
197
|
+
|
198
|
+
$hidden_app = $app_config["hidden_app"].nil?() ? "0" : $app_config["hidden_app"]
|
199
|
+
|
200
|
+
|
201
|
+
#application build configs
|
202
|
+
application_build_configs = {}
|
203
|
+
|
204
|
+
$application_build_configs_keys.each do |key|
|
205
|
+
value = $app_config[key]
|
206
|
+
if $app_config[$config["platform"]] != nil
|
207
|
+
if $app_config[$config["platform"]][key] != nil
|
208
|
+
value = $app_config[$config["platform"]][key]
|
209
|
+
end
|
210
|
+
end
|
211
|
+
if value != nil
|
212
|
+
application_build_configs[key] = value
|
213
|
+
end
|
214
|
+
end
|
215
|
+
$application_build_configs = application_build_configs
|
216
|
+
|
217
|
+
if $current_platform == "bb"
|
218
|
+
make_application_build_config_java_file
|
219
|
+
else
|
220
|
+
make_application_build_config_header_file
|
221
|
+
end
|
222
|
+
|
109
223
|
end
|
110
224
|
|
111
225
|
out = `javac -version 2>&1`
|
@@ -311,7 +425,7 @@ def common_bundle_start(startdir, dest)
|
|
311
425
|
clear_linker_settings
|
312
426
|
|
313
427
|
init_extensions(startdir, dest)
|
314
|
-
|
428
|
+
|
315
429
|
chdir startdir
|
316
430
|
#throw "ME"
|
317
431
|
cp_r app + '/app',File.join($srcdir,'apps'), :preserve => true
|
@@ -419,6 +533,7 @@ namespace "build" do
|
|
419
533
|
task :xruby do
|
420
534
|
#needs $config, $srcdir, $excludelib, $bindir
|
421
535
|
app = $app_path
|
536
|
+
jpath = $config["env"]["paths"]["java"]
|
422
537
|
startdir = pwd
|
423
538
|
dest = $srcdir
|
424
539
|
xruby = File.dirname(__FILE__) + '/res/build-tools/xruby-0.3.3.jar'
|
@@ -482,8 +597,9 @@ namespace "build" do
|
|
482
597
|
rm_rf $tmpdir
|
483
598
|
mkdir_p $tmpdir
|
484
599
|
chdir $srcdir
|
485
|
-
=end
|
486
|
-
|
600
|
+
=end
|
601
|
+
|
602
|
+
puts `"#{File.join(jpath,'jar')}" uf ../RhoBundle.jar apps/#{$all_files_mask}`
|
487
603
|
unless $? == 0
|
488
604
|
puts "Error creating Rhobundle.jar"
|
489
605
|
exit 1
|
data/lib/build/jake.rb
CHANGED
@@ -361,7 +361,21 @@ class Jake
|
|
361
361
|
f.write "MIDlet-1: " + title + "," + icon + ",\n"
|
362
362
|
puts "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! service_enabled: #{$service_enabled}"
|
363
363
|
$stdout.flush
|
364
|
-
|
364
|
+
|
365
|
+
if $service_enabled
|
366
|
+
if $hidden_app == "0"
|
367
|
+
f.write "RIM-MIDlet-Flags-1: 1\n"
|
368
|
+
else
|
369
|
+
f.write "RIM-MIDlet-Flags-1: 3\n"
|
370
|
+
end
|
371
|
+
else
|
372
|
+
if $hidden_app == "0"
|
373
|
+
f.write "RIM-MIDlet-Flags-1: 0\n"
|
374
|
+
else
|
375
|
+
f.write "RIM-MIDlet-Flags-1: 2\n"
|
376
|
+
end
|
377
|
+
end
|
378
|
+
|
365
379
|
end
|
366
380
|
|
367
381
|
f.close
|
data/lib/framework/dateME.rb
CHANGED
@@ -24,9 +24,14 @@ class Time
|
|
24
24
|
|
25
25
|
strRes += __makeTwoDigit(mon()) + '/' + __makeTwoDigit(mday()) + '/' + year().to_s + ', ' + __makeTwoDigit(nHour) + ':' + __makeTwoDigit(min()) + strPM;
|
26
26
|
return strRes
|
27
|
+
elsif fmt == "%Y%m%dT%H%M%S.000 GMT"
|
28
|
+
strRes = year().to_s() + __makeTwoDigit(mon()) + __makeTwoDigit(mday()) + "T" + __makeTwoDigit(hour()) + __makeTwoDigit(min()) + __makeTwoDigit(sec()) +
|
29
|
+
".000 GMT"
|
30
|
+
|
31
|
+
return strRes
|
27
32
|
end
|
28
33
|
|
29
|
-
DateTime.new(self
|
34
|
+
DateTime.new(self).strftime(fmt)
|
30
35
|
end
|
31
36
|
|
32
37
|
end
|
data/lib/framework/rho/render.rb
CHANGED
@@ -61,6 +61,16 @@ module Rho
|
|
61
61
|
binding
|
62
62
|
end
|
63
63
|
|
64
|
+
@@cached_metadata = {}
|
65
|
+
def self.cached_metadata
|
66
|
+
@@cached_metadata
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.clean_cached_metadata
|
70
|
+
@@cached_metadata.clear()
|
71
|
+
puts "meta deleted"
|
72
|
+
end
|
73
|
+
|
64
74
|
def render(options = nil)
|
65
75
|
if @params['rho_callback']
|
66
76
|
rho_error( "render call in callback. Call WebView.navigate instead" )
|
@@ -71,7 +81,6 @@ module Rho
|
|
71
81
|
options = options.symbolize_keys
|
72
82
|
|
73
83
|
metaenabled = false
|
74
|
-
clean_metadata = false
|
75
84
|
|
76
85
|
action = nil
|
77
86
|
action = options[:action] if options[:action]
|
@@ -79,14 +88,10 @@ module Rho
|
|
79
88
|
|
80
89
|
if $".include?( "rhodes_translator") and @request['model'] != nil
|
81
90
|
model = nil
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
end
|
86
|
-
if model.respond_to?( :metadata ) and model.metadata != nil
|
87
|
-
clean_metadata = true
|
88
|
-
metaenabled = model.metadata[action.to_s] != nil
|
89
|
-
end
|
91
|
+
model = Object.const_get(@request['model'].to_sym) if Object.const_defined?(@request['model'].to_sym)
|
92
|
+
if model && model.respond_to?( :metadata ) and model.metadata != nil
|
93
|
+
metaenabled = model.metadata[action.to_s] != nil
|
94
|
+
end
|
90
95
|
end
|
91
96
|
|
92
97
|
if not options[:string].nil?
|
@@ -133,17 +138,15 @@ module Rho
|
|
133
138
|
RhoController.start_geoview_notification()
|
134
139
|
@back_action = options[:back] if options[:back]
|
135
140
|
@rendered = true
|
136
|
-
model.clean_cached_metadata() if clean_metadata
|
137
141
|
@content
|
138
142
|
end
|
139
143
|
|
140
144
|
def render_metadata(action = nil,metadata = nil)
|
141
145
|
if metadata.nil?
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
if model.respond_to?( :metadata ) and model.metadata != nil
|
146
|
+
model = nil
|
147
|
+
model = Object.const_get(@request['model'].to_sym) if Object.const_defined?(@request['model'].to_sym)
|
148
|
+
|
149
|
+
if model && model.respond_to?( :metadata ) and model.metadata != nil
|
147
150
|
metadata = model.metadata
|
148
151
|
end
|
149
152
|
end
|
data/lib/framework/rho/rho.rb
CHANGED
@@ -119,7 +119,8 @@ module Rho
|
|
119
119
|
|
120
120
|
#puts "model name: #{modelName}"
|
121
121
|
|
122
|
-
modelClass =
|
122
|
+
modelClass = nil
|
123
|
+
modelClass = Object.const_get(modelName) if Object.const_defined?(modelName)
|
123
124
|
if modelClass
|
124
125
|
if modelClass.respond_to?( :get_model_params )
|
125
126
|
Rho::RhoConfig::add_source(modelName,modelClass.get_model_params())
|
@@ -197,9 +198,26 @@ module Rho
|
|
197
198
|
arSrcs = db.select_from_table('sources','source_id, name, sync_priority, partition, sync_type, schema, schema_version, associations, blob_attribs',
|
198
199
|
{'partition'=>str_partition} )
|
199
200
|
arSrcs.each do |src|
|
200
|
-
src['schema'] = '<empty_schema>' if src && !src['schema'] && db.table_exist?(src['name'])
|
201
201
|
|
202
|
+
if src && src['schema'] && src['schema'].length() > 0
|
203
|
+
|
204
|
+
#puts "src['schema'] : #{src['schema']}"
|
205
|
+
hashSchema = Rho::JSON.parse(src['schema'])
|
206
|
+
#puts "hashSchema : #{hashSchema}"
|
207
|
+
|
208
|
+
src['schema'] = {}
|
209
|
+
src['schema']['sql'] = ::Rho::RHO.make_createsql_script( src['name'], hashSchema)
|
210
|
+
src['schema_version'] = hashSchema['version']
|
211
|
+
|
212
|
+
db.update_into_table('sources', {"schema"=>src['schema']['sql'], "schema_version"=>src['schema_version']},{"name"=>src['name']})
|
213
|
+
|
214
|
+
if str_partition != 'user'
|
215
|
+
@db_partitions['user'].update_into_table('sources', {"schema"=>src['schema']['sql'], "schema_version"=>src['schema_version']},{"name"=>src['name']})
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
202
219
|
Rho::RhoConfig::sources()[ src['name'] ] = src
|
220
|
+
|
203
221
|
end
|
204
222
|
|
205
223
|
puts "sources after: #{Rho::RhoConfig::sources()}"
|
@@ -268,7 +286,9 @@ module Rho
|
|
268
286
|
init_db_sources(db, uniq_sources, partition,hash_migrate)
|
269
287
|
db.commit
|
270
288
|
rescue Exception => e
|
271
|
-
|
289
|
+
trace_msg = e.backtrace.join("\n")
|
290
|
+
puts "exception when init_db_sources: #{e}; Trace:" + trace_msg
|
291
|
+
|
272
292
|
db.rollback
|
273
293
|
end
|
274
294
|
|
@@ -276,6 +296,13 @@ module Rho
|
|
276
296
|
end
|
277
297
|
|
278
298
|
::Rho::RHO.init_schema_sources(hash_migrate)
|
299
|
+
|
300
|
+
Rho::RhoConfig::sources.values.each do|src|
|
301
|
+
['pass_through'].each do |prop|
|
302
|
+
next unless src.has_key?(prop)
|
303
|
+
SyncEngine.set_source_property(src['source_id'], prop, src[prop] ? src[prop].to_s() : '' )
|
304
|
+
end
|
305
|
+
end
|
279
306
|
end
|
280
307
|
|
281
308
|
def self.processIndexes(index_param, src_name, is_unique)
|
@@ -317,6 +344,7 @@ module Rho
|
|
317
344
|
db = get_src_db(source['name'])
|
318
345
|
|
319
346
|
next unless source['schema']
|
347
|
+
raise ArgumentError, "schema parameter should be Hash!" unless source['schema'].is_a?(Hash)
|
320
348
|
|
321
349
|
call_migrate = false
|
322
350
|
if db.table_exist?(source['name'])
|
@@ -324,25 +352,7 @@ module Rho
|
|
324
352
|
call_migrate = true
|
325
353
|
end
|
326
354
|
|
327
|
-
strCreate = source['
|
328
|
-
if source['schema']['property']
|
329
|
-
arCols = source['schema']['property']
|
330
|
-
arCols = arCols
|
331
|
-
strCols = ""
|
332
|
-
arCols.each do |col, type|
|
333
|
-
strCols += ',' if strCols.length() > 0
|
334
|
-
strCols += "\"#{col}\" varchar default NULL"
|
335
|
-
#TODO: support column type
|
336
|
-
end
|
337
|
-
|
338
|
-
strCols += ",\"object\" varchar(255) PRIMARY KEY"
|
339
|
-
strCreate = "CREATE TABLE #{source['name']} ( #{strCols} )"
|
340
|
-
end
|
341
|
-
|
342
|
-
strCreate += ";\r\n" if strCreate && strCreate.length() > 0
|
343
|
-
strCreate += processIndexes(source['schema']['index'], source['name'], false)
|
344
|
-
strCreate += ";\r\n" if strCreate && strCreate.length() > 0
|
345
|
-
strCreate += processIndexes(source['schema']['unique_index'], source['name'], true)
|
355
|
+
strCreate = make_createsql_script(source['name'], source['schema'])
|
346
356
|
|
347
357
|
if call_migrate
|
348
358
|
db.update_into_table('sources', {"schema"=>strCreate},{"name"=>source['name']})
|
@@ -356,6 +366,32 @@ module Rho
|
|
356
366
|
end
|
357
367
|
end
|
358
368
|
|
369
|
+
def self.make_createsql_script(name,schema_attr)
|
370
|
+
strCreate = schema_attr['sql']
|
371
|
+
strCreate = "" unless strCreate
|
372
|
+
if schema_attr['property']
|
373
|
+
arCols = schema_attr['property']
|
374
|
+
arCols = arCols
|
375
|
+
strCols = ""
|
376
|
+
arCols.each do |col, type|
|
377
|
+
strCols += ',' if strCols.length() > 0
|
378
|
+
strCols += "\"#{col}\" varchar default NULL"
|
379
|
+
#TODO: support column type
|
380
|
+
end
|
381
|
+
|
382
|
+
strCols += ',' if strCols.length() > 0
|
383
|
+
strCols += "\"object\" varchar(255) PRIMARY KEY"
|
384
|
+
strCreate = "CREATE TABLE \"#{name}\" ( #{strCols} )"
|
385
|
+
end
|
386
|
+
|
387
|
+
strCreate += ";\r\n" if strCreate && strCreate.length() > 0
|
388
|
+
strCreate += processIndexes(schema_attr['index'], name, false)
|
389
|
+
strCreate += ";\r\n" if strCreate && strCreate.length() > 0
|
390
|
+
strCreate += processIndexes(schema_attr['unique_index'], name, true)
|
391
|
+
|
392
|
+
strCreate
|
393
|
+
end
|
394
|
+
|
359
395
|
def process_blob_attribs(source, db)
|
360
396
|
return source['str_blob_attribs'] if source['str_blob_attribs']
|
361
397
|
source['str_blob_attribs'] = ""
|
@@ -386,16 +422,35 @@ module Rho
|
|
386
422
|
source['str_blob_attribs']
|
387
423
|
|
388
424
|
end
|
425
|
+
|
426
|
+
def get_start_id(db_sources)
|
427
|
+
start_id = 0
|
428
|
+
db_sources.each do |db_src|
|
429
|
+
src_id = db_src['source_id']
|
430
|
+
start_id = src_id if src_id > start_id
|
431
|
+
end
|
432
|
+
|
433
|
+
start_id = Rho::RhoConfig.max_config_srcid()+2 if start_id < Rho::RhoConfig.max_config_srcid
|
434
|
+
puts "start_id: #{start_id}"
|
435
|
+
start_id
|
436
|
+
end
|
389
437
|
|
390
|
-
def
|
438
|
+
def find_src_byname(db_sources, name)
|
439
|
+
db_sources.each do |db_src|
|
440
|
+
return db_src if db_src['name'] == name
|
441
|
+
end
|
442
|
+
|
443
|
+
nil
|
444
|
+
end
|
391
445
|
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
446
|
+
def init_db_sources(db, uniq_sources, db_partition, hash_migrate)
|
447
|
+
puts "init_db_sources"
|
448
|
+
|
449
|
+
db_sources = db.select_from_table('sources','sync_priority,source_id,partition, sync_type, schema_version, associations, blob_attribs, name' )
|
450
|
+
start_id = get_start_id(db_sources)
|
396
451
|
|
397
452
|
uniq_sources.each do |source|
|
398
|
-
puts "init_db_sources(#{source['name']}) : #{source}"
|
453
|
+
#puts "init_db_sources(#{source['name']}) : #{source}"
|
399
454
|
name = source['name']
|
400
455
|
sync_priority = source['sync_priority']
|
401
456
|
partition = source['partition']
|
@@ -404,34 +459,36 @@ module Rho
|
|
404
459
|
associations = source['str_associations']
|
405
460
|
blob_attribs = process_blob_attribs(source, db)
|
406
461
|
|
407
|
-
attribs = db.select_from_table('sources','sync_priority,source_id,partition, sync_type, schema_version, associations, blob_attribs', {'name'=>name})
|
408
|
-
|
409
|
-
|
462
|
+
#attribs = db.select_from_table('sources','sync_priority,source_id,partition, sync_type, schema_version, associations, blob_attribs', {'name'=>name})
|
463
|
+
attribs = find_src_byname(db_sources,name)
|
464
|
+
|
465
|
+
if attribs
|
466
|
+
if attribs['sync_priority'].to_i != sync_priority.to_i
|
410
467
|
db.update_into_table('sources', {"sync_priority"=>sync_priority},{"name"=>name})
|
411
468
|
end
|
412
|
-
if attribs[
|
469
|
+
if attribs['sync_type'] != sync_type
|
413
470
|
db.update_into_table('sources', {"sync_type"=>sync_type},{"name"=>name})
|
414
471
|
end
|
415
|
-
if attribs[
|
472
|
+
if attribs['schema_version'] != schema_version
|
416
473
|
if db_partition == partition
|
417
|
-
hash_migrate[name] = attribs[
|
474
|
+
hash_migrate[name] = attribs['schema_version']
|
418
475
|
else
|
419
476
|
db.update_into_table('sources', {"schema_version"=>schema_version},{"name"=>name})
|
420
477
|
end
|
421
478
|
end
|
422
|
-
if attribs[
|
479
|
+
if attribs['partition'] != partition
|
423
480
|
db.update_into_table('sources', {"partition"=>partition},{"name"=>name})
|
424
481
|
end
|
425
|
-
if attribs[
|
482
|
+
if attribs['associations'] != associations
|
426
483
|
db.update_into_table('sources', {"associations"=>associations},{"name"=>name})
|
427
484
|
end
|
428
|
-
if attribs[
|
485
|
+
if attribs['blob_attribs'] != blob_attribs
|
429
486
|
db.update_into_table('sources', {"blob_attribs"=>blob_attribs},{"name"=>name})
|
430
487
|
end
|
431
488
|
|
432
489
|
if !source['source_id']
|
433
|
-
source['source_id'] = attribs[
|
434
|
-
Rho::RhoConfig::sources[name]['source_id'] = attribs[
|
490
|
+
source['source_id'] = attribs['source_id'].to_i
|
491
|
+
Rho::RhoConfig::sources[name]['source_id'] = attribs['source_id'].to_i
|
435
492
|
end
|
436
493
|
|
437
494
|
else
|
@@ -455,9 +512,11 @@ module Rho
|
|
455
512
|
|
456
513
|
def serve(req)
|
457
514
|
begin
|
458
|
-
puts
|
515
|
+
puts "RHO serve: " + (req ? "#{req['request-uri']}" : '')
|
459
516
|
res = init_response
|
460
517
|
get_app(req['application']).send :serve, req, res
|
518
|
+
|
519
|
+
Rho::RhoController.clean_cached_metadata()
|
461
520
|
return send_response(res)
|
462
521
|
rescue Exception => e
|
463
522
|
return send_error(e)
|
@@ -466,9 +525,10 @@ module Rho
|
|
466
525
|
|
467
526
|
def serve_hash(req)
|
468
527
|
begin
|
469
|
-
puts
|
528
|
+
puts "RHO serve: " + (req ? "#{req['request-uri']}" : '')
|
470
529
|
res = init_response
|
471
530
|
get_app(req['application']).send :serve, req, res
|
531
|
+
Rho::RhoController.clean_cached_metadata()
|
472
532
|
return send_response_hash(res)
|
473
533
|
rescue Exception => e
|
474
534
|
return send_error(e,500,true)
|
@@ -479,9 +539,10 @@ module Rho
|
|
479
539
|
# TODO: Removed hardcoded appname
|
480
540
|
get_app(APPNAME).set_menu
|
481
541
|
begin
|
482
|
-
puts
|
542
|
+
puts "RHO serve_index: " + (req ? "#{req['request-uri']}" : '')
|
483
543
|
res = init_response
|
484
544
|
res['request-body'] = RhoController::renderfile(index_name, req, res)
|
545
|
+
Rho::RhoController.clean_cached_metadata()
|
485
546
|
return send_response(res)
|
486
547
|
rescue Exception => e
|
487
548
|
return send_error(e)
|
@@ -492,9 +553,10 @@ module Rho
|
|
492
553
|
# TODO: Removed hardcoded appname
|
493
554
|
get_app(APPNAME).set_menu
|
494
555
|
begin
|
495
|
-
puts
|
556
|
+
puts "RHO serve_index: " + (req ? "#{req['request-uri']}" : '')
|
496
557
|
res = init_response
|
497
558
|
res['request-body'] = RhoController::renderfile(index_name, req, res)
|
559
|
+
Rho::RhoController.clean_cached_metadata()
|
498
560
|
return send_response_hash(res)
|
499
561
|
rescue Exception => e
|
500
562
|
return send_error(e, 500, true)
|
@@ -70,7 +70,7 @@ module Rho
|
|
70
70
|
@default_menu = {} if @default_menu.nil?
|
71
71
|
disp_menu = menu ? menu.dup : @default_menu.dup
|
72
72
|
disp_menu['Back'] = back_action if back_action
|
73
|
-
puts "RhoApplication: Using menu - #{disp_menu.inspect}"
|
73
|
+
#puts "RhoApplication: Using menu - #{disp_menu.inspect}"
|
74
74
|
WebView.set_menu_items(disp_menu)
|
75
75
|
end
|
76
76
|
|
@@ -3,24 +3,40 @@ require 'bsearch'
|
|
3
3
|
module Rho
|
4
4
|
class RhoContact
|
5
5
|
class << self
|
6
|
-
|
7
|
-
|
6
|
+
def open_phonebook()
|
7
|
+
return Phonebook::openPhonebook
|
8
|
+
end
|
9
|
+
def close_phonebook(phonebook)
|
10
|
+
Phonebook::closePhonebook(phonebook)
|
11
|
+
end
|
12
|
+
def find(param, properties_list = nil, phonebook = nil)
|
13
|
+
pb = phonebook
|
14
|
+
if phonebook == nil
|
15
|
+
pb = Phonebook::openPhonebook
|
16
|
+
end
|
8
17
|
if pb.nil?
|
9
18
|
puts "Can't open phonebook"
|
10
19
|
return nil
|
11
20
|
elsif param == :all or param == 'all'
|
12
21
|
records = Phonebook::getallPhonebookRecords(pb)
|
13
|
-
|
22
|
+
if phonebook == nil
|
23
|
+
Phonebook::closePhonebook(pb)
|
24
|
+
end
|
14
25
|
return records
|
15
26
|
else
|
16
27
|
record = Phonebook::getPhonebookRecord(pb,param)
|
17
|
-
|
28
|
+
if phonebook == nil
|
29
|
+
Phonebook::closePhonebook(pb)
|
30
|
+
end
|
18
31
|
return record
|
19
32
|
end
|
20
33
|
end
|
21
34
|
|
22
|
-
def create!(properties)
|
23
|
-
|
35
|
+
def create!(properties, phonebook = nil)
|
36
|
+
pb = phonebook
|
37
|
+
if phonebook == nil
|
38
|
+
pb = Phonebook::openPhonebook
|
39
|
+
end
|
24
40
|
unless pb.nil?
|
25
41
|
record = Phonebook::createRecord(pb)
|
26
42
|
if record.nil?
|
@@ -31,12 +47,17 @@ module Rho
|
|
31
47
|
end
|
32
48
|
Phonebook::addRecord(pb,record)
|
33
49
|
end
|
34
|
-
|
50
|
+
if phonebook == nil
|
51
|
+
Phonebook::closePhonebook(pb)
|
52
|
+
end
|
35
53
|
end
|
36
54
|
end
|
37
55
|
|
38
|
-
def destroy(recordId)
|
39
|
-
|
56
|
+
def destroy(recordId, phonebook = nil)
|
57
|
+
pb = phonebook
|
58
|
+
if phonebook == nil
|
59
|
+
pb = Phonebook::openPhonebook
|
60
|
+
end
|
40
61
|
unless pb.nil?
|
41
62
|
record = Phonebook::openPhonebookRecord(pb,recordId)
|
42
63
|
if record.nil?
|
@@ -44,12 +65,17 @@ module Rho
|
|
44
65
|
else
|
45
66
|
Phonebook::deleteRecord(pb,record)
|
46
67
|
end
|
47
|
-
|
68
|
+
if phonebook == nil
|
69
|
+
Phonebook::closePhonebook(pb)
|
70
|
+
end
|
48
71
|
end
|
49
72
|
end
|
50
73
|
|
51
|
-
def update_attributes(properties)
|
52
|
-
|
74
|
+
def update_attributes(properties, phonebook = nil)
|
75
|
+
pb = phonebook
|
76
|
+
if phonebook == nil
|
77
|
+
pb = Phonebook::openPhonebook
|
78
|
+
end
|
53
79
|
unless pb.nil?
|
54
80
|
record = Phonebook::openPhonebookRecord(pb,properties['id'])
|
55
81
|
if record.nil?
|
@@ -60,7 +86,9 @@ module Rho
|
|
60
86
|
end
|
61
87
|
Phonebook::saveRecord(pb,record)
|
62
88
|
end
|
63
|
-
|
89
|
+
if phonebook == nil
|
90
|
+
Phonebook::closePhonebook(pb)
|
91
|
+
end
|
64
92
|
end
|
65
93
|
end
|
66
94
|
|
@@ -7,7 +7,7 @@ module Rho
|
|
7
7
|
attr_accessor :menu
|
8
8
|
|
9
9
|
@@rholog = RhoLog.new
|
10
|
-
|
10
|
+
@@before = nil
|
11
11
|
def rho_info(str)
|
12
12
|
@@rholog.info("RHO " + self.class.to_s, str)
|
13
13
|
end
|
@@ -42,6 +42,11 @@ module Rho
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
+
def self.before(&block)
|
46
|
+
@@before = {} unless @@before
|
47
|
+
@@before[self.to_s] = block if block_given?
|
48
|
+
end
|
49
|
+
|
45
50
|
def serve(application,object_mapping,req,res)
|
46
51
|
@request, @response = req, res
|
47
52
|
@object_mapping = object_mapping
|
@@ -51,6 +56,10 @@ module Rho
|
|
51
56
|
|
52
57
|
RhoController.process_rho_object(@params)
|
53
58
|
|
59
|
+
if @@before and @@before[self.class.to_s] and not @params['rho_callback']
|
60
|
+
@@before[self.class.to_s].call(@params,@request)
|
61
|
+
end
|
62
|
+
|
54
63
|
act = req['action'].nil? ? default_action : req['action']
|
55
64
|
if self.respond_to?(act)
|
56
65
|
res = send req['action'].nil? ? default_action : req['action']
|