Compare commits
147 Commits
release-1.
...
release-1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3783b11e98 | ||
|
|
03cf510f7f | ||
|
|
610dfefa26 | ||
|
|
6c477fcf75 | ||
|
|
604f8542a7 | ||
|
|
e9b4c6c047 | ||
|
|
985ac3be68 | ||
|
|
562c748c50 | ||
|
|
7a685f5ab6 | ||
|
|
9500b212c7 | ||
|
|
5a2e92ad79 | ||
|
|
9772fccde3 | ||
|
|
f26bcec56f | ||
|
|
52a62b6f0f | ||
|
|
f27b49f9a3 | ||
|
|
3e4fe1f823 | ||
|
|
a8a6911aa8 | ||
|
|
e299288367 | ||
|
|
de64a641d0 | ||
|
|
ab13a58614 | ||
|
|
c863ff6335 | ||
|
|
e20a09ca3e | ||
|
|
40966ae421 | ||
|
|
a87098629b | ||
|
|
194eb3ba6e | ||
|
|
8792637634 | ||
|
|
63ad2def91 | ||
|
|
f790b80aa3 | ||
|
|
ab78e5b438 | ||
|
|
05948e2edf | ||
|
|
c9c4f7001a | ||
|
|
6cd185d0d5 | ||
|
|
063219cbe7 | ||
|
|
e324f3792b | ||
|
|
0267ecc342 | ||
|
|
e53c7aaea6 | ||
|
|
3e90e56266 | ||
|
|
1c1b8acd67 | ||
|
|
811846e5fa | ||
|
|
3ba28885b9 | ||
|
|
8ed1c57c29 | ||
|
|
af5d24c5bc | ||
|
|
9dcd572d60 | ||
|
|
e024a3ff35 | ||
|
|
37342e0f0c | ||
|
|
bfbbc1f497 | ||
|
|
5d31dcdb15 | ||
|
|
6f89b1f131 | ||
|
|
9d35bda43c | ||
|
|
e780d83fd0 | ||
|
|
7a59d5e47c | ||
|
|
f2ea524be9 | ||
|
|
a33094519c | ||
|
|
e313ae808f | ||
|
|
dc9802fe1e | ||
|
|
64f1d306f4 | ||
|
|
f3af4867fd | ||
|
|
4fe22dbc57 | ||
|
|
1d9b524b77 | ||
|
|
63761afd0a | ||
|
|
8da148ffa1 | ||
|
|
e2dc2207d8 | ||
|
|
6e87d6655a | ||
|
|
d72485a955 | ||
|
|
04c6760892 | ||
|
|
382f3e3c86 | ||
|
|
c1378450fc | ||
|
|
4e10a8dbf7 | ||
|
|
4f7b4c2a55 | ||
|
|
f98f076335 | ||
|
|
b148a93a8f | ||
|
|
37cf23fe33 | ||
|
|
87f43123c6 | ||
|
|
11dd2d81b8 | ||
|
|
d18d07efed | ||
|
|
518a120c07 | ||
|
|
290bc8b7a6 | ||
|
|
0ede09efb5 | ||
|
|
15de12f6dd | ||
|
|
ef95d6df81 | ||
|
|
f382ba4fd0 | ||
|
|
01d504d992 | ||
|
|
cdd894a6a1 | ||
|
|
d7b2d3497f | ||
|
|
5dbd5c4326 | ||
|
|
9a14c4c599 | ||
|
|
3fa14cd47f | ||
|
|
941d9b9bd9 | ||
|
|
3d88b7b05c | ||
|
|
8d39e2a776 | ||
|
|
4a1c8a7279 | ||
|
|
b8d8862562 | ||
|
|
40e9105ee5 | ||
|
|
0984b8b8e1 | ||
|
|
3dd7dcc58f | ||
|
|
6ba5df3ec8 | ||
|
|
1560b4ca3b | ||
|
|
68d8a9ed47 | ||
|
|
ca00f3084d | ||
|
|
39c16b20ae | ||
|
|
666d4622b9 | ||
|
|
27388643b1 | ||
|
|
90d17d16a4 | ||
|
|
df0f01cd71 | ||
|
|
480d00d747 | ||
|
|
a0923741a4 | ||
|
|
8e2efc2950 | ||
|
|
91dee6058e | ||
|
|
f5c1343722 | ||
|
|
d4d0a08390 | ||
|
|
d02aca7323 | ||
|
|
fd81567ecd | ||
|
|
8e5f5b5d65 | ||
|
|
215d561b82 | ||
|
|
dc18780a97 | ||
|
|
06fb19e8be | ||
|
|
3550e31871 | ||
|
|
46c6c4fc9a | ||
|
|
e126de8ff5 | ||
|
|
f2d2e70967 | ||
|
|
48b14d1066 | ||
|
|
725700420c | ||
|
|
480df1f5dc | ||
|
|
2fa43dd973 | ||
|
|
b9f1586068 | ||
|
|
07dbe388f4 | ||
|
|
b2af40c95b | ||
|
|
05569a5011 | ||
|
|
73dbce45b2 | ||
|
|
fdaeafc701 | ||
|
|
9ca4e2f1f6 | ||
|
|
2b53aa7e81 | ||
|
|
8e79e918c5 | ||
|
|
687842a949 | ||
|
|
645ee86860 | ||
|
|
f50762dfa8 | ||
|
|
7e252d3fbd | ||
|
|
2dc9f10bf4 | ||
|
|
bca03706a0 | ||
|
|
e7663e7b6b | ||
|
|
2b0e05b453 | ||
|
|
4d67170d3e | ||
|
|
538c028f8a | ||
|
|
2cbbd6ef50 | ||
|
|
955d8069e2 | ||
|
|
25d998f1b5 | ||
|
|
462f6c41cd |
49
Changelog
@@ -1,13 +1,58 @@
|
|||||||
* Unknown - Christophe Dumez <chris@qbittorrent.org> - v1.5.0
|
* Sun Oct 25 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.4
|
||||||
|
- BUGFIX: Updated man page
|
||||||
|
- BUGFIX: Fixed possible crash with torrents containing unicode characters
|
||||||
|
- BUGFIX: Fixed problem when disabling systray integration and starting minimized
|
||||||
|
- BUGFIX: Fixed PirateBay search plugin
|
||||||
|
- BUGFIX: Using Download button in search results list now downloads the right torrents
|
||||||
|
- BUGFIX: The search results list is no longer sorted automatically when a row color is updated
|
||||||
|
|
||||||
|
* Wed Sep 30 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.3
|
||||||
|
- BUGFIX: Fix a possible crash when pausing then deleting a torrent quickly
|
||||||
|
- BUGFIX: Fix a race condition in folder scanning and torrent downloader
|
||||||
|
- BUGFIX: Hide download url column in search results
|
||||||
|
- BUGFIX: Fix a crash when scanned directory does not exist
|
||||||
|
- BUGFIX: Fix compilation on Mac OS
|
||||||
|
- BUGFIX: Added a command line parameter to disable splash screen
|
||||||
|
- BUGFIX: Ignore permanent deletion button when no torrent is selected
|
||||||
|
- BUGFIX: When a selected torrent is deleted, select next suitable torrent
|
||||||
|
|
||||||
|
* Sun Sep 20 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.2
|
||||||
|
- BUGFIX: Some torrents were pausing for no reason
|
||||||
|
- I18N: Updated Korean translation
|
||||||
|
|
||||||
|
* Thu Sep 7 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.1
|
||||||
|
- BUGFIX: Fix crash in torrent addition dialog when save path does not exist (closes #425227)
|
||||||
|
- BUGFIX: Fix downloading from URL (broken in v1.5.0)
|
||||||
|
- BUGFIX: Pause torrents in error state
|
||||||
|
|
||||||
|
* Thu Sep 3 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.5.0
|
||||||
- FEATURE: Added Magnet URI support
|
- FEATURE: Added Magnet URI support
|
||||||
|
- FEATURE: Search engine supports category-based requests
|
||||||
- FEATURE: Make use of torrent enclosure in RSS feeds for direct download
|
- FEATURE: Make use of torrent enclosure in RSS feeds for direct download
|
||||||
- FEATURE: Implemented a RSS feed downloader with filter support
|
- FEATURE: Implemented a RSS feed downloader with filter support
|
||||||
- FEATURE: Save old RSS item to hard disk to remember them on start up
|
- FEATURE: Save old RSS item to hard disk to remember them on start up
|
||||||
- FEATURE: Display free disk space in torrent addition dialog
|
- FEATURE: Display free disk space in torrent addition dialog
|
||||||
- FEATURE: In torrent addition from URL, paste clipboard content if it contains an URL
|
- FEATURE: In torrent addition from URL, paste clipboard content if it contains an URL
|
||||||
- FEATURE: RSS Feeds URLs can now be copied to clipboard
|
- FEATURE: RSS feeds URLs can now be copied to clipboard
|
||||||
|
- FEATURE: RSS feeds can now be grouped into folders
|
||||||
|
- FEATURE: Added "Unread" item to RSS feed list to display all unread news
|
||||||
- FEATURE: If a torrent contains a torrent file, process downloaded torrent file too
|
- FEATURE: If a torrent contains a torrent file, process downloaded torrent file too
|
||||||
|
- FEATURE: A random listening port can be chosen automatically
|
||||||
- BUGFIX: torrent resume code rewrited
|
- BUGFIX: torrent resume code rewrited
|
||||||
|
- BUGFIX: Fixed uTorrent spoofing code
|
||||||
|
- BUGFIX: Greatly improved column sorting code
|
||||||
|
- BUGFIX: Possibility to create trackerless torrents
|
||||||
|
- BUGFIX: Better item coloring in torrent content filtering dialog
|
||||||
|
- COSMETIC: Redesigned search tab to improve usability
|
||||||
|
- COSMETIC: Redesigned RSS tab to improve usability
|
||||||
|
- COSMETIC: Improved tracker errors readability
|
||||||
|
|
||||||
|
* Sun Aug 21 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.4.1
|
||||||
|
- BUGFIX: Fix problems when changing save path (if using temporary download folder)
|
||||||
|
- BUGFIX: Display real save path instead of the temporary one in torrent properties
|
||||||
|
- BUGFIX: Catching invalid_handle exception to avoid rare crashes
|
||||||
|
- BUGFIX: Fixed popup menu position in RSS feeds list
|
||||||
|
- BUGFIX: Don't save RSS feed state if it could not be updated
|
||||||
|
|
||||||
* Thu Aug 13 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.4.0
|
* Thu Aug 13 2009 - Christophe Dumez <chris@qbittorrent.org> - v1.4.0
|
||||||
- FEATURE: Display swarm information in lists
|
- FEATURE: Display swarm information in lists
|
||||||
|
|||||||
@@ -1,17 +1,19 @@
|
|||||||
.\" This manpage has been automatically generated by docbook2man
|
.\" This manpage has been automatically generated by docbook2man
|
||||||
.\" from a DocBook document. This tool can be found at:
|
.\" from a DocBook document. This tool can be found at:
|
||||||
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>.
|
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>.
|
||||||
.TH "QBITTORRENT" "1" "September 1st 2007" "Bittorrent client written in C++ / Qt4" ""
|
.TH "QBITTORRENT" "1" "September 30th 2009" "Bittorrent client written in C++ / Qt4" ""
|
||||||
|
|
||||||
.SH NAME
|
.SH "NAME"
|
||||||
qBittorrent \- a Bittorrent client written in C++ / Qt4
|
qBittorrent \- a Bittorrent client written in C++ / Qt4
|
||||||
.SH SYNOPSIS
|
|
||||||
|
|
||||||
\fBqbittorrent\fR [FILE | URL] [FILE | URL...]
|
.SH "SYNOPSIS"
|
||||||
|
|
||||||
|
\fBqbittorrent\fR [--no-splash] [TORRENT_FILE | URL]...
|
||||||
|
|
||||||
\fBqbittorrent\fR \-\-help
|
\fBqbittorrent\fR \-\-help
|
||||||
|
|
||||||
\fBqbittorrent\fR \-\-version
|
\fBqbittorrent\fR \-\-version
|
||||||
|
|
||||||
.PP
|
.PP
|
||||||
.SH "DESCRIPTION"
|
.SH "DESCRIPTION"
|
||||||
|
|
||||||
@@ -19,10 +21,21 @@ qBittorrent \- a Bittorrent client written in C++ / Qt4
|
|||||||
using the \fBrblibtorrent\fR library by Arvid Norberg. qBittorrent aims
|
using the \fBrblibtorrent\fR library by Arvid Norberg. qBittorrent aims
|
||||||
to be a good alternative to all other bittorrent clients out there. qBittorrent
|
to be a good alternative to all other bittorrent clients out there. qBittorrent
|
||||||
is fast, stable, light, it supports unicode and it provides a good integrated search engine.
|
is fast, stable, light, it supports unicode and it provides a good integrated search engine.
|
||||||
It also comes with UPnP port forwarding / NAT-PMP, encryption (Azureus compatible), FAST extension (mainline) and PeX support (utorrent compatible).
|
It also comes with UPnP port forwarding / NAT-PMP, encryption (Azureus compatible),
|
||||||
|
FAST extension (mainline) and PeX support (utorrent compatible).
|
||||||
|
|
||||||
|
.SH "OPTIONS"
|
||||||
|
|
||||||
|
\fB--help\fR Prints the command line options.
|
||||||
|
|
||||||
|
\fB--version\fR Prints qbittorrent program version number.
|
||||||
|
|
||||||
|
\fB--no-splash\fR Disables splash screen on startup.
|
||||||
|
|
||||||
|
.SH "BUGS"
|
||||||
|
|
||||||
|
If you find a bug, please report it at http://bugs.qbittorrent.org
|
||||||
|
|
||||||
Please report any problem to http://bugs.qbittorrent.org
|
|
||||||
.PP
|
|
||||||
.SH "AUTHOR"
|
.SH "AUTHOR"
|
||||||
|
|
||||||
Christophe Dumez <chris@qbittorrent.org>
|
Christophe Dumez <chris@qbittorrent.org>
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
QString getMatchingTokens_str() const {
|
QString getMatchingTokens_str() const {
|
||||||
return this->value("matches", "*").toString();
|
return this->value("matches", "").toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setMatchingTokens(QString tokens) {
|
void setMatchingTokens(QString tokens) {
|
||||||
@@ -353,7 +353,7 @@ protected slots:
|
|||||||
if(!filters.hasFilter(new_name)) {
|
if(!filters.hasFilter(new_name)) {
|
||||||
validated = true;
|
validated = true;
|
||||||
} else {
|
} else {
|
||||||
QMessageBox::critical(0, tr("Invalid filter name"), tr("This filter name is already in use."));
|
QMessageBox::warning(0, tr("Invalid filter name"), tr("This filter name is already in use."));
|
||||||
}
|
}
|
||||||
}while(!validated);
|
}while(!validated);
|
||||||
// Rename the filter
|
// Rename the filter
|
||||||
@@ -392,7 +392,7 @@ protected slots:
|
|||||||
new_name = new_name.trimmed();
|
new_name = new_name.trimmed();
|
||||||
if(new_name.isEmpty()) {
|
if(new_name.isEmpty()) {
|
||||||
// Cannot be left empty
|
// Cannot be left empty
|
||||||
QMessageBox::critical(0, tr("Invalid filter name"), tr("The filter name cannot be left empty."));
|
QMessageBox::warning(0, tr("Invalid filter name"), tr("The filter name cannot be left empty."));
|
||||||
} else {
|
} else {
|
||||||
validated = true;
|
validated = true;
|
||||||
}
|
}
|
||||||
@@ -408,7 +408,7 @@ protected slots:
|
|||||||
if(filter_name.isNull()) return;
|
if(filter_name.isNull()) return;
|
||||||
if(filters.hasFilter(filter_name)) {
|
if(filters.hasFilter(filter_name)) {
|
||||||
// Filter alread exists
|
// Filter alread exists
|
||||||
QMessageBox::critical(0, tr("Invalid filter name"), tr("This filter name is already in use."));
|
QMessageBox::warning(0, tr("Invalid filter name"), tr("This filter name is already in use."));
|
||||||
} else {
|
} else {
|
||||||
validated = true;
|
validated = true;
|
||||||
}
|
}
|
||||||
@@ -430,7 +430,7 @@ protected slots:
|
|||||||
if(selected_filter.isEmpty()) return;
|
if(selected_filter.isEmpty()) return;
|
||||||
QString s = test_line->text().trimmed();
|
QString s = test_line->text().trimmed();
|
||||||
if(s.isEmpty()) {
|
if(s.isEmpty()) {
|
||||||
QMessageBox::critical(0, tr("Filter testing error"), tr("Please specify a test torrent name."));
|
QMessageBox::warning(0, tr("Filter testing error"), tr("Please specify a test torrent name."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Get current filter
|
// Get current filter
|
||||||
@@ -455,7 +455,7 @@ protected slots:
|
|||||||
filtersList->setCurrentItem(filtersList->item(0));
|
filtersList->setCurrentItem(filtersList->item(0));
|
||||||
QMessageBox::information(0, tr("Import successful"), tr("Filters import was successful."));
|
QMessageBox::information(0, tr("Import successful"), tr("Filters import was successful."));
|
||||||
} else {
|
} else {
|
||||||
QMessageBox::critical(0, tr("Import failure"), tr("Filters could not be imported due to an I/O error."));
|
QMessageBox::warning(0, tr("Import failure"), tr("Filters could not be imported due to an I/O error."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -466,13 +466,13 @@ protected slots:
|
|||||||
if(!destination.endsWith(".filters"))
|
if(!destination.endsWith(".filters"))
|
||||||
destination += ".filters";
|
destination += ".filters";
|
||||||
if(QFile::exists(destination)) {
|
if(QFile::exists(destination)) {
|
||||||
int ret = QMessageBox::question(0, tr("Overwriting confirmation"), tr("Are you sure you want to overwrite existing file?"));
|
int ret = QMessageBox::question(0, tr("Overwriting confirmation"), tr("Are you sure you want to overwrite existing file?"), QMessageBox::Yes|QMessageBox::No);
|
||||||
if(ret != QMessageBox::Yes) return;
|
if(ret != QMessageBox::Yes) return;
|
||||||
}
|
}
|
||||||
if(filters.serialize(destination))
|
if(filters.serialize(destination))
|
||||||
QMessageBox::information(0, tr("Export successful"), tr("Filters export was successful."));
|
QMessageBox::information(0, tr("Export successful"), tr("Filters export was successful."));
|
||||||
else
|
else
|
||||||
QMessageBox::critical(0, tr("Export failure"), tr("Filters could not be exported due to an I/O error."));
|
QMessageBox::warning(0, tr("Export failure"), tr("Filters could not be exported due to an I/O error."));
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
#include "qtorrenthandle.h"
|
#include "qtorrenthandle.h"
|
||||||
|
|
||||||
class QStandardItemModel;
|
class QStandardItemModel;
|
||||||
|
class QSortFilterProxyModel;
|
||||||
class bittorrent;
|
class bittorrent;
|
||||||
class FinishedListDelegate;
|
class FinishedListDelegate;
|
||||||
|
|
||||||
@@ -47,6 +48,7 @@ class FinishedTorrents : public QWidget, public Ui::seeding {
|
|||||||
bittorrent *BTSession;
|
bittorrent *BTSession;
|
||||||
FinishedListDelegate *finishedListDelegate;
|
FinishedListDelegate *finishedListDelegate;
|
||||||
QStandardItemModel *finishedListModel;
|
QStandardItemModel *finishedListModel;
|
||||||
|
QSortFilterProxyModel *proxyModel;
|
||||||
unsigned int nbFinished;
|
unsigned int nbFinished;
|
||||||
void hideOrShowColumn(int index);
|
void hideOrShowColumn(int index);
|
||||||
bool loadHiddenColumns();
|
bool loadHiddenColumns();
|
||||||
@@ -69,10 +71,6 @@ class FinishedTorrents : public QWidget, public Ui::seeding {
|
|||||||
void displayFinishedHoSMenu(const QPoint&);
|
void displayFinishedHoSMenu(const QPoint&);
|
||||||
void setRowColor(int row, QString color);
|
void setRowColor(int row, QString color);
|
||||||
void saveColWidthFinishedList() const;
|
void saveColWidthFinishedList() const;
|
||||||
void toggleFinishedListSortOrder(int index);
|
|
||||||
void sortFinishedList(int index=-1, Qt::SortOrder sortOrder=Qt::AscendingOrder);
|
|
||||||
void sortFinishedListFloat(int index, Qt::SortOrder sortOrder);
|
|
||||||
void sortFinishedListString(int index, Qt::SortOrder sortOrder);
|
|
||||||
void updateFileSize(QString hash);
|
void updateFileSize(QString hash);
|
||||||
void on_actionSet_upload_limit_triggered();
|
void on_actionSet_upload_limit_triggered();
|
||||||
void notifyTorrentDoubleClicked(const QModelIndex& index);
|
void notifyTorrentDoubleClicked(const QModelIndex& index);
|
||||||
@@ -93,6 +91,7 @@ class FinishedTorrents : public QWidget, public Ui::seeding {
|
|||||||
void deleteTorrent(QString hash);
|
void deleteTorrent(QString hash);
|
||||||
void showPropertiesFromHash(QString hash);
|
void showPropertiesFromHash(QString hash);
|
||||||
void loadLastSortedColumn();
|
void loadLastSortedColumn();
|
||||||
|
void saveLastSortedColumn();
|
||||||
void updateMetadata(QTorrentHandle &h);
|
void updateMetadata(QTorrentHandle &h);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|||||||
18
src/GUI.cpp
@@ -163,7 +163,7 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||||||
// Search engine tab
|
// Search engine tab
|
||||||
searchEngine = new SearchEngine(BTSession, myTrayIcon, systrayIntegration);
|
searchEngine = new SearchEngine(BTSession, myTrayIcon, systrayIntegration);
|
||||||
tabs->addTab(searchEngine, tr("Search"));
|
tabs->addTab(searchEngine, tr("Search"));
|
||||||
tabs->setTabIcon(2, QIcon(QString::fromUtf8(":/Icons/skin/search.png")));
|
tabs->setTabIcon(2, QIcon(QString::fromUtf8(":/Icons/oxygen/edit-find.png")));
|
||||||
readSettings();
|
readSettings();
|
||||||
// RSS Tab
|
// RSS Tab
|
||||||
rssWidget = 0;
|
rssWidget = 0;
|
||||||
@@ -249,8 +249,9 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||||||
QMainWindow::statusBar()->addPermanentWidget(upSpeedLbl);
|
QMainWindow::statusBar()->addPermanentWidget(upSpeedLbl);
|
||||||
QMainWindow::statusBar()->addPermanentWidget(statusSep4);
|
QMainWindow::statusBar()->addPermanentWidget(statusSep4);
|
||||||
QMainWindow::statusBar()->addPermanentWidget(ratioLbl);
|
QMainWindow::statusBar()->addPermanentWidget(ratioLbl);
|
||||||
if(!settings.value(QString::fromUtf8("Preferences/General/StartMinimized"), false).toBool()) {
|
|
||||||
show();
|
show();
|
||||||
|
if(settings.value(QString::fromUtf8("Preferences/General/StartMinimized"), false).toBool()) {
|
||||||
|
this->setWindowState(Qt::WindowMinimized);
|
||||||
}
|
}
|
||||||
scrapeTimer = new QTimer(this);
|
scrapeTimer = new QTimer(this);
|
||||||
connect(scrapeTimer, SIGNAL(timeout()), this, SLOT(scrapeTrackers()));
|
connect(scrapeTimer, SIGNAL(timeout()), this, SLOT(scrapeTrackers()));
|
||||||
@@ -450,7 +451,10 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GUI::setPaused(QTorrentHandle &h) const {
|
void GUI::setPaused(QTorrentHandle &h) const {
|
||||||
if(!h.is_paused()) return;
|
if(!h.is_paused()) {
|
||||||
|
// FIXME in v1.6.0: Add Error state and stop using pause for this
|
||||||
|
h.pause();
|
||||||
|
}
|
||||||
qDebug("Marking torrent %s as paused", h.hash().toLocal8Bit().data());
|
qDebug("Marking torrent %s as paused", h.hash().toLocal8Bit().data());
|
||||||
if(h.is_seed()) {
|
if(h.is_seed()) {
|
||||||
// In finished list
|
// In finished list
|
||||||
@@ -865,6 +869,7 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(hashes.empty()) return;
|
||||||
int ret;
|
int ret;
|
||||||
if(inDownloadList) {
|
if(inDownloadList) {
|
||||||
ret = QMessageBox::question(
|
ret = QMessageBox::question(
|
||||||
@@ -911,12 +916,12 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||||||
inDownloadList = false;
|
inDownloadList = false;
|
||||||
break;
|
break;
|
||||||
case 3: //RSSImp
|
case 3: //RSSImp
|
||||||
rssWidget->on_delStream_button_clicked();
|
rssWidget->deleteSelectedItems();
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!hashes.size()) return;
|
if(hashes.empty()) return;
|
||||||
int ret;
|
int ret;
|
||||||
if(inDownloadList) {
|
if(inDownloadList) {
|
||||||
ret = QMessageBox::question(
|
ret = QMessageBox::question(
|
||||||
@@ -953,6 +958,7 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||||||
bool useTorrentAdditionDialog = settings.value(QString::fromUtf8("Preferences/Downloads/AdditionDialog"), true).toBool();
|
bool useTorrentAdditionDialog = settings.value(QString::fromUtf8("Preferences/Downloads/AdditionDialog"), true).toBool();
|
||||||
foreach(QString param, params) {
|
foreach(QString param, params) {
|
||||||
param = param.trimmed();
|
param = param.trimmed();
|
||||||
|
if(param.startsWith("--")) continue;
|
||||||
if(param.startsWith(QString::fromUtf8("http://"), Qt::CaseInsensitive) || param.startsWith(QString::fromUtf8("ftp://"), Qt::CaseInsensitive) || param.startsWith(QString::fromUtf8("https://"), Qt::CaseInsensitive)) {
|
if(param.startsWith(QString::fromUtf8("http://"), Qt::CaseInsensitive) || param.startsWith(QString::fromUtf8("ftp://"), Qt::CaseInsensitive) || param.startsWith(QString::fromUtf8("https://"), Qt::CaseInsensitive)) {
|
||||||
BTSession->downloadFromUrl(param);
|
BTSession->downloadFromUrl(param);
|
||||||
}else{
|
}else{
|
||||||
@@ -1027,7 +1033,7 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
|||||||
// Connection
|
// Connection
|
||||||
// * Ports binding
|
// * Ports binding
|
||||||
unsigned short old_listenPort = BTSession->getListenPort();
|
unsigned short old_listenPort = BTSession->getListenPort();
|
||||||
BTSession->setListeningPortsRange(options->getPorts());
|
BTSession->setListeningPort(options->getPort());
|
||||||
unsigned short new_listenPort = BTSession->getListenPort();
|
unsigned short new_listenPort = BTSession->getListenPort();
|
||||||
if(new_listenPort != old_listenPort) {
|
if(new_listenPort != old_listenPort) {
|
||||||
BTSession->addConsoleMessage(tr("qBittorrent is bound to port: TCP/%1", "e.g: qBittorrent is bound to port: 6881").arg( misc::toQString(new_listenPort)));
|
BTSession->addConsoleMessage(tr("qBittorrent is bound to port: TCP/%1", "e.g: qBittorrent is bound to port: 6881").arg( misc::toQString(new_listenPort)));
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1005 B |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 813 B |
BIN
src/Icons/oxygen/application-x-kgetlist-no.png
Normal file
|
After Width: | Height: | Size: 743 B |
BIN
src/Icons/oxygen/application-x-kgetlist.png
Normal file
|
After Width: | Height: | Size: 659 B |
|
Before Width: | Height: | Size: 2.1 KiB |
BIN
src/Icons/oxygen/document-new.png
Normal file
|
After Width: | Height: | Size: 873 B |
BIN
src/Icons/oxygen/edit-find.png
Normal file
|
After Width: | Height: | Size: 627 B |
BIN
src/Icons/oxygen/folder-new.png
Normal file
|
After Width: | Height: | Size: 923 B |
BIN
src/Icons/oxygen/mail-folder-inbox.png
Normal file
|
After Width: | Height: | Size: 739 B |
BIN
src/Icons/oxygen/preferences-desktop.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
src/Icons/oxygen/remove.png
Executable file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
src/Icons/oxygen/tab-close.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
src/Icons/oxygen/view-refresh.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
src/Icons/oxygen/wallet.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
@@ -1,23 +1,31 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Categories=Qt;Network;P2P
|
Categories=Qt;Network;P2P;
|
||||||
Comment=V1.5.0
|
Comment=V1.5.4
|
||||||
Exec=qbittorrent %f
|
Exec=qbittorrent %f
|
||||||
GenericName=Bittorrent client
|
GenericName=Bittorrent client
|
||||||
GenericName[bg]=Торент клиент
|
GenericName[bg]=Торент клиент
|
||||||
|
GenericName[cs]=Bittorrent klient
|
||||||
GenericName[de]=Bittorren Client
|
GenericName[de]=Bittorren Client
|
||||||
GenericName[el]=Τορεντ πελάτης
|
GenericName[el]=Bittorrent πελάτης
|
||||||
GenericName[es]=Cliente Bittorrent
|
GenericName[es]=Cliente Bittorrent
|
||||||
|
GenericName[fi]=Bittorrent-ohjelma
|
||||||
GenericName[fr]=Client Bittorrent
|
GenericName[fr]=Client Bittorrent
|
||||||
|
GenericName[hu]=Bittorrent kliens
|
||||||
GenericName[it]=Client Bittorrent
|
GenericName[it]=Client Bittorrent
|
||||||
GenericName[ja]=Bittorrent クライアント
|
GenericName[ja]=Bittorrent クライアント
|
||||||
GenericName[ko]=비토렌트 클라이언트
|
GenericName[ko]=비토렌트 클라이언트
|
||||||
GenericName[nl]=Bittorrent client
|
GenericName[nl]=Bittorrent-cliënt
|
||||||
GenericName[pl]=Klient Bittorrent
|
GenericName[pl]=Klient Bittorrent
|
||||||
|
GenericName[pt]=Cliente Bittorrent
|
||||||
|
GenericName[pt_BR]=Cliente Bittorrent
|
||||||
|
GenericName[ro]=Client Bittorrent
|
||||||
GenericName[ru]=клиент Bittorrent
|
GenericName[ru]=клиент Bittorrent
|
||||||
|
GenericName[sk]=Klient siete Bittorrent
|
||||||
GenericName[sv]=Bittorrent-klient
|
GenericName[sv]=Bittorrent-klient
|
||||||
GenericName[tr]=Bittorrent istemcisi
|
GenericName[tr]=Bittorrent istemcisi
|
||||||
GenericName[uk]=Bittorrent-клієнт
|
GenericName[uk]=Bittorrent-клієнт
|
||||||
GenericName[zh]=Bittorrent之用户
|
GenericName[zh]=Bittorrent之用户
|
||||||
|
GenericName[zh_TW]=Bittorrent客戶端
|
||||||
Icon=qbittorrent
|
Icon=qbittorrent
|
||||||
MimeType=application/x-bittorrent;
|
MimeType=application/x-bittorrent;
|
||||||
Name=qBittorrent
|
Name=qBittorrent
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 948 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
@@ -33,6 +33,7 @@
|
|||||||
#include <QStandardItemModel>
|
#include <QStandardItemModel>
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
#include <QSortFilterProxyModel>
|
||||||
|
|
||||||
#include "SearchTab.h"
|
#include "SearchTab.h"
|
||||||
#include "SearchListDelegate.h"
|
#include "SearchListDelegate.h"
|
||||||
@@ -45,7 +46,7 @@
|
|||||||
#define SEARCH_LEECHERS 3
|
#define SEARCH_LEECHERS 3
|
||||||
#define SEARCH_ENGINE 4
|
#define SEARCH_ENGINE 4
|
||||||
|
|
||||||
SearchTab::SearchTab(SearchEngine *parent) : QWidget()
|
SearchTab::SearchTab(SearchEngine *parent) : QWidget(), parent(parent)
|
||||||
{
|
{
|
||||||
box=new QVBoxLayout();
|
box=new QVBoxLayout();
|
||||||
results_lbl=new QLabel();
|
results_lbl=new QLabel();
|
||||||
@@ -62,27 +63,46 @@ SearchTab::SearchTab(SearchEngine *parent) : QWidget()
|
|||||||
SearchListModel->setHeaderData(SEARCH_SEEDERS, Qt::Horizontal, tr("Seeders", "i.e: Number of full sources"));
|
SearchListModel->setHeaderData(SEARCH_SEEDERS, Qt::Horizontal, tr("Seeders", "i.e: Number of full sources"));
|
||||||
SearchListModel->setHeaderData(SEARCH_LEECHERS, Qt::Horizontal, tr("Leechers", "i.e: Number of partial sources"));
|
SearchListModel->setHeaderData(SEARCH_LEECHERS, Qt::Horizontal, tr("Leechers", "i.e: Number of partial sources"));
|
||||||
SearchListModel->setHeaderData(SEARCH_ENGINE, Qt::Horizontal, tr("Search engine"));
|
SearchListModel->setHeaderData(SEARCH_ENGINE, Qt::Horizontal, tr("Search engine"));
|
||||||
resultsBrowser->setModel(SearchListModel);
|
|
||||||
resultsBrowser->hideColumn(URL_COLUMN); // Hide url column
|
proxyModel = new QSortFilterProxyModel();
|
||||||
|
proxyModel->setDynamicSortFilter(true);
|
||||||
|
proxyModel->setSourceModel(SearchListModel);
|
||||||
|
resultsBrowser->setModel(proxyModel);
|
||||||
|
|
||||||
SearchDelegate = new SearchListDelegate();
|
SearchDelegate = new SearchListDelegate();
|
||||||
resultsBrowser->setItemDelegate(SearchDelegate);
|
resultsBrowser->setItemDelegate(SearchDelegate);
|
||||||
// Make search list header clickable for sorting
|
|
||||||
resultsBrowser->header()->setClickable(true);
|
resultsBrowser->hideColumn(URL_COLUMN); // Hide url column
|
||||||
resultsBrowser->header()->setSortIndicatorShown(true);
|
|
||||||
|
resultsBrowser->setRootIsDecorated(false);
|
||||||
|
resultsBrowser->setAllColumnsShowFocus(true);
|
||||||
|
resultsBrowser->setSortingEnabled(true);
|
||||||
|
|
||||||
// Connect signals to slots (search part)
|
// Connect signals to slots (search part)
|
||||||
connect(resultsBrowser, SIGNAL(doubleClicked(const QModelIndex&)), parent, SLOT(downloadSelectedItem(const QModelIndex&)));
|
connect(resultsBrowser, SIGNAL(doubleClicked(const QModelIndex&)), this, SLOT(downloadSelectedItem(const QModelIndex&)));
|
||||||
connect(resultsBrowser->header(), SIGNAL(sectionPressed(int)), this, SLOT(sortSearchList(int)));
|
|
||||||
|
|
||||||
// Load last columns width for search results list
|
// Load last columns width for search results list
|
||||||
if(!loadColWidthResultsList()){
|
if(!loadColWidthResultsList()){
|
||||||
resultsBrowser->header()->resizeSection(0, 275);
|
resultsBrowser->header()->resizeSection(0, 275);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sort by Seeds
|
||||||
|
resultsBrowser->sortByColumn(SEEDERS, Qt::DescendingOrder);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchTab::downloadSelectedItem(const QModelIndex& index) {
|
||||||
|
QString engine_url = proxyModel->data(proxyModel->index(index.row(), ENGINE_URL_COLUMN)).toString();
|
||||||
|
QString torrent_url = proxyModel->data(proxyModel->index(index.row(), URL_COLUMN)).toString();
|
||||||
|
setRowColor(index.row(), "red");
|
||||||
|
parent->downloadTorrent(engine_url, torrent_url);
|
||||||
}
|
}
|
||||||
|
|
||||||
SearchTab::~SearchTab() {
|
SearchTab::~SearchTab() {
|
||||||
|
delete box;
|
||||||
|
delete results_lbl;
|
||||||
delete resultsBrowser;
|
delete resultsBrowser;
|
||||||
delete SearchListModel;
|
delete SearchListModel;
|
||||||
|
delete proxyModel;
|
||||||
delete SearchDelegate;
|
delete SearchDelegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,72 +135,23 @@ QTreeView* SearchTab::getCurrentTreeView()
|
|||||||
return resultsBrowser;
|
return resultsBrowser;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStandardItemModel* SearchTab::getCurrentSearchListModel()
|
QSortFilterProxyModel* SearchTab::getCurrentSearchListProxy() const
|
||||||
|
{
|
||||||
|
return proxyModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStandardItemModel* SearchTab::getCurrentSearchListModel() const
|
||||||
{
|
{
|
||||||
return SearchListModel;
|
return SearchListModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the color of a row in data model
|
// Set the color of a row in data model
|
||||||
void SearchTab::setRowColor(int row, QString color){
|
void SearchTab::setRowColor(int row, QString color){
|
||||||
for(int i=0; i<SearchListModel->columnCount(); ++i){
|
proxyModel->setDynamicSortFilter(false);
|
||||||
SearchListModel->setData(SearchListModel->index(row, i), QVariant(QColor(color)), Qt::ForegroundRole);
|
for(int i=0; i<proxyModel->columnCount(); ++i){
|
||||||
|
proxyModel->setData(proxyModel->index(row, i), QVariant(QColor(color)), Qt::ForegroundRole);
|
||||||
}
|
}
|
||||||
|
proxyModel->setDynamicSortFilter(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SearchTab::sortSearchList(int index){
|
|
||||||
static Qt::SortOrder sortOrder = Qt::AscendingOrder;
|
|
||||||
if(resultsBrowser->header()->sortIndicatorSection() == index){
|
|
||||||
sortOrder = (sortOrder == Qt::DescendingOrder) ? Qt::AscendingOrder : Qt::DescendingOrder; ;
|
|
||||||
}
|
|
||||||
resultsBrowser->header()->setSortIndicator(index, sortOrder);
|
|
||||||
switch(index){
|
|
||||||
case SEEDERS:
|
|
||||||
case LEECHERS:
|
|
||||||
case SIZE:
|
|
||||||
sortSearchListInt(index, sortOrder);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
sortSearchListString(index, sortOrder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SearchTab::sortSearchListInt(int index, Qt::SortOrder sortOrder){
|
|
||||||
QList<QPair<int, qlonglong> > lines;
|
|
||||||
// Insertion sorting
|
|
||||||
for(int i=0; i<SearchListModel->rowCount(); ++i){
|
|
||||||
misc::insertSort(lines, QPair<int,qlonglong>(i, SearchListModel->data(SearchListModel->index(i, index)).toLongLong()), sortOrder);
|
|
||||||
}
|
|
||||||
// Insert items in new model, in correct order
|
|
||||||
int nbRows_old = lines.size();
|
|
||||||
for(int row=0; row<lines.size(); ++row){
|
|
||||||
SearchListModel->insertRow(SearchListModel->rowCount());
|
|
||||||
int sourceRow = lines[row].first;
|
|
||||||
for(int col=0; col<6; ++col){
|
|
||||||
SearchListModel->setData(SearchListModel->index(nbRows_old+row, col), SearchListModel->data(SearchListModel->index(sourceRow, col)));
|
|
||||||
SearchListModel->setData(SearchListModel->index(nbRows_old+row, col), SearchListModel->data(SearchListModel->index(sourceRow, col), Qt::ForegroundRole), Qt::ForegroundRole);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Remove old rows
|
|
||||||
SearchListModel->removeRows(0, nbRows_old);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SearchTab::sortSearchListString(int index, Qt::SortOrder sortOrder){
|
|
||||||
QList<QPair<int, QString> > lines;
|
|
||||||
// Insetion sorting
|
|
||||||
for(int i=0; i<SearchListModel->rowCount(); ++i){
|
|
||||||
misc::insertSortString(lines, QPair<int, QString>(i, SearchListModel->data(SearchListModel->index(i, index)).toString()), sortOrder);
|
|
||||||
}
|
|
||||||
// Insert items in new model, in correct order
|
|
||||||
int nbRows_old = lines.size();
|
|
||||||
for(int row=0; row<nbRows_old; ++row){
|
|
||||||
SearchListModel->insertRow(SearchListModel->rowCount());
|
|
||||||
int sourceRow = lines[row].first;
|
|
||||||
for(int col=0; col<6; ++col){
|
|
||||||
SearchListModel->setData(SearchListModel->index(nbRows_old+row, col), SearchListModel->data(SearchListModel->index(sourceRow, col)));
|
|
||||||
SearchListModel->setData(SearchListModel->index(nbRows_old+row, col), SearchListModel->data(SearchListModel->index(sourceRow, col), Qt::ForegroundRole), Qt::ForegroundRole);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Remove old rows
|
|
||||||
SearchListModel->removeRows(0, nbRows_old);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -41,31 +41,34 @@ class SearchEngine;
|
|||||||
class QTreeView;
|
class QTreeView;
|
||||||
class QHeaderView;
|
class QHeaderView;
|
||||||
class QStandardItemModel;
|
class QStandardItemModel;
|
||||||
|
class QSortFilterProxyModel;
|
||||||
|
|
||||||
class SearchTab : public QWidget, public Ui::search_engine
|
class SearchTab: public QWidget, public Ui::search_engine {
|
||||||
{
|
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVBoxLayout *box;
|
QVBoxLayout *box;
|
||||||
QLabel *results_lbl;
|
QLabel *results_lbl;
|
||||||
QTreeView *resultsBrowser;
|
QTreeView *resultsBrowser;
|
||||||
QStandardItemModel *SearchListModel;
|
QStandardItemModel *SearchListModel;
|
||||||
|
QSortFilterProxyModel *proxyModel;
|
||||||
SearchListDelegate *SearchDelegate;
|
SearchListDelegate *SearchDelegate;
|
||||||
public:
|
SearchEngine *parent;
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
void downloadSelectedItem(const QModelIndex& index);
|
||||||
|
|
||||||
|
public:
|
||||||
SearchTab(SearchEngine *parent);
|
SearchTab(SearchEngine *parent);
|
||||||
~SearchTab();
|
~SearchTab();
|
||||||
bool loadColWidthResultsList();
|
bool loadColWidthResultsList();
|
||||||
QLabel * getCurrentLabel();
|
QLabel * getCurrentLabel();
|
||||||
QStandardItemModel * getCurrentSearchListModel();
|
QStandardItemModel* getCurrentSearchListModel() const;
|
||||||
|
QSortFilterProxyModel* getCurrentSearchListProxy() const;
|
||||||
QTreeView * getCurrentTreeView();
|
QTreeView * getCurrentTreeView();
|
||||||
void setRowColor(int row, QString color);
|
void setRowColor(int row, QString color);
|
||||||
QHeaderView* header() const;
|
QHeaderView* header() const;
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void sortSearchList(int index);
|
|
||||||
void sortSearchListInt(int index, Qt::SortOrder sortOrder);
|
|
||||||
void sortSearchListString(int index, Qt::SortOrder sortOrder);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -114,6 +114,9 @@ class bittorrent : public QObject {
|
|||||||
public slots:
|
public slots:
|
||||||
QTorrentHandle addTorrent(QString path, bool fromScanDir = false, QString from_url = QString(), bool resumed = false);
|
QTorrentHandle addTorrent(QString path, bool fromScanDir = false, QString from_url = QString(), bool resumed = false);
|
||||||
QTorrentHandle addMagnetUri(QString magnet_uri, bool resumed=false);
|
QTorrentHandle addMagnetUri(QString magnet_uri, bool resumed=false);
|
||||||
|
void importOldTorrents();
|
||||||
|
void applyFormerAttributeFiles(QTorrentHandle h);
|
||||||
|
void importOldTempData(QString torrent_path);
|
||||||
void loadSessionState();
|
void loadSessionState();
|
||||||
void saveSessionState();
|
void saveSessionState();
|
||||||
void downloadFromUrl(QString url);
|
void downloadFromUrl(QString url);
|
||||||
@@ -133,7 +136,6 @@ class bittorrent : public QObject {
|
|||||||
void enableIPFilter(QString filter);
|
void enableIPFilter(QString filter);
|
||||||
void disableIPFilter();
|
void disableIPFilter();
|
||||||
void setQueueingEnabled(bool enable);
|
void setQueueingEnabled(bool enable);
|
||||||
void saveTorrentSpeedLimits(QString hash);
|
|
||||||
void loadTorrentSpeedLimits(QString hash);
|
void loadTorrentSpeedLimits(QString hash);
|
||||||
void handleDownloadFailure(QString url, QString reason);
|
void handleDownloadFailure(QString url, QString reason);
|
||||||
void loadWebSeeds(QString fileHash);
|
void loadWebSeeds(QString fileHash);
|
||||||
@@ -141,7 +143,7 @@ class bittorrent : public QObject {
|
|||||||
void decreaseDlTorrentPriority(QString hash);
|
void decreaseDlTorrentPriority(QString hash);
|
||||||
void downloadUrlAndSkipDialog(QString url, QString save_path=QString::null);
|
void downloadUrlAndSkipDialog(QString url, QString save_path=QString::null);
|
||||||
// Session configuration - Setters
|
// Session configuration - Setters
|
||||||
void setListeningPortsRange(std::pair<unsigned short, unsigned short> ports);
|
void setListeningPort(int port);
|
||||||
void setMaxConnections(int maxConnec);
|
void setMaxConnections(int maxConnec);
|
||||||
void setMaxConnectionsPerTorrent(int max);
|
void setMaxConnectionsPerTorrent(int max);
|
||||||
void setMaxUploadsPerTorrent(int max);
|
void setMaxUploadsPerTorrent(int max);
|
||||||
@@ -167,6 +169,8 @@ class bittorrent : public QObject {
|
|||||||
void addPeerBanMessage(QString msg, bool from_ipfilter);
|
void addPeerBanMessage(QString msg, bool from_ipfilter);
|
||||||
void processDownloadedFile(QString, QString);
|
void processDownloadedFile(QString, QString);
|
||||||
void saveTrackerFile(QString hash);
|
void saveTrackerFile(QString hash);
|
||||||
|
void addMagnetSkipAddDlg(QString uri);
|
||||||
|
void downloadFromURLList(const QStringList& urls);
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void scanDirectory(QString);
|
void scanDirectory(QString);
|
||||||
|
|||||||
@@ -62,22 +62,22 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="addFile_button">
|
<widget class="QPushButton" name="addFile_button">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Add a file</string>
|
<string>Add file</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset resource="icons.qrc">
|
<iconset resource="icons.qrc">
|
||||||
<normaloff>:/Icons/add_file.png</normaloff>:/Icons/add_file.png</iconset>
|
<normaloff>:/Icons/oxygen/document-new.png</normaloff>:/Icons/oxygen/document-new.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="addFolder_button">
|
<widget class="QPushButton" name="addFolder_button">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Add a folder</string>
|
<string>Add folder</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset resource="icons.qrc">
|
<iconset resource="icons.qrc">
|
||||||
<normaloff>:/Icons/add_folder.png</normaloff>:/Icons/add_folder.png</iconset>
|
<normaloff>:/Icons/oxygen/folder-new.png</normaloff>:/Icons/oxygen/folder-new.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|||||||
@@ -166,10 +166,10 @@ void createtorrent::on_createButton_clicked(){
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QStringList trackers = allItems(trackers_list);
|
QStringList trackers = allItems(trackers_list);
|
||||||
if(!trackers.size()){
|
/*if(!trackers.size()){
|
||||||
QMessageBox::critical(0, tr("No tracker path set"), tr("Please set at least one tracker"));
|
QMessageBox::critical(0, tr("No tracker path set"), tr("Please set at least one tracker"));
|
||||||
return;
|
return;
|
||||||
}
|
}*/
|
||||||
QString destination = QFileDialog::getSaveFileName(this, tr("Select destination torrent file"), QDir::homePath(), tr("Torrent Files")+QString::fromUtf8(" (*.torrent)"));
|
QString destination = QFileDialog::getSaveFileName(this, tr("Select destination torrent file"), QDir::homePath(), tr("Torrent Files")+QString::fromUtf8(" (*.torrent)"));
|
||||||
if(!destination.isEmpty()) {
|
if(!destination.isEmpty()) {
|
||||||
if(!destination.endsWith(QString::fromUtf8(".torrent")))
|
if(!destination.endsWith(QString::fromUtf8(".torrent")))
|
||||||
|
|||||||