[libcalamares] Use strong types for locale Ids

Change the API to force strong type for more methods.
This cascades to a couple of consumers.
This commit is contained in:
Adriaan de Groot 2021-09-07 12:51:57 +02:00
parent 3ff5896dc6
commit 4e60f8af13
4 changed files with 16 additions and 16 deletions

View File

@ -25,8 +25,9 @@
* Returns a pair of nullptrs for non-special cases. * Returns a pair of nullptrs for non-special cases.
*/ */
static std::pair< QLocale*, QString* > static std::pair< QLocale*, QString* >
specialCase( const QString& localeName ) specialCase( const CalamaresUtils::Locale::Translation::Id& locale )
{ {
const QString localeName = locale.name;
if ( localeName == "sr@latin" ) if ( localeName == "sr@latin" )
{ {
static QLocale loc( QLocale::Language::Serbian, QLocale::Script::LatinScript, QLocale::Country::Serbia ); static QLocale loc( QLocale::Language::Serbian, QLocale::Script::LatinScript, QLocale::Country::Serbia );
@ -47,16 +48,16 @@ namespace Locale
{ {
Translation::Translation( QObject* parent ) Translation::Translation( QObject* parent )
: Translation( QString(), LabelFormat::IfNeededWithCountry, parent ) : Translation( { QString() }, LabelFormat::IfNeededWithCountry, parent )
{ {
} }
Translation::Translation( const QString& locale, LabelFormat format, QObject* parent ) Translation::Translation( const Id& localeId, LabelFormat format, QObject* parent )
: QObject( parent ) : QObject( parent )
, m_locale( getLocale( locale ) ) , m_locale( getLocale( localeId ) )
, m_localeId( locale.isEmpty() ? m_locale.name() : locale ) , m_localeId( localeId.name.isEmpty() ? m_locale.name() : localeId.name )
{ {
auto [ _, name ] = specialCase( locale ); auto [ _, name ] = specialCase( localeId );
QString longFormat = QObject::tr( "%1 (%2)" ); QString longFormat = QObject::tr( "%1 (%2)" );
@ -65,11 +66,11 @@ Translation::Translation( const QString& locale, LabelFormat format, QObject* pa
if ( languageName.isEmpty() ) if ( languageName.isEmpty() )
{ {
languageName = QString( "* %1 (%2)" ).arg( locale, englishName ); languageName = QString( "* %1 (%2)" ).arg( localeId.name, englishName );
} }
bool needsCountryName = ( format == LabelFormat::AlwaysWithCountry ) bool needsCountryName = ( format == LabelFormat::AlwaysWithCountry )
|| ( locale.contains( '_' ) && QLocale::countriesForLanguage( m_locale.language() ).count() > 1 ); || ( localeId.name.contains( '_' ) && QLocale::countriesForLanguage( m_locale.language() ).count() > 1 );
QString countryName = ( needsCountryName ? QString countryName = ( needsCountryName ?
m_locale.nativeCountryName() m_locale.nativeCountryName()
@ -80,14 +81,15 @@ Translation::Translation( const QString& locale, LabelFormat format, QObject* pa
} }
QLocale QLocale
Translation::getLocale( const QString& localeName ) Translation::getLocale( const Id& localeId )
{ {
const QString& localeName = localeId.name;
if ( localeName.isEmpty() ) if ( localeName.isEmpty() )
{ {
return QLocale(); return QLocale();
} }
auto [ locale, _ ] = specialCase( localeName ); auto [ locale, _ ] = specialCase( localeId );
return locale ? *locale : QLocale( localeName ); return locale ? *locale : QLocale( localeName );
} }

View File

@ -60,9 +60,7 @@ public:
* The @p format determines whether the country name is always present * The @p format determines whether the country name is always present
* in the label (human-readable form) or only if needed for disambiguation. * in the label (human-readable form) or only if needed for disambiguation.
*/ */
Translation( const QString& localeName, Translation( const Id& localeId, LabelFormat format = LabelFormat::IfNeededWithCountry, QObject* parent = nullptr );
LabelFormat format = LabelFormat::IfNeededWithCountry,
QObject* parent = nullptr );
/** @brief Define a sorting order. /** @brief Define a sorting order.
@ -103,7 +101,7 @@ public:
* *
* This obeys special cases as described in the class documentation. * This obeys special cases as described in the class documentation.
*/ */
static QLocale getLocale( const QString& localeName ); static QLocale getLocale( const Id& localeId );
private: private:
QLocale m_locale; QLocale m_locale;

View File

@ -29,7 +29,7 @@ TranslationsModel::TranslationsModel( const QStringList& locales, QObject* paren
for ( const auto& l : locales ) for ( const auto& l : locales )
{ {
m_locales.push_back( new Translation( l, Translation::LabelFormat::IfNeededWithCountry, this ) ); m_locales.push_back( new Translation( { l }, Translation::LabelFormat::IfNeededWithCountry, this ) );
} }
} }

View File

@ -370,7 +370,7 @@ localeLabel( const QString& s )
{ {
using CalamaresUtils::Locale::Translation; using CalamaresUtils::Locale::Translation;
Translation lang( s, Translation::LabelFormat::AlwaysWithCountry ); Translation lang( { s }, Translation::LabelFormat::AlwaysWithCountry );
return lang.label(); return lang.label();
} }