mirror of
https://github.com/spalencsar/bearwave.git
synced 2026-07-06 22:24:17 +02:00
Release 1.0.3: World Categories dashboard and localization
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QStandardPaths>
|
||||
#include <QLocale>
|
||||
|
||||
namespace {
|
||||
constexpr int kRecentLimit = 20;
|
||||
@@ -53,6 +54,8 @@ void RadioBackend::setupConnections()
|
||||
{
|
||||
connect(m_radioBrowser, &RadioBrowser::stationsLoaded,
|
||||
this, &RadioBackend::onStationsLoaded);
|
||||
connect(m_radioBrowser, &RadioBrowser::countriesLoaded,
|
||||
this, &RadioBackend::onCountriesLoaded);
|
||||
connect(m_radioBrowser, &RadioBrowser::error,
|
||||
this, [this](const QString &error) {
|
||||
qWarning() << "RadioBrowser error:" << error;
|
||||
@@ -128,6 +131,30 @@ void RadioBackend::loadWorldStations()
|
||||
m_radioBrowser->getWorldStations(200);
|
||||
}
|
||||
|
||||
void RadioBackend::loadCountries()
|
||||
{
|
||||
setLoading(true);
|
||||
m_radioBrowser->getCountries();
|
||||
}
|
||||
|
||||
void RadioBackend::onCountriesLoaded(const QVariantList &countries)
|
||||
{
|
||||
m_countries.clear();
|
||||
for (const QVariant &item : countries) {
|
||||
QVariantMap map = item.toMap();
|
||||
QString code = map["code"].toString();
|
||||
QString englishName = map["name"].toString();
|
||||
map["name"] = localizeCountry(code, englishName);
|
||||
m_countries.append(map);
|
||||
}
|
||||
|
||||
std::sort(m_countries.begin(), m_countries.end(), [](const QVariant &a, const QVariant &b) {
|
||||
return QString::localeAwareCompare(a.toMap()["name"].toString(), b.toMap()["name"].toString()) < 0;
|
||||
});
|
||||
emit countriesChanged();
|
||||
setLoading(false);
|
||||
}
|
||||
|
||||
void RadioBackend::loadByTag(const QString &tag)
|
||||
{
|
||||
if (tag.trimmed().isEmpty()) {
|
||||
@@ -794,3 +821,100 @@ bool RadioBackend::matchesStation(const RadioStation *station, const QString &uu
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
QString RadioBackend::localizeCountry(const QString &code, const QString &englishName)
|
||||
{
|
||||
QLocale locale;
|
||||
if (locale.language() != QLocale::German) {
|
||||
return englishName;
|
||||
}
|
||||
|
||||
static const QHash<QString, QString> germanCountries = {
|
||||
{"AD", "Andorra"}, {"AE", "Vereinigte Arabische Emirate"}, {"AF", "Afghanistan"},
|
||||
{"AG", "Antigua und Barbuda"}, {"AI", "Anguilla"}, {"AL", "Albanien"},
|
||||
{"AM", "Armenien"}, {"AO", "Angola"}, {"AQ", "Antarktis"}, {"AR", "Argentinien"},
|
||||
{"AS", "Amerikanisch-Samoa"}, {"AT", "Österreich"}, {"AU", "Australien"},
|
||||
{"AW", "Aruba"}, {"AX", "Åland-Inseln"}, {"AZ", "Aserbaidschan"},
|
||||
{"BA", "Bosnien und Herzegowina"}, {"BB", "Barbados"}, {"BD", "Bangladesch"},
|
||||
{"BE", "Belgien"}, {"BF", "Burkina Faso"}, {"BG", "Bulgarien"},
|
||||
{"BH", "Bahrain"}, {"BI", "Burundi"}, {"BJ", "Benin"},
|
||||
{"BL", "St. Bartholomäus"}, {"BM", "Bermuda"}, {"BN", "Brunei"},
|
||||
{"BO", "Bolivien"}, {"BQ", "Bonaire"}, {"BR", "Brasilien"},
|
||||
{"BS", "Bahamas"}, {"BT", "Bhutan"}, {"BV", "Bouvetinsel"},
|
||||
{"BW", "Botswana"}, {"BY", "Belarus"}, {"BZ", "Belize"},
|
||||
{"CA", "Kanada"}, {"CC", "Kokosinseln"}, {"CD", "Kongo-Kinshasa"},
|
||||
{"CF", "Zentralafrikanische Republik"}, {"CG", "Kongo-Brazzaville"}, {"CH", "Schweiz"},
|
||||
{"CI", "Elfenbeinküste"}, {"CK", "Cookinseln"}, {"CL", "Chile"},
|
||||
{"CM", "Kamerun"}, {"CN", "China"}, {"CO", "Kolumbien"},
|
||||
{"CR", "Costa Rica"}, {"CU", "Kuba"}, {"CV", "Cabo Verde"},
|
||||
{"CW", "Curaçao"}, {"CX", "Weihnachtsinsel"}, {"CY", "Zypern"},
|
||||
{"CZ", "Tschechien"}, {"DE", "Deutschland"}, {"DJ", "Dschibuti"},
|
||||
{"DK", "Dänemark"}, {"DM", "Dominica"}, {"DO", "Dominikanische Republik"},
|
||||
{"DZ", "Algerien"}, {"EC", "Ecuador"}, {"EE", "Estland"},
|
||||
{"EG", "Ägypten"}, {"EH", "Westsahara"}, {"ER", "Eritrea"},
|
||||
{"ES", "Spanien"}, {"ET", "Äthiopien"}, {"FI", "Finnland"},
|
||||
{"FJ", "Fidschi"}, {"FK", "Falklandinseln"}, {"FM", "Mikronesien"},
|
||||
{"FO", "Färöer"}, {"FR", "Frankreich"}, {"GA", "Gabun"},
|
||||
{"GB", "Großbritannien"}, {"GD", "Grenada"}, {"GE", "Georgien"},
|
||||
{"GF", "Französisch-Guayana"}, {"GG", "Guernsey"}, {"GH", "Ghana"},
|
||||
{"GI", "Gibraltar"}, {"GL", "Grönland"}, {"GM", "Gambia"},
|
||||
{"GN", "Guinea"}, {"GP", "Guadeloupe"}, {"GQ", "Äquatorialguinea"},
|
||||
{"GR", "Griechenland"}, {"GS", "Südgeorgien"}, {"GT", "Guatemala"},
|
||||
{"GU", "Guam"}, {"GW", "Guinea-Bissau"}, {"GY", "Guyana"},
|
||||
{"HK", "Hongkong"}, {"HM", "Heard und McDonaldinseln"}, {"HN", "Honduras"},
|
||||
{"HR", "Kroatien"}, {"HT", "Haiti"}, {"HU", "Ungarn"},
|
||||
{"ID", "Indonesien"}, {"IE", "Irland"}, {"IL", "Israel"},
|
||||
{"IM", "Isle of Man"}, {"IN", "Indien"}, {"IO", "Britisches Territorium im Indischen Ozean"},
|
||||
{"IQ", "Irak"}, {"IR", "Iran"}, {"IS", "Island"},
|
||||
{"IT", "Italien"}, {"JE", "Jersey"}, {"JM", "Jamaika"},
|
||||
{"JO", "Jordanien"}, {"JP", "Japan"}, {"KE", "Kenia"},
|
||||
{"KG", "Kirgisistan"}, {"KH", "Kambodscha"}, {"KI", "Kiribati"},
|
||||
{"KM", "Komoren"}, {"KN", "St. Kitts und Nevis"}, {"KP", "Nordkorea"},
|
||||
{"KR", "Südkorea"}, {"KW", "Kuwait"}, {"KY", "Kaimaninseln"},
|
||||
{"KZ", "Kasachstan"}, {"LA", "Laos"}, {"LB", "Libanon"},
|
||||
{"LC", "St. Lucia"}, {"LI", "Liechtenstein"}, {"LK", "Sri Lanka"},
|
||||
{"LR", "Liberia"}, {"LS", "Lesotho"}, {"LT", "Litauen"},
|
||||
{"LU", "Luxemburg"}, {"LV", "Lettland"}, {"LY", "Libyen"},
|
||||
{"MA", "Marokko"}, {"MC", "Monaco"}, {"MD", "Moldawien"},
|
||||
{"ME", "Montenegro"}, {"MF", "St. Martin"}, {"MG", "Madagaskar"},
|
||||
{"MH", "Marshallinseln"}, {"MK", "Nordmazedonien"}, {"ML", "Mali"},
|
||||
{"MM", "Myanmar"}, {"MN", "Mongolei"}, {"MO", "Macau"},
|
||||
{"MP", "Nördliche Marianen"}, {"MQ", "Martinique"}, {"MR", "Mauretanien"},
|
||||
{"MS", "Montserrat"}, {"MT", "Malta"}, {"MU", "Mauritius"},
|
||||
{"MV", "Malediven"}, {"MW", "Malawi"}, {"MX", "Mexiko"},
|
||||
{"MY", "Malaysia"}, {"MZ", "Mosambik"}, {"NA", "Namibia"},
|
||||
{"NC", "Neukaledonien"}, {"NE", "Niger"}, {"NF", "Norfolkinsel"},
|
||||
{"NG", "Nigeria"}, {"NI", "Nicaragua"}, {"NL", "Niederlande"},
|
||||
{"NO", "Norwegen"}, {"NP", "Nepal"}, {"NR", "Nauru"},
|
||||
{"NU", "Niue"}, {"NZ", "Neuseeland"}, {"OM", "Oman"},
|
||||
{"PA", "Panama"}, {"PE", "Peru"}, {"PF", "Französisch-Polynesien"},
|
||||
{"PG", "Papua-Neuguinea"}, {"PH", "Philippinen"}, {"PK", "Pakistan"},
|
||||
{"PL", "Polen"}, {"PM", "St. Pierre und Miquelon"}, {"PN", "Pitcairninseln"},
|
||||
{"PR", "Puerto Rico"}, {"PS", "Palästina"}, {"PT", "Portugal"},
|
||||
{"PW", "Palau"}, {"PY", "Paraguay"}, {"QA", "Katar"},
|
||||
{"RE", "Réunion"}, {"RO", "Rumänien"}, {"RS", "Serbien"},
|
||||
{"RU", "Russland"}, {"RW", "Ruanda"}, {"SA", "Saudi-Arabien"},
|
||||
{"SB", "Salomonen"}, {"SC", "Seychellen"}, {"SD", "Sudan"},
|
||||
{"SE", "Schweden"}, {"SG", "Singapur"}, {"SH", "St. Helena"},
|
||||
{"SI", "Slowenien"}, {"SJ", "Svalbard und Jan Mayen"}, {"SK", "Slowakei"},
|
||||
{"SL", "Sierra Leone"}, {"SM", "San Marino"}, {"SN", "Senegal"},
|
||||
{"SO", "Somalia"}, {"SR", "Suriname"}, {"SS", "Südsudan"},
|
||||
{"ST", "São Tomé und Príncipe"}, {"SV", "El Salvador"}, {"SX", "Sint Maarten"},
|
||||
{"SY", "Syrien"}, {"SZ", "Eswatini"}, {"TC", "Turks- und Caicosinseln"},
|
||||
{"TD", "Tschad"}, {"TF", "Französische Süd- und Antarktisgebiete"}, {"TG", "Togo"},
|
||||
{"TH", "Thailand"}, {"TJ", "Tadschikistan"}, {"TK", "Tokelau"},
|
||||
{"TL", "Osttimor"}, {"TM", "Turkmenistan"}, {"TN", "Tunesien"},
|
||||
{"TO", "Tonga"}, {"TR", "Türkei"}, {"TT", "Trinidad und Tobago"},
|
||||
{"TV", "Tuvalu"}, {"TW", "Taiwan"}, {"TZ", "Tansania"},
|
||||
{"UA", "Ukraine"}, {"UG", "Uganda"}, {"UM", "Amerikanische Überseeinseln"},
|
||||
{"US", "Vereinigte Staaten"}, {"UY", "Uruguay"}, {"UZ", "Usbekistan"},
|
||||
{"VA", "Vatikanstadt"}, {"VC", "St. Vincent und die Grenadinen"}, {"VE", "Venezuela"},
|
||||
{"VG", "Britische Jungferninseln"}, {"VI", "Amerikanische Jungferninseln"}, {"VN", "Vietnam"},
|
||||
{"VU", "Vanuatu"}, {"WF", "Wallis und Futuna"}, {"WS", "Samoa"},
|
||||
{"YE", "Jemen"}, {"YT", "Mayotte"}, {"ZA", "Südafrika"},
|
||||
{"ZM", "Sambia"}, {"ZW", "Simbabwe"}
|
||||
};
|
||||
|
||||
QString result = germanCountries.value(code.toUpper());
|
||||
return result.isEmpty() ? englishName : result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user