rhodes 1.4.1 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +10 -0
- 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 +2 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java +7 -13
- data/platform/bb/rhodes/src/rhomobile/PushListeningThread.java +4 -4
- data/platform/bb/rhodes/src/rhomobile/mapview/GoogleMapField.java +19 -20
- data/platform/bb/rhodes/src/rhomobile/mapview/MapView.java +88 -26
- data/platform/iphone/Classes/MapView/MapViewController.m +33 -32
- data/platform/iphone/Classes/WebViewController.m +4 -2
- data/platform/iphone/Info.plist +1 -1
- data/platform/shared/common/RhodesApp.cpp +77 -61
- data/platform/shared/common/RhodesApp.h +1 -0
- data/platform/shared/ruby/ext/mapview/mapview.i +18 -48
- data/platform/shared/ruby/ext/mapview/mapview_wrap.c +20 -50
- data/platform/shared/ruby/ext/system/system_properties.c +2 -0
- data/res/generators/templates/application/Rakefile +1 -0
- metadata +1 -3
- data/Manifest.txt +0 -7529
- data/rhobuild.yml +0 -36
@@ -341,72 +341,78 @@ void CRhodesApp::initHttpServer()
|
|
341
341
|
|
342
342
|
const char* CRhodesApp::getFreeListeningPort()
|
343
343
|
{
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
serv_addr.sin_port = htons(0);
|
376
|
-
|
377
|
-
if ( bind( sockfd, (struct sockaddr *) &serv_addr, sizeof( serv_addr ) ) )
|
344
|
+
if ( m_strListeningPorts.length() > 0 )
|
345
|
+
return m_strListeningPorts.c_str();
|
346
|
+
|
347
|
+
int noerrors = 1;
|
348
|
+
LOG(INFO) + "Trying to get free listening port.";
|
349
|
+
|
350
|
+
//get free port
|
351
|
+
int sockfd = -1;
|
352
|
+
struct sockaddr_in serv_addr = {0};
|
353
|
+
//struct hostent *server = {0};
|
354
|
+
//int result = -1;
|
355
|
+
|
356
|
+
if ( noerrors )
|
357
|
+
{
|
358
|
+
sockfd = socket(AF_INET, SOCK_STREAM, 0);
|
359
|
+
if ( sockfd < 0 )
|
360
|
+
{
|
361
|
+
LOG(WARNING) + ("Unable to open socket");
|
362
|
+
noerrors = 0;
|
363
|
+
}
|
364
|
+
|
365
|
+
if ( noerrors )
|
366
|
+
{
|
367
|
+
//server = gethostbyname( "localhost" );
|
368
|
+
|
369
|
+
memset((void *) &serv_addr, 0, sizeof(serv_addr));
|
370
|
+
serv_addr.sin_family = AF_INET;
|
371
|
+
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
372
|
+
serv_addr.sin_port = htons(8080);
|
373
|
+
|
374
|
+
if ( bind( sockfd, (struct sockaddr *) &serv_addr, sizeof( serv_addr ) ) )
|
378
375
|
{
|
379
|
-
|
380
|
-
|
376
|
+
serv_addr.sin_port = htons(0);
|
377
|
+
if ( bind( sockfd, (struct sockaddr *) &serv_addr, sizeof( serv_addr ) ) )
|
378
|
+
{
|
379
|
+
LOG(WARNING) + "Unable to bind";
|
380
|
+
noerrors = 0;
|
381
|
+
}
|
381
382
|
}
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
383
|
+
|
384
|
+
if ( noerrors )
|
385
|
+
{
|
386
|
+
char buf[10] = {0};
|
387
|
+
#ifdef OS_MACOSX
|
388
|
+
socklen_t
|
389
|
+
#else
|
390
|
+
int
|
391
|
+
#endif
|
392
|
+
length = sizeof( serv_addr );
|
393
|
+
|
394
|
+
getsockname( sockfd, (struct sockaddr *)&serv_addr, &length );
|
395
|
+
|
396
|
+
sprintf(buf,"%d",ntohs(serv_addr.sin_port));
|
397
|
+
|
398
|
+
m_strListeningPorts = buf;
|
399
|
+
}
|
400
|
+
//Clean up
|
394
401
|
#if defined(OS_ANDROID)
|
395
|
-
|
402
|
+
close(sockfd);
|
396
403
|
#else
|
397
|
-
|
398
|
-
#endif
|
399
|
-
}
|
400
|
-
|
401
|
-
}
|
402
|
-
|
403
|
-
if ( !noerrors )
|
404
|
-
m_strListeningPorts = "8080";
|
405
|
-
|
406
|
-
LOG(INFO) + "Free listening port: " + m_strListeningPorts;
|
407
|
-
|
408
|
-
return m_strListeningPorts.c_str();
|
404
|
+
closesocket(sockfd);
|
409
405
|
#endif
|
406
|
+
}
|
407
|
+
|
408
|
+
}
|
409
|
+
|
410
|
+
if ( !noerrors )
|
411
|
+
m_strListeningPorts = "8080";
|
412
|
+
|
413
|
+
LOG(INFO) + "Free listening port: " + m_strListeningPorts;
|
414
|
+
|
415
|
+
return m_strListeningPorts.c_str();
|
410
416
|
}
|
411
417
|
|
412
418
|
void CRhodesApp::initAppUrls()
|
@@ -446,6 +452,11 @@ const String& CRhodesApp::getStartUrl()
|
|
446
452
|
return m_strStartUrl;
|
447
453
|
}
|
448
454
|
|
455
|
+
const char* rho_rhodesapp_gethomeurl()
|
456
|
+
{
|
457
|
+
return RHODESAPP().getHomeUrl().c_str();
|
458
|
+
}
|
459
|
+
|
449
460
|
const String& CRhodesApp::getOptionsUrl()
|
450
461
|
{
|
451
462
|
m_strOptionsUrl = canonicalizeRhoUrl( RHOCONF().getString("options_path") );
|
@@ -746,6 +757,11 @@ const char* rho_rhodesapp_getstarturl()
|
|
746
757
|
return RHODESAPP().getStartUrl().c_str();
|
747
758
|
}
|
748
759
|
|
760
|
+
const char* rho_rhodesapp_gethomeurl()
|
761
|
+
{
|
762
|
+
return RHODESAPP().getHomeUrl().c_str();
|
763
|
+
}
|
764
|
+
|
749
765
|
const char* rho_rhodesapp_getoptionsurl()
|
750
766
|
{
|
751
767
|
return RHODESAPP().getOptionsUrl().c_str();
|
@@ -66,6 +66,7 @@ public:
|
|
66
66
|
const String& getOptionsUrl();
|
67
67
|
const String& getCurrentUrl(int index = 0);
|
68
68
|
const String& getFirstStartUrl();
|
69
|
+
const String& getHomeUrl(){ return m_strHomeUrl; }
|
69
70
|
|
70
71
|
const String& getLoadingPagePath(){return m_strLoadingPagePath; }
|
71
72
|
const String& getBlobsDirPath(){return m_strBlobsDirPath; }
|
@@ -13,7 +13,7 @@ extern void mapview_create(int nparams, char** params, int nannotations, char**
|
|
13
13
|
$1 = $3 = 0;
|
14
14
|
if (input_arr) {
|
15
15
|
VALUE main_keys_arr = rb_funcall($input, rb_intern("keys"), 0, NULL);
|
16
|
-
int mk,main_keys_len = RARRAY_LEN(main_keys_arr);
|
16
|
+
int mk,main_keys_len = RARRAY_LEN(main_keys_arr);
|
17
17
|
for(mk=0; mk<main_keys_len; mk++) {
|
18
18
|
VALUE main_key = rb_ary_entry(main_keys_arr, mk);
|
19
19
|
VALUE main_data = rb_hash_aref($input,main_key);
|
@@ -33,52 +33,34 @@ extern void mapview_create(int nparams, char** params, int nannotations, char**
|
|
33
33
|
case T_STRING:
|
34
34
|
tmp = StringValuePtr(data);
|
35
35
|
break;
|
36
|
-
case T_TRUE:
|
37
|
-
case T_FALSE:
|
38
|
-
case T_SYMBOL:
|
39
|
-
val = rb_funcall(data, rb_intern("to_s"), 0, NULL);
|
40
|
-
tmp = StringValuePtr(val);
|
41
|
-
break;
|
42
36
|
case T_ARRAY:
|
43
37
|
{
|
44
38
|
int alen = RARRAY_LEN(data);
|
45
|
-
|
46
|
-
|
39
|
+
char **arr = (char **)malloc((alen+1)*sizeof(char*));
|
40
|
+
for(i=0;i<alen;i++) {
|
47
41
|
VALUE item = rb_ary_entry(data,i);
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
break;
|
52
|
-
case T_FLOAT:
|
53
|
-
case T_RATIONAL:
|
54
|
-
case T_SYMBOL:
|
55
|
-
val = rb_funcall(item, rb_intern("to_s"), 0, NULL);
|
56
|
-
tmp = StringValuePtr(val);
|
57
|
-
break;
|
58
|
-
default:
|
59
|
-
tmp = "";
|
60
|
-
break;
|
61
|
-
}
|
42
|
+
if (TYPE(item) != T_STRING)
|
43
|
+
item = rb_funcall(item, rb_intern("to_s"), 0, NULL);
|
44
|
+
tmp = StringValuePtr(item);
|
62
45
|
arr[i] = tmp;
|
63
|
-
|
46
|
+
}
|
64
47
|
arr[alen] = NULL;
|
65
48
|
tmp = (char*)arr;
|
66
49
|
}
|
67
50
|
break;
|
68
51
|
default:
|
69
|
-
|
70
|
-
|
52
|
+
val = rb_funcall(data, rb_intern("to_s"), 0, NULL);
|
53
|
+
tmp = StringValuePtr(val);
|
71
54
|
}
|
72
55
|
settings[arr_len++] = key_str;
|
73
56
|
settings[arr_len++] = tmp;
|
74
|
-
}
|
57
|
+
}
|
75
58
|
|
76
59
|
$1 = arr_len;
|
77
|
-
$2 = settings;
|
78
|
-
|
60
|
+
$2 = settings;
|
79
61
|
} else if (!strcmp(main_key_str,"annotations")) {
|
80
62
|
int arr_len = 0;
|
81
|
-
|
63
|
+
len = RARRAY_LEN(main_data);
|
82
64
|
ret_val = (char **)malloc(6*len*sizeof(char*));
|
83
65
|
for(i=0; i<len; i++) {
|
84
66
|
char *lat, *lon, *addr, *title, *subtitle, *url;
|
@@ -93,20 +75,9 @@ extern void mapview_create(int nparams, char** params, int nannotations, char**
|
|
93
75
|
VALUE key = rb_ary_entry(keys_arr, j);
|
94
76
|
VALUE data = rb_hash_aref(hash,key);
|
95
77
|
char *key_str = StringValuePtr(key);
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
break;
|
100
|
-
case T_FLOAT:
|
101
|
-
case T_RATIONAL:
|
102
|
-
case T_SYMBOL:
|
103
|
-
val = rb_funcall(data, rb_intern("to_s"), 0, NULL);
|
104
|
-
tmp = StringValuePtr(val);
|
105
|
-
break;
|
106
|
-
default:
|
107
|
-
tmp = "";
|
108
|
-
break;
|
109
|
-
}
|
78
|
+
if (TYPE(data) != T_STRING)
|
79
|
+
data = rb_funcall(data, rb_intern("to_s"), 0, NULL);
|
80
|
+
tmp = StringValuePtr(data);
|
110
81
|
if (!strcmp(key_str,"latitude")) {
|
111
82
|
lat = tmp;
|
112
83
|
} else if (!strcmp(key_str, "longitude")) {
|
@@ -126,12 +97,11 @@ extern void mapview_create(int nparams, char** params, int nannotations, char**
|
|
126
97
|
ret_val[arr_len++] = addr;
|
127
98
|
ret_val[arr_len++] = title;
|
128
99
|
ret_val[arr_len++] = subtitle;
|
129
|
-
ret_val[arr_len++] = url;
|
100
|
+
ret_val[arr_len++] = url;
|
130
101
|
} /* for(i=0; i<len; i++) */
|
131
102
|
|
132
103
|
$3 = arr_len;
|
133
|
-
$4 = ret_val;
|
134
|
-
|
104
|
+
$4 = ret_val;
|
135
105
|
} /* if (!strcmp(key_str,"annotations")) */
|
136
106
|
} /* for(mk=0; mk<main_keys_len; mk++) */
|
137
107
|
} /* if (input_arr) */
|
@@ -144,4 +114,4 @@ extern void mapview_create(int nparams, char** params, int nannotations, char**
|
|
144
114
|
free((void *) $4);
|
145
115
|
}
|
146
116
|
|
147
|
-
extern void create(int nparams, char** params, int nannotations, char** annotation);
|
117
|
+
extern void create(int nparams, char** params, int nannotations, char** annotation);
|
@@ -998,10 +998,10 @@ extern "C" {
|
|
998
998
|
/* Global Ruby hash table to store Trackings from C/C++
|
999
999
|
structs to Ruby Objects. */
|
1000
1000
|
static VALUE swig_ruby_trackings;
|
1001
|
-
|
1002
|
-
/* Global variable that stores a reference to the ruby
|
1003
|
-
hash table delete function. */
|
1004
|
-
static ID swig_ruby_hash_delete = 0;
|
1001
|
+
|
1002
|
+
/* Global variable that stores a reference to the ruby
|
1003
|
+
hash table delete function. */
|
1004
|
+
static ID swig_ruby_hash_delete = 0;
|
1005
1005
|
|
1006
1006
|
/* Setup a Ruby hash table to store Trackings */
|
1007
1007
|
SWIGRUNTIME void SWIG_RubyInitializeTrackings(void) {
|
@@ -1011,9 +1011,9 @@ SWIGRUNTIME void SWIG_RubyInitializeTrackings(void) {
|
|
1011
1011
|
swig_ruby_trackings = rb_hash_new();
|
1012
1012
|
rb_gc_register_address(&swig_ruby_trackings);
|
1013
1013
|
|
1014
|
-
/* Now store a reference to the hash table delete function
|
1015
|
-
so that we only have to look it up once.*/
|
1016
|
-
swig_ruby_hash_delete = rb_intern("delete");
|
1014
|
+
/* Now store a reference to the hash table delete function
|
1015
|
+
so that we only have to look it up once.*/
|
1016
|
+
swig_ruby_hash_delete = rb_intern("delete");
|
1017
1017
|
}
|
1018
1018
|
|
1019
1019
|
/* Get a Ruby number to reference a pointer */
|
@@ -1631,7 +1631,7 @@ _wrap_create(int argc, VALUE *argv, VALUE self) {
|
|
1631
1631
|
arg1 = arg3 = 0;
|
1632
1632
|
if (input_arr) {
|
1633
1633
|
VALUE main_keys_arr = rb_funcall(argv[0], rb_intern("keys"), 0, NULL);
|
1634
|
-
int mk,main_keys_len = RARRAY_LEN(main_keys_arr);
|
1634
|
+
int mk,main_keys_len = RARRAY_LEN(main_keys_arr);
|
1635
1635
|
for(mk=0; mk<main_keys_len; mk++) {
|
1636
1636
|
VALUE main_key = rb_ary_entry(main_keys_arr, mk);
|
1637
1637
|
VALUE main_data = rb_hash_aref(argv[0],main_key);
|
@@ -1651,32 +1651,15 @@ _wrap_create(int argc, VALUE *argv, VALUE self) {
|
|
1651
1651
|
case T_STRING:
|
1652
1652
|
tmp = StringValuePtr(data);
|
1653
1653
|
break;
|
1654
|
-
case T_TRUE:
|
1655
|
-
case T_FALSE:
|
1656
|
-
case T_SYMBOL:
|
1657
|
-
val = rb_funcall(data, rb_intern("to_s"), 0, NULL);
|
1658
|
-
tmp = StringValuePtr(val);
|
1659
|
-
break;
|
1660
1654
|
case T_ARRAY:
|
1661
1655
|
{
|
1662
1656
|
int alen = RARRAY_LEN(data);
|
1663
1657
|
char **arr = (char **)malloc((alen+1)*sizeof(char*));
|
1664
1658
|
for(i=0;i<alen;i++) {
|
1665
1659
|
VALUE item = rb_ary_entry(data,i);
|
1666
|
-
|
1667
|
-
|
1668
|
-
|
1669
|
-
break;
|
1670
|
-
case T_FLOAT:
|
1671
|
-
case T_RATIONAL:
|
1672
|
-
case T_SYMBOL:
|
1673
|
-
val = rb_funcall(item, rb_intern("to_s"), 0, NULL);
|
1674
|
-
tmp = StringValuePtr(val);
|
1675
|
-
break;
|
1676
|
-
default:
|
1677
|
-
tmp = "";
|
1678
|
-
break;
|
1679
|
-
}
|
1660
|
+
if (TYPE(item) != T_STRING)
|
1661
|
+
item = rb_funcall(item, rb_intern("to_s"), 0, NULL);
|
1662
|
+
tmp = StringValuePtr(item);
|
1680
1663
|
arr[i] = tmp;
|
1681
1664
|
}
|
1682
1665
|
arr[alen] = NULL;
|
@@ -1684,16 +1667,15 @@ _wrap_create(int argc, VALUE *argv, VALUE self) {
|
|
1684
1667
|
}
|
1685
1668
|
break;
|
1686
1669
|
default:
|
1687
|
-
|
1688
|
-
|
1670
|
+
val = rb_funcall(data, rb_intern("to_s"), 0, NULL);
|
1671
|
+
tmp = StringValuePtr(val);
|
1689
1672
|
}
|
1690
1673
|
settings[arr_len++] = key_str;
|
1691
1674
|
settings[arr_len++] = tmp;
|
1692
|
-
}
|
1675
|
+
}
|
1693
1676
|
|
1694
1677
|
arg1 = arr_len;
|
1695
|
-
arg2 = settings;
|
1696
|
-
|
1678
|
+
arg2 = settings;
|
1697
1679
|
} else if (!strcmp(main_key_str,"annotations")) {
|
1698
1680
|
int arr_len = 0;
|
1699
1681
|
len = RARRAY_LEN(main_data);
|
@@ -1711,20 +1693,9 @@ _wrap_create(int argc, VALUE *argv, VALUE self) {
|
|
1711
1693
|
VALUE key = rb_ary_entry(keys_arr, j);
|
1712
1694
|
VALUE data = rb_hash_aref(hash,key);
|
1713
1695
|
char *key_str = StringValuePtr(key);
|
1714
|
-
|
1715
|
-
|
1716
|
-
|
1717
|
-
break;
|
1718
|
-
case T_FLOAT:
|
1719
|
-
case T_RATIONAL:
|
1720
|
-
case T_SYMBOL:
|
1721
|
-
val = rb_funcall(data, rb_intern("to_s"), 0, NULL);
|
1722
|
-
tmp = StringValuePtr(val);
|
1723
|
-
break;
|
1724
|
-
default:
|
1725
|
-
tmp = "";
|
1726
|
-
break;
|
1727
|
-
}
|
1696
|
+
if (TYPE(data) != T_STRING)
|
1697
|
+
data = rb_funcall(data, rb_intern("to_s"), 0, NULL);
|
1698
|
+
tmp = StringValuePtr(data);
|
1728
1699
|
if (!strcmp(key_str,"latitude")) {
|
1729
1700
|
lat = tmp;
|
1730
1701
|
} else if (!strcmp(key_str, "longitude")) {
|
@@ -1744,12 +1715,11 @@ _wrap_create(int argc, VALUE *argv, VALUE self) {
|
|
1744
1715
|
ret_val[arr_len++] = addr;
|
1745
1716
|
ret_val[arr_len++] = title;
|
1746
1717
|
ret_val[arr_len++] = subtitle;
|
1747
|
-
ret_val[arr_len++] = url;
|
1718
|
+
ret_val[arr_len++] = url;
|
1748
1719
|
} /* for(i=0; i<len; i++) */
|
1749
1720
|
|
1750
1721
|
arg3 = arr_len;
|
1751
|
-
arg4 = ret_val;
|
1752
|
-
|
1722
|
+
arg4 = ret_val;
|
1753
1723
|
} /* if (!strcmp(key_str,"annotations")) */
|
1754
1724
|
} /* for(mk=0; mk<main_keys_len; mk++) */
|
1755
1725
|
} /* if (input_arr) */
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rhodes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rhomobile
|
@@ -2527,7 +2527,6 @@ files:
|
|
2527
2527
|
- lib/test/syncdb.sqlite
|
2528
2528
|
- LICENSE
|
2529
2529
|
- LICENSING_OPTIONS
|
2530
|
-
- Manifest.txt
|
2531
2530
|
- platform/android/build/android.rake
|
2532
2531
|
- platform/android/build/androidcommon.rb
|
2533
2532
|
- platform/android/build/libcurl_build.files
|
@@ -5727,7 +5726,6 @@ files:
|
|
5727
5726
|
- res/generators/templates/spec/app/spec_runner.rb
|
5728
5727
|
- res/generators/templates/spec/app/SpecRunner/controller.rb
|
5729
5728
|
- res/generators/templates/spec/app/SpecRunner/index.erb
|
5730
|
-
- rhobuild.yml
|
5731
5729
|
- rhobuild.yml.example
|
5732
5730
|
- rhodes.gemspec
|
5733
5731
|
- spec/framework_spec/app/Account/config.rb
|