Some work about adaptive color scheme for Web UI (PR #19901)
http://[316:c51a:62a3:8b9::4]/d4708/qBittorrent/src/branch/adaptive-webui
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
204 lines
10 KiB
204 lines
10 KiB
14 years ago
|
/*
|
||
|
* Bittorrent Client using Qt4 and libtorrent.
|
||
|
* Copyright (C) 2010 Christophe Dumez
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU General Public License
|
||
|
* as published by the Free Software Foundation; either version 2
|
||
|
* of the License, or (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, write to the Free Software
|
||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
|
*
|
||
|
* In addition, as a special exception, the copyright holders give permission to
|
||
|
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||
|
* modified versions of it that use the same license as the "OpenSSL" library),
|
||
|
* and distribute the linked executables. You must obey the GNU General Public
|
||
|
* License in all respects for all of the code used other than "OpenSSL". If you
|
||
|
* modify file(s), you may extend this exception to your version of the file(s),
|
||
|
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||
|
* exception statement from your version.
|
||
|
*
|
||
|
* Contact : chris@qbittorrent.org
|
||
|
*/
|
||
|
|
||
|
#include "geoipmanager.h"
|
||
|
|
||
|
/*
|
||
|
* Bittorrent Client using Qt4 and libtorrent.
|
||
|
* Copyright (C) 2010 Christophe Dumez
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU General Public License
|
||
|
* as published by the Free Software Foundation; either version 2
|
||
|
* of the License, or (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, write to the Free Software
|
||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
|
*
|
||
|
* In addition, as a special exception, the copyright holders give permission to
|
||
|
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||
|
* modified versions of it that use the same license as the "OpenSSL" library),
|
||
|
* and distribute the linked executables. You must obey the GNU General Public
|
||
|
* License in all respects for all of the code used other than "OpenSSL". If you
|
||
|
* modify file(s), you may extend this exception to your version of the file(s),
|
||
|
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||
|
* exception statement from your version.
|
||
|
*
|
||
|
* Contact : chris@qbittorrent.org
|
||
|
*/
|
||
|
|
||
|
#include <QDir>
|
||
|
#include <QFile>
|
||
|
#include <QChar>
|
||
|
|
||
13 years ago
|
#include "fs_utils.h"
|
||
10 years ago
|
#include <libtorrent/session.hpp>
|
||
14 years ago
|
|
||
|
using namespace libtorrent;
|
||
|
|
||
|
QString GeoIPManager::geoipFolder(bool embedded) {
|
||
|
#ifdef WITH_GEOIP_EMBEDDED
|
||
13 years ago
|
if (embedded)
|
||
14 years ago
|
return ":/geoip/";
|
||
11 years ago
|
return fsutils::QDesktopServicesDataLocation()+"geoip"+"/";
|
||
14 years ago
|
#else
|
||
|
Q_UNUSED(embedded);
|
||
13 years ago
|
if (QFile::exists("/usr/local/share/GeoIP/GeoIP.dat"))
|
||
14 years ago
|
return "/usr/local/share/GeoIP/";
|
||
13 years ago
|
if (QFile::exists("/var/lib/GeoIP/GeoIP.dat"))
|
||
14 years ago
|
return "/var/lib/GeoIP/";
|
||
|
return "/usr/share/GeoIP/";
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
QString GeoIPManager::geoipDBpath(bool embedded) {
|
||
|
return geoipFolder(embedded)+"GeoIP.dat";
|
||
|
}
|
||
|
|
||
|
#ifdef WITH_GEOIP_EMBEDDED
|
||
|
void GeoIPManager::exportEmbeddedDb() {
|
||
13 years ago
|
if (!QFile::exists(geoipDBpath(false)) || QFile(geoipDBpath(false)).size() != QFile(geoipDBpath(true)).size()) { // Export is required
|
||
14 years ago
|
qDebug("A local Geoip database update is required, proceeding...");
|
||
|
// Create geoip folder is necessary
|
||
|
QDir gfolder(geoipFolder(false));
|
||
13 years ago
|
if (!gfolder.exists()) {
|
||
|
if (!gfolder.mkpath(geoipFolder(false))) {
|
||
14 years ago
|
std::cerr << "Failed to create geoip folder at " << qPrintable(geoipFolder(false)) << std::endl;
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
// Remove destination files
|
||
13 years ago
|
if (QFile::exists(geoipDBpath(false)))
|
||
13 years ago
|
fsutils::forceRemove(geoipDBpath(false));
|
||
14 years ago
|
// Copy from executable to hard disk
|
||
|
qDebug("%s -> %s", qPrintable(geoipDBpath(true)), qPrintable(geoipDBpath(false)));
|
||
13 years ago
|
if (!QFile::copy(geoipDBpath(true), geoipDBpath(false))) {
|
||
14 years ago
|
std::cerr << "ERROR: Failed to copy geoip.dat from executable to hard disk" << std::endl;
|
||
|
}
|
||
|
qDebug("Local Geoip database was updated");
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
void GeoIPManager::loadDatabase(session *s) {
|
||
|
#ifdef WITH_GEOIP_EMBEDDED
|
||
|
exportEmbeddedDb();
|
||
|
#endif
|
||
13 years ago
|
if (QFile::exists(geoipDBpath(false))) {
|
||
14 years ago
|
qDebug("Loading GeoIP database from %s...", qPrintable(geoipDBpath(false)));
|
||
14 years ago
|
s->load_country_db(geoipDBpath(false).toLocal8Bit().constData());
|
||
14 years ago
|
} else {
|
||
|
qDebug("ERROR: Impossible to find local Geoip Database");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const char country_code[253][3] =
|
||
|
{ "--","AP","EU","AD","AE","AF","AG","AI","AL","AM","AN",
|
||
|
"AO","AQ","AR","AS","AT","AU","AW","AZ","BA","BB",
|
||
|
"BD","BE","BF","BG","BH","BI","BJ","BM","BN","BO",
|
||
|
"BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD",
|
||
|
"CF","CG","CH","CI","CK","CL","CM","CN","CO","CR",
|
||
|
"CU","CV","CX","CY","CZ","DE","DJ","DK","DM","DO",
|
||
|
"DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ",
|
||
|
"FK","FM","FO","FR","FX","GA","GB","GD","GE","GF",
|
||
|
"GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT",
|
||
|
"GU","GW","GY","HK","HM","HN","HR","HT","HU","ID",
|
||
|
"IE","IL","IN","IO","IQ","IR","IS","IT","JM","JO",
|
||
|
"JP","KE","KG","KH","KI","KM","KN","KP","KR","KW",
|
||
|
"KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT",
|
||
|
"LU","LV","LY","MA","MC","MD","MG","MH","MK","ML",
|
||
|
"MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV",
|
||
|
"MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI",
|
||
|
"NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF",
|
||
|
"PG","PH","PK","PL","PM","PN","PR","PS","PT","PW",
|
||
|
"PY","QA","RE","RO","RU","RW","SA","SB","SC","SD",
|
||
|
"SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO",
|
||
|
"SR","ST","SV","SY","SZ","TC","TD","TF","TG","TH",
|
||
|
"TJ","TK","TM","TN","TO","TL","TR","TT","TV","TW",
|
||
|
"TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE",
|
||
|
"VG","VI","VN","VU","WF","WS","YE","YT","RS","ZA",
|
||
|
"ZM","ME","ZW","A1","A2","O1","AX","GG","IM","JE",
|
||
|
"BL","MF"};
|
||
|
|
||
|
static const uint num_countries = (unsigned)(sizeof(country_code)/sizeof(country_code[0]));
|
||
|
|
||
|
const char * country_name[253] =
|
||
|
{"N/A","Asia/Pacific Region","Europe","Andorra","United Arab Emirates","Afghanistan","Antigua and Barbuda","Anguilla","Albania","Armenia","Netherlands Antilles",
|
||
|
"Angola","Antarctica","Argentina","American Samoa","Austria","Australia","Aruba","Azerbaijan","Bosnia and Herzegovina","Barbados",
|
||
|
"Bangladesh","Belgium","Burkina Faso","Bulgaria","Bahrain","Burundi","Benin","Bermuda","Brunei Darussalam","Bolivia",
|
||
|
"Brazil","Bahamas","Bhutan","Bouvet Island","Botswana","Belarus","Belize","Canada","Cocos (Keeling) Islands","Congo, The Democratic Republic of the",
|
||
|
"Central African Republic","Congo","Switzerland","Cote D'Ivoire","Cook Islands","Chile","Cameroon","China","Colombia","Costa Rica",
|
||
|
"Cuba","Cape Verde","Christmas Island","Cyprus","Czech Republic","Germany","Djibouti","Denmark","Dominica","Dominican Republic",
|
||
|
"Algeria","Ecuador","Estonia","Egypt","Western Sahara","Eritrea","Spain","Ethiopia","Finland","Fiji",
|
||
|
"Falkland Islands (Malvinas)","Micronesia, Federated States of","Faroe Islands","France","France, Metropolitan","Gabon","United Kingdom","Grenada","Georgia","French Guiana",
|
||
|
"Ghana","Gibraltar","Greenland","Gambia","Guinea","Guadeloupe","Equatorial Guinea","Greece","South Georgia and the South Sandwich Islands","Guatemala",
|
||
|
"Guam","Guinea-Bissau","Guyana","Hong Kong","Heard Island and McDonald Islands","Honduras","Croatia","Haiti","Hungary","Indonesia",
|
||
|
"Ireland","Israel","India","British Indian Ocean Territory","Iraq","Iran, Islamic Republic of","Iceland","Italy","Jamaica","Jordan",
|
||
|
"Japan","Kenya","Kyrgyzstan","Cambodia","Kiribati","Comoros","Saint Kitts and Nevis","Korea, Democratic People's Republic of","Korea, Republic of","Kuwait",
|
||
|
"Cayman Islands","Kazakhstan","Lao People's Democratic Republic","Lebanon","Saint Lucia","Liechtenstein","Sri Lanka","Liberia","Lesotho","Lithuania",
|
||
|
"Luxembourg","Latvia","Libyan Arab Jamahiriya","Morocco","Monaco","Moldova, Republic of","Madagascar","Marshall Islands","Macedonia","Mali",
|
||
|
"Myanmar","Mongolia","Macau","Northern Mariana Islands","Martinique","Mauritania","Montserrat","Malta","Mauritius","Maldives",
|
||
|
"Malawi","Mexico","Malaysia","Mozambique","Namibia","New Caledonia","Niger","Norfolk Island","Nigeria","Nicaragua",
|
||
|
"Netherlands","Norway","Nepal","Nauru","Niue","New Zealand","Oman","Panama","Peru","French Polynesia",
|
||
|
"Papua New Guinea","Philippines","Pakistan","Poland","Saint Pierre and Miquelon","Pitcairn Islands","Puerto Rico","Palestinian Territory","Portugal","Palau",
|
||
|
"Paraguay","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saudi Arabia","Solomon Islands","Seychelles","Sudan",
|
||
|
"Sweden","Singapore","Saint Helena","Slovenia","Svalbard and Jan Mayen","Slovakia","Sierra Leone","San Marino","Senegal","Somalia","Suriname",
|
||
|
"Sao Tome and Principe","El Salvador","Syrian Arab Republic","Swaziland","Turks and Caicos Islands","Chad","French Southern Territories","Togo","Thailand",
|
||
|
"Tajikistan","Tokelau","Turkmenistan","Tunisia","Tonga","Timor-Leste","Turkey","Trinidad and Tobago","Tuvalu","Taiwan",
|
||
|
"Tanzania, United Republic of","Ukraine","Uganda","United States Minor Outlying Islands","United States","Uruguay","Uzbekistan","Holy See (Vatican City State)","Saint Vincent and the Grenadines","Venezuela",
|
||
|
"Virgin Islands, British","Virgin Islands, U.S.","Vietnam","Vanuatu","Wallis and Futuna","Samoa","Yemen","Mayotte","Serbia","South Africa",
|
||
|
"Zambia","Montenegro","Zimbabwe","Anonymous Proxy","Satellite Provider","Other","Aland Islands","Guernsey","Isle of Man","Jersey",
|
||
|
"Saint Barthelemy","Saint Martin"};
|
||
|
|
||
|
QString GeoIPManager::CountryISOCodeToName(const char* iso) {
|
||
13 years ago
|
if (iso[0] == 0) return "N/A";
|
||
|
for (uint i = 0; i < num_countries; ++i) {
|
||
|
if (iso[0] == country_code[i][0] && iso[1] == country_code[i][1]) {
|
||
14 years ago
|
return QLatin1String(country_name[i]);
|
||
|
}
|
||
|
}
|
||
|
qDebug("GeoIPManager: Country name resolution failed for: %c%c", iso[0], iso[1]);
|
||
|
return "N/A";
|
||
|
}
|
||
|
|
||
|
// http://www.iso.org/iso/country_codes/iso_3166_code_lists/english_country_names_and_code_elements.htm
|
||
|
QIcon GeoIPManager::CountryISOCodeToIcon(const char* iso) {
|
||
13 years ago
|
if (iso[0] == 0 || iso[0] == '!') return QIcon();
|
||
14 years ago
|
const QString isoStr = QString(QByteArray(iso, 2)).toLower();
|
||
10 years ago
|
return QIcon(":/icons/flags/"+isoStr+".png");
|
||
14 years ago
|
}
|
||
|
|