rhodes 2.0.0 → 2.0.2
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.
- data/CHANGELOG +6 -0
- data/Manifest.txt +3 -1
- data/bin/rhodes-setup +1 -32
- data/lib/framework/erb.rb +3 -3
- data/lib/framework/rhodes.rb +2 -2
- data/lib/framework/version.rb +2 -2
- data/lib/rhodes.rb +2 -2
- data/platform/android/Rhodes/AndroidManifest.xml +3 -2
- data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_Rhodes.h +2 -2
- data/platform/android/Rhodes/jni/src/rhodes.cpp +7 -5
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Capabilities.java +2 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +15 -6
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java +5 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java +8 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessor.java +11 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorNew.java +310 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorOld.java +275 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Phonebook.java +125 -322
- data/platform/android/build/RhodesSRC_build.files +23 -21
- data/platform/android/build/android.rake +40 -17
- data/platform/iphone/Info.plist +1 -1
- data/platform/iphone/rbuild/iphone.rake +58 -33
- data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +1 -1
- data/platform/shared/common/RhoPort.h +18 -3
- data/platform/shared/common/RhodesApp.cpp +76 -54
- data/platform/shared/common/StringConverter.h +3 -2
- data/platform/shared/common/stat.h +29 -4
- data/platform/shared/db/DBAdapter.cpp +2 -1
- data/platform/shared/db/DBAdapter.h +1 -1
- data/platform/shared/json/RJSONTokener.c +1 -1
- data/platform/shared/json/json_object.c +2 -2
- data/platform/shared/json/json_tokener.c +1 -1
- data/rhodes.gemspec +1 -1
- data/spec/phone_spec/app/Spec/contacts_spec.rb +10 -3
- data/spec/phone_spec/app/Spec/controller.rb +3 -3
- data/spec/phone_spec/app/Spec/mapview_spec.rb +3 -1
- data/spec/phone_spec/build.yml +2 -1
- metadata +6 -4
- data/rhobuild.yml +0 -39
@@ -1,40 +1,44 @@
|
|
1
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java
|
2
1
|
platform/android/Rhodes/src/com/rhomobile/rhodes/AndroidR.java
|
2
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/HttpLog.java
|
3
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/Logger.java
|
4
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/NativeBar.java
|
5
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/NavBar.java
|
6
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/NetworkConnectivityListener.java
|
7
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/NetworkStateTracker.java
|
8
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/RhoConf.java
|
9
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/RhoLogConf.java
|
10
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/RhoMenu.java
|
11
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java
|
12
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesInstance.java
|
13
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/RingtoneManager.java
|
14
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/SplashScreen.java
|
15
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/Utils.java
|
16
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/WebView.java
|
17
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java
|
3
18
|
platform/android/Rhodes/src/com/rhomobile/rhodes/camera/Camera.java
|
4
19
|
platform/android/Rhodes/src/com/rhomobile/rhodes/camera/FileList.java
|
5
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCaptureCallback.java
|
6
20
|
platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java
|
7
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/
|
21
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCaptureCallback.java
|
8
22
|
platform/android/Rhodes/src/com/rhomobile/rhodes/datetime/DateTimePicker.java
|
9
23
|
platform/android/Rhodes/src/com/rhomobile/rhodes/datetime/DateTimePickerScreen.java
|
10
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java
|
11
24
|
platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java
|
12
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/
|
13
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/Logger.java
|
25
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java
|
14
26
|
platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/MainView.java
|
15
27
|
platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java
|
16
28
|
platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/TabbedMainView.java
|
17
29
|
platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/Annotation.java
|
18
30
|
platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/AnnotationsOverlay.java
|
19
31
|
platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/MapView.java
|
20
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/NativeBar.java
|
21
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/NavBar.java
|
22
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/NetworkConnectivityListener.java
|
23
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/NetworkStateTracker.java
|
24
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactField.java
|
25
32
|
platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java
|
33
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessor.java
|
34
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorNew.java
|
35
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorOld.java
|
36
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactField.java
|
26
37
|
platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Phonebook.java
|
27
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/RhoConf.java
|
28
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesInstance.java
|
29
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java
|
30
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/RhoLogConf.java
|
31
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/RhoMenu.java
|
32
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/RingtoneManager.java
|
33
38
|
platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSockAddr.java
|
34
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSocketImpl.java
|
35
39
|
platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSocket.java
|
40
|
+
platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSocketImpl.java
|
36
41
|
platform/android/Rhodes/src/com/rhomobile/rhodes/socket/SSLImpl.java
|
37
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/SplashScreen.java
|
38
42
|
platform/android/Rhodes/src/com/rhomobile/rhodes/ui/AboutDialog.java
|
39
43
|
platform/android/Rhodes/src/com/rhomobile/rhodes/ui/LogOptionsDialog.java
|
40
44
|
platform/android/Rhodes/src/com/rhomobile/rhodes/ui/LogViewDialog.java
|
@@ -43,5 +47,3 @@ platform/android/Rhodes/src/com/rhomobile/rhodes/uri/SmsUriHandler.java
|
|
43
47
|
platform/android/Rhodes/src/com/rhomobile/rhodes/uri/TelUriHandler.java
|
44
48
|
platform/android/Rhodes/src/com/rhomobile/rhodes/uri/UriHandler.java
|
45
49
|
platform/android/Rhodes/src/com/rhomobile/rhodes/uri/VideoUriHandler.java
|
46
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/Utils.java
|
47
|
-
platform/android/Rhodes/src/com/rhomobile/rhodes/WebView.java
|
@@ -27,11 +27,13 @@ end
|
|
27
27
|
ANDROID_API_LEVEL = 3
|
28
28
|
|
29
29
|
ANDROID_PERMISSIONS = {
|
30
|
+
'audio' => ['RECORD_AUDIO', 'MODIFY_AUDIO_SETTINGS'],
|
30
31
|
'camera' => 'CAMERA',
|
31
32
|
'gps' => 'ACCESS_FINE_LOCATION',
|
32
33
|
'network_state' => 'ACCESS_NETWORK_STATE',
|
33
34
|
'phone' => ['CALL_PHONE', 'READ_PHONE_STATE'],
|
34
|
-
'pim' => ['READ_CONTACTS', 'WRITE_CONTACTS'],
|
35
|
+
'pim' => ['READ_CONTACTS', 'WRITE_CONTACTS', 'GET_ACCOUNTS'],
|
36
|
+
'record_audio' => 'RECORD_AUDIO',
|
35
37
|
'vibrate' => 'VIBRATE'
|
36
38
|
}
|
37
39
|
|
@@ -77,7 +79,7 @@ def set_app_name_android(newname)
|
|
77
79
|
end
|
78
80
|
doc.elements.delete "manifest/application/uses-library[@android:name='com.google.android.maps']" unless $use_geomapping
|
79
81
|
|
80
|
-
caps = ['INTERNET']
|
82
|
+
caps = ['INTERNET', 'PERSISTENT_ACTIVITY']
|
81
83
|
$app_config["capabilities"].each do |cap|
|
82
84
|
cap = ANDROID_PERMISSIONS[cap]
|
83
85
|
next if cap.nil?
|
@@ -89,7 +91,7 @@ def set_app_name_android(newname)
|
|
89
91
|
|
90
92
|
manifest = doc.elements["manifest"]
|
91
93
|
manifest.elements.each('uses-permission') { |e| manifest.delete e }
|
92
|
-
caps.each do |cap|
|
94
|
+
caps.sort.each do |cap|
|
93
95
|
element = REXML::Element.new('uses-permission')
|
94
96
|
element.add_attribute('android:name', "android.permission.#{cap}")
|
95
97
|
manifest.add element
|
@@ -125,8 +127,6 @@ namespace "config" do
|
|
125
127
|
|
126
128
|
$emuversion = $app_config["android"]["version"] unless $app_config["android"].nil?
|
127
129
|
$emuversion = $config["android"]["version"] if $emuversion.nil? and !$config["android"].nil?
|
128
|
-
$emuversion = get_market_version(ANDROID_API_LEVEL) if $emuversion.nil?
|
129
|
-
$emuversion = $emuversion.to_s unless $emuversion.nil?
|
130
130
|
|
131
131
|
# Here is switch between release/debug configuration used for
|
132
132
|
# building native libraries
|
@@ -176,6 +176,7 @@ namespace "config" do
|
|
176
176
|
$app_android_r = File.join $tmpdir, "AndroidR.java"
|
177
177
|
$app_rjava_dir = File.join $tmpdir
|
178
178
|
$app_native_libs_java = File.join $tmpdir, "NativeLibraries.java"
|
179
|
+
$app_capabilities_java = File.join $tmpdir, "Capabilities.java"
|
179
180
|
|
180
181
|
if RUBY_PLATFORM =~ /(win|w)32$/
|
181
182
|
$emulator = #"cmd /c " +
|
@@ -206,10 +207,11 @@ namespace "config" do
|
|
206
207
|
end
|
207
208
|
|
208
209
|
puts "+++ Looking for platform..." if USE_TRACES
|
210
|
+
napilevel = ANDROID_API_LEVEL
|
209
211
|
Dir.glob(File.join($androidsdkpath, "platforms", "*")).each do |platform|
|
210
212
|
props = File.join(platform, "source.properties")
|
211
213
|
unless File.file? props
|
212
|
-
puts "+++ WARNING! No source.properties found in #{platform}"
|
214
|
+
puts "+++ WARNING! No source.properties found in #{platform}"
|
213
215
|
next
|
214
216
|
end
|
215
217
|
|
@@ -224,7 +226,11 @@ namespace "config" do
|
|
224
226
|
|
225
227
|
puts "+++ API LEVEL of #{platform}: #{apilevel}" if USE_TRACES
|
226
228
|
|
227
|
-
|
229
|
+
if apilevel > napilevel
|
230
|
+
napilevel = apilevel
|
231
|
+
$androidplatform = File.basename(platform)
|
232
|
+
$found_api_level = apilevel
|
233
|
+
end
|
228
234
|
end
|
229
235
|
|
230
236
|
if $androidplatform.nil?
|
@@ -233,7 +239,7 @@ namespace "config" do
|
|
233
239
|
end
|
234
240
|
|
235
241
|
if $androidplatform.nil?
|
236
|
-
puts "+++ No required platform (API level #{ANDROID_API_LEVEL}) found, can't proceed"
|
242
|
+
puts "+++ No required platform (API level >= #{ANDROID_API_LEVEL}) found, can't proceed"
|
237
243
|
exit 1
|
238
244
|
else
|
239
245
|
puts "+++ Platform found: #{$androidplatform}" if USE_TRACES
|
@@ -282,19 +288,15 @@ namespace "config" do
|
|
282
288
|
end
|
283
289
|
end
|
284
290
|
|
285
|
-
$avdname = "rhoAndroid" + $emuversion.gsub(/[^0-9]/, "")
|
286
|
-
$avdname += "ext" if $use_geomapping
|
287
|
-
$avdtarget = $androidtargets[get_api_level($emuversion)]
|
288
|
-
|
289
291
|
# Detect Google API add-on path
|
290
292
|
if $use_geomapping
|
291
293
|
puts "+++ Looking for Google APIs add-on..." if USE_TRACES
|
294
|
+
napilevel = ANDROID_API_LEVEL
|
292
295
|
Dir.glob(File.join($androidsdkpath, 'add-ons', '*')).each do |dir|
|
293
|
-
break unless $gapijar.nil?
|
294
296
|
|
295
297
|
props = File.join(dir, 'manifest.ini')
|
296
298
|
if !File.file? props
|
297
|
-
puts "+++ WARNING: no manifest.ini found in #{dir}"
|
299
|
+
puts "+++ WARNING: no manifest.ini found in #{dir}"
|
298
300
|
next
|
299
301
|
end
|
300
302
|
|
@@ -309,7 +311,11 @@ namespace "config" do
|
|
309
311
|
|
310
312
|
puts "+++ API LEVEL of #{dir}: #{apilevel}" if USE_TRACES
|
311
313
|
|
312
|
-
|
314
|
+
if apilevel > napilevel
|
315
|
+
napilevel = apilevel
|
316
|
+
$gapijar = File.join(dir, 'libs', 'maps.jar')
|
317
|
+
$found_api_level = apilevel
|
318
|
+
end
|
313
319
|
end
|
314
320
|
if $gapijar.nil?
|
315
321
|
puts "+++ No Google APIs add-on found (which is required because 'mapping' enabled in build.yml)"
|
@@ -319,7 +325,13 @@ namespace "config" do
|
|
319
325
|
end
|
320
326
|
end
|
321
327
|
|
322
|
-
|
328
|
+
$emuversion = get_market_version($found_api_level) if $emuversion.nil?
|
329
|
+
$emuversion = $emuversion.to_s
|
330
|
+
$avdname = "rhoAndroid" + $emuversion.gsub(/[^0-9]/, "")
|
331
|
+
$avdname += "ext" if $use_geomapping
|
332
|
+
$avdtarget = $androidtargets[get_api_level($emuversion)]
|
333
|
+
|
334
|
+
setup_ndk($androidndkpath, ANDROID_API_LEVEL)
|
323
335
|
|
324
336
|
$stlport_includes = File.join $shareddir, "stlport", "stlport"
|
325
337
|
|
@@ -668,7 +680,7 @@ namespace "build" do
|
|
668
680
|
puts "Need to regenerate rhocaps.inc"
|
669
681
|
$stdout.flush
|
670
682
|
File.open(rhocaps_inc, 'w') do |f|
|
671
|
-
ANDROID_PERMISSIONS.keys.each do |k|
|
683
|
+
ANDROID_PERMISSIONS.keys.sort.each do |k|
|
672
684
|
f.puts "RHO_DEFINE_CAP(#{k.upcase})"
|
673
685
|
end
|
674
686
|
end
|
@@ -676,6 +688,16 @@ namespace "build" do
|
|
676
688
|
puts "No need to regenerate rhocaps.inc"
|
677
689
|
$stdout.flush
|
678
690
|
end
|
691
|
+
|
692
|
+
# Generate Capabilities.java
|
693
|
+
File.open($app_capabilities_java, "w") do |f|
|
694
|
+
f.puts "package com.rhomobile.rhodes;"
|
695
|
+
f.puts "public class Capabilities {"
|
696
|
+
ANDROID_PERMISSIONS.keys.sort.each do |k|
|
697
|
+
f.puts " public static boolean #{k.upcase}_ENABLED = true;"
|
698
|
+
end
|
699
|
+
f.puts "}"
|
700
|
+
end
|
679
701
|
end
|
680
702
|
|
681
703
|
task :gen_java_ext => "config:android" do
|
@@ -811,6 +833,7 @@ namespace "build" do
|
|
811
833
|
end
|
812
834
|
lines << $app_android_r
|
813
835
|
lines << $app_native_libs_java
|
836
|
+
lines << $app_capabilities_java
|
814
837
|
if File.exists? File.join($extensionsdir, "ext_build.files")
|
815
838
|
File.open(File.join($extensionsdir, "ext_build.files")) do |f|
|
816
839
|
while line = f.gets
|
data/platform/iphone/Info.plist
CHANGED
@@ -76,10 +76,10 @@ namespace "config" do
|
|
76
76
|
$excludelib = ['**/builtinME.rb','**/ServeME.rb','**/TestServe.rb']
|
77
77
|
$tmpdir = $bindir +"/tmp"
|
78
78
|
|
79
|
-
$homedir =
|
79
|
+
$homedir = ENV['HOME']
|
80
80
|
$simdir = "#{$homedir}/Library/Application Support/iPhone Simulator/"
|
81
81
|
$sim="/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications"
|
82
|
-
$guid=
|
82
|
+
$guid = `uuidgen`.strip
|
83
83
|
$applog = File.join($homedir,$app_config["applog"]) if $app_config["applog"]
|
84
84
|
|
85
85
|
|
@@ -171,7 +171,9 @@ namespace "build" do
|
|
171
171
|
task :rhodes => ["config:iphone", "build:iphone:rhobundle"] do
|
172
172
|
|
173
173
|
set_app_name($app_config["name"]) unless $app_config["name"].nil?
|
174
|
-
|
174
|
+
ipath = $config["build"]["iphonepath"]
|
175
|
+
cp File.join(ipath, 'icon.png'), File.join(ipath, 'icon.png.bak') unless File.exists? File.join(ipath, 'icon.png.bak')
|
176
|
+
cp $app_path + "/icon/icon.png", ipath
|
175
177
|
|
176
178
|
set_signing_identity($signidentity,$provisionprofile,$entitlements.to_s) if $signidentity.to_s != ""
|
177
179
|
|
@@ -179,11 +181,18 @@ namespace "build" do
|
|
179
181
|
args = ['build', '-target', 'rhorunner', '-configuration', $configuration, '-sdk', $sdk]
|
180
182
|
|
181
183
|
puts Jake.run("xcodebuild",args)
|
182
|
-
|
184
|
+
ret = $?
|
185
|
+
|
186
|
+
chdir $startdir
|
187
|
+
set_app_name("Rhodes") unless $app_config["name"].nil?
|
188
|
+
rm_f File.join(ipath, 'icon.png')
|
189
|
+
cp File.join(ipath, 'icon.png.bak'), File.join(ipath, 'icon.png')
|
190
|
+
rm_f File.join(ipath, 'icon.png.bak')
|
191
|
+
|
192
|
+
unless ret == 0
|
183
193
|
puts "Error cleaning"
|
184
194
|
exit 1
|
185
195
|
end
|
186
|
-
chdir $startdir
|
187
196
|
|
188
197
|
end
|
189
198
|
|
@@ -198,50 +207,66 @@ namespace "run" do
|
|
198
207
|
exit 1
|
199
208
|
end
|
200
209
|
`killall "iPhone Simulator"`
|
210
|
+
|
211
|
+
puts "sdk: #{$sdk.inspect.to_s}"
|
212
|
+
sdkver = $sdk.gsub(/^iphonesimulator/, '')
|
201
213
|
|
202
214
|
rhorunner = $config["build"]["iphonepath"] + "/build/#{$configuration}-iphonesimulator/rhorunner.app"
|
215
|
+
puts "rhorunner: #{rhorunner}"
|
203
216
|
|
204
217
|
|
205
|
-
|
206
|
-
|
207
|
-
|
218
|
+
puts "our app name: #{$app_config['name']}"
|
219
|
+
puts "simdir: #{$simdir}"
|
220
|
+
Dir.glob(File.join($simdir, sdkver, "Applications", "*")).each do |simapppath|
|
221
|
+
need_rm = true if File.directory? simapppath
|
222
|
+
if File.exists?(File.join(simapppath, 'rhorunner.app', 'name'))
|
223
|
+
name = File.read(File.join(simapppath, 'rhorunner.app', 'name'))
|
224
|
+
puts "found app name: #{name}"
|
225
|
+
guid = File.basename(simapppath)
|
226
|
+
puts "found guid: #{guid}"
|
227
|
+
if name == $app_config['name']
|
228
|
+
$guid = guid
|
229
|
+
need_rm = false
|
230
|
+
end
|
208
231
|
end
|
232
|
+
rm_rf simapppath if need_rm
|
233
|
+
rm_rf simapppath + ".sb" if need_rm
|
209
234
|
end
|
210
235
|
|
211
|
-
|
212
|
-
simapp = sdk + "/Applications"
|
213
|
-
simlink = sdk + "/Library/Preferences"
|
236
|
+
puts "app guid: #{$guid}"
|
214
237
|
|
215
|
-
|
216
|
-
$simrhodes = simrhodes if $simrhodes.nil?
|
238
|
+
mkdir_p File.join($simdir, sdkver)
|
217
239
|
|
218
|
-
|
219
|
-
|
240
|
+
simapp = File.join($simdir, sdkver, "Applications")
|
241
|
+
simlink = File.join($simdir, sdkver, "Library", "Preferences")
|
220
242
|
|
221
|
-
|
222
|
-
`ln -f -s "#{simlink}/com.apple.PeoplePicker.plist" "#{simrhodes}/Library/Preferences/com.apple.PeoplePicker.plist"`
|
223
|
-
`ln -f -s "#{simlink}/.GlobalPreferences.plist" "#{simrhodes}/Library/Preferences/.GlobalPreferences.plist"`
|
243
|
+
$simrhodes = File.join(simapp, $guid)
|
224
244
|
|
225
|
-
|
226
|
-
|
245
|
+
mkdir_p File.join($simrhodes, "Documents")
|
246
|
+
mkdir_p File.join($simrhodes, "Library", "Preferences")
|
227
247
|
|
248
|
+
rm_rf File.join($simrhodes, 'rhorunner.app')
|
249
|
+
cp_r rhorunner, $simrhodes
|
250
|
+
['com.apple.PeoplePicker.plist', '.GlobalPreferences.plist'].each do |f|
|
251
|
+
`ln -f -s "#{simlink}/#{f}" "#{$simrhodes}/Library/Preferences/#{f}"`
|
252
|
+
end
|
228
253
|
|
229
|
-
|
230
|
-
|
254
|
+
`echo "#{$applog}" > "#{$simrhodes}/Documents/rhologpath.txt"`
|
255
|
+
rholog = simapp + "/" + $guid + "/Documents/RhoLog.txt"
|
231
256
|
|
232
|
-
apprholog = $app_path + "/rholog-#{File.basename(sdk)}.txt"
|
233
|
-
rm_f apprholog
|
234
|
-
rm_f apppublic
|
235
|
-
`ln -f -s "#{simpublic}" "#{apppublic}"`
|
236
|
-
`ln -f -s "#{rholog}" "#{apprholog}"`
|
237
|
-
`echo > "#{rholog}"`
|
238
|
-
f = File.new("#{simapp}/#{$guid}.sb","w")
|
239
|
-
f << "(version 1)\n(debug deny)\n(allow default)\n"
|
240
|
-
f.close
|
241
257
|
|
258
|
+
simpublic = simapp + "/" + $guid + "/Documents/apps/public"
|
259
|
+
apppublic = $app_path + "/sim-public-#{sdkver}"
|
242
260
|
|
243
|
-
|
244
|
-
|
261
|
+
apprholog = $app_path + "/rholog-#{sdkver}.txt"
|
262
|
+
rm_f apprholog
|
263
|
+
rm_f apppublic
|
264
|
+
`ln -f -s "#{simpublic}" "#{apppublic}"`
|
265
|
+
`ln -f -s "#{rholog}" "#{apprholog}"`
|
266
|
+
`echo > "#{rholog}"`
|
267
|
+
f = File.new("#{simapp}/#{$guid}.sb","w")
|
268
|
+
f << "(version 1)\n(debug deny)\n(allow default)\n"
|
269
|
+
f.close
|
245
270
|
|
246
271
|
end
|
247
272
|
|
@@ -739,7 +739,7 @@
|
|
739
739
|
);
|
740
740
|
runOnlyForDeploymentPostprocessing = 0;
|
741
741
|
shellPath = /bin/sh;
|
742
|
-
shellScript = "RHO_SOURCE_DIR=${TARGET_BUILD_DIR}/../../bin/RhoBundle\nRHO_TARGET_DIR=${TARGET_BUILD_DIR}/${TARGET_NAME}.app\nmkdir -p ${RHO_TARGET_DIR}\ncp -Rf ${RHO_SOURCE_DIR}/* ${RHO_TARGET_DIR}";
|
742
|
+
shellScript = "RHO_SOURCE_DIR=${TARGET_BUILD_DIR}/../../bin/RhoBundle\nRHO_TARGET_DIR=${TARGET_BUILD_DIR}/${TARGET_NAME}.app\necho \"Create dir $RHO_TARGET_DIR\"\nmkdir -p ${RHO_TARGET_DIR}\nfor i in `ls -1 ${RHO_SOURCE_DIR}`\ndo\n echo \"rm -Rf $RHO_TARGET_DIR/$i\"\n rm -Rf ${RHO_TARGET_DIR}/$i\ndone\necho \"cp -Rf $RHO_SOURCE_DIR/* $RHO_TARGET_DIR\"\ncp -Rf ${RHO_SOURCE_DIR}/* ${RHO_TARGET_DIR}";
|
743
743
|
};
|
744
744
|
/* End PBXShellScriptBuildPhase section */
|
745
745
|
|
@@ -8,12 +8,19 @@
|
|
8
8
|
#include <windows.h>
|
9
9
|
#include <time.h>
|
10
10
|
|
11
|
+
typedef int socklen_t;
|
12
|
+
|
11
13
|
#if defined(OS_WINCE)
|
12
14
|
#include "ruby/wince/sys/types.h"
|
13
15
|
#include "ruby/wince/sys/stat.h"
|
14
|
-
#
|
16
|
+
#ifdef __cplusplus
|
17
|
+
extern "C"
|
18
|
+
#endif //__cplusplus
|
19
|
+
char *strdup(const char * str);
|
20
|
+
|
21
|
+
#else //!defined(OS_WINCE)
|
15
22
|
#include <sys/stat.h>
|
16
|
-
#endif
|
23
|
+
#endif //!defined(OS_WINCE)
|
17
24
|
|
18
25
|
#define LOG_NEWLINE "\r\n"
|
19
26
|
#define LOG_NEWLINELEN 2
|
@@ -25,7 +32,15 @@ typedef unsigned __int64 uint64;
|
|
25
32
|
|
26
33
|
#define strcasecmp _stricmp
|
27
34
|
#define snprintf _snprintf
|
28
|
-
|
35
|
+
|
36
|
+
#define FMTI64 "%I64d"
|
37
|
+
#define FMTU64 "%I64u"
|
38
|
+
|
39
|
+
#else // !(defined( OS_WINDOWS ) || defined( OS_WINCE ))
|
40
|
+
|
41
|
+
#define FMTI64 "%lli"
|
42
|
+
#define FMTU64 "%llu"
|
43
|
+
|
29
44
|
# if defined(OS_ANDROID)
|
30
45
|
// Needed for va_list on Android
|
31
46
|
# include <stdarg.h>
|
@@ -325,74 +325,96 @@ void CRhodesApp::initHttpServer()
|
|
325
325
|
|
326
326
|
const char* CRhodesApp::getFreeListeningPort()
|
327
327
|
{
|
328
|
+
int sockfd = -1;
|
329
|
+
struct sockaddr_in serv_addr = {0};
|
330
|
+
int noerrors = 1;
|
331
|
+
|
328
332
|
if ( m_strListeningPorts.length() > 0 )
|
329
333
|
return m_strListeningPorts.c_str();
|
330
334
|
|
331
|
-
int noerrors = 1;
|
332
335
|
LOG(INFO) + "Trying to get free listening port.";
|
333
336
|
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
337
|
+
sockfd = socket(AF_INET, SOCK_STREAM, 0);
|
338
|
+
if ( sockfd < 0 )
|
339
|
+
{
|
340
|
+
LOG(WARNING) + "Unable to open socket";
|
341
|
+
noerrors = 0;
|
342
|
+
}
|
343
|
+
|
344
|
+
int disable = 0;
|
345
|
+
if (noerrors && setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char*)&disable, sizeof(disable)) != 0)
|
346
|
+
{
|
347
|
+
LOG(WARNING) + "Unable to set socket option";
|
348
|
+
noerrors = 0;
|
349
|
+
}
|
350
|
+
#if defined(OS_MACOSX)
|
351
|
+
if (noerrors && setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, (const char *)&disable, sizeof(disable)) != 0)
|
352
|
+
{
|
353
|
+
LOG(WARNING) + "Unable to set socket option";
|
354
|
+
noerrors = 0;
|
355
|
+
}
|
356
|
+
#endif
|
357
|
+
|
358
|
+
if (noerrors)
|
359
|
+
{
|
360
|
+
memset((void *) &serv_addr, 0, sizeof(serv_addr));
|
361
|
+
#if defined(OS_MACOSX)
|
362
|
+
serv_addr.sin_len = sizeof(serv_addr);
|
363
|
+
#endif
|
364
|
+
serv_addr.sin_family = AF_INET;
|
365
|
+
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
366
|
+
serv_addr.sin_port = htons(8080);
|
367
|
+
|
368
|
+
LOG(INFO) + "Trying to bind on 8080 port...";
|
357
369
|
|
358
|
-
|
370
|
+
if ( bind( sockfd, (struct sockaddr *) &serv_addr, sizeof( serv_addr ) ) != 0 )
|
371
|
+
{
|
372
|
+
// Fill serv_addr again but with dynamically selected port
|
373
|
+
#if defined(OS_MACOSX)
|
374
|
+
serv_addr.sin_len = sizeof(serv_addr);
|
375
|
+
#endif
|
376
|
+
serv_addr.sin_family = AF_INET;
|
377
|
+
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
378
|
+
serv_addr.sin_port = htons(0);
|
379
|
+
|
380
|
+
LOG(INFO) + "Trying to bind on dynamic port...";
|
381
|
+
|
382
|
+
if ( bind( sockfd, (struct sockaddr *) &serv_addr, sizeof( serv_addr ) ) != 0 )
|
359
383
|
{
|
360
|
-
|
361
|
-
|
362
|
-
{
|
363
|
-
LOG(WARNING) + "Unable to bind";
|
364
|
-
noerrors = 0;
|
365
|
-
}
|
384
|
+
LOG(WARNING) + "Unable to bind";
|
385
|
+
noerrors = 0;
|
366
386
|
}
|
387
|
+
}
|
388
|
+
}
|
367
389
|
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
390
|
+
if ( noerrors )
|
391
|
+
{
|
392
|
+
char buf[10] = {0};
|
393
|
+
|
394
|
+
socklen_t length = sizeof( serv_addr );
|
395
|
+
|
396
|
+
if (getsockname( sockfd, (struct sockaddr *)&serv_addr, &length ) != 0)
|
397
|
+
{
|
398
|
+
LOG(WARNING) + "Can not get socket info";
|
399
|
+
noerrors = 0;
|
400
|
+
}
|
401
|
+
else
|
402
|
+
{
|
403
|
+
sprintf(buf, "%d", (int)ntohs(serv_addr.sin_port));
|
404
|
+
LOG(INFO) + "Got port to bind on: " + buf;
|
405
|
+
m_strListeningPorts = buf;
|
406
|
+
}
|
407
|
+
}
|
408
|
+
|
409
|
+
//Clean up
|
385
410
|
#if defined(OS_ANDROID)
|
386
|
-
|
411
|
+
close(sockfd);
|
387
412
|
#else
|
388
|
-
|
413
|
+
closesocket(sockfd);
|
389
414
|
#endif
|
390
|
-
}
|
391
|
-
|
392
|
-
}
|
393
415
|
|
394
416
|
if ( !noerrors )
|
395
|
-
m_strListeningPorts = "
|
417
|
+
m_strListeningPorts = "0";
|
396
418
|
|
397
419
|
LOG(INFO) + "Free listening port: " + m_strListeningPorts;
|
398
420
|
|