mirror of
https://github.com/qbittorrent/qBittorrent
synced 2024-11-19 12:27:16 +01:00
- Queued torrents are now identified in Web UI
- Improved transfer list update for queued torrents - Allow to show/hide top toolbar - top toolbar is now hidden as a default - Connection status is now displayed in status bar (bottom) - Removed "Disconnected" connection status (bad detection) - Added increase/decrease priority actions to Edit menu - Added keyboard shortcuts for increase/decrease priority actions
This commit is contained in:
parent
c7a289d183
commit
ff26ea94f5
@ -4,8 +4,11 @@
|
||||
- FEATURE: The number of DHT nodes is displayed
|
||||
- FEATURE: RSS can now be disabled from program preferences
|
||||
- BUGFIX: Disable ETA calculation when ETA column is hidden
|
||||
- COSMETIC: Transfer speed, ratio and DHT nodes are displayed in status bar
|
||||
- BUGFIX: Removed "disconnected" connection state, detection was far from perfect
|
||||
- COSMETIC: Transfer speed, ratio, connection status and DHT nodes are displayed in status bar
|
||||
- COSMETIC: RSS Tab is now hidden as a default
|
||||
- COSMETIC: Allow to hide or display top toolbar
|
||||
- COSMETIC: Top toolbar is now hidden as a default
|
||||
|
||||
* Fri Aug 01 2008 - Christophe Dumez <chris@qbittorrent.org> - v1.1.0
|
||||
- FEATURE: Web interface to control qbittorrent (Ishan Arora)
|
||||
|
46
TODO
46
TODO
@ -1,46 +1,4 @@
|
||||
// Easy
|
||||
- Translations into as many languages as possible
|
||||
- Use Launchpad/Rosetta for translations once it supports TS files
|
||||
|
||||
// Intermediate
|
||||
- Port on MacOS, Windows (and create an installer for Windows) - Slow progress
|
||||
- Add some transparency (menus,...), improve look / usabilty
|
||||
- Skins support? (contact Mateusz)
|
||||
|
||||
// Harder
|
||||
- Torrent scheduler ala µtorrent/Bitcomet
|
||||
|
||||
// Waiting for libtorrent
|
||||
- Allow to prioritize torrents (may code this in qBittorrent?)
|
||||
|
||||
// Unsure
|
||||
- Display the peers we are connected to for each torrent with infos (like flag, dl/up speeds, ...)
|
||||
- Azureus spoofing to prevent ban from trackers?
|
||||
- Option to shutdown computer when downloads are finished
|
||||
- NAT checker/Tester
|
||||
- Display hard drive space left?
|
||||
- Make use of dbus on Linux for the single instance instead of socket communication?
|
||||
(http://techbase.kde.org/Development/Tutorials/D-Bus/Accessing_Interfaces)
|
||||
- When favicon can't be downloaded, try to parse the webpage for:
|
||||
<link rel="icon" href="http://example.com/favicon.ico" type="image/vnd.microsoft.icon">
|
||||
* Be careful, the link can be relative
|
||||
- Improve search plugin install (choose in a list taken from plugins.qbittorrent.org)
|
||||
- support zipped torrents? (useful?)
|
||||
- Allow to limit the number of downloading torrents simultaneously (other are paused until a download finishes)
|
||||
See https://blueprints.launchpad.net/qbittorrent/
|
||||
|
||||
// in v1.2.0
|
||||
- Allow user to organize the downloads into categories/folders?
|
||||
|
||||
// in v1.1.0
|
||||
- Stop calculating ETAs when ETA column is hidden
|
||||
-> See https://blueprints.launchpad.net/qbittorrent
|
||||
|
||||
Translations updated:
|
||||
- French
|
||||
- Chinese
|
||||
- Polish
|
||||
- Portuguese
|
||||
- Brazilian
|
||||
- Slovak
|
||||
- Swedish
|
||||
- Romanian
|
||||
- Split download and uploads in Web UI (Ishan Ahora)
|
||||
|
@ -64,8 +64,8 @@ FinishedTorrents::FinishedTorrents(QObject *parent, bittorrent *BTSession) : par
|
||||
connect(finishedList, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(displayFinishedListMenu(const QPoint&)));
|
||||
finishedList->header()->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
connect(finishedList->header(), SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(displayFinishedHoSMenu(const QPoint&)));
|
||||
|
||||
connect(finishedList, SIGNAL(doubleClicked(const QModelIndex&)), this, SLOT(notifyTorrentDoubleClicked(const QModelIndex&)));
|
||||
connect(BTSession, SIGNAL(forceFinishedListUpdate()), this, SLOT(updateFinishedList()));
|
||||
actionDelete->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/delete.png")));
|
||||
actionPreview_file->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/preview.png")));
|
||||
actionDelete_Permanently->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/delete_perm.png")));
|
||||
@ -74,6 +74,8 @@ FinishedTorrents::FinishedTorrents(QObject *parent, bittorrent *BTSession) : par
|
||||
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()));
|
||||
connect(actionIncreasePriority, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionIncreasePriority_triggered()));
|
||||
connect(actionDecreasePriority, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionDecreasePriority_triggered()));
|
||||
connect(actionPreview_file, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionPreview_file_triggered()));
|
||||
connect(actionDelete_Permanently, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionDelete_Permanently_triggered()));
|
||||
connect(actionOpen_destination_folder, SIGNAL(triggered()), (GUI*)parent, SLOT(openDestinationFolder()));
|
||||
@ -407,6 +409,11 @@ void FinishedTorrents::displayFinishedListMenu(const QPoint& pos){
|
||||
myFinishedListMenu.addSeparator();
|
||||
myFinishedListMenu.addAction(actionOpen_destination_folder);
|
||||
myFinishedListMenu.addAction(actionTorrent_Properties);
|
||||
if(BTSession->isQueueingEnabled()) {
|
||||
myFinishedListMenu.addSeparator();
|
||||
myFinishedListMenu.addAction(actionIncreasePriority);
|
||||
myFinishedListMenu.addAction(actionDecreasePriority);
|
||||
}
|
||||
myFinishedListMenu.addSeparator();
|
||||
myFinishedListMenu.addAction(actionBuy_it);
|
||||
|
||||
|
41
src/GUI.cpp
41
src/GUI.cpp
@ -109,13 +109,10 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
||||
actionSet_global_upload_limit->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/seeding.png")));
|
||||
actionSet_global_download_limit->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/downloading.png")));
|
||||
actionDocumentation->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/qb_question.png")));
|
||||
connecStatusLblIcon = new QLabel();
|
||||
connecStatusLblIcon->setFrameShape(QFrame::NoFrame);
|
||||
connecStatusLblIcon->setPixmap(QPixmap(QString::fromUtf8(":/Icons/skin/disconnected.png")));
|
||||
connecStatusLblIcon->setToolTip(QString::fromUtf8("<b>")+tr("Connection status:")+QString::fromUtf8("</b><br>")+tr("Offline")+QString::fromUtf8("<br><i>")+tr("No peers found...")+QString::fromUtf8("</i>"));
|
||||
toolBar->addWidget(connecStatusLblIcon);
|
||||
prioSeparator = toolBar->insertSeparator(actionDecreasePriority);
|
||||
prioSeparator2 = menu_Edit->insertSeparator(actionDecreasePriority);
|
||||
prioSeparator->setVisible(false);
|
||||
prioSeparator2->setVisible(false);
|
||||
actionDelete_Permanently->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/delete_perm.png")));
|
||||
actionTorrent_Properties->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/properties.png")));
|
||||
actionCreate_torrent->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/new.png")));
|
||||
@ -209,6 +206,10 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
||||
show();
|
||||
}
|
||||
createKeyboardShortcuts();
|
||||
connecStatusLblIcon = new QLabel();
|
||||
connecStatusLblIcon->setFrameShape(QFrame::NoFrame);
|
||||
connecStatusLblIcon->setPixmap(QPixmap(QString::fromUtf8(":/Icons/skin/firewalled.png")));
|
||||
connecStatusLblIcon->setToolTip(QString::fromUtf8("<b>")+tr("Connection status:")+QString::fromUtf8("</b><br>")+QString::fromUtf8("<i>")+tr("No direct connections. This may indicate network configuration problems.")+QString::fromUtf8("</i>"));
|
||||
dlSpeedLbl = new QLabel(tr("DL: %1 KiB/s").arg("0.0"));
|
||||
upSpeedLbl = new QLabel(tr("UP: %1 KiB/s").arg("0.0"));
|
||||
ratioLbl = new QLabel(tr("Ratio: %1").arg("1.0"));
|
||||
@ -222,12 +223,17 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
|
||||
statusSep3 = new QFrame();
|
||||
statusSep3->setFixedWidth(1);
|
||||
statusSep3->setFrameStyle(QFrame::Box);
|
||||
statusSep4 = new QFrame();
|
||||
statusSep4->setFixedWidth(1);
|
||||
statusSep4->setFrameStyle(QFrame::Box);
|
||||
QMainWindow::statusBar()->addPermanentWidget(DHTLbl);
|
||||
QMainWindow::statusBar()->addPermanentWidget(statusSep1);
|
||||
QMainWindow::statusBar()->addPermanentWidget(dlSpeedLbl);
|
||||
QMainWindow::statusBar()->addPermanentWidget(connecStatusLblIcon);
|
||||
QMainWindow::statusBar()->addPermanentWidget(statusSep2);
|
||||
QMainWindow::statusBar()->addPermanentWidget(upSpeedLbl);
|
||||
QMainWindow::statusBar()->addPermanentWidget(dlSpeedLbl);
|
||||
QMainWindow::statusBar()->addPermanentWidget(statusSep3);
|
||||
QMainWindow::statusBar()->addPermanentWidget(upSpeedLbl);
|
||||
QMainWindow::statusBar()->addPermanentWidget(statusSep4);
|
||||
QMainWindow::statusBar()->addPermanentWidget(ratioLbl);
|
||||
qDebug("GUI Built");
|
||||
}
|
||||
@ -242,6 +248,7 @@ GUI::~GUI() {
|
||||
delete statusSep1;
|
||||
delete statusSep2;
|
||||
delete statusSep3;
|
||||
delete statusSep4;
|
||||
if(rssWidget != 0)
|
||||
delete rssWidget;
|
||||
delete searchEngine;
|
||||
@ -414,6 +421,8 @@ void GUI::createKeyboardShortcuts() {
|
||||
actionStart_All->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+Shift+S")));
|
||||
actionPause->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+P")));
|
||||
actionPause_All->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+Shift+P")));
|
||||
actionDecreasePriority->setShortcut(QKeySequence(QString::fromUtf8("Ctrl+-")));
|
||||
actionIncreasePriority->setShortcut(QKeySequence(QString::fromUtf8("Ctrl++")));
|
||||
}
|
||||
|
||||
// Keyboard shortcuts slots
|
||||
@ -927,6 +936,11 @@ void GUI::configureSession(bool deleteOptions) {
|
||||
setWindowTitle(tr("qBittorrent %1", "e.g: qBittorrent v0.x").arg(QString::fromUtf8(VERSION)));
|
||||
}
|
||||
displaySpeedInTitle = new_displaySpeedInTitle;
|
||||
if(options->isToolbarDisplayed()) {
|
||||
toolBar->setVisible(true);
|
||||
} else {
|
||||
toolBar->setVisible(false);
|
||||
}
|
||||
unsigned int new_refreshInterval = options->getRefreshInterval();
|
||||
if(refreshInterval != new_refreshInterval) {
|
||||
refreshInterval = new_refreshInterval;
|
||||
@ -1125,6 +1139,7 @@ void GUI::configureSession(bool deleteOptions) {
|
||||
actionDecreasePriority->setVisible(true);
|
||||
actionIncreasePriority->setVisible(true);
|
||||
prioSeparator->setVisible(true);
|
||||
prioSeparator2->setVisible(true);
|
||||
toolBar->layout()->setSpacing(7);
|
||||
}
|
||||
int max_torrents = options->getMaxActiveTorrents();
|
||||
@ -1142,6 +1157,7 @@ void GUI::configureSession(bool deleteOptions) {
|
||||
actionDecreasePriority->setVisible(false);
|
||||
actionIncreasePriority->setVisible(false);
|
||||
prioSeparator->setVisible(false);
|
||||
prioSeparator2->setVisible(false);
|
||||
toolBar->layout()->setSpacing(7);
|
||||
}
|
||||
}
|
||||
@ -1464,15 +1480,8 @@ void GUI::checkConnectionStatus() {
|
||||
connecStatusLblIcon->setPixmap(QPixmap(QString::fromUtf8(":/Icons/skin/connected.png")));
|
||||
connecStatusLblIcon->setToolTip(QString::fromUtf8("<b>")+tr("Connection Status:")+QString::fromUtf8("</b><br>")+tr("Online"));
|
||||
}else{
|
||||
if(sessionStatus.num_peers) {
|
||||
// Firewalled ?
|
||||
connecStatusLblIcon->setPixmap(QPixmap(QString::fromUtf8(":/Icons/skin/firewalled.png")));
|
||||
connecStatusLblIcon->setToolTip("<b>"+tr("Connection Status:")+QString::fromUtf8("</b><br>")+tr("Firewalled?", "i.e: Behind a firewall/router?")+QString::fromUtf8("<br><i>")+tr("No incoming connections...")+QString::fromUtf8("</i>"));
|
||||
}else{
|
||||
// Disconnected
|
||||
connecStatusLblIcon->setPixmap(QPixmap(QString::fromUtf8(":/Icons/skin/disconnected.png")));
|
||||
connecStatusLblIcon->setToolTip(QString::fromUtf8("<b>")+tr("Connection status:")+QString::fromUtf8("</b><br>")+tr("Offline")+QString::fromUtf8("<br><i>")+tr("No peers found...")+QString::fromUtf8("</i>"));
|
||||
}
|
||||
connecStatusLblIcon->setPixmap(QPixmap(QString::fromUtf8(":/Icons/skin/firewalled.png")));
|
||||
connecStatusLblIcon->setToolTip(QString::fromUtf8("<b>")+tr("Connection status:")+QString::fromUtf8("</b><br>")+QString::fromUtf8("<i>")+tr("No direct connections. This may indicate network configuration problems.")+QString::fromUtf8("</i>"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -83,6 +83,7 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
||||
QFrame *statusSep1;
|
||||
QFrame *statusSep2;
|
||||
QFrame *statusSep3;
|
||||
QFrame *statusSep4;
|
||||
// Keyboard shortcuts
|
||||
QShortcut *switchSearchShortcut;
|
||||
QShortcut *switchSearchShortcut2;
|
||||
@ -90,6 +91,7 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
||||
QShortcut *switchUpShortcut;
|
||||
QShortcut *switchRSSShortcut;
|
||||
QAction *prioSeparator;
|
||||
QAction *prioSeparator2;
|
||||
// Search
|
||||
SearchEngine *searchEngine;
|
||||
// RSS
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.5 KiB |
@ -41,6 +41,8 @@
|
||||
<addaction name="separator" />
|
||||
<addaction name="actionDelete" />
|
||||
<addaction name="actionDelete_Permanently" />
|
||||
<addaction name="actionDecreasePriority" />
|
||||
<addaction name="actionIncreasePriority" />
|
||||
</widget>
|
||||
<widget class="QMenu" name="menu_Help" >
|
||||
<property name="title" >
|
||||
|
@ -464,8 +464,10 @@ void bittorrent::updateUploadQueue() {
|
||||
}
|
||||
}
|
||||
}
|
||||
if(change)
|
||||
emit updateFinishedTorrentNumber();
|
||||
if(change) {
|
||||
emit updateFinishedTorrentNumber();
|
||||
emit forceFinishedListUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
void bittorrent::updateDownloadQueue() {
|
||||
@ -520,8 +522,10 @@ void bittorrent::updateDownloadQueue() {
|
||||
}
|
||||
}
|
||||
}
|
||||
if(change)
|
||||
if(change) {
|
||||
emit updateUnfinishedTorrentNumber();
|
||||
emit forceUnfinishedListUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate the ETA using GASA
|
||||
|
@ -212,6 +212,8 @@ class bittorrent : public QObject{
|
||||
void UPnPSuccess(QString msg);
|
||||
void updateFinishedTorrentNumber();
|
||||
void updateUnfinishedTorrentNumber();
|
||||
void forceUnfinishedListUpdate();
|
||||
void forceFinishedListUpdate();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -18,7 +18,16 @@
|
||||
<property name="spacing" >
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin" >
|
||||
<property name="leftMargin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -63,14 +72,6 @@
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="log_tab" >
|
||||
<property name="geometry" >
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>765</width>
|
||||
<height>138</height>
|
||||
</rect>
|
||||
</property>
|
||||
<attribute name="title" >
|
||||
<string>Log</string>
|
||||
</attribute>
|
||||
@ -78,7 +79,16 @@
|
||||
<property name="spacing" >
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin" >
|
||||
<property name="leftMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="topMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="rightMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="bottomMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -103,14 +113,6 @@
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="filter_tab" >
|
||||
<property name="geometry" >
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>765</width>
|
||||
<height>138</height>
|
||||
</rect>
|
||||
</property>
|
||||
<attribute name="title" >
|
||||
<string>IP filter</string>
|
||||
</attribute>
|
||||
@ -118,7 +120,16 @@
|
||||
<property name="spacing" >
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin" >
|
||||
<property name="leftMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="topMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="rightMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="bottomMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -183,8 +194,7 @@
|
||||
</action>
|
||||
<action name="actionOpen_destination_folder" >
|
||||
<property name="icon" >
|
||||
<iconset resource="icons.qrc" >
|
||||
<normaloff>:/Icons/folder.png</normaloff>:/Icons/folder.png</iconset>
|
||||
<iconset resource="icons.qrc" >:/Icons/folder.png</iconset>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>Open destination folder</string>
|
||||
@ -232,8 +242,7 @@
|
||||
</action>
|
||||
<action name="actionBuy_it" >
|
||||
<property name="icon" >
|
||||
<iconset resource="icons.qrc" >
|
||||
<normaloff>:/Icons/money.png</normaloff>:/Icons/money.png</iconset>
|
||||
<iconset resource="icons.qrc" >:/Icons/money.png</iconset>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>Buy it</string>
|
||||
@ -244,8 +253,22 @@
|
||||
<string>Priority</string>
|
||||
</property>
|
||||
</action>
|
||||
<zorder>tabBottom</zorder>
|
||||
<zorder></zorder>
|
||||
<action name="actionIncreasePriority" >
|
||||
<property name="icon" >
|
||||
<iconset resource="icons.qrc" >:/Icons/skin/increase.png</iconset>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>Increase priority</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionDecreasePriority" >
|
||||
<property name="icon" >
|
||||
<iconset resource="icons.qrc" >:/Icons/skin/decrease.png</iconset>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>Decrease priority</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="icons.qrc" />
|
||||
|
@ -78,6 +78,7 @@ DownloadingTorrents::DownloadingTorrents(QObject *parent, bittorrent *BTSession)
|
||||
connect(BTSession, SIGNAL(urlSeedProblem(QString, QString)), this, SLOT(addUrlSeedError(QString, QString)));
|
||||
connect(BTSession, SIGNAL(UPnPError(QString)), this, SLOT(displayUPnPError(QString)));
|
||||
connect(BTSession, SIGNAL(UPnPSuccess(QString)), this, SLOT(displayUPnPSuccess(QString)));
|
||||
connect(BTSession, SIGNAL(forceUnfinishedListUpdate()), this, SLOT(updateDlList()));
|
||||
|
||||
// Load last columns width for download list
|
||||
if(!loadColWidthDLList()) {
|
||||
@ -97,6 +98,8 @@ DownloadingTorrents::DownloadingTorrents(QObject *parent, bittorrent *BTSession)
|
||||
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()));
|
||||
connect(actionIncreasePriority, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionIncreasePriority_triggered()));
|
||||
connect(actionDecreasePriority, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionDecreasePriority_triggered()));
|
||||
connect(actionPreview_file, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionPreview_file_triggered()));
|
||||
connect(actionDelete_Permanently, SIGNAL(triggered()), (GUI*)parent, SLOT(on_actionDelete_Permanently_triggered()));
|
||||
connect(actionOpen_destination_folder, SIGNAL(triggered()), (GUI*)parent, SLOT(openDestinationFolder()));
|
||||
@ -318,6 +321,11 @@ void DownloadingTorrents::displayDLListMenu(const QPoint& pos) {
|
||||
myDLLlistMenu.addSeparator();
|
||||
myDLLlistMenu.addAction(actionOpen_destination_folder);
|
||||
myDLLlistMenu.addAction(actionTorrent_Properties);
|
||||
if(BTSession->isQueueingEnabled()) {
|
||||
myDLLlistMenu.addSeparator();
|
||||
myDLLlistMenu.addAction(actionIncreasePriority);
|
||||
myDLLlistMenu.addAction(actionDecreasePriority);
|
||||
}
|
||||
myDLLlistMenu.addSeparator();
|
||||
myDLLlistMenu.addAction(actionBuy_it);
|
||||
// Call menu
|
||||
@ -669,6 +677,7 @@ void DownloadingTorrents::addTorrent(QString hash) {
|
||||
}
|
||||
QTorrentHandle h = BTSession->getTorrentHandle(hash);
|
||||
int row = getRowFromHash(hash);
|
||||
qDebug("DL: addTorrent(): %s, row: %d", (const char*)hash.toUtf8(), row);
|
||||
if(row != -1) return;
|
||||
row = DLListModel->rowCount();
|
||||
// Adding torrent to download list
|
||||
@ -856,6 +865,7 @@ void DownloadingTorrents::torrentAdded(QString path, QTorrentHandle& h, bool fas
|
||||
if(BTSession->isFinished(hash)) {
|
||||
return;
|
||||
}
|
||||
if(getRowFromHash(hash) != -1) return;
|
||||
int row = DLListModel->rowCount();
|
||||
// Adding torrent to download list
|
||||
DLListModel->insertRow(row);
|
||||
|
@ -20,11 +20,12 @@
|
||||
|
||||
|
||||
#include "eventmanager.h"
|
||||
#include "bittorrent.h"
|
||||
#include "json.h"
|
||||
#include <QDebug>
|
||||
|
||||
EventManager::EventManager(QObject *parent)
|
||||
: QObject(parent)
|
||||
EventManager::EventManager(QObject *parent, bittorrent *BTSession)
|
||||
: QObject(parent), BTSession(BTSession)
|
||||
{
|
||||
revision = 0;
|
||||
}
|
||||
@ -99,10 +100,12 @@ void EventManager::modifiedTorrent(QTorrentHandle h)
|
||||
QVariantMap event;
|
||||
QVariant v;
|
||||
|
||||
if(h.is_paused())
|
||||
v = QVariant("paused");
|
||||
else
|
||||
{
|
||||
if(h.is_paused()) {
|
||||
if(BTSession->isDownloadQueued(hash) || BTSession->isUploadQueued(hash))
|
||||
v = QVariant("queued");
|
||||
else
|
||||
v = QVariant("paused");
|
||||
} else {
|
||||
switch(h.state())
|
||||
{
|
||||
case torrent_status::finished:
|
||||
|
@ -27,6 +27,8 @@
|
||||
#include <QPair>
|
||||
#include <QVariant>
|
||||
|
||||
struct bittorrent;
|
||||
|
||||
class EventManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -34,12 +36,13 @@ class EventManager : public QObject
|
||||
ulong revision;
|
||||
QLinkedList<QPair <ulong, QVariantMap> > events;
|
||||
bool modify(QString hash, QString key, QVariant value);
|
||||
bittorrent* BTSession;
|
||||
|
||||
protected:
|
||||
void update(QVariantMap event);
|
||||
|
||||
public:
|
||||
EventManager(QObject *parent = 0);
|
||||
EventManager(QObject *parent, bittorrent* BTSession);
|
||||
QVariant querySince(ulong r) const;
|
||||
bool isUpdated(ulong r) const;
|
||||
|
||||
|
@ -30,7 +30,7 @@ HttpServer::HttpServer(bittorrent *BTSession, int msec, QObject* parent) : QTcpS
|
||||
base64 = QByteArray(":").toBase64();
|
||||
connect(this, SIGNAL(newConnection()), this, SLOT(newHttpConnection()));
|
||||
HttpServer::BTSession = BTSession;
|
||||
manager = new EventManager(this);
|
||||
manager = new EventManager(this, BTSession);
|
||||
//add torrents
|
||||
QStringList list = BTSession->getUnfinishedTorrents() + BTSession->getFinishedTorrents();
|
||||
QString hash;
|
||||
|
@ -79,7 +79,6 @@
|
||||
<file>Icons/skin/delete.png</file>
|
||||
<file>Icons/skin/delete_all.png</file>
|
||||
<file>Icons/skin/delete_perm.png</file>
|
||||
<file>Icons/skin/disconnected.png</file>
|
||||
<file>Icons/skin/downloading.png</file>
|
||||
<file>Icons/skin/exit.png</file>
|
||||
<file>Icons/skin/firewalled.png</file>
|
||||
|
@ -209,6 +209,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkDisplayToolbar" >
|
||||
<property name="text" >
|
||||
<string>Display top toolbar</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkSpeedInTitle" >
|
||||
<property name="text" >
|
||||
|
@ -159,6 +159,7 @@ options_imp::options_imp(QWidget *parent):QDialog(parent){
|
||||
connect(checkMinimizeToSysTray, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton()));
|
||||
connect(checkStartMinimized, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton()));
|
||||
connect(checkSystrayBalloons, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton()));
|
||||
connect(checkDisplayToolbar, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton()));
|
||||
// Downloads tab
|
||||
connect(textSavePath, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton()));
|
||||
connect(checkPreallocateAll, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton()));
|
||||
@ -278,6 +279,7 @@ void options_imp::saveOptions(){
|
||||
settings.setValue(QString::fromUtf8("MinimizeToTray"), minimizeToTray());
|
||||
settings.setValue(QString::fromUtf8("StartMinimized"), startMinimized());
|
||||
settings.setValue(QString::fromUtf8("NotificationBaloons"), OSDEnabled());
|
||||
settings.setValue(QString::fromUtf8("ToolbarDisplayed"), isToolbarDisplayed());
|
||||
// End General preferences
|
||||
settings.endGroup();
|
||||
// Downloads preferences
|
||||
@ -440,6 +442,7 @@ void options_imp::loadOptions(){
|
||||
checkSpeedInTitle->setChecked(settings.value(QString::fromUtf8("SpeedInTitleBar"), false).toBool());
|
||||
spinRefreshInterval->setValue(settings.value(QString::fromUtf8("RefreshInterval"), 1500).toInt());
|
||||
checkNoSystray->setChecked(!settings.value(QString::fromUtf8("SystrayEnabled"), true).toBool());
|
||||
checkDisplayToolbar->setChecked(settings.value(QString::fromUtf8("ToolbarDisplayed"), false).toBool());
|
||||
if(!systrayIntegration()) {
|
||||
disableSystrayOptions();
|
||||
} else {
|
||||
@ -1149,6 +1152,10 @@ QString options_imp::getFilter() const{
|
||||
return textFilterPath->text();
|
||||
}
|
||||
|
||||
bool options_imp::isToolbarDisplayed() const {
|
||||
return checkDisplayToolbar->isChecked();
|
||||
}
|
||||
|
||||
// Web UI
|
||||
|
||||
void options_imp::enableWebUi(bool checkBoxValue){
|
||||
|
@ -66,6 +66,7 @@ class options_imp : public QDialog, private Ui::Dialog {
|
||||
bool closeToTray() const;
|
||||
bool startMinimized() const;
|
||||
bool OSDEnabled() const;
|
||||
bool isToolbarDisplayed() const;
|
||||
// Downloads
|
||||
QString getSavePath() const;
|
||||
bool preAllocateAllFiles() const;
|
||||
|
@ -139,6 +139,22 @@
|
||||
<string>Priority</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionIncreasePriority" >
|
||||
<property name="icon" >
|
||||
<iconset resource="icons.qrc" >:/Icons/skin/increase.png</iconset>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>Increase priority</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionDecreasePriority" >
|
||||
<property name="icon" >
|
||||
<iconset resource="icons.qrc" >:/Icons/skin/decrease.png</iconset>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>Decrease priority</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="icons.qrc" />
|
||||
|
@ -11,7 +11,7 @@ TARGET = qbittorrent
|
||||
CONFIG += qt thread x11 network
|
||||
|
||||
# Update this VERSION for each release
|
||||
DEFINES += VERSION=\\\"v1.2.0beta2\\\"
|
||||
DEFINES += VERSION=\\\"v1.2.0beta3\\\"
|
||||
DEFINES += VERSION_MAJOR=1
|
||||
DEFINES += VERSION_MINOR=2
|
||||
DEFINES += VERSION_BUGFIX=0
|
||||
|
@ -79,6 +79,9 @@ window.addEvent('domready', function(){
|
||||
case 'stalled':
|
||||
row[0] = '<img src="images/skin/stalled.png"/>';
|
||||
break;
|
||||
case 'queued':
|
||||
row[0] = '<img src="images/skin/queued.png"/>';
|
||||
break;
|
||||
}
|
||||
}
|
||||
if($defined(event.size)){
|
||||
|
Loading…
Reference in New Issue
Block a user