Skip to content

Commit b754f07

Browse files
committed
add QgsApplication::upgradeConfig to upgrade any configs that changed from 1.8
use different keys for scanItemsInBrowser and scanZipInBrowser in qgis-1.9 because new storage type (string vs. int) causes conflicts with 1.8
1 parent 038acbc commit b754f07

11 files changed

+145
-52
lines changed

src/app/qgisapp.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -2546,7 +2546,7 @@ bool QgisApp::askUserForZipItemLayers( QString path )
25462546
QgsDebugMsg( "askUserForZipItemLayers( " + path + ")" );
25472547

25482548
// if scanZipBrowser == no: skip to the next file
2549-
if ( settings.value( "/qgis/scanZipInBrowser", "basic" ).toString() == "no" )
2549+
if ( settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString() == "no" )
25502550
{
25512551
return false;
25522552
}

src/app/qgsoptions.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WFlags fl ) :
228228
cmbScanItemsInBrowser->clear();
229229
cmbScanItemsInBrowser->addItem( tr( "Check file contents" ), "contents" ); // 0
230230
cmbScanItemsInBrowser->addItem( tr( "Check extension" ), "extension" ); // 1
231-
int index = cmbScanItemsInBrowser->findData( settings.value( "/qgis/scanItemsInBrowser", "" ) );
231+
int index = cmbScanItemsInBrowser->findData( settings.value( "/qgis/scanItemsInBrowser2", "" ) );
232232
if ( index == -1 ) index = 1;
233233
cmbScanItemsInBrowser->setCurrentIndex( index );
234234

@@ -238,7 +238,7 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WFlags fl ) :
238238
// cmbScanZipInBrowser->addItem( tr( "Passthru" ) ); // 1 - removed
239239
cmbScanZipInBrowser->addItem( tr( "Basic scan" ), QVariant( "basic" ) );
240240
cmbScanZipInBrowser->addItem( tr( "Full scan" ), QVariant( "full" ) );
241-
index = cmbScanZipInBrowser->findData( settings.value( "/qgis/scanZipInBrowser", "" ) );
241+
index = cmbScanZipInBrowser->findData( settings.value( "/qgis/scanZipInBrowser2", "" ) );
242242
if ( index == -1 ) index = 1;
243243
cmbScanZipInBrowser->setCurrentIndex( index );
244244

@@ -881,9 +881,9 @@ void QgsOptions::saveOptions()
881881
settings.setValue( "/qgis/attributeTableBehaviour", cmbAttrTableBehaviour->currentIndex() );
882882
settings.setValue( "/qgis/attributeTableRowCache", spinBoxAttrTableRowCache->value() );
883883
settings.setValue( "/qgis/promptForRasterSublayers", cmbPromptRasterSublayers->currentIndex() );
884-
settings.setValue( "/qgis/scanItemsInBrowser",
884+
settings.setValue( "/qgis/scanItemsInBrowser2",
885885
cmbScanItemsInBrowser->itemData( cmbScanItemsInBrowser->currentIndex() ).toString() );
886-
settings.setValue( "/qgis/scanZipInBrowser",
886+
settings.setValue( "/qgis/scanZipInBrowser2",
887887
cmbScanZipInBrowser->itemData( cmbScanZipInBrowser->currentIndex() ).toString() );
888888
settings.setValue( "/qgis/ignoreShapeEncoding", cbxIgnoreShapeEncoding->isChecked() );
889889
settings.setValue( "/qgis/dockIdentifyResults", cbxIdentifyResultsDocked->isChecked() );

src/core/qgsapplication.cpp

+87
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,9 @@ void QgsApplication::initQgis()
583583

584584
// create map layer registry if doesn't exist
585585
QgsMapLayerRegistry::instance();
586+
587+
// upgrade config options from older version
588+
upgradeConfig();
586589
}
587590

588591
void QgsApplication::exitQgis()
@@ -858,3 +861,87 @@ void QgsApplication::applyGdalSkippedDrivers()
858861
CPLSetConfigOption( "GDAL_SKIP", myDriverList.toUtf8() );
859862
GDALAllRegister(); //to update driver list and skip missing ones
860863
}
864+
865+
void QgsApplication::upgradeConfig()
866+
{
867+
QSettings settings;
868+
869+
/* Due to changes in settings storage types for "scan items" and "scan zip" settings,
870+
qgis-1.8 and qgis-1.9 have conficting values, so the keys have been renamed
871+
Here we do a 1-time check to copy old setting to new setting
872+
*/
873+
874+
// use a special settings key so we only check once
875+
if ( ! settings.value( "/qgis/scanInBrowserUpgradeChecked", false ).toBool() )
876+
{
877+
QVariant v;
878+
int i;
879+
QString s;
880+
bool ok;
881+
882+
// check if new setting is empty
883+
if ( settings.value( "/qgis/scanItemsInBrowser2" ).isNull() )
884+
{
885+
v = settings.value( "/qgis/scanItemsInBrowser" );
886+
i = v.toInt( &ok );
887+
// check if value was defined in qgis-1.8 (as int)
888+
if ( ! v.isNull() && ok )
889+
{
890+
// convert old setting to new setting
891+
switch ( i )
892+
{
893+
case 0:
894+
s = "contents";
895+
break;
896+
case 1:
897+
s = "extension";
898+
break;
899+
default:
900+
s = "";
901+
break;
902+
}
903+
settings.setValue( "/qgis/scanItemsInBrowser2", s );
904+
}
905+
// check if value was defined in qgis-1.9 (as QString)
906+
else if ( ! v.isNull() && !v.toString().isEmpty() )
907+
{
908+
s = v.toString();
909+
settings.setValue( "/qgis/scanItemsInBrowser2", s );
910+
}
911+
}
912+
913+
if ( settings.value( "/qgis/scanZipInBrowser2" ).isNull() )
914+
{
915+
v = settings.value( "/qgis/scanZipInBrowser" );
916+
i = v.toInt( & ok );
917+
if ( ! v.isNull() && ok )
918+
{
919+
switch ( i )
920+
{
921+
case 0:
922+
s = "No";
923+
break;
924+
case 1: // passthru removed, use basic instead
925+
case 2:
926+
s = "basic";
927+
break;
928+
case 3:
929+
s = "full";
930+
break;
931+
default:
932+
s = "";
933+
break;
934+
}
935+
settings.setValue( "/qgis/scanZipInBrowser2", s );
936+
}
937+
else if ( ! v.isNull() && !v.toString().isEmpty() )
938+
{
939+
s = v.toString();
940+
settings.setValue( "/qgis/scanZipInBrowser2", s );
941+
}
942+
}
943+
944+
settings.setValue( "/qgis/scanInBrowserUpgradeChecked", true );
945+
}
946+
}
947+

src/core/qgsapplication.h

+4
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,10 @@ class CORE_EXPORT QgsApplication: public QApplication
270270
* @note added in 2.0 */
271271
static void applyGdalSkippedDrivers();
272272

273+
/** upgrades config options from older version, called by initQGis
274+
* @note added in 2.0 */
275+
static void upgradeConfig();
276+
273277
signals:
274278
//! @note not available in python bindings
275279
void preNotify( QObject * receiver, QEvent * event, bool * done );

src/core/qgsdataitem.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ QVector<QgsDataItem*> QgsDirectoryItem::createChildren( )
474474

475475
QString vsiPrefix = QgsZipItem::vsiPrefix( path );
476476
// vsizip support was added to GDAL/OGR 1.6 but GDAL_VERSION_NUM not available here
477-
if (( settings.value( "/qgis/scanZipInBrowser", QVariant( "basic" ) ).toString() != "no" ) &&
477+
if (( settings.value( "/qgis/scanZipInBrowser2", QVariant( "basic" ) ).toString() != "no" ) &&
478478
( vsiPrefix == "/vsizip/" || vsiPrefix == "/vsitar/" ) )
479479
{
480480
QgsDataItem * item = QgsZipItem::itemFromPath( this, path, name );
@@ -857,7 +857,7 @@ QVector<QgsDataItem*> QgsZipItem::createChildren( )
857857
QString tmpPath;
858858
QString childPath;
859859
QSettings settings;
860-
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser", "basic" ).toString();
860+
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString();
861861

862862
mZipFileList.clear();
863863

@@ -955,7 +955,7 @@ QString QgsZipItem::vsiPrefix( QString path )
955955
QgsDataItem* QgsZipItem::itemFromPath( QgsDataItem* parent, QString path, QString name )
956956
{
957957
QSettings settings;
958-
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser", "basic" ).toString();
958+
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString();
959959
QString vsiPath = path;
960960
int zipFileCount = 0;
961961
QStringList zipFileList;
@@ -1059,7 +1059,7 @@ const QStringList & QgsZipItem::getZipFileList()
10591059

10601060
QString tmpPath;
10611061
QSettings settings;
1062-
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser", "basic" ).toString();
1062+
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString();
10631063

10641064
QgsDebugMsgLevel( QString( "path = %1 name= %2 scanZipSetting= %3 vsiPrefix= %4" ).arg( path() ).arg( name() ).arg( scanZipSetting ).arg( mVsiPrefix ), 3 );
10651065

src/providers/gdal/qgsgdaldataitems.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ QGISEXTERN QgsDataItem * dataItem( QString thePath, QgsDataItem* parentItem )
144144

145145
// zip settings + info
146146
QSettings settings;
147-
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser", "basic" ).toString();
147+
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString();
148148
QString vsiPrefix = QgsZipItem::vsiPrefix( thePath );
149149
bool is_vsizip = ( vsiPrefix == "/vsizip/" );
150150
bool is_vsigzip = ( vsiPrefix == "/vsigzip/" );
@@ -217,7 +217,7 @@ QGISEXTERN QgsDataItem * dataItem( QString thePath, QgsDataItem* parentItem )
217217
// not zipfile and scan items == "Check extension"
218218
if ((( is_vsizip || is_vsitar ) && scanZipSetting == "basic" ) ||
219219
( !is_vsizip && !is_vsitar &&
220-
( settings.value( "/qgis/scanItemsInBrowser",
220+
( settings.value( "/qgis/scanItemsInBrowser2",
221221
"extension" ).toString() == "extension" ) ) )
222222
{
223223
// if this is a VRT file make sure it is raster VRT to avoid duplicates

src/providers/gdal/qgsgdalprovider.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1897,7 +1897,7 @@ void buildSupportedRasterFileFilterAndExtensions( QString & theFileFiltersString
18971897
// VSIFileHandler (see qgsogrprovider.cpp)
18981898
#if defined(GDAL_VERSION_NUM) && GDAL_VERSION_NUM >= 1600
18991899
QSettings settings;
1900-
if ( settings.value( "/qgis/scanZipInBrowser", "basic" ).toString() != "no" )
1900+
if ( settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString() != "no" )
19011901
{
19021902
QString glob = "*.zip";
19031903
glob += " *.gz";

src/providers/ogr/qgsogrdataitems.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ QGISEXTERN QgsDataItem * dataItem( QString thePath, QgsDataItem* parentItem )
239239

240240
// zip settings + info
241241
QSettings settings;
242-
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser", "basic" ).toString();
242+
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString();
243243
QString vsiPrefix = QgsZipItem::vsiPrefix( thePath );
244244
bool is_vsizip = ( vsiPrefix == "/vsizip/" );
245245
bool is_vsigzip = ( vsiPrefix == "/vsigzip/" );
@@ -318,7 +318,7 @@ QGISEXTERN QgsDataItem * dataItem( QString thePath, QgsDataItem* parentItem )
318318
// not zipfile and scan items == "Check extension"
319319
if ((( is_vsizip || is_vsitar ) && scanZipSetting == "basic" ) ||
320320
( !is_vsizip && !is_vsitar &&
321-
( settings.value( "/qgis/scanItemsInBrowser",
321+
( settings.value( "/qgis/scanItemsInBrowser2",
322322
"extension" ).toString() == "extension" ) ) )
323323
{
324324
// if this is a VRT file make sure it is vector VRT to avoid duplicates

src/providers/ogr/qgsogrprovider.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1790,7 +1790,7 @@ QString createFilters( QString type )
17901790
// This does not work for some file types, see VSIFileHandler doc.
17911791
#if defined(GDAL_VERSION_NUM) && GDAL_VERSION_NUM >= 1600
17921792
QSettings settings;
1793-
if ( settings.value( "/qgis/scanZipInBrowser", "basic" ).toString() != "no" )
1793+
if ( settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString() != "no" )
17941794
{
17951795
myFileFilters += createFileFilter_( QObject::tr( "GDAL/OGR VSIFileHandler" ), "*.zip *.gz *.tar *.tar.gz *.tgz" );
17961796
myExtensions << "zip" << "gz" << "tar" << "tar.gz" << "tgz";

tests/src/core/testqgsdataitem.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ void TestQgsDataItem::initTestCase()
6262
QCoreApplication::setApplicationName( "QGIS-TEST" );
6363
// save current scanItemsSetting value
6464
QSettings settings;
65-
mScanItemsSetting = settings.value( "/qgis/scanItemsInBrowser", 0 ).toInt();
65+
mScanItemsSetting = settings.value( "/qgis/scanItemsInBrowser2", 0 ).toInt();
6666

6767
//create a directory item that will be used in all tests...
6868
mDirItem = new QgsDirectoryItem( 0, "Test", TEST_DATA_DIR );
@@ -72,7 +72,7 @@ void TestQgsDataItem::cleanupTestCase()
7272
{
7373
// restore scanItemsSetting
7474
QSettings settings;
75-
settings.setValue( "/qgis/scanItemsInBrowser", mScanItemsSetting );
75+
settings.setValue( "/qgis/scanItemsInBrowser2", mScanItemsSetting );
7676
if ( mDirItem )
7777
delete mDirItem;
7878
}
@@ -96,7 +96,7 @@ void TestQgsDataItem::testDirItemChildren()
9696
QSettings settings;
9797
for ( int iSetting = 0 ; iSetting <= 1 ; iSetting++ )
9898
{
99-
settings.setValue( "/qgis/scanItemsInBrowser", iSetting );
99+
settings.setValue( "/qgis/scanItemsInBrowser2", iSetting );
100100
QgsDirectoryItem* dirItem = new QgsDirectoryItem( 0, "Test", TEST_DATA_DIR );
101101
QVERIFY( isValidDirItem( dirItem ) );
102102

0 commit comments

Comments
 (0)