23 #include <QStringList>
25 #define COUNTRY_LOCATION_FILE ":/geoip/country-coordinates.csv"
36 static QMap<QString,QString> db;
38 db.insert(
"af", QT_TR_NOOP(
"Afghanistan"));
39 db.insert(
"al", QT_TR_NOOP(
"Albania "));
40 db.insert(
"dz", QT_TR_NOOP(
"Algeria "));
41 db.insert(
"ad", QT_TR_NOOP(
"Andorra"));
42 db.insert(
"ao", QT_TR_NOOP(
"Angola"));
43 db.insert(
"ag", QT_TR_NOOP(
"Antigua & Barbuda"));
44 db.insert(
"ar", QT_TR_NOOP(
"Argentina"));
45 db.insert(
"am", QT_TR_NOOP(
"Armenia"));
46 db.insert(
"au", QT_TR_NOOP(
"Australia"));
47 db.insert(
"at", QT_TR_NOOP(
"Austria "));
48 db.insert(
"az", QT_TR_NOOP(
"Azerbaijan"));
49 db.insert(
"bs", QT_TR_NOOP(
"Bahamas"));
50 db.insert(
"bh", QT_TR_NOOP(
"Bahrain "));
51 db.insert(
"bd", QT_TR_NOOP(
"Bangladesh"));
52 db.insert(
"bb", QT_TR_NOOP(
"Barbados"));
53 db.insert(
"by", QT_TR_NOOP(
"Belarus"));
54 db.insert(
"be", QT_TR_NOOP(
"Belgium"));
55 db.insert(
"bz", QT_TR_NOOP(
"Belize"));
56 db.insert(
"bj", QT_TR_NOOP(
"Benin "));
57 db.insert(
"bt", QT_TR_NOOP(
"Bhutan"));
58 db.insert(
"bo", QT_TR_NOOP(
"Bolivia"));
59 db.insert(
"ba", QT_TR_NOOP(
"Bosnia & Herzegovina"));
60 db.insert(
"bw", QT_TR_NOOP(
"Botswana"));
61 db.insert(
"br", QT_TR_NOOP(
"Brazil"));
62 db.insert(
"bn", QT_TR_NOOP(
"Brunei Darussalam"));
63 db.insert(
"bg", QT_TR_NOOP(
"Bulgaria"));
64 db.insert(
"bf", QT_TR_NOOP(
"Burkina Faso"));
65 db.insert(
"bi", QT_TR_NOOP(
"Burundi"));
66 db.insert(
"kh", QT_TR_NOOP(
"Cambodia"));
67 db.insert(
"cm", QT_TR_NOOP(
"Cameroon"));
68 db.insert(
"ca", QT_TR_NOOP(
"Canada"));
69 db.insert(
"cv", QT_TR_NOOP(
"Cape Verde"));
70 db.insert(
"cf", QT_TR_NOOP(
"Central African Republic"));
71 db.insert(
"td", QT_TR_NOOP(
"Chad"));
72 db.insert(
"cl", QT_TR_NOOP(
"Chile"));
73 db.insert(
"cn", QT_TR_NOOP(
"China"));
74 db.insert(
"co", QT_TR_NOOP(
"Colombia"));
75 db.insert(
"km", QT_TR_NOOP(
"Comoros"));
76 db.insert(
"cd", QT_TR_NOOP(
"Congo, The Democratic Republic of the"));
77 db.insert(
"cg", QT_TR_NOOP(
"Congo"));
78 db.insert(
"cr", QT_TR_NOOP(
"Costa Rica"));
79 db.insert(
"ci", QT_TR_NOOP(
"Cote d’Ivoire"));
80 db.insert(
"hr", QT_TR_NOOP(
"Croatia"));
81 db.insert(
"cu", QT_TR_NOOP(
"Cuba"));
82 db.insert(
"cy", QT_TR_NOOP(
"Cyprus"));
83 db.insert(
"cz", QT_TR_NOOP(
"Czech Republic"));
84 db.insert(
"dk", QT_TR_NOOP(
"Denmark"));
85 db.insert(
"dj", QT_TR_NOOP(
"Djibouti"));
86 db.insert(
"dm", QT_TR_NOOP(
"Dominica"));
87 db.insert(
"do", QT_TR_NOOP(
"Dominican Republic"));
88 db.insert(
"ec", QT_TR_NOOP(
"Ecuador"));
89 db.insert(
"eg", QT_TR_NOOP(
"Egypt"));
90 db.insert(
"sv", QT_TR_NOOP(
"El Salvador"));
91 db.insert(
"gq", QT_TR_NOOP(
"Equatorial Guinea"));
92 db.insert(
"er", QT_TR_NOOP(
"Eritrea"));
93 db.insert(
"ee", QT_TR_NOOP(
"Estonia"));
94 db.insert(
"et", QT_TR_NOOP(
"Ethiopia "));
95 db.insert(
"fj", QT_TR_NOOP(
"Fiji "));
96 db.insert(
"fi", QT_TR_NOOP(
"Finland "));
97 db.insert(
"fr", QT_TR_NOOP(
"France"));
98 db.insert(
"ga", QT_TR_NOOP(
"Gabon"));
99 db.insert(
"gm", QT_TR_NOOP(
"Gambia"));
100 db.insert(
"ge", QT_TR_NOOP(
"Georgia"));
101 db.insert(
"de", QT_TR_NOOP(
"Germany"));
102 db.insert(
"gh", QT_TR_NOOP(
"Ghana"));
103 db.insert(
"gr", QT_TR_NOOP(
"Greece "));
104 db.insert(
"gd", QT_TR_NOOP(
"Grenada"));
105 db.insert(
"gt", QT_TR_NOOP(
"Guatemala"));
106 db.insert(
"gu", QT_TR_NOOP(
"Guam "));
107 db.insert(
"gn", QT_TR_NOOP(
"Guinea"));
108 db.insert(
"gw", QT_TR_NOOP(
"Guinea-Bissau"));
109 db.insert(
"gy", QT_TR_NOOP(
"Guyana"));
110 db.insert(
"hk", QT_TR_NOOP(
"Hong Kong"));
111 db.insert(
"ht", QT_TR_NOOP(
"Haiti"));
112 db.insert(
"hn", QT_TR_NOOP(
"Honduras"));
113 db.insert(
"hu", QT_TR_NOOP(
"Hungary "));
114 db.insert(
"is", QT_TR_NOOP(
"Iceland "));
115 db.insert(
"in", QT_TR_NOOP(
"India "));
116 db.insert(
"id", QT_TR_NOOP(
"Indonesia "));
117 db.insert(
"ir", QT_TR_NOOP(
"Iran "));
118 db.insert(
"iq", QT_TR_NOOP(
"Iraq "));
119 db.insert(
"ie", QT_TR_NOOP(
"Ireland "));
120 db.insert(
"il", QT_TR_NOOP(
"Israel"));
121 db.insert(
"it", QT_TR_NOOP(
"Italy"));
122 db.insert(
"jm", QT_TR_NOOP(
"Jamaica"));
123 db.insert(
"jp", QT_TR_NOOP(
"Japan"));
124 db.insert(
"jo", QT_TR_NOOP(
"Jordan"));
125 db.insert(
"kz", QT_TR_NOOP(
"Kazakhstan"));
126 db.insert(
"ke", QT_TR_NOOP(
"Kenya"));
127 db.insert(
"ki", QT_TR_NOOP(
"Kiribati"));
128 db.insert(
"kp", QT_TR_NOOP(
"Korea, North "));
129 db.insert(
"kr", QT_TR_NOOP(
"Korea, South "));
130 db.insert(
"kw", QT_TR_NOOP(
"Kuwait"));
131 db.insert(
"kg", QT_TR_NOOP(
"Kyrgyzstan"));
132 db.insert(
"la", QT_TR_NOOP(
"Laos"));
133 db.insert(
"lv", QT_TR_NOOP(
"Latvia"));
134 db.insert(
"lb", QT_TR_NOOP(
"Lebanon"));
135 db.insert(
"ls", QT_TR_NOOP(
"Lesotho"));
136 db.insert(
"lr", QT_TR_NOOP(
"Liberia"));
137 db.insert(
"ly", QT_TR_NOOP(
"Libya "));
138 db.insert(
"li", QT_TR_NOOP(
"Liechtenstein"));
139 db.insert(
"lt", QT_TR_NOOP(
"Lithuania"));
140 db.insert(
"lu", QT_TR_NOOP(
"Luxembourg"));
141 db.insert(
"mk", QT_TR_NOOP(
"Macedonia"));
142 db.insert(
"mg", QT_TR_NOOP(
"Madagascar"));
143 db.insert(
"mw", QT_TR_NOOP(
"Malawi"));
144 db.insert(
"my", QT_TR_NOOP(
"Malaysia"));
145 db.insert(
"mv", QT_TR_NOOP(
"Maldives "));
146 db.insert(
"ml", QT_TR_NOOP(
"Mali"));
147 db.insert(
"mt", QT_TR_NOOP(
"Malta"));
148 db.insert(
"mh", QT_TR_NOOP(
"Marshall Islands"));
149 db.insert(
"mr", QT_TR_NOOP(
"Mauritania"));
150 db.insert(
"mu", QT_TR_NOOP(
"Mauritius"));
151 db.insert(
"mx", QT_TR_NOOP(
"Mexico "));
152 db.insert(
"fm", QT_TR_NOOP(
"Micronesia"));
153 db.insert(
"md", QT_TR_NOOP(
"Moldova"));
154 db.insert(
"mc", QT_TR_NOOP(
"Monaco"));
155 db.insert(
"mn", QT_TR_NOOP(
"Mongolia"));
156 db.insert(
"me", QT_TR_NOOP(
"Montenegro"));
157 db.insert(
"ma", QT_TR_NOOP(
"Morocco"));
158 db.insert(
"mz", QT_TR_NOOP(
"Mozambique"));
159 db.insert(
"mm", QT_TR_NOOP(
"Myanmar "));
160 db.insert(
"na", QT_TR_NOOP(
"Namibia"));
161 db.insert(
"nr", QT_TR_NOOP(
"Nauru"));
162 db.insert(
"np", QT_TR_NOOP(
"Nepal"));
163 db.insert(
"nl", QT_TR_NOOP(
"Netherlands"));
164 db.insert(
"nz", QT_TR_NOOP(
"New Zealand"));
165 db.insert(
"ni", QT_TR_NOOP(
"Nicaragua"));
166 db.insert(
"ne", QT_TR_NOOP(
"Niger"));
167 db.insert(
"ng", QT_TR_NOOP(
"Nigeria"));
168 db.insert(
"no", QT_TR_NOOP(
"Norway"));
169 db.insert(
"om", QT_TR_NOOP(
"Oman"));
170 db.insert(
"pk", QT_TR_NOOP(
"Pakistan"));
171 db.insert(
"pw", QT_TR_NOOP(
"Palau"));
172 db.insert(
"ps", QT_TR_NOOP(
"Palestine"));
173 db.insert(
"pa", QT_TR_NOOP(
"Panama"));
174 db.insert(
"pg", QT_TR_NOOP(
"Papua New Guinea"));
175 db.insert(
"py", QT_TR_NOOP(
"Paraguay"));
176 db.insert(
"pe", QT_TR_NOOP(
"Peru"));
177 db.insert(
"ph", QT_TR_NOOP(
"Philippines"));
178 db.insert(
"pl", QT_TR_NOOP(
"Poland"));
179 db.insert(
"pt", QT_TR_NOOP(
"Portugal"));
180 db.insert(
"qa", QT_TR_NOOP(
"Qatar"));
181 db.insert(
"ro", QT_TR_NOOP(
"Romania"));
182 db.insert(
"ru", QT_TR_NOOP(
"Russia"));
183 db.insert(
"rw", QT_TR_NOOP(
"Rwanda"));
184 db.insert(
"kn", QT_TR_NOOP(
"Saint Kitts & Nevis"));
185 db.insert(
"lc", QT_TR_NOOP(
"Saint Lucia"));
186 db.insert(
"vc", QT_TR_NOOP(
"Saint Vincent & the Grenadines"));
187 db.insert(
"ws", QT_TR_NOOP(
"Samoa"));
188 db.insert(
"sm", QT_TR_NOOP(
"San Marino"));
189 db.insert(
"st", QT_TR_NOOP(
"Sao Tome & Principe"));
190 db.insert(
"sa", QT_TR_NOOP(
"Saudi Arabia"));
191 db.insert(
"sn", QT_TR_NOOP(
"Senegal"));
192 db.insert(
"rs", QT_TR_NOOP(
"Serbia"));
193 db.insert(
"sc", QT_TR_NOOP(
"Seychelles"));
194 db.insert(
"sl", QT_TR_NOOP(
"Sierra Leone"));
195 db.insert(
"sg", QT_TR_NOOP(
"Singapore"));
196 db.insert(
"sk", QT_TR_NOOP(
"Slovakia"));
197 db.insert(
"si", QT_TR_NOOP(
"Slovenia"));
198 db.insert(
"sb", QT_TR_NOOP(
"Solomon Islands"));
199 db.insert(
"so", QT_TR_NOOP(
"Somalia"));
200 db.insert(
"za", QT_TR_NOOP(
"South Africa"));
201 db.insert(
"es", QT_TR_NOOP(
"Spain"));
202 db.insert(
"lk", QT_TR_NOOP(
"Sri Lanka"));
203 db.insert(
"sd", QT_TR_NOOP(
"Sudan"));
204 db.insert(
"sr", QT_TR_NOOP(
"Suriname"));
205 db.insert(
"sz", QT_TR_NOOP(
"Swaziland"));
206 db.insert(
"se", QT_TR_NOOP(
"Sweden"));
207 db.insert(
"ch", QT_TR_NOOP(
"Switzerland"));
208 db.insert(
"sy", QT_TR_NOOP(
"Syria"));
209 db.insert(
"tw", QT_TR_NOOP(
"Taiwan "));
210 db.insert(
"tj", QT_TR_NOOP(
"Tajikistan"));
211 db.insert(
"tz", QT_TR_NOOP(
"Tanzania"));
212 db.insert(
"th", QT_TR_NOOP(
"Thailand"));
213 db.insert(
"tl", QT_TR_NOOP(
"Timor-Leste (East Timor)"));
214 db.insert(
"tg", QT_TR_NOOP(
"Togo"));
215 db.insert(
"to", QT_TR_NOOP(
"Tonga"));
216 db.insert(
"tt", QT_TR_NOOP(
"Trinidad & Tobago"));
217 db.insert(
"tn", QT_TR_NOOP(
"Tunisia"));
218 db.insert(
"tr", QT_TR_NOOP(
"Turkey"));
219 db.insert(
"tm", QT_TR_NOOP(
"Turkmenistan"));
220 db.insert(
"tv", QT_TR_NOOP(
"Tuvalu"));
221 db.insert(
"ug", QT_TR_NOOP(
"Uganda"));
222 db.insert(
"ua", QT_TR_NOOP(
"Ukraine"));
223 db.insert(
"ae", QT_TR_NOOP(
"United Arab Emirates"));
224 db.insert(
"gb", QT_TR_NOOP(
"United Kingdom"));
225 db.insert(
"us", QT_TR_NOOP(
"United States"));
226 db.insert(
"uy", QT_TR_NOOP(
"Uruguay"));
227 db.insert(
"uz", QT_TR_NOOP(
"Uzbekistan"));
228 db.insert(
"vu", QT_TR_NOOP(
"Vanuatu"));
229 db.insert(
"va", QT_TR_NOOP(
"Vatican"));
230 db.insert(
"ve", QT_TR_NOOP(
"Venezuela"));
231 db.insert(
"vn", QT_TR_NOOP(
"Vietnam"));
232 db.insert(
"eh", QT_TR_NOOP(
"Western Sahara"));
233 db.insert(
"ye", QT_TR_NOOP(
"Yemen"));
234 db.insert(
"zr", QT_TR_NOOP(
"Zaire"));
235 db.insert(
"zm", QT_TR_NOOP(
"Zambia"));
236 db.insert(
"zw", QT_TR_NOOP(
"Zimbabwe"));
239 QString cc = countryCode.toLower();
241 return tr(db.value(cc).toLocal8Bit().data());
248 static QHash<QString,QPair<float,float> > db;
252 if (! infile.open(QIODevice::ReadOnly | QIODevice::Text))
253 return QPair<float,float>(-180.0, -180.0);
255 while (! infile.atEnd()) {
258 QString line = infile.readLine().trimmed();
260 QStringList parts = line.split(
",");
261 if (parts.size() >= 3) {
262 float latitude = parts[1].toFloat(&ok);
265 float longitude = parts[2].toFloat(&ok);
268 db.insert(parts[0], QPair<float,float>(latitude, longitude));
271 vInfo(
"Loaded %1 country location entries from built-in database.").arg(db.size());
275 QString cc = countryCode.toLower();
278 return QPair<float,float>(-180.0, -180.0);