Skip to content

Commit

Permalink
Move utility functions to QgsOgrProviderUtils
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Jul 22, 2021
1 parent 5067245 commit 2fa296c
Show file tree
Hide file tree
Showing 7 changed files with 53 additions and 49 deletions.
2 changes: 1 addition & 1 deletion src/core/providers/ogr/qgsgeopackagedataitems.cpp
Expand Up @@ -93,7 +93,7 @@ void QgsGeoPackageRootItem::onConnectionsChanged()

void QgsGeoPackageRootItem::newConnection()
{
if ( QgsOgrDataCollectionItem::createConnection( QStringLiteral( "GeoPackage" ), QStringLiteral( "GeoPackage Database (*.gpkg)" ), QStringLiteral( "GPKG" ) ) )
if ( QgsOgrProviderUtils::createConnection( QStringLiteral( "GeoPackage" ), QStringLiteral( "GeoPackage Database (*.gpkg)" ), QStringLiteral( "GPKG" ) ) )
{
refreshConnections();
}
Expand Down
31 changes: 0 additions & 31 deletions src/core/providers/ogr/qgsogrdataitems.cpp
Expand Up @@ -419,37 +419,6 @@ QVector<QgsDataItem *> QgsOgrDataCollectionItem::createChildren()
return children;
}

bool QgsOgrDataCollectionItem::saveConnection( const QString &path, const QString &ogrDriverName )
{
QFileInfo fileInfo( path );
QString connName = fileInfo.fileName();
if ( ! path.isEmpty() )
{
bool ok = true;
while ( ok && ! QgsOgrDbConnection( connName, ogrDriverName ).path( ).isEmpty( ) )
{

connName = QInputDialog::getText( nullptr, tr( "Add Connection" ),
tr( "A connection with the same name already exists,\nplease provide a new name:" ), QLineEdit::Normal,
QString(), &ok );
}
if ( ok && ! connName.isEmpty() )
{
QgsProviderMetadata *providerMetadata = QgsProviderRegistry::instance()->providerMetadata( QStringLiteral( "ogr" ) );
QgsGeoPackageProviderConnection *providerConnection = static_cast<QgsGeoPackageProviderConnection *>( providerMetadata->createConnection( connName ) );
providerMetadata->saveConnection( providerConnection, connName );
return true;
}
}
return false;
}

bool QgsOgrDataCollectionItem::createConnection( const QString &name, const QString &extensions, const QString &ogrDriverName )
{
QString path = QFileDialog::getOpenFileName( nullptr, tr( "Open %1" ).arg( name ), QString(), extensions );
return saveConnection( path, ogrDriverName );
}

bool QgsOgrDataCollectionItem::hasDragEnabled() const
{
return true;
Expand Down
15 changes: 0 additions & 15 deletions src/core/providers/ogr/qgsogrdataitems.h
Expand Up @@ -116,21 +116,6 @@ class CORE_EXPORT QgsOgrDataCollectionItem final: public QgsDataCollectionItem

QVector<QgsDataItem *> createChildren() override;

/**
* Utility function to store DB connections
* \param path to the DB
* \param ogrDriverName the OGR/GDAL driver name (e.g. "GPKG")
*/
static bool saveConnection( const QString &path, const QString &ogrDriverName );

/**
* Utility function to create and store a new DB connection
* \param name is the translatable name of the managed layers (e.g. "GeoPackage")
* \param extensions is a string with file extensions (e.g. "GeoPackage Database (*.gpkg *.GPKG)")
* \param ogrDriverName the OGR/GDAL driver name (e.g. "GPKG")
*/
static bool createConnection( const QString &name, const QString &extensions, const QString &ogrDriverName );

bool hasDragEnabled() const override;
QgsMimeDataUtils::UriList mimeUris() const override;

Expand Down
36 changes: 36 additions & 0 deletions src/core/providers/ogr/qgsogrproviderutils.cpp
Expand Up @@ -22,6 +22,9 @@ email : nyall dot dawson at gmail dot com
#include "qgsvectorfilewriter.h"
#include "qgsauthmanager.h"
#include "qgsprovidersublayerdetails.h"
#include "qgsproviderregistry.h"
#include "qgsgeopackageproviderconnection.h"
#include "qgsogrdbconnection.h"

#include <ogr_srs_api.h>
#include <cpl_port.h>
Expand All @@ -31,6 +34,8 @@ email : nyall dot dawson at gmail dot com
#include <QTextCodec>
#include <QStorageInfo>
#include <QRegularExpression>
#include <QFileDialog>
#include <QInputDialog>

#ifdef Q_OS_WIN
#include <windows.h>
Expand Down Expand Up @@ -2492,6 +2497,37 @@ QList< QgsProviderSublayerDetails > QgsOgrProviderUtils::querySubLayerList( int
}
}

bool QgsOgrProviderUtils::createConnection( const QString &name, const QString &extensions, const QString &ogrDriverName )
{
QString path = QFileDialog::getOpenFileName( nullptr, QObject::tr( "Open %1" ).arg( name ), QString(), extensions );
return saveConnection( path, ogrDriverName );
}

bool QgsOgrProviderUtils::saveConnection( const QString &path, const QString &ogrDriverName )
{
QFileInfo fileInfo( path );
QString connName = fileInfo.fileName();
if ( ! path.isEmpty() )
{
bool ok = true;
while ( ok && ! QgsOgrDbConnection( connName, ogrDriverName ).path( ).isEmpty( ) )
{

connName = QInputDialog::getText( nullptr, QObject::tr( "Add Connection" ),
QObject::tr( "A connection with the same name already exists,\nplease provide a new name:" ), QLineEdit::Normal,
QString(), &ok );
}
if ( ok && ! connName.isEmpty() )
{
QgsProviderMetadata *providerMetadata = QgsProviderRegistry::instance()->providerMetadata( QStringLiteral( "ogr" ) );
QgsGeoPackageProviderConnection *providerConnection = static_cast<QgsGeoPackageProviderConnection *>( providerMetadata->createConnection( connName ) );
providerMetadata->saveConnection( providerConnection, connName );
return true;
}
}
return false;
}

QgsOgrDatasetSharedPtr QgsOgrDataset::create( const QgsOgrProviderUtils::DatasetIdentification &ident,
QgsOgrProviderUtils::DatasetWithLayers *ds )
{
Expand Down
14 changes: 14 additions & 0 deletions src/core/providers/ogr/qgsogrproviderutils.h
Expand Up @@ -263,6 +263,20 @@ class CORE_EXPORT QgsOgrProviderUtils
static QList<QgsProviderSublayerDetails> querySubLayerList( int i, QgsOgrLayer *layer, const QString &driverName, Qgis::SublayerQueryFlags flags, bool isSubLayer,
const QString &baseUri, bool hasSingleLayerOnly, QgsFeedback *feedback = nullptr );

/**
* Utility function to create and store a new DB connection
* \param name is the translatable name of the managed layers (e.g. "GeoPackage")
* \param extensions is a string with file extensions (e.g. "GeoPackage Database (*.gpkg *.GPKG)")
* \param ogrDriverName the OGR/GDAL driver name (e.g. "GPKG")
*/
static bool createConnection( const QString &name, const QString &extensions, const QString &ogrDriverName );

/**
* Utility function to store DB connections
* \param path to the DB
* \param ogrDriverName the OGR/GDAL driver name (e.g. "GPKG")
*/
static bool saveConnection( const QString &path, const QString &ogrDriverName );
};


Expand Down
2 changes: 1 addition & 1 deletion src/gui/providers/ogr/qgsgeopackageitemguiprovider.cpp
Expand Up @@ -386,7 +386,7 @@ void QgsGeoPackageItemGuiProvider::createDatabase( QPointer< QgsGeoPackageRootIt
if ( dialog.exec() == QDialog::Accepted )
{
// Call QFileInfo to normalize paths, see: https://github.com/qgis/QGIS/issues/36832
if ( QgsOgrDataCollectionItem::saveConnection( QFileInfo( dialog.databasePath() ).filePath(), QStringLiteral( "GPKG" ) ) )
if ( QgsOgrProviderUtils::saveConnection( QFileInfo( dialog.databasePath() ).filePath(), QStringLiteral( "GPKG" ) ) )
{
item->refreshConnections();
}
Expand Down
2 changes: 1 addition & 1 deletion src/gui/providers/ogr/qgsogrdbsourceselect.cpp
Expand Up @@ -214,7 +214,7 @@ void QgsOgrDbSourceSelect::populateConnectionList()

void QgsOgrDbSourceSelect::btnNew_clicked()
{
if ( QgsOgrDataCollectionItem::createConnection( name(), extension(), ogrDriverName() ) )
if ( QgsOgrProviderUtils::createConnection( name(), extension(), ogrDriverName() ) )
{
emit connectionsChanged();
}
Expand Down

0 comments on commit 2fa296c

Please sign in to comment.