diff --git a/src/options.ui b/src/options.ui
index 1c26fc2df..c8ce7fafd 100644
--- a/src/options.ui
+++ b/src/options.ui
@@ -22,16 +22,7 @@
6
-
- 9
-
-
- 9
-
-
- 9
-
-
+
9
-
@@ -83,11 +74,20 @@
Qt::ElideLeft
+
+
+ 0
+ 0
+ 641
+ 457
+
+
General
- :/Icons/star.png
+
+ :/Icons/star.png:/Icons/star.png
-
@@ -120,7 +120,7 @@
Qt::Horizontal
-
+
40
20
@@ -189,7 +189,7 @@
Qt::Horizontal
-
+
40
20
@@ -250,7 +250,7 @@
Qt::Horizontal
-
+
40
20
@@ -318,7 +318,7 @@
Qt::Vertical
-
+
623
20
@@ -329,11 +329,20 @@
+
+
+ 0
+ 0
+ 641
+ 457
+
+
Downloads
- :/Icons/download.png
+
+ :/Icons/download.png:/Icons/download.png
-
@@ -360,16 +369,7 @@
6
-
- 0
-
-
- 0
-
-
- 0
-
-
+
0
-
@@ -377,16 +377,7 @@
6
-
- 0
-
-
- 0
-
-
- 0
-
-
+
0
-
@@ -473,16 +464,7 @@
6
-
- 0
-
-
- 0
-
-
- 0
-
-
+
0
-
@@ -490,16 +472,7 @@
6
-
- 0
-
-
- 0
-
-
- 0
-
-
+
0
-
@@ -580,7 +553,7 @@
Qt::Horizontal
-
+
40
20
@@ -623,7 +596,7 @@
Qt::Horizontal
-
+
40
20
@@ -639,11 +612,20 @@
+
+
+ 0
+ 0
+ 641
+ 457
+
+
Connection
- :/Icons/connection.png
+
+ :/Icons/connection.png:/Icons/connection.png
-
@@ -706,7 +688,7 @@
Qt::Horizontal
-
+
20
20
@@ -954,7 +936,7 @@
Qt::Horizontal
-
+
21
29
@@ -1043,7 +1025,7 @@
Qt::Horizontal
-
+
40
20
@@ -1145,11 +1127,20 @@
+
+
+ 0
+ 0
+ 641
+ 457
+
+
Bittorrent
- :/Icons/bt_settings.png
+
+ :/Icons/bt_settings.png:/Icons/bt_settings.png
-
@@ -1196,7 +1187,7 @@
Qt::Horizontal
-
+
40
20
@@ -1241,7 +1232,7 @@
Qt::Horizontal
-
+
40
20
@@ -1283,7 +1274,7 @@
Qt::Horizontal
-
+
40
20
@@ -1365,7 +1356,7 @@
Qt::Horizontal
-
+
40
20
@@ -1428,7 +1419,7 @@
Qt::Horizontal
-
+
40
20
@@ -1482,7 +1473,7 @@
Qt::Horizontal
-
+
40
20
@@ -1500,7 +1491,7 @@
Qt::Vertical
-
+
20
40
@@ -1511,11 +1502,20 @@
+
+
+ 0
+ 0
+ 641
+ 457
+
+
Misc
- :/Icons/configure.png
+
+ :/Icons/configure.png:/Icons/configure.png
-
@@ -1526,170 +1526,20 @@
Filter Settings
-
-
- 6
-
-
- 9
-
-
- 9
-
-
- 9
-
-
- 9
-
+
-
Activate IP Filtering
- :/Icons/filter.png
+
+ :/Icons/filter.png:/Icons/filter.png
-
-
-
- false
-
-
-
- 0
- 171
-
-
-
-
- Sans Serif
- 8
- 50
- false
- false
- false
- false
-
-
-
- QAbstractItemView::ExtendedSelection
-
-
- false
-
-
-
- Start IP
-
-
-
-
- End IP
-
-
-
-
- Origin
-
-
-
-
- Comment
-
-
-
-
- -
-
-
- 6
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
- false
-
-
- Add Range
-
-
- :/Icons/skin/add.png
-
-
-
- -
-
-
- false
-
-
- Remove Range
-
-
- :/Icons/skin/remove.png
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
-
-
- -
-
-
- 6
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
+
-
@@ -1791,7 +1641,7 @@
Qt::Horizontal
-
+
40
20
@@ -1825,7 +1675,7 @@
Qt::Horizontal
-
+
40
20
@@ -1842,14 +1692,36 @@
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+ 0
+ 0
+ 641
+ 457
+
+
Web UI
- :/Icons/password.png
+
+ :/Icons/password.png:/Icons/password.png
-
@@ -1902,7 +1774,7 @@
Qt::Horizontal
-
+
21
29
@@ -1987,7 +1859,7 @@
Qt::Horizontal
-
+
198
57
@@ -2003,7 +1875,7 @@
Qt::Vertical
-
+
623
41
@@ -2020,16 +1892,7 @@
6
-
- 0
-
-
- 0
-
-
- 0
-
-
+
0
-
@@ -2038,7 +1901,7 @@
Qt::Horizontal
- QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok
+ QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok
true
@@ -2104,9 +1967,6 @@
checkRatioRemove
spinMaxRatio
checkIPFilter
- filtersList
- addFilterRangeButton
- delFilterRangeButton
textFilterPath
browseFilterButton
spinRSSRefresh
diff --git a/src/options_imp.cpp b/src/options_imp.cpp
index e27516473..84d43cd88 100644
--- a/src/options_imp.cpp
+++ b/src/options_imp.cpp
@@ -200,8 +200,6 @@ options_imp::options_imp(QWidget *parent):QDialog(parent){
connect(spinMaxRatio, SIGNAL(valueChanged(QString)), this, SLOT(enableApplyButton()));
// Misc tab
connect(checkIPFilter, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton()));
- connect(addFilterRangeButton, SIGNAL(clicked()), this, SLOT(enableApplyButton()));
- connect(delFilterRangeButton, SIGNAL(clicked()), this, SLOT(enableApplyButton()));
connect(textFilterPath, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton()));
connect(spinRSSRefresh, SIGNAL(valueChanged(QString)), this, SLOT(enableApplyButton()));
connect(spinRSSMaxArticlesPerFeed, SIGNAL(valueChanged(QString)), this, SLOT(enableApplyButton()));
@@ -845,17 +843,11 @@ void options_imp::enableMaxUploadsLimitPerTorrent(int checkBoxValue){
void options_imp::enableFilter(int checkBoxValue){
if(checkBoxValue!=2){
//Disable
- filtersList->setEnabled(false);
- addFilterRangeButton->setEnabled(false);
- delFilterRangeButton->setEnabled(false);
lblFilterPath->setEnabled(false);
textFilterPath->setEnabled(false);
browseFilterButton->setEnabled(false);
}else{
//enable
- filtersList->setEnabled(true);
- addFilterRangeButton->setEnabled(true);
- delFilterRangeButton->setEnabled(true);
lblFilterPath->setEnabled(true);
textFilterPath->setEnabled(true);
browseFilterButton->setEnabled(true);
@@ -1060,114 +1052,74 @@ void options_imp::on_browseSaveDirButton_clicked(){
}
}
-// look for ipfilter.dat file
-// reads emule ipfilter files.
-// with the following format:
-//
-// - , ,
-//
-// first-ip is an ip address that defines the first
-// address of the range
-// last-ip is the last ip address in the range
-// access is a number specifying the access control
-// for this ip-range. Right now values > 127 = allowed
-// and numbers <= 127 = blocked
-// the rest of the line is ignored
-//
-// Lines may be commented using '#' or '//'
+// Process ip filter file
+// Supported formats:
+// * eMule IP list (DAT): http://wiki.phoenixlabs.org/wiki/DAT_Format
+// * PeerGuardian Text (P2P): http://wiki.phoenixlabs.org/wiki/P2P_Format (TODO)
+// * PeerGuardian Binary (P2B): http://wiki.phoenixlabs.org/wiki/P2B_Format (TODO)
void options_imp::processFilterFile(QString filePath){
qDebug("Processing filter files");
- filtersList->clear();
- QString manualFilters= misc::qBittorrentPath() + QString::fromUtf8("ipfilter.dat");
- QStringList filterFiles(manualFilters);
- filterFiles.append(filePath);
- for(int i=0; i<2; ++i){
- QFile file(filterFiles.at(i));
- QStringList IP;
- if (file.exists()){
- if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
- QMessageBox::critical(0, tr("I/O Error", "Input/Output Error"), tr("Couldn't open %1 in read mode.").arg(filePath));
+ QFile file(filePath);
+ QStringList IP;
+ if (file.exists()){
+ if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
+ QMessageBox::critical(0, tr("I/O Error", "Input/Output Error"), tr("Couldn't open %1 in read mode.").arg(filePath));
+ return;
+ }
+ unsigned int nbLine = 0;
+ while (!file.atEnd()) {
+ ++nbLine;
+ QByteArray line = file.readLine();
+ if(line.startsWith('#') || line.startsWith("//")) continue;
+ // Line is not commented
+ QList partsList = line.split(',');
+ unsigned int nbElem = partsList.size();
+ if(nbElem < 2){
+ qDebug("Ipfilter.dat: line %d is malformed.", nbLine);
continue;
}
- unsigned int nbLine = 0;
- while (!file.atEnd()) {
- ++nbLine;
- QByteArray line = file.readLine();
- if(line.startsWith('#') || line.startsWith("//")) continue;
- // Line is not commented
- QList partsList = line.split(',');
- unsigned int nbElem = partsList.size();
- if(nbElem < 2){
- qDebug("Ipfilter.dat: line %d is malformed.", nbLine);
- continue;
- }
- bool ok;
- int nbAccess = partsList.at(1).trimmed().toInt(&ok);
- if(!ok){
- qDebug("Ipfilter.dat: line %d is malformed.", nbLine);
- continue;
+ bool ok;
+ int nbAccess = partsList.at(1).trimmed().toInt(&ok);
+ if(!ok){
+ qDebug("Ipfilter.dat: line %d is malformed.", nbLine);
+ continue;
+ }
+ if(nbAccess <= 127){
+ QString strComment;
+ QString strStartIP = partsList.at(0).split('-').at(0).trimmed();
+ QString strEndIP = partsList.at(0).split('-').at(1).trimmed();
+ if(nbElem > 2){
+ strComment = partsList.at(2).trimmed();
+ }else{
+ strComment = QString();
}
- if(nbAccess <= 127){
- QString strComment;
- QString strStartIP = partsList.at(0).split('-').at(0).trimmed();
- QString strEndIP = partsList.at(0).split('-').at(1).trimmed();
- if(nbElem > 2){
- strComment = partsList.at(2).trimmed();
- }else{
- strComment = QString();
- }
- // Split IP
-
- QRegExp is_ipv6(QString::fromUtf8("^[0-9a-f]{4}(:[0-9a-f]{4}){7}$"), Qt::CaseInsensitive, QRegExp::RegExp);
- QRegExp is_ipv4(QString::fromUtf8("^(([0-1]?[0-9]?[0-9])|(2[0-4][0-9])|(25[0-5]))(\\.(([0-1]?[0-9]?[0-9])|(2[0-4][0-9])|(25[0-5]))){3}$"), Qt::CaseInsensitive, QRegExp::RegExp);
-
- if(strStartIP.contains(is_ipv4) && strEndIP.contains(is_ipv4)) {
- // IPv4
- IP = strStartIP.split('.');
- address_v4 start((IP.at(0).toInt() << 24) + (IP.at(1).toInt() << 16) + (IP.at(2).toInt() << 8) + IP.at(3).toInt());
- IP = strEndIP.split('.');
- address_v4 last((IP.at(0).toInt() << 24) + (IP.at(1).toInt() << 16) + (IP.at(2).toInt() << 8) + IP.at(3).toInt());
-
- // add it to list
- QStringList item(QString::fromUtf8(start.to_string().c_str()));
- item.append(QString::fromUtf8(last.to_string().c_str()));
- if(!i){
- item.append(QString::fromUtf8("Manual"));
- }else{
- item.append(QString::fromUtf8("ipfilter.dat"));
- }
- item.append(strComment);
- new QTreeWidgetItem(filtersList, item);
- // Apply to bittorrent session
- filter.add_rule(start, last, ip_filter::blocked);
- } else if(strStartIP.contains(is_ipv6) && strEndIP.contains(is_ipv6)) {
- // IPv6, ex : 1fff:0000:0a88:85a3:0000:0000:ac1f:8001
- IP = strStartIP.split(':');
- address_v6 start = address_v6::from_string(strStartIP.remove(':', 0).toUtf8().data());
- IP = strEndIP.split(':');
- address_v6 last = address_v6::from_string(strEndIP.remove(':', 0).toUtf8().data());
-
- // add it to list
- QStringList item(QString::fromUtf8(start.to_string().c_str()));
- item.append(QString::fromUtf8(last.to_string().c_str()));
- if(!i){
- item.append(QString::fromUtf8("Manual"));
- }else{
- item.append(QString::fromUtf8("ipfilter.dat"));
- }
- item.append(strComment);
- new QTreeWidgetItem(filtersList, item);
- // Apply to bittorrent session
- filter.add_rule(start, last, ip_filter::blocked);
- } else {
- qDebug("Ipfilter.dat: line %d is malformed.", nbLine);
- continue;
- }
-
+ // Split IP
+ QRegExp is_ipv6(QString::fromUtf8("^[0-9a-f]{4}(:[0-9a-f]{4}){7}$"), Qt::CaseInsensitive, QRegExp::RegExp);
+ QRegExp is_ipv4(QString::fromUtf8("^(([0-1]?[0-9]?[0-9])|(2[0-4][0-9])|(25[0-5]))(\\.(([0-1]?[0-9]?[0-9])|(2[0-4][0-9])|(25[0-5]))){3}$"), Qt::CaseInsensitive, QRegExp::RegExp);
+
+ if(strStartIP.contains(is_ipv4) && strEndIP.contains(is_ipv4)) {
+ // IPv4
+ IP = strStartIP.split('.');
+ address_v4 start((IP.at(0).toInt() << 24) + (IP.at(1).toInt() << 16) + (IP.at(2).toInt() << 8) + IP.at(3).toInt());
+ IP = strEndIP.split('.');
+ address_v4 last((IP.at(0).toInt() << 24) + (IP.at(1).toInt() << 16) + (IP.at(2).toInt() << 8) + IP.at(3).toInt());
+ // Apply to bittorrent session
+ filter.add_rule(start, last, ip_filter::blocked);
+ } else if(strStartIP.contains(is_ipv6) && strEndIP.contains(is_ipv6)) {
+ // IPv6, ex : 1fff:0000:0a88:85a3:0000:0000:ac1f:8001
+ IP = strStartIP.split(':');
+ address_v6 start = address_v6::from_string(strStartIP.remove(':', 0).toUtf8().data());
+ IP = strEndIP.split(':');
+ address_v6 last = address_v6::from_string(strEndIP.remove(':', 0).toUtf8().data());
+ // Apply to bittorrent session
+ filter.add_rule(start, last, ip_filter::blocked);
+ } else {
+ qDebug("Ipfilter.dat: line %d is malformed.", nbLine);
+ continue;
}
}
- file.close();
}
+ file.close();
}
}
@@ -1176,100 +1128,6 @@ ip_filter options_imp::getFilter() const{
return filter;
}
-// Add an IP Range to ipFilter
-void options_imp::on_addFilterRangeButton_clicked(){
- bool ok;
- // Ask user for start ip
- QString startIP = QInputDialog::getText(this, tr("Range Start IP"),
- tr("Start IP:"), QLineEdit::Normal,
- QString::fromUtf8("0.0.0.0"), &ok);
- QStringList IP1 = startIP.split('.');
- // Check IP
- bool ipv4 = true;
- QRegExp is_ipv6(QString::fromUtf8("^[0-9a-f]{4}(:[0-9a-f]{4}){7}$"), Qt::CaseInsensitive, QRegExp::RegExp);
- QRegExp is_ipv4(QString::fromUtf8("^(([0-1]?[0-9]?[0-9])|(2[0-4][0-9])|(25[0-5]))(\\.(([0-1]?[0-9]?[0-9])|(2[0-4][0-9])|(25[0-5]))){3}$"), Qt::CaseInsensitive, QRegExp::RegExp);
-
-
-
- if(!ok) {
- return;
- } else if(startIP.isEmpty()
- || (!startIP.contains(is_ipv4) && !startIP.contains(is_ipv6))){
- QMessageBox::critical(0, tr("Invalid IP"), tr("This IP is invalid."));
- return;
- } else if(startIP.contains(is_ipv4)) {
- ipv4 = true;
- } else if(startIP.contains(is_ipv6)) {
- ipv4 = false;
- }
-
- // Ask user for last ip
- QString lastIP = QInputDialog::getText(this, tr("Range End IP"),
- tr("End IP:"), QLineEdit::Normal,
- startIP, &ok);
- // check IP
- if (!ok) {
- return;
- } else if(lastIP.isEmpty()
- || (!lastIP.contains(is_ipv4) && !lastIP.contains(is_ipv6))
- || (ipv4 == true && !lastIP.contains(is_ipv4))
- || (ipv4 == false && !lastIP.contains(is_ipv6))){
- QMessageBox::critical(0, tr("Invalid IP"), tr("This IP is invalid."));
- return;
- }
-
- // Ask user for Comment
- QString comment = QInputDialog::getText(this, tr("IP Range Comment"),
- tr("Comment:"), QLineEdit::Normal,
- QString::fromUtf8(""), &ok);
- if (!ok){
- comment = QString::fromUtf8("");
- return;
- }
- QFile ipfilter(misc::qBittorrentPath() + QString::fromUtf8("ipfilter.dat"));
- if (!ipfilter.open(QIODevice::Append | QIODevice::WriteOnly | QIODevice::Text)){
- std::cerr << "Error: Couldn't write in ipfilter.dat";
- return;
- }
- QTextStream out(&ipfilter);
- out << startIP << " - " << lastIP << ", 0, " << comment << "\n";
- ipfilter.close();
- processFilterFile(textFilterPath->text());
- enableApplyButton();
-}
-
-// Delete selected IP range in list and ipfilter.dat file
-// User can only delete IP added manually
-void options_imp::on_delFilterRangeButton_clicked(){
- bool changed = false;
- QList selectedItems = filtersList->selectedItems();
- // Delete from list
- for(int i=0; itext(2) == QString::fromUtf8("Manual")){
- delete item;
- changed = true;
- }
- if(changed){
- enableApplyButton();
- }
- }
- // Update ipfilter.dat
- QFile ipfilter(misc::qBittorrentPath() + QString::fromUtf8("ipfilter.dat"));
- if (!ipfilter.open(QIODevice::WriteOnly | QIODevice::Text)){
- std::cerr << "Error: Couldn't write in ipfilter.dat";
- return;
- }
- QTextStream out(&ipfilter);
- for(int i=0; itopLevelItemCount();++i){
- QTreeWidgetItem *item = filtersList->topLevelItem(i);
- if(item->text(2) == QString::fromUtf8("Manual")){
- out << item->text(0) << " - " << item->text(1) << ", 0, " << item->text(3) << "\n";
- }
- }
- ipfilter.close();
-}
-
// Web UI
void options_imp::enableWebUi(bool checkBoxValue){
diff --git a/src/options_imp.h b/src/options_imp.h
index d2b0cf837..31046805f 100644
--- a/src/options_imp.h
+++ b/src/options_imp.h
@@ -133,8 +133,6 @@ class options_imp : public QDialog, private Ui::Dialog {
void closeEvent(QCloseEvent *e);
void on_buttonBox_rejected();
void applySettings(QAbstractButton* button);
- void on_addFilterRangeButton_clicked();
- void on_delFilterRangeButton_clicked();
void on_browseScanDirButton_clicked();
void on_browseFilterButton_clicked();
void on_browseSaveDirButton_clicked();