23 QString QgsExtractBinaryFieldAlgorithm::name()
const 25 return QStringLiteral(
"extractbinary" );
28 QString QgsExtractBinaryFieldAlgorithm::displayName()
const 30 return QObject::tr(
"Extract binary field" );
33 QString QgsExtractBinaryFieldAlgorithm::shortHelpString()
const 35 return QObject::tr(
"This algorithm extracts contents from a binary field, saving them to individual files.\n\n" 36 "Filenames can be generated using values taken from " 37 "an attribute in the source table or based on a more complex expression." );
40 QString QgsExtractBinaryFieldAlgorithm::shortDescription()
const 42 return QObject::tr(
"This algorithm extracts contents from a binary field, saving them to individual files." );
45 QStringList QgsExtractBinaryFieldAlgorithm::tags()
const 47 return QObject::tr(
"blob,binaries,save,file,contents,field,column" ).split(
',' );
50 QString QgsExtractBinaryFieldAlgorithm::group()
const 52 return QObject::tr(
"Vector table" );
55 QString QgsExtractBinaryFieldAlgorithm::groupId()
const 57 return QStringLiteral(
"vectortable" );
60 QgsExtractBinaryFieldAlgorithm *QgsExtractBinaryFieldAlgorithm::createInstance()
const 62 return new QgsExtractBinaryFieldAlgorithm();
65 void QgsExtractBinaryFieldAlgorithm::initAlgorithm(
const QVariantMap & )
80 std::unique_ptr< QgsProcessingFeatureSource > input( parameterAsSource( parameters, QStringLiteral(
"INPUT" ), context ) );
84 QString fieldName = parameterAsString( parameters, QStringLiteral(
"FIELD" ), context );
85 int fieldIndex = input->fields().lookupField( fieldName );
89 const QString folder = parameterAsString( parameters, QStringLiteral(
"FOLDER" ), context );
90 if ( !QFileInfo::exists( folder ) )
94 const QString filenameExpressionString = parameterAsString( parameters, QStringLiteral(
"FILENAME" ), context );
95 QgsExpressionContext expressionContext = createExpressionContext( parameters, context, input.get() );
97 QSet< QString > fields;
98 fields.insert( fieldName );
101 QgsExpression filenameExpression( filenameExpressionString );
102 filenameExpression.prepare( &expressionContext );
103 fields.unite( filenameExpression.referencedColumns() );
105 if ( !filenameExpression.needsGeometry() )
109 double step = input->featureCount() > 0 ? 100.0 / input->featureCount() : 1;
122 QByteArray ba = feat.
attribute( fieldIndex ).toByteArray();
127 QString name = filenameExpression.evaluate( &expressionContext ).toString();
128 if ( filenameExpression.hasEvalError() )
130 feedback->
reportError( QObject::tr(
"Error evaluating filename: %1" ).arg( filenameExpression.evalErrorString() ) );
134 const QString path = dir.filePath( name );
136 if ( !file.open( QIODevice::WriteOnly | QFile::Truncate ) )
138 feedback->
reportError( QObject::tr(
"Could not open %1 for writing" ).arg( path ) );
144 feedback->
pushInfo( QObject::tr(
"Extracted %1" ).arg( path ) );
149 outputs.insert( QStringLiteral(
"FOLDER" ), folder );
Class for parsing and evaluation of expressions (formerly called "search strings").
Wrapper for iterator of features from vector data provider or vector layer.
Base class for providing feedback from a processing algorithm.
Invalid geometry checks should always be skipped. This flag can be useful for algorithms which always...
A vector layer or feature source field parameter for processing algorithms.
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context.
An expression parameter for processing algorithms.
void setProgress(double progress)
Sets the current progress for the feedback object.
QgsFeatureRequest & setSubsetOfAttributes(const QgsAttributeList &attrs)
Set a subset of attributes that will be fetched.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
virtual void pushInfo(const QString &info)
Pushes a general informational message from the algorithm.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
This class wraps a request for features to a vector layer (or directly its vector data provider)...
Custom exception class for processing related exceptions.
bool isCanceled() const
Tells whether the operation has been canceled already.
An input feature source (such as vector layers) parameter for processing algorithms.
A folder destination parameter, for specifying the destination path for a folder created by the algor...
Tables (i.e. vector layers with or without geometry). When used for a sink this indicates the sink ha...
virtual void reportError(const QString &error, bool fatalError=false)
Reports that the algorithm encountered an error while executing.
bool nextFeature(QgsFeature &f)
Geometry is not required. It may still be returned if e.g. required for a filter condition.
QVariant attribute(const QString &name) const
Lookup attribute value from attribute name.
Contains information about the context in which a processing algorithm is executed.
QgsFeatureRequest & setFlags(QgsFeatureRequest::Flags flags)
Sets flags that affect how features will be fetched.