diff --git a/src/libtomahawk/resolvers/JSResolverHelper.cpp b/src/libtomahawk/resolvers/JSResolverHelper.cpp index c4e921110..0c17fa5bb 100644 --- a/src/libtomahawk/resolvers/JSResolverHelper.cpp +++ b/src/libtomahawk/resolvers/JSResolverHelper.cpp @@ -50,6 +50,7 @@ #include <QFileInfo> #include <QMap> #include <QWebFrame> +#include <QLocale> #include <taglib/asffile.h> #include <taglib/flacfile.h> #include <taglib/id3v2framefactory.h> @@ -64,6 +65,11 @@ #endif #endif +#ifdef Q_OS_WIN + // GetUserGeoID for currentCountry + #include <winnls.h> +#endif + using namespace Tomahawk; JSResolverHelper::JSResolverHelper( const QString& scriptPath, JSResolver* parent ) @@ -193,7 +199,287 @@ JSResolverHelper::uuid() const int JSResolverHelper::currentCountry() const { +#if defined Q_OS_WIN + // c.f. https://msdn.microsoft.com/en-us/library/windows/desktop/dd374073(v=vs.85).aspx + static QHash< GEOID, QLocale::Country > geoIdCountryMapping = { + { 2, QLocale::AntiguaAndBarbuda }, + { 3, QLocale::Afghanistan }, + { 4, QLocale::Algeria }, + { 5, QLocale::Azerbaijan }, + { 6, QLocale::Albania }, + { 7, QLocale::Armenia }, + { 8, QLocale::Andorra }, + { 9, QLocale::Angola }, + { 10, QLocale::AmericanSamoa }, + { 11, QLocale::Argentina }, + { 12, QLocale::Australia }, + { 14, QLocale::Austria }, + { 17, QLocale::Bahrain }, + { 18, QLocale::Barbados }, + { 19, QLocale::Botswana }, + { 20, QLocale::Bermuda }, + { 21, QLocale::Belgium }, + { 22, QLocale::Bahamas }, + { 23, QLocale::Bangladesh }, + { 24, QLocale::Belize }, + { 25, QLocale::BosniaAndHerzegowina }, + { 26, QLocale::Bolivia }, + { 27, QLocale::Myanmar }, + { 28, QLocale::Benin }, + { 29, QLocale::Belarus }, + { 30, QLocale::SolomonIslands }, + { 32, QLocale::Brazil }, + { 34, QLocale::Bhutan }, + { 35, QLocale::Bulgaria }, + { 37, QLocale::Brunei }, + { 38, QLocale::Burundi }, + { 39, QLocale::Canada }, + { 40, QLocale::Cambodia }, + { 41, QLocale::Chad }, + { 42, QLocale::SriLanka }, + { 43, QLocale::PeoplesRepublicOfCongo }, // Congo + { 44, QLocale::DemocraticRepublicOfCongo }, // Congo (DRC) + { 45, QLocale::China }, + { 46, QLocale::Chile }, + { 49, QLocale::Cameroon }, + { 50, QLocale::Comoros }, + { 51, QLocale::Colombia }, + { 54, QLocale::CostaRica }, + { 55, QLocale::CentralAfricanRepublic }, + { 56, QLocale::Cuba }, + { 57, QLocale::CapeVerde }, + { 59, QLocale::Cyprus }, + { 61, QLocale::Denmark }, + { 62, QLocale::Djibouti }, + { 63, QLocale::Dominica }, + { 65, QLocale::DominicanRepublic }, + { 66, QLocale::Ecuador }, + { 67, QLocale::Egypt }, + { 68, QLocale::Ireland }, + { 69, QLocale::EquatorialGuinea }, + { 70, QLocale::Estonia }, + { 71, QLocale::Eritrea }, + { 72, QLocale::ElSalvador }, + { 73, QLocale::Ethiopia }, + { 75, QLocale::CzechRepublic }, + { 77, QLocale::Finland }, + { 78, QLocale::Fiji }, + { 80, QLocale::Micronesia }, + { 81, QLocale::FaroeIslands }, + { 84, QLocale::France }, + { 86, QLocale::Gambia }, + { 87, QLocale::Gabon }, + { 88, QLocale::Georgia }, + { 89, QLocale::Ghana }, + { 90, QLocale::Gibraltar }, + { 91, QLocale::Grenada }, + { 93, QLocale::Greenland }, + { 94, QLocale::Germany }, + { 98, QLocale::Greece }, + { 99, QLocale::Guatemala }, + { 100, QLocale::Guinea }, + { 101, QLocale::Guyana }, + { 103, QLocale::Haiti }, + { 104, QLocale::HongKong }, + { 106, QLocale::Honduras }, + { 108, QLocale::Croatia }, + { 109, QLocale::Hungary }, + { 110, QLocale::Iceland }, + { 111, QLocale::Indonesia }, + { 113, QLocale::India }, + { 114, QLocale::BritishIndianOceanTerritory }, + { 116, QLocale::Iran }, + { 117, QLocale::Israel }, + { 118, QLocale::Italy }, + { 119, QLocale::IvoryCoast }, + { 121, QLocale::Iraq }, + { 122, QLocale::Japan }, + { 124, QLocale::Jamaica }, + { 125, QLocale::SvalbardAndJanMayenIslands }, // Jan Mayen + { 126, QLocale::Jordan }, + { 127, QLocale::AnyCountry }, // Johnston Atoll + { 129, QLocale::Kenya }, + { 130, QLocale::Kyrgyzstan }, + { 131, QLocale::DemocraticRepublicOfKorea }, // North Korea + { 133, QLocale::Kiribati }, + { 134, QLocale::RepublicOfKorea }, // Korea + { 136, QLocale::Kuwait }, + { 137, QLocale::Kazakhstan }, + { 138, QLocale::Laos }, + { 139, QLocale::Lebanon }, + { 140, QLocale::Latvia }, + { 141, QLocale::Lithuania }, + { 142, QLocale::Liberia }, + { 143, QLocale::Slovakia }, + { 145, QLocale::Liechtenstein }, + { 146, QLocale::Lesotho }, + { 147, QLocale::Luxembourg }, + { 148, QLocale::Libya }, + { 149, QLocale::Madagascar }, + { 151, QLocale::Macau }, + { 152, QLocale::Moldova }, + { 154, QLocale::Mongolia }, + { 156, QLocale::Malawi }, + { 157, QLocale::Mali }, + { 158, QLocale::Monaco }, + { 159, QLocale::Morocco }, + { 160, QLocale::Mauritius }, + { 162, QLocale::Mauritania }, + { 163, QLocale::Malta }, + { 164, QLocale::Oman }, + { 165, QLocale::Maldives }, + { 166, QLocale::Mexico }, + { 167, QLocale::Malaysia }, + { 168, QLocale::Mozambique }, + { 173, QLocale::Niger }, + { 174, QLocale::Vanuatu }, + { 175, QLocale::Nigeria }, + { 176, QLocale::Netherlands }, + { 177, QLocale::Norway }, + { 178, QLocale::Nepal }, + { 180, QLocale::NauruCountry }, // Nauru + { 181, QLocale::Suriname }, + { 182, QLocale::Nicaragua }, + { 183, QLocale::NewZealand }, + { 184, QLocale::PalestinianTerritories }, // Palestinian Authority + { 185, QLocale::Paraguay }, + { 187, QLocale::Peru }, + { 190, QLocale::Pakistan }, + { 191, QLocale::Poland }, + { 192, QLocale::Panama }, + { 193, QLocale::Portugal }, + { 194, QLocale::PapuaNewGuinea }, + { 195, QLocale::Palau }, + { 196, QLocale::GuineaBissau }, + { 197, QLocale::Qatar }, + { 198, QLocale::Reunion }, + { 199, QLocale::MarshallIslands }, + { 200, QLocale::Romania }, + { 201, QLocale::Philippines }, + { 202, QLocale::PuertoRico }, + { 203, QLocale::Russia }, + { 204, QLocale::Rwanda }, + { 205, QLocale::SaudiArabia }, + { 206, QLocale::SaintPierreAndMiquelon }, + { 207, QLocale::SaintKittsAndNevis }, + { 208, QLocale::Seychelles }, + { 209, QLocale::SouthAfrica }, + { 210, QLocale::Senegal }, + { 212, QLocale::Slovenia }, + { 213, QLocale::SierraLeone }, + { 214, QLocale::SanMarino }, + { 215, QLocale::Singapore }, + { 216, QLocale::Somalia }, + { 217, QLocale::Spain }, + { 218, QLocale::SaintLucia }, + { 219, QLocale::Sudan }, + { 220, QLocale::SvalbardAndJanMayenIslands }, // Svalbard + { 221, QLocale::Sweden }, + { 222, QLocale::Syria }, + { 223, QLocale::Switzerland }, + { 224, QLocale::UnitedArabEmirates }, + { 225, QLocale::TrinidadAndTobago }, + { 227, QLocale::Thailand }, + { 228, QLocale::Tajikistan }, + { 231, QLocale::Tonga }, + { 232, QLocale::Togo }, + { 233, QLocale::SaoTomeAndPrincipe }, + { 234, QLocale::Tunisia }, + { 235, QLocale::Turkey }, + { 236, QLocale::Tuvalu }, + { 237, QLocale::Taiwan }, + { 238, QLocale::Turkmenistan }, + { 239, QLocale::Tanzania }, + { 240, QLocale::Uganda }, + { 241, QLocale::Ukraine }, + { 242, QLocale::UnitedKingdom }, + { 244, QLocale::UnitedStates }, + { 245, QLocale::BurkinaFaso }, + { 246, QLocale::Uruguay }, + { 247, QLocale::Uzbekistan }, + { 248, QLocale::SaintVincentAndTheGrenadines }, + { 249, QLocale::Venezuela }, + { 251, QLocale::Vietnam }, + { 252, QLocale::UnitedStatesVirginIslands }, // VirginIslands (British VI are handled down below) + { 253, QLocale::VaticanCityState }, + { 254, QLocale::Namibia }, + { 257, QLocale::WesternSahara }, // Western Sahara (disputed) + { 258, QLocale::UnitedStates }, // Wake Island + { 259, QLocale::Samoa }, + { 260, QLocale::Swaziland }, + { 261, QLocale::Yemen }, + { 263, QLocale::Zambia }, + { 264, QLocale::Zimbabwe }, + { 269, QLocale::Serbia }, // Serbia and Montenegro(Former) + { 270, QLocale::Montenegro }, + { 271, QLocale::Serbia }, + { 273, QLocale::CuraSao }, + { 276, QLocale::SouthSudan }, + { 300, QLocale::Anguilla }, + { 301, QLocale::Antarctica }, + { 302, QLocale::Aruba }, + { 303, QLocale::AscensionIsland }, + { 304, QLocale::Australia }, // Ashmore and Cartier Islands + { 305, QLocale::UnitedStates }, // Baker Island + { 306, QLocale::BouvetIsland }, + { 307, QLocale::CaymanIslands }, + { 309, QLocale::ChristmasIsland }, + { 310, QLocale::ClippertonIsland }, + { 311, QLocale::CocosIslands }, // Cocos(Keeling)Islands + { 312, QLocale::CookIslands }, + { 313, QLocale::Australia }, // Coral Sea Islands + { 314, QLocale::DiegoGarcia }, + { 315, QLocale::FalklandIslands }, // Falkland Islands (IslasMalvinas) + { 317, QLocale::FrenchGuiana }, + { 318, QLocale::FrenchPolynesia }, + { 319, QLocale::Antarctica }, // French Southern and Antarctic Lands + { 321, QLocale::Guadeloupe }, + { 322, QLocale::Guam }, + { 323, QLocale::UnitedStates }, // Guantanamo Bay + { 324, QLocale::Guernsey }, + { 325, QLocale::Australia }, // Heard Island and Mc Donald Islands + { 326, QLocale::UnitedStates }, // Howland Island + { 327, QLocale::UnitedStates }, // Jarvis Island + { 328, QLocale::Jersey }, + { 329, QLocale::UnitedStates }, // Kingman Reef + { 330, QLocale::Martinique }, + { 331, QLocale::Mayotte }, + { 332, QLocale::Montserrat }, + { 334, QLocale::NewCaledonia }, + { 335, QLocale::Niue }, + { 336, QLocale::NorfolkIsland }, + { 337, QLocale::NorthernMarianaIslands }, + { 338, QLocale::UnitedStates }, // PalmyraAtoll + { 339, QLocale::Pitcairn }, // Pitcairn Islands + { 340, QLocale::UnitedStates }, // Rota Island + { 341, QLocale::UnitedStates }, // Saipan + { 342, QLocale::SouthGeorgiaAndTheSouthSandwichIslands }, + { 343, QLocale::SaintHelena }, + { 346, QLocale::UnitedStates }, // Tinian Island + { 347, QLocale::Tokelau }, + { 348, QLocale::TristanDaCunha }, + { 349, QLocale::TurksAndCaicosIslands }, + { 351, QLocale::BritishVirginIslands }, + { 352, QLocale::WallisAndFutunaIslands }, + { 15126, QLocale::IsleOfMan }, + { 19618, QLocale::Macedonia }, // Macedonia, Former Yugoslav Republic Of + { 21242, QLocale::UnitedStates }, // Midway Islands + { 30967, QLocale::SaintMartin }, // SintMaarten (DutchPart) + { 31706, QLocale::SaintMartin }, // (FrenchPart) + { 7299303, QLocale::EastTimor }, // Democratic Republic Of Timor-Leste + { 10028789, QLocale::AlandIslands }, + { 161832015, QLocale::SaintBarthelemy }, + { 161832256, QLocale::UnitedStates }, // U.S. Minor Outlying Islands + { 161832258, QLocale::Bonaire }, // Bonaire, Saint Eustatius and Saba + }; + + GEOID nationId = GetUserGeoID(GEOCLASS_NATION); + + return geoIdCountryMapping.value(nationId); + +#else return static_cast<int>(QLocale::system().country()); +#endif }