[libcalamares] Deal with deprecations in XML QDomDocument
Introduce some Calamares helpers in the compat/ headers space to help Xml-wrangling (i18n support tools, GeoIP) avoid compiler warnings about deprecated API. It's cleaner this way anyway, with a nice value returned from setting a document's contents, rather than a bunch of pointer arguments.
This commit is contained in:
parent
9106dd9337
commit
03c5e366ed
@ -19,6 +19,9 @@ find_package(${qtname} COMPONENTS Xml)
|
||||
if(TARGET ${qtname}::Xml)
|
||||
add_executable(txload txload.cpp)
|
||||
target_link_libraries(txload ${qtname}::Xml)
|
||||
# Special-case, needs compatibility-header for XML-handling,
|
||||
# but doesn't want all of libcalamares.
|
||||
target_include_directories(txload PRIVATE ${CMAKE_SOURCE_DIR}/src/libcalamares)
|
||||
endif()
|
||||
|
||||
install_calamares_gettext_translations(python
|
||||
|
@ -18,6 +18,8 @@
|
||||
* differences in translation are.
|
||||
*/
|
||||
|
||||
#include "compat/Xml.h"
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QDebug>
|
||||
#include <QFile>
|
||||
@ -39,8 +41,6 @@ bool
|
||||
load_file( const char* filename, QDomDocument& doc )
|
||||
{
|
||||
QFile file( filename );
|
||||
QString err;
|
||||
int err_line, err_column;
|
||||
if ( !file.open( QIODevice::ReadOnly ) )
|
||||
{
|
||||
qDebug() << "Could not open" << filename;
|
||||
@ -49,9 +49,10 @@ load_file( const char* filename, QDomDocument& doc )
|
||||
QByteArray ba( file.read( 1024 * 1024 ) );
|
||||
qDebug() << "Read" << ba.length() << "bytes from" << filename;
|
||||
|
||||
if ( !doc.setContent( ba, &err, &err_line, &err_column ) )
|
||||
auto p = Calamares::setXmlContent( doc, ba );
|
||||
if ( !p.errorMessage.isEmpty() )
|
||||
{
|
||||
qDebug() << "Could not read" << filename << ':' << err_line << ':' << err_column << ' ' << err;
|
||||
qDebug() << "Could not read" << filename << ':' << p.errorLine << ':' << p.errorColumn << ' ' << p.errorMessage;
|
||||
file.close();
|
||||
return false;
|
||||
}
|
||||
@ -177,10 +178,12 @@ merge_into( QDomDocument& originDocument, QDomDocument& alternateDocument )
|
||||
{
|
||||
QDomElement e = n.toElement();
|
||||
if ( e.tagName() == "context" )
|
||||
{
|
||||
if ( !merge_into( originDocument, e ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
n = n.nextSibling();
|
||||
}
|
||||
|
42
src/libcalamares/compat/Xml.h
Normal file
42
src/libcalamares/compat/Xml.h
Normal file
@ -0,0 +1,42 @@
|
||||
/* === This file is part of Calamares - <https://calamares.io> ===
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2024 Adriaan de Groot <groot@kde.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*
|
||||
* Calamares is Free Software: see the License-Identifier above.
|
||||
*
|
||||
*
|
||||
*/
|
||||
#ifndef CALAMARES_COMPAT_XML_H
|
||||
#define CALAMARES_COMPAT_XML_H
|
||||
|
||||
#include <QDomDocument>
|
||||
|
||||
namespace Calamares
|
||||
{
|
||||
#if QT_VERSION < QT_VERSION_CHECK( 6, 6, 0 )
|
||||
struct ParseResult
|
||||
{
|
||||
QString errorMessage;
|
||||
int errorLine = -1;
|
||||
int errorColumn = -1;
|
||||
}
|
||||
|
||||
[[nodiscard]] inline ParseResult
|
||||
setXmlContent( QDomDocument& doc, const QByteArray& ba )
|
||||
{
|
||||
ParseResult p;
|
||||
const bool r = doc.setContent( ba, &p.errorMessage, &p.errorLine, &p.errorColumn );
|
||||
return r ? ParseResult {} : p;
|
||||
}
|
||||
#else
|
||||
[[nodiscard]] inline QDomDocument::ParseResult
|
||||
setXmlContent( QDomDocument& doc, const QByteArray& ba )
|
||||
{
|
||||
return doc.setContent( ba );
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace Calamares
|
||||
|
||||
#endif
|
@ -9,6 +9,7 @@
|
||||
|
||||
#include "GeoIPXML.h"
|
||||
|
||||
#include "compat/Xml.h"
|
||||
#include "utils/Logger.h"
|
||||
|
||||
#include <QtXml/QDomDocument>
|
||||
@ -28,11 +29,9 @@ getElementTexts( const QByteArray& data, const QString& tag )
|
||||
{
|
||||
QStringList elements;
|
||||
|
||||
QString domError;
|
||||
int errorLine, errorColumn;
|
||||
|
||||
QDomDocument doc;
|
||||
if ( doc.setContent( data, false, &domError, &errorLine, &errorColumn ) )
|
||||
const auto p = Calamares::setXmlContent( doc, data );
|
||||
if ( p.errorMessage.isEmpty() )
|
||||
{
|
||||
const auto tzElements = doc.elementsByTagName( tag );
|
||||
cDebug() << "GeoIP found" << tzElements.length() << "elements";
|
||||
@ -48,7 +47,8 @@ getElementTexts( const QByteArray& data, const QString& tag )
|
||||
}
|
||||
else
|
||||
{
|
||||
cWarning() << "GeoIP XML data error:" << domError << "(line" << errorLine << errorColumn << ')';
|
||||
cWarning() << "GeoIP XML data error:" << p.errorMessage << "(line" << p.errorLine << ':' << p.errorColumn
|
||||
<< ')';
|
||||
}
|
||||
|
||||
if ( elements.count() < 1 )
|
||||
|
Loading…
Reference in New Issue
Block a user