From a4d83b679aa03ee162a5d0f4fb9dfff3116c3b49 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 22 Jun 2019 14:01:54 +0200 Subject: [PATCH] Allow searching USA by 'United States'. --- Telegram/SourceFiles/boxes/sessions_box.cpp | 1 - Telegram/SourceFiles/countries.h | 255 ------------- Telegram/SourceFiles/data/data_countries.cpp | 301 +++++++++++++++ Telegram/SourceFiles/data/data_countries.h | 29 ++ .../passport/passport_panel_controller.cpp | 5 +- .../passport/passport_panel_details_row.cpp | 7 +- Telegram/SourceFiles/ui/countryinput.cpp | 357 +++++++----------- Telegram/SourceFiles/ui/countryinput.h | 13 +- .../SourceFiles/ui/widgets/input_fields.cpp | 3 +- Telegram/gyp/telegram_sources.txt | 3 +- 10 files changed, 493 insertions(+), 481 deletions(-) delete mode 100644 Telegram/SourceFiles/countries.h create mode 100644 Telegram/SourceFiles/data/data_countries.cpp create mode 100644 Telegram/SourceFiles/data/data_countries.h diff --git a/Telegram/SourceFiles/boxes/sessions_box.cpp b/Telegram/SourceFiles/boxes/sessions_box.cpp index 3776dcd24..ea74e7b6b 100644 --- a/Telegram/SourceFiles/boxes/sessions_box.cpp +++ b/Telegram/SourceFiles/boxes/sessions_box.cpp @@ -11,7 +11,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "storage/localstorage.h" #include "mainwidget.h" #include "mainwindow.h" -#include "countries.h" #include "auth_session.h" #include "data/data_session.h" #include "boxes/confirm_box.h" diff --git a/Telegram/SourceFiles/countries.h b/Telegram/SourceFiles/countries.h deleted file mode 100644 index 557886c31..000000000 --- a/Telegram/SourceFiles/countries.h +++ /dev/null @@ -1,255 +0,0 @@ -/* -This file is part of Telegram Desktop, -the official desktop application for the Telegram messaging service. - -For license and copyright information please follow this link: -https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL -*/ - -#pragma once - -struct CountryInfo { - CountryInfo(const char *_name, const char *_iso2, const char *_code) : name(_name), iso2(_iso2), code(_code) { - } - const char *name, *iso2, *code; -}; - -static const CountryInfo countries[] = { - CountryInfo("Afghanistan", "AF", "93"), - CountryInfo("Albania", "AL", "355"), - CountryInfo("Algeria", "DZ", "213"), - CountryInfo("American Samoa", "AS", "1684"), - CountryInfo("Andorra", "AD", "376"), - CountryInfo("Angola", "AO", "244"), - CountryInfo("Anguilla", "AI", "1264"), - CountryInfo("Antigua & Barbuda", "AG", "1268"), - CountryInfo("Argentina", "AR", "54"), - CountryInfo("Armenia", "AM", "374"), - CountryInfo("Aruba", "AW", "297"), - CountryInfo("Australia", "AU", "61"), - CountryInfo("Austria", "AT", "43"), - CountryInfo("Azerbaijan", "AZ", "994"), - CountryInfo("Bahamas", "BS", "1242"), - CountryInfo("Bahrain", "BH", "973"), - CountryInfo("Bangladesh", "BD", "880"), - CountryInfo("Barbados", "BB", "1246"), - CountryInfo("Belarus", "BY", "375"), - CountryInfo("Belgium", "BE", "32"), - CountryInfo("Belize", "BZ", "501"), - CountryInfo("Benin", "BJ", "229"), - CountryInfo("Bermuda", "BM", "1441"), - CountryInfo("Bhutan", "BT", "975"), - CountryInfo("Bolivia", "BO", "591"), - CountryInfo("Bonaire, Sint Eustatius & Saba", "BQ", "599"), - CountryInfo("Bosnia & Herzegovina", "BA", "387"), - CountryInfo("Botswana", "BW", "267"), - CountryInfo("Brazil", "BR", "55"), - CountryInfo("British Virgin Islands", "VG", "1284"), - CountryInfo("Brunei Darussalam", "BN", "673"), - CountryInfo("Bulgaria", "BG", "359"), - CountryInfo("Burkina Faso", "BF", "226"), - CountryInfo("Burundi", "BI", "257"), - CountryInfo("Cambodia", "KH", "855"), - CountryInfo("Cameroon", "CM", "237"), - CountryInfo("Canada", "CA", "1"), - CountryInfo("Cape Verde", "CV", "238"), - CountryInfo("Cayman Islands", "KY", "1345"), - CountryInfo("Central African Republic", "CF", "236"), - CountryInfo("Chad", "TD", "235"), - CountryInfo("Chile", "CL", "56"), - CountryInfo("China", "CN", "86"), - CountryInfo("Colombia", "CO", "57"), - CountryInfo("Comoros", "KM", "269"), - CountryInfo("Congo", "CG", "242"), - CountryInfo("Congo, Democratic Republic", "CD", "243"), - CountryInfo("Cook Islands", "CK", "682"), - CountryInfo("Costa Rica", "CR", "506"), - CountryInfo("Croatia", "HR", "385"), - CountryInfo("Cuba", "CU", "53"), - CountryInfo("Curaçao", "CW", "599"), - CountryInfo("Cyprus", "CY", "357"), - CountryInfo("Czech Republic", "CZ", "420"), - CountryInfo("Côte d`Ivoire", "CI", "225"), - CountryInfo("Denmark", "DK", "45"), - CountryInfo("Diego Garcia", "IO", "246"), - CountryInfo("Djibouti", "DJ", "253"), - CountryInfo("Dominica", "DM", "1767"), - CountryInfo("Dominican Republic", "DO", "1"), - CountryInfo("Ecuador", "EC", "593"), - CountryInfo("Egypt", "EG", "20"), - CountryInfo("El Salvador", "SV", "503"), - CountryInfo("Equatorial Guinea", "GQ", "240"), - CountryInfo("Eritrea", "ER", "291"), - CountryInfo("Estonia", "EE", "372"), - CountryInfo("Ethiopia", "ET", "251"), - CountryInfo("Falkland Islands", "FK", "500"), - CountryInfo("Faroe Islands", "FO", "298"), - CountryInfo("Fiji", "FJ", "679"), - CountryInfo("Finland", "FI", "358"), - CountryInfo("France", "FR", "33"), - CountryInfo("French Guiana", "GF", "594"), - CountryInfo("French Polynesia", "PF", "689"), - CountryInfo("Gabon", "GA", "241"), - CountryInfo("Gambia", "GM", "220"), - CountryInfo("Georgia", "GE", "995"), - CountryInfo("Germany", "DE", "49"), - CountryInfo("Ghana", "GH", "233"), - CountryInfo("Gibraltar", "GI", "350"), - CountryInfo("Greece", "GR", "30"), - CountryInfo("Greenland", "GL", "299"), - CountryInfo("Grenada", "GD", "1473"), - CountryInfo("Guadeloupe", "GP", "590"), - CountryInfo("Guam", "GU", "1671"), - CountryInfo("Guatemala", "GT", "502"), - CountryInfo("Guinea", "GN", "224"), - CountryInfo("Guinea-Bissau", "GW", "245"), - CountryInfo("Guyana", "GY", "592"), - CountryInfo("Haiti", "HT", "509"), - CountryInfo("Honduras", "HN", "504"), - CountryInfo("Hong Kong", "HK", "852"), - CountryInfo("Hungary", "HU", "36"), - CountryInfo("Iceland", "IS", "354"), - CountryInfo("India", "IN", "91"), - CountryInfo("Indonesia", "ID", "62"), - CountryInfo("Iran", "IR", "98"), - CountryInfo("Iraq", "IQ", "964"), - CountryInfo("Ireland", "IE", "353"), - CountryInfo("Israel", "IL", "972"), - CountryInfo("Italy", "IT", "39"), - CountryInfo("Jamaica", "JM", "1876"), - CountryInfo("Japan", "JP", "81"), - CountryInfo("Jordan", "JO", "962"), - CountryInfo("Kazakhstan", "KZ", "7"), - CountryInfo("Kenya", "KE", "254"), - CountryInfo("Kiribati", "KI", "686"), - CountryInfo("Kuwait", "KW", "965"), - CountryInfo("Kyrgyzstan", "KG", "996"), - CountryInfo("Laos", "LA", "856"), - CountryInfo("Latvia", "LV", "371"), - CountryInfo("Lebanon", "LB", "961"), - CountryInfo("Lesotho", "LS", "266"), - CountryInfo("Liberia", "LR", "231"), - CountryInfo("Libya", "LY", "218"), - CountryInfo("Liechtenstein", "LI", "423"), - CountryInfo("Lithuania", "LT", "370"), - CountryInfo("Luxembourg", "LU", "352"), - CountryInfo("Macau", "MO", "853"), - CountryInfo("Macedonia", "MK", "389"), - CountryInfo("Madagascar", "MG", "261"), - CountryInfo("Malawi", "MW", "265"), - CountryInfo("Malaysia", "MY", "60"), - CountryInfo("Maldives", "MV", "960"), - CountryInfo("Mali", "ML", "223"), - CountryInfo("Malta", "MT", "356"), - CountryInfo("Marshall Islands", "MH", "692"), - CountryInfo("Martinique", "MQ", "596"), - CountryInfo("Mauritania", "MR", "222"), - CountryInfo("Mauritius", "MU", "230"), - CountryInfo("Mexico", "MX", "52"), - CountryInfo("Micronesia", "FM", "691"), - CountryInfo("Moldova", "MD", "373"), - CountryInfo("Monaco", "MC", "377"), - CountryInfo("Mongolia", "MN", "976"), - CountryInfo("Montenegro", "ME", "382"), - CountryInfo("Montserrat", "MS", "1664"), - CountryInfo("Morocco", "MA", "212"), - CountryInfo("Mozambique", "MZ", "258"), - CountryInfo("Myanmar", "MM", "95"), - CountryInfo("Namibia", "NA", "264"), - CountryInfo("Nauru", "NR", "674"), - CountryInfo("Nepal", "NP", "977"), - CountryInfo("Netherlands", "NL", "31"), - CountryInfo("New Caledonia", "NC", "687"), - CountryInfo("New Zealand", "NZ", "64"), - CountryInfo("Nicaragua", "NI", "505"), - CountryInfo("Niger", "NE", "227"), - CountryInfo("Nigeria", "NG", "234"), - CountryInfo("Niue", "NU", "683"), - CountryInfo("Norfolk Island", "NF", "672"), - CountryInfo("North Korea", "KP", "850"), - CountryInfo("Northern Mariana Islands", "MP", "1670"), - CountryInfo("Norway", "NO", "47"), - CountryInfo("Oman", "OM", "968"), - CountryInfo("Pakistan", "PK", "92"), - CountryInfo("Palau", "PW", "680"), - CountryInfo("Palestine", "PS", "970"), - CountryInfo("Panama", "PA", "507"), - CountryInfo("Papua New Guinea", "PG", "675"), - CountryInfo("Paraguay", "PY", "595"), - CountryInfo("Peru", "PE", "51"), - CountryInfo("Philippines", "PH", "63"), - CountryInfo("Poland", "PL", "48"), - CountryInfo("Portugal", "PT", "351"), - CountryInfo("Puerto Rico", "PR", "1"), - CountryInfo("Qatar", "QA", "974"), - CountryInfo("Romania", "RO", "40"), - CountryInfo("Russian Federation", "RU", "7"), - CountryInfo("Rwanda", "RW", "250"), - CountryInfo("Réunion", "RE", "262"), - CountryInfo("Saint Helena", "SH", "247"), - CountryInfo("Saint Helena", "SH2", "290"), - CountryInfo("Saint Kitts & Nevis", "KN", "1869"), - CountryInfo("Saint Lucia", "LC", "1758"), - CountryInfo("Saint Pierre & Miquelon", "PM", "508"), - CountryInfo("Saint Vincent & the Grenadines", "VC", "1784"), - CountryInfo("Samoa", "WS", "685"), - CountryInfo("San Marino", "SM", "378"), - CountryInfo("Saudi Arabia", "SA", "966"), - CountryInfo("Senegal", "SN", "221"), - CountryInfo("Serbia", "RS", "381"), - CountryInfo("Seychelles", "SC", "248"), - CountryInfo("Sierra Leone", "SL", "232"), - CountryInfo("Singapore", "SG", "65"), - CountryInfo("Sint Maarten", "SX", "1721"), - CountryInfo("Slovakia", "SK", "421"), - CountryInfo("Slovenia", "SI", "386"), - CountryInfo("Solomon Islands", "SB", "677"), - CountryInfo("Somalia", "SO", "252"), - CountryInfo("South Africa", "ZA", "27"), - CountryInfo("South Korea", "KR", "82"), - CountryInfo("South Sudan", "SS", "211"), - CountryInfo("Spain", "ES", "34"), - CountryInfo("Sri Lanka", "LK", "94"), - CountryInfo("Sudan", "SD", "249"), - CountryInfo("Suriname", "SR", "597"), - CountryInfo("Swaziland", "SZ", "268"), - CountryInfo("Sweden", "SE", "46"), - CountryInfo("Switzerland", "CH", "41"), - CountryInfo("Syrian Arab Republic", "SY", "963"), - CountryInfo("São Tomé & Príncipe", "ST", "239"), - CountryInfo("Taiwan", "TW", "886"), - CountryInfo("Tajikistan", "TJ", "992"), - CountryInfo("Tanzania", "TZ", "255"), - CountryInfo("Thailand", "TH", "66"), - CountryInfo("Timor-Leste", "TL", "670"), - CountryInfo("Togo", "TG", "228"), - CountryInfo("Tokelau", "TK", "690"), - CountryInfo("Tonga", "TO", "676"), - CountryInfo("Trinidad & Tobago", "TT", "1868"), - CountryInfo("Tunisia", "TN", "216"), - CountryInfo("Turkey", "TR", "90"), - CountryInfo("Turkmenistan", "TM", "993"), - CountryInfo("Turks & Caicos Islands", "TC", "1649"), - CountryInfo("Tuvalu", "TV", "688"), - CountryInfo("US Virgin Islands", "VI", "1340"), - CountryInfo("USA", "US", "1"), - CountryInfo("Uganda", "UG", "256"), - CountryInfo("Ukraine", "UA", "380"), - CountryInfo("United Arab Emirates", "AE", "971"), - CountryInfo("United Kingdom", "GB", "44"), - CountryInfo("Uruguay", "UY", "598"), - CountryInfo("Uzbekistan", "UZ", "998"), - CountryInfo("Vanuatu", "VU", "678"), - CountryInfo("Venezuela", "VE", "58"), - CountryInfo("Vietnam", "VN", "84"), - CountryInfo("Wallis & Futuna", "WF", "681"), - CountryInfo("Yemen", "YE", "967"), - CountryInfo("Zambia", "ZM", "260"), - CountryInfo("Zimbabwe", "ZW", "263"), -}; - -typedef QHash CountriesByCode; -typedef QHash CountriesByISO2; - -const CountriesByCode &countriesByCode(); -const CountriesByISO2 &countriesByISO2(); diff --git a/Telegram/SourceFiles/data/data_countries.cpp b/Telegram/SourceFiles/data/data_countries.cpp new file mode 100644 index 000000000..ea03bfe20 --- /dev/null +++ b/Telegram/SourceFiles/data/data_countries.cpp @@ -0,0 +1,301 @@ +/* +This file is part of Telegram Desktop, +the official desktop application for the Telegram messaging service. + +For license and copyright information please follow this link: +https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL +*/ +#include "data/data_countries.h" + +namespace Data { +namespace { + +const std::array List = { { + { "Afghanistan", "AF", "93" }, + { "Albania", "AL", "355" }, + { "Algeria", "DZ", "213" }, + { "American Samoa", "AS", "1684" }, + { "Andorra", "AD", "376" }, + { "Angola", "AO", "244" }, + { "Anguilla", "AI", "1264" }, + { "Antigua & Barbuda", "AG", "1268" }, + { "Argentina", "AR", "54" }, + { "Armenia", "AM", "374" }, + { "Aruba", "AW", "297" }, + { "Australia", "AU", "61" }, + { "Austria", "AT", "43" }, + { "Azerbaijan", "AZ", "994" }, + { "Bahamas", "BS", "1242" }, + { "Bahrain", "BH", "973" }, + { "Bangladesh", "BD", "880" }, + { "Barbados", "BB", "1246" }, + { "Belarus", "BY", "375" }, + { "Belgium", "BE", "32" }, + { "Belize", "BZ", "501" }, + { "Benin", "BJ", "229" }, + { "Bermuda", "BM", "1441" }, + { "Bhutan", "BT", "975" }, + { "Bolivia", "BO", "591" }, + { "Bonaire, Sint Eustatius & Saba", "BQ", "599" }, + { "Bosnia & Herzegovina", "BA", "387" }, + { "Botswana", "BW", "267" }, + { "Brazil", "BR", "55" }, + { "British Virgin Islands", "VG", "1284" }, + { "Brunei Darussalam", "BN", "673" }, + { "Bulgaria", "BG", "359" }, + { "Burkina Faso", "BF", "226" }, + { "Burundi", "BI", "257" }, + { "Cambodia", "KH", "855" }, + { "Cameroon", "CM", "237" }, + { "Canada", "CA", "1" }, + { "Cape Verde", "CV", "238" }, + { "Cayman Islands", "KY", "1345" }, + { "Central African Republic", "CF", "236" }, + { "Chad", "TD", "235" }, + { "Chile", "CL", "56" }, + { "China", "CN", "86" }, + { "Colombia", "CO", "57" }, + { "Comoros", "KM", "269" }, + { "Congo", "CG", "242" }, + { "Congo, Democratic Republic", "CD", "243" }, + { "Cook Islands", "CK", "682" }, + { "Costa Rica", "CR", "506" }, + { "Croatia", "HR", "385" }, + { "Cuba", "CU", "53" }, + { "Curaçao", "CW", "599" }, + { "Cyprus", "CY", "357" }, + { "Czech Republic", "CZ", "420" }, + { "Côte d`Ivoire", "CI", "225" }, + { "Denmark", "DK", "45" }, + { "Diego Garcia", "IO", "246" }, + { "Djibouti", "DJ", "253" }, + { "Dominica", "DM", "1767" }, + { "Dominican Republic", "DO", "1" }, + { "Ecuador", "EC", "593" }, + { "Egypt", "EG", "20" }, + { "El Salvador", "SV", "503" }, + { "Equatorial Guinea", "GQ", "240" }, + { "Eritrea", "ER", "291" }, + { "Estonia", "EE", "372" }, + { "Ethiopia", "ET", "251" }, + { "Falkland Islands", "FK", "500" }, + { "Faroe Islands", "FO", "298" }, + { "Fiji", "FJ", "679" }, + { "Finland", "FI", "358" }, + { "France", "FR", "33" }, + { "French Guiana", "GF", "594" }, + { "French Polynesia", "PF", "689" }, + { "Gabon", "GA", "241" }, + { "Gambia", "GM", "220" }, + { "Georgia", "GE", "995" }, + { "Germany", "DE", "49" }, + { "Ghana", "GH", "233" }, + { "Gibraltar", "GI", "350" }, + { "Greece", "GR", "30" }, + { "Greenland", "GL", "299" }, + { "Grenada", "GD", "1473" }, + { "Guadeloupe", "GP", "590" }, + { "Guam", "GU", "1671" }, + { "Guatemala", "GT", "502" }, + { "Guinea", "GN", "224" }, + { "Guinea-Bissau", "GW", "245" }, + { "Guyana", "GY", "592" }, + { "Haiti", "HT", "509" }, + { "Honduras", "HN", "504" }, + { "Hong Kong", "HK", "852" }, + { "Hungary", "HU", "36" }, + { "Iceland", "IS", "354" }, + { "India", "IN", "91" }, + { "Indonesia", "ID", "62" }, + { "Iran", "IR", "98" }, + { "Iraq", "IQ", "964" }, + { "Ireland", "IE", "353" }, + { "Israel", "IL", "972" }, + { "Italy", "IT", "39" }, + { "Jamaica", "JM", "1876" }, + { "Japan", "JP", "81" }, + { "Jordan", "JO", "962" }, + { "Kazakhstan", "KZ", "7" }, + { "Kenya", "KE", "254" }, + { "Kiribati", "KI", "686" }, + { "Kuwait", "KW", "965" }, + { "Kyrgyzstan", "KG", "996" }, + { "Laos", "LA", "856" }, + { "Latvia", "LV", "371" }, + { "Lebanon", "LB", "961" }, + { "Lesotho", "LS", "266" }, + { "Liberia", "LR", "231" }, + { "Libya", "LY", "218" }, + { "Liechtenstein", "LI", "423" }, + { "Lithuania", "LT", "370" }, + { "Luxembourg", "LU", "352" }, + { "Macau", "MO", "853" }, + { "Macedonia", "MK", "389" }, + { "Madagascar", "MG", "261" }, + { "Malawi", "MW", "265" }, + { "Malaysia", "MY", "60" }, + { "Maldives", "MV", "960" }, + { "Mali", "ML", "223" }, + { "Malta", "MT", "356" }, + { "Marshall Islands", "MH", "692" }, + { "Martinique", "MQ", "596" }, + { "Mauritania", "MR", "222" }, + { "Mauritius", "MU", "230" }, + { "Mexico", "MX", "52" }, + { "Micronesia", "FM", "691" }, + { "Moldova", "MD", "373" }, + { "Monaco", "MC", "377" }, + { "Mongolia", "MN", "976" }, + { "Montenegro", "ME", "382" }, + { "Montserrat", "MS", "1664" }, + { "Morocco", "MA", "212" }, + { "Mozambique", "MZ", "258" }, + { "Myanmar", "MM", "95" }, + { "Namibia", "NA", "264" }, + { "Nauru", "NR", "674" }, + { "Nepal", "NP", "977" }, + { "Netherlands", "NL", "31" }, + { "New Caledonia", "NC", "687" }, + { "New Zealand", "NZ", "64" }, + { "Nicaragua", "NI", "505" }, + { "Niger", "NE", "227" }, + { "Nigeria", "NG", "234" }, + { "Niue", "NU", "683" }, + { "Norfolk Island", "NF", "672" }, + { "North Korea", "KP", "850" }, + { "Northern Mariana Islands", "MP", "1670" }, + { "Norway", "NO", "47" }, + { "Oman", "OM", "968" }, + { "Pakistan", "PK", "92" }, + { "Palau", "PW", "680" }, + { "Palestine", "PS", "970" }, + { "Panama", "PA", "507" }, + { "Papua New Guinea", "PG", "675" }, + { "Paraguay", "PY", "595" }, + { "Peru", "PE", "51" }, + { "Philippines", "PH", "63" }, + { "Poland", "PL", "48" }, + { "Portugal", "PT", "351" }, + { "Puerto Rico", "PR", "1" }, + { "Qatar", "QA", "974" }, + { "Romania", "RO", "40" }, + { "Russian Federation", "RU", "7" }, + { "Rwanda", "RW", "250" }, + { "Réunion", "RE", "262" }, + { "Saint Helena", "SH", "247" }, + { "Saint Helena", "SH2", "290" }, + { "Saint Kitts & Nevis", "KN", "1869" }, + { "Saint Lucia", "LC", "1758" }, + { "Saint Pierre & Miquelon", "PM", "508" }, + { "Saint Vincent & the Grenadines", "VC", "1784" }, + { "Samoa", "WS", "685" }, + { "San Marino", "SM", "378" }, + { "Saudi Arabia", "SA", "966" }, + { "Senegal", "SN", "221" }, + { "Serbia", "RS", "381" }, + { "Seychelles", "SC", "248" }, + { "Sierra Leone", "SL", "232" }, + { "Singapore", "SG", "65" }, + { "Sint Maarten", "SX", "1721" }, + { "Slovakia", "SK", "421" }, + { "Slovenia", "SI", "386" }, + { "Solomon Islands", "SB", "677" }, + { "Somalia", "SO", "252" }, + { "South Africa", "ZA", "27" }, + { "South Korea", "KR", "82" }, + { "South Sudan", "SS", "211" }, + { "Spain", "ES", "34" }, + { "Sri Lanka", "LK", "94" }, + { "Sudan", "SD", "249" }, + { "Suriname", "SR", "597" }, + { "Swaziland", "SZ", "268" }, + { "Sweden", "SE", "46" }, + { "Switzerland", "CH", "41" }, + { "Syrian Arab Republic", "SY", "963" }, + { "São Tomé & Príncipe", "ST", "239" }, + { "Taiwan", "TW", "886" }, + { "Tajikistan", "TJ", "992" }, + { "Tanzania", "TZ", "255" }, + { "Thailand", "TH", "66" }, + { "Timor-Leste", "TL", "670" }, + { "Togo", "TG", "228" }, + { "Tokelau", "TK", "690" }, + { "Tonga", "TO", "676" }, + { "Trinidad & Tobago", "TT", "1868" }, + { "Tunisia", "TN", "216" }, + { "Turkey", "TR", "90" }, + { "Turkmenistan", "TM", "993" }, + { "Turks & Caicos Islands", "TC", "1649" }, + { "Tuvalu", "TV", "688" }, + { "US Virgin Islands", "VI", "1340" }, + { "USA", "US", "1", "United States of America" }, + { "Uganda", "UG", "256" }, + { "Ukraine", "UA", "380" }, + { "United Arab Emirates", "AE", "971" }, + { "United Kingdom", "GB", "44" }, + { "Uruguay", "UY", "598" }, + { "Uzbekistan", "UZ", "998" }, + { "Vanuatu", "VU", "678" }, + { "Venezuela", "VE", "58" }, + { "Vietnam", "VN", "84" }, + { "Wallis & Futuna", "WF", "681" }, + { "Yemen", "YE", "967" }, + { "Zambia", "ZM", "260" }, + { "Zimbabwe", "ZW", "263" }, +} }; + +QHash ByCode; +QHash ByISO2; + +} // namespace + +const std::array &Countries() { + return List; +} + +const QHash &CountriesByCode() { + if (ByCode.isEmpty()) { + ByCode.reserve(List.size()); + for (const auto &entry : List) { + ByCode.insert(entry.code, &entry); + } + } + return ByCode; +} + +const QHash &CountriesByISO2() { + if (ByISO2.isEmpty()) { + ByISO2.reserve(List.size()); + for (const auto &entry : List) { + ByISO2.insert(entry.iso2, &entry); + } + } + return ByISO2; +} + +QString ValidPhoneCode(QString fullCode) { + const auto &byCode = CountriesByCode(); + while (fullCode.length()) { + const auto i = byCode.constFind(fullCode); + if (i != byCode.cend()) { + return (*i)->code; + } + fullCode.chop(1); + } + return QString(); +} + +QString CountryNameByISO2(const QString &iso) { + const auto &byISO2 = CountriesByISO2(); + const auto i = byISO2.constFind(iso); + return (i != byISO2.cend()) ? QString::fromUtf8((*i)->name) : QString(); +} + +QString CountryISO2ByPhone(const QString &phone) { + const auto &byCode = Data::CountriesByCode(); + const auto code = Data::ValidPhoneCode(phone); + const auto i = byCode.find(code); + return (i != byCode.cend()) ? QString::fromUtf8((*i)->iso2) : QString(); +} + +} // namespace Data diff --git a/Telegram/SourceFiles/data/data_countries.h b/Telegram/SourceFiles/data/data_countries.h new file mode 100644 index 000000000..ac50ce8bb --- /dev/null +++ b/Telegram/SourceFiles/data/data_countries.h @@ -0,0 +1,29 @@ +/* +This file is part of Telegram Desktop, +the official desktop application for the Telegram messaging service. + +For license and copyright information please follow this link: +https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL +*/ + +#pragma once + +namespace Data { + +struct CountryInfo { + const char *name = nullptr; + const char *iso2 = nullptr; + const char *code = nullptr; + const char *alternativeName = nullptr; +}; + +[[nodiscard]] const std::array &Countries(); + +[[nodiscard]] const QHash &CountriesByCode(); +[[nodiscard]] const QHash &CountriesByISO2(); + +[[nodiscard]] QString ValidPhoneCode(QString fullCode); +[[nodiscard]] QString CountryNameByISO2(const QString &iso); +[[nodiscard]] QString CountryISO2ByPhone(const QString &phone); + +} // namespace Data diff --git a/Telegram/SourceFiles/passport/passport_panel_controller.cpp b/Telegram/SourceFiles/passport/passport_panel_controller.cpp index 9f6e112c4..5c612adf3 100644 --- a/Telegram/SourceFiles/passport/passport_panel_controller.cpp +++ b/Telegram/SourceFiles/passport/passport_panel_controller.cpp @@ -20,6 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/rp_widget.h" #include "ui/countryinput.h" #include "core/update_checker.h" +#include "data/data_countries.h" #include "layout.h" #include "styles/style_boxes.h" @@ -114,7 +115,7 @@ EditDocumentScheme GetDocumentScheme( using ValueClass = Scheme::ValueClass; const auto DontFormat = nullptr; const auto CountryFormat = [](const QString &value) { - const auto result = CountrySelectBox::NameByISO(value); + const auto result = Data::CountryNameByISO2(value); return result.isEmpty() ? value : result; }; const auto GenderFormat = [](const QString &value) { @@ -313,7 +314,7 @@ EditDocumentScheme GetDocumentScheme( if (!language.isEmpty()) { return tr::lng_passport_native_name_language_about(tr::now); } - const auto name = CountrySelectBox::NameByISO(countryCode); + const auto name = Data::CountryNameByISO2(countryCode); Assert(!name.isEmpty()); return tr::lng_passport_native_name_about( tr::now, diff --git a/Telegram/SourceFiles/passport/passport_panel_details_row.cpp b/Telegram/SourceFiles/passport/passport_panel_details_row.cpp index 2d23109c5..f3f2d6b78 100644 --- a/Telegram/SourceFiles/passport/passport_panel_details_row.cpp +++ b/Telegram/SourceFiles/passport/passport_panel_details_row.cpp @@ -18,6 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/countryinput.h" #include "auth_session.h" #include "data/data_user.h" +#include "data/data_countries.h" #include "styles/style_boxes.h" #include "styles/style_passport.h" @@ -301,7 +302,7 @@ void AbstractTextRow::finishInnerAnimating() { } QString CountryString(const QString &code) { - const auto name = CountrySelectBox::NameByISO(code); + const auto name = Data::CountryNameByISO2(code); return name.isEmpty() ? tr::lng_passport_country_choose(tr::now) : name; } @@ -378,8 +379,8 @@ void CountryRow::errorAnimationCallback() { void CountryRow::chooseCountry() { const auto top = _value.current(); - const auto name = CountrySelectBox::NameByISO(top); - const auto isoByPhone = CountrySelectBox::ISOByPhone( + const auto name = Data::CountryNameByISO2(top); + const auto isoByPhone = Data::CountryISO2ByPhone( Auth().user()->phone()); const auto box = _controller->show(Box(!name.isEmpty() ? top diff --git a/Telegram/SourceFiles/ui/countryinput.cpp b/Telegram/SourceFiles/ui/countryinput.cpp index b2c440f57..96c5ce85f 100644 --- a/Telegram/SourceFiles/ui/countryinput.cpp +++ b/Telegram/SourceFiles/ui/countryinput.cpp @@ -11,74 +11,19 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/scroll_area.h" #include "ui/widgets/multi_select.h" #include "ui/effects/ripple_animation.h" -#include "countries.h" +#include "data/data_countries.h" #include "styles/style_boxes.h" #include "styles/style_intro.h" namespace { - typedef QList CountriesFiltered; - typedef QVector CountriesIds; - typedef QHash CountriesByLetter; - typedef QVector CountryNames; - typedef QVector CountriesNames; - - CountriesByCode _countriesByCode; - CountriesByISO2 _countriesByISO2; - CountriesFiltered countriesFiltered, countriesAll, *countriesNow = &countriesAll; - CountriesByLetter countriesByLetter; - CountriesNames countriesNames; - - QString lastValidISO; - int countriesCount = sizeof(countries) / sizeof(countries[0]); - - void initCountries() { - if (!_countriesByCode.isEmpty()) return; - - _countriesByCode.reserve(countriesCount); - _countriesByISO2.reserve(countriesCount); - for (int i = 0; i < countriesCount; ++i) { - const CountryInfo *info(countries + i); - _countriesByCode.insert(info->code, info); - CountriesByISO2::const_iterator already = _countriesByISO2.constFind(info->iso2); - if (already != _countriesByISO2.cend()) { - QString badISO = info->iso2; - (void)badISO; - } - _countriesByISO2.insert(info->iso2, info); - } - countriesAll.reserve(countriesCount); - countriesFiltered.reserve(countriesCount); - countriesNames.resize(countriesCount); - } +QString LastValidISO; } // namespace -const CountriesByCode &countriesByCode() { - initCountries(); - return _countriesByCode; -} - -const CountriesByISO2 &countriesByISO2() { - initCountries(); - return _countriesByISO2; -} - -QString findValidCode(QString fullCode) { - while (fullCode.length()) { - CountriesByCode::const_iterator i = _countriesByCode.constFind(fullCode); - if (i != _countriesByCode.cend()) { - return (*i)->code; - } - fullCode = fullCode.mid(0, fullCode.length() - 1); - } - return ""; -} - CountryInput::CountryInput(QWidget *parent, const style::InputField &st) : TWidget(parent) , _st(st) , _text(tr::lng_country_code(tr::now)) { - initCountries(); resize(_st.width, _st.heightMin); auto availableWidth = width() - _st.textMargins.left() - _st.textMargins.right() - _st.placeholderMargins.left() - _st.placeholderMargins.right() - 1; @@ -163,10 +108,11 @@ void CountryInput::onChooseCode(const QString &code) { Ui::hideLayer(); _chosenIso = QString(); if (code.length()) { - CountriesByCode::const_iterator i = _countriesByCode.constFind(code); - if (i != _countriesByCode.cend()) { - const CountryInfo *info = *i; - _chosenIso = lastValidISO = info->iso2; + const auto &byCode = Data::CountriesByCode(); + const auto i = byCode.constFind(code); + if (i != byCode.cend()) { + const auto info = *i; + _chosenIso = LastValidISO = info->iso2; setText(QString::fromUtf8(info->name)); } else { setText(tr::lng_bad_country_code(tr::now)); @@ -180,12 +126,13 @@ void CountryInput::onChooseCode(const QString &code) { bool CountryInput::onChooseCountry(const QString &iso) { Ui::hideLayer(); - CountriesByISO2::const_iterator i = _countriesByISO2.constFind(iso); - const CountryInfo *info = (i == _countriesByISO2.cend()) ? 0 : (*i); + const auto &byISO2 = Data::CountriesByISO2(); + const auto i = byISO2.constFind(iso); + const auto info = (i != byISO2.cend()) ? (*i) : nullptr; _chosenIso = QString(); if (info) { - _chosenIso = lastValidISO = info->iso2; + _chosenIso = LastValidISO = info->iso2; setText(QString::fromUtf8(info->name)); emit codeChanged(info->code); update(); @@ -205,28 +152,7 @@ CountrySelectBox::CountrySelectBox(QWidget*) CountrySelectBox::CountrySelectBox(QWidget*, const QString &iso, Type type) : _type(type) , _select(this, st::contactsMultiSelect, tr::lng_country_ph()) { - lastValidISO = iso; -} - -QString CountrySelectBox::NameByISO(const QString &iso) { - if (_countriesByISO2.isEmpty()) { - initCountries(); - } - const auto i = _countriesByISO2.constFind(iso); - return (i == _countriesByISO2.cend()) - ? QString() - : QString::fromUtf8((*i)->name); -} - -QString CountrySelectBox::ISOByPhone(const QString &phone) { - if (_countriesByCode.isEmpty()) { - initCountries(); - } - const auto code = findValidCode(phone); - const auto i = _countriesByCode.find(code); - return (i == _countriesByCode.cend()) - ? QString() - : QString::fromUtf8((*i)->iso2); + LastValidISO = iso; } void CountrySelectBox::prepare() { @@ -295,45 +221,47 @@ CountrySelectBox::Inner::Inner(QWidget *parent, Type type) , _rowHeight(st::countryRowHeight) { setAttribute(Qt::WA_OpaquePaintEvent); - if (countriesNames.isEmpty()) { - initCountries(); + const auto &byISO2 = Data::CountriesByISO2(); + + _list.reserve(byISO2.size()); + _namesList.reserve(byISO2.size()); + + const auto l = byISO2.constFind(LastValidISO); + const auto lastValid = (l != byISO2.cend()) ? (*l) : nullptr; + if (lastValid) { + _list.emplace_back(lastValid); } - - CountriesByISO2::const_iterator l = _countriesByISO2.constFind(lastValidISO); - bool seenLastValid = false; - int already = countriesAll.size(); - - countriesByLetter.clear(); - const CountryInfo *lastValid = (l == _countriesByISO2.cend()) ? 0 : (*l); - for (int i = 0; i < countriesCount; ++i) { - const CountryInfo *ins = lastValid ? (i ? (countries + i - (seenLastValid ? 0 : 1)) : lastValid) : (countries + i); - if (lastValid && i && ins == lastValid) { - seenLastValid = true; - ++ins; + for (const auto &entry : Data::Countries()) { + if (&entry != lastValid) { + _list.emplace_back(&entry); } - if (already > i) { - countriesAll[i] = ins; - } else { - countriesAll.push_back(ins); - } - - auto namesList = QString::fromUtf8(ins->name).toLower().split(QRegularExpression("[\\s\\-]"), QString::SkipEmptyParts); - auto &names = countriesNames[i]; - int l = namesList.size(); - names.resize(0); - names.reserve(l); - for (int j = 0, l = namesList.size(); j < l; ++j) { - auto name = namesList[j].trimmed(); - if (!name.length()) continue; - - auto ch = name[0]; - auto &v = countriesByLetter[ch]; - if (v.isEmpty() || v.back() != i) { - v.push_back(i); + } + auto index = 0; + for (const auto info : _list) { + auto full = QString::fromUtf8(info->name) + + ' ' + + (info->alternativeName + ? QString::fromUtf8(info->alternativeName) + : QString()); + const auto namesList = std::move(full).toLower().split( + QRegularExpression("[\\s\\-]"), + QString::SkipEmptyParts); + auto &names = _namesList.emplace_back(); + names.reserve(namesList.size()); + for (const auto &name : namesList) { + const auto part = name.trimmed(); + if (part.isEmpty()) { + continue; } - names.push_back(name); + const auto ch = part[0]; + auto &byLetter = _byLetter[ch]; + if (byLetter.empty() || byLetter.back() != index) { + byLetter.push_back(index); + } + names.push_back(part); } + ++index; } _filter = qsl("a"); @@ -345,51 +273,52 @@ void CountrySelectBox::Inner::paintEvent(QPaintEvent *e) { QRect r(e->rect()); p.setClipRect(r); - int l = countriesNow->size(); - if (l) { - if (r.intersects(QRect(0, 0, width(), st::countriesSkip))) { - p.fillRect(r.intersected(QRect(0, 0, width(), st::countriesSkip)), st::countryRowBg); - } - int32 from = floorclamp(r.y() - st::countriesSkip, _rowHeight, 0, l); - int32 to = ceilclamp(r.y() + r.height() - st::countriesSkip, _rowHeight, 0, l); - for (int32 i = from; i < to; ++i) { - auto selected = (i == (_pressed >= 0 ? _pressed : _selected)); - auto y = st::countriesSkip + i * _rowHeight; - - p.fillRect(0, y, width(), _rowHeight, selected ? st::countryRowBgOver : st::countryRowBg); - if (_ripples.size() > i && _ripples[i]) { - _ripples[i]->paint(p, 0, y, width()); - if (_ripples[i]->empty()) { - _ripples[i].reset(); - } - } - - auto code = QString("+") + (*countriesNow)[i]->code; - auto codeWidth = st::countryRowCodeFont->width(code); - - auto name = QString::fromUtf8((*countriesNow)[i]->name); - auto nameWidth = st::countryRowNameFont->width(name); - auto availWidth = width() - st::countryRowPadding.left() - st::countryRowPadding.right() - codeWidth - st::boxLayerScroll.width; - if (nameWidth > availWidth) { - name = st::countryRowNameFont->elided(name, availWidth); - nameWidth = st::countryRowNameFont->width(name); - } - - p.setFont(st::countryRowNameFont); - p.setPen(st::countryRowNameFg); - p.drawTextLeft(st::countryRowPadding.left(), y + st::countryRowPadding.top(), width(), name); - - if (_type == Type::Phones) { - p.setFont(st::countryRowCodeFont); - p.setPen(selected ? st::countryRowCodeFgOver : st::countryRowCodeFg); - p.drawTextLeft(st::countryRowPadding.left() + nameWidth + st::countryRowPadding.right(), y + st::countryRowPadding.top(), width(), code); - } - } - } else { + const auto &list = current(); + if (list.empty()) { p.fillRect(r, st::boxBg); p.setFont(st::noContactsFont); p.setPen(st::noContactsColor); p.drawText(QRect(0, 0, width(), st::noContactsHeight), tr::lng_country_none(tr::now), style::al_center); + return; + } + const auto l = list.size(); + if (r.intersects(QRect(0, 0, width(), st::countriesSkip))) { + p.fillRect(r.intersected(QRect(0, 0, width(), st::countriesSkip)), st::countryRowBg); + } + int32 from = floorclamp(r.y() - st::countriesSkip, _rowHeight, 0, l); + int32 to = ceilclamp(r.y() + r.height() - st::countriesSkip, _rowHeight, 0, l); + for (int32 i = from; i < to; ++i) { + auto selected = (i == (_pressed >= 0 ? _pressed : _selected)); + auto y = st::countriesSkip + i * _rowHeight; + + p.fillRect(0, y, width(), _rowHeight, selected ? st::countryRowBgOver : st::countryRowBg); + if (_ripples.size() > i && _ripples[i]) { + _ripples[i]->paint(p, 0, y, width()); + if (_ripples[i]->empty()) { + _ripples[i].reset(); + } + } + + auto code = QString("+") + list[i]->code; + auto codeWidth = st::countryRowCodeFont->width(code); + + auto name = QString::fromUtf8(list[i]->name); + auto nameWidth = st::countryRowNameFont->width(name); + auto availWidth = width() - st::countryRowPadding.left() - st::countryRowPadding.right() - codeWidth - st::boxLayerScroll.width; + if (nameWidth > availWidth) { + name = st::countryRowNameFont->elided(name, availWidth); + nameWidth = st::countryRowNameFont->width(name); + } + + p.setFont(st::countryRowNameFont); + p.setPen(st::countryRowNameFg); + p.drawTextLeft(st::countryRowPadding.left(), y + st::countryRowPadding.top(), width(), name); + + if (_type == Type::Phones) { + p.setFont(st::countryRowCodeFont); + p.setPen(selected ? st::countryRowCodeFgOver : st::countryRowCodeFg); + p.drawTextLeft(st::countryRowPadding.left() + nameWidth + st::countryRowPadding.right(), y + st::countryRowPadding.top(), width(), code); + } } } @@ -416,7 +345,8 @@ void CountrySelectBox::Inner::mousePressEvent(QMouseEvent *e) { updateSelected(e->pos()); setPressed(_selected); - if (_pressed >= 0 && _pressed < countriesNow->size()) { + const auto &list = current(); + if (_pressed >= 0 && _pressed < list.size()) { if (_ripples.size() <= _pressed) { _ripples.reserve(_pressed + 1); while (_ripples.size() <= _pressed) { @@ -445,55 +375,54 @@ void CountrySelectBox::Inner::mouseReleaseEvent(QMouseEvent *e) { } void CountrySelectBox::Inner::updateFilter(QString filter) { - auto words = TextUtilities::PrepareSearchWords(filter); + const auto words = TextUtilities::PrepareSearchWords(filter); filter = words.isEmpty() ? QString() : words.join(' '); - if (_filter != filter) { - _filter = filter; - - if (_filter.isEmpty()) { - countriesNow = &countriesAll; - } else { - QChar first = _filter[0].toLower(); - CountriesIds &ids(countriesByLetter[first]); - - QStringList::const_iterator fb = words.cbegin(), fe = words.cend(), fi; - - countriesFiltered.clear(); - for (CountriesIds::const_iterator i = ids.cbegin(), e = ids.cend(); i != e; ++i) { - int index = *i; - CountryNames &names(countriesNames[index]); - CountryNames::const_iterator nb = names.cbegin(), ne = names.cend(), ni; - for (fi = fb; fi != fe; ++fi) { - QString filterName(*fi); - for (ni = nb; ni != ne; ++ni) { - if (ni->startsWith(*fi)) { - break; - } - } - if (ni == ne) { - break; - } - } - if (fi == fe) { - countriesFiltered.push_back(countriesAll[index]); - } - } - countriesNow = &countriesFiltered; - } - refresh(); - _selected = countriesNow->isEmpty() ? -1 : 0; - update(); + if (_filter == filter) { + return; } + _filter = filter; + + const auto findWord = [&]( + const std::vector &names, + const QString &word) { + for (const auto &name : names) { + if (name.startsWith(word)) { + return true; + } + } + return false; + }; + const auto hasAllWords = [&](const std::vector &names) { + for (const auto &word : words) { + if (!findWord(names, word)) { + return false; + } + } + return true; + }; + if (!_filter.isEmpty()) { + _filtered.clear(); + for (const auto index : _byLetter[_filter[0].toLower()]) { + const auto &names = _namesList[index]; + if (hasAllWords(_namesList[index])) { + _filtered.push_back(_list[index]); + } + } + } + refresh(); + _selected = current().empty() ? -1 : 0; + update(); } void CountrySelectBox::Inner::selectSkip(int32 dir) { _mouseSelection = false; + const auto &list = current(); int cur = (_selected >= 0) ? _selected : -1; cur += dir; if (cur <= 0) { - _selected = countriesNow->isEmpty() ? -1 : 0; - } else if (cur >= countriesNow->size()) { + _selected = list.empty() ? -1 : 0; + } else if (cur >= list.size()) { _selected = -1; } else { _selected = cur; @@ -511,21 +440,15 @@ void CountrySelectBox::Inner::selectSkipPage(int32 h, int32 dir) { } void CountrySelectBox::Inner::chooseCountry() { - QString result; - if (_filter.isEmpty()) { - if (_selected >= 0 && _selected < countriesAll.size()) { - result = countriesAll[_selected]->iso2; - } - } else { - if (_selected >= 0 && _selected < countriesFiltered.size()) { - result = countriesFiltered[_selected]->iso2; - } - } - emit countryChosen(result); + const auto &list = current(); + emit countryChosen((_selected >= 0 && _selected < list.size()) + ? QString(list[_selected]->iso2) + : QString()); } void CountrySelectBox::Inner::refresh() { - resize(width(), countriesNow->length() ? (countriesNow->length() * _rowHeight + st::countriesSkip) : st::noContactsHeight); + const auto &list = current(); + resize(width(), list.empty() ? st::noContactsHeight : (list.size() * _rowHeight + st::countriesSkip)); } void CountrySelectBox::Inner::updateSelected(QPoint localPos) { @@ -533,7 +456,8 @@ void CountrySelectBox::Inner::updateSelected(QPoint localPos) { auto in = parentWidget()->rect().contains(parentWidget()->mapFromGlobal(QCursor::pos())); - auto selected = (in && localPos.y() >= st::countriesSkip && localPos.y() < st::countriesSkip + countriesNow->size() * _rowHeight) ? ((localPos.y() - st::countriesSkip) / _rowHeight) : -1; + const auto &list = current(); + auto selected = (in && localPos.y() >= st::countriesSkip && localPos.y() < st::countriesSkip + list.size() * _rowHeight) ? ((localPos.y() - st::countriesSkip) / _rowHeight) : -1; if (_selected != selected) { updateSelectedRow(); _selected = selected; @@ -541,6 +465,11 @@ void CountrySelectBox::Inner::updateSelected(QPoint localPos) { } } +auto CountrySelectBox::Inner::current() const +-> const std::vector> & { + return _filter.isEmpty() ? _list : _filtered; +} + void CountrySelectBox::Inner::updateSelectedRow() { updateRow(_selected); } diff --git a/Telegram/SourceFiles/ui/countryinput.h b/Telegram/SourceFiles/ui/countryinput.h index abcc93231..33648c0c0 100644 --- a/Telegram/SourceFiles/ui/countryinput.h +++ b/Telegram/SourceFiles/ui/countryinput.h @@ -10,7 +10,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/abstract_box.h" #include "styles/style_widgets.h" -QString findValidCode(QString fullCode); +namespace Data { +struct CountryInfo; +} // namespace Data namespace Ui { class MultiSelect; @@ -64,9 +66,6 @@ public: CountrySelectBox(QWidget*); CountrySelectBox(QWidget*, const QString &iso, Type type); - static QString NameByISO(const QString &iso); - static QString ISOByPhone(const QString &phone); - signals: void countryChosen(const QString &iso); @@ -127,6 +126,7 @@ private: void updateSelectedRow(); void updateRow(int index); void setPressed(int pressed); + const std::vector> ¤t() const; Type _type = Type::Phones; int _rowHeight = 0; @@ -138,4 +138,9 @@ private: std::vector> _ripples; + std::vector> _list; + std::vector> _filtered; + base::flat_map> _byLetter; + std::vector> _namesList; + }; diff --git a/Telegram/SourceFiles/ui/widgets/input_fields.cpp b/Telegram/SourceFiles/ui/widgets/input_fields.cpp index 334009d33..bfaf520ed 100644 --- a/Telegram/SourceFiles/ui/widgets/input_fields.cpp +++ b/Telegram/SourceFiles/ui/widgets/input_fields.cpp @@ -17,6 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "window/themes/window_theme.h" #include "lang/lang_keys.h" #include "data/data_user.h" +#include "data/data_countries.h" // Data::ValidPhoneCode #include "mainwindow.h" #include "numbers.h" #include "auth_session.h" @@ -3968,7 +3969,7 @@ void CountryCodeInput::correctValue( } } if (!addToNumber.isEmpty()) { - auto validCode = findValidCode(newText.mid(1)); + auto validCode = Data::ValidPhoneCode(newText.mid(1)); addToNumber = newText.mid(1 + validCode.length()) + addToNumber; newText = '+' + validCode; } diff --git a/Telegram/gyp/telegram_sources.txt b/Telegram/gyp/telegram_sources.txt index 652dc5590..927071480 100644 --- a/Telegram/gyp/telegram_sources.txt +++ b/Telegram/gyp/telegram_sources.txt @@ -174,6 +174,8 @@ <(src_loc)/data/data_channel.h <(src_loc)/data/data_channel_admins.cpp <(src_loc)/data/data_channel_admins.h +<(src_loc)/data/data_countries.cpp +<(src_loc)/data/data_countries.h <(src_loc)/data/data_document.cpp <(src_loc)/data/data_document.h <(src_loc)/data/data_document_good_thumbnail.cpp @@ -874,7 +876,6 @@ <(src_loc)/auth_session.cpp <(src_loc)/auth_session.h <(src_loc)/config.h -<(src_loc)/countries.h <(src_loc)/facades.cpp <(src_loc)/facades.h <(src_loc)/layout.cpp