Compare commits
76 Commits
release-1.
...
release-1.
Author | SHA1 | Date | |
---|---|---|---|
![]() |
cca122e9ce | ||
![]() |
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 | ||
![]() |
298f1e6a9a | ||
![]() |
2926745102 | ||
![]() |
c6003c7403 | ||
![]() |
66e5a6672a | ||
![]() |
c35500dd29 | ||
![]() |
f80bd42361 | ||
![]() |
0b9c05d41b | ||
![]() |
2477dc1fc0 | ||
![]() |
706362333d | ||
![]() |
6fcf25af52 | ||
![]() |
c8e8306e0a | ||
![]() |
e429126934 | ||
![]() |
7e71de558a | ||
![]() |
09d8a4797d | ||
![]() |
1bcb8b1ed8 | ||
![]() |
d132d50f4d | ||
![]() |
e619b6977a | ||
![]() |
2742a54d6e | ||
![]() |
360a327d7d | ||
![]() |
b659303419 | ||
![]() |
43108712be |
21
Changelog
@@ -1,3 +1,24 @@
|
||||
* Unknown - Christophe Dumez <chris@qbittorrent.org> - v1.5.0
|
||||
- FEATURE: Added Magnet URI support
|
||||
- FEATURE: Make use of torrent enclosure in RSS feeds for direct download
|
||||
- FEATURE: Implemented a RSS feed downloader with filter support
|
||||
- FEATURE: Save old RSS item to hard disk to remember them on start up
|
||||
- FEATURE: Display free disk space in torrent addition dialog
|
||||
- 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 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
|
||||
- BUGFIX: torrent resume code rewrited
|
||||
- COSMETIC: Redesigned RSS tab to improve usability
|
||||
|
||||
* 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
|
||||
- FEATURE: Display swarm information in lists
|
||||
- FEATURE: Allow to define temporary download folder
|
||||
|
@@ -23,7 +23,7 @@ public:
|
||||
if(!libs.isEmpty())
|
||||
conf->addLib(libs);
|
||||
if(!conf->findPkgConfig("libtorrent-rasterbar", mode, adv_ver, &version, &incs, &libs, &other))
|
||||
printf("\nWarning: libtorrent-rasterbar v%s was detected. Although it will compile and run, you will probably experience some bugs. Please consider updating to v%s!\n", version.toUtf8().data(), adv_ver.toUtf8().data());
|
||||
printf("\nWarning: libtorrent-rasterbar v%s was detected. Although it will compile and run, you will probably experience some bugs. Please consider updating to v%s!\n", version.toLocal8Bit().data(), adv_ver.toUtf8().data());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
480
src/FeedDownloader.h
Normal file
546
src/FeedDownloader.ui
Normal file
@@ -64,6 +64,8 @@ FinishedTorrents::FinishedTorrents(QObject *parent, bittorrent *BTSession) : par
|
||||
if(!loadColWidthFinishedList()){
|
||||
finishedList->header()->resizeSection(0, 200);
|
||||
}
|
||||
// Connect BTSession signals
|
||||
connect(BTSession, SIGNAL(metadataReceived(QTorrentHandle&)), this, SLOT(updateMetadata(QTorrentHandle&)));
|
||||
// Make download list header clickable for sorting
|
||||
finishedList->header()->setClickable(true);
|
||||
finishedList->header()->setSortIndicatorShown(true);
|
||||
@@ -79,6 +81,8 @@ FinishedTorrents::FinishedTorrents(QObject *parent, bittorrent *BTSession) : par
|
||||
actionDelete_Permanently->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/delete_perm.png")));
|
||||
actionTorrent_Properties->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/properties.png")));
|
||||
actionSet_upload_limit->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/seeding.png")));
|
||||
actionCopy_magnet_link->setIcon(QIcon(QString::fromUtf8(":/Icons/magnet.png")));
|
||||
|
||||
connect(actionPause, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionPause_triggered()));
|
||||
connect(actionStart, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionStart_triggered()));
|
||||
connect(actionDelete, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionDelete_triggered()));
|
||||
@@ -88,6 +92,7 @@ FinishedTorrents::FinishedTorrents(QObject *parent, bittorrent *BTSession) : par
|
||||
connect(actionBuy_it, SIGNAL(triggered()), (GUI*)parent, SLOT(goBuyPage()));
|
||||
connect(actionTorrent_Properties, SIGNAL(triggered()), this, SLOT(propertiesSelection()));
|
||||
connect(actionForce_recheck, SIGNAL(triggered()), this, SLOT(forceRecheck()));
|
||||
connect(actionCopy_magnet_link, SIGNAL(triggered()), (GUI*)parent, SLOT(copyMagnetURI()));
|
||||
|
||||
connect(actionHOSColName, SIGNAL(triggered()), this, SLOT(hideOrShowColumnName()));
|
||||
connect(actionHOSColSize, SIGNAL(triggered()), this, SLOT(hideOrShowColumnSize()));
|
||||
@@ -266,7 +271,18 @@ void FinishedTorrents::on_actionSet_upload_limit_triggered(){
|
||||
new BandwidthAllocationDialog(this, true, BTSession, hashes);
|
||||
}
|
||||
|
||||
void FinishedTorrents::updateMetadata(QTorrentHandle &h) {
|
||||
QString hash = h.hash();
|
||||
int row = getRowFromHash(hash);
|
||||
if(row != -1) {
|
||||
qDebug("Updating torrent metadata in download list");
|
||||
finishedListModel->setData(finishedListModel->index(row, F_NAME), QVariant(h.name()));
|
||||
finishedListModel->setData(finishedListModel->index(row, F_SIZE), QVariant((qlonglong)h.actual_size()));
|
||||
}
|
||||
}
|
||||
|
||||
void FinishedTorrents::updateTorrent(QTorrentHandle h) {
|
||||
if(!h.is_valid()) return;
|
||||
QString hash = h.hash();
|
||||
int row = getRowFromHash(hash);
|
||||
if(row == -1){
|
||||
@@ -433,6 +449,7 @@ void FinishedTorrents::displayFinishedListMenu(const QPoint&){
|
||||
myFinishedListMenu.addAction(actionOpen_destination_folder);
|
||||
myFinishedListMenu.addAction(actionTorrent_Properties);
|
||||
myFinishedListMenu.addSeparator();
|
||||
myFinishedListMenu.addAction(actionCopy_magnet_link);
|
||||
myFinishedListMenu.addAction(actionBuy_it);
|
||||
|
||||
// Call menu
|
||||
|
@@ -93,6 +93,7 @@ class FinishedTorrents : public QWidget, public Ui::seeding {
|
||||
void deleteTorrent(QString hash);
|
||||
void showPropertiesFromHash(QString hash);
|
||||
void loadLastSortedColumn();
|
||||
void updateMetadata(QTorrentHandle &h);
|
||||
|
||||
signals:
|
||||
void torrentMovedFromFinishedList(QString);
|
||||
|
2457
src/GUI.cpp
@@ -143,6 +143,7 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
||||
void fullDiskError(QTorrentHandle& h, QString msg) const;
|
||||
void handleDownloadFromUrlFailure(QString, QString) const;
|
||||
void createSystrayDelayed();
|
||||
void setPaused(QTorrentHandle &h) const;
|
||||
// Keyboard shortcuts
|
||||
void createKeyboardShortcuts();
|
||||
void displayDownTab() const;
|
||||
@@ -191,6 +192,7 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
||||
void setTabText(int index, QString text) const;
|
||||
void openDestinationFolder() const;
|
||||
void goBuyPage() const;
|
||||
void copyMagnetURI() const;
|
||||
void updateRatio();
|
||||
|
||||
protected:
|
||||
|
Before Width: | Height: | Size: 1005 B |
Before Width: | Height: | Size: 1.3 KiB |
BIN
src/Icons/magnet.png
Normal file
After Width: | Height: | Size: 7.0 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/list-add.png
Normal file
After Width: | Height: | Size: 907 B |
BIN
src/Icons/oxygen/list-remove.png
Normal file
After Width: | Height: | Size: 498 B |
BIN
src/Icons/oxygen/mail-folder-inbox.png
Normal file
After Width: | Height: | Size: 739 B |
0
src/Icons/skin/remove.png → src/Icons/oxygen/remove.png
Normal file → Executable file
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 739 B After Width: | Height: | Size: 752 B |
BIN
src/Icons/oxygen/view-refresh.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
@@ -1,6 +1,6 @@
|
||||
[Desktop Entry]
|
||||
Categories=Qt;Network;P2P
|
||||
Comment=V1.4.0
|
||||
Comment=V1.5.0
|
||||
Exec=qbittorrent %f
|
||||
GenericName=Bittorrent client
|
||||
GenericName[bg]=Торент клиент
|
||||
|
Before Width: | Height: | Size: 948 B |
Before Width: | Height: | Size: 842 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 629 B After Width: | Height: | Size: 722 B |
@@ -76,6 +76,7 @@ class bittorrent : public QObject {
|
||||
QString filterPath;
|
||||
bool queueingEnabled;
|
||||
QStringList url_skippingDlg;
|
||||
QHash<QString, QString> savepath_fromurl;
|
||||
|
||||
protected:
|
||||
QString getSavePath(QString hash);
|
||||
@@ -107,19 +108,22 @@ class bittorrent : public QObject {
|
||||
QStringList getConsoleMessages() const;
|
||||
QStringList getPeerBanMessages() const;
|
||||
qlonglong getETA(QString hash) const;
|
||||
bool useTemporaryFolder() const;
|
||||
QString getDefaultSavePath() const;
|
||||
|
||||
public slots:
|
||||
QTorrentHandle addTorrent(QString path, bool fromScanDir = false, QString from_url = QString(), bool resumed = false);
|
||||
QTorrentHandle addMagnetUri(QString magnet_uri, bool resumed=false);
|
||||
void loadSessionState();
|
||||
void saveSessionState();
|
||||
void downloadFromUrl(QString url);
|
||||
void downloadFromURLList(const QStringList& url_list);
|
||||
void deleteTorrent(QString hash, bool permanent = false);
|
||||
void startUpTorrents();
|
||||
/* Needed by Web UI */
|
||||
void pauseAllTorrents();
|
||||
void resumeAllTorrents();
|
||||
void pauseTorrent(QString hash);
|
||||
void resumeTorrent(QString hash);
|
||||
void resumeAllTorrents();
|
||||
/* End Web UI */
|
||||
void saveDHTEntry();
|
||||
void preAllocateAllFiles(bool b);
|
||||
@@ -129,15 +133,13 @@ class bittorrent : public QObject {
|
||||
void enableIPFilter(QString filter);
|
||||
void disableIPFilter();
|
||||
void setQueueingEnabled(bool enable);
|
||||
void resumeUnfinishedTorrents();
|
||||
void saveTorrentPriority(QString hash, int prio);
|
||||
void saveTorrentSpeedLimits(QString hash);
|
||||
void loadTorrentSpeedLimits(QString hash);
|
||||
void handleDownloadFailure(QString url, QString reason);
|
||||
void loadWebSeeds(QString fileHash);
|
||||
void increaseDlTorrentPriority(QString hash);
|
||||
void decreaseDlTorrentPriority(QString hash);
|
||||
void downloadUrlAndSkipDialog(QString);
|
||||
void downloadUrlAndSkipDialog(QString url, QString save_path=QString::null);
|
||||
// Session configuration - Setters
|
||||
void setListeningPortsRange(std::pair<unsigned short, unsigned short> ports);
|
||||
void setMaxConnections(int maxConnec);
|
||||
@@ -164,12 +166,13 @@ class bittorrent : public QObject {
|
||||
void addConsoleMessage(QString msg, QColor color=QApplication::palette().color(QPalette::WindowText));
|
||||
void addPeerBanMessage(QString msg, bool from_ipfilter);
|
||||
void processDownloadedFile(QString, QString);
|
||||
void saveTrackerFile(QString hash);
|
||||
void addMagnetSkipAddDlg(QString uri);
|
||||
|
||||
protected slots:
|
||||
void scanDirectory(QString);
|
||||
void readAlerts();
|
||||
bool loadTrackerFile(QString hash);
|
||||
void saveTrackerFile(QString hash);
|
||||
void loadTrackerFile(QString hash);
|
||||
void deleteBigRatios();
|
||||
|
||||
signals:
|
||||
@@ -185,6 +188,8 @@ class bittorrent : public QObject {
|
||||
void updateFileSize(QString hash);
|
||||
void downloadFromUrlFailure(QString url, QString reason);
|
||||
void torrentFinishedChecking(QTorrentHandle& h);
|
||||
void metadataReceived(QTorrentHandle &h);
|
||||
void torrentPaused(QTorrentHandle &h);
|
||||
};
|
||||
|
||||
#endif
|
||||
|