[welcome] Support GeoIP country lookup

This commit is contained in:
Adriaan de Groot 2019-05-09 15:15:03 -04:00
parent 44559d24bd
commit cb7c38daba
2 changed files with 35 additions and 0 deletions

View File

@ -22,10 +22,12 @@
#include "WelcomePage.h"
#include "checker/GeneralRequirements.h"
#include "geoip/Handler.h"
#include "modulesystem/ModuleManager.h"
#include "utils/Logger.h"
#include "utils/Variant.h"
#include <QFutureWatcher>
#include <QVariant>
CALAMARES_PLUGIN_FACTORY_DEFINITION( WelcomeViewStepFactory, registerPlugin<WelcomeViewStep>(); )
@ -112,6 +114,26 @@ WelcomeViewStep::setConfigurationMap( const QVariantMap& configurationMap )
else
cWarning() << "no valid requirements map found in welcome "
"module configuration.";
bool ok = false;
QVariantMap geoip = CalamaresUtils::getSubMap( configurationMap, "geoip", ok );
if ( ok )
{
using FWString = QFutureWatcher< QString >;
auto* handler = new CalamaresUtils::GeoIP::Handler(
CalamaresUtils::getString( geoip, "style" ),
CalamaresUtils::getString( geoip, "url" ),
CalamaresUtils::getString( geoip, "selector" ) );
auto* future = new FWString();
connect( future, &FWString::finished, [f=future, h=handler]()
{
cDebug() << "GeoIP result for welcome=" << f->future().result();
f->deleteLater();
delete h;
} );
future->setFuture( handler->queryRaw() );
}
}
Calamares::RequirementsList WelcomeViewStep::checkRequirements()

View File

@ -47,3 +47,16 @@ requirements:
# - storage
- ram
# - root
# GeoIP checking
#
# This can be used to pre-select a language based on the country
# the user is currently in. It *assumes* that there's internet
# connectivity, though. Configuration is like in the locale module,
# but remember to use a URL that returns full data **and** to
# use a selector that will pick the country, not the timezone.
geoip:
style: "xml"
url: "https://geoip.kde.org/v1/ubiquity" # extended XML format
selector: "CountryCode" # blank uses default, which is wrong