mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-15 00:02:52 -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.
|
||||
|
||||
.. 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
|
||||
|
||||
};
|
||||
|
@ -29,12 +29,13 @@ from qgis.core import (QgsDataProvider,
|
||||
QgsProject,
|
||||
QgsSettings,
|
||||
QgsProcessingContext,
|
||||
QgsProcessingUtils,
|
||||
QgsFeatureRequest,
|
||||
QgsExpressionContext,
|
||||
QgsExpressionContextUtils,
|
||||
QgsExpressionContextScope)
|
||||
from qgis.gui import QgsSublayersDialog
|
||||
from qgis.PyQt.QtCore import QCoreApplication, QTextCodec
|
||||
from qgis.PyQt.QtCore import QCoreApplication
|
||||
from qgis.utils import iface
|
||||
|
||||
from processing.core.ProcessingConfig import ProcessingConfig
|
||||
@ -70,11 +71,7 @@ def createContext(feedback=None):
|
||||
context.setInvalidGeometryCheck(invalid_features_method)
|
||||
|
||||
settings = QgsSettings()
|
||||
default_codec = "System"
|
||||
system_codec = QTextCodec.codecForLocale()
|
||||
if (system_codec):
|
||||
default_codec = system_codec.name().data().decode()
|
||||
context.setDefaultEncoding(settings.value("/Processing/encoding", default_codec))
|
||||
context.setDefaultEncoding(settings.value("/Processing/encoding", QgsProcessingUtils.resolveDefaultEncoding()))
|
||||
|
||||
context.setExpressionContext(createExpressionContext())
|
||||
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include "qgsannotationlayer.h"
|
||||
#include "qgstiledmeshlayer.h"
|
||||
#include <QRegularExpression>
|
||||
#include <QTextCodec>
|
||||
#include <QUuid>
|
||||
|
||||
QList<QgsRasterLayer *> QgsProcessingUtils::compatibleRasterLayers( QgsProject *project, bool sort )
|
||||
@ -1573,6 +1574,20 @@ QVariantMap QgsProcessingUtils::preprocessQgisProcessParameters( const QVariantM
|
||||
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
|
||||
//
|
||||
|
@ -589,6 +589,16 @@ class CORE_EXPORT QgsProcessingUtils
|
||||
*/
|
||||
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:
|
||||
static bool canUseLayer( const QgsRasterLayer *layer );
|
||||
static bool canUseLayer( const QgsMeshLayer *layer );
|
||||
|
@ -53,17 +53,8 @@ QgsProcessingLayerOutputDestinationWidget::QgsProcessingLayerOutputDestinationWi
|
||||
mSelectButton->setPopupMode( QToolButton::InstantPopup );
|
||||
|
||||
QgsSettings settings;
|
||||
mEncoding = 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 );
|
||||
}
|
||||
}
|
||||
mEncoding = QgsProcessingUtils::resolveDefaultEncoding( settings.value( QStringLiteral( "/Processing/encoding" ), QStringLiteral( "System" ) ).toString() );
|
||||
settings.setValue( QStringLiteral( "/Processing/encoding" ), mEncoding );
|
||||
|
||||
if ( !mParameter->defaultValueForGui().isValid() )
|
||||
{
|
||||
@ -614,18 +605,11 @@ void QgsProcessingLayerOutputDestinationWidget::selectEncoding()
|
||||
QgsEncodingSelectionDialog dialog( this, tr( "File encoding" ), mEncoding );
|
||||
if ( dialog.exec() )
|
||||
{
|
||||
mEncoding = dialog.encoding();
|
||||
if ( ( mEncoding == "System" ) || ( ! QTextCodec::availableCodecs().contains( mEncoding.toLatin1() ) ) )
|
||||
{
|
||||
const QString systemCodec = QTextCodec::codecForLocale()->name();
|
||||
if ( ! systemCodec.isEmpty() )
|
||||
{
|
||||
mEncoding = systemCodec;
|
||||
}
|
||||
}
|
||||
mEncoding = QgsProcessingUtils::resolveDefaultEncoding( dialog.encoding() );
|
||||
|
||||
QgsSettings settings;
|
||||
settings.setValue( QStringLiteral( "/Processing/encoding" ), mEncoding );
|
||||
|
||||
emit destinationChanged();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user