Skip to content

Commit 36b9ad1

Browse files
etienneskyjef-n
authored andcommitted
fix ziplayer handling for windows
1 parent 77b8a33 commit 36b9ad1

File tree

3 files changed

+49
-22
lines changed

3 files changed

+49
-22
lines changed

src/core/qgsdataitem.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -897,7 +897,6 @@ QVector<QgsDataItem*> QgsZipItem::createChildren( )
897897

898898
QgsDataItem* QgsZipItem::itemFromPath( QgsDataItem* parent, QString path, QString name )
899899
{
900-
901900
QSettings settings;
902901
int scanZipSetting = settings.value( "/qgis/scanZipInBrowser", 1 ).toInt();
903902
QString vsizipPath = path;

src/core/qgsmaplayer.cpp

+8-7
Original file line numberDiff line numberDiff line change
@@ -553,15 +553,16 @@ QString QgsMapLayer::styleURI( )
553553
{
554554
QString myURI = publicSource();
555555

556-
// if file is using the /vsizip/ or /vsigzip/ mechanism, cleanup the name
557-
if ( myURI.left( 9 ) == "/vsigzip/" )
556+
// if file is using the VSIFILE mechanism, remove the prefix
557+
if ( myURI.startsWith( "/vsigzip/", Qt::CaseInsensitive ) )
558558
{
559-
myURI.remove( 1, 9 );
559+
myURI.remove( 0, 9 );
560560
}
561-
else if ( myURI.left( 8 ) == "/vsizip/" && myURI.right( 4 ) == ".zip" )
561+
else if ( myURI.startsWith( "/vsizip/", Qt::CaseInsensitive ) &&
562+
myURI.endsWith( ".zip", Qt::CaseInsensitive ) )
562563
{
563564
// ideally we should look for .qml file inside zip file
564-
myURI.remove( 1, 8 );
565+
myURI.remove( 0, 8 );
565566
}
566567

567568
QFileInfo myFileInfo( myURI );
@@ -570,12 +571,12 @@ QString QgsMapLayer::styleURI( )
570571
if ( myFileInfo.exists() )
571572
{
572573
// if file is using the /vsizip/ or /vsigzip/ mechanism, cleanup the name
573-
if ( myURI.right( 3 ) == ".gz" )
574+
if ( myURI.endsWith( ".gz", Qt::CaseInsensitive ) )
574575
{
575576
myURI.chop( 3 );
576577
myFileInfo.setFile( myURI );
577578
}
578-
else if ( myURI.right( 4 ) == ".zip" )
579+
else if ( myURI.endsWith( ".zip", Qt::CaseInsensitive ) )
579580
{
580581
myURI.chop( 4 );
581582
myFileInfo.setFile( myURI );

tests/src/core/testziplayer.cpp

+41-14
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ class TestZipLayer: public QObject
4141
private:
4242

4343
QString mDataDir;
44-
QSettings mSettings;
4544
int mMaxScanZipSetting;
4645
int mScanZipSetting;
4746

@@ -191,7 +190,11 @@ bool TestZipLayer::testZipItem( QString myFileName, QString myChildName = "" )
191190
int TestZipLayer::getLayerTransparency( QString myFileName, QString myProviderKey, int myScanZipSetting )
192191
{
193192
int myTransparency = -1;
194-
mSettings.setValue( "/qgis/scanZipInBrowser", myScanZipSetting );
193+
QSettings settings;
194+
settings.setValue( "/qgis/scanZipInBrowser", myScanZipSetting );
195+
if ( myScanZipSetting != settings.value( "/qgis/scanZipInBrowser" ).toInt() )
196+
return myTransparency;
197+
195198
QgsMapLayer * myLayer = NULL;
196199
if ( myScanZipSetting == 1 )
197200
myLayer = getLayer( myFileName, "", myProviderKey );
@@ -214,10 +217,16 @@ void TestZipLayer::initTestCase()
214217
QgsApplication::initQgis();
215218
// save data dir
216219
mDataDir = QString( TEST_DATA_DIR ) + QDir::separator();
217-
// set zipSetting to 1 (Passthru) and save current value
218-
mScanZipSetting = mSettings.value( "/qgis/scanZipInBrowser", 1 ).toInt();
219-
mSettings.setValue( "/qgis/scanZipInBrowser", 1 );
220-
// max zipSetting value, depending on zlib presence
220+
// Set up the QSettings environment
221+
QCoreApplication::setOrganizationName( "QuantumGIS" );
222+
QCoreApplication::setOrganizationDomain( "qgis.org" );
223+
QCoreApplication::setApplicationName( "QGIS-TEST" );
224+
225+
// save current zipSetting value
226+
QSettings settings;
227+
mScanZipSetting = settings.value( "/qgis/scanZipInBrowser", 1 ).toInt();
228+
229+
// max zipSetting value depends on zlib presence
221230
mMaxScanZipSetting = 1;
222231
#ifdef HAVE_ZLIB
223232
mMaxScanZipSetting = 3;
@@ -228,12 +237,14 @@ void TestZipLayer::initTestCase()
228237
void TestZipLayer::cleanupTestCase()
229238
{
230239
// restore zipSetting
231-
mSettings.setValue( "/qgis/scanZipInBrowser", mScanZipSetting );
240+
QSettings settings;
241+
settings.setValue( "/qgis/scanZipInBrowser", mScanZipSetting );
232242
}
233243

234244

235245
void TestZipLayer::testPassthruVectorZip()
236246
{
247+
QSettings settings;
237248
QString myFileName = mDataDir + "points2.zip";
238249
QgsDebugMsg( "GDAL: " + QString( GDAL_RELEASE_NAME ) );
239250
#if GDAL_VERSION_NUM < 1800
@@ -242,62 +253,76 @@ void TestZipLayer::testPassthruVectorZip()
242253
QgsDebugMsg( "FILE: " + QString( myFileName ) );
243254
for ( int i = 1 ; i <= mMaxScanZipSetting ; i++ )
244255
{
245-
mSettings.setValue( "/qgis/scanZipInBrowser", i );
256+
settings.setValue( "/qgis/scanZipInBrowser", i );
257+
QVERIFY( i == settings.value( "/qgis/scanZipInBrowser" ).toInt() );
246258
QVERIFY( testZipItemPassthru( myFileName, "ogr" ) );
247259
}
248260
}
249261

250262
void TestZipLayer::testPassthruVectorGzip()
251263
{
264+
QSettings settings;
252265
#if GDAL_VERSION_NUM < 1700
253266
QSKIP( "This test requires GDAL > 1.7", SkipSingle );
254267
#endif
255268
for ( int i = 1 ; i <= mMaxScanZipSetting ; i++ )
256269
{
257-
mSettings.setValue( "/qgis/scanZipInBrowser", i );
270+
settings.setValue( "/qgis/scanZipInBrowser", i );
271+
QVERIFY( i == settings.value( "/qgis/scanZipInBrowser" ).toInt() );
258272
QVERIFY( testZipItemPassthru( mDataDir + "points3.geojson.gz", "ogr" ) );
259273
}
260274
}
261275

262276
void TestZipLayer::testPassthruRasterZip()
263277
{
278+
QSettings settings;
264279
for ( int i = 1 ; i <= mMaxScanZipSetting ; i++ )
265280
{
266-
mSettings.setValue( "/qgis/scanZipInBrowser", i );
281+
settings.setValue( "/qgis/scanZipInBrowser", i );
282+
QVERIFY( i == settings.value( "/qgis/scanZipInBrowser" ).toInt() );
267283
QVERIFY( testZipItemPassthru( mDataDir + "landsat_b1.zip", "gdal" ) );
268284
}
269285
}
270286

271287
void TestZipLayer::testPassthruRasterGzip()
272288
{
289+
QSettings settings;
273290
for ( int i = 1 ; i <= mMaxScanZipSetting ; i++ )
274291
{
275-
mSettings.setValue( "/qgis/scanZipInBrowser", i );
292+
settings.setValue( "/qgis/scanZipInBrowser", i );
293+
QVERIFY( i == settings.value( "/qgis/scanZipInBrowser" ).toInt() );
276294
QVERIFY( testZipItemPassthru( mDataDir + "landsat_b1.tif.gz", "gdal" ) );
277295
}
278296
}
279297

280298
void TestZipLayer::testZipItemRaster()
281299
{
300+
QSettings settings;
301+
282302
#ifndef HAVE_ZLIB
283303
QSKIP( "This test requires ZLIB", SkipSingle );
284304
#endif
285305

286306
for ( int i = 2 ; i <= mMaxScanZipSetting ; i++ )
287307
{
288-
mSettings.setValue( "/qgis/scanZipInBrowser", i );
308+
settings.setValue( "/qgis/scanZipInBrowser", i );
309+
QVERIFY( i == settings.value( "/qgis/scanZipInBrowser" ).toInt() );
289310
QVERIFY( testZipItem( mDataDir + "testzip.zip", "landsat_b1.tif" ) );
290311
}
291312
}
292313

293314
void TestZipLayer::testZipItemVector()
294315
{
316+
QSettings settings;
317+
295318
#ifndef HAVE_ZLIB
296319
QSKIP( "This test requires ZLIB", SkipSingle );
297320
#endif
321+
298322
for ( int i = 2 ; i <= mMaxScanZipSetting ; i++ )
299323
{
300-
mSettings.setValue( "/qgis/scanZipInBrowser", i );
324+
settings.setValue( "/qgis/scanZipInBrowser", i );
325+
QVERIFY( i == settings.value( "/qgis/scanZipInBrowser" ).toInt() );
301326
QVERIFY( testZipItem( mDataDir + "testzip.zip", "points.shp" ) );
302327
}
303328
}
@@ -311,7 +336,9 @@ void TestZipLayer::testZipItemAll()
311336
// test for all items inside zip, using zipSetting 3 (Full Scan) which will ignore invalid items
312337
// using zipSetting 2 (Basic Scan) would raise errors, because QgsZipItem would not test for valid items
313338
// and return child names of the invalid items
314-
mSettings.setValue( "/qgis/scanZipInBrowser", 3 );
339+
QSettings settings;
340+
settings.setValue( "/qgis/scanZipInBrowser", 3 );
341+
QVERIFY( 3 == settings.value( "/qgis/scanZipInBrowser" ).toInt() );
315342
QVERIFY( testZipItem( mDataDir + "testzip.zip", "" ) );
316343
}
317344

0 commit comments

Comments
 (0)