Skip to content

Commit

Permalink
Don't report success when a calculation error occurred
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Nov 26, 2019
1 parent f086d4e commit ab6239b
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 4 deletions.
Expand Up @@ -63,6 +63,7 @@ Performs raster layer calculations.
ParserError,
MemoryError,
BandError,
CalculationError,
};


Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/RasterCalculator.py
Expand Up @@ -186,6 +186,8 @@ def _cellsize(layer):
res = calc.processCalculation(feedback)
if res == QgsRasterCalculator.ParserError:
raise QgsProcessingException(self.tr("Error parsing formula"))
elif res == QgsRasterCalculator.CalculationError:
raise QgsProcessingException(self.tr("An error occurred while performing the calculation"))

return {self.OUTPUT: output}

Expand Down
13 changes: 13 additions & 0 deletions src/analysis/raster/qgsrastercalculator.cpp
Expand Up @@ -238,6 +238,12 @@ QgsRasterCalculator::Result QgsRasterCalculator::processCalculation( QgsFeedback
QgsDebugMsg( QStringLiteral( "RasterIO error!" ) );
}
}
else
{
//delete the dataset without closing (because it is faster)
gdal::fast_delete_and_close( outputDataset, outputDriver, mOutputFile );
return CalculationError;
}
}

if ( feedback )
Expand Down Expand Up @@ -317,6 +323,13 @@ QgsRasterCalculator::Result QgsRasterCalculator::processCalculation( QgsFeedback

delete[] calcData;
}
else
{
qDeleteAll( inputBlocks );
inputBlocks.clear();
gdal::fast_delete_and_close( outputDataset, outputDriver, mOutputFile );
return CalculationError;
}

}

Expand Down
1 change: 1 addition & 0 deletions src/analysis/raster/qgsrastercalculator.h
Expand Up @@ -87,6 +87,7 @@ class ANALYSIS_EXPORT QgsRasterCalculator
ParserError = 4, //!< Error parsing formula
MemoryError = 5, //!< Error allocating memory for result
BandError = 6, //!< Invalid band number for input
CalculationError = 7, //!< Error occurred while performing calculation
};


Expand Down
14 changes: 10 additions & 4 deletions src/app/qgisapp.cpp
Expand Up @@ -2002,8 +2002,8 @@ QList<QgsVectorLayerRef> QgisApp::findBrokenWidgetDependencies( QgsVectorLayer *
for ( const QgsVectorLayerRef &dependency : constDependencies )
{
const QgsVectorLayer *depVl { QgsVectorLayerRef( dependency ).resolveWeakly(
QgsProject::instance(),
QgsVectorLayerRef::MatchType::Name ) };
QgsProject::instance(),
QgsVectorLayerRef::MatchType::Name ) };
if ( ! depVl || ! depVl->isValid() )
{
brokenDependencies.append( dependency );
Expand Down Expand Up @@ -2094,8 +2094,8 @@ void QgisApp::checkVectorLayerDependencies( QgsVectorLayer *vl )
if ( ! loaded )
{
const QString msg { tr( "layer '%1' requires layer '%2' to be loaded but '%2' could not be found, please load it manually if possible." )
.arg( vl->name() )
.arg( dependency.name ) };
.arg( vl->name() )
.arg( dependency.name ) };
messageBar()->pushWarning( tr( "Missing layer form dependency" ), msg );
}
else
Expand Down Expand Up @@ -6247,6 +6247,12 @@ void QgisApp::showRasterCalculator()
tr( "Invalid band number for input layer." ),
Qgis::Critical );
break;

case QgsRasterCalculator::CalculationError:
visibleMessageBar()->pushMessage( tr( "Raster calculator" ),
tr( "An error occurred while performing the calculation." ),
Qgis::Critical );
break;
}
p.hide();
}
Expand Down

0 comments on commit ab6239b

Please sign in to comment.