mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-13 00:03:09 -04:00
QgsRasterFileWriter: improve error reporting
This commit is contained in:
parent
7e3c9d98e2
commit
5e70084d32
@ -71,6 +71,17 @@ parameter indicates the file path for the written file(s).
|
||||
%Docstring
|
||||
Emitted when an error occurs which prevented the file being written (or if
|
||||
the task is canceled). The writing ``error`` will be reported.
|
||||
|
||||
.. deprecated:: since QGIS 3.10. Use errorOccurred(int, const QString&)
|
||||
%End
|
||||
|
||||
void errorOccurred( int error, const QString &errorMessage );
|
||||
%Docstring
|
||||
Emitted when an error occurs which prevented the file being written (or if
|
||||
the task is canceled). The writing ``error`` will be reported and a
|
||||
``errorMessage`` will be potentially set.
|
||||
|
||||
.. versionadded:: 3.10
|
||||
%End
|
||||
|
||||
protected:
|
||||
|
@ -7816,12 +7816,24 @@ QString QgisApp::saveAsRasterFile( QgsRasterLayer *rasterLayer, const bool defau
|
||||
} );
|
||||
|
||||
// when an error occurs:
|
||||
connect( writerTask, &QgsRasterFileWriterTask::errorOccurred, this, [ = ]( int error )
|
||||
connect( writerTask, qgis::overload< int, const QString &>::of( &QgsRasterFileWriterTask::errorOccurred ), this, [ = ]( int error, const QString & errorMessage )
|
||||
{
|
||||
if ( error != QgsRasterFileWriter::WriteCanceled )
|
||||
{
|
||||
QString errorCodeStr;
|
||||
if ( error == QgsRasterFileWriter::SourceProviderError )
|
||||
errorCodeStr = tr( "source provider" );
|
||||
else if ( error == QgsRasterFileWriter::DestProviderError )
|
||||
errorCodeStr = tr( "destination provider" );
|
||||
else if ( error == QgsRasterFileWriter::CreateDatasourceError )
|
||||
errorCodeStr = tr( "data source creation" );
|
||||
else if ( error == QgsRasterFileWriter::WriteError )
|
||||
errorCodeStr = tr( "write error" );
|
||||
QString fullErrorMsg( tr( "Cannot write raster. Error code: %1" ).arg( errorCodeStr ) );
|
||||
if ( !errorMessage.isEmpty() )
|
||||
fullErrorMsg += "\n" + errorMessage;
|
||||
QMessageBox::warning( this, tr( "Save Raster" ),
|
||||
tr( "Cannot write raster. Error code: %1" ).arg( error ),
|
||||
fullErrorMsg,
|
||||
QMessageBox::Ok );
|
||||
}
|
||||
} );
|
||||
|
@ -323,16 +323,28 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( const Qgs
|
||||
}
|
||||
if ( !destProvider->isValid() )
|
||||
{
|
||||
if ( feedback && !destProvider->error().isEmpty() )
|
||||
{
|
||||
feedback->appendError( destProvider->error().summary() );
|
||||
}
|
||||
return CreateDatasourceError;
|
||||
}
|
||||
if ( nCols != destProvider->xSize() || nRows != destProvider->ySize() )
|
||||
{
|
||||
QgsDebugMsg( QStringLiteral( "Created raster does not have requested dimensions" ) );
|
||||
if ( feedback )
|
||||
{
|
||||
feedback->appendError( QObject::tr( "Created raster does not have requested dimensions" ) );
|
||||
}
|
||||
return CreateDatasourceError;
|
||||
}
|
||||
if ( nBands != destProvider->bandCount() )
|
||||
{
|
||||
QgsDebugMsg( QStringLiteral( "Created raster does not have requested band count" ) );
|
||||
if ( feedback )
|
||||
{
|
||||
feedback->appendError( QObject::tr( "Created raster does not have requested band count" ) );
|
||||
}
|
||||
return CreateDatasourceError;
|
||||
}
|
||||
if ( nBands )
|
||||
@ -583,21 +595,37 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeImageRaster( QgsRaste
|
||||
}
|
||||
if ( !destProvider->isValid() )
|
||||
{
|
||||
if ( feedback && !destProvider->error().isEmpty() )
|
||||
{
|
||||
feedback->appendError( destProvider->error().summary() );
|
||||
}
|
||||
return CreateDatasourceError;
|
||||
}
|
||||
if ( nCols != destProvider->xSize() || nRows != destProvider->ySize() )
|
||||
{
|
||||
QgsDebugMsg( QStringLiteral( "Created raster does not have requested dimensions" ) );
|
||||
if ( feedback )
|
||||
{
|
||||
feedback->appendError( QObject::tr( "Created raster does not have requested dimensions" ) );
|
||||
}
|
||||
return CreateDatasourceError;
|
||||
}
|
||||
if ( nOutputBands != destProvider->bandCount() )
|
||||
{
|
||||
QgsDebugMsg( QStringLiteral( "Created raster does not have requested band count" ) );
|
||||
if ( feedback )
|
||||
{
|
||||
feedback->appendError( QObject::tr( "Created raster does not have requested band count" ) );
|
||||
}
|
||||
return CreateDatasourceError;
|
||||
}
|
||||
if ( Qgis::Byte != destProvider->dataType( 1 ) )
|
||||
{
|
||||
QgsDebugMsg( QStringLiteral( "Created raster does not have requested data type" ) );
|
||||
if ( feedback )
|
||||
{
|
||||
feedback->appendError( QObject::tr( "Created raster does not have requested data type" ) );
|
||||
}
|
||||
return CreateDatasourceError;
|
||||
}
|
||||
}
|
||||
|
@ -66,7 +66,13 @@ void QgsRasterFileWriterTask::finished( bool result )
|
||||
if ( result )
|
||||
emit writeComplete( mWriter.outputUrl() );
|
||||
else
|
||||
{
|
||||
emit errorOccurred( mError );
|
||||
QString errorMsg;
|
||||
if ( !mFeedback->errors().isEmpty() )
|
||||
errorMsg = mFeedback->errors().front();
|
||||
emit errorOccurred( mError, errorMsg );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -81,9 +81,18 @@ class CORE_EXPORT QgsRasterFileWriterTask : public QgsTask
|
||||
/**
|
||||
* Emitted when an error occurs which prevented the file being written (or if
|
||||
* the task is canceled). The writing \a error will be reported.
|
||||
* \deprecated since QGIS 3.10. Use errorOccurred(int, const QString&)
|
||||
*/
|
||||
void errorOccurred( int error );
|
||||
|
||||
/**
|
||||
* Emitted when an error occurs which prevented the file being written (or if
|
||||
* the task is canceled). The writing \a error will be reported and a
|
||||
* \a errorMessage will be potentially set.
|
||||
* \since QGIS 3.10
|
||||
*/
|
||||
void errorOccurred( int error, const QString &errorMessage );
|
||||
|
||||
protected:
|
||||
|
||||
bool run() override;
|
||||
@ -105,7 +114,6 @@ class CORE_EXPORT QgsRasterFileWriterTask : public QgsTask
|
||||
QgsRasterFileWriter::WriterError mError = QgsRasterFileWriter::NoError;
|
||||
|
||||
QgsCoordinateTransformContext mTransformContext;
|
||||
|
||||
};
|
||||
|
||||
#endif //QGSRASTERFILEWRITERTASK_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user