diff --git a/src/modules/locale/CMakeLists.txt b/src/modules/locale/CMakeLists.txt index 774868a28..442ca0d18 100644 --- a/src/modules/locale/CMakeLists.txt +++ b/src/modules/locale/CMakeLists.txt @@ -1,11 +1,19 @@ include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) +set( geoip_src GeoIP.cpp GeoIPFreeGeoIP.cpp ) +set( geoip_libs ) + +find_package(Qt5 COMPONENTS Xml) +if( Qt5Xml_FOUND ) + list( APPEND geoip_src GeoIPXML.cpp ) + list( APPEND geoip_libs Qt5::Xml ) +endif() + calamares_add_plugin( locale TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES - GeoIP.cpp - GeoIPFreeGeoIP.cpp + ${geoip_src} LCLocaleDialog.cpp LocaleConfiguration.cpp LocalePage.cpp @@ -19,6 +27,7 @@ calamares_add_plugin( locale LINK_PRIVATE_LIBRARIES calamaresui Qt5::Network + ${geoip_libs} ${YAMLCPP_LIBRARY} SHARED_LIB ) diff --git a/src/modules/locale/GeoIPXML.cpp b/src/modules/locale/GeoIPXML.cpp new file mode 100644 index 000000000..0b52c9612 --- /dev/null +++ b/src/modules/locale/GeoIPXML.cpp @@ -0,0 +1,52 @@ +/* === This file is part of Calamares - === + * + * Copyright 2018, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#include "GeoIPXML.h" + +#include "utils/Logger.h" + +#include +#include + +GeoIP::RegionZonePair +XMLGeoIP::processReply( QNetworkReply* reply ) +{ + QString domError; + int errorLine, errorColumn; + + QDomDocument doc; + if ( doc.setContent( reply->readAll(), false, &domError, &errorLine, &errorColumn ) ) + { + const auto tzElements = doc.elementsByTagName( "TimeZone" ); + cDebug() << "GeoIP found" << tzElements.length() << "elements"; + for ( int it = 0; it < tzElements.length(); ++it ) + { + if ( tzElements.at(it).isText() ) + { + return splitTZString( tzElements.at(it).nodeValue() ); + } + } + } + else + { + cDebug() << "GeoIP XML data error:" << domError << "(line" << errorLine << errorColumn << ')'; + } + + return qMakePair( QString(), QString() ); + +} diff --git a/src/modules/locale/GeoIPXML.h b/src/modules/locale/GeoIPXML.h new file mode 100644 index 000000000..d83a46daa --- /dev/null +++ b/src/modules/locale/GeoIPXML.h @@ -0,0 +1,36 @@ +/* === This file is part of Calamares - === + * + * Copyright 2018, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#ifndef GEOIPXML_H +#define GEOIPXML_H + +#include "GeoIP.h" + +/** @brief GeoIP lookup with XML data + * + * The data is assumed to be in XML format with a + * + * element, which contains the text (string) for the region/zone. This + * format is expected by, e.g. the Ubiquity installer. + */ +struct XMLGeoIP : public GeoIP +{ + virtual RegionZonePair processReply( QNetworkReply* ); +} ; + +#endif