mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2025-12-19 06:57:24 -06:00
Compare commits
28 Commits
release-2.
...
release-2.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0e8f62b675 | ||
|
|
c571ae900c | ||
|
|
b9f6bbf09b | ||
|
|
916e01f9f8 | ||
|
|
7bd5b0d3b5 | ||
|
|
44574498ad | ||
|
|
ec3d45fc99 | ||
|
|
7908de917a | ||
|
|
0e53a6ab8b | ||
|
|
ba2f8af012 | ||
|
|
a8bc3f6d4d | ||
|
|
0211f42df9 | ||
|
|
0180f46dc9 | ||
|
|
6e4d15e72d | ||
|
|
3e1e992fa8 | ||
|
|
6051aa57cf | ||
|
|
55b0cac61b | ||
|
|
28409b83c3 | ||
|
|
eed0b6ca12 | ||
|
|
4b0fae88bc | ||
|
|
6ff3de7686 | ||
|
|
f08d792e67 | ||
|
|
e2edf62834 | ||
|
|
eb4c449620 | ||
|
|
c06386126b | ||
|
|
8c854b8a0e | ||
|
|
749c3a429a | ||
|
|
a6edea2222 |
16
Changelog
16
Changelog
@@ -1,3 +1,19 @@
|
|||||||
|
* Thu Jan 6 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.5.4
|
||||||
|
- BUGFIX: Added --enable-debug parameter to the configure script
|
||||||
|
- BUGFIX: Prioritize first and last pieces when sequential download is enabled
|
||||||
|
- BUGFIX: Some encoding fixes (Windows)
|
||||||
|
- BUGFIX: Display default password on stdout when using nox
|
||||||
|
- BUGFIX: Fix issues when search engines results contain a '|'
|
||||||
|
- BUGFIX: Avoid possible crash on exit when the IP filter is enabled (closes #695945)
|
||||||
|
|
||||||
|
* Sat Jan 1 2011 - Christophe Dumez <chris@qbittorrent.org> - v2.5.3
|
||||||
|
- BUGFIX: Fix priority up/down for multiple torrents at the same time (closes #692184)
|
||||||
|
- BUGFIX: Make sure the number of torrents is properly set on startup (closes #694135)
|
||||||
|
- BUGFIX: Fix scan directories saving (closes #694768)
|
||||||
|
- BUGFIX: Remove empty folders on torrent soft deletion (closes #695174)
|
||||||
|
- BUGFIX: Make sure the main window has focus on startup
|
||||||
|
- BUGFIX: Fix ampersand display in search tabs (closes #695715)
|
||||||
|
|
||||||
* Sun Dec 19 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.5.2
|
* Sun Dec 19 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.5.2
|
||||||
- BUGFIX: Fix alternative speed icon staying pressed when disabled
|
- BUGFIX: Fix alternative speed icon staying pressed when disabled
|
||||||
- BUGFIX: Fix slot warning on startup
|
- BUGFIX: Fix slot warning on startup
|
||||||
|
|||||||
34
configure
vendored
34
configure
vendored
@@ -18,9 +18,11 @@ Main options:
|
|||||||
--help This help text.
|
--help This help text.
|
||||||
|
|
||||||
Dependency options:
|
Dependency options:
|
||||||
|
--enable-debug Enable debug mode
|
||||||
--disable-gui Disable qBittorrent
|
--disable-gui Disable qBittorrent
|
||||||
Graphical user interface for
|
Graphical user interface for
|
||||||
headless running
|
headless running
|
||||||
|
--enable-debug Enable debug mode
|
||||||
--with-libboost-inc=[path] Path to libboost include
|
--with-libboost-inc=[path] Path to libboost include
|
||||||
files
|
files
|
||||||
--with-libboost-lib=[path] Path to libboost library
|
--with-libboost-lib=[path] Path to libboost library
|
||||||
@@ -32,8 +34,6 @@ Dependency options:
|
|||||||
executable (please follow
|
executable (please follow
|
||||||
instructions in
|
instructions in
|
||||||
src/geoip/README)
|
src/geoip/README)
|
||||||
--disable-qtsingleapplication Disable use of
|
|
||||||
qtsingleapplication
|
|
||||||
--with-qtsingleapplication=[system|shipped] Use the shipped
|
--with-qtsingleapplication=[system|shipped] Use the shipped
|
||||||
qtsingleapplication library
|
qtsingleapplication library
|
||||||
or the system one
|
or the system one
|
||||||
@@ -153,11 +153,21 @@ while [ $# -gt 0 ]; do
|
|||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
--enable-debug)
|
||||||
|
QC_ENABLE_DEBUG="Y"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
|
||||||
--disable-gui)
|
--disable-gui)
|
||||||
QC_DISABLE_GUI="Y"
|
QC_DISABLE_GUI="Y"
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
--enable-debug)
|
||||||
|
QC_ENABLE_DEBUG="Y"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
|
||||||
--with-libboost-inc=*)
|
--with-libboost-inc=*)
|
||||||
QC_WITH_LIBBOOST_INC=$optarg
|
QC_WITH_LIBBOOST_INC=$optarg
|
||||||
shift
|
shift
|
||||||
@@ -183,11 +193,6 @@ while [ $# -gt 0 ]; do
|
|||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--disable-qtsingleapplication)
|
|
||||||
QC_DISABLE_qtsingleapplication="Y"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
|
|
||||||
--with-qtsingleapplication=*)
|
--with-qtsingleapplication=*)
|
||||||
QC_WITH_QTSINGLEAPPLICATION=$optarg
|
QC_WITH_QTSINGLEAPPLICATION=$optarg
|
||||||
shift
|
shift
|
||||||
@@ -214,13 +219,14 @@ echo PREFIX=$PREFIX
|
|||||||
echo BINDIR=$BINDIR
|
echo BINDIR=$BINDIR
|
||||||
echo DATADIR=$DATADIR
|
echo DATADIR=$DATADIR
|
||||||
echo EX_QTDIR=$EX_QTDIR
|
echo EX_QTDIR=$EX_QTDIR
|
||||||
|
echo QC_ENABLE_DEBUG=$QC_ENABLE_DEBUG
|
||||||
echo QC_DISABLE_GUI=$QC_DISABLE_GUI
|
echo QC_DISABLE_GUI=$QC_DISABLE_GUI
|
||||||
|
echo QC_ENABLE_DEBUG=$QC_ENABLE_DEBUG
|
||||||
echo QC_WITH_LIBBOOST_INC=$QC_WITH_LIBBOOST_INC
|
echo QC_WITH_LIBBOOST_INC=$QC_WITH_LIBBOOST_INC
|
||||||
echo QC_WITH_LIBBOOST_LIB=$QC_WITH_LIBBOOST_LIB
|
echo QC_WITH_LIBBOOST_LIB=$QC_WITH_LIBBOOST_LIB
|
||||||
echo QC_DISABLE_libnotify=$QC_DISABLE_libnotify
|
echo QC_DISABLE_libnotify=$QC_DISABLE_libnotify
|
||||||
echo QC_DISABLE_geoip_database=$QC_DISABLE_geoip_database
|
echo QC_DISABLE_geoip_database=$QC_DISABLE_geoip_database
|
||||||
echo QC_WITH_GEOIP_DATABASE_EMBEDDED=$QC_WITH_GEOIP_DATABASE_EMBEDDED
|
echo QC_WITH_GEOIP_DATABASE_EMBEDDED=$QC_WITH_GEOIP_DATABASE_EMBEDDED
|
||||||
echo QC_DISABLE_qtsingleapplication=$QC_DISABLE_qtsingleapplication
|
|
||||||
echo QC_WITH_QTSINGLEAPPLICATION=$QC_WITH_QTSINGLEAPPLICATION
|
echo QC_WITH_QTSINGLEAPPLICATION=$QC_WITH_QTSINGLEAPPLICATION
|
||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
@@ -327,7 +333,9 @@ cat >$1/modules.cpp <<EOT
|
|||||||
/*
|
/*
|
||||||
-----BEGIN QCMOD-----
|
-----BEGIN QCMOD-----
|
||||||
name: Qt >= 4.5
|
name: Qt >= 4.5
|
||||||
|
arg: enable-debug, Enable debug mode
|
||||||
arg: disable-gui, Disable qBittorrent Graphical user interface for headless running
|
arg: disable-gui, Disable qBittorrent Graphical user interface for headless running
|
||||||
|
arg: enable-debug, Enable debug mode
|
||||||
-----END QCMOD-----
|
-----END QCMOD-----
|
||||||
*/
|
*/
|
||||||
class qc_qt4 : public ConfObj
|
class qc_qt4 : public ConfObj
|
||||||
@@ -338,9 +346,14 @@ public:
|
|||||||
QString shortname() const { return "Qt 4.5"; }
|
QString shortname() const { return "Qt 4.5"; }
|
||||||
bool exec()
|
bool exec()
|
||||||
{
|
{
|
||||||
|
// NOX mode
|
||||||
if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
|
if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
|
||||||
conf->addExtra("CONFIG += nox");
|
conf->addExtra("CONFIG += nox");
|
||||||
}
|
}
|
||||||
|
// Debug mode
|
||||||
|
if(!conf->getenv("QC_ENABLE_DEBUG").isEmpty()) {
|
||||||
|
conf->addExtra("CONFIG += debug");
|
||||||
|
}
|
||||||
return(QT_VERSION >= 0x040500);
|
return(QT_VERSION >= 0x040500);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -656,7 +669,7 @@ cat >$1/modules_new.cpp <<EOT
|
|||||||
o->required = false;
|
o->required = false;
|
||||||
o->disabled = false;
|
o->disabled = false;
|
||||||
o = new qc_qtsingleapplication(conf);
|
o = new qc_qtsingleapplication(conf);
|
||||||
o->required = false;
|
o->required = true;
|
||||||
o->disabled = false;
|
o->disabled = false;
|
||||||
|
|
||||||
EOT
|
EOT
|
||||||
@@ -1603,13 +1616,14 @@ export PREFIX
|
|||||||
export BINDIR
|
export BINDIR
|
||||||
export DATADIR
|
export DATADIR
|
||||||
export EX_QTDIR
|
export EX_QTDIR
|
||||||
|
export QC_ENABLE_DEBUG
|
||||||
export QC_DISABLE_GUI
|
export QC_DISABLE_GUI
|
||||||
|
export QC_ENABLE_DEBUG
|
||||||
export QC_WITH_LIBBOOST_INC
|
export QC_WITH_LIBBOOST_INC
|
||||||
export QC_WITH_LIBBOOST_LIB
|
export QC_WITH_LIBBOOST_LIB
|
||||||
export QC_DISABLE_libnotify
|
export QC_DISABLE_libnotify
|
||||||
export QC_DISABLE_geoip_database
|
export QC_DISABLE_geoip_database
|
||||||
export QC_WITH_GEOIP_DATABASE_EMBEDDED
|
export QC_WITH_GEOIP_DATABASE_EMBEDDED
|
||||||
export QC_DISABLE_qtsingleapplication
|
|
||||||
export QC_WITH_QTSINGLEAPPLICATION
|
export QC_WITH_QTSINGLEAPPLICATION
|
||||||
export QC_VERBOSE
|
export QC_VERBOSE
|
||||||
rm -rf .qconftemp
|
rm -rf .qconftemp
|
||||||
|
|||||||
136
install.os2
Normal file
136
install.os2
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
QBittorrent installation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
0. CONTENTS OF THIS FILE
|
||||||
|
========================
|
||||||
|
|
||||||
|
1. INTRODUCTION
|
||||||
|
|
||||||
|
2. REQUIREMENTS
|
||||||
|
|
||||||
|
3. INSTALLATION
|
||||||
|
|
||||||
|
4. CONTACT
|
||||||
|
|
||||||
|
5. CREDITS
|
||||||
|
|
||||||
|
6. SUPPORT AND DONATIONS
|
||||||
|
|
||||||
|
7. HISTORY
|
||||||
|
|
||||||
|
|
||||||
|
1. INTRODUCTION
|
||||||
|
===============
|
||||||
|
|
||||||
|
Welcome to QBittorrent port for OS/2 and eComStation.
|
||||||
|
|
||||||
|
|
||||||
|
2. REQUIREMENTS
|
||||||
|
===============
|
||||||
|
|
||||||
|
* klibc 0.6.3 or later
|
||||||
|
|
||||||
|
ftp://ftp.netlabs.org/pub/gcc/libc-0_6_3-csd3.wpi
|
||||||
|
|
||||||
|
* openssl 1.0
|
||||||
|
|
||||||
|
ftp://ftp.netlabs.org/pub/unixos2/ssl10.zip
|
||||||
|
|
||||||
|
* Qt4 dll
|
||||||
|
|
||||||
|
see http://svn.netlabs.org/qt4 for more information whats needed and where to get the latest
|
||||||
|
|
||||||
|
|
||||||
|
3. INSTALLATION
|
||||||
|
===============
|
||||||
|
|
||||||
|
To install QBittorrent, do the following:
|
||||||
|
|
||||||
|
klibc
|
||||||
|
-----
|
||||||
|
|
||||||
|
1. Download klibc 0.6.3 csd3 or later.
|
||||||
|
2. Install the package by double-clicking on the WPI file.
|
||||||
|
|
||||||
|
|
||||||
|
openssl 1.0
|
||||||
|
-----------
|
||||||
|
|
||||||
|
1. Download the zip file
|
||||||
|
2. Install the files to your libpath eg. x:\ecs\dll
|
||||||
|
|
||||||
|
Qt4 dll
|
||||||
|
-------
|
||||||
|
|
||||||
|
1. Download the package
|
||||||
|
2. Install the package by double-clicking on the wpi file.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
QBittorrent
|
||||||
|
-----------
|
||||||
|
|
||||||
|
1. Create a directory for QBittorrent.
|
||||||
|
2. Extract the QBittorrent package to the new directory.
|
||||||
|
3. Create a WPS object for QBittorrent.exe.
|
||||||
|
4. Start QBittorrent
|
||||||
|
5. Happy torrenting
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
4. CONTACT
|
||||||
|
==========
|
||||||
|
|
||||||
|
Please send bugreports to:
|
||||||
|
|
||||||
|
ecs@aroa.ch
|
||||||
|
|
||||||
|
Only bug reports with a reproducable bug are accepted. :-)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
5. CREDITS
|
||||||
|
==========
|
||||||
|
|
||||||
|
The port was done by:
|
||||||
|
|
||||||
|
Silvan Scherrer aka _diver
|
||||||
|
|
||||||
|
Thanks go to:
|
||||||
|
|
||||||
|
* Dmitry A. Kuminov
|
||||||
|
|
||||||
|
They either helped me when I had some nasty questions or did some testing for
|
||||||
|
me.
|
||||||
|
|
||||||
|
|
||||||
|
6. SUPPORT AND DONATIONS
|
||||||
|
========================
|
||||||
|
|
||||||
|
QBittorrent port is based on volunteer work. If you would like to support further
|
||||||
|
development, you can do so in one of the following ways:
|
||||||
|
|
||||||
|
|
||||||
|
* Donate to the Qt4 project: see qt.netlabs.org for more information
|
||||||
|
|
||||||
|
* Contribute to the project: Besides actual development, this also includes
|
||||||
|
maintaining the documentation and the project web site as well as help
|
||||||
|
for users.
|
||||||
|
|
||||||
|
|
||||||
|
7. HISTORY
|
||||||
|
==========
|
||||||
|
|
||||||
|
2010-12-23
|
||||||
|
|
||||||
|
* updated to 2.5.2 code level of QBittorrent
|
||||||
|
|
||||||
|
2010-11-22
|
||||||
|
|
||||||
|
* updated to 2.4.11 code level of QBittorrent
|
||||||
|
|
||||||
|
2010-xx-xx
|
||||||
|
|
||||||
|
* initial port
|
||||||
|
|
||||||
@@ -1,3 +1,10 @@
|
|||||||
|
INCLUDEPATH += $$PWD
|
||||||
|
|
||||||
|
exists(conf.pri) {
|
||||||
|
# to the conf.pri goes all system dependent stuff
|
||||||
|
include(conf.pri)
|
||||||
|
}
|
||||||
|
|
||||||
LIBS += -ltorrent-rasterbar \
|
LIBS += -ltorrent-rasterbar \
|
||||||
-lboost_thread \
|
-lboost_thread \
|
||||||
-lboost_system \
|
-lboost_system \
|
||||||
|
|||||||
@@ -20,5 +20,6 @@
|
|||||||
<dep type='geoip-database'>
|
<dep type='geoip-database'>
|
||||||
</dep>
|
</dep>
|
||||||
<dep type='qtsingleapplication'>
|
<dep type='qtsingleapplication'>
|
||||||
|
<required/>
|
||||||
</dep>
|
</dep>
|
||||||
</qconf>
|
</qconf>
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
-----BEGIN QCMOD-----
|
-----BEGIN QCMOD-----
|
||||||
name: Qt >= 4.5
|
name: Qt >= 4.5
|
||||||
|
arg: enable-debug, Enable debug mode
|
||||||
arg: disable-gui, Disable qBittorrent Graphical user interface for headless running
|
arg: disable-gui, Disable qBittorrent Graphical user interface for headless running
|
||||||
|
arg: enable-debug, Enable debug mode
|
||||||
-----END QCMOD-----
|
-----END QCMOD-----
|
||||||
*/
|
*/
|
||||||
class qc_qt4 : public ConfObj
|
class qc_qt4 : public ConfObj
|
||||||
@@ -12,9 +14,14 @@ public:
|
|||||||
QString shortname() const { return "Qt 4.5"; }
|
QString shortname() const { return "Qt 4.5"; }
|
||||||
bool exec()
|
bool exec()
|
||||||
{
|
{
|
||||||
|
// NOX mode
|
||||||
if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
|
if(!conf->getenv("QC_DISABLE_GUI").isEmpty()) {
|
||||||
conf->addExtra("CONFIG += nox");
|
conf->addExtra("CONFIG += nox");
|
||||||
}
|
}
|
||||||
|
// Debug mode
|
||||||
|
if(!conf->getenv("QC_ENABLE_DEBUG").isEmpty()) {
|
||||||
|
conf->addExtra("CONFIG += debug");
|
||||||
|
}
|
||||||
return(QT_VERSION >= 0x040500);
|
return(QT_VERSION >= 0x040500);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Categories=Qt;Network;P2P;
|
Categories=Qt;Network;P2P;
|
||||||
Comment=V2.5.2
|
Comment=V2.5.4
|
||||||
Exec=qbittorrent %f
|
Exec=qbittorrent %f
|
||||||
GenericName=Bittorrent client
|
GenericName=Bittorrent client
|
||||||
GenericName[ar]=العميل Bittorrent
|
GenericName[ar]=العميل Bittorrent
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleGetInfoString</key>
|
<key>CFBundleGetInfoString</key>
|
||||||
<string>2.5.2</string>
|
<string>2.5.4</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ protected:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(abort) return;
|
||||||
s->set_ip_filter(filter);
|
s->set_ip_filter(filter);
|
||||||
qDebug("IP Filter thread: finished parsing, filter applied");
|
qDebug("IP Filter thread: finished parsing, filter applied");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,8 @@ public:
|
|||||||
std::cout << std::endl << "******** " << qPrintable(tr("Information")) << " ********" << std::endl;
|
std::cout << std::endl << "******** " << qPrintable(tr("Information")) << " ********" << std::endl;
|
||||||
std::cout << qPrintable(tr("To control qBittorrent, access the Web UI at http://localhost:%1").arg(QString::number(pref.getWebUiPort()))) << std::endl;
|
std::cout << qPrintable(tr("To control qBittorrent, access the Web UI at http://localhost:%1").arg(QString::number(pref.getWebUiPort()))) << std::endl;
|
||||||
std::cout << qPrintable(tr("The Web UI administrator user name is: %1").arg(pref.getWebUiUsername())) << std::endl;
|
std::cout << qPrintable(tr("The Web UI administrator user name is: %1").arg(pref.getWebUiUsername())) << std::endl;
|
||||||
if(pref.getWebUiPassword() == "f6fdffe48c908deb0f4c3bd36c032e72") {
|
qDebug() << "Password:" << pref.getWebUiPassword();
|
||||||
|
if(pref.getWebUiPassword() == "32fe0bd2bb001911bb8bcfe23fc92b63") {
|
||||||
std::cout << qPrintable(tr("The Web UI administrator password is still the default one: %1").arg("adminadmin")) << std::endl;
|
std::cout << qPrintable(tr("The Web UI administrator password is still the default one: %1").arg("adminadmin")) << std::endl;
|
||||||
std::cout << qPrintable(tr("This is a security risk, please consider changing your password from program preferences.")) << std::endl;
|
std::cout << qPrintable(tr("This is a security risk, please consider changing your password from program preferences.")) << std::endl;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -263,9 +263,9 @@ int main(int argc, char *argv[]){
|
|||||||
painter.setFont(QFont("Arial", 22, QFont::Black));
|
painter.setFont(QFont("Arial", 22, QFont::Black));
|
||||||
painter.drawText(224 - painter.fontMetrics().width(version), 270, version);
|
painter.drawText(224 - painter.fontMetrics().width(version), 270, version);
|
||||||
splash = new QSplashScreen(splash_img, Qt::WindowStaysOnTopHint);
|
splash = new QSplashScreen(splash_img, Qt::WindowStaysOnTopHint);
|
||||||
|
QTimer::singleShot(1500, splash, SLOT(deleteLater()));
|
||||||
splash->show();
|
splash->show();
|
||||||
app.processEvents();
|
app.processEvents();
|
||||||
QTimer::singleShot(2000, splash, SLOT(deleteLater()));
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// Set environment variable
|
// Set environment variable
|
||||||
@@ -296,6 +296,8 @@ int main(int argc, char *argv[]){
|
|||||||
torrentCmdLine.removeFirst();
|
torrentCmdLine.removeFirst();
|
||||||
#ifndef DISABLE_GUI
|
#ifndef DISABLE_GUI
|
||||||
MainWindow window(0, torrentCmdLine);
|
MainWindow window(0, torrentCmdLine);
|
||||||
|
if(!no_splash)
|
||||||
|
window.raise();
|
||||||
QObject::connect(&app, SIGNAL(messageReceived(const QString&)),
|
QObject::connect(&app, SIGNAL(messageReceived(const QString&)),
|
||||||
&window, SLOT(processParams(const QString&)));
|
&window, SLOT(processParams(const QString&)));
|
||||||
app.setActivationWindow(&window);
|
app.setActivationWindow(&window);
|
||||||
|
|||||||
@@ -163,8 +163,6 @@ MainWindow::MainWindow(QWidget *parent, QStringList torrentCmdLine) : QMainWindo
|
|||||||
vSplitter->setCollapsible(0, true);
|
vSplitter->setCollapsible(0, true);
|
||||||
vSplitter->setCollapsible(1, false);
|
vSplitter->setCollapsible(1, false);
|
||||||
tabs->addTab(vSplitter, QIcon(QString::fromUtf8(":/Icons/oxygen/folder-remote.png")), tr("Transfers"));
|
tabs->addTab(vSplitter, QIcon(QString::fromUtf8(":/Icons/oxygen/folder-remote.png")), tr("Transfers"));
|
||||||
connect(transferList->getSourceModel(), SIGNAL(rowsInserted(QModelIndex, int, int)), this, SLOT(updateNbTorrents()));
|
|
||||||
connect(transferList->getSourceModel(), SIGNAL(rowsRemoved(QModelIndex, int, int)), this, SLOT(updateNbTorrents()));
|
|
||||||
|
|
||||||
vboxLayout->addWidget(tabs);
|
vboxLayout->addWidget(tabs);
|
||||||
|
|
||||||
@@ -227,6 +225,8 @@ MainWindow::MainWindow(QWidget *parent, QStringList torrentCmdLine) : QMainWindo
|
|||||||
} else {
|
} else {
|
||||||
if(pref.startMinimized())
|
if(pref.startMinimized())
|
||||||
showMinimized();
|
showMinimized();
|
||||||
|
else
|
||||||
|
setFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start watching the executable for updates
|
// Start watching the executable for updates
|
||||||
@@ -242,6 +242,11 @@ MainWindow::MainWindow(QWidget *parent, QStringList torrentCmdLine) : QMainWindo
|
|||||||
// Populate the transfer list
|
// Populate the transfer list
|
||||||
transferList->getSourceModel()->populate();
|
transferList->getSourceModel()->populate();
|
||||||
|
|
||||||
|
// Update the number of torrents (tab)
|
||||||
|
updateNbTorrents();
|
||||||
|
connect(transferList->getSourceModel(), SIGNAL(rowsInserted(QModelIndex, int, int)), this, SLOT(updateNbTorrents()));
|
||||||
|
connect(transferList->getSourceModel(), SIGNAL(rowsRemoved(QModelIndex, int, int)), this, SLOT(updateNbTorrents()));
|
||||||
|
|
||||||
qDebug("GUI Built");
|
qDebug("GUI Built");
|
||||||
#ifdef Q_WS_WIN
|
#ifdef Q_WS_WIN
|
||||||
if(!pref.neverCheckFileAssoc() && !Preferences::isFileAssocOk()) {
|
if(!pref.neverCheckFileAssoc() && !Preferences::isFileAssocOk()) {
|
||||||
@@ -263,6 +268,7 @@ MainWindow::MainWindow(QWidget *parent, QStringList torrentCmdLine) : QMainWindo
|
|||||||
connect(updater, SIGNAL(updateCheckFinished(bool, QString)), SLOT(handleUpdateCheckFinished(bool, QString)));
|
connect(updater, SIGNAL(updateCheckFinished(bool, QString)), SLOT(handleUpdateCheckFinished(bool, QString)));
|
||||||
updater->checkForUpdates();
|
updater->checkForUpdates();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::deleteBTSession() {
|
void MainWindow::deleteBTSession() {
|
||||||
|
|||||||
19
src/misc.cpp
19
src/misc.cpp
@@ -557,19 +557,6 @@ bool misc::isPreviewable(QString extension){
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool misc::removeEmptyTree(QString path) {
|
|
||||||
QDir dir(path);
|
|
||||||
foreach(const QString &child, dir.entryList(QDir::AllDirs)) {
|
|
||||||
if(child == "." || child == "..") continue;
|
|
||||||
return removeEmptyTree(dir.absoluteFilePath(child));
|
|
||||||
}
|
|
||||||
const QString dir_name = dir.dirName();
|
|
||||||
if(dir.cdUp()) {
|
|
||||||
return dir.rmdir(dir_name);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString misc::bcLinkToMagnet(QString bc_link) {
|
QString misc::bcLinkToMagnet(QString bc_link) {
|
||||||
QByteArray raw_bc = bc_link.toUtf8();
|
QByteArray raw_bc = bc_link.toUtf8();
|
||||||
raw_bc = raw_bc.mid(8); // skip bc://bt/
|
raw_bc = raw_bc.mid(8); // skip bc://bt/
|
||||||
@@ -759,3 +746,9 @@ bool misc::isValidTorrentFile(const QString &torrent_path) {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString misc::branchPath(QString file_path)
|
||||||
|
{
|
||||||
|
file_path.replace("\\", "/");
|
||||||
|
return file_path.left(file_path.lastIndexOf('/'));
|
||||||
|
}
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ public:
|
|||||||
// value must be given in bytes
|
// value must be given in bytes
|
||||||
static QString friendlyUnit(double val);
|
static QString friendlyUnit(double val);
|
||||||
static bool isPreviewable(QString extension);
|
static bool isPreviewable(QString extension);
|
||||||
static bool removeEmptyTree(QString path);
|
static QString branchPath(QString file_path);
|
||||||
static QString magnetUriToName(QString magnet_uri);
|
static QString magnetUriToName(QString magnet_uri);
|
||||||
static QString magnetUriToHash(QString magnet_uri);
|
static QString magnetUriToHash(QString magnet_uri);
|
||||||
static QString bcLinkToMagnet(QString bc_link);
|
static QString bcLinkToMagnet(QString bc_link);
|
||||||
|
|||||||
@@ -341,7 +341,7 @@ void options_imp::saveOptions(){
|
|||||||
pref.preAllocateAllFiles(preAllocateAllFiles());
|
pref.preAllocateAllFiles(preAllocateAllFiles());
|
||||||
pref.useAdditionDialog(useAdditionDialog());
|
pref.useAdditionDialog(useAdditionDialog());
|
||||||
pref.addTorrentsInPause(addTorrentsInPause());
|
pref.addTorrentsInPause(addTorrentsInPause());
|
||||||
ScanFoldersModel::instance()->makePersistent(pref);
|
ScanFoldersModel::instance()->makePersistent();
|
||||||
addedScanDirs.clear();
|
addedScanDirs.clear();
|
||||||
QString export_dir = getExportDir();
|
QString export_dir = getExportDir();
|
||||||
#if defined(Q_WS_WIN) || defined(Q_OS_OS2)
|
#if defined(Q_WS_WIN) || defined(Q_OS_OS2)
|
||||||
|
|||||||
@@ -631,7 +631,8 @@ void PropertiesWidget::renameSelectedFile() {
|
|||||||
// Remove old folder
|
// Remove old folder
|
||||||
const QDir old_folder(h.save_path()+"/"+old_path);
|
const QDir old_folder(h.save_path()+"/"+old_path);
|
||||||
int timeout = 10;
|
int timeout = 10;
|
||||||
while(!misc::removeEmptyTree(old_folder.absolutePath()) && timeout > 0) {
|
while(!QDir().rmpath(old_folder.absolutePath()) && timeout > 0) {
|
||||||
|
// XXX: We should not sleep here (freezes the UI for 1 second)
|
||||||
SleeperThread::msleep(100);
|
SleeperThread::msleep(100);
|
||||||
--timeout;
|
--timeout;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,9 +155,6 @@ QBtSession::~QBtSession() {
|
|||||||
#endif
|
#endif
|
||||||
saveSessionState();
|
saveSessionState();
|
||||||
saveFastResumeData();
|
saveFastResumeData();
|
||||||
qDebug("Deleting the session");
|
|
||||||
delete s;
|
|
||||||
qDebug("Session deleted");
|
|
||||||
// Delete our objects
|
// Delete our objects
|
||||||
if(m_tracker)
|
if(m_tracker)
|
||||||
delete m_tracker;
|
delete m_tracker;
|
||||||
@@ -174,6 +171,8 @@ QBtSession::~QBtSession() {
|
|||||||
delete httpServer;
|
delete httpServer;
|
||||||
if(timerETA)
|
if(timerETA)
|
||||||
delete timerETA;
|
delete timerETA;
|
||||||
|
qDebug("Deleting the session");
|
||||||
|
delete s;
|
||||||
qDebug("BTSession destructor OUT");
|
qDebug("BTSession destructor OUT");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,6 +275,7 @@ void QBtSession::configureSession() {
|
|||||||
}
|
}
|
||||||
int i = 0;
|
int i = 0;
|
||||||
foreach (const QString &dir, scan_dirs) {
|
foreach (const QString &dir, scan_dirs) {
|
||||||
|
qDebug() << "Adding scan dir" << dir << downloadInDirList.at(i);
|
||||||
m_scanFolders->addPath(dir, downloadInDirList.at(i));
|
m_scanFolders->addPath(dir, downloadInDirList.at(i));
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
@@ -735,6 +735,9 @@ void QBtSession::deleteTorrent(QString hash, bool delete_local_files) {
|
|||||||
foreach(const QString &uneeded_file, uneeded_files) {
|
foreach(const QString &uneeded_file, uneeded_files) {
|
||||||
qDebug("Removing uneeded file: %s", qPrintable(uneeded_file));
|
qDebug("Removing uneeded file: %s", qPrintable(uneeded_file));
|
||||||
misc::safeRemove(uneeded_file);
|
misc::safeRemove(uneeded_file);
|
||||||
|
const QString parent_folder = misc::branchPath(uneeded_file);
|
||||||
|
qDebug("Attempt to remove parent folder (if empty): %s", qPrintable(parent_folder));
|
||||||
|
QDir().rmpath(parent_folder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Remove it from torrent backup directory
|
// Remove it from torrent backup directory
|
||||||
@@ -1153,6 +1156,7 @@ void QBtSession::loadTorrentTempData(QTorrentHandle h, QString savePath, bool ma
|
|||||||
if(TorrentTempData::hasTempData(hash)) {
|
if(TorrentTempData::hasTempData(hash)) {
|
||||||
// sequential download
|
// sequential download
|
||||||
h.set_sequential_download(TorrentTempData::isSequential(hash));
|
h.set_sequential_download(TorrentTempData::isSequential(hash));
|
||||||
|
h.prioritize_first_last_piece(TorrentTempData::isSequential(hash));
|
||||||
|
|
||||||
// The following is useless for newly added magnet
|
// The following is useless for newly added magnet
|
||||||
if(!magnet) {
|
if(!magnet) {
|
||||||
@@ -2106,14 +2110,14 @@ void QBtSession::readAlerts() {
|
|||||||
#endif
|
#endif
|
||||||
if(!hash.isEmpty()) {
|
if(!hash.isEmpty()) {
|
||||||
if(savePathsToRemove.contains(hash)) {
|
if(savePathsToRemove.contains(hash)) {
|
||||||
misc::removeEmptyTree(savePathsToRemove.take(hash));
|
QDir().rmpath(savePathsToRemove.take(hash));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// XXX: Fallback
|
// XXX: Fallback
|
||||||
QStringList hashes_deleted;
|
QStringList hashes_deleted;
|
||||||
foreach(const QString& key, savePathsToRemove.keys()) {
|
foreach(const QString& key, savePathsToRemove.keys()) {
|
||||||
// Attempt to delete
|
// Attempt to delete
|
||||||
misc::removeEmptyTree(savePathsToRemove[key]);
|
QDir().rmpath(savePathsToRemove[key]);
|
||||||
if(!QDir(savePathsToRemove[key]).exists()) {
|
if(!QDir(savePathsToRemove[key]).exists()) {
|
||||||
hashes_deleted << key;
|
hashes_deleted << key;
|
||||||
}
|
}
|
||||||
@@ -2134,7 +2138,7 @@ void QBtSession::readAlerts() {
|
|||||||
QDir old_save_dir(old_save_path);
|
QDir old_save_dir(old_save_path);
|
||||||
if(old_save_dir != QDir(defaultSavePath) && old_save_dir != QDir(defaultTempPath)) {
|
if(old_save_dir != QDir(defaultSavePath) && old_save_dir != QDir(defaultTempPath)) {
|
||||||
qDebug("Attempting to remove %s", qPrintable(old_save_path));
|
qDebug("Attempting to remove %s", qPrintable(old_save_path));
|
||||||
misc::removeEmptyTree(old_save_path);
|
QDir().rmpath(old_save_path);
|
||||||
}
|
}
|
||||||
if(defaultTempPath.isEmpty() || !new_save_path.startsWith(defaultTempPath)) {
|
if(defaultTempPath.isEmpty() || !new_save_path.startsWith(defaultTempPath)) {
|
||||||
qDebug("Storage has been moved, updating save path to %s", qPrintable(new_save_path));
|
qDebug("Storage has been moved, updating save path to %s", qPrintable(new_save_path));
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "scannedfoldersmodel.h"
|
#include "scannedfoldersmodel.h"
|
||||||
|
#include "preferences.h"
|
||||||
#include "filesystemwatcher.h"
|
#include "filesystemwatcher.h"
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
@@ -189,15 +189,16 @@ int ScanFoldersModel::findPathData(const QString &path) const {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScanFoldersModel::makePersistent(QIniSettings &settings) {
|
void ScanFoldersModel::makePersistent() {
|
||||||
|
Preferences pref;
|
||||||
QStringList paths;
|
QStringList paths;
|
||||||
QList<bool> downloadInFolderInfo;
|
QList<bool> downloadInFolderInfo;
|
||||||
foreach (const PathData* pathData, m_pathList) {
|
foreach (const PathData* pathData, m_pathList) {
|
||||||
paths << pathData->path;
|
paths << pathData->path;
|
||||||
downloadInFolderInfo << pathData->downloadAtPath;
|
downloadInFolderInfo << pathData->downloadAtPath;
|
||||||
}
|
}
|
||||||
settings.setValue(QString::fromUtf8("ScanDirs"), paths);
|
pref.setScanDirs(paths);
|
||||||
settings.setValue(QString::fromUtf8("DownloadInScanDirs"), misc::toStringList(downloadInFolderInfo));
|
pref.setDownloadInScanDirs(downloadInFolderInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
ScanFoldersModel *ScanFoldersModel::m_instance = 0;
|
ScanFoldersModel *ScanFoldersModel::m_instance = 0;
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public:
|
|||||||
PathStatus setDownloadAtPath(int row, bool downloadAtPath);
|
PathStatus setDownloadAtPath(int row, bool downloadAtPath);
|
||||||
|
|
||||||
bool downloadInTorrentFolder(const QString &filePath) const;
|
bool downloadInTorrentFolder(const QString &filePath) const;
|
||||||
void makePersistent(QIniSettings &settings);
|
void makePersistent();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
// The absolute paths of new torrent files in the scanned directories.
|
// The absolute paths of new torrent files in the scanned directories.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#VERSION: 1.33
|
#VERSION: 1.34
|
||||||
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
# Redistribution and use in source and binary forms, with or without
|
||||||
# modification, are permitted provided that the following conditions are met:
|
# modification, are permitted provided that the following conditions are met:
|
||||||
@@ -35,7 +35,7 @@ def prettyPrinter(dictionary):
|
|||||||
if isinstance(dictionary[key], str):
|
if isinstance(dictionary[key], str):
|
||||||
dictionary[key] = unicode(dictionary[key], 'utf-8')
|
dictionary[key] = unicode(dictionary[key], 'utf-8')
|
||||||
dictionary['size'] = anySizeToBytes(dictionary['size'])
|
dictionary['size'] = anySizeToBytes(dictionary['size'])
|
||||||
print u"%s|%s|%s|%s|%s|%s"%(dictionary['link'],dictionary['name'],dictionary['size'],dictionary['seeds'],dictionary['leech'],dictionary['engine_url'])
|
print u"%s|%s|%s|%s|%s|%s"%(dictionary['link'],dictionary['name'].replace('|', ''),dictionary['size'],dictionary['seeds'],dictionary['leech'],dictionary['engine_url'])
|
||||||
|
|
||||||
def anySizeToBytes(size_string):
|
def anySizeToBytes(size_string):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -313,7 +313,7 @@ void SearchEngine::on_search_button_clicked(){
|
|||||||
// Reload environment variables (proxy)
|
// Reload environment variables (proxy)
|
||||||
searchProcess->setEnvironment(QProcess::systemEnvironment());
|
searchProcess->setEnvironment(QProcess::systemEnvironment());
|
||||||
|
|
||||||
QString pattern = search_pattern->text().trimmed();
|
const QString pattern = search_pattern->text().trimmed();
|
||||||
// No search pattern entered
|
// No search pattern entered
|
||||||
if(pattern.isEmpty()){
|
if(pattern.isEmpty()){
|
||||||
QMessageBox::critical(0, tr("Empty search pattern"), tr("Please type a search pattern first"));
|
QMessageBox::critical(0, tr("Empty search pattern"), tr("Please type a search pattern first"));
|
||||||
@@ -323,7 +323,9 @@ void SearchEngine::on_search_button_clicked(){
|
|||||||
currentSearchTab=new SearchTab(this);
|
currentSearchTab=new SearchTab(this);
|
||||||
connect(currentSearchTab->header(), SIGNAL(sectionResized(int, int, int)), this, SLOT(propagateSectionResized(int,int,int)));
|
connect(currentSearchTab->header(), SIGNAL(sectionResized(int, int, int)), this, SLOT(propagateSectionResized(int,int,int)));
|
||||||
all_tab.append(currentSearchTab);
|
all_tab.append(currentSearchTab);
|
||||||
tabWidget->addTab(currentSearchTab, pattern);
|
QString tabName = pattern;
|
||||||
|
tabName.replace(QRegExp("&{1}"), "&&");
|
||||||
|
tabWidget->addTab(currentSearchTab, tabName);
|
||||||
tabWidget->setCurrentWidget(currentSearchTab);
|
tabWidget->setCurrentWidget(currentSearchTab);
|
||||||
#if QT_VERSION < 0x040500
|
#if QT_VERSION < 0x040500
|
||||||
closeTab_button->setEnabled(true);
|
closeTab_button->setEnabled(true);
|
||||||
@@ -594,7 +596,7 @@ void SearchEngine::searchFinished(int exitcode,QProcess::ExitStatus){
|
|||||||
// SLOT to append one line to search results list
|
// SLOT to append one line to search results list
|
||||||
// Line is in the following form :
|
// Line is in the following form :
|
||||||
// file url | file name | file size | nb seeds | nb leechers | Search engine url
|
// file url | file name | file size | nb seeds | nb leechers | Search engine url
|
||||||
void SearchEngine::appendSearchResult(QString line){
|
void SearchEngine::appendSearchResult(const QString &line){
|
||||||
if(!currentSearchTab) {
|
if(!currentSearchTab) {
|
||||||
if(searchProcess->state() != QProcess::NotRunning){
|
if(searchProcess->state() != QProcess::NotRunning){
|
||||||
searchProcess->terminate();
|
searchProcess->terminate();
|
||||||
@@ -606,7 +608,7 @@ void SearchEngine::appendSearchResult(QString line){
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QStringList parts = line.split("|");
|
QStringList parts = line.split("|");
|
||||||
if(parts.size() != 6){
|
if(parts.size() < 6){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Q_ASSERT(currentSearchTab);
|
Q_ASSERT(currentSearchTab);
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ protected slots:
|
|||||||
#else
|
#else
|
||||||
void closeTab(int index);
|
void closeTab(int index);
|
||||||
#endif
|
#endif
|
||||||
void appendSearchResult(QString line);
|
void appendSearchResult(const QString& line);
|
||||||
void searchFinished(int exitcode,QProcess::ExitStatus);
|
void searchFinished(int exitcode,QProcess::ExitStatus);
|
||||||
void readSearchOutput();
|
void readSearchOutput();
|
||||||
void searchStarted();
|
void searchStarted();
|
||||||
|
|||||||
59
src/src.pro
59
src/src.pro
@@ -2,39 +2,6 @@
|
|||||||
TEMPLATE = app
|
TEMPLATE = app
|
||||||
CONFIG += qt thread
|
CONFIG += qt thread
|
||||||
|
|
||||||
unix:!macx {
|
|
||||||
exists(../conf.pri) {
|
|
||||||
# generated by configure
|
|
||||||
include(../conf.pri)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
nox {
|
|
||||||
QT = core
|
|
||||||
TARGET = qbittorrent-nox
|
|
||||||
DEFINES += DISABLE_GUI
|
|
||||||
} else {
|
|
||||||
QT += xml
|
|
||||||
TARGET = qbittorrent
|
|
||||||
}
|
|
||||||
QT += network
|
|
||||||
|
|
||||||
# Vars
|
|
||||||
LANG_PATH = lang
|
|
||||||
ICONS_PATH = Icons
|
|
||||||
|
|
||||||
# use "CONFIG -= debug" to disable debug
|
|
||||||
CONFIG -= debug
|
|
||||||
CONFIG += release
|
|
||||||
|
|
||||||
# Disable debug output in release mode
|
|
||||||
!debug {
|
|
||||||
DEFINES += QT_NO_DEBUG_OUTPUT
|
|
||||||
}
|
|
||||||
|
|
||||||
# VERSION DEFINES
|
|
||||||
include(../version.pri)
|
|
||||||
|
|
||||||
# Windows specific configuration
|
# Windows specific configuration
|
||||||
win32 {
|
win32 {
|
||||||
include(../winconf.pri)
|
include(../winconf.pri)
|
||||||
@@ -55,6 +22,32 @@ os2 {
|
|||||||
include(../os2conf.pri)
|
include(../os2conf.pri)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nox {
|
||||||
|
QT -= gui
|
||||||
|
TARGET = qbittorrent-nox
|
||||||
|
DEFINES += DISABLE_GUI
|
||||||
|
} else {
|
||||||
|
QT += xml
|
||||||
|
TARGET = qbittorrent
|
||||||
|
}
|
||||||
|
QT += network
|
||||||
|
|
||||||
|
# Vars
|
||||||
|
LANG_PATH = lang
|
||||||
|
ICONS_PATH = Icons
|
||||||
|
|
||||||
|
CONFIG(debug, debug|release):message(Project is built in DEBUG mode.)
|
||||||
|
CONFIG(release, debug|release):message(Project is built in RELEASE mode.)
|
||||||
|
|
||||||
|
# Disable debug output in release mode
|
||||||
|
CONFIG(release, debug|release) {
|
||||||
|
message(Disabling debug output.)
|
||||||
|
DEFINES += QT_NO_DEBUG_OUTPUT
|
||||||
|
}
|
||||||
|
|
||||||
|
# VERSION DEFINES
|
||||||
|
include(../version.pri)
|
||||||
|
|
||||||
DEFINES += QT_NO_CAST_TO_ASCII
|
DEFINES += QT_NO_CAST_TO_ASCII
|
||||||
# Fast concatenation (Qt >= 4.6)
|
# Fast concatenation (Qt >= 4.6)
|
||||||
DEFINES += QT_USE_FAST_CONCATENATION QT_USE_FAST_OPERATOR_PLUS
|
DEFINES += QT_USE_FAST_CONCATENATION QT_USE_FAST_OPERATOR_PLUS
|
||||||
|
|||||||
@@ -240,8 +240,6 @@ void TorrentCreatorDlg::updateOptimalPieceSize()
|
|||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
}while(i<m_piece_sizes.size());
|
}while(i<m_piece_sizes.size());
|
||||||
qDebug("ASSERT value %d <= %d", (int)(torrent_size/(m_piece_sizes.at(i)*1024.)), NB_PIECES_MIN);
|
|
||||||
Q_ASSERT((double)torrent_size/(m_piece_sizes.at(i)*1024.) > NB_PIECES_MIN);
|
|
||||||
comboPieceSize->setCurrentIndex(i);
|
comboPieceSize->setCurrentIndex(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ void TorrentCreatorThread::run() {
|
|||||||
add_files(fs, input_path.toUtf8().constData(), file_filter);
|
add_files(fs, input_path.toUtf8().constData(), file_filter);
|
||||||
#else
|
#else
|
||||||
// Adding files to the torrent
|
// Adding files to the torrent
|
||||||
path full_path = complete(path(input_path.toUtf8().constData()));
|
path full_path = path(input_path.toUtf8().constData());
|
||||||
add_files(fs, full_path, file_filter);
|
add_files(fs, full_path, file_filter);
|
||||||
#endif
|
#endif
|
||||||
if(abort) return;
|
if(abort) return;
|
||||||
@@ -125,12 +125,19 @@ void TorrentCreatorThread::run() {
|
|||||||
t.set_priv(is_private);
|
t.set_priv(is_private);
|
||||||
if(abort) return;
|
if(abort) return;
|
||||||
// create the torrent and print it to out
|
// create the torrent and print it to out
|
||||||
ofstream out(complete(path((const char*)save_path.toUtf8())), std::ios_base::binary);
|
qDebug("Saving to %s", qPrintable(save_path));
|
||||||
bencode(std::ostream_iterator<char>(out), t.generate());
|
std::vector<char> torrent;
|
||||||
|
bencode(back_inserter(torrent), t.generate());
|
||||||
|
QFile outfile(save_path);
|
||||||
|
if(outfile.open(QIODevice::WriteOnly)) {
|
||||||
|
outfile.write(&torrent[0], torrent.size());
|
||||||
|
outfile.close();
|
||||||
emit updateProgress(100);
|
emit updateProgress(100);
|
||||||
emit creationSuccess(save_path, parent_path);
|
emit creationSuccess(save_path, parent_path);
|
||||||
|
} else {
|
||||||
|
throw std::exception(tr("Cannot write the output file").toLocal8Bit().constData());
|
||||||
}
|
}
|
||||||
catch (std::exception& e){
|
} catch (std::exception& e){
|
||||||
emit creationFailure(QString::fromUtf8(e.what()));
|
emit creationFailure(QString::fromLocal8Bit(e.what()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,9 +53,12 @@
|
|||||||
#include <QRegExp>
|
#include <QRegExp>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <queue>
|
||||||
|
|
||||||
#include "qinisettings.h"
|
#include "qinisettings.h"
|
||||||
|
|
||||||
|
using namespace libtorrent;
|
||||||
|
|
||||||
TransferListWidget::TransferListWidget(QWidget *parent, MainWindow *main_window, QBtSession *_BTSession):
|
TransferListWidget::TransferListWidget(QWidget *parent, MainWindow *main_window, QBtSession *_BTSession):
|
||||||
QTreeView(parent), BTSession(_BTSession), main_window(main_window) {
|
QTreeView(parent), BTSession(_BTSession), main_window(main_window) {
|
||||||
// Create and apply delegate
|
// Create and apply delegate
|
||||||
@@ -312,24 +315,50 @@ void TransferListWidget::deleteVisibleTorrents() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void TransferListWidget::increasePrioSelectedTorrents() {
|
void TransferListWidget::increasePrioSelectedTorrents() {
|
||||||
|
qDebug() << Q_FUNC_INFO;
|
||||||
if(main_window->getCurrentTabWidget() != this) return;
|
if(main_window->getCurrentTabWidget() != this) return;
|
||||||
const QStringList hashes = getSelectedTorrentsHashes();
|
const QStringList hashes = getSelectedTorrentsHashes();
|
||||||
|
std::priority_queue<QPair<int, QTorrentHandle>, std::vector<QPair<int, QTorrentHandle> >, std::greater<QPair<int, QTorrentHandle> > > torrent_queue;
|
||||||
|
// Sort torrents by priority
|
||||||
foreach(const QString &hash, hashes) {
|
foreach(const QString &hash, hashes) {
|
||||||
|
try {
|
||||||
QTorrentHandle h = BTSession->getTorrentHandle(hash);
|
QTorrentHandle h = BTSession->getTorrentHandle(hash);
|
||||||
if(h.is_valid() && !h.is_seed()) {
|
if(!h.is_seed()) {
|
||||||
h.queue_position_up();
|
torrent_queue.push(qMakePair(h.queue_position(), h));
|
||||||
}
|
}
|
||||||
|
}catch(invalid_handle&){}
|
||||||
|
}
|
||||||
|
// Increase torrents priority (starting with the ones with highest priority)
|
||||||
|
while(!torrent_queue.empty()) {
|
||||||
|
QTorrentHandle h = torrent_queue.top().second;
|
||||||
|
try {
|
||||||
|
h.queue_position_up();
|
||||||
|
} catch(invalid_handle& h) {}
|
||||||
|
torrent_queue.pop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransferListWidget::decreasePrioSelectedTorrents() {
|
void TransferListWidget::decreasePrioSelectedTorrents() {
|
||||||
|
qDebug() << Q_FUNC_INFO;
|
||||||
if(main_window->getCurrentTabWidget() != this) return;
|
if(main_window->getCurrentTabWidget() != this) return;
|
||||||
const QStringList hashes = getSelectedTorrentsHashes();
|
const QStringList hashes = getSelectedTorrentsHashes();
|
||||||
|
std::priority_queue<QPair<int, QTorrentHandle>, std::vector<QPair<int, QTorrentHandle> >, std::less<QPair<int, QTorrentHandle> > > torrent_queue;
|
||||||
|
// Sort torrents by priority
|
||||||
foreach(const QString &hash, hashes) {
|
foreach(const QString &hash, hashes) {
|
||||||
|
try {
|
||||||
QTorrentHandle h = BTSession->getTorrentHandle(hash);
|
QTorrentHandle h = BTSession->getTorrentHandle(hash);
|
||||||
if(h.is_valid() && !h.is_seed()) {
|
if(!h.is_seed()) {
|
||||||
h.queue_position_down();
|
torrent_queue.push(qMakePair(h.queue_position(), h));
|
||||||
}
|
}
|
||||||
|
}catch(invalid_handle&){}
|
||||||
|
}
|
||||||
|
// Decrease torrents priority (starting with the ones with lowest priority)
|
||||||
|
while(!torrent_queue.empty()) {
|
||||||
|
QTorrentHandle h = torrent_queue.top().second;
|
||||||
|
try {
|
||||||
|
h.queue_position_down();
|
||||||
|
} catch(invalid_handle& h) {}
|
||||||
|
torrent_queue.pop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,8 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QRegExp>
|
#include <QRegExp>
|
||||||
#include <QTemporaryFile>
|
#include <QTemporaryFile>
|
||||||
|
#include <queue>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
using namespace libtorrent;
|
using namespace libtorrent;
|
||||||
|
|
||||||
@@ -498,23 +500,25 @@ void HttpConnection::respondCommand(QString command)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(command == "increasePrio") {
|
if(command == "increasePrio") {
|
||||||
QTorrentHandle h = QBtSession::instance()->getTorrentHandle(parser.post("hash"));
|
increaseTorrentsPriority(parser.post("hashes").split("|"));
|
||||||
if(h.is_valid()) h.queue_position_up();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(command == "decreasePrio") {
|
if(command == "decreasePrio") {
|
||||||
QTorrentHandle h = QBtSession::instance()->getTorrentHandle(parser.post("hash"));
|
decreaseTorrentsPriority(parser.post("hashes").split("|"));
|
||||||
if(h.is_valid()) h.queue_position_down();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(command == "topPrio") {
|
if(command == "topPrio") {
|
||||||
QTorrentHandle h = QBtSession::instance()->getTorrentHandle(parser.post("hash"));
|
foreach(const QString &hash, parser.post("hashes").split("|")) {
|
||||||
|
QTorrentHandle h = QBtSession::instance()->getTorrentHandle(hash);
|
||||||
if(h.is_valid()) h.queue_position_top();
|
if(h.is_valid()) h.queue_position_top();
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(command == "bottomPrio") {
|
if(command == "bottomPrio") {
|
||||||
QTorrentHandle h = QBtSession::instance()->getTorrentHandle(parser.post("hash"));
|
foreach(const QString &hash, parser.post("hashes").split("|")) {
|
||||||
|
QTorrentHandle h = QBtSession::instance()->getTorrentHandle(hash);
|
||||||
if(h.is_valid()) h.queue_position_bottom();
|
if(h.is_valid()) h.queue_position_bottom();
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(command == "recheck"){
|
if(command == "recheck"){
|
||||||
@@ -543,3 +547,49 @@ void HttpConnection::recheckAllTorrents() {
|
|||||||
QBtSession::instance()->recheckTorrent(h.hash());
|
QBtSession::instance()->recheckTorrent(h.hash());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HttpConnection::decreaseTorrentsPriority(const QStringList &hashes)
|
||||||
|
{
|
||||||
|
qDebug() << Q_FUNC_INFO << hashes;
|
||||||
|
std::priority_queue<QPair<int, QTorrentHandle>, std::vector<QPair<int, QTorrentHandle> >, std::less<QPair<int, QTorrentHandle> > > torrent_queue;
|
||||||
|
// Sort torrents by priority
|
||||||
|
foreach(const QString &hash, hashes) {
|
||||||
|
try {
|
||||||
|
QTorrentHandle h = QBtSession::instance()->getTorrentHandle(hash);
|
||||||
|
if(!h.is_seed()) {
|
||||||
|
torrent_queue.push(qMakePair(h.queue_position(), h));
|
||||||
|
}
|
||||||
|
}catch(invalid_handle&){}
|
||||||
|
}
|
||||||
|
// Decrease torrents priority (starting with the ones with lowest priority)
|
||||||
|
while(!torrent_queue.empty()) {
|
||||||
|
QTorrentHandle h = torrent_queue.top().second;
|
||||||
|
try {
|
||||||
|
h.queue_position_down();
|
||||||
|
} catch(invalid_handle& h) {}
|
||||||
|
torrent_queue.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HttpConnection::increaseTorrentsPriority(const QStringList &hashes)
|
||||||
|
{
|
||||||
|
qDebug() << Q_FUNC_INFO << hashes;
|
||||||
|
std::priority_queue<QPair<int, QTorrentHandle>, std::vector<QPair<int, QTorrentHandle> >, std::greater<QPair<int, QTorrentHandle> > > torrent_queue;
|
||||||
|
// Sort torrents by priority
|
||||||
|
foreach(const QString &hash, hashes) {
|
||||||
|
try {
|
||||||
|
QTorrentHandle h = QBtSession::instance()->getTorrentHandle(hash);
|
||||||
|
if(!h.is_seed()) {
|
||||||
|
torrent_queue.push(qMakePair(h.queue_position(), h));
|
||||||
|
}
|
||||||
|
}catch(invalid_handle&){}
|
||||||
|
}
|
||||||
|
// Increase torrents priority (starting with the ones with highest priority)
|
||||||
|
while(!torrent_queue.empty()) {
|
||||||
|
QTorrentHandle h = torrent_queue.top().second;
|
||||||
|
try {
|
||||||
|
h.queue_position_up();
|
||||||
|
} catch(invalid_handle& h) {}
|
||||||
|
torrent_queue.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -67,6 +67,9 @@ protected slots:
|
|||||||
void handleDownloadFailure(QString, QString);
|
void handleDownloadFailure(QString, QString);
|
||||||
void recheckTorrent(QString hash);
|
void recheckTorrent(QString hash);
|
||||||
void recheckAllTorrents();
|
void recheckAllTorrents();
|
||||||
|
void decreaseTorrentsPriority(const QStringList& hashes);
|
||||||
|
void increaseTorrentsPriority(const QStringList& hashes);
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HttpConnection(QTcpSocket *socket, HttpServer *httpserver);
|
HttpConnection(QTcpSocket *socket, HttpServer *httpserver);
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ bool HttpServer::isAuthorized(QByteArray auth, QString method) const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
QByteArray prop_nonce = regex_nonce.cap(1).toLocal8Bit();
|
QByteArray prop_nonce = regex_nonce.cap(1).toLocal8Bit();
|
||||||
qDebug("prop nonce is: %s", prop_nonce.data());
|
//qDebug("prop nonce is: %s", prop_nonce.data());
|
||||||
// get uri
|
// get uri
|
||||||
QRegExp regex_uri(".*uri=\"([^\"]+)\".*");
|
QRegExp regex_uri(".*uri=\"([^\"]+)\".*");
|
||||||
if(regex_uri.indexIn(auth) < 0) {
|
if(regex_uri.indexIn(auth) < 0) {
|
||||||
@@ -216,7 +216,7 @@ bool HttpServer::isAuthorized(QByteArray auth, QString method) const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
QByteArray prop_uri = regex_uri.cap(1).toLocal8Bit();
|
QByteArray prop_uri = regex_uri.cap(1).toLocal8Bit();
|
||||||
qDebug("prop uri is: %s", prop_uri.data());
|
//qDebug("prop uri is: %s", prop_uri.data());
|
||||||
// get response
|
// get response
|
||||||
QRegExp regex_response(".*response=[\"]?([\\w=]+)[\"]?.*");
|
QRegExp regex_response(".*response=[\"]?([\\w=]+)[\"]?.*");
|
||||||
if(regex_response.indexIn(auth) < 0) {
|
if(regex_response.indexIn(auth) < 0) {
|
||||||
@@ -224,7 +224,7 @@ bool HttpServer::isAuthorized(QByteArray auth, QString method) const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
QByteArray prop_response = regex_response.cap(1).toLocal8Bit();
|
QByteArray prop_response = regex_response.cap(1).toLocal8Bit();
|
||||||
qDebug("prop response is: %s", prop_response.data());
|
//qDebug("prop response is: %s", prop_response.data());
|
||||||
// Compute correct reponse
|
// Compute correct reponse
|
||||||
QCryptographicHash md5_ha2(QCryptographicHash::Md5);
|
QCryptographicHash md5_ha2(QCryptographicHash::Md5);
|
||||||
md5_ha2.addData(method.toLocal8Bit() + ":" + prop_uri);
|
md5_ha2.addData(method.toLocal8Bit() + ":" + prop_uri);
|
||||||
@@ -239,21 +239,21 @@ bool HttpServer::isAuthorized(QByteArray auth, QString method) const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
QByteArray prop_nc = regex_nc.cap(1).toLocal8Bit();
|
QByteArray prop_nc = regex_nc.cap(1).toLocal8Bit();
|
||||||
qDebug("prop nc is: %s", prop_nc.data());
|
//qDebug("prop nc is: %s", prop_nc.data());
|
||||||
QRegExp regex_cnonce(".*cnonce=[\"]?([\\w=]+)[\"]?.*");
|
QRegExp regex_cnonce(".*cnonce=[\"]?([\\w=]+)[\"]?.*");
|
||||||
if(regex_cnonce.indexIn(auth) < 0) {
|
if(regex_cnonce.indexIn(auth) < 0) {
|
||||||
qDebug("AUTH-PROB: qop but missing cnonce");
|
qDebug("AUTH-PROB: qop but missing cnonce");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
QByteArray prop_cnonce = regex_cnonce.cap(1).toLocal8Bit();
|
QByteArray prop_cnonce = regex_cnonce.cap(1).toLocal8Bit();
|
||||||
qDebug("prop cnonce is: %s", prop_cnonce.data());
|
//qDebug("prop cnonce is: %s", prop_cnonce.data());
|
||||||
QRegExp regex_qop(".*qop=[\"]?(\\w+)[\"]?.*");
|
QRegExp regex_qop(".*qop=[\"]?(\\w+)[\"]?.*");
|
||||||
if(regex_qop.indexIn(auth) < 0) {
|
if(regex_qop.indexIn(auth) < 0) {
|
||||||
qDebug("AUTH-PROB: missing qop");
|
qDebug("AUTH-PROB: missing qop");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
QByteArray prop_qop = regex_qop.cap(1).toLocal8Bit();
|
QByteArray prop_qop = regex_qop.cap(1).toLocal8Bit();
|
||||||
qDebug("prop qop is: %s", prop_qop.data());
|
//qDebug("prop qop is: %s", prop_qop.data());
|
||||||
md5_ha.addData(password_ha1+":"+prop_nonce+":"+prop_nc+":"+prop_cnonce+":"+prop_qop+":"+ha2);
|
md5_ha.addData(password_ha1+":"+prop_nonce+":"+prop_nc+":"+prop_cnonce+":"+prop_qop+":"+ha2);
|
||||||
response = md5_ha.result().toHex();
|
response = md5_ha.result().toHex();
|
||||||
} else {
|
} else {
|
||||||
@@ -261,7 +261,7 @@ bool HttpServer::isAuthorized(QByteArray auth, QString method) const {
|
|||||||
md5_ha.addData(password_ha1+":"+prop_nonce+":"+ha2);
|
md5_ha.addData(password_ha1+":"+prop_nonce+":"+ha2);
|
||||||
response = md5_ha.result().toHex();
|
response = md5_ha.result().toHex();
|
||||||
}
|
}
|
||||||
qDebug("AUTH: comparing reponses: (%d)", static_cast<int>(prop_response == response));
|
//qDebug("AUTH: comparing reponses: (%d)", static_cast<int>(prop_response == response));
|
||||||
return prop_response == response;
|
return prop_response == response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ initializeWindows = function(){
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
['pause','resume','decreasePrio','increasePrio', 'topPrio', 'bottomPrio', 'recheck'].each(function(item) {
|
['pause','resume', 'recheck'].each(function(item) {
|
||||||
addClickEvent(item, function(e){
|
addClickEvent(item, function(e){
|
||||||
new Event(e).stop();
|
new Event(e).stop();
|
||||||
var h = myTable.selectedIds();
|
var h = myTable.selectedIds();
|
||||||
@@ -221,12 +221,17 @@ initializeWindows = function(){
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
['decreasePrio','increasePrio', 'topPrio', 'bottomPrio'].each(function(item) {
|
||||||
|
addClickEvent(item, function(e){
|
||||||
|
new Event(e).stop();
|
||||||
|
setPriorityFN(item);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
setPriorityFN = function(cmd) {
|
setPriorityFN = function(cmd) {
|
||||||
var h = myTable.selectedIds();
|
var h = myTable.selectedIds();
|
||||||
if(h.length){
|
if(h.length) {
|
||||||
h.each(function(hash, index){
|
new Request({url: '/command/'+cmd, method: 'post', data: {hashes: h.join("|")}}).send();
|
||||||
new Request({url: '/command/'+cmd, method: 'post', data: {hash: hash}}).send();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
# Generated by the configure file
|
||||||
|
include(../conf.pri)
|
||||||
|
|
||||||
# COMPILATION SPECIFIC
|
# COMPILATION SPECIFIC
|
||||||
QT += dbus
|
QT += dbus
|
||||||
QMAKE_LFLAGS_APP += -rdynamic
|
QMAKE_LFLAGS_APP += -rdynamic
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
os2 {
|
os2 {
|
||||||
DEFINES += VERSION=\'\"v2.5.2\"\'
|
DEFINES += VERSION=\'\"v2.5.4\"\'
|
||||||
} else {
|
} else {
|
||||||
DEFINES += VERSION=\\\"v2.5.2\\\"
|
DEFINES += VERSION=\\\"v2.5.4\\\"
|
||||||
}
|
}
|
||||||
DEFINES += VERSION_MAJOR=2
|
DEFINES += VERSION_MAJOR=2
|
||||||
DEFINES += VERSION_MINOR=5
|
DEFINES += VERSION_MINOR=5
|
||||||
DEFINES += VERSION_BUGFIX=2
|
DEFINES += VERSION_BUGFIX=4
|
||||||
|
|
||||||
# NORMAL,ALPHA,BETA,RELEASE_CANDIDATE,DEVEL
|
# NORMAL,ALPHA,BETA,RELEASE_CANDIDATE,DEVEL
|
||||||
DEFINES += VERSION_TYPE=NORMAL
|
DEFINES += VERSION_TYPE=NORMAL
|
||||||
|
|||||||
@@ -26,8 +26,9 @@ DEFINES += _WIN32
|
|||||||
DEFINES += _WIN32_WINNT=0x0500
|
DEFINES += _WIN32_WINNT=0x0500
|
||||||
DEFINES += __USE_W32_SOCKETS
|
DEFINES += __USE_W32_SOCKETS
|
||||||
DEFINES += WITH_SHIPPED_GEOIP_H
|
DEFINES += WITH_SHIPPED_GEOIP_H
|
||||||
|
DEFINES += TORRENT_USE_WPATH
|
||||||
|
|
||||||
debug {
|
CONFIG(debug, debug|release) {
|
||||||
DEFINES += TORRENT_DEBUG
|
DEFINES += TORRENT_DEBUG
|
||||||
} else {
|
} else {
|
||||||
DEFINES += NDEBUG
|
DEFINES += NDEBUG
|
||||||
@@ -35,7 +36,7 @@ debug {
|
|||||||
|
|
||||||
RC_FILE = qbittorrent.rc
|
RC_FILE = qbittorrent.rc
|
||||||
|
|
||||||
debug {
|
CONFIG(debug, debug|release) {
|
||||||
LIBS += libtorrentd.lib \
|
LIBS += libtorrentd.lib \
|
||||||
libboost_system-vc90-mt-gd.lib \
|
libboost_system-vc90-mt-gd.lib \
|
||||||
libboost_filesystem-vc90-mt-gd.lib \
|
libboost_filesystem-vc90-mt-gd.lib \
|
||||||
|
|||||||
Reference in New Issue
Block a user