[libcalamares] Sort the models before use
- zones and regions alphabetically by key
This commit is contained in:
parent
37c211fd14
commit
d814a3dba8
@ -384,6 +384,9 @@ LocaleTests::testTZIterator()
|
|||||||
QVERIFY( seenRome );
|
QVERIFY( seenRome );
|
||||||
QVERIFY( !seenGnome );
|
QVERIFY( !seenGnome );
|
||||||
QCOMPARE( count, zones.rowCount( QModelIndex() ) );
|
QCOMPARE( count, zones.rowCount( QModelIndex() ) );
|
||||||
|
|
||||||
|
QCOMPARE( zones.data( zones.index( 0 ), ZonesModel::RegionRole ).toString(), QStringLiteral( "Africa" ) );
|
||||||
|
QCOMPARE( ( *zones.begin() )->zone(), QStringLiteral( "Abidjan" ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -105,8 +105,11 @@ RegionData::tr() const
|
|||||||
return QObject::tr( m_human, "tz_regions" );
|
return QObject::tr( m_human, "tz_regions" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
using RegionVector = QVector< RegionData* >;
|
||||||
|
using ZoneVector = QVector< TimeZoneData* >;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
loadTZData( QVector< RegionData >& regions, QVector< TimeZoneData* >& zones )
|
loadTZData( RegionVector& regions, ZoneVector& zones )
|
||||||
{
|
{
|
||||||
QFile file( TZ_DATA_FILE );
|
QFile file( TZ_DATA_FILE );
|
||||||
if ( file.open( QIODevice::ReadOnly | QIODevice::Text ) )
|
if ( file.open( QIODevice::ReadOnly | QIODevice::Text ) )
|
||||||
@ -166,10 +169,18 @@ loadTZData( QVector< RegionData >& regions, QVector< TimeZoneData* >& zones )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Now we have region, zone, country, lat and longitude
|
// Now we have region, zone, country, lat and longitude
|
||||||
RegionData r( region );
|
const RegionData* existingRegion = nullptr;
|
||||||
if ( regions.indexOf( r ) < 0 )
|
for ( const auto* p : regions )
|
||||||
{
|
{
|
||||||
regions.append( std::move( r ) );
|
if ( p->key() == region )
|
||||||
|
{
|
||||||
|
existingRegion = p;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( !existingRegion )
|
||||||
|
{
|
||||||
|
regions.append( new RegionData( region ) );
|
||||||
}
|
}
|
||||||
zones.append( new TimeZoneData( region, zone, countryCode, latitude, longitude ) );
|
zones.append( new TimeZoneData( region, zone, countryCode, latitude, longitude ) );
|
||||||
}
|
}
|
||||||
@ -179,8 +190,8 @@ loadTZData( QVector< RegionData >& regions, QVector< TimeZoneData* >& zones )
|
|||||||
|
|
||||||
struct Private
|
struct Private
|
||||||
{
|
{
|
||||||
QVector< RegionData > m_regions;
|
RegionVector m_regions;
|
||||||
QVector< TimeZoneData* > m_zones;
|
ZoneVector m_zones;
|
||||||
|
|
||||||
Private()
|
Private()
|
||||||
{
|
{
|
||||||
@ -188,6 +199,17 @@ struct Private
|
|||||||
m_zones.reserve( 452 ); // wc -l /usr/share/zoneinfo/zone.tab
|
m_zones.reserve( 452 ); // wc -l /usr/share/zoneinfo/zone.tab
|
||||||
|
|
||||||
loadTZData( m_regions, m_zones );
|
loadTZData( m_regions, m_zones );
|
||||||
|
|
||||||
|
std::sort( m_regions.begin(), m_regions.end(), []( const RegionData* lhs, const RegionData* rhs ) {
|
||||||
|
return lhs->key() < rhs->key();
|
||||||
|
} );
|
||||||
|
std::sort( m_zones.begin(), m_zones.end(), []( const TimeZoneData* lhs, const TimeZoneData* rhs ) {
|
||||||
|
if ( lhs->region() == rhs->region() )
|
||||||
|
{
|
||||||
|
return lhs->zone() < rhs->zone();
|
||||||
|
}
|
||||||
|
return lhs->region() < rhs->region();
|
||||||
|
} );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -223,11 +245,11 @@ RegionsModel::data( const QModelIndex& index, int role ) const
|
|||||||
const auto& region = m_private->m_regions[ index.row() ];
|
const auto& region = m_private->m_regions[ index.row() ];
|
||||||
if ( role == NameRole )
|
if ( role == NameRole )
|
||||||
{
|
{
|
||||||
return region.tr();
|
return region->tr();
|
||||||
}
|
}
|
||||||
if ( role == KeyRole )
|
if ( role == KeyRole )
|
||||||
{
|
{
|
||||||
return region.key();
|
return region->key();
|
||||||
}
|
}
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user