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
This commit is contained in:
Etienne Tourigny 2012-11-06 17:48:57 -02:00
parent 038acbc760
commit b754f0771f
11 changed files with 145 additions and 52 deletions

View File

@ -2546,7 +2546,7 @@ bool QgisApp::askUserForZipItemLayers( QString path )
QgsDebugMsg( "askUserForZipItemLayers( " + path + ")" );
// if scanZipBrowser == no: skip to the next file
if ( settings.value( "/qgis/scanZipInBrowser", "basic" ).toString() == "no" )
if ( settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString() == "no" )
{
return false;
}

View File

@ -228,7 +228,7 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WFlags fl ) :
cmbScanItemsInBrowser->clear();
cmbScanItemsInBrowser->addItem( tr( "Check file contents" ), "contents" ); // 0
cmbScanItemsInBrowser->addItem( tr( "Check extension" ), "extension" ); // 1
int index = cmbScanItemsInBrowser->findData( settings.value( "/qgis/scanItemsInBrowser", "" ) );
int index = cmbScanItemsInBrowser->findData( settings.value( "/qgis/scanItemsInBrowser2", "" ) );
if ( index == -1 ) index = 1;
cmbScanItemsInBrowser->setCurrentIndex( index );
@ -238,7 +238,7 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WFlags fl ) :
// cmbScanZipInBrowser->addItem( tr( "Passthru" ) ); // 1 - removed
cmbScanZipInBrowser->addItem( tr( "Basic scan" ), QVariant( "basic" ) );
cmbScanZipInBrowser->addItem( tr( "Full scan" ), QVariant( "full" ) );
index = cmbScanZipInBrowser->findData( settings.value( "/qgis/scanZipInBrowser", "" ) );
index = cmbScanZipInBrowser->findData( settings.value( "/qgis/scanZipInBrowser2", "" ) );
if ( index == -1 ) index = 1;
cmbScanZipInBrowser->setCurrentIndex( index );
@ -881,9 +881,9 @@ void QgsOptions::saveOptions()
settings.setValue( "/qgis/attributeTableBehaviour", cmbAttrTableBehaviour->currentIndex() );
settings.setValue( "/qgis/attributeTableRowCache", spinBoxAttrTableRowCache->value() );
settings.setValue( "/qgis/promptForRasterSublayers", cmbPromptRasterSublayers->currentIndex() );
settings.setValue( "/qgis/scanItemsInBrowser",
settings.setValue( "/qgis/scanItemsInBrowser2",
cmbScanItemsInBrowser->itemData( cmbScanItemsInBrowser->currentIndex() ).toString() );
settings.setValue( "/qgis/scanZipInBrowser",
settings.setValue( "/qgis/scanZipInBrowser2",
cmbScanZipInBrowser->itemData( cmbScanZipInBrowser->currentIndex() ).toString() );
settings.setValue( "/qgis/ignoreShapeEncoding", cbxIgnoreShapeEncoding->isChecked() );
settings.setValue( "/qgis/dockIdentifyResults", cbxIdentifyResultsDocked->isChecked() );

View File

@ -583,6 +583,9 @@ void QgsApplication::initQgis()
// create map layer registry if doesn't exist
QgsMapLayerRegistry::instance();
// upgrade config options from older version
upgradeConfig();
}
void QgsApplication::exitQgis()
@ -858,3 +861,87 @@ void QgsApplication::applyGdalSkippedDrivers()
CPLSetConfigOption( "GDAL_SKIP", myDriverList.toUtf8() );
GDALAllRegister(); //to update driver list and skip missing ones
}
void QgsApplication::upgradeConfig()
{
QSettings settings;
/* Due to changes in settings storage types for "scan items" and "scan zip" settings,
qgis-1.8 and qgis-1.9 have conficting values, so the keys have been renamed
Here we do a 1-time check to copy old setting to new setting
*/
// use a special settings key so we only check once
if ( ! settings.value( "/qgis/scanInBrowserUpgradeChecked", false ).toBool() )
{
QVariant v;
int i;
QString s;
bool ok;
// check if new setting is empty
if ( settings.value( "/qgis/scanItemsInBrowser2" ).isNull() )
{
v = settings.value( "/qgis/scanItemsInBrowser" );
i = v.toInt( &ok );
// check if value was defined in qgis-1.8 (as int)
if ( ! v.isNull() && ok )
{
// convert old setting to new setting
switch ( i )
{
case 0:
s = "contents";
break;
case 1:
s = "extension";
break;
default:
s = "";
break;
}
settings.setValue( "/qgis/scanItemsInBrowser2", s );
}
// check if value was defined in qgis-1.9 (as QString)
else if ( ! v.isNull() && !v.toString().isEmpty() )
{
s = v.toString();
settings.setValue( "/qgis/scanItemsInBrowser2", s );
}
}
if ( settings.value( "/qgis/scanZipInBrowser2" ).isNull() )
{
v = settings.value( "/qgis/scanZipInBrowser" );
i = v.toInt( & ok );
if ( ! v.isNull() && ok )
{
switch ( i )
{
case 0:
s = "No";
break;
case 1: // passthru removed, use basic instead
case 2:
s = "basic";
break;
case 3:
s = "full";
break;
default:
s = "";
break;
}
settings.setValue( "/qgis/scanZipInBrowser2", s );
}
else if ( ! v.isNull() && !v.toString().isEmpty() )
{
s = v.toString();
settings.setValue( "/qgis/scanZipInBrowser2", s );
}
}
settings.setValue( "/qgis/scanInBrowserUpgradeChecked", true );
}
}

View File

@ -270,6 +270,10 @@ class CORE_EXPORT QgsApplication: public QApplication
* @note added in 2.0 */
static void applyGdalSkippedDrivers();
/** upgrades config options from older version, called by initQGis
* @note added in 2.0 */
static void upgradeConfig();
signals:
//! @note not available in python bindings
void preNotify( QObject * receiver, QEvent * event, bool * done );

View File

@ -474,7 +474,7 @@ QVector<QgsDataItem*> QgsDirectoryItem::createChildren( )
QString vsiPrefix = QgsZipItem::vsiPrefix( path );
// vsizip support was added to GDAL/OGR 1.6 but GDAL_VERSION_NUM not available here
if (( settings.value( "/qgis/scanZipInBrowser", QVariant( "basic" ) ).toString() != "no" ) &&
if (( settings.value( "/qgis/scanZipInBrowser2", QVariant( "basic" ) ).toString() != "no" ) &&
( vsiPrefix == "/vsizip/" || vsiPrefix == "/vsitar/" ) )
{
QgsDataItem * item = QgsZipItem::itemFromPath( this, path, name );
@ -857,7 +857,7 @@ QVector<QgsDataItem*> QgsZipItem::createChildren( )
QString tmpPath;
QString childPath;
QSettings settings;
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser", "basic" ).toString();
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString();
mZipFileList.clear();
@ -955,7 +955,7 @@ QString QgsZipItem::vsiPrefix( QString path )
QgsDataItem* QgsZipItem::itemFromPath( QgsDataItem* parent, QString path, QString name )
{
QSettings settings;
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser", "basic" ).toString();
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString();
QString vsiPath = path;
int zipFileCount = 0;
QStringList zipFileList;
@ -1059,7 +1059,7 @@ const QStringList & QgsZipItem::getZipFileList()
QString tmpPath;
QSettings settings;
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser", "basic" ).toString();
QString scanZipSetting = settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString();
QgsDebugMsgLevel( QString( "path = %1 name= %2 scanZipSetting= %3 vsiPrefix= %4" ).arg( path() ).arg( name() ).arg( scanZipSetting ).arg( mVsiPrefix ), 3 );

View File

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

View File

@ -1897,7 +1897,7 @@ void buildSupportedRasterFileFilterAndExtensions( QString & theFileFiltersString
// VSIFileHandler (see qgsogrprovider.cpp)
#if defined(GDAL_VERSION_NUM) && GDAL_VERSION_NUM >= 1600
QSettings settings;
if ( settings.value( "/qgis/scanZipInBrowser", "basic" ).toString() != "no" )
if ( settings.value( "/qgis/scanZipInBrowser2", "basic" ).toString() != "no" )
{
QString glob = "*.zip";
glob += " *.gz";

View File

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

View File

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

View File

@ -62,7 +62,7 @@ void TestQgsDataItem::initTestCase()
QCoreApplication::setApplicationName( "QGIS-TEST" );
// save current scanItemsSetting value
QSettings settings;
mScanItemsSetting = settings.value( "/qgis/scanItemsInBrowser", 0 ).toInt();
mScanItemsSetting = settings.value( "/qgis/scanItemsInBrowser2", 0 ).toInt();
//create a directory item that will be used in all tests...
mDirItem = new QgsDirectoryItem( 0, "Test", TEST_DATA_DIR );
@ -72,7 +72,7 @@ void TestQgsDataItem::cleanupTestCase()
{
// restore scanItemsSetting
QSettings settings;
settings.setValue( "/qgis/scanItemsInBrowser", mScanItemsSetting );
settings.setValue( "/qgis/scanItemsInBrowser2", mScanItemsSetting );
if ( mDirItem )
delete mDirItem;
}
@ -96,7 +96,7 @@ void TestQgsDataItem::testDirItemChildren()
QSettings settings;
for ( int iSetting = 0 ; iSetting <= 1 ; iSetting++ )
{
settings.setValue( "/qgis/scanItemsInBrowser", iSetting );
settings.setValue( "/qgis/scanItemsInBrowser2", iSetting );
QgsDirectoryItem* dirItem = new QgsDirectoryItem( 0, "Test", TEST_DATA_DIR );
QVERIFY( isValidDirItem( dirItem ) );

View File

@ -43,6 +43,7 @@ class TestZipLayer: public QObject
QString mDataDir;
QString mScanZipSetting;
QStringList mScanZipSettings;
QString mSettingsKey;
// get map layer using Passthru
QgsMapLayer * getLayer( QString myPath, QString myName, QString myProviderKey );
@ -216,8 +217,8 @@ int TestZipLayer::getLayerTransparency( QString myFileName, QString myProviderKe
{
int myTransparency = -1;
QSettings settings;
settings.setValue( "/qgis/scanZipInBrowser", myScanZipSetting );
if ( myScanZipSetting != settings.value( "/qgis/scanZipInBrowser" ).toString() )
settings.setValue( mSettingsKey, myScanZipSetting );
if ( myScanZipSetting != settings.value( mSettingsKey ).toString() )
return myTransparency;
QgsMapLayer * myLayer = NULL;
@ -272,7 +273,8 @@ void TestZipLayer::initTestCase()
// save current zipSetting value
QSettings settings;
mScanZipSetting = settings.value( "/qgis/scanZipInBrowser", "basic" ).toString();
mSettingsKey = "/qgis/scanZipInBrowser2";
mScanZipSetting = settings.value( mSettingsKey, "basic" ).toString();
mScanZipSettings << "basic" << "full";
}
@ -280,7 +282,7 @@ void TestZipLayer::cleanupTestCase()
{
// restore zipSetting
QSettings settings;
settings.setValue( "/qgis/scanZipInBrowser", mScanZipSetting );
settings.setValue( mSettingsKey, mScanZipSetting );
}
void TestZipLayer::testPassthruVectorZip()
@ -294,8 +296,8 @@ void TestZipLayer::testPassthruVectorZip()
QgsDebugMsg( "FILE: " + QString( myFileName ) );
foreach ( QString s, mScanZipSettings )
{
settings.setValue( "/qgis/scanZipInBrowser", s );
QVERIFY( s == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, s );
QVERIFY( s == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItemPassthru( myFileName, "ogr" ) );
}
}
@ -309,8 +311,8 @@ void TestZipLayer::testPassthruVectorTar()
QString myFileName = mDataDir + "points2.tar";
foreach ( QString s, mScanZipSettings )
{
settings.setValue( "/qgis/scanZipInBrowser", s );
QVERIFY( s == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, s );
QVERIFY( s == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItemPassthru( myFileName, "ogr" ) );
}
}
@ -323,8 +325,8 @@ void TestZipLayer::testPassthruVectorGzip()
QSettings settings;
foreach ( QString s, mScanZipSettings )
{
settings.setValue( "/qgis/scanZipInBrowser", s );
QVERIFY( s == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, s );
QVERIFY( s == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItemPassthru( mDataDir + "points3.geojson.gz", "ogr" ) );
}
}
@ -334,8 +336,8 @@ void TestZipLayer::testPassthruRasterZip()
QSettings settings;
foreach ( QString s, mScanZipSettings )
{
settings.setValue( "/qgis/scanZipInBrowser", s );
QVERIFY( s == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, s );
QVERIFY( s == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItemPassthru( mDataDir + "landsat_b1.zip", "gdal" ) );
}
}
@ -348,8 +350,8 @@ void TestZipLayer::testPassthruRasterTar()
QSettings settings;
foreach ( QString s, mScanZipSettings )
{
settings.setValue( "/qgis/scanZipInBrowser", s );
QVERIFY( s == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, s );
QVERIFY( s == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItemPassthru( mDataDir + "landsat_b1.tar", "gdal" ) );
}
}
@ -359,8 +361,8 @@ void TestZipLayer::testPassthruRasterGzip()
QSettings settings;
foreach ( QString s, mScanZipSettings )
{
settings.setValue( "/qgis/scanZipInBrowser", s );
QVERIFY( s == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, s );
QVERIFY( s == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItemPassthru( mDataDir + "landsat_b1.tif.gz", "gdal" ) );
}
}
@ -370,8 +372,8 @@ void TestZipLayer::testZipItemRaster()
QSettings settings;
foreach ( QString s, mScanZipSettings )
{
settings.setValue( "/qgis/scanZipInBrowser", s );
QVERIFY( s == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, s );
QVERIFY( s == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItem( QDir::tempPath() + "/testzip.zip", "landsat_b1.tif" ) );
}
}
@ -384,8 +386,8 @@ void TestZipLayer::testTarItemRaster()
QSettings settings;
foreach ( QString s, mScanZipSettings )
{
settings.setValue( "/qgis/scanZipInBrowser", s );
QVERIFY( s == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, s );
QVERIFY( s == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItem( mDataDir + "testtar.tgz", "landsat_b1.tif" ) );
}
}
@ -395,8 +397,8 @@ void TestZipLayer::testZipItemVector()
QSettings settings;
foreach ( QString s, mScanZipSettings )
{
settings.setValue( "/qgis/scanZipInBrowser", s );
QVERIFY( s == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, s );
QVERIFY( s == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItem( QDir::tempPath() + "/testzip.zip", "points.shp" ) );
}
}
@ -409,8 +411,8 @@ void TestZipLayer::testTarItemVector()
QSettings settings;
foreach ( QString s, mScanZipSettings )
{
settings.setValue( "/qgis/scanZipInBrowser", s );
QVERIFY( s == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, s );
QVERIFY( s == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItem( mDataDir + "testtar.tgz", "points.shp" ) );
}
}
@ -422,8 +424,8 @@ void TestZipLayer::testZipItemAll()
// using zipSetting 2 (Basic Scan) would raise errors, because QgsZipItem would not test for valid items
// and return child names of the invalid items
QSettings settings;
settings.setValue( "/qgis/scanZipInBrowser", "full" );
QVERIFY( "full" == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, "full" );
QVERIFY( "full" == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItem( QDir::tempPath() + "/testzip.zip", "" ) );
}
@ -433,8 +435,8 @@ void TestZipLayer::testTarItemAll()
QSKIP( "This test requires GDAL >= 1.8", SkipSingle );
#endif
QSettings settings;
settings.setValue( "/qgis/scanZipInBrowser", "full" );
QVERIFY( "full" == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, "full" );
QVERIFY( "full" == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItem( mDataDir + "testtar.tgz", "" ) );
}
@ -485,8 +487,8 @@ void TestZipLayer::testZipItemSubfolder()
QSettings settings;
foreach ( QString s, mScanZipSettings )
{
settings.setValue( "/qgis/scanZipInBrowser", s );
QVERIFY( s == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, s );
QVERIFY( s == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItem( QDir::tempPath() + "/testzip.zip", "folder/folder2/landsat_b2.tif" ) );
}
}
@ -499,8 +501,8 @@ void TestZipLayer::testTarItemSubfolder()
QSettings settings;
foreach ( QString s, mScanZipSettings )
{
settings.setValue( "/qgis/scanZipInBrowser", s );
QVERIFY( s == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, s );
QVERIFY( s == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItem( mDataDir + "testtar.tgz", "folder/folder2/landsat_b2.tif" ) );
}
}
@ -514,8 +516,8 @@ void TestZipLayer::testZipItemVRT()
QSettings settings;
foreach ( QString s, mScanZipSettings )
{
settings.setValue( "/qgis/scanZipInBrowser", s );
QVERIFY( s == settings.value( "/qgis/scanZipInBrowser" ).toString() );
settings.setValue( mSettingsKey, s );
QVERIFY( s == settings.value( mSettingsKey ).toString() );
QVERIFY( testZipItem( QDir::tempPath() + "/testzip.zip", "landsat.vrt", "gdal" ) );
// this file is buggy with gdal svn - skip for now
// QVERIFY( testZipItem( QDir::tempPath() + "/testzip.zip", "points.vrt", "ogr" ) );