1
mirror of https://github.com/qbittorrent/qBittorrent synced 2025-10-19 05:12:18 +02:00

Compare commits

..

116 Commits

Author SHA1 Message Date
Christophe Dumez
f6a58b3470 Tagged v2.2.8 release 2010-05-24 19:51:42 +00:00
Christophe Dumez
ef0a826180 Bump to v2.2.8 2010-05-24 19:40:22 +00:00
Christophe Dumez
d79f779c0a BUGFIX: Fix possible checkbox update in Web UI 2010-05-24 18:52:12 +00:00
Christophe Dumez
1dadc08625 BUGFIX: Fix torrent error state clearance on resuming 2010-05-24 14:09:15 +00:00
Christophe Dumez
5f49af5ade Torrent queue position now starts at 1 (closes #581130) 2010-05-21 12:02:22 +00:00
Christophe Dumez
1e67f0afa4 Fix sorting of ETA column when having infinite values (closes #583347) 2010-05-21 11:47:55 +00:00
Christophe Dumez
dd9cf6c3ab Make sure seeding torrents ETA stays 0 under all circumstances 2010-05-21 11:36:21 +00:00
Christophe Dumez
36483d795e ETA for finished torrent is now 0 instead of Infinite (closes #583704)
Fix unicode issue in start seeding after torrent creation code
2010-05-21 11:28:36 +00:00
Christophe Dumez
303c209839 Fix torrent properties layout 2010-05-18 07:24:49 +00:00
Christophe Dumez
6790889cc3 Fixed Croatian translator name 2010-05-17 21:48:12 +00:00
Christophe Dumez
3a24b66adc Updated changelog date 2010-05-12 19:50:53 +00:00
Christophe Dumez
1a3f5e81e3 BUGFIX: Added support for url encoded ampersands in RSS 2010-05-12 19:42:32 +00:00
Christophe Dumez
818a79c9db COSMETIC: Sort torrent labels in popup menu 2010-05-12 19:05:50 +00:00
Christophe Dumez
93f635f9f4 Updated Croatian string 2010-05-05 21:01:50 +00:00
Christophe Dumez
73ec018732 Fix possible crash in RSS selection code 2010-05-05 14:32:22 +00:00
Christophe Dumez
68832df0c4 Even safer dateTime parsing 2010-05-01 18:09:42 +00:00
Christophe Dumez
ce817836c0 Made Datetime parsing more reliable 2010-05-01 17:40:14 +00:00
Christophe Dumez
89fbfdbd1b BUGFIX: Use guid or news url as RSS items identifier (instead of title) 2010-05-01 09:44:09 +00:00
Christophe Dumez
797d89fc3c Update resource file 2010-05-01 08:50:35 +00:00
Christophe Dumez
abc6e1c719 Added Croatian binary file 2010-05-01 08:49:05 +00:00
Christophe Dumez
31558aea8d Added Croatian translation 2010-05-01 08:47:37 +00:00
Christophe Dumez
be711920fd Commit croatian translation 2010-05-01 08:41:22 +00:00
Christophe Dumez
5d899bbe7c Bump to v2.2.7 2010-05-01 08:37:16 +00:00
Christophe Dumez
9c63e418cf Improved empty folder removing code 2010-05-01 08:31:28 +00:00
Christophe Dumez
984e7c7c7b BUGFIX: Fix torrent moving after completion feature 2010-05-01 08:14:30 +00:00
Christophe Dumez
1ae460bc67 Windows compilation fixes (Thanks LiHuiShuo 2010-04-28 11:47:11 +00:00
Christophe Dumez
c7ffa9096c Fix in last commit 2010-04-23 16:47:43 +00:00
Christophe Dumez
01448f4c14 Another initialization fix for Web UI 2010-04-23 08:11:38 +00:00
Christophe Dumez
7e8754baf3 Updated Changelog
Added some debug information
2010-04-23 08:07:25 +00:00
Christophe Dumez
8206ec9012 Fix possible initialization problem in Web UI 2010-04-23 08:03:31 +00:00
Christophe Dumez
a611361823 Translated menu entry into Arabic 2010-04-19 12:55:23 +00:00
Christophe Dumez
59c77a3f9c Prepare for v2.2.6 release 2010-04-18 13:56:53 +00:00
Christophe Dumez
8ce9649310 Make sure status filters height is correct when the visual style changes 2010-04-17 14:21:34 +00:00
Christophe Dumez
fe5ac5d083 Updated Arabic translation 2010-04-16 18:33:09 +00:00
Christophe Dumez
8740627c12 Arabic translation fixes 2010-04-15 19:22:20 +00:00
Christophe Dumez
c47f2e449b Support Right to left languages 2010-04-13 18:46:44 +00:00
Christophe Dumez
db09e40690 Added an OS/2 specific README file 2010-04-13 10:42:10 +00:00
Christophe Dumez
3ca3f91590 Some Arabic related improvements 2010-04-12 19:23:24 +00:00
Christophe Dumez
ee9a8d0563 Added Arabic translation 2010-04-12 18:59:39 +00:00
Christophe Dumez
3542980e50 BUGFIX: Stop rechecking torrents when they are moved 2010-04-10 15:55:57 +00:00
Christophe Dumez
f243b8535a - BUGFIX: Remove old folder when moving a torrent
- BUGFIX: Improved reliability of torrent moving
2010-04-10 15:03:16 +00:00
Christophe Dumez
7953809024 BUGFIX: Added support for single-thread boost 2010-04-09 18:51:32 +00:00
Christophe Dumez
3ac65a477c Remove some unneeded dependencies for qBittorrent nox 2010-04-09 15:32:40 +00:00
Christophe Dumez
00cab62381 Improved previous patch 2010-04-08 16:37:02 +00:00
Christophe Dumez
ab31300201 eCS (OS/2) compilation fix (Thanks Silvan Scherrer) 2010-04-08 16:32:21 +00:00
Christophe Dumez
754eb2788f Qt 4.4 compilation fix 2010-04-07 10:02:00 +00:00
Christophe Dumez
8dcb9f17bc Updated INSTALL file 2010-04-07 09:58:53 +00:00
Christophe Dumez
38121920a1 Bring back compatibility with boost v1.34 2010-04-07 09:54:48 +00:00
Christophe Dumez
e815f934e1 Improved libboost detection again 2010-04-07 09:48:34 +00:00
Christophe Dumez
4a305222be Updated boost dependencies in INSTALL file 2010-04-07 09:43:19 +00:00
Christophe Dumez
dcfed67173 Improved libboost detection by configure file 2010-04-07 09:36:44 +00:00
Christophe Dumez
db43606620 Do not display a warning when libtorrent v0.14.x is detected since it is the advised version 2010-04-07 09:07:09 +00:00
Christophe Dumez
3b16a89c36 Improved slow_off icon 2010-04-07 09:03:43 +00:00
Christophe Dumez
4c03e708e0 Added icons to menu actions in Web UI 2010-04-07 08:33:01 +00:00
Christophe Dumez
3e0fc5234f Flat buttons in status bar should never get focus 2010-04-07 08:20:32 +00:00
Christophe Dumez
5ba7e643b9 Bump to v2.2.5 2010-04-07 08:07:07 +00:00
Christophe Dumez
c53e265b70 Improved speed limits icons location in preferences 2010-04-07 08:03:50 +00:00
Christophe Dumez
2b5f12e014 Fix transparency of speed limits icons
Dropped dependency on Qt gif library
2010-04-07 08:01:37 +00:00
Christophe Dumez
ee518973ea BUGFIX: Fix Download from URL title size in Web UI 2010-04-06 17:03:54 +00:00
Christophe Dumez
aa08552686 Fix deprecation warnings with libtorrent v0.15 2010-04-06 16:55:11 +00:00
Christophe Dumez
fa43393b65 BUGFIX: Fix HTTPS protocol support in torrent/rss downloader 2010-04-06 16:27:34 +00:00
Christophe Dumez
48dcfb56ad Fix torrent addition dialog buttons height (Thanks Mariusz Fik) 2010-04-06 16:15:01 +00:00
Christophe Dumez
511fa5d988 BUGFIX: Fix crash when adding a new torrent label 2010-04-06 16:09:06 +00:00
Christophe Dumez
5694c8aa8b Updated Polish translation 2010-04-06 16:01:25 +00:00
Christophe Dumez
e3098c5191 Fix default width of file name column in torrent content 2010-04-06 09:30:35 +00:00
Christophe Dumez
dbacb1961c Added forgotten icons 2010-04-06 07:50:08 +00:00
Christophe Dumez
1092064115 Updated Changelog 2010-04-05 23:34:47 +00:00
Christophe Dumez
7988f15da7 Update icons resource file 2010-04-05 23:17:25 +00:00
Christophe Dumez
689df74d7e Bump to v2.2.4 2010-04-05 23:16:10 +00:00
Christophe Dumez
c59dde4f58 Fix in last commit 2010-04-05 21:04:14 +00:00
Christophe Dumez
4bc36b4d28 COSMETIC: Improved alternative speed limits icons 2010-04-05 20:55:37 +00:00
Christophe Dumez
430c7d2deb BUGFIX: Display correct share ratio for paused torrents 2010-04-05 20:11:27 +00:00
Christophe Dumez
d72c79b259 Correctly clear trackers error messages once they work 2010-04-05 20:00:12 +00:00
Christophe Dumez
efbf470585 Fix Web UI about dialog 2010-04-05 19:53:08 +00:00
Christophe Dumez
4e20723ae6 BUGFIX: Fix torrent addition window layout (torrent content not expanding) 2010-04-05 19:44:27 +00:00
Christophe Dumez
f3268bf49e Similar fix 2010-04-05 19:33:12 +00:00
Christophe Dumez
5aba9179c4 Similar fixes 2010-04-05 19:32:06 +00:00
Christophe Dumez
450814ae23 Fix possible crash when adding a torrent 2010-04-05 19:02:21 +00:00
Christophe Dumez
ba22fa8331 Bump to v2.2.3 2010-04-04 19:55:16 +00:00
Christophe Dumez
5ce02cb612 Clean fix for progress display with cleanlooks style 2010-03-31 14:36:16 +00:00
Christophe Dumez
1013f39a42 A msvc compilation fix 2010-03-30 19:40:35 +00:00
Christophe Dumez
cd5c4bf464 On Windows, add qBittorrent executable folder to PATH envar 2010-03-30 19:03:12 +00:00
Christophe Dumez
84bfc54b03 Updated Changelog 2010-03-30 12:13:43 +00:00
Christophe Dumez
5b3b5eb2ef Enable Apply button when alternative rate limits are changed 2010-03-30 12:09:51 +00:00
Christophe Dumez
990a863d41 Several compilation and execution fixes for Windows and OS/2
Cleaner binutils gold linker support
2010-03-30 11:39:40 +00:00
Christophe Dumez
7f27d10735 Fix possible error in boost exception handling 2010-03-29 10:44:33 +00:00
Christophe Dumez
1377a75a53 Fix typo 2010-03-27 16:00:47 +00:00
Christophe Dumez
bcd33fc861 ANother Windows fix 2010-03-27 15:58:28 +00:00
Christophe Dumez
46d8fa1656 Another compilation fix 2010-03-27 15:50:50 +00:00
Christophe Dumez
28cf69b84d Windows compilation fix improvement 2010-03-27 09:17:40 +00:00
Christophe Dumez
89389df74d Compilation fix on Windows (getuid missing) 2010-03-27 09:06:01 +00:00
Christophe Dumez
77c29f48cb Fix possible crash when deleting a torrent just after pausing it 2010-03-23 21:42:33 +00:00
Christophe Dumez
c5d92f3d69 FEATURE: DHT port can be set from Web UI 2010-03-22 20:41:36 +00:00
Christophe Dumez
54487c8247 Improvement to last commit 2010-03-22 19:42:47 +00:00
Christophe Dumez
be64008870 Bump to v2.2.2 2010-03-22 19:12:34 +00:00
Christophe Dumez
8113b150dd Updated french translation 2010-03-22 19:07:36 +00:00
Christophe Dumez
4a33367cb0 Fix to last commit 2010-03-22 19:04:48 +00:00
Christophe Dumez
0af5d82114 BUGFIX: Fix possible crash with folder scanning 2010-03-22 18:57:32 +00:00
Christophe Dumez
10c4fd330a I18N: Updated Polish translation (thanks Szymon Świerkosz) 2010-03-22 18:24:32 +00:00
Christophe Dumez
9a30d5a295 Properly raise SIGSEGV/SIGABRT after catching it 2010-03-20 21:44:11 +00:00
Christophe Dumez
724b47d999 Save fast resume data every 3 minutes 2010-03-20 21:25:31 +00:00
Christophe Dumez
2c0f7c33a2 Made M3U files previewable 2010-03-20 19:38:21 +00:00
Christophe Dumez
ce33e266fe Attempt to fix mac compilation 2010-03-20 19:14:17 +00:00
Christophe Dumez
2f291daefa Fix Ctrl+A in Web UI 2010-03-20 15:48:48 +00:00
Christophe Dumez
722f2aeb5d BUGFIX: Ask for user confirmation for recursive torrent download
BUGFIX: Fix "add file" dialog in torrent creation tool
2010-03-20 11:33:09 +00:00
Christophe Dumez
d5b9598b5b BUGFIX: Fix file filtering in complex torrents 2010-03-19 11:14:35 +00:00
Christophe Dumez
cc7d74b67c BUGFIX: Fix progress display with cleanlook style 2010-03-19 08:06:56 +00:00
Christophe Dumez
e853b0b736 Code optimization 2010-03-18 23:25:17 +00:00
Christophe Dumez
5e395b24a9 Code optimization 2010-03-18 23:13:41 +00:00
Christophe Dumez
9c3789f83f FEATURE: Display pieces that are being downloaded 2010-03-18 23:03:56 +00:00
Christophe Dumez
758595dc8c BUGFIX: Added back file prioritizing in Web UI 2010-03-18 20:07:10 +00:00
Christophe Dumez
01f9e989ef Bump to v2.2.1 2010-03-18 19:32:43 +00:00
Christophe Dumez
eb9f0cb559 Added back folder watching to Web UI 2010-03-18 19:27:23 +00:00
Christophe Dumez
2592948182 Fix Web UI compatiblity with Safari 2010-03-16 00:24:39 +00:00
Christophe Dumez
6f6ab1c439 Qt 4.4 compilation fix 2010-03-15 18:12:55 +00:00
Christophe Dumez
b10e606dda Branched v2.2.x 2010-03-14 20:44:17 +00:00
107 changed files with 17158 additions and 7729 deletions

View File

@@ -60,11 +60,13 @@ Images Authors:
Translations authors:
* files: src/lang/*.ts
copyright:
- Arabic: SDERAWI (abz8868@msn.com) and sn51234 (nesseyan@gmail.com)
- Brazilian: Nick Marinho (nickmarinho@gmail.com)
- Bulgarian: Tsvetan & Boyko Bankoff (emerge_life@users.sourceforge.net)
- Catalan: Francisco Luque Contreras (frannoe@ya.com)
- Chinese (Simplified): Guo Yue (yue.guo0418@gmail.com)
- Chinese (Traditional): Yi-Shun Wang (dnextstep@gmail.com)
- Croatian: Oliver Mucafir (oliver.untwist@gmail.com)
- Czech: Jirka Vilim (web@tets.cz)
- Danish: Mathias Nielsen (comoneo@gmail.com)
- Dutch: Joost Schipper (heavyjoost@users.sourceforge.net)

View File

@@ -1,3 +1,81 @@
* Mon May 24 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.8
- BUGFIX: ETA for finished torrent is now 0 instead of Infinite (closes #583704)
- BUGFIX: Fix sorting of ETA column when having infinite values (closes #583347)
- BUGFIX: Torrent queue position now starts at 1 (closes #581130)
- BUGFIX: Fix unicode issue in start seeding after torrent creation code
- BUGFIX: Fix torrent error state clearance on resuming
- BUGFIX: Fix possible checkbox update in Web UI
- COSMETIC: Fix torrent properties layout
* Wed May 12 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.7
- BUGFIX: Fix unicode problem in torrent moving code
- BUGFIX: Fix possible initialization problem in Web UI
- BUGFIX: Fix torrent moving after completion feature
- BUGFIX: Improved empty folder removing code
- BUGFIX: Use guid or news url as RSS items identifier (instead of title)
- BUGFIX: Fix possible crash in RSS item selection code
- BUGFIX: Added support for url encoded ampersands in RSS
- COSMETIC: Sort torrent labels in popup menu
- I18N: Added Croatian translation
* Sun Apr 18 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.6
- BUGFIX: Announce to all trackers at once
- BUGFIX: Added support for single-thread boost
- BUGFIX: Remove old folder when moving a torrent
- BUGFIX: Improved reliability of torrent moving
- BUGFIX: Stop rechecking torrents when they are moved
- BUGFIX: Status filters height stays correct when the visual style changes
- I18N: Added Arabic translation
* Wed Apr 07 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.5
- BUGFIX: Fix crash when adding a new torrent label
- BUGFIX: Fix HTTPS protocol support in torrent/rss downloader
- BUGFIX: Fix default width of file name column in torrent content
- BUGFIX: Fix torrent addition dialog buttons height
- BUGFIX: Fix deprecation warnings with libtorrent v0.15
- BUGFIX: Fix "Download from URL" title size in Web UI
- BUGFIX: Fix transparency of speed limits icons
- BUGFIX: Dropped dependency on Qt gif library
- BUGFIX: Improved libboost detection by configure file
- BUGFIX: Bring back compatibility with boost v1.34
- COSMETIC: Added icons to menu actions in Web UI
* Tue Apr 06 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.4
- BUGFIX: Fix possible crash when adding a torrent
- BUGFIX: Fix failure to remember some torrents on startup
- BUGFIX: Fix torrent addition window layout (torrent content not expanding)
- BUGFIX: Fix about dialog in Web UI
- BUGFIX: Correctly clear trackers error messages once they work
- BUGFIX: Display correct share ratio for paused torrents
- COSMETIC: Improved alternative speed limits icons
* Sun Apr 04 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.3
- BUGFIX: Fix possible crash when deleting a torrent just after pausing it
- BUGFIX: Enable Apply button when alternative rate limits are changed
- BUGFIX: Source compatibility with Windows (Thanks Ishan Arora)
- BUGFIX: Source compatibility with eCS (OS/2) (Thanks Silvan Scherrer)
- BUGFIX: Cleaner binutils gold linker support
- BUGFIX: Clean fix for progress display with cleanlooks style
* Mon Mar 22 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.2
- FEATURE: DHT port can be set from Web UI
- BUGFIX: Fix possible crash with folder scanning
- BUGFIX: Fix Mac compilation
- BUGFIX: Save fast resume data every 3 minutes (for robustness)
- I18N: Updated Polish translation (thanks Szymon Świerkosz)
* Sat Mar 20 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.1
- FEATURE: Display pieces that are being downloaded
- FEATURE: Added back folder watching in Web UI
- FEATURE: Added back file prioritizing in Web UI
- BUGFIX: Fix compilation with Qt 4.4
- BUGFIX: Fix Web UI compatibility with Safari
- BUGFIX: Fix progress display with cleanlook style
- BUGFIX: Fix file filtering in complex torrents
- BUGFIX: Ask for user confirmation for recursive torrent download
- BUGFIX: Fix "add file" dialog in torrent creation tool
- BUGFIX: Fix "Ctrl+A" in Web UI
* Sun Mar 14 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.2.0
- FEATURE: User can set alternative speed limits for fast toggling
- FEATURE: Bandwidth scheduler (automatically use alternative speed limits for a given period)

View File

@@ -14,11 +14,13 @@ qBittorrent - A BitTorrent client in C++ / Qt4
- pkg-config executable
- libtorrent-rasterbar by Arvid Norberg (>= 0.14.4 REQUIRED, >= v0.15.0 ADVISED)
- libtorrent-rasterbar by Arvid Norberg (>= 0.14.4 REQUIRED, compatible with v0.15.x)
-> http://www.libtorrent.net
Be careful: another library (the one used by rTorrent) uses a similar name.
- libboost: libboost-filesystem, libboost-date-time, libboost-thread, libboost-serialization
- libboost 1.34.x (libboost-filesystem, libboost-thread, libboost-date-time) + libasio
or
- libboost >= 1.35.x (libboost-system, libboost-filesystem, libboost-thread, libboost-date-time)
- python >= 2.3 (needed by search engine)
* Run time only dependency

62
README.os2 Normal file
View File

@@ -0,0 +1,62 @@
qBittorrent - A BitTorrent client in Qt4
------------------------------------------
This is the eComStation (OS/2) qBittorrent part of the readme. See also README for more general information.
Building qBittorrent
********************
Requirements
============
- gcc based build env (recommended gcc v4.4.2 or greater)
- Qt4 for eCS (OS/2) dev package (see http://svn.netlabs.org/qt4 for more information)
- libtorrent-rasterbar for eCS (OS/2) port (see http://svn.netlabs.org/ports for more information)
- boost for eCS (OS/2) port (see http://svn.netlabs.org/ports for more information)
How to build
============
First you need to create the conf.pri file in the same dir as this readme.os2 is.
the conf.pri file has the following content:
##### conf.pri content beginn #####
PREFIX = .
BINDIR = ./bin
INCDIR = ./include
LIBDIR = ./lib
DATADIR = ./share
CONFIG += staticlib
INCLUDEPATH += x:/trees/libtorrent/trunk/include
LIBS += -Lx:/trees/libtorrent/trunk/src/.libs \
-Lx:/trees/boost/trunk/stage/lib \
-Lx:/trees/openssl \
-Lx:/extras/lib
##### conf.pri content end #####
Of course all the above path references have to be adjusted to your build env.
It should now be easy to build qBittorrent:
Simply type:
$ qmake
Followed by:
$ make
If all works fine you should get a working qbittorrent executable.
If you have any question regarding the eCS (OS/2) port of qBittorrent you can meet me (_diver) on IRC:
#netlabs on irc.freenode.net
------------------------------------------
Silvan Scherrer <silvan.scherrer@aroa.ch>

91
configure vendored
View File

@@ -21,6 +21,7 @@ Dependency options:
--disable-gui Disable qBittorrent Graphical user
interface for headless running
--with-libboost-inc=[path] Path to libboost include files
--with-libboost-lib=[path] Path to libboost library files
--disable-libnotify Disable use of libnotify
--disable-geoip-database Disable use of geoip-database
--with-geoip-database-embedded Geoip Database will be embedded in
@@ -152,6 +153,11 @@ while [ $# -gt 0 ]; do
shift
;;
--with-libboost-lib=*)
QC_WITH_LIBBOOST_LIB=$optarg
shift
;;
--disable-libnotify)
QC_DISABLE_libnotify="Y"
shift
@@ -190,6 +196,7 @@ echo DATADIR=$DATADIR
echo EX_QTDIR=$EX_QTDIR
echo QC_DISABLE_GUI=$QC_DISABLE_GUI
echo QC_WITH_LIBBOOST_INC=$QC_WITH_LIBBOOST_INC
echo QC_WITH_LIBBOOST_LIB=$QC_WITH_LIBBOOST_LIB
echo QC_DISABLE_libnotify=$QC_DISABLE_libnotify
echo QC_DISABLE_geoip_database=$QC_DISABLE_geoip_database
echo QC_WITH_GEOIP_DATABASE_EMBEDDED=$QC_WITH_GEOIP_DATABASE_EMBEDDED
@@ -357,16 +364,21 @@ public:
conf->addIncludePath(incs[n]);
//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. Some feature will be disabled because they require v%s.\n", version.toLocal8Bit().data(), adv_ver.toUtf8().data());
else
if(conf->findPkgConfig("libtorrent-rasterbar", mode, adv_ver, &version, &incs, &libs, &other)) {
//printf("\nWarning: libtorrent-rasterbar v%s was detected. Some feature will be disabled because they require v%s.\n", version.toLocal8Bit().data(), adv_ver.toUtf8().data());
//else
conf->addDefine("LIBTORRENT_0_15");
}
// Get linking parameters
QStringList params;
QByteArray staticlibs;
params << "--static" << "--libs" << "libtorrent-rasterbar";
conf->doCommand("pkg-config", params, &staticlibs);
conf->addLib(staticlibs.trimmed());
//QStringList params;
//QByteArray staticlibs;
//params << "--static" << "--libs" << "libtorrent-rasterbar";
//conf->doCommand("pkg-config", params, &staticlibs);
//conf->addLib(staticlibs.trimmed());
//libcrypto
if(conf->getenv("QC_DISABLE_GUI").isEmpty()) {
conf->addLib("-lcrypto");
}
return true;
}
};
@@ -375,14 +387,39 @@ public:
-----BEGIN QCMOD-----
name: libboost
arg: with-libboost-inc=[path], Path to libboost include files
arg: with-libboost-lib=[path], Path to libboost library files
-----END QCMOD-----
*/
#include <boost/version.hpp>
class qc_libboost : public ConfObj
{
public:
qc_libboost(Conf *c) : ConfObj(c) {}
QString name() const { return "libboost"; }
QString shortname() const { return "libboost"; }
QString findBoostLib(QString path, QString lib) const {
QString name;
QDir libDir(path);
QStringList filters;
filters << "libboost_"+lib+"*-mt*.so";
QStringList result = libDir.entryList(filters, QDir::Files);
if(!result.empty()) {
name = result.first().mid(3);
// Remove .so
name.chop(3);
} else {
// Fall back to non -mt boost lib
filters.clear();
filters << "libboost_"+lib+"*.so";
result = libDir.entryList(filters, QDir::Files);
if(!result.empty()) {
name = result.first().mid(3);
// Remove .so
name.chop(3);
}
}
return name;
}
bool exec(){
QString s;
s = conf->getenv("QC_WITH_LIBBOOST_INC");
@@ -424,6 +461,43 @@ public:
}
}
conf->addIncludePath(s);
// Find library
s = conf->getenv("QC_WITH_LIBBOOST_LIB");
QStringList required_libs;
#if BOOST_VERSION >= 103500
required_libs << "system";
#endif
if(conf->getenv("QC_DISABLE_GUI").isEmpty()) {
// Not required by nox
required_libs << "filesystem" << "thread";
}
QStringList libDirs;
libDirs << "/usr/lib/" << "/usr/lib64/" << "/usr/local/lib/" << "/usr/local/lib64/";
foreach(const QString& lib, required_libs) {
if(!s.isEmpty()) {
QString detected_name = findBoostLib(s, lib);
if(detected_name.isEmpty()) {
printf("Could not find boost %s library!\n", qPrintable(lib));
return false;
} else {
conf->addLib("-l"+detected_name);
}
} else {
bool found = false;
foreach(const QString& libDir, libDirs) {
QString detected_name = findBoostLib(libDir, lib);
if(!detected_name.isEmpty()) {
conf->addLib("-l"+detected_name);
found = true;
break;
}
}
if(!found) {
printf("Could not find boost %s library!\n", qPrintable(lib));
return false;
}
}
}
return true;
}
};
@@ -1483,6 +1557,7 @@ export DATADIR
export EX_QTDIR
export QC_DISABLE_GUI
export QC_WITH_LIBBOOST_INC
export QC_WITH_LIBBOOST_LIB
export QC_DISABLE_libnotify
export QC_DISABLE_geoip_database
export QC_WITH_GEOIP_DATABASE_EMBEDDED

View File

@@ -2,14 +2,39 @@
-----BEGIN QCMOD-----
name: libboost
arg: with-libboost-inc=[path], Path to libboost include files
arg: with-libboost-lib=[path], Path to libboost library files
-----END QCMOD-----
*/
#include <boost/version.hpp>
class qc_libboost : public ConfObj
{
public:
qc_libboost(Conf *c) : ConfObj(c) {}
QString name() const { return "libboost"; }
QString shortname() const { return "libboost"; }
QString findBoostLib(QString path, QString lib) const {
QString name;
QDir libDir(path);
QStringList filters;
filters << "libboost_"+lib+"*-mt*.so";
QStringList result = libDir.entryList(filters, QDir::Files);
if(!result.empty()) {
name = result.first().mid(3);
// Remove .so
name.chop(3);
} else {
// Fall back to non -mt boost lib
filters.clear();
filters << "libboost_"+lib+"*.so";
result = libDir.entryList(filters, QDir::Files);
if(!result.empty()) {
name = result.first().mid(3);
// Remove .so
name.chop(3);
}
}
return name;
}
bool exec(){
QString s;
s = conf->getenv("QC_WITH_LIBBOOST_INC");
@@ -51,6 +76,43 @@ public:
}
}
conf->addIncludePath(s);
// Find library
s = conf->getenv("QC_WITH_LIBBOOST_LIB");
QStringList required_libs;
#if BOOST_VERSION >= 103500
required_libs << "system";
#endif
if(conf->getenv("QC_DISABLE_GUI").isEmpty()) {
// Not required by nox
required_libs << "filesystem" << "thread";
}
QStringList libDirs;
libDirs << "/usr/lib/" << "/usr/lib64/" << "/usr/local/lib/" << "/usr/local/lib64/";
foreach(const QString& lib, required_libs) {
if(!s.isEmpty()) {
QString detected_name = findBoostLib(s, lib);
if(detected_name.isEmpty()) {
printf("Could not find boost %s library!\n", qPrintable(lib));
return false;
} else {
conf->addLib("-l"+detected_name);
}
} else {
bool found = false;
foreach(const QString& libDir, libDirs) {
QString detected_name = findBoostLib(libDir, lib);
if(!detected_name.isEmpty()) {
conf->addLib("-l"+detected_name);
found = true;
break;
}
}
if(!found) {
printf("Could not find boost %s library!\n", qPrintable(lib));
return false;
}
}
}
return true;
}
};

View File

@@ -22,16 +22,21 @@ public:
conf->addIncludePath(incs[n]);
//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. Some feature will be disabled because they require v%s.\n", version.toLocal8Bit().data(), adv_ver.toUtf8().data());
else
if(conf->findPkgConfig("libtorrent-rasterbar", mode, adv_ver, &version, &incs, &libs, &other)) {
//printf("\nWarning: libtorrent-rasterbar v%s was detected. Some feature will be disabled because they require v%s.\n", version.toLocal8Bit().data(), adv_ver.toUtf8().data());
//else
conf->addDefine("LIBTORRENT_0_15");
}
// Get linking parameters
QStringList params;
QByteArray staticlibs;
params << "--static" << "--libs" << "libtorrent-rasterbar";
conf->doCommand("pkg-config", params, &staticlibs);
conf->addLib(staticlibs.trimmed());
//QStringList params;
//QByteArray staticlibs;
//params << "--static" << "--libs" << "libtorrent-rasterbar";
//conf->doCommand("pkg-config", params, &staticlibs);
//conf->addLib(staticlibs.trimmed());
//libcrypto
if(conf->getenv("QC_DISABLE_GUI").isEmpty()) {
conf->addLib("-lcrypto");
}
return true;
}
};

View File

@@ -66,6 +66,11 @@
#include "propertieswidget.h"
#include "statusbar.h"
#ifdef Q_WS_WIN
#include <windows.h>
const int UNLEN = 256;
#endif
using namespace libtorrent;
#define TIME_TRAY_BALLOON 5000
@@ -117,6 +122,7 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
connect(BTSession, SIGNAL(newDownloadedTorrent(QString, QString)), this, SLOT(processDownloadedFiles(QString, QString)));
connect(BTSession, SIGNAL(downloadFromUrlFailure(QString, QString)), this, SLOT(handleDownloadFromUrlFailure(QString, QString)));
connect(BTSession, SIGNAL(alternativeSpeedsModeChanged(bool)), this, SLOT(updateAltSpeedsBtn(bool)));
connect(BTSession, SIGNAL(recursiveTorrentDownloadPossible(QTorrentHandle&)), this, SLOT(askRecursiveTorrentDownloadConfirmation(QTorrentHandle&)));
qDebug("create tabWidget");
tabs = new QTabWidget();
@@ -160,7 +166,15 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis
processParams(torrentCmdLine);
// Use a tcp server to allow only one instance of qBittorrent
localServer = new QLocalServer();
QString uid = QString::number(getuid());
QString uid = "";
#ifdef Q_WS_WIN
char buffer[UNLEN+1] = {0};
DWORD buffer_len = UNLEN + 1;
if (!GetUserNameA(buffer, &buffer_len))
uid = QString(buffer);
#else
uid = QString::number(getuid());
#endif
#ifdef Q_WS_X11
if(QFile::exists(QDir::tempPath()+QDir::separator()+QString("qBittorrent-")+uid)) {
// Socket was not closed cleanly
@@ -413,6 +427,12 @@ void GUI::readParamsOnSocket() {
}
}
void GUI::askRecursiveTorrentDownloadConfirmation(QTorrentHandle &h) {
if(QMessageBox::question(this, tr("Recursive download confirmation"), tr("The torrent %1 contains torrent files, do you want to proceed with their download?").arg(h.name()), QMessageBox::Yes|QMessageBox::No) == QMessageBox::Yes) {
BTSession->recursiveTorrentDownload(h);
}
}
void GUI::handleDownloadFromUrlFailure(QString url, QString reason) const{
// Display a message box
QMessageBox::critical(0, tr("Url download error"), tr("Couldn't download file at url: %1, reason: %2.").arg(url).arg(reason));
@@ -808,12 +828,7 @@ void GUI::trackerAuthenticationRequired(QTorrentHandle& h) {
void GUI::updateGUI() {
// update global informations
if(systrayIcon) {
#ifdef Q_WS_WIN
// Windows does not support html here
QString html =tr("DL speed: %1 KiB/s", "e.g: Download speed: 10 KiB/s").arg(QString::number(BTSession->getPayloadDownloadRate()/1024., 'f', 1));
html += "\n";
html += tr("UP speed: %1 KiB/s", "e.g: Upload speed: 10 KiB/s").arg(QString::number(BTSession->getPayloadUploadRate()/1024., 'f', 1));
#else
#if defined(Q_WS_X11) || defined(Q_WS_MAC)
QString html = "<div style='background-color: #678db2; color: #fff;height: 18px; font-weight: bold; margin-bottom: 5px;'>";
html += tr("qBittorrent");
html += "</div>";
@@ -823,6 +838,11 @@ void GUI::updateGUI() {
html += "<div style='vertical-align: baseline; height: 18px;'>";
html += "<img src=':/Icons/skin/seeding.png'/>&nbsp;"+tr("UP speed: %1 KiB/s", "e.g: Upload speed: 10 KiB/s").arg(QString::number(BTSession->getPayloadUploadRate()/1024., 'f', 1));
html += "</div>";
#else
// OSes such as Windows do not support html here
QString html =tr("DL speed: %1 KiB/s", "e.g: Download speed: 10 KiB/s").arg(QString::number(BTSession->getPayloadDownloadRate()/1024., 'f', 1));
html += "\n";
html += tr("UP speed: %1 KiB/s", "e.g: Upload speed: 10 KiB/s").arg(QString::number(BTSession->getPayloadUploadRate()/1024., 'f', 1));
#endif
systrayIcon->setToolTip(html); // tray icon
}

View File

@@ -116,6 +116,7 @@ protected slots:
void addUnauthenticatedTracker(const QPair<QTorrentHandle,QString> &tracker);
void processDownloadedFiles(QString path, QString url);
void finishedTorrent(QTorrentHandle& h) const;
void askRecursiveTorrentDownloadConfirmation(QTorrentHandle &h);
// Options slots
void on_actionOptions_triggered();
void optionsSaved();

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

View File

@@ -1,8 +1,9 @@
[Desktop Entry]
Categories=Qt;Network;P2P;
Comment=V2.2.0
Comment=V2.2.8
Exec=qbittorrent %f
GenericName=Bittorrent client
GenericName[ar]=العميل Bittorrent
GenericName[bg]=Торент клиент
GenericName[cs]=Bittorrent klient
GenericName[de]=Bittorren Client
@@ -10,6 +11,7 @@ GenericName[el]=Bittorrent πελάτης
GenericName[es]=Cliente Bittorrent
GenericName[fi]=Bittorrent-ohjelma
GenericName[fr]=Client Bittorrent
GenericName[hr]=Bittorrent klijent
GenericName[hu]=Bittorrent kliens
GenericName[it]=Client Bittorrent
GenericName[ja]=Bittorrent クライアント

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 910 B

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 680 B

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -62,11 +62,13 @@ class about : public QDialog, private Ui::AboutDlg{
te_translation->append(QString::fromUtf8("<a name='top'></a>"));
te_translation->append(tr("I would like to thank the following people who volunteered to translate qBittorrent:")+QString::fromUtf8("<br>"));
te_translation->append(QString::fromUtf8(
"<i>- <u>Brazilian:</u> Nick Marinho (nickmarinho@gmail.com)<br>\
"<i><u>Arabic:</u> SDERAWI (abz8868@msn.com) and sn51234 (nesseyan@gmail.com)<br>\
- <u>Brazilian:</u> Nick Marinho (nickmarinho@gmail.com)<br>\
- <u>Bulgarian:</u> Tsvetan & Boyko Bankoff (emerge_life@users.sourceforge.net)<br>\
- <u>Catalan:</u> Francisco Luque Contreras (frannoe@ya.com)<br>\
- <u>Chinese (Simplified):</u> Guo Yue (yue.guo0418@gmail.com)<br>\
- <u>Chinese (Traditional):</u> Yi-Shun Wang (dnextstep@gmail.com)<br>\
- <u>Croatian:</u> Oliver Mucafir (oliver.untwist@gmail.com)<br>\
- <u>Czech:</u> Jirka Vilim (web@tets.cz)<br>\
- <u>Danish:</u> Mathias Nielsen (comoneo@gmail.com)<br>\
- <u>Dutch:</u> Joost Schipper (heavyjoost@users.sourceforge.net) and Peter Koeleman (peter@peerweb.nl)<br>\
@@ -92,6 +94,9 @@ class about : public QDialog, private Ui::AboutDlg{
te_translation->scrollToAnchor(QString::fromUtf8("top"));
// License
te_license->append(QString::fromUtf8("<a name='top'></a>"));
#ifdef Q_WS_WIN
te_license->append(QString::fromUtf8("qBittorrent is licensed under the GNU General Public License version 2."));
#else
te_license->append(QString::fromUtf8("qBittorrent is licensed under the GNU General Public License version 2 with the\
addition of the following special exception:\
<br><br>\
@@ -438,6 +443,7 @@ exception statement from your version.</i>\
consider it more useful to permit linking proprietary applications with the<br>\
library. If this is what you want to do, use the GNU Library General<br>\
Public License instead of this License.<br>"));
#endif
te_license->scrollToAnchor(QString::fromUtf8("top"));
show();
}

File diff suppressed because it is too large Load Diff

View File

@@ -41,6 +41,7 @@
#include <QPalette>
#endif
#include <QPointer>
#include <QTimer>
#include <libtorrent/session.hpp>
#include <libtorrent/ip_filter.hpp>
@@ -115,6 +116,7 @@ public:
qlonglong getETA(QString hash);
bool useTemporaryFolder() const;
QString getDefaultSavePath() const;
ScanFoldersModel* getScanFoldersModel() const;
public slots:
QTorrentHandle addTorrent(QString path, bool fromScanDir = false, QString from_url = QString(), bool resumed = false);
@@ -133,7 +135,9 @@ public slots:
void resumeTorrent(QString hash);
void resumeAllTorrents();
/* End Web UI */
#ifndef LIBTORRENT_0_15
void saveDHTEntry();
#endif
void preAllocateAllFiles(bool b);
void saveFastResumeData();
void enableIPFilter(QString filter);
@@ -181,6 +185,7 @@ public slots:
void downloadFromURLList(const QStringList& urls);
void configureSession();
void banIP(QString ip);
void recursiveTorrentDownload(const QTorrentHandle &h);
protected:
QString getSavePath(QString hash, bool fromScanDir = false, QString filePath = QString());
@@ -192,6 +197,7 @@ protected slots:
void deleteBigRatios();
void takeETASamples();
void exportTorrentFiles(QString path);
void saveTempFastResumeData();
signals:
void addedTorrent(QTorrentHandle& h);
@@ -210,6 +216,7 @@ signals:
void savePathChanged(QTorrentHandle &h);
void newConsoleMessage(QString msg);
void alternativeSpeedsModeChanged(bool alternative);
void recursiveTorrentDownloadPossible(QTorrentHandle &h);
private:
// Bittorrent
@@ -219,6 +226,7 @@ private:
QMap<QUrl, QString> savepath_fromurl;
QHash<QString, QHash<QString, TrackerInfos> > trackersInfos;
QStringList torrentsToPausedAfterChecking;
QTimer resumeDataTimer;
// Ratio
QPointer<QTimer> BigRatioTimer;
// HTTP

View File

@@ -85,7 +85,7 @@ void createtorrent::on_addFolder_button_clicked(){
}
void createtorrent::on_addFile_button_clicked(){
QString file = QFileDialog::getOpenFileName(this, tr("Select a file to add to the torrent"), QDir::homePath(), QString(), 0, QFileDialog::ShowDirsOnly);
QString file = QFileDialog::getOpenFileName(this, tr("Select a file to add to the torrent"), QDir::homePath());
if(!file.isEmpty())
textInputPath->setText(file);
}
@@ -199,7 +199,7 @@ void createtorrent::handleCreationSuccess(QString path, const char* branch_path)
return;
}
QString hash = misc::toQString(t->info_hash());
TorrentTempData::setSavePath(hash, QString(branch_path));
TorrentTempData::setSavePath(hash, QString::fromLocal8Bit(branch_path));
#ifdef LIBTORRENT_0_15
// Enable seeding mode (do not recheck the files)
TorrentTempData::setSeedingMode(hash, true);

View File

@@ -53,34 +53,49 @@ public:
setFixedHeight(BAR_HEIGHT);
}
void setProgress(bitfield pieces) {
void setProgress(const bitfield &pieces, const bitfield &downloading_pieces) {
if(pieces.empty()) {
// Empty bar
QPixmap pix = QPixmap(1, 1);
pix.fill();
pixmap = pix;
} else {
int nb_pieces = pieces.size();
const int nb_pieces = pieces.size();
// Reduce the number of pieces before creating the pixmap
// otherwise it can crash when there are too many pieces
if(nb_pieces > width()) {
int ratio = floor(nb_pieces/(double)width());
QVector<bool> scaled_pieces;
const int ratio = floor(nb_pieces/(double)width());
std::vector<bool> scaled_pieces;
std::vector<bool> scaled_downloading;
for(int i=0; i<nb_pieces; i+= ratio) {
bool have = true;
for(int j=i; j<qMin(i+ratio, nb_pieces); ++j) {
if(!pieces[i]) { have = false; break; }
}
scaled_pieces << have;
scaled_pieces.push_back(have);
if(have) {
scaled_downloading.push_back(false);
} else {
bool downloading = false;
for(int j=i; j<qMin(i+ratio, nb_pieces); ++j) {
if(downloading_pieces[i]) { downloading = true; break; }
}
scaled_downloading.push_back(downloading);
}
}
QPixmap pix = QPixmap(scaled_pieces.size(), 1);
pix.fill();
QPainter painter(&pix);
for(int i=0; i<scaled_pieces.size(); ++i) {
if(scaled_pieces[i])
for(uint i=0; i<scaled_pieces.size(); ++i) {
if(scaled_pieces[i]) {
painter.setPen(Qt::blue);
else
painter.setPen(Qt::white);
} else {
if(scaled_downloading[i]) {
painter.setPen(Qt::yellow);
} else {
painter.setPen(Qt::white);
}
}
painter.drawPoint(i,0);
}
pixmap = pix;
@@ -89,10 +104,15 @@ public:
pix.fill();
QPainter painter(&pix);
for(uint i=0; i<pieces.size(); ++i) {
if(pieces[i])
if(pieces[i]) {
painter.setPen(Qt::blue);
else
painter.setPen(Qt::white);
} else {
if(downloading_pieces[i]) {
painter.setPen(Qt::yellow);
} else {
painter.setPen(Qt::white);
}
}
painter.drawPoint(i,0);
}
pixmap = pix;

View File

@@ -42,6 +42,9 @@ enum ProxyType {HTTP=1, SOCKS5=2, HTTP_PW=3, SOCKS5_PW=4, SOCKS4=5};
downloadThread::downloadThread(QObject* parent) : QObject(parent) {
networkManager = new QNetworkAccessManager(this);
connect(networkManager, SIGNAL(finished (QNetworkReply*)), this, SLOT(processDlFinished(QNetworkReply*)));
#ifndef QT_NO_OPENSSL
connect(networkManager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), this, SLOT(ignoreSslErrors(QNetworkReply*,QList<QSslError>)));
#endif
}
downloadThread::~downloadThread(){
@@ -51,7 +54,7 @@ downloadThread::~downloadThread(){
}
void downloadThread::processDlFinished(QNetworkReply* reply) {
QString url = reply->url().toString();
QString url = reply->url().toEncoded().data();
if(reply->error() != QNetworkReply::NoError) {
// Failure
emit downloadFailure(url, errorCodeToString(reply->error()));
@@ -213,3 +216,11 @@ QString downloadThread::errorCodeToString(QNetworkReply::NetworkError status) {
return tr("Unknown error");
}
}
#ifndef QT_NO_OPENSSL
void downloadThread::ignoreSslErrors(QNetworkReply* reply,QList<QSslError> errors) {
Q_UNUSED(errors)
// Ignore all SSL errors
reply->ignoreSslErrors();
}
#endif

View File

@@ -34,6 +34,7 @@
#include <QNetworkReply>
#include <QObject>
#include <QHash>
#include <QSslError>
class QNetworkAccessManager;
@@ -62,6 +63,9 @@ protected:
protected slots:
void processDlFinished(QNetworkReply* reply);
void checkDownloadSize(qint64 bytesReceived, qint64 bytesTotal);
#ifndef QT_NO_OPENSSL
void ignoreSslErrors(QNetworkReply*,QList<QSslError>);
#endif
};

View File

@@ -31,6 +31,7 @@
#include "eventmanager.h"
#include "bittorrent.h"
#include "scannedfoldersmodel.h"
#include "misc.h"
#include "preferences.h"
//#include "proplistdelegate.h"
@@ -129,10 +130,29 @@ void EventManager::setGlobalPreferences(QVariantMap m) const {
Preferences::setTempPathEnabled(m["temp_path_enabled"].toBool());
if(m.contains("temp_path"))
Preferences::setTempPath(m["temp_path"].toString());
if(m.contains("scan_dirs"))
Preferences::setScanDirs(m["scan_dirs"].toStringList());
if(m.contains("download_in_scan_dirs"))
Preferences::setDownloadInScanDirs(m["download_in_scan_dirs"].toList());
if(m.contains("scan_dirs") && m.contains("download_in_scan_dirs")) {
QVariantList download_at_path = m["download_in_scan_dirs"].toList();
QStringList old_folders = Preferences::getScanDirs();
QStringList new_folders = m["scan_dirs"].toStringList();
if(download_at_path.size() == new_folders.size()) {
Preferences::setScanDirs(new_folders);
Preferences::setDownloadInScanDirs(download_at_path);
foreach(const QString &old_folder, old_folders) {
// Update deleted folders
if(!new_folders.contains(old_folder)) {
BTSession->getScanFoldersModel()->removePath(old_folder);
}
}
int i = 0;
foreach(const QString &new_folder, new_folders) {
// Update new folders
if(!old_folders.contains(new_folder)) {
BTSession->getScanFoldersModel()->addPath(new_folder, download_at_path.at(i).toBool());
}
++i;
}
}
}
if(m.contains("export_dir"))
Preferences::setExportDir(m["export_dir"].toString());
if(m.contains("preallocate_all"))
@@ -169,6 +189,10 @@ void EventManager::setGlobalPreferences(QVariantMap m) const {
// Bittorrent
if(m.contains("dht"))
Preferences::setDHTEnabled(m["dht"].toBool());
if(m.contains("dhtSameAsBT"))
Preferences::setDHTPortSameAsBT(m["dhtSameAsBT"].toBool());
if(m.contains("dht_port"))
Preferences::setDHTPort(m["dht_port"].toInt());
if(m.contains("pex"))
Preferences::setPeXEnabled(m["pex"].toBool());
qDebug("Pex support: %d", (int)m["pex"].toBool());
@@ -254,6 +278,8 @@ QVariantMap EventManager::getGlobalPreferences() const {
data["max_uploads_per_torrent"] = Preferences::getMaxUploadsPerTorrent();
// Bittorrent
data["dht"] = Preferences::isDHTEnabled();
data["dhtSameAsBT"] = Preferences::isDHTPortSameAsBT();
data["dht_port"] = Preferences::getDHTPort();
data["pex"] = Preferences::isPeXEnabled();
data["lsd"] = Preferences::isLSDEnabled();
data["encryption"] = Preferences::getEncryptionSetting();

View File

@@ -2,10 +2,10 @@
#define FILESYSTEMWATCHER_H
#include <QFileSystemWatcher>
#include <QDir>
#ifndef Q_WS_WIN
#include <QTimer>
#include <QDir>
#include <QPointer>
#include <QStringList>
#include <QSet>
@@ -180,6 +180,7 @@ protected slots:
}
void scanNetworkFolders() {
#ifndef Q_WS_WIN
qDebug("scanNetworkFolders() called");
QStringList torrents;
// Network folders scan
@@ -192,6 +193,7 @@ protected slots:
qDebug("The following files are being reported: %s", qPrintable(torrents.join("\n")));
emit torrentsAdded(torrents);
}
#endif
}
signals:

View File

@@ -188,6 +188,7 @@ public:
if(iso[1] == 'S') return QIcon(":/Icons/flags/serbia.png");
break;
case 'S':
if(iso[1] == 'A') return QIcon(":/Icons/flags/saoudi_arabia.png");
if(iso[1] == 'E') return QIcon(":/Icons/flags/sweden.png");
if(iso[1] == 'K') return QIcon(":/Icons/flags/slovakia.png");
if(iso[1] == 'G') return QIcon(":/Icons/flags/singapore.png");

View File

@@ -104,7 +104,7 @@ void HttpConnection::write()
}
QString HttpConnection::translateDocument(QString data) {
std::string contexts[] = {"TransferListFiltersWidget", "TransferListWidget", "PropertiesWidget", "GUI", "MainWindow", "HttpServer", "confirmDeletionDlg", "TrackerList", "TorrentFilesModel", "options_imp", "Preferences", "TrackersAdditionDlg"};
std::string contexts[] = {"TransferListFiltersWidget", "TransferListWidget", "PropertiesWidget", "GUI", "MainWindow", "HttpServer", "confirmDeletionDlg", "TrackerList", "TorrentFilesModel", "options_imp", "Preferences", "TrackersAdditionDlg", "ScanFoldersModel"};
int i=0;
bool found = false;
do {
@@ -119,7 +119,7 @@ QString HttpConnection::translateDocument(QString data) {
do {
translation = qApp->translate(contexts[context_index].c_str(), word.toLocal8Bit().constData(), 0, QCoreApplication::UnicodeUTF8, 1);
++context_index;
}while(translation == word && context_index < 12);
}while(translation == word && context_index < 13);
//qDebug("Translation is %s", translation.toUtf8().data());
data = data.replace(i, regex.matchedLength(), translation);
i += translation.length();
@@ -140,6 +140,14 @@ void HttpConnection::respond() {
return;
}
QString auth = parser.value("Authorization");
if(auth.isEmpty()) {
// Return unauthorized header
qDebug("Auth is Empty...");
generator.setStatusLine(401, "Unauthorized");
generator.setValue("WWW-Authenticate", "Digest realm=\""+QString(QBT_REALM)+"\", nonce=\""+parent->generateNonce()+"\", opaque=\""+parent->generateNonce()+"\", stale=\"false\", algorithm=\"MD5\", qop=\"auth\"");
write();
return;
}
qDebug("Auth: %s", qPrintable(auth.split(" ").first()));
if (QString::compare(auth.split(" ").first(), "Digest", Qt::CaseInsensitive) != 0 || !parent->isAuthorized(auth.toLocal8Bit(), parser.method())) {
// Update failed attempt counter

View File

@@ -259,7 +259,7 @@ bool HttpServer::isAuthorized(QByteArray auth, QString method) const {
md5_ha.addData(password_ha1+":"+prop_nonce+":"+ha2);
response = md5_ha.result().toHex();
}
qDebug("AUTH: comparing reponses");
qDebug("AUTH: comparing reponses: (%d)", static_cast<int>(prop_response == response));
return prop_response == response;
}

View File

@@ -1,6 +1,5 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>Icons/slow48.png</file>
<file>Icons/rss32.png</file>
<file>Icons/sphere2.png</file>
<file>Icons/downarrow.png</file>
@@ -122,6 +121,7 @@
<file>Icons/flags/egypt.png</file>
<file>Icons/flags/italy.png</file>
<file>Icons/flags/south_korea.png</file>
<file>Icons/flags/saoudi_arabia.png</file>
<file>Icons/flags/bosnia.png</file>
<file>Icons/flags/japan.png</file>
<file>Icons/flags/malaysia.png</file>

View File

@@ -113,7 +113,24 @@ namespace json {
if(json.startsWith("{") && json.endsWith("}")) {
json.chop(1);
json = json.replace(0, 1, "");
QStringList couples = json.split(",");
QStringList couples;
QString tmp = "";
bool in_list = false;
foreach(QChar c, json) {
if(c == ',' && !in_list) {
couples << tmp;
tmp = "";
} else {
if(c == '[') {
in_list = true;
} else {
if(c == ']') {
in_list = false;
}
}
tmp += c;
}
}
foreach(QString couple, couples) {
QStringList parts = couple.split(":");
if(parts.size() != 2) continue;
@@ -124,12 +141,29 @@ namespace json {
}
QString value_str = parts.last();
QVariant value;
if(value_str.startsWith("\"") && value_str.endsWith("\"")) {
if(value_str.startsWith("[") && value_str.endsWith("]")) {
value_str.chop(1);
value_str = value_str.replace(0, 1, "");
value = value_str;
value_str.replace(0, 1, "");
QStringList list_elems = value_str.split(",");
QVariantList varlist;
foreach(QString list_val, list_elems) {
if(list_val.startsWith("\"") && list_val.endsWith("\"")) {
list_val.chop(1);
list_val = list_val.replace(0, 1, "");
varlist << list_val;
} else {
varlist << list_val.toInt();
}
}
value = varlist;
} else {
value = value_str.toInt();
if(value_str.startsWith("\"") && value_str.endsWith("\"")) {
value_str.chop(1);
value_str = value_str.replace(0, 1, "");
value = value_str;
} else {
value = value_str.toInt();
}
}
m.insert(key,value);
qDebug("%s:%s", key.toLocal8Bit().data(), value_str.toLocal8Bit().data());

View File

@@ -7,6 +7,7 @@
<file>lang/qbittorrent_sv.qm</file>
<file>lang/qbittorrent_pl.qm</file>
<file>lang/qbittorrent_it.qm</file>
<file>lang/qbittorrent_ar.qm</file>
<file>lang/qbittorrent_ko.qm</file>
<file>lang/qbittorrent_en.qm</file>
<file>lang/qbittorrent_ro.qm</file>
@@ -20,6 +21,7 @@
<file>lang/qbittorrent_pt_BR.qm</file>
<file>lang/qbittorrent_el.qm</file>
<file>lang/qbittorrent_ca.qm</file>
<file>lang/qbittorrent_hr.qm</file>
<file>lang/qbittorrent_sr.qm</file>
<file>lang/qbittorrent_hu.qm</file>
<file>lang/qbittorrent_da.qm</file>

BIN
src/lang/qbittorrent_ar.qm Normal file

Binary file not shown.

4701
src/lang/qbittorrent_ar.ts Normal file

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More