[locale] Add GeoIP settings to Config

- this doesn't do the lookup **yet**
- while here, refactor setConfigurationMap so it reads like a story,
  with chunks bitten out into a handful of static inline void methods.
This commit is contained in:
Adriaan de Groot 2020-07-22 11:53:06 +02:00
parent f64a1eb16a
commit a25d61077f
2 changed files with 58 additions and 11 deletions

View File

@ -327,43 +327,50 @@ Config::currentLCStatus() const
.arg( localeLabel( m_selectedLocaleConfiguration.lc_numeric ) ); .arg( localeLabel( m_selectedLocaleConfiguration.lc_numeric ) );
} }
static inline void
void getLocaleGenLines( const QVariantMap& configurationMap, QStringList& localeGenLines )
Config::setConfigurationMap( const QVariantMap& configurationMap )
{ {
QString localeGenPath = CalamaresUtils::getString( configurationMap, "localeGenPath" ); QString localeGenPath = CalamaresUtils::getString( configurationMap, "localeGenPath" );
if ( localeGenPath.isEmpty() ) if ( localeGenPath.isEmpty() )
{ {
localeGenPath = QStringLiteral( "/etc/locale.gen" ); localeGenPath = QStringLiteral( "/etc/locale.gen" );
} }
m_localeGenLines = loadLocales( localeGenPath ); localeGenLines = loadLocales( localeGenPath );
}
m_adjustLiveTimezone static inline void
getAdjustLiveTimezone( const QVariantMap& configurationMap, bool& adjustLiveTimezone )
{
adjustLiveTimezone
= CalamaresUtils::getBool( configurationMap, "adjustLiveTimezone", Calamares::Settings::instance()->doChroot() ); = CalamaresUtils::getBool( configurationMap, "adjustLiveTimezone", Calamares::Settings::instance()->doChroot() );
#ifdef DEBUG_TIMEZONES #ifdef DEBUG_TIMEZONES
if ( m_adjustLiveTimezone ) if ( m_adjustLiveTimezone )
{ {
cWarning() << "Turning off live-timezone adjustments because debugging is on."; cWarning() << "Turning off live-timezone adjustments because debugging is on.";
m_adjustLiveTimezone = false; adjustLiveTimezone = false;
} }
#endif #endif
#ifdef __FreeBSD__ #ifdef __FreeBSD__
if ( m_adjustLiveTimezone ) if ( adjustLiveTimezone )
{ {
cWarning() << "Turning off live-timezone adjustments on FreeBSD."; cWarning() << "Turning off live-timezone adjustments on FreeBSD.";
m_adjustLiveTimezone = false; adjustLiveTimezone = false;
} }
#endif #endif
}
static inline void
getStartingTimezone( const QVariantMap& configurationMap, CalamaresUtils::GeoIP::RegionZonePair& startingTimezone )
{
QString region = CalamaresUtils::getString( configurationMap, "region" ); QString region = CalamaresUtils::getString( configurationMap, "region" );
QString zone = CalamaresUtils::getString( configurationMap, "zone" ); QString zone = CalamaresUtils::getString( configurationMap, "zone" );
if ( !region.isEmpty() && !zone.isEmpty() ) if ( !region.isEmpty() && !zone.isEmpty() )
{ {
m_startingTimezone = CalamaresUtils::GeoIP::RegionZonePair( region, zone ); startingTimezone = CalamaresUtils::GeoIP::RegionZonePair( region, zone );
} }
else else
{ {
m_startingTimezone startingTimezone
= CalamaresUtils::GeoIP::RegionZonePair( QStringLiteral( "America" ), QStringLiteral( "New_York" ) ); = CalamaresUtils::GeoIP::RegionZonePair( QStringLiteral( "America" ), QStringLiteral( "New_York" ) );
} }
@ -372,11 +379,40 @@ Config::setConfigurationMap( const QVariantMap& configurationMap )
auto systemtz = CalamaresUtils::GeoIP::splitTZString( QTimeZone::systemTimeZoneId() ); auto systemtz = CalamaresUtils::GeoIP::splitTZString( QTimeZone::systemTimeZoneId() );
if ( systemtz.isValid() ) if ( systemtz.isValid() )
{ {
m_startingTimezone = systemtz; cDebug() << "Overriding configured timezone" << startingTimezone << "with system timezone" << systemtz;
startingTimezone = systemtz;
} }
} }
} }
static inline void
getGeoIP( const QVariantMap& configurationMap, std::unique_ptr< CalamaresUtils::GeoIP::Handler >& geoip )
{
bool ok = false;
QVariantMap map = CalamaresUtils::getSubMap( configurationMap, "geoip", ok );
if ( ok )
{
QString url = CalamaresUtils::getString( map, "url" );
QString style = CalamaresUtils::getString( map, "style" );
QString selector = CalamaresUtils::getString( map, "selector" );
geoip = std::make_unique< CalamaresUtils::GeoIP::Handler >( style, url, selector );
if ( !geoip->isValid() )
{
cWarning() << "GeoIP Style" << style << "is not recognized.";
}
}
}
void
Config::setConfigurationMap( const QVariantMap& configurationMap )
{
getLocaleGenLines( configurationMap, m_localeGenLines );
getAdjustLiveTimezone( configurationMap, m_adjustLiveTimezone );
getStartingTimezone( configurationMap, m_startingTimezone );
getGeoIP( configurationMap, m_geoip );
}
Calamares::JobList Calamares::JobList
Config::createJobs() Config::createJobs()
{ {

View File

@ -24,6 +24,7 @@
#include "LocaleConfiguration.h" #include "LocaleConfiguration.h"
#include "Job.h" #include "Job.h"
#include "geoip/Handler.h"
#include "geoip/Interface.h" #include "geoip/Interface.h"
#include "locale/TimeZone.h" #include "locale/TimeZone.h"
@ -136,8 +137,18 @@ private:
bool m_adjustLiveTimezone; bool m_adjustLiveTimezone;
/** @brief The initial timezone (region, zone) specified in the config. /** @brief The initial timezone (region, zone) specified in the config.
*
* This may be overridden by setting *useSystemTimezone* or by
* GeoIP settings.
*/ */
CalamaresUtils::GeoIP::RegionZonePair m_startingTimezone; CalamaresUtils::GeoIP::RegionZonePair m_startingTimezone;
/** @brief Handler for GeoIP lookup (if configured)
*
* The GeoIP lookup needs to be started at some suitable time,
* by explicitly calling *TODO*
*/
std::unique_ptr< CalamaresUtils::GeoIP::Handler > m_geoip;
}; };