rhodes 1.4.1 → 1.4.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 +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
|