rhodes 2.0.0.beta10 → 2.0.0.beta11
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +5297 -0
- data/README.textile +2 -2
- data/bin/rhodes-setup +1 -0
- data/lib/extensions/digest-md5/ext/Rakefile +6 -5
- data/lib/extensions/fcntl/ext.yml +1 -1
- data/lib/framework/rho/rho.rb +2 -34
- data/lib/framework/rho/rhoapplication.rb +6 -2
- data/lib/framework/rho/rhofsconnector.rb +9 -0
- data/lib/framework/rhodes.rb +1 -1
- data/lib/rhodes.rb +1 -1
- data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +1 -1
- data/platform/shared/common/RhoDefs.h +1 -1
- data/platform/shared/common/RhodesApp.cpp +20 -0
- data/platform/shared/common/RhodesApp.h +1 -0
- data/platform/shared/db/DBAdapter.cpp +34 -9
- data/platform/shared/db/DBAdapter.h +3 -3
- data/platform/shared/net/AsyncHttp.cpp +1 -1
- data/platform/shared/rubyJVM/src/com/rho/net/AsyncHttp.java +1 -1
- data/platform/shared/rubyJVM/src/com/rho/net/NetRequest.java +1 -1
- data/platform/shared/rubyJVM/src/com/rho/net/URI.java +4 -7
- data/platform/shared/rubyJVM/src/com/rho/sync/SyncEngine.java +7 -7
- data/platform/shared/sync/SyncEngine.cpp +5 -9
- data/platform/shared/sync/SyncThread.cpp +3 -2
- data/platform/wm/rhodes/MainWindow.cpp +7 -2
- data/platform/wm/rhodes/MainWindow.h +2 -0
- data/platform/wm/rhodes/Rhodes.cpp +9 -7
- data/res/build-tools/db/syncdb.triggers +5 -0
- data/rhodes.gemspec +1 -1
- data/spec/framework_spec/app/BlobTest/blob_test.rb +11 -0
- data/spec/framework_spec/app/BlobTest/test.png +0 -0
- data/spec/framework_spec/app/BlobTest/test2.png +0 -0
- data/spec/framework_spec/app/spec/blobsync_spec.rb +155 -0
- data/spec/framework_spec/app/spec/syncengine_spec.rb +3 -0
- data/spec/framework_spec/app/spec_runner.rb +1 -0
- data/spec/framework_spec/build.yml +1 -1
- metadata +8 -3
data/README.textile
CHANGED
@@ -36,9 +36,9 @@ This will generate a controller as the file controller.rb and several views as a
|
|
36
36
|
|
37
37
|
h2. MORE RESOURCES
|
38
38
|
|
39
|
-
There is a "tutorial available":http://rhomobile.com/wiki/index.php/
|
39
|
+
There is a "tutorial available":http://rhomobile.com/wiki/index.php/Tutorial2 on the "Rhomobile site":http://www.rhomobile.com. This includes thorough and current platform by platform build instructions.
|
40
40
|
|
41
|
-
The "Rhodes spec":http://rhomobile.com/wiki/index.php/Rhodes
|
41
|
+
The "Rhodes spec":http://rhomobile.com/wiki/index.php/Rhodes for full documentation on the Rhodes framework.
|
42
42
|
|
43
43
|
For further questions "email us":mailto:info@rhomobile.com or join the "Google Group":http://groups.google.com/group/rhomobile.
|
44
44
|
|
data/bin/rhodes-setup
CHANGED
@@ -10,16 +10,17 @@ def build_extension(name, arch)
|
|
10
10
|
|
11
11
|
args = []
|
12
12
|
args << "-I."
|
13
|
-
args << "-I
|
14
|
-
args << "-I
|
13
|
+
args << "-I#{$rhoroot}/lib/extensions/digest/ext"
|
14
|
+
args << "-I#{$rhoroot}/platform/shared/ruby/include"
|
15
|
+
args << "-I#{$rhoroot}/platform/shared"
|
15
16
|
|
16
17
|
if ENV['RHO_PLATFORM'] == 'android'
|
17
|
-
args << "-I
|
18
|
-
args << "-I
|
18
|
+
args << "-I#{$rhoroot}/platform/shared/ruby/linux"
|
19
|
+
args << "-I#{$rhoroot}/platform/shared/ruby/generated"
|
19
20
|
cc_compile f, $tempdir, args or exit 1
|
20
21
|
|
21
22
|
elsif ENV['RHO_PLATFORM'] == 'iphone'
|
22
|
-
args << "-I
|
23
|
+
args << "-I#{$rhoroot}/platform/shared/ruby/iphone"
|
23
24
|
args << "-D_XOPEN_SOURCE"
|
24
25
|
args << "-D_DARWIN_C_SOURCE"
|
25
26
|
args << "-isysroot #{$sdkroot}"
|
@@ -1,2 +1,2 @@
|
|
1
1
|
entry: Init_fcntl
|
2
|
-
libraries: [ "
|
2
|
+
libraries: [ "fcntl" ]
|
data/lib/framework/rho/rho.rb
CHANGED
@@ -192,44 +192,12 @@ module Rho
|
|
192
192
|
puts "sources after: #{Rho::RhoConfig::sources()}"
|
193
193
|
return
|
194
194
|
end
|
195
|
-
|
196
|
-
arSrc = res['sources']
|
197
|
-
puts "arSrc: #{arSrc}"
|
198
|
-
return unless arSrc
|
199
|
-
|
200
|
-
hashSrcs = Rhom::RhomSource::find_all_ashash
|
201
|
-
puts "hashSrcs : #{hashSrcs}"
|
202
|
-
Rho::RhoConfig::reset_max_config_srcid()
|
203
|
-
arSrc.each do |name, src|
|
204
|
-
oldSrc = hashSrcs[name]
|
205
|
-
puts "oldSrc: #{oldSrc}"
|
206
|
-
#update schema_version
|
207
|
-
src['schema_version'] = src['schema']['version'] if src['schema'] && src['schema']['version']
|
208
|
-
src['sync_type'] ||= 'incremental'
|
209
|
-
#if oldSrc
|
210
|
-
# oldVer = oldSrc.schema_version
|
211
|
-
# newVer = src['schema_version']
|
212
|
-
# if ( oldVer != newVer )
|
213
|
-
# get_app(APPNAME).on_migrate_source(oldSrc.schema_version, src)
|
214
|
-
# end
|
215
|
-
#end
|
216
|
-
|
217
|
-
Rho::RhoConfig::sources[name] = nil
|
218
|
-
@db_partitions.each_value do |db_part|
|
219
|
-
db_part.delete_from_table('sources', {"name"=>name})
|
220
|
-
end
|
221
|
-
|
222
|
-
Rho::RhoConfig::add_source(name, src)
|
223
|
-
end
|
224
|
-
|
225
|
-
init_sources()
|
226
|
-
|
227
|
-
check_source_migration(get_app(APPNAME))
|
228
195
|
rescue Exception => e
|
229
196
|
puts "Error load_server_sources: #{e}"
|
230
197
|
puts "Trace: #{e.backtrace}"
|
231
198
|
end
|
232
|
-
|
199
|
+
|
200
|
+
raise ArgumentError, "load_server_sources should be called only from bulk sync with partition parameter!"
|
233
201
|
end
|
234
202
|
|
235
203
|
def find_src_byname(uniq_sources, src_name)
|
@@ -78,8 +78,12 @@ module Rho
|
|
78
78
|
Rho::RhoFSConnector::get_model_path(appname, modelname)
|
79
79
|
end
|
80
80
|
|
81
|
-
def
|
82
|
-
|
81
|
+
def get_blob_folder()
|
82
|
+
Rho::RhoFSConnector::get_blob_folder()
|
83
|
+
end
|
84
|
+
|
85
|
+
def get_blob_path(relative_path)
|
86
|
+
Rho::RhoFSConnector::get_blob_path(relative_path)
|
83
87
|
end
|
84
88
|
|
85
89
|
end
|
@@ -27,6 +27,15 @@ module Rho
|
|
27
27
|
def get_db_fullpathname(postfix)
|
28
28
|
File.join(__rhoGetCurrentDir(), 'db/syncdb' + postfix + '.sqlite')
|
29
29
|
end
|
30
|
+
|
31
|
+
def get_blob_folder()
|
32
|
+
File.join(__rhoGetCurrentDir(), 'db/db-files')
|
33
|
+
end
|
34
|
+
|
35
|
+
def get_blob_path(relative_path)
|
36
|
+
File.join(__rhoGetCurrentDir(), relative_path)
|
37
|
+
end
|
38
|
+
|
30
39
|
end
|
31
40
|
end # RhoApplication
|
32
41
|
end # Rho
|
data/lib/framework/rhodes.rb
CHANGED
data/lib/rhodes.rb
CHANGED
@@ -164,7 +164,7 @@ public class NetworkAccess implements INetworkAccess {
|
|
164
164
|
url = url.substring(0, fragment);
|
165
165
|
}
|
166
166
|
|
167
|
-
boolean ignoreSuffix = ignoreSuffixOnSim && DeviceInfo.isSimulator();
|
167
|
+
boolean ignoreSuffix = !URI.isLocalHost(url) && ignoreSuffixOnSim && DeviceInfo.isSimulator();
|
168
168
|
HttpConnection http = (HttpConnection)baseConnect(url, ignoreSuffix );
|
169
169
|
return new BBHttpConnection(http);
|
170
170
|
}
|
@@ -448,6 +448,26 @@ void CRhodesApp::setAppBackUrl(const String& url)
|
|
448
448
|
m_strAppBackUrl = "";
|
449
449
|
}
|
450
450
|
|
451
|
+
String CRhodesApp::getAppTitle()
|
452
|
+
{
|
453
|
+
String strTitle = RHOCONF().getString("title_text");
|
454
|
+
if ( strTitle.length() == 0 )
|
455
|
+
{
|
456
|
+
#ifdef OS_WINCE
|
457
|
+
String path = rho_native_rhopath();
|
458
|
+
int last, pre_last;
|
459
|
+
|
460
|
+
last = path.find_last_of('\\');
|
461
|
+
pre_last = path.substr(0, last).find_last_of('\\');
|
462
|
+
strTitle = path.substr(pre_last + 1, last - pre_last - 1);
|
463
|
+
#else
|
464
|
+
strTitle = "Rhodes";
|
465
|
+
#endif
|
466
|
+
}
|
467
|
+
|
468
|
+
return strTitle;
|
469
|
+
}
|
470
|
+
|
451
471
|
const String& CRhodesApp::getStartUrl()
|
452
472
|
{
|
453
473
|
m_strStartUrl = canonicalizeRhoUrl( RHOCONF().getString("start_path") );
|
@@ -84,6 +84,7 @@ public:
|
|
84
84
|
|
85
85
|
const String& getAppBackUrl(){return m_strAppBackUrl;}
|
86
86
|
void setAppBackUrl(const String& url);
|
87
|
+
String getAppTitle();
|
87
88
|
|
88
89
|
void callCameraCallback(String strCallbackUrl, const String& strImagePath, const String& strError, boolean bCancel );
|
89
90
|
void callDateTimeCallback(String strCallbackUrl, long lDateTime, const char* szData, int bCancel );
|
@@ -38,6 +38,22 @@ void SyncBlob_DeleteCallback(sqlite3_context* dbContext, int nArgs, sqlite3_valu
|
|
38
38
|
attrMgr.remove( nSrcID, szAttrName );
|
39
39
|
}
|
40
40
|
|
41
|
+
void SyncBlob_UpdateCallback(sqlite3_context* dbContext, int nArgs, sqlite3_value** ppArgs)
|
42
|
+
{
|
43
|
+
if ( nArgs < 3 )
|
44
|
+
return;
|
45
|
+
|
46
|
+
CDBAttrManager& attrMgr = CDBAdapter::getDBByHandle(sqlite3_context_db_handle(dbContext)).getAttrMgr();
|
47
|
+
|
48
|
+
char* szAttrName = (char*)sqlite3_value_text(*(ppArgs+2));
|
49
|
+
int nSrcID = sqlite3_value_int(*(ppArgs+1));
|
50
|
+
if ( attrMgr.isBlobAttr(nSrcID, szAttrName) )
|
51
|
+
{
|
52
|
+
String strFilePath = RHODESAPP().resolveDBFilesPath((char*)sqlite3_value_text(*(ppArgs)));
|
53
|
+
CRhoFile::deleteFile(strFilePath.c_str());
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
41
57
|
void SyncBlob_DeleteSchemaCallback(sqlite3_context* dbContext, int nArgs, sqlite3_value** ppArgs)
|
42
58
|
{
|
43
59
|
CDBAttrManager& attrMgr = CDBAdapter::getDBByHandle(sqlite3_context_db_handle(dbContext)).getAttrMgr();
|
@@ -107,6 +123,9 @@ void CDBAdapter::open (String strDbPath, String strVer, boolean bTemp)
|
|
107
123
|
|
108
124
|
sqlite3_create_function( m_dbHandle, "rhoOnDeleteObjectRecord", 3, SQLITE_ANY, 0,
|
109
125
|
SyncBlob_DeleteCallback, 0, 0 );
|
126
|
+
sqlite3_create_function( m_dbHandle, "rhoOnUpdateObjectRecord", 3, SQLITE_ANY, 0,
|
127
|
+
SyncBlob_UpdateCallback, 0, 0 );
|
128
|
+
|
110
129
|
sqlite3_create_function( m_dbHandle, "rhoOnDeleteRecord", 1, SQLITE_ANY, 0,
|
111
130
|
SyncBlob_DeleteSchemaCallback, 0, 0 );
|
112
131
|
|
@@ -140,7 +159,7 @@ boolean CDBAdapter::migrateDB(const CDBVersion& dbVer, const String& strRhoDBVer
|
|
140
159
|
//id INTEGER PRIMARY KEY, REMOVE
|
141
160
|
LOG(INFO) + "Migrate database from " + dbVer.m_strRhoVer + " to " + strRhoDBVer;
|
142
161
|
|
143
|
-
CDBAdapter db(m_strDbPartition.c_str());
|
162
|
+
CDBAdapter db(m_strDbPartition.c_str(), true);
|
144
163
|
db.open( m_strDbPath, m_strDbVer, true );
|
145
164
|
DBResult( res, db.executeSQL( "ALTER TABLE sources ADD priority INTEGER" ));
|
146
165
|
DBResult( res1, db.executeSQL( "ALTER TABLE sources ADD backend_refresh_time int default 0" ));
|
@@ -335,7 +354,7 @@ void CDBAdapter::destroy_tables(const rho::Vector<rho::String>& arIncludeTables,
|
|
335
354
|
CRhoFile::deleteFile((dbNewName+"-journal").c_str());
|
336
355
|
CRhoFile::deleteFile((dbNewName+".version").c_str());
|
337
356
|
|
338
|
-
CDBAdapter db(m_strDbPartition.c_str());
|
357
|
+
CDBAdapter db(m_strDbPartition.c_str(), true);
|
339
358
|
db.open( dbNewName, m_strDbVer, true );
|
340
359
|
|
341
360
|
//Copy all tables
|
@@ -389,7 +408,7 @@ void CDBAdapter::copyTable(String tableName, CDBAdapter& dbFrom, CDBAdapter& dbT
|
|
389
408
|
|
390
409
|
void CDBAdapter::setBulkSyncDB(String fDataName)
|
391
410
|
{
|
392
|
-
CDBAdapter db(m_strDbPartition.c_str());
|
411
|
+
CDBAdapter db(m_strDbPartition.c_str(), true);
|
393
412
|
db.open( fDataName, m_strDbVer, true );
|
394
413
|
db.createTriggers();
|
395
414
|
|
@@ -718,7 +737,7 @@ int rho_db_open(const char* szDBPath, const char* szDBPartition, void** ppDB)
|
|
718
737
|
CDBAdapter* pDB = CDBAdapter::getDBPartitions().get(szDBPartition);
|
719
738
|
if ( !pDB )
|
720
739
|
{
|
721
|
-
pDB = new CDBAdapter(szDBPartition);
|
740
|
+
pDB = new CDBAdapter(szDBPartition, false);
|
722
741
|
CDBAdapter::getDBPartitions().put(szDBPartition, pDB);
|
723
742
|
}
|
724
743
|
|
@@ -833,13 +852,16 @@ void rho_db_init_attr_manager()
|
|
833
852
|
namespace rho{
|
834
853
|
namespace common{
|
835
854
|
|
836
|
-
CRubyMutex::CRubyMutex() : m_nLockCount(0), m_valThread(0), m_valMutex(null)
|
855
|
+
CRubyMutex::CRubyMutex(boolean bIgnore) : m_nLockCount(0), m_valThread(0), m_valMutex(null)
|
837
856
|
{
|
857
|
+
if ( !bIgnore )
|
858
|
+
m_valMutex = rho_ruby_create_mutex();
|
838
859
|
}
|
839
860
|
|
840
861
|
CRubyMutex::~CRubyMutex()
|
841
862
|
{
|
842
|
-
|
863
|
+
if ( m_valMutex )
|
864
|
+
rho_ruby_destroy_mutex(m_valMutex);
|
843
865
|
}
|
844
866
|
|
845
867
|
boolean CRubyMutex::isMainRubyThread()
|
@@ -849,15 +871,15 @@ boolean CRubyMutex::isMainRubyThread()
|
|
849
871
|
|
850
872
|
void CRubyMutex::Lock()
|
851
873
|
{
|
874
|
+
if ( m_valMutex == null )
|
875
|
+
return;
|
876
|
+
|
852
877
|
unsigned long curThread = rho_ruby_current_thread();
|
853
878
|
if ( curThread == null )
|
854
879
|
return;
|
855
880
|
|
856
881
|
if ( m_valThread != curThread )
|
857
882
|
{
|
858
|
-
if ( m_valMutex == null )
|
859
|
-
m_valMutex = rho_ruby_create_mutex();
|
860
|
-
|
861
883
|
rho_ruby_lock_mutex(m_valMutex);
|
862
884
|
m_valThread = curThread;
|
863
885
|
m_nLockCount = 1;
|
@@ -867,6 +889,9 @@ void CRubyMutex::Lock()
|
|
867
889
|
|
868
890
|
void CRubyMutex::Unlock()
|
869
891
|
{
|
892
|
+
if ( m_valMutex == null )
|
893
|
+
return;
|
894
|
+
|
870
895
|
m_nLockCount--;
|
871
896
|
if ( m_nLockCount == 0 )
|
872
897
|
{
|
@@ -12,7 +12,7 @@ class CRubyMutex
|
|
12
12
|
unsigned long m_valThread, m_valMutex;
|
13
13
|
|
14
14
|
public:
|
15
|
-
CRubyMutex();
|
15
|
+
CRubyMutex(boolean bIgnore);
|
16
16
|
~CRubyMutex();
|
17
17
|
|
18
18
|
boolean isMainRubyThread();
|
@@ -54,8 +54,8 @@ class CDBAdapter
|
|
54
54
|
public:
|
55
55
|
DEFINE_LOGCLASS;
|
56
56
|
|
57
|
-
CDBAdapter(const char* szDBPartition) : m_dbHandle(0), m_strDbPath(""), m_strDbPartition(szDBPartition),
|
58
|
-
m_bUIWaitDB(false), m_nTransactionCounter(0) {}
|
57
|
+
CDBAdapter(const char* szDBPartition, boolean bNoRubyLock) : m_dbHandle(0), m_strDbPath(""), m_strDbPartition(szDBPartition),
|
58
|
+
m_bUIWaitDB(false), m_nTransactionCounter(0), m_mxRuby(bNoRubyLock) {}
|
59
59
|
~CDBAdapter(void){}
|
60
60
|
|
61
61
|
void open (String strDbPath, String strVer, boolean bTemp);
|
@@ -91,7 +91,7 @@ CAsyncHttp::CHttpCommand::CHttpCommand(
|
|
91
91
|
const char* file_path,
|
92
92
|
const char* callback, const char* callback_params, boolean ssl_verify_peer)
|
93
93
|
{
|
94
|
-
m_strUrl = url != null ? url : "";
|
94
|
+
m_strUrl = RHODESAPP().canonicalizeRhoUrl(url != null ? url : "");
|
95
95
|
m_strBody = body != null ? body : "";
|
96
96
|
m_strFilePath = file_path != null ? file_path : "";
|
97
97
|
m_strCallback = callback != null ? callback : "";
|
@@ -44,7 +44,7 @@ public class AsyncHttp extends RhoThread
|
|
44
44
|
super(factory);
|
45
45
|
|
46
46
|
m_ptrFactory = factory;
|
47
|
-
m_strUrl = url != null ? url : "";
|
47
|
+
m_strUrl = RHODESAPP().canonicalizeRhoUrl(url != null ? url : "");
|
48
48
|
m_strBody = body != null ? body : "";
|
49
49
|
m_strFilePath = filepath != null ? filepath : "";
|
50
50
|
m_strCallback = callback != null ? callback : "";
|
@@ -556,7 +556,7 @@ public class NetRequest
|
|
556
556
|
}
|
557
557
|
}while( !m_bCancel && nRead >= 0 );
|
558
558
|
|
559
|
-
if ( code == IHttpConnection.HTTP_PARTIAL_CONTENT && isFinishDownload() )
|
559
|
+
if ( code == IHttpConnection.HTTP_OK || (code == IHttpConnection.HTTP_PARTIAL_CONTENT && isFinishDownload()) )
|
560
560
|
m_nCurDownloadSize = 0;
|
561
561
|
}
|
562
562
|
|
@@ -800,7 +800,8 @@ import com.rho.Tokenizer;
|
|
800
800
|
return schemespec.toString();
|
801
801
|
}
|
802
802
|
|
803
|
-
public String
|
803
|
+
public String getHostSpecificPart()
|
804
|
+
{
|
804
805
|
StringBuffer schemespec = new StringBuffer();
|
805
806
|
|
806
807
|
if (m_scheme != null) {
|
@@ -832,10 +833,6 @@ import com.rho.Tokenizer;
|
|
832
833
|
}
|
833
834
|
}
|
834
835
|
|
835
|
-
if (m_path != null) {
|
836
|
-
schemespec.append((m_path));
|
837
|
-
}
|
838
|
-
|
839
836
|
return schemespec.toString();
|
840
837
|
}
|
841
838
|
|
@@ -1219,12 +1216,12 @@ import com.rho.Tokenizer;
|
|
1219
1216
|
|
1220
1217
|
return sb.toString();
|
1221
1218
|
}
|
1222
|
-
|
1219
|
+
|
1223
1220
|
public static boolean isLocalHost(String strUrl)
|
1224
1221
|
{
|
1225
1222
|
return strUrl.startsWith("http://localhost") ||
|
1226
1223
|
strUrl.startsWith("http://127.0.0.1");
|
1227
|
-
}
|
1224
|
+
}
|
1228
1225
|
|
1229
1226
|
public static boolean isLocalData(String strUrl)
|
1230
1227
|
{
|
@@ -499,10 +499,10 @@ public class SyncEngine implements NetRequest.IRhoSession
|
|
499
499
|
|
500
500
|
if ( !resp.isOK() )
|
501
501
|
m_nErrCode = RhoRuby.getErrorFromResponse(resp);
|
502
|
-
else
|
502
|
+
/*else
|
503
503
|
{
|
504
504
|
processServerSources(resp.getCharData());
|
505
|
-
}
|
505
|
+
}*/
|
506
506
|
|
507
507
|
return resp.isOK();
|
508
508
|
}
|
@@ -521,8 +521,8 @@ public class SyncEngine implements NetRequest.IRhoSession
|
|
521
521
|
|
522
522
|
JSONEntry oJsonEntry = new JSONEntry(szData);
|
523
523
|
|
524
|
-
if (oJsonEntry.hasName("sources") )
|
525
|
-
|
524
|
+
//if (oJsonEntry.hasName("sources") )
|
525
|
+
// processServerSources(szData);
|
526
526
|
|
527
527
|
JSONEntry oJsonObject = oJsonEntry.getEntry("client");
|
528
528
|
if ( !oJsonObject.isEmpty() )
|
@@ -614,7 +614,7 @@ public class SyncEngine implements NetRequest.IRhoSession
|
|
614
614
|
getNotify().fireBulkSyncNotification(false, "download", strPartition, RhoRuby.ERR_NONE);
|
615
615
|
|
616
616
|
String fDataName = makeBulkDataFileName(strDataUrl, dbPartition.getDBPath(), "_bulk.data");
|
617
|
-
String strHsqlDataUrl = getHostFromUrl(serverUrl)
|
617
|
+
String strHsqlDataUrl = FilePath.join(getHostFromUrl(serverUrl), strDataUrl) + ".hsqldb.data";
|
618
618
|
LOG.INFO("Bulk sync: download data from server: " + strHsqlDataUrl);
|
619
619
|
{
|
620
620
|
NetResponse resp1 = getNet().pullFile(strHsqlDataUrl, fDataName, this, null);
|
@@ -631,7 +631,7 @@ public class SyncEngine implements NetRequest.IRhoSession
|
|
631
631
|
return;
|
632
632
|
|
633
633
|
String fScriptName = makeBulkDataFileName(strDataUrl, dbPartition.getDBPath(), "_bulk.script" );
|
634
|
-
String strHsqlScriptUrl = getHostFromUrl(serverUrl)
|
634
|
+
String strHsqlScriptUrl = FilePath.join(getHostFromUrl(serverUrl), strDataUrl) + ".hsqldb.script";
|
635
635
|
LOG.INFO("Bulk sync: download script from server: " + strHsqlScriptUrl);
|
636
636
|
{
|
637
637
|
NetResponse resp1 = getNet().pullFile(strHsqlScriptUrl, fScriptName, this, null);
|
@@ -820,7 +820,7 @@ public class SyncEngine implements NetRequest.IRhoSession
|
|
820
820
|
static String getHostFromUrl( String strUrl )
|
821
821
|
{
|
822
822
|
URI uri = new URI(strUrl);
|
823
|
-
return uri.
|
823
|
+
return uri.getHostSpecificPart() + "/";
|
824
824
|
}
|
825
825
|
|
826
826
|
}
|
@@ -395,10 +395,10 @@ boolean CSyncEngine::resetClientIDByNet(const String& strClientID)//throws Excep
|
|
395
395
|
|
396
396
|
if ( !resp.isOK() )
|
397
397
|
m_nErrCode = RhoRuby.getErrorFromResponse(resp);
|
398
|
-
else
|
398
|
+
/*else
|
399
399
|
{
|
400
400
|
processServerSources(resp.getCharData());
|
401
|
-
}
|
401
|
+
} */
|
402
402
|
|
403
403
|
return resp.isOK();
|
404
404
|
}
|
@@ -429,8 +429,8 @@ String CSyncEngine::requestClientIDByNet()
|
|
429
429
|
|
430
430
|
CJSONEntry oJsonEntry(szData);
|
431
431
|
|
432
|
-
if (oJsonEntry.hasName("sources") )
|
433
|
-
|
432
|
+
//if (oJsonEntry.hasName("sources") )
|
433
|
+
// processServerSources(szData);
|
434
434
|
|
435
435
|
CJSONEntry oJsonObject = oJsonEntry.getEntry("client");
|
436
436
|
if ( !oJsonObject.isEmpty() )
|
@@ -527,11 +527,7 @@ void CSyncEngine::loadBulkPartition(const String& strPartition )
|
|
527
527
|
|
528
528
|
String fDataName = makeBulkDataFileName(strDataUrl, dbPartition.getDBPath(), "");
|
529
529
|
String strZip = ".rzip";
|
530
|
-
|
531
|
-
if (hostName.c_str()[hostName.length()-1] == '/') {
|
532
|
-
hostName = hostName.substr(0,hostName.length()-1);
|
533
|
-
}
|
534
|
-
String strSqlDataUrl = hostName + strDataUrl+strZip;
|
530
|
+
String strSqlDataUrl = CFilePath::join(getHostFromUrl(serverUrl), strDataUrl) +strZip;
|
535
531
|
LOG(INFO) + "Bulk sync: download data from server: " + strSqlDataUrl;
|
536
532
|
{
|
537
533
|
NetResponse( resp1, getNet().pullFile(strSqlDataUrl, fDataName+strZip, this, null) );
|
@@ -308,12 +308,13 @@ int rho_sync_get_pagesize()
|
|
308
308
|
|
309
309
|
void rho_sync_set_pagesize(int nPageSize)
|
310
310
|
{
|
311
|
-
|
311
|
+
CSyncThread::getSyncEngine().setSyncPageSize(nPageSize);
|
312
312
|
}
|
313
313
|
|
314
314
|
void rho_sync_set_threaded_mode(int b)
|
315
315
|
{
|
316
|
-
|
316
|
+
CSyncThread::getInstance()->setNonThreadedMode(b==0);
|
317
|
+
CSyncThread::getSyncEngine().setNonThreadedMode(b==0);
|
317
318
|
}
|
318
319
|
|
319
320
|
}
|
@@ -216,6 +216,11 @@ Error:
|
|
216
216
|
return SUCCEEDED(hr) ? 0 : -1;
|
217
217
|
}
|
218
218
|
|
219
|
+
LRESULT CMainWindow::OnSetText(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
|
220
|
+
{
|
221
|
+
return TRUE;
|
222
|
+
}
|
223
|
+
|
219
224
|
LRESULT CMainWindow::OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
|
220
225
|
{
|
221
226
|
#if defined (_WIN32_WCE)
|
@@ -550,12 +555,12 @@ void __stdcall CMainWindow::OnBeforeNavigate2(IDispatch* pDisp, VARIANT * pvtURL
|
|
550
555
|
LPCTSTR szURL = OLE2CT(V_BSTR(pvtURL));
|
551
556
|
|
552
557
|
LOG(TRACE) + "OnBeforeNavigate2: " + szURL ;
|
553
|
-
|
558
|
+
/*
|
554
559
|
String strTitle = RHOCONF().getString("title_text");
|
555
560
|
if ( strTitle.length() > 0 )
|
556
561
|
SetWindowText(convertToStringW(strTitle).c_str());
|
557
562
|
else
|
558
|
-
SetWindowText(TEXT("Untitled"))
|
563
|
+
SetWindowText(TEXT("Untitled"));*/
|
559
564
|
|
560
565
|
//RHO_ASSERT(SetMenuItemEnabled(IDM_STOP, TRUE));
|
561
566
|
}
|
@@ -74,6 +74,7 @@ public:
|
|
74
74
|
MESSAGE_HANDLER(WM_ACTIVATE, OnActivate)
|
75
75
|
MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange)
|
76
76
|
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
|
77
|
+
MESSAGE_HANDLER(WM_SETTEXT, OnSetText)
|
77
78
|
MESSAGE_HANDLER(WM_PAINT, OnPaint)
|
78
79
|
COMMAND_ID_HANDLER(IDM_EXIT, OnExitCommand)
|
79
80
|
COMMAND_ID_HANDLER(IDM_NAVIGATE_BACK, OnNavigateBackCommand)
|
@@ -102,6 +103,7 @@ private:
|
|
102
103
|
LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);
|
103
104
|
LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
|
104
105
|
LRESULT OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
|
106
|
+
LRESULT OnSetText(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);
|
105
107
|
|
106
108
|
// WM_COMMAND handlers
|
107
109
|
LRESULT OnExitCommand(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
|
@@ -61,14 +61,15 @@ public :
|
|
61
61
|
}
|
62
62
|
|
63
63
|
#if defined(OS_WINDOWS)
|
64
|
-
if (wcsncmp(lpszToken, _T("
|
64
|
+
if (wcsncmp(lpszToken, _T("http_proxy_url"),14)==0) {
|
65
65
|
char *token = wce_wctomb(lpszToken);
|
66
66
|
char *proxy =parseToken(token,strlen(token));
|
67
|
+
|
68
|
+
if (proxy)
|
69
|
+
httpProxy = proxy;
|
67
70
|
|
68
|
-
|
69
|
-
|
70
|
-
free(proxy);
|
71
|
-
free(token);
|
71
|
+
if (proxy) free(proxy);
|
72
|
+
if (token) free(token);
|
72
73
|
|
73
74
|
} else if (wcsncmp(lpszToken, _T("approot"),7)==0) {
|
74
75
|
char* token = wce_wctomb(lpszToken);
|
@@ -175,9 +176,10 @@ public :
|
|
175
176
|
}
|
176
177
|
|
177
178
|
rho::common::CRhodesApp::Create(m_strRootPath );
|
179
|
+
String strTitle = RHODESAPP().getAppTitle();
|
178
180
|
|
179
181
|
// Create the main application window
|
180
|
-
m_appWindow.Create(NULL, CWindow::rcDefault,
|
182
|
+
m_appWindow.Create(NULL, CWindow::rcDefault, convertToStringW(strTitle).c_str(), WS_VISIBLE);
|
181
183
|
if (NULL == m_appWindow.m_hWnd)
|
182
184
|
{
|
183
185
|
return S_FALSE;
|
@@ -201,7 +203,7 @@ public :
|
|
201
203
|
NULL,
|
202
204
|
&g_hNotify);
|
203
205
|
#else
|
204
|
-
rho_clientregister_create("win32_client");
|
206
|
+
//rho_clientregister_create("win32_client");
|
205
207
|
#endif
|
206
208
|
|
207
209
|
return S_OK;
|
@@ -2,6 +2,11 @@ CREATE TRIGGER rhodeleteTrigger BEFORE DELETE ON object_values FOR EACH ROW
|
|
2
2
|
BEGIN
|
3
3
|
SELECT rhoOnDeleteObjectRecord(OLD.value, OLD.source_id, OLD.attrib );
|
4
4
|
END;
|
5
|
+
;
|
6
|
+
CREATE TRIGGER rhoupdateTrigger BEFORE UPDATE ON object_values FOR EACH ROW WHEN NEW.value != OLD.value
|
7
|
+
BEGIN
|
8
|
+
SELECT rhoOnUpdateObjectRecord(OLD.value, OLD.source_id, OLD.attrib );
|
9
|
+
END;
|
5
10
|
;
|
6
11
|
CREATE TRIGGER rhoinsertTrigger AFTER INSERT ON object_values FOR EACH ROW
|
7
12
|
BEGIN
|
data/rhodes.gemspec
CHANGED
@@ -3,7 +3,7 @@ require "lib/rhodes.rb"
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = %q{rhodes}
|
6
|
-
s.version = '2.0.0.
|
6
|
+
s.version = '2.0.0.beta11'
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
9
|
s.authors = ["Rhomobile"]
|
Binary file
|
Binary file
|