mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-27 00:04:49 -04:00
move logic to QgsProcessingUtils and create a convenient method resolveDefaultEncoding()
This commit is contained in:
parent
ed1867436d
commit
09ac50fd36
@ -615,6 +615,16 @@ Pre-processes a set of ``parameter`` values for the qgis_process command.
|
|||||||
In particular, this function upgrades encoded data defined values to :py:class:`QgsProperty` objects.
|
In particular, this function upgrades encoded data defined values to :py:class:`QgsProperty` objects.
|
||||||
|
|
||||||
.. versionadded:: 3.30
|
.. versionadded:: 3.30
|
||||||
|
%End
|
||||||
|
|
||||||
|
static QString resolveDefaultEncoding();
|
||||||
|
%Docstring
|
||||||
|
Returns the default encoding.
|
||||||
|
|
||||||
|
The default encoding could be the one from "/Processing/encoding" or when it's not an allowed encoding name
|
||||||
|
like "System", the default encoding system (mostly UTF-8 on Unix-like, windows-1252 on Windows).
|
||||||
|
|
||||||
|
.. versionadded:: 3.32
|
||||||
%End
|
%End
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -29,12 +29,13 @@ from qgis.core import (QgsDataProvider,
|
|||||||
QgsProject,
|
QgsProject,
|
||||||
QgsSettings,
|
QgsSettings,
|
||||||
QgsProcessingContext,
|
QgsProcessingContext,
|
||||||
|
QgsProcessingUtils,
|
||||||
QgsFeatureRequest,
|
QgsFeatureRequest,
|
||||||
QgsExpressionContext,
|
QgsExpressionContext,
|
||||||
QgsExpressionContextUtils,
|
QgsExpressionContextUtils,
|
||||||
QgsExpressionContextScope)
|
QgsExpressionContextScope)
|
||||||
from qgis.gui import QgsSublayersDialog
|
from qgis.gui import QgsSublayersDialog
|
||||||
from qgis.PyQt.QtCore import QCoreApplication, QTextCodec
|
from qgis.PyQt.QtCore import QCoreApplication
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
|
|
||||||
from processing.core.ProcessingConfig import ProcessingConfig
|
from processing.core.ProcessingConfig import ProcessingConfig
|
||||||
@ -70,11 +71,7 @@ def createContext(feedback=None):
|
|||||||
context.setInvalidGeometryCheck(invalid_features_method)
|
context.setInvalidGeometryCheck(invalid_features_method)
|
||||||
|
|
||||||
settings = QgsSettings()
|
settings = QgsSettings()
|
||||||
default_codec = "System"
|
context.setDefaultEncoding(settings.value("/Processing/encoding", QgsProcessingUtils.resolveDefaultEncoding()))
|
||||||
system_codec = QTextCodec.codecForLocale()
|
|
||||||
if (system_codec):
|
|
||||||
default_codec = system_codec.name().data().decode()
|
|
||||||
context.setDefaultEncoding(settings.value("/Processing/encoding", default_codec))
|
|
||||||
|
|
||||||
context.setExpressionContext(createExpressionContext())
|
context.setExpressionContext(createExpressionContext())
|
||||||
|
|
||||||
|
|||||||
@ -38,6 +38,7 @@
|
|||||||
#include "qgsannotationlayer.h"
|
#include "qgsannotationlayer.h"
|
||||||
#include "qgstiledmeshlayer.h"
|
#include "qgstiledmeshlayer.h"
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
#include <QTextCodec>
|
||||||
#include <QUuid>
|
#include <QUuid>
|
||||||
|
|
||||||
QList<QgsRasterLayer *> QgsProcessingUtils::compatibleRasterLayers( QgsProject *project, bool sort )
|
QList<QgsRasterLayer *> QgsProcessingUtils::compatibleRasterLayers( QgsProject *project, bool sort )
|
||||||
@ -1573,6 +1574,20 @@ QVariantMap QgsProcessingUtils::preprocessQgisProcessParameters( const QVariantM
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString QgsProcessingUtils::resolveDefaultEncoding( const QString &defaultEncoding )
|
||||||
|
{
|
||||||
|
if ( ! QTextCodec::availableCodecs().contains( defaultEncoding.toLatin1() ) )
|
||||||
|
{
|
||||||
|
const QString systemCodec = QTextCodec::codecForLocale()->name();
|
||||||
|
if ( ! systemCodec.isEmpty() )
|
||||||
|
{
|
||||||
|
return systemCodec;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultEncoding;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// QgsProcessingFeatureSource
|
// QgsProcessingFeatureSource
|
||||||
//
|
//
|
||||||
|
|||||||
@ -589,6 +589,16 @@ class CORE_EXPORT QgsProcessingUtils
|
|||||||
*/
|
*/
|
||||||
static QVariantMap preprocessQgisProcessParameters( const QVariantMap ¶meters, bool &ok, QString &error );
|
static QVariantMap preprocessQgisProcessParameters( const QVariantMap ¶meters, bool &ok, QString &error );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the default encoding.
|
||||||
|
*
|
||||||
|
* The default encoding could be the one from "/Processing/encoding" or when it's not an allowed encoding name
|
||||||
|
* like "System", the default encoding system (mostly UTF-8 on Unix-like, windows-1252 on Windows).
|
||||||
|
*
|
||||||
|
* \since QGIS 3.32
|
||||||
|
*/
|
||||||
|
static QString resolveDefaultEncoding(const QString &defaultEncoding = "System");
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static bool canUseLayer( const QgsRasterLayer *layer );
|
static bool canUseLayer( const QgsRasterLayer *layer );
|
||||||
static bool canUseLayer( const QgsMeshLayer *layer );
|
static bool canUseLayer( const QgsMeshLayer *layer );
|
||||||
|
|||||||
@ -53,17 +53,8 @@ QgsProcessingLayerOutputDestinationWidget::QgsProcessingLayerOutputDestinationWi
|
|||||||
mSelectButton->setPopupMode( QToolButton::InstantPopup );
|
mSelectButton->setPopupMode( QToolButton::InstantPopup );
|
||||||
|
|
||||||
QgsSettings settings;
|
QgsSettings settings;
|
||||||
mEncoding = settings.value( QStringLiteral( "/Processing/encoding" ), QStringLiteral( "System" ) ).toString();
|
mEncoding = QgsProcessingUtils::resolveDefaultEncoding( settings.value( QStringLiteral( "/Processing/encoding" ), QStringLiteral( "System" ) ).toString() );
|
||||||
|
|
||||||
if ( ( mEncoding == "System" ) || ( ! QTextCodec::availableCodecs().contains( mEncoding.toLatin1() ) ) )
|
|
||||||
{
|
|
||||||
const QString systemCodec = QTextCodec::codecForLocale()->name();
|
|
||||||
if ( ! systemCodec.isEmpty() )
|
|
||||||
{
|
|
||||||
mEncoding = systemCodec;
|
|
||||||
settings.setValue( QStringLiteral( "/Processing/encoding" ), mEncoding );
|
settings.setValue( QStringLiteral( "/Processing/encoding" ), mEncoding );
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !mParameter->defaultValueForGui().isValid() )
|
if ( !mParameter->defaultValueForGui().isValid() )
|
||||||
{
|
{
|
||||||
@ -614,18 +605,11 @@ void QgsProcessingLayerOutputDestinationWidget::selectEncoding()
|
|||||||
QgsEncodingSelectionDialog dialog( this, tr( "File encoding" ), mEncoding );
|
QgsEncodingSelectionDialog dialog( this, tr( "File encoding" ), mEncoding );
|
||||||
if ( dialog.exec() )
|
if ( dialog.exec() )
|
||||||
{
|
{
|
||||||
mEncoding = dialog.encoding();
|
mEncoding = QgsProcessingUtils::resolveDefaultEncoding( dialog.encoding() );
|
||||||
if ( ( mEncoding == "System" ) || ( ! QTextCodec::availableCodecs().contains( mEncoding.toLatin1() ) ) )
|
|
||||||
{
|
|
||||||
const QString systemCodec = QTextCodec::codecForLocale()->name();
|
|
||||||
if ( ! systemCodec.isEmpty() )
|
|
||||||
{
|
|
||||||
mEncoding = systemCodec;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QgsSettings settings;
|
QgsSettings settings;
|
||||||
settings.setValue( QStringLiteral( "/Processing/encoding" ), mEncoding );
|
settings.setValue( QStringLiteral( "/Processing/encoding" ), mEncoding );
|
||||||
|
|
||||||
emit destinationChanged();
|
emit destinationChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user